@vibgrate/cli 2026.618.2 → 2026.623.2

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.
@@ -0,0 +1,323 @@
1
+ import {na as na$1,ua as ua$1}from'./chunk-I65B3ZRL.js';import {a}from'./chunk-MKDRULJ6.js';import {j as j$1,n,i,o,p,d}from'./chunk-XTHPCEME.js';import {b}from'./chunk-EK7ODJWE.js';import*as I from'path';import*as V from'fs/promises';import*as w from'typescript';var Y={healthyMax:33,elevatedMax:66},D={healthy:"#3FB0A4",elevated:"#D9A441",critical:"#D0463B"},na={healthy:"Healthy",elevated:"Elevated",critical:"Critical"};function X(e){return e==null||Number.isNaN(e)?null:e<=Y.healthyMax?"healthy":e<=Y.elevatedMax?"elevated":"critical"}function H(e){let a=X(e);return a?D[a]:"#6B7785"}function le(e){let a=X(e);return a?na[a]:"Not scored"}function de(e){return e==null||Number.isNaN(e)||e===0?"flat":e<0?"good":"bad"}function ce(e){if(e==null||Number.isNaN(e))return "\u2014";if(e===0)return "\xB1 0";let a=Math.abs(e);return e>0?`\u25B2 +${a}`:`\u25BC \u2212${a}`}var Ce=8;function ue(e){return `Q${Math.floor(e.getUTCMonth()/3)+1} ${e.getUTCFullYear()}`}function sa(e){return e<=30?30:e<=60?60:e<=90?90:180}function oa(e){return e>0?"breached":e>=-5?"at-risk":"on-track"}function ra(e){let a=e.kpis;if(!a||a.estateDriftScore==null)return "No scan data yet \u2014 run a scan to establish a baseline.";let s=e.budgets.filter(r=>r.current-r.budget>0).length,n=[],t=de(a.driftDelta);return t==="good"&&a.driftDelta!=null?n.push(`Portfolio drift improved ${Math.abs(a.driftDelta)} pts`):t==="bad"&&a.driftDelta!=null?n.push(`Portfolio drift rose ${a.driftDelta} pts`):n.push(`Portfolio drift held at ${a.estateDriftScore}`),s>0?n.push(`${s} ${s===1?"scope is":"scopes are"} over budget`):n.push("all scopes within budget"),`${n.join("; ")}.`}function ia(e){if(e.length<2)return null;let a=e[e.length-1],s=e[e.length-2],n=a.score-s.score;if(n<=0)return "At current pace, portfolio drift is flat or improving \u2014 no band crossing forecast.";let t=Y.healthyMax+1;if(a.score>=t)return "Portfolio is already in the amber band \u2014 prioritise remediation to return to healthy.";let r=Math.ceil((t-a.score)/n);return `At current pace, portfolio crosses into amber in ~${r} period${r===1?"":"s"}.`}function la(e){let a=e.generatedAt??new Date,s=e.period??ue(a),n=e.kpis,t=ca(e.trend),r=e.topRisks.slice(0,5).map((i,d)=>({rank:d+1,label:i.label,scope:i.scope,score:i.score,delta:i.delta??null,driver:i.driver,owner:i.owner})),o=e.budgets.map(i=>{let d=i.current-i.budget;return {...i,variance:d,state:oa(d)}}).sort((i,d)=>d.variance-i.variance),c=e.horizon.filter(i=>i.daysRemaining>=0).map(i=>({...i,lane:sa(i.daysRemaining)})).sort((i,d)=>i.daysRemaining-d.daysRemaining),u=o.filter(i=>i.state==="breached").length,p=e.benchmark?{...e.benchmark,anonymitySatisfied:e.benchmark.cohortSize>=Ce}:null;return {instanceId:`${s}-${(e.asOf??a.toISOString()).slice(0,10)}`,org:e.org,period:s,preparedFor:e.preparedFor,asOf:e.asOf??a.toISOString(),generatedAt:a.toISOString(),confidentiality:"Confidential",headline:{score:n?.estateDriftScore??null,priorScore:n?.priorScore??null,delta:n?.driftDelta??null,breachCount:u,verdict:ra(e)},commentary:e.commentary,trajectory:t,forecastNote:ia(t),risks:r,budgets:o,horizon:c,benchmark:p,roi:e.roi}}function ca(e){if(e.length===0)return [];let a=[...e].sort((t,r)=>t.day.localeCompare(r.day)),s=[],n=null;for(let t of a){let r=Math.round(t.avg_score),o=n==null?0:r-n;s.push({period:t.day,score:r,added:o>0?o:0,remediated:o<0?-o:0}),n=r;}return s}var N={navy:"#182346",teal:"#3FB0A4",ink:"#0E2330",paper:"#F4F6F5"};function x(e){return e==null?"":String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function we(e,a){if(!e)return "\u2014";try{return new Date(e).toLocaleDateString(a,{year:"numeric",month:"short",day:"numeric"})}catch{return x(e)}}function Re(e,a){if(!e)return "\u2014";try{return new Date(e).toLocaleString(a,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",timeZoneName:"short"})}catch{return x(e)}}function pa(e){if(e.length<2)return '<div class="chart-empty">Baseline established \u2014 trend available next cycle.</div>';let t=e.map(b=>b.score),r=Math.min(...t,0),c=Math.max(...t,100)-r||1,u=592/(e.length-1),p=b=>24+b*u,i=b=>156-(b-r)/c*132,d=e.map((b,C)=>`${C===0?"M":"L"}${p(C).toFixed(1)},${i(b.score).toFixed(1)}`).join(" "),g=e[e.length-1],m=e[e.length-2],y=g.score-m.score,l={x:p(e.length-1)+u,v:g.score+y},f={x:l.x+u,v:g.score+y*2},h=`M${p(e.length-1).toFixed(1)},${i(g.score).toFixed(1)} L${l.x.toFixed(1)},${i(l.v).toFixed(1)} L${f.x.toFixed(1)},${i(f.v).toFixed(1)}`,k=i(34),v=e.map((b,C)=>`<circle cx="${p(C).toFixed(1)}" cy="${i(b.score).toFixed(1)}" r="2.5" fill="${H(b.score)}" />`).join("");return `<svg viewBox="0 0 ${640+u*2} 180" width="100%" role="img" aria-label="DriftScore trend with forecast">
2
+ <line x1="24" y1="${k.toFixed(1)}" x2="${640+u*2-24}" y2="${k.toFixed(1)}" stroke="${D.elevated}" stroke-width="1" stroke-dasharray="2 3" opacity="0.6" />
3
+ <path d="${d}" fill="none" stroke="${N.teal}" stroke-width="2.5" />
4
+ <path d="${h}" fill="none" stroke="${N.teal}" stroke-width="2" stroke-dasharray="4 4" opacity="0.7" />
5
+ ${v}
6
+ </svg>`}function da(e){let a=e.slice(-12);if(a.length<3)return "";let s=640,n=140,t=n/2,r=Math.max(1,...a.map(p=>Math.max(p.added,p.remediated))),o=(s-40)/a.length,c=Math.min(28,Math.max(4,o*.5)),u=a.map((p,i)=>{let d=20+i*o+o/2,g=p.added/r*(t-12),m=p.remediated/r*(t-12);return `
7
+ <rect x="${(d-c/2).toFixed(1)}" y="${(t-g).toFixed(1)}" width="${c.toFixed(1)}" height="${g.toFixed(1)}" fill="${D.critical}" />
8
+ <rect x="${(d-c/2).toFixed(1)}" y="${t.toFixed(1)}" width="${c.toFixed(1)}" height="${m.toFixed(1)}" fill="${N.teal}" />`}).join("");return `<svg viewBox="0 0 ${s} ${n}" width="100%" role="img" aria-label="Drift added versus remediated per period">
9
+ ${u}
10
+ <line x1="20" y1="${t}" x2="${s-20}" y2="${t}" stroke="${N.ink}" stroke-width="1" opacity="0.3" />
11
+ </svg>`}function ua(e){let a=Math.min(100,Math.round(e.current/Math.max(e.budget,1)*100)),s=e.state==="breached"?D.critical:e.state==="at-risk"?D.elevated:D.healthy,n=e.state==="breached"?"Breached":e.state==="at-risk"?"At risk":"On track";return `<tr>
12
+ <td>${x(e.scope)}</td>
13
+ <td class="num">${e.current}</td>
14
+ <td class="num">${e.budget}</td>
15
+ <td class="num">${e.variance>0?"+":""}${e.variance}</td>
16
+ <td>
17
+ <div class="bar-track"><div class="bar-fill" style="width:${a}%;background:${s}"></div></div>
18
+ <span class="state" style="color:${s}">${n}</span>
19
+ </td>
20
+ </tr>`}function Se(e,a,s,n){return `<footer class="page-footer">
21
+ <span>As of ${Re(e.asOf,n)}</span>
22
+ <span><a href="https://docs.vibgrate.com/methodology">Methodology</a> \xB7 ${x(e.confidentiality)}</span>
23
+ <span class="num">Page ${a} / ${s}</span>
24
+ </footer>`}function fa(e,a={}){let{locale:s,watermark:n}=a,t=X(e.headline.score),r=H(e.headline.score),o=de(e.headline.delta),c=o==="good"?D.healthy:o==="bad"?D.critical:"#6B7785",u=2,p=e.risks.length?e.risks.map(h=>`<tr>
25
+ <td class="num">${h.rank}</td>
26
+ <td>${x(h.label)}${h.scope?`<br><span class="muted">${x(h.scope)}</span>`:""}</td>
27
+ <td class="num" style="color:${H(h.score)}">${h.score} <span class="band">${le(h.score)}</span></td>
28
+ <td class="num">${h.delta==null?"\u2014":ce(h.delta)}</td>
29
+ <td>${x(h.driver)}</td>
30
+ <td>${x(h.owner??"\u2014")}</td>
31
+ </tr>`).join(""):'<tr><td colspan="6" class="muted">No repositories at risk this period.</td></tr>',i=[30,60,90,180].map(h=>{let k=e.horizon.filter(b=>b.lane===h),v=k.length?k.map(b=>`<li><strong class="num">${b.daysRemaining}d</strong> ${x(b.item)} <span class="muted">\u2192 ${x(b.affected)}</span></li>`).join(""):'<li class="muted">\u2014</li>';return `<div class="lane"><h4>${h}-day</h4><ul>${v}</ul></div>`}).join(""),d=e.benchmark,g=d?d.anonymitySatisfied?`<div class="bench">
32
+ <div><span class="big num" style="color:${H(d.score)}">${d.score}</span><label>Your portfolio</label></div>
33
+ <div><span class="big num">${d.percentile}<sup>th</sup></span><label>Percentile in cohort (n=${d.cohortSize})</label></div>
34
+ <div><span class="big num">${d.cohortMedian}</span><label>Cohort median</label></div>
35
+ </div>
36
+ <p class="footnote">Scores only \u2014 no source leaves the estate. Cohort anonymised by size/industry; methodology linked in the footer.</p>`:`<p class="muted">Cohort too small to report anonymously (need \u2265 8, have ${d.cohortSize}).</p>`:'<p class="muted">Peer benchmark unavailable.</p>',m=e.commentary,y=m?`<div class="commentary">
37
+ <p>${x(m.body).replace(/\n/g,"<br>")}</p>
38
+ <p class="attribution">Commentary by ${x(m.authorName)}, ${x(m.authorRole)} \xB7 ${we(m.savedAt,s)}</p>
39
+ </div>`:'<div class="commentary empty">Add your read for the board\u2026</div>',l=e.roi,f=`<div class="kpi-strip">
40
+ <div><span class="big num">${l.debtRetired??"\u2014"}</span><label>Debt retired</label></div>
41
+ <div><span class="big num">${l.mttrDays??"\u2014"}${l.mttrDays!=null?"d":""}</span><label>Drift MTTR</label></div>
42
+ <div><span class="big num">${l.verifiedFixes??"\u2014"}</span><label>Verified fixes</label></div>
43
+ </div>`;return `<!doctype html>
44
+ <html lang="${x(s??"en")}">
45
+ <head>
46
+ <meta charset="utf-8" />
47
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
48
+ <title>Executive Drift Posture \u2014 ${x(e.org)} \u2014 ${x(e.period)}</title>
49
+ <style>
50
+ @page { size: A4; margin: 24mm; }
51
+ @media print { html, body { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }
52
+ :root { --navy:${N.navy}; --teal:${N.teal}; --ink:${N.ink}; --paper:${N.paper}; }
53
+ * { box-sizing: border-box; }
54
+ body { margin:0; background:#fff; color:var(--ink); font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif; font-size:11px; line-height:1.45; }
55
+ .num { font-family:'SFMono-Regular',ui-monospace,'JetBrains Mono',Menlo,monospace; font-variant-numeric:tabular-nums; }
56
+ td.num, th.num { text-align:right; }
57
+ h1,h2,h3,h4 { font-family:'Inter',system-ui,sans-serif; color:var(--navy); margin:0; }
58
+ a { color:var(--teal); text-decoration:none; }
59
+ .muted { color:#6B7785; }
60
+ section { break-inside:avoid; margin-bottom:18px; }
61
+ h2 { font-size:13px; text-transform:uppercase; letter-spacing:0.06em; border-bottom:2px solid var(--teal); padding-bottom:4px; margin-bottom:10px; }
62
+
63
+ .cover { background:var(--navy); color:#fff; padding:20px 24px; border-radius:8px; margin-bottom:20px; display:flex; justify-content:space-between; align-items:flex-start; }
64
+ .cover .logo { font-weight:700; letter-spacing:0.04em; color:var(--mint,#4FE3C1); }
65
+ .cover h1 { color:#fff; font-size:22px; margin:6px 0; }
66
+ .cover .meta { text-align:right; font-size:10px; color:#A9B6C4; }
67
+ .cover .conf { display:inline-block; margin-top:6px; border:1px solid #4FE3C1; color:#4FE3C1; border-radius:4px; padding:1px 6px; font-size:9px; text-transform:uppercase; letter-spacing:0.08em; }
68
+
69
+ .headline { display:flex; gap:20px; align-items:center; }
70
+ .headline .score { font-size:64px; font-weight:800; line-height:1; }
71
+ .headline .pill { display:inline-block; border:1px solid currentColor; border-radius:999px; padding:2px 10px; font-size:10px; text-transform:uppercase; letter-spacing:0.06em; }
72
+ .headline .delta { font-size:14px; font-weight:600; }
73
+ .verdict { font-size:13px; color:var(--navy); margin-top:6px; }
74
+
75
+ .commentary { border-left:3px solid var(--teal); background:var(--paper); padding:10px 14px; border-radius:0 6px 6px 0; margin-top:12px; }
76
+ .commentary.empty { color:#9AA7B4; font-style:italic; }
77
+ .attribution { font-size:10px; color:#6B7785; margin:8px 0 0; }
78
+
79
+ table { width:100%; border-collapse:collapse; }
80
+ th { text-align:left; font-size:9px; text-transform:uppercase; letter-spacing:0.05em; color:#6B7785; border-bottom:1px solid #D7DEDC; padding:5px 6px; }
81
+ td { padding:5px 6px; border-bottom:1px solid #ECEFEE; vertical-align:top; }
82
+ tr { break-inside:avoid; }
83
+ .band { font-size:8px; text-transform:uppercase; letter-spacing:0.04em; color:#6B7785; }
84
+
85
+ .bar-track { height:7px; background:#ECEFEE; border-radius:4px; overflow:hidden; display:inline-block; width:90px; vertical-align:middle; }
86
+ .bar-fill { height:100%; }
87
+ .state { font-size:9px; margin-left:6px; }
88
+
89
+ .lanes { display:flex; gap:10px; }
90
+ .lane { flex:1; background:var(--paper); border-radius:6px; padding:8px 10px; }
91
+ .lane h4 { font-size:10px; color:var(--teal); margin-bottom:4px; }
92
+ .lane ul { margin:0; padding-left:14px; }
93
+ .lane li { font-size:10px; margin-bottom:3px; }
94
+
95
+ .bench { display:flex; gap:24px; }
96
+ .bench .big, .kpi-strip .big { font-size:30px; font-weight:800; color:var(--navy); }
97
+ .bench label, .kpi-strip label { display:block; font-size:9px; text-transform:uppercase; letter-spacing:0.05em; color:#6B7785; }
98
+ .footnote { font-size:9px; color:#6B7785; margin-top:6px; }
99
+ .kpi-strip { display:flex; gap:32px; }
100
+
101
+ .chart-empty { background:var(--paper); border-radius:6px; padding:16px; text-align:center; color:#6B7785; font-style:italic; }
102
+ .callout { font-size:11px; color:var(--navy); background:var(--paper); border-radius:6px; padding:8px 10px; margin-top:8px; }
103
+
104
+ .page-footer { display:flex; justify-content:space-between; font-size:9px; color:#6B7785; border-top:1px solid #D7DEDC; padding-top:6px; margin-top:24px; }
105
+ .watermark { position:fixed; top:45%; left:0; right:0; text-align:center; font-size:42px; color:rgba(24,35,70,0.06); transform:rotate(-24deg); pointer-events:none; z-index:0; }
106
+ </style>
107
+ </head>
108
+ <body>
109
+ ${n?`<div class="watermark">${x(n)}</div>`:""}
110
+
111
+ <div class="cover">
112
+ <div>
113
+ <div class="logo">VIBGRATE</div>
114
+ <h1>Executive Drift Posture</h1>
115
+ <div>${x(e.org)} \xB7 ${x(e.period)}</div>
116
+ </div>
117
+ <div class="meta">
118
+ Prepared for ${x(e.preparedFor)}<br>
119
+ As of ${we(e.asOf,s)}<br>
120
+ Generated ${Re(e.generatedAt,s)}<br>
121
+ <span class="conf">${x(e.confidentiality)}</span>
122
+ </div>
123
+ </div>
124
+
125
+ <section>
126
+ <h2>Headline</h2>
127
+ <div class="headline">
128
+ <div class="score" style="color:${r}">${e.headline.score??"\u2014"}</div>
129
+ <div>
130
+ <span class="pill" style="color:${r}">${t?le(e.headline.score):"Not scored"}</span>
131
+ <span class="delta num" style="color:${c}; margin-left:8px">${ce(e.headline.delta)} <span class="muted">QoQ</span></span>
132
+ <div class="verdict">${x(e.headline.verdict)}</div>
133
+ </div>
134
+ </div>
135
+ ${y}
136
+ </section>
137
+
138
+ <section>
139
+ <h2>Trajectory \u2014 are we winning?</h2>
140
+ ${pa(e.trajectory)}
141
+ ${da(e.trajectory)}
142
+ ${e.forecastNote?`<div class="callout">${x(e.forecastNote)}</div>`:""}
143
+ </section>
144
+
145
+ <section>
146
+ <h2>Top risks</h2>
147
+ <table>
148
+ <thead><tr><th class="num">#</th><th>Application / BU</th><th class="num">Score</th><th class="num">\u0394</th><th>Primary driver</th><th>Owner</th></tr></thead>
149
+ <tbody>${p}</tbody>
150
+ </table>
151
+ </section>
152
+
153
+ ${Se(e,1,u,s)}
154
+
155
+ <section style="break-before:page">
156
+ <h2>Budget breaches</h2>
157
+ <table>
158
+ <thead><tr><th>Scope</th><th class="num">Current</th><th class="num">Budget</th><th class="num">Variance</th><th>Status</th></tr></thead>
159
+ <tbody>${e.budgets.length?e.budgets.map(ua).join(""):'<tr><td colspan="5" class="muted">No budgets defined.</td></tr>'}</tbody>
160
+ </table>
161
+ </section>
162
+
163
+ <section>
164
+ <h2>EOL / risk horizon</h2>
165
+ <div class="lanes">${i}</div>
166
+ </section>
167
+
168
+ <section>
169
+ <h2>Peer benchmark</h2>
170
+ ${g}
171
+ </section>
172
+
173
+ <section>
174
+ <h2>Remediation / ROI</h2>
175
+ ${f}
176
+ </section>
177
+
178
+ ${Se(e,2,u,s)}
179
+ </body>
180
+ </html>`}var G={compliantMin:90,atRiskMin:70},xe={Critical:1,High:2,Medium:3,Low:4};function pe(e){return e==null||Number.isNaN(e)?"non-compliant":e>=G.compliantMin?"compliant":e>=G.atRiskMin?"at-risk":"non-compliant"}function ma(e){let a=e.trim().toLowerCase();return a==="critical"?"Critical":a==="high"?"High":a==="low"?"Low":"Medium"}function ga(e,a,s,n){if(e==null||a===0)return "No scan data yet \u2014 run a scan to establish a compliance baseline.";let t=[`Overall compliance ${e}% across ${a} framework${a===1?"":"s"}`];return s>0?t.push(`${s} open gap${s===1?"":"s"}`):t.push("no open gaps"),n>0&&t.push(`${n} critical finding${n===1?"":"s"}`),`${t.join("; ")}.`}function ya(e){let a=e.generatedAt??new Date,s=e.period??ue(a),n=e.kpis,t=e.frameworks.map(d=>{let g=Math.max(0,Math.min(100,Math.round(d.compliancePct)));return {framework:d.framework,compliancePct:g,gapCount:Math.max(0,d.gapCount),state:pe(g)}}).sort((d,g)=>d.compliancePct-g.compliancePct),r=e.controls.map(d=>{let g=Math.max(0,Math.min(100,Math.round(d.coveragePct)));return {control:d.control,framework:d.framework,coveragePct:g,gapCount:Math.max(0,d.gapCount),state:pe(g)}}).sort((d,g)=>d.coveragePct-g.coveragePct),o=e.findings.map(d=>({rank:0,title:d.title,severity:ma(d.severity),category:d.category,scope:d.scope,owner:d.owner,status:d.status})).sort((d,g)=>xe[d.severity]-xe[g.severity]).slice(0,8).map((d,g)=>({...d,rank:g+1})),c=t.length?Math.round(t.reduce((d,g)=>d+g.compliancePct,0)/t.length):null,u=n?.driftDelta==null?null:-Math.round(n.driftDelta),p=n?.gapCount??0,i=n?.criticalCount??o.filter(d=>d.severity==="Critical").length;return {instanceId:`compliance-${s}-${(e.asOf??a.toISOString()).slice(0,10)}`,org:e.org,period:s,preparedFor:e.preparedFor,asOf:e.asOf??a.toISOString(),generatedAt:a.toISOString(),confidentiality:"Confidential",headline:{postureScore:c,delta:u,gapCount:p,policyViolations:n?.policyViolations??0,criticalCount:i,verdict:ga(c,t.length,p,i)},repositoryCount:n?.repositoryCount??0,frameworks:t,controls:r,findings:o}}var Z={navy:"#182346",teal:"#3FB0A4",ink:"#0E2330",paper:"#F4F6F5"},z={compliant:"#3FB0A4","at-risk":"#D9A441","non-compliant":"#D0463B"},ha={compliant:"Compliant","at-risk":"At risk","non-compliant":"Non-compliant"},Te={Critical:"#D0463B",High:"#D9A441",Medium:"#6B7785",Low:"#3FB0A4"};function va(e){return e==null?"#6B7785":e>=G.compliantMin?z.compliant:e>=G.atRiskMin?z["at-risk"]:z["non-compliant"]}function ka(e){return e==null?"Not scored":e>=G.compliantMin?"Compliant":e>=G.atRiskMin?"At risk":"Non-compliant"}function ba(e){if(e==null||Number.isNaN(e))return "\u2014";if(e===0)return "\xB1 0";let a=Math.abs(e);return e>0?`\u25B2 +${a}`:`\u25BC \u2212${a}`}function wa(e){return e==null||e===0?"#6B7785":e>0?z.compliant:z["non-compliant"]}function Sa(e,a){if(!e)return "\u2014";try{return new Date(e).toLocaleDateString(a,{year:"numeric",month:"short",day:"numeric"})}catch{return x(e)}}function Pe(e,a){if(!e)return "\u2014";try{return new Date(e).toLocaleString(a,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",timeZoneName:"short"})}catch{return x(e)}}function Ae(e,a){let s=z[a];return `<div class="bar-track"><div class="bar-fill" style="width:${Math.max(0,Math.min(100,e))}%;background:${s}"></div></div>
181
+ <span class="state" style="color:${s}">${ha[a]}</span>`}function xa(e){return `<tr>
182
+ <td>${x(e.framework)}</td>
183
+ <td class="num" style="color:${z[e.state]}">${e.compliancePct}%</td>
184
+ <td class="num">${e.gapCount}</td>
185
+ <td>${Ae(e.compliancePct,e.state)}</td>
186
+ </tr>`}function ja(e){return `<tr>
187
+ <td>${x(e.control)}<br><span class="muted">${x(e.framework)}</span></td>
188
+ <td class="num" style="color:${z[e.state]}">${e.coveragePct}%</td>
189
+ <td class="num">${e.gapCount}</td>
190
+ <td>${Ae(e.coveragePct,e.state)}</td>
191
+ </tr>`}function Ca(e){return `<tr>
192
+ <td class="num">${e.rank}</td>
193
+ <td>${x(e.title)}${e.scope?`<br><span class="muted">${x(e.scope)}</span>`:""}</td>
194
+ <td><span class="sev" style="color:${Te[e.severity]}">${e.severity}</span></td>
195
+ <td>${x(e.category)}</td>
196
+ <td>${x(e.owner??"\u2014")}</td>
197
+ <td>${x(e.status)}</td>
198
+ </tr>`}function Ra(e,a){return `<div class="kpi-strip">
199
+ <div><span class="big num" style="color:${Te.Critical}">${e.criticalCount}</span><label>Critical findings</label></div>
200
+ <div><span class="big num">${e.gapCount}</span><label>Open gaps</label></div>
201
+ <div><span class="big num">${e.policyViolations}</span><label>Policy violations</label></div>
202
+ <div><span class="big num">${a}</span><label>Repos assessed</label></div>
203
+ </div>`}function je(e,a,s,n){return `<footer class="page-footer">
204
+ <span>As of ${Pe(e.asOf,n)}</span>
205
+ <span><a href="https://docs.vibgrate.com/methodology">Methodology</a> \xB7 ${x(e.confidentiality)}</span>
206
+ <span class="num">Page ${a} / ${s}</span>
207
+ </footer>`}function Ta(e,a={}){let{locale:s,watermark:n}=a,t=e.headline,r=va(t.postureScore),o=2,c=e.frameworks.length?e.frameworks.map(xa).join(""):'<tr><td colspan="4" class="muted">No framework scorecards available yet.</td></tr>',u=e.controls.length?e.controls.map(ja).join(""):'<tr><td colspan="4" class="muted">No control coverage available yet.</td></tr>',p=e.findings.length?e.findings.map(Ca).join(""):'<tr><td colspan="6" class="muted">No open findings this period.</td></tr>';return `<!doctype html>
208
+ <html lang="${x(s??"en")}">
209
+ <head>
210
+ <meta charset="utf-8" />
211
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
212
+ <title>Compliance &amp; Audit Evidence \u2014 ${x(e.org)} \u2014 ${x(e.period)}</title>
213
+ <style>
214
+ @page { size: A4; margin: 24mm; }
215
+ @media print { html, body { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }
216
+ :root { --navy:${Z.navy}; --teal:${Z.teal}; --ink:${Z.ink}; --paper:${Z.paper}; }
217
+ * { box-sizing: border-box; }
218
+ body { margin:0; background:#fff; color:var(--ink); font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif; font-size:11px; line-height:1.45; }
219
+ .num { font-family:'SFMono-Regular',ui-monospace,'JetBrains Mono',Menlo,monospace; font-variant-numeric:tabular-nums; }
220
+ td.num, th.num { text-align:right; }
221
+ h1,h2,h3,h4 { font-family:'Inter',system-ui,sans-serif; color:var(--navy); margin:0; }
222
+ a { color:var(--teal); text-decoration:none; }
223
+ .muted { color:#6B7785; }
224
+ section { break-inside:avoid; margin-bottom:18px; }
225
+ h2 { font-size:13px; text-transform:uppercase; letter-spacing:0.06em; border-bottom:2px solid var(--teal); padding-bottom:4px; margin-bottom:10px; }
226
+
227
+ .cover { background:var(--navy); color:#fff; padding:20px 24px; border-radius:8px; margin-bottom:20px; display:flex; justify-content:space-between; align-items:flex-start; }
228
+ .cover .logo { font-weight:700; letter-spacing:0.04em; color:var(--mint,#4FE3C1); }
229
+ .cover h1 { color:#fff; font-size:22px; margin:6px 0; }
230
+ .cover .meta { text-align:right; font-size:10px; color:#A9B6C4; }
231
+ .cover .conf { display:inline-block; margin-top:6px; border:1px solid #4FE3C1; color:#4FE3C1; border-radius:4px; padding:1px 6px; font-size:9px; text-transform:uppercase; letter-spacing:0.08em; }
232
+
233
+ .headline { display:flex; gap:20px; align-items:center; }
234
+ .headline .score { font-size:64px; font-weight:800; line-height:1; }
235
+ .headline .pill { display:inline-block; border:1px solid currentColor; border-radius:999px; padding:2px 10px; font-size:10px; text-transform:uppercase; letter-spacing:0.06em; }
236
+ .headline .delta { font-size:14px; font-weight:600; }
237
+ .verdict { font-size:13px; color:var(--navy); margin-top:6px; }
238
+
239
+ table { width:100%; border-collapse:collapse; }
240
+ th { text-align:left; font-size:9px; text-transform:uppercase; letter-spacing:0.05em; color:#6B7785; border-bottom:1px solid #D7DEDC; padding:5px 6px; }
241
+ td { padding:5px 6px; border-bottom:1px solid #ECEFEE; vertical-align:top; }
242
+ tr { break-inside:avoid; }
243
+
244
+ .bar-track { height:7px; background:#ECEFEE; border-radius:4px; overflow:hidden; display:inline-block; width:90px; vertical-align:middle; }
245
+ .bar-fill { height:100%; }
246
+ .state { font-size:9px; margin-left:6px; }
247
+ .sev { font-size:10px; font-weight:600; text-transform:uppercase; letter-spacing:0.04em; }
248
+
249
+ .kpi-strip { display:flex; gap:28px; margin-top:14px; }
250
+ .kpi-strip .big { font-size:30px; font-weight:800; color:var(--navy); }
251
+ .kpi-strip label { display:block; font-size:9px; text-transform:uppercase; letter-spacing:0.05em; color:#6B7785; }
252
+ .footnote { font-size:9px; color:#6B7785; margin-top:6px; }
253
+
254
+ .page-footer { display:flex; justify-content:space-between; font-size:9px; color:#6B7785; border-top:1px solid #D7DEDC; padding-top:6px; margin-top:24px; }
255
+ .watermark { position:fixed; top:45%; left:0; right:0; text-align:center; font-size:42px; color:rgba(24,35,70,0.06); transform:rotate(-24deg); pointer-events:none; z-index:0; }
256
+ </style>
257
+ </head>
258
+ <body>
259
+ ${n?`<div class="watermark">${x(n)}</div>`:""}
260
+
261
+ <div class="cover">
262
+ <div>
263
+ <div class="logo">VIBGRATE</div>
264
+ <h1>Compliance &amp; Audit Evidence</h1>
265
+ <div>${x(e.org)} \xB7 ${x(e.period)}</div>
266
+ </div>
267
+ <div class="meta">
268
+ Prepared for ${x(e.preparedFor)}<br>
269
+ As of ${Sa(e.asOf,s)}<br>
270
+ Generated ${Pe(e.generatedAt,s)}<br>
271
+ <span class="conf">${x(e.confidentiality)}</span>
272
+ </div>
273
+ </div>
274
+
275
+ <section>
276
+ <h2>Headline</h2>
277
+ <div class="headline">
278
+ <div class="score" style="color:${r}">${t.postureScore==null?"\u2014":`${t.postureScore}%`}</div>
279
+ <div>
280
+ <span class="pill" style="color:${r}">${ka(t.postureScore)}</span>
281
+ <span class="delta num" style="color:${wa(t.delta)}; margin-left:8px">${ba(t.delta)} <span class="muted">vs prior</span></span>
282
+ <div class="verdict">${x(t.verdict)}</div>
283
+ </div>
284
+ </div>
285
+ ${Ra(t,e.repositoryCount)}
286
+ </section>
287
+
288
+ <section>
289
+ <h2>Framework scorecards</h2>
290
+ <table>
291
+ <thead><tr><th>Framework</th><th class="num">Compliance</th><th class="num">Gaps</th><th>Status</th></tr></thead>
292
+ <tbody>${c}</tbody>
293
+ </table>
294
+ </section>
295
+
296
+ <section>
297
+ <h2>Control coverage</h2>
298
+ <table>
299
+ <thead><tr><th>Control</th><th class="num">Coverage</th><th class="num">Gaps</th><th>Status</th></tr></thead>
300
+ <tbody>${u}</tbody>
301
+ </table>
302
+ </section>
303
+
304
+ ${je(e,1,o,s)}
305
+
306
+ <section style="break-before:page">
307
+ <h2>Open findings register</h2>
308
+ <table>
309
+ <thead><tr><th class="num">#</th><th>Finding</th><th>Severity</th><th>Category</th><th>Owner</th><th>Status</th></tr></thead>
310
+ <tbody>${p}</tbody>
311
+ </table>
312
+ <p class="footnote">Scores, metadata and evidence pointers only \u2014 no source code leaves the estate. Findings synthesised from the latest scan per repository; methodology linked in the footer.</p>
313
+ </section>
314
+
315
+ ${je(e,2,o,s)}
316
+ </body>
317
+ </html>`}var _=b(a(),1);var Pa="riskscore-1.0";function q(e,a,s){return Math.min(s,Math.max(a,e))}function Aa(e){switch(e){case "low":return .7;case "high":return 1.15;case "critical":return 1.3;default:return 1}}function Ea(e){return e.kev?1:typeof e.epss=="number"&&!Number.isNaN(e.epss)?q(e.epss,0,1):q(e.cvss/10*.15,0,.15)}function Ia(e){return q(e.cvss/10,0,1)}function Ee(e){let a=1;for(let s of e)a*=1-q(s,0,1);return 1-a}function $n(e){let a=e.vulnerabilities??[],s=e.eolRuntimes??0,n=e.deprecatedPackages??0,t=q(e.hygienePenalty??0,0,1),r=a.length>0||s>0||n>0||t>0,o=[],c=a.map(f=>{let h=Ia(f)*Ea(f);return o.push({id:f.id,contribution:h*100,reason:f.kev?`Actively exploited (CISA KEV), CVSS ${f.cvss}`:`CVSS ${f.cvss}, EPSS ${typeof f.epss=="number"?f.epss.toFixed(2):"n/a"}`}),h}),u=Ee(c),p=s>0?q(.4+.15*(s-1),0,.85):0;s>0&&o.push({id:"eol-runtime",contribution:p*100,reason:`${s} end-of-life / unsupported runtime${s>1?"s":""}`});let i=n>0?q(.1+.03*n,0,.5):0;n>0&&o.push({id:"deprecated-packages",contribution:i*100,reason:`${n} deprecated / abandoned package${n>1?"s":""}`});let m=Ee([u,p,i])*Aa(e.businessCriticality)*100+t*10;a.some(f=>f.kev)&&(m=Math.max(m,80)),m=Math.round(q(m,0,100));let y;m>=80?y="critical":m>=50?y="high":m>=20?y="moderate":y="low";let l=o.sort((f,h)=>h.contribution-f.contribution).slice(0,10).map(f=>({...f,contribution:Math.round(f.contribution)}));return {score:m,riskLevel:y,topContributors:l,measured:r,methodologyVersion:Pa}}var Fa=[{slug:"adonet-4-8",name:"ADO.NET 4.8 Specification",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"aicpa-soc-2-tsc",name:"AICPA SOC 2 (Trust Services Criteria 2017, rev. 2022)",category:"compliance",domains:["security","governance","privacy"],frameworks:["soc2"],projectTypes:["any"],complianceRelevant:true,officialUrl:"https://www.aicpa-cima.com/resources/landing/system-and-organization-controls-soc-suite-of-services"},{slug:"amqp-1-0",name:"AMQP 1.0 (OASIS)",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"archimate-3-2",name:"Archimate 3.2",category:"modeling",domains:["architecture"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"argo-cd-appspec-v1",name:"Argo CD AppSpec v1",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"aria-1-3",name:"W3C ARIA 1.3",category:"accessibility",domains:["accessibility","frontend"],frameworks:[],projectTypes:["web-app","mobile"],complianceRelevant:true,officialUrl:null},{slug:"asyncapi-2-6",name:"AsyncAPI 2.6",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"avro-1-11",name:"Apache Avro 1.11",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"aws-well-architected-2023",name:"AWS Well-Architected Framework 2023",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"azure-waf-2024",name:"Azure Well-Architected Framework 2024",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"backstage-catalog-1-3",name:"Backstage Software Catalog 1.3",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"bgp-4",name:"BGP-4 (RFC 4271)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"bian-v10",name:"BIAN Service Landscape v10",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"bpmn-2-0-2",name:"BPMN 2.0.2",category:"modeling",domains:["architecture"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"bsimm-13",name:"BSIMM13",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"c11",name:"ISO/IEC 9899:2011 (C11)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"c18",name:"ISO/IEC 9899:2018 (C18)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"capec-3-9",name:"CAPEC v3.9",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"capnproto-0-9",name:"Cap\u2019n Proto 0.9",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"cbl-mariner-2-0",name:"CBL-Mariner OS Spec 2.0",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"cbor-rfc-8949",name:"CBOR (RFC 8949)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"ccpa",name:"CCPA (AB 375)",category:"compliance",domains:["security","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"cis-kubernetes-1-7",name:"CIS Benchmarks Kubernetes v1.7",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"cloudevents-1-0",name:"CloudEvents 1.0",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"cmmi-v2-0",name:"CMMI v2.0",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"cmmn-1-1",name:"CMMN 1.1",category:"modeling",domains:["architecture"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"cncf-cloud-native-v1",name:"CNCF Cloud-Native Definition v1",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"commonmark-0-30",name:"CommonMark 0.30",category:"documentation",domains:["documentation"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"cpp-14",name:"ISO/IEC 14882:2014 (C++14)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"cpp-17",name:"ISO/IEC 14882:2017 (C++17)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"cpp-20",name:"ISO/IEC 14882:2020 (C++20)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"cpp-23",name:"ISO/IEC 14882:2023 (C++23)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"csharp-11",name:"ECMA-334 6th (C# 11)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"csharp-2-0",name:"ISO/IEC 23270:2006 (C# 2.0)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"csv-rfc-4180",name:"CSV (RFC 4180)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"cwe-4-11",name:"MITRE CWE 4.11",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"cwt-rfc-8392",name:"CBOR Web Token (RFC 8392)",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"cyclonedx-1-6",name:"CycloneDX 1.6 (SBOM)",category:"security",domains:["security"],frameworks:["nist-csf"],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"dicom-2024a",name:"DICOM PS3.0 2024a",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"did-core-1-0",name:"W3C DID Core 1.0",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"dmn-1-4",name:"DMN 1.4",category:"modeling",domains:["architecture"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"dns-rfc-1035",name:"DNS (RFC 1035)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"docker-compose-v3",name:"Docker Compose v3",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"dtd-1-2",name:"DTD 1.2",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"elixir-1-17",name:"Elixir 1.17",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"envoy-xds-v3",name:"Envoy xDS v3",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"erlang-26",name:"Erlang/OTP 26",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"eu-ai-act-2024",name:"EU AI Act Proposal 2024",category:"ai-governance",domains:["ai","governance"],frameworks:[],projectTypes:["ml","any"],complianceRelevant:true,officialUrl:null},{slug:"fedramp-moderate",name:"FedRAMP Moderate Rev 5",category:"compliance",domains:["security","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"fido2-webauthn-l2",name:"FIDO2 WebAuthn Level 2",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"fix-5-0-sp2",name:"FIX Protocol 5.0 SP2",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"flatbuffers-23-5",name:"FlatBuffers 23.5",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"ftps-rfc-4217",name:"FTPS (RFC 4217)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"gcp-architecture-2023",name:"Google Cloud Architecture Framework 2023",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"gdpr-eu-2016-679",name:"GDPR (EU 2016/679)",category:"compliance",domains:["security","governance"],frameworks:["gdpr"],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"git-spec",name:"Git Spec (Distributed VC)",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"gitops-principles-v1",name:"GitOps Principles v1",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"go-1-22",name:"Go 1.22 Spec",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"graphql-2023",name:"GraphQL July-2023 Spec",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"grpc-v1",name:"gRPC Protocol v1",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"haskell-2010",name:"Haskell 2010 Report",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"helm-chart-3-10",name:"Helm Chart Spec v3.10",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"hipaa-security-rule",name:"HIPAA Security Rule",category:"compliance",domains:["security","governance"],frameworks:["hipaa"],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"hl7-fhir-r5",name:"HL7 FHIR R5",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"http-1-0",name:"HTTP/1.0 (RFC 1945)",category:"web-protocol",domains:["networking"],frameworks:[],projectTypes:["web-app","api"],complianceRelevant:false,officialUrl:null},{slug:"http-1-1",name:"HTTP/1.1 (RFC 7230\u20137235)",category:"web-protocol",domains:["networking"],frameworks:[],projectTypes:["web-app","api"],complianceRelevant:false,officialUrl:null},{slug:"http-2",name:"HTTP/2 (RFC 7540)",category:"web-protocol",domains:["networking"],frameworks:[],projectTypes:["web-app","api"],complianceRelevant:false,officialUrl:null},{slug:"http-3",name:"HTTP/3 (RFC 9114)",category:"web-protocol",domains:["networking"],frameworks:[],projectTypes:["web-app","api"],complianceRelevant:false,officialUrl:null},{slug:"http-3-rfc-9114",name:"HTTP/3 (RFC 9114)",category:"web-protocol",domains:["networking"],frameworks:[],projectTypes:["web-app","api"],complianceRelevant:false,officialUrl:"https://www.rfc-editor.org/rfc/rfc9114"},{slug:"iec-61850-ed2-1",name:"IEC 61850 Edition 2.1",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"ieee-1012-2016",name:"IEEE 1012-2016 (Verification & Validation)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"ieee-11073-20702",name:"IEEE 11073-20702",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"ieee-14764-2006",name:"IEEE 14764-2006 (Software Maintenance)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"ieee-2410-2019",name:"IEEE 2410-2019 (Bio-Open ID)",category:"biometric",domains:["security","identity"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"ieee-7001-2021",name:"IEEE 7001-2021 (AI Transparency)",category:"ai-governance",domains:["ai","governance"],frameworks:[],projectTypes:["ml","any"],complianceRelevant:true,officialUrl:null},{slug:"ieee-7002-2022",name:"IEEE 7002-2022 (AI Privacy Data)",category:"ai-governance",domains:["ai","governance"],frameworks:[],projectTypes:["ml","any"],complianceRelevant:true,officialUrl:null},{slug:"ieee-730-2014",name:"IEEE 730-2014 (Software Quality)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"ieee-802-11ax",name:"IEEE 802.11ax (Wi-Fi 6)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"ieee-802-15-4-2020",name:"IEEE 802.15.4-2020 (IoT WPAN)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"ieee-802-1q-2018",name:"IEEE 802.1Q-2018 (VLAN)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"ieee-802-3-2022",name:"IEEE 802.3-2022 (Ethernet)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"ieee-829-2008",name:"IEEE 829-2008 (Test Docs)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"incits-459-2011",name:"ANSI INCITS 459-2011 (JSON)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"ipv4",name:"IPv4 (RFC 791)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"ipv6",name:"IPv6 (RFC 8200)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"iso-12207-2017",name:"ISO/IEC 12207:2017",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-15288-2015",name:"ISO/IEC 15288:2015",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-15408-1-2022",name:"ISO/IEC 15408-1:2022 (Common Criteria)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-15504",name:"ISO/IEC 15504 (SPICE)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-15926-2",name:"ISO 15926 Part 2",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"iso-18013-5-2021",name:"ISO/IEC 18013-5:2021 (Mobile DL)",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"iso-19770-1-2017",name:"ISO/IEC 19770-1:2017 (IT Asset)",category:"quality-management",domains:["process","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-19794-5-2011",name:"ISO/IEC 19794-5:2011 (Face Images)",category:"biometric",domains:["security","identity"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-20022",name:"ISO 20022 (Financial Messaging)",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"iso-20922-2016",name:"ISO/IEC 20922:2016 (AMQP 1.0)",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"iso-21502-2020",name:"ISO 21502:2020 (Project Management)",category:"project-management",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-21504-2022",name:"ISO 21504:2022 (Portfolio Management)",category:"project-management",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-21511-2018",name:"ISO 21511:2018 (Work Breakdown Structure)",category:"project-management",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-22989-2022",name:"ISO/IEC 22989:2022 (AI Concepts)",category:"ai-governance",domains:["ai","governance"],frameworks:[],projectTypes:["ml","any"],complianceRelevant:true,officialUrl:null},{slug:"iso-23053-2022",name:"ISO/IEC 23053:2022 (AI Lifecycle)",category:"ai-governance",domains:["ai","governance"],frameworks:[],projectTypes:["ml","any"],complianceRelevant:true,officialUrl:null},{slug:"iso-23659-2024",name:"ISO/IEC 23659:2024 (AI Risk Mgmt)",category:"ai-governance",domains:["ai","governance"],frameworks:[],projectTypes:["ml","any"],complianceRelevant:true,officialUrl:null},{slug:"iso-2382",name:"ISO/IEC 2382 (IT Vocabulary)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-24772-2-2023",name:"ISO/IEC TR 24772-2:2023 (Safer Programming)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-25010-2023",name:"ISO/IEC 25010:2023 (Quality Model)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-27001-2022",name:"ISO/IEC 27001:2022",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-27002-2022",name:"ISO/IEC 27002:2022",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-27017-2015",name:"ISO/IEC 27017:2015 (Cloud Controls)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-27018-2019",name:"ISO/IEC 27018:2019 (Cloud PII)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-27701-2019",name:"ISO/IEC 27701:2019 (Privacy)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-29119-1-2022",name:"ISO/IEC 29119-1:2022 (Software Testing)",category:"software-process",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-29134-2017",name:"ISO/IEC 29134:2017 (PIA)",category:"compliance",domains:["security","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-29147-2018",name:"ISO/IEC 29147:2018 (Vuln Disclosure)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-30107-3-2017",name:"ISO/IEC 30107-3:2017 (PAD)",category:"biometric",domains:["security","identity"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-30111-2019",name:"ISO/IEC 30111:2019 (Vulnerability Handling)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-38500-2015",name:"ISO/IEC 38500:2015 (IT Governance)",category:"quality-management",domains:["process","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-38505-1-2017",name:"ISO/IEC 38505-1:2017 (Data Governance)",category:"compliance",domains:["security","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-40500-2012",name:"ISO/IEC 40500:2012 (WCAG 2.0)",category:"accessibility",domains:["accessibility","frontend"],frameworks:[],projectTypes:["web-app","mobile"],complianceRelevant:true,officialUrl:null},{slug:"iso-7816-4-2020",name:"ISO/IEC 7816-4:2020 (Smart Cards)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-8601-2019",name:"ISO 8601:2019 (Date/Time)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"iso-9001-2015",name:"ISO 9001:2015",category:"quality-management",domains:["process","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-9126",name:"ISO 9126 (Quality Model \u2013 Superseded)",category:"quality-management",domains:["process","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"iso-9798-3-2014",name:"ISO/IEC 9798-3:2014",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"iso-iec-27001-2022",name:"ISO/IEC 27001:2022",category:"compliance",domains:["security","governance"],frameworks:["gdpr","hipaa","iso-27001","soc2"],projectTypes:["any"],complianceRelevant:true,officialUrl:"https://www.iso.org/standard/27001"},{slug:"iso-iec-27002-2022",name:"ISO/IEC 27002:2022",category:"compliance",domains:["security"],frameworks:["iso-27001"],projectTypes:["any"],complianceRelevant:true,officialUrl:"https://www.iso.org/standard/75652.html"},{slug:"iso-iec-42001-2023",name:"ISO/IEC 42001:2023 (AI management system)",category:"ai-governance",domains:["ai","governance"],frameworks:[],projectTypes:["ml","any"],complianceRelevant:true,officialUrl:"https://www.iso.org/standard/81230.html"},{slug:"istio-api-1-21",name:"Istio API v1.21",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"jaeger-trace-v1",name:"Jaeger Trace Spec v1",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"java-se-17",name:"Java SE 17 (JSR 392)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"java-se-8",name:"Java SE 8 (JSR 337)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"javascript-es2024",name:"ECMA-262 2024 (ES2024)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"javascript-es6",name:"ECMA-262 2015 (ES6)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"jdbc-4-3",name:"JDBC 4.3",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"json-api-1-1",name:"JSON:API 1.1",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"json-rfc-8259",name:"JSON (RFC 8259)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"json-rpc-2-0",name:"JSON-RPC 2.0",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"json-schema-2020-12",name:"JSON Schema 2020-12",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"jws-rfc-7515",name:"RFC 7515 (JWS)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"jwt-rfc-7519",name:"JWT (RFC 7519)",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"kafka-protocol-3-7",name:"Kafka Protocol 3.7",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"kotlin-2-0",name:"Kotlin 2.0 Spec",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"kubernetes-1-28",name:"Kubernetes API v1.28",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"matter-1-3",name:"Matter 1.3",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"messagepack-2-3",name:"MessagePack 2.3",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"mitre-attack-v14",name:"MITRE ATT&CK v14",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"modbus-tcp-1-1b",name:"Modbus TCP 1.1b",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"mqtt-5-0",name:"MQTT 5.0 (OASIS)",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"nats-2-9",name:"NATS Protocol 2.9",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"nfs-4-1",name:"NFS 4.1 (RFC 8881)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"nist-800-171-r3",name:"NIST SP 800-171 Rev 3",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"nist-800-53-r5",name:"NIST SP 800-53 Rev 5",category:"security",domains:["security"],frameworks:["nist-csf"],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"nist-ai-rmf-1-0",name:"NIST AI RMF 1.0",category:"ai-governance",domains:["ai","governance"],frameworks:[],projectTypes:["ml","any"],complianceRelevant:true,officialUrl:null},{slug:"nist-ccra",name:"NIST Cloud Computing Ref Arch SP 500-292",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"nist-csf-2-0",name:"NIST Cybersecurity Framework (CSF) 2.0",category:"security",domains:["security","governance"],frameworks:["nist-csf"],projectTypes:["any"],complianceRelevant:true,officialUrl:"https://www.nist.gov/cyberframework"},{slug:"oas-json-schema-2020-12",name:"OpenAPI JSON Schema Dialect 2020-12",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"oauth-1-0a",name:"OAuth 1.0a (RFC 5849)",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"oauth-2-0",name:"OAuth 2.0 (RFC 6749)",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"oauth-2-1",name:"OAuth 2.1 (Draft)",category:"identity-auth",domains:["security","identity"],frameworks:["iso-27001","soc2"],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"ocaml-5-2",name:"OCaml 5.2 Spec",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"oci-image-1-1",name:"OCI Image Spec 1.1",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"oci-runtime-1-1",name:"OCI Runtime Spec 1.1",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"odata-4-01",name:"OData 4.01",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"odbc-3-8",name:"ODBC 3.8",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"odf-1-3",name:"OpenDocument 1.3 (ISO/IEC 26300-1)",category:"document-format",domains:["data"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"omg-mda-1-1",name:"OMG MDA Guide v1.1",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"ooxml-ecma-376-4",name:"Office Open XML (ECMA-376 4th)",category:"document-format",domains:["data"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"opc-ua-1-05",name:"OPC UA 1.05",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"openapi-2-0",name:"OpenAPI Specification 2.0 (Swagger)",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"openapi-3-0",name:"OpenAPI Specification 3.0",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"openapi-3-1",name:"OpenAPI Specification 3.1",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"openapi-specification-3-1-0",name:"OpenAPI Specification 3.1.0",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:"https://spec.openapis.org/oas/v3.1.0"},{slug:"openflow-1-5",name:"OpenFlow 1.5",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"openid-connect-1-0",name:"OpenID Connect 1.0",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"openssf-scorecard-4-10",name:"OpenSSF Scorecard 4.10",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"opentelemetry-1-0-0",name:"OpenTelemetry 1.0.0",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"opentracing-1-3",name:"OpenTracing 1.3",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"orc-1-8",name:"Apache ORC 1.8",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"owasp-api-top-10-2023",name:"OWASP API Security Top 10 (2023)",category:"security",domains:["security"],frameworks:["pci-dss","soc2"],projectTypes:["api"],complianceRelevant:true,officialUrl:"https://owasp.org/API-Security/editions/2023/en/0x11-t10/"},{slug:"owasp-asvs-4-0",name:"OWASP ASVS 4.0",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"owasp-asvs-5-0",name:"OWASP Application Security Verification Standard (ASVS) 5.0",category:"security",domains:["security"],frameworks:["hipaa","iso-27001","pci-dss","soc2"],projectTypes:["web-app","api"],complianceRelevant:true,officialUrl:"https://owasp.org/www-project-application-security-verification-standard/"},{slug:"owasp-top10-2023",name:"OWASP Top 10 2023",category:"security",domains:["security"],frameworks:["pci-dss"],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"parquet-2-0",name:"Apache Parquet 2.0",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"pci-dss-4-0",name:"PCI-DSS 4.0",category:"compliance",domains:["security","governance"],frameworks:["pci-dss"],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"pdf-1-7",name:"PDF 1.7 (ISO 32000-1)",category:"document-format",domains:["data"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"pdfa-4",name:"PDF/A-4 (ISO 19005-4:2020)",category:"document-format",domains:["data"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"pep-8",name:"Python PEP 8 (Style Guide)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"perl-5-38",name:"Perl 5.38 Syntax",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"php-8-3",name:"PHP 8.3 Spec",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"pkcs12-v1-1",name:"PKCS #12 v1.1",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"pkcs7-rfc-5652",name:"PKCS #7 / CMS (RFC 5652)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"pmi-pmbok-7",name:"PMI PMBOK 7th Edition",category:"project-management",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"prince2-7",name:"PRINCE2 7",category:"project-management",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"prolog-1995",name:"ISO/IEC 13211-1:1995 (Prolog)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"prometheus-expo-0-0-4",name:"Prometheus Exposition Format 0.0.4",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"protobuf-v3",name:"Protocol Buffers v3",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"python-3-12",name:"Python 3.12 (PEP 693)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"restructuredtext-1-0",name:"reStructuredText 1.0",category:"documentation",domains:["documentation"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"rfc-2119",name:"RFC 2119 (Keyword Conventions)",category:"documentation",domains:["documentation"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"rfc-3339",name:"RFC 3339 (Date/Time Format)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"rfc-5280",name:"RFC 5280 (PKIX)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"rfc-6962",name:"RFC 6962 (Cert Transparency)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"rfc-7636",name:"RFC 7636 (PKCE)",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"rfc-9081",name:"RFC 9081 (IPFS HTTP Gateway)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"rfc-9193",name:"RFC 9193 (SFrame Media Encryption)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"ruby-3-1",name:"ISO/IEC 30170:2022 (Ruby 3.1)",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"rust-2024",name:"Rust 1.78 Edition 2024",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"safe-6-0",name:"SAFe 6.0",category:"project-management",domains:["process"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"saml-2-0",name:"SAML 2.0 (OASIS)",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"sbvr-1-5",name:"SBVR 1.5",category:"modeling",domains:["architecture"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"scala-3-4",name:"Scala 3.4 Reference",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"scim-2-0",name:"SCIM 2.0 (RFC 7644)",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"section-508-2017",name:"Section 508 Refresh (2017)",category:"accessibility",domains:["accessibility","frontend"],frameworks:[],projectTypes:["web-app","mobile"],complianceRelevant:true,officialUrl:null},{slug:"semver-2-0-0",name:"SemVer 2.0.0",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"sftp-rfc-9134",name:"SFTP (RFC 9134)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"slsa-v1",name:"SLSA v1 (Supply-Chain Levels)",category:"security",domains:["security"],frameworks:["iso-27001","nist-csf"],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"smb-3-1-1",name:"SMB 3.1.1",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"snmp-v3",name:"SNMP v3 (RFC 3411-3418)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"soap-1-2",name:"SOAP 1.2",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"spdx-3-0",name:"SPDX 3.0",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"spinnaker-spec",name:"Spinnaker Deployment Spec",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"sql-1986",name:"ANSI SQL-86",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-1987",name:"ISO/IEC 9075:1987 (SQL-87)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-1989",name:"ANSI SQL-89",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-1992",name:"ISO/IEC 9075:1992 (SQL-92)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-1999",name:"ISO/IEC 9075:1999 (SQL:1999)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-2003",name:"ISO/IEC 9075:2003 (SQL:2003)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-2006",name:"ISO/IEC 9075:2006 (SQL:2006)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-2008",name:"ISO/IEC 9075:2008 (SQL:2008)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-2011",name:"ISO/IEC 9075:2011 (SQL:2011)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-2016",name:"ISO/IEC 9075:2016 (SQL:2016)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-2019",name:"ISO/IEC 9075:2019 (SQL:2019)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-2023",name:"SQL:2023 (ISO/IEC 9075:2023)",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:"https://www.iso.org/standard/76583.html"},{slug:"sql-foundation-2016",name:"SQL Foundation Part 2:2016",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-json-2019",name:"SQL/JSON Part 15:2019",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-object-2023",name:"SQL/Object Language Part 10:2023",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-psm-2016",name:"SQL/PSM Part 4:2016",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"sql-xml-2011",name:"SQL/XML Part 14:2011",category:"database-sql",domains:["data"],frameworks:[],projectTypes:["data"],complianceRelevant:false,officialUrl:null},{slug:"ssh-2-0",name:"SSH 2.0 (RFC 4251)",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"stomp-1-2",name:"STOMP 1.2",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null},{slug:"swagger-1-2",name:"Swagger 1.2",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"swift-5-9",name:"Swift 5.9 Language Guide",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"sysml-1-6",name:"SysML 1.6",category:"modeling",domains:["architecture"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"terraform-hcl-2-0",name:"Terraform HCL 2.0",category:"devops",domains:["devops"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"thrift-0-16",name:"Apache Thrift 0.16",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"tls-1-0",name:"TLS 1.0 (RFC 2246)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"tls-1-1",name:"TLS 1.1 (RFC 4346)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"tls-1-2",name:"TLS 1.2 (RFC 5246)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"tls-1-3",name:"TLS 1.3 (RFC 8446)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"togaf-10",name:"TOGAF 10",category:"cloud-architecture",domains:["cloud","architecture"],frameworks:[],projectTypes:["infra","any"],complianceRelevant:false,officialUrl:null},{slug:"typescript-5-4",name:"TypeScript 5.4 Spec",category:"programming-language",domains:["language"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"uk-gdpr-2021",name:"UK GDPR 2021",category:"compliance",domains:["security","governance"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"uml-2-5-1",name:"UML 2.5.1",category:"modeling",domains:["architecture"],frameworks:[],projectTypes:["any"],complianceRelevant:false,officialUrl:null},{slug:"unicode-15-1",name:"Unicode 15.1",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"utf8-rfc-3629",name:"UTF-8 (RFC 3629)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"vc-data-2-0",name:"VC Data Model 2.0",category:"identity-auth",domains:["security","identity"],frameworks:[],projectTypes:["api","web-app"],complianceRelevant:true,officialUrl:null},{slug:"wcag-2-2",name:"W3C WCAG 2.2",category:"accessibility",domains:["accessibility","frontend"],frameworks:[],projectTypes:["web-app","mobile"],complianceRelevant:true,officialUrl:null},{slug:"websocket-rfc-6455",name:"WebSocket (RFC 6455)",category:"web-protocol",domains:["networking"],frameworks:[],projectTypes:["web-app","api"],complianceRelevant:false,officialUrl:null},{slug:"ws-security-1-2",name:"WS-Security 1.2",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"wsdl-2-0",name:"WSDL 2.0",category:"api-spec",domains:["api"],frameworks:[],projectTypes:["api"],complianceRelevant:false,officialUrl:null},{slug:"x509-2017",name:"ISO/IEC 9594-8:2017 (X.509)",category:"security",domains:["security"],frameworks:[],projectTypes:["any"],complianceRelevant:true,officialUrl:null},{slug:"xml-1-0",name:"XML 1.0 (Fifth Edition)",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"xml-namespaces-1-1",name:"XML Namespaces 1.1",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"xsd-1-0",name:"XML Schema Definition 1.0",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"xsd-1-1",name:"XML Schema Definition 1.1",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"xslt-1-0",name:"XSLT 1.0",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"xslt-2-0",name:"XSLT 2.0",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"xslt-3-0",name:"XSLT 3.0",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"yaml-1-2",name:"YAML 1.2",category:"data-format",domains:["data"],frameworks:[],projectTypes:["api","data"],complianceRelevant:false,officialUrl:null},{slug:"zigbee-3-0",name:"Zigbee 3.0",category:"network-protocol",domains:["networking"],frameworks:[],projectTypes:["infra"],complianceRelevant:false,officialUrl:null},{slug:"zmtp-3-1",name:"ZeroMQ ZMTP 3.1",category:"messaging-protocol",domains:["integration"],frameworks:[],projectTypes:["api","infra"],complianceRelevant:false,officialUrl:null}],ze=[{id:"iso-27001",name:"ISO/IEC 27001:2022",memberStandards:["iso-iec-27001-2022","iso-iec-27002-2022","owasp-asvs-5-0","oauth-2-1","slsa-v1"],controls:[{id:"A.5.15",name:"Access control",domain:"access"},{id:"A.5.16",name:"Identity management",domain:"identity"},{id:"A.8.5",name:"Secure authentication",domain:"identity"},{id:"A.8.8",name:"Management of technical vulnerabilities",domain:"supply-chain"},{id:"A.8.23",name:"Web filtering / network controls",domain:"transport"},{id:"A.8.24",name:"Use of cryptography",domain:"crypto"},{id:"A.8.15",name:"Logging",domain:"logging"},{id:"A.8.28",name:"Secure coding",domain:"appsec"}]},{id:"soc2",name:"SOC 2 (Trust Services Criteria)",memberStandards:["aicpa-soc-2-tsc","iso-iec-27001-2022","owasp-asvs-5-0","owasp-api-top-10-2023","oauth-2-1"],controls:[{id:"CC6.1",name:"Logical access security",domain:"identity"},{id:"CC6.3",name:"Role-based access / least privilege",domain:"access"},{id:"CC6.6",name:"Boundary protection / abuse control",domain:"transport"},{id:"CC6.7",name:"Encryption in transit and at rest",domain:"crypto"},{id:"CC7.1",name:"Vulnerability detection",domain:"supply-chain"},{id:"CC7.2",name:"Security event monitoring",domain:"logging"},{id:"CC8.1",name:"Change management / secure SDLC",domain:"appsec"}]},{id:"pci-dss",name:"PCI DSS 4.0",memberStandards:["pci-dss-4-0","owasp-asvs-5-0","owasp-api-top-10-2023","owasp-top10-2023"],controls:[{id:"Req.3",name:"Protect stored account data",domain:"crypto"},{id:"Req.4",name:"Protect data in transit",domain:"transport"},{id:"Req.6",name:"Secure systems and software",domain:"appsec"},{id:"Req.8",name:"Identify users and authenticate access",domain:"identity"},{id:"Req.10",name:"Log and monitor access",domain:"logging"}]},{id:"nist-csf",name:"NIST Cybersecurity Framework 2.0",memberStandards:["nist-csf-2-0","nist-800-53-r5","slsa-v1","cyclonedx-1-6"],controls:[{id:"GV",name:"Govern",domain:"governance"},{id:"ID.RA",name:"Risk assessment",domain:"supply-chain"},{id:"PR.AA",name:"Identity management & access control",domain:"identity"},{id:"PR.DS",name:"Data security",domain:"crypto"},{id:"DE.CM",name:"Continuous monitoring",domain:"logging"}]},{id:"hipaa",name:"HIPAA Security Rule",memberStandards:["hipaa-security-rule","iso-iec-27001-2022","owasp-asvs-5-0"],controls:[{id:"164.312(a)",name:"Access control",domain:"access"},{id:"164.312(e)",name:"Transmission security",domain:"transport"},{id:"164.312(b)",name:"Audit controls",domain:"logging"}]},{id:"gdpr",name:"GDPR (EU 2016/679)",memberStandards:["gdpr-eu-2016-679","iso-iec-27001-2022"],controls:[{id:"Art.32",name:"Security of processing",domain:"crypto"},{id:"Art.30",name:"Records of processing activities",domain:"governance"},{id:"Art.17",name:"Right to erasure",domain:"privacy"}]}],Ua=new RegExp("\\b("+["react","preact","next(?:\\.?js)?","remix","gatsby","vue","nuxt","angular","svelte(?:kit)?","solid(?:js|start)?","qwik","astro","ember","backbone","alpine","htmx","hotwire","turbo","stimulus","inertia","blazor","razor","maui","wpf","winforms","xamarin","uno","jsf","thymeleaf","vaadin","wicket","gwt","compose(?: multiplatform)?","livewire","filament","blade","flutter","swiftui","jetpack","react native"].join("|")+")\\b"),Ma=new RegExp("\\b("+["express","fastify","nest(?:js)?","koa","hapi","hono","adonis","sails","loopback","restify","feathers","h3","nitro","trpc","django","flask","fastapi","starlette","tornado","pyramid","sanic","aiohttp","bottle","falcon","cherrypy","quart","litestar","connexion","spring(?:boot)?","quarkus","micronaut","vert\\.?x","dropwizard","jersey","jax-?rs","struts","javalin","helidon","jhipster","ktor","http4s","finatra","scalatra","lagom","play","akka(?: ?http)?","spark java","ratpack","asp\\.?net(?: ?core)?","signalr","nancy","servicestack","carter","minimal ?api","web ?api","mvc","gin","echo","fiber","chi","gorilla","beego","revel","buffalo","iris","gqlgen","mux","fasthttp","rails","sinatra","hanami","grape","padrino","roda","rack","laravel","symfony","codeigniter","slim","lumen","yii","cakephp","phalcon","laminas","zend","fuel","actix","axum","rocket","warp","tide","poem","salvo","hyper","phoenix","plug","cowboy","vapor","kitura","hummingbird","perfect","shelf","aqueduct","conduit"].join("|")+")\\b"),$a=["springframework","spring-boot","springdoc","webflux","webmvc","quarkus","micronaut","dropwizard","jersey","resteasy","javalin","helidon","vertx","ratpack","restlet","django","fastapi","starlette","tornado","pyramid","sanic","aiohttp","litestar","falcon-","flask","express","fastify","nestjs","@nestjs","adonis","loopback","feathers","restify","aspnetcore","asp.net","servicestack","signalr","gin-gonic","gorilla/mux","gofiber","beego","buffalo","gqlgen","laravel","symfony","codeigniter","cakephp","phalcon","laminas","lumen","sinatra","hanami","grape","actix","axum","rocket","salvo","warp-","phoenix","cowboy","vapor","kitura","hummingbird","perfect-","aqueduct","conduit","rails","railties","actionpack"],La=["react","preact","next","nuxt","remix","gatsby","vue","angular","@angular","svelte","solid-js","qwik","astro","ember","backbone","blazor","razor","vaadin","thymeleaf","wicket","livewire","filament","inertia","flutter","jetpack","swiftui"];function Ie(e,a){return a.some(s=>e.includes(s))}var Oa=/\b(tensorflow|pytorch|torch|keras|jax|sklearn|scikit-?learn|pandas|numpy|scipy|xgboost|lightgbm|catboost|mxnet|spacy|transformers|huggingface|langchain|llama|onnx|mlflow|kubeflow|sagemaker|spark ?ml|mllib)\b/,Da=/\b(terraform|pulumi|kubernetes|\bk8s\b|helm|ansible|cdktf|aws cdk|\bcdk\b|bicep|crossplane|serverless framework|\bsst\b|cloudformation|packer|nomad)\b/;function Ba(e){switch(e){case "nextjs":case "remix":case "sveltekit":case "nuxt":return {category:"web-app",signal:`archetype:${e}`};case "nestjs":case "express":case "fastify":case "hono":case "koa":case "serverless":return {category:"api",signal:`archetype:${e}`};case "library":return {category:"library",signal:"archetype:library"};case "cli":return {category:"cli",signal:"archetype:cli"};default:return null}}function Na(e,a){let s=[],n={},t=(l,f,h)=>{n[l]=(n[l]??0)+f,s.push(h);};if(e.type==="node"||e.type==="typescript"){let l=Ba(e.architecture?.archetype);l&&t(l.category,3,l.signal);}let r=(e.frameworks??[]).map(l=>l.name.toLowerCase()),o=(a?.detectedFrameworks??[]).map(l=>l.toLowerCase()),c=[...r,...o].join(" ");Ua.test(c)&&t("web-app",2,"web-framework"),Ma.test(c)&&t("api",2,"api-framework");let u=(e.dependencies??[]).map(l=>l.package.toLowerCase()).join(" ");Ie(u,La)&&t("web-app",1,"web-dependency"),Ie(u,$a)&&t("api",1,"api-dependency"),a&&(a.routes?.length||a.samples?.length)&&t("web-app",1,"ui-evidence");let p=`${c} ${u}`;Oa.test(p)&&t("ml",2,"ml-libs"),Da.test(p)&&t("infra",2,"infra-tooling");let i=Object.entries(n).sort((l,f)=>f[1]-l[1]);if(i.length===0)return {project:e.name,category:"any",confidence:.3,signals:["no-strong-signal"]};let[d,g]=i[0],m=i.reduce((l,[,f])=>l+f,0),y=Math.min(.95,.4+g/m*.55);return {project:e.name,category:d,confidence:Number(y.toFixed(2)),signals:[...new Set(s)]}}function za(e,a){return !e.projectTypes||e.projectTypes.length===0?false:e.projectTypes.includes("any")||e.projectTypes.includes(a)}var qa={api:{categories:["security","api-spec"],domains:["api","security"]},"web-app":{categories:["security","accessibility"],domains:["security","accessibility","frontend"]},library:{categories:["software-process","programming-language"],domains:["process","language"]},cli:{categories:["software-process"],domains:["process"]},data:{categories:["database-sql","data-format"],domains:["data"]},ml:{categories:["ai-governance"],domains:["ai"]},infra:{categories:["devops","cloud-architecture"],domains:["devops","cloud"]}};function _a(e){let a=qa[e]??{categories:[],domains:[]};return Fa.filter(n=>za(n,e)).map(n=>{let t=n.projectTypes.includes(e)&&!n.projectTypes.includes("any"),r=a.categories.indexOf(n.category),o=r>=0?(a.categories.length-r)*2:0,c=n.domains.some(p=>a.domains.includes(p))?1:0,u=o+c+(n.complianceRelevant?2:0)+(t?1:0);return {e:n,score:u,tight:t}}).sort((n,t)=>t.score-n.score||n.e.slug.localeCompare(t.e.slug)).map(({e:n,score:t,tight:r})=>({score:t,rec:{slug:n.slug,name:n.name,category:n.category,reason:r?`Applies specifically to ${e} projects`:n.complianceRelevant?"Compliance-relevant standard applicable to this stack":"Generally applicable standard",matchedProjectTypes:[e],frameworks:n.frameworks,complianceRelevant:n.complianceRelevant,officialUrl:n.officialUrl}}))}function Fe(e,a,s={}){let n=s.perCategoryLimit??10,t=s.totalLimit??40,r=a?.uiPurpose?{samples:[],routes:[],detectedFrameworks:a.uiPurpose.detectedFrameworks??[]}:void 0,o=e.map(m=>Na(m,m.uiPurpose??r)),c=[...new Set(o.map(m=>m.category))],u=new Map,p=new Map;for(let m of c){let y=_a(m).slice(0,n);for(let{rec:l,score:f}of y){let h=u.get(l.slug);h?(h.matchedProjectTypes.includes(m)||h.matchedProjectTypes.push(m),p.set(l.slug,Math.max(p.get(l.slug)??0,f))):(u.set(l.slug,{...l}),p.set(l.slug,f));}}let i=[...u.values()].sort((m,y)=>(p.get(y.slug)??0)-(p.get(m.slug)??0)||y.matchedProjectTypes.length-m.matchedProjectTypes.length||m.slug.localeCompare(y.slug)).slice(0,t),d=new Set(i.map(m=>m.slug)),g=ze.map(m=>({id:m.id,name:m.name,recommendedMembers:m.memberStandards.filter(y=>d.has(y)).length,totalMembers:m.memberStandards.length})).filter(m=>m.recommendedMembers>0).sort((m,y)=>y.recommendedMembers-m.recommendedMembers);return {projectPurposes:o,recommended:i,frameworks:g}}function Ga(e){let a=e.findings??[],s=e.extended,n={};for(let r of s?.standards?.frameworks??[])n[r.id]=r.totalMembers===0?0:Math.round(r.recommendedMembers/r.totalMembers*100);let t=s?.serviceDependencies;return {errors:a.filter(r=>r.level==="error").length,warnings:a.filter(r=>r.level==="warning").length,lockfilePresent:s?.securityPosture?.lockfilePresent??false,secretsTracked:s?.securityPosture?.envFilesTracked??false,hasAuthProvider:(t?.auth?.length??0)>0,hasSbom:s?.ossGovernance!=null||s?.buildDeploy!=null,frameworkCoveragePct:n}}function Wa(e,a){let s={id:e.id,name:e.name,domain:e.domain};switch(e.domain){case "supply-chain":return a.errors>0?{...s,status:"gap",evidence:`${a.errors} error-level finding(s) in scan`,recommendation:"Resolve high-severity dependency/runtime findings."}:a.warnings>0?{...s,status:"partial",evidence:`${a.warnings} warning-level finding(s)`,recommendation:"Triage outstanding warnings; add SCA gating."}:{...s,status:"met",evidence:"No error/warning findings in scan."};case "crypto":case "transport":return a.secretsTracked?{...s,status:"gap",evidence:"Environment/secret files appear tracked in VCS.",recommendation:"Remove tracked secrets; use a secrets manager."}:a.lockfilePresent?{...s,status:"partial",evidence:"Lockfile present; secrets not tracked. Transport/at-rest crypto not verifiable statically.",recommendation:"Confirm TLS + at-rest encryption out of band."}:{...s,status:"unknown",evidence:"Not determinable from a static scan."};case "appsec":return a.errors>0?{...s,status:"partial",evidence:"Scan surfaced error-level findings touching app code.",recommendation:"Address findings; adopt the referenced AppSec standard."}:{...s,status:"unknown",evidence:"Secure-coding adherence not verifiable from a static scan."};case "identity":case "access":return a.hasAuthProvider?{...s,status:"partial",evidence:"Authentication provider detected among service dependencies.",recommendation:"Verify least-privilege roles + MFA enforcement."}:{...s,status:"unknown",evidence:"No identity provider detected; control not observable."};case "supply":return {...s,status:a.hasSbom?"partial":"unknown",evidence:a.hasSbom?"Build/governance metadata present.":"No SBOM/provenance signal."};default:return {...s,status:"unknown",evidence:"Organisational/operational control \u2014 not observable from a code scan."}}}function qe(e){let a={met:1,partial:.5,gap:0,unknown:null},s=0,n=0;for(let t of e){let r=a[t.status];r!==null&&(s+=r,n+=1);}return {score:n===0?null:Math.round(s/n*100),assessed:n}}function Ka(e,a){let s=Ga(e),n=new Set(a.map(r=>r.toLowerCase())),t=ze.filter(r=>n.size===0||n.has(r.id)).map(r=>{let o=r.controls.map(p=>Wa(p,s)),{score:c,assessed:u}=qe(o);return {frameworkId:r.id,name:r.name,score:c,assessed:u,total:o.length,controls:o,gaps:o.filter(p=>p.status==="gap")}});return {generatedAt:new Date().toISOString(),mode:"offline",frameworks:t}}function Ha(e){return {drift:e.drift?.score,riskLevel:e.drift?.riskLevel,projectTypes:[...new Set((e.projects??[]).map(a=>a.type))],purposes:e.extended?.standards?.projectPurposes?.map(a=>a.category),findingCounts:{error:(e.findings??[]).filter(a=>a.level==="error").length,warning:(e.findings??[]).filter(a=>a.level==="warning").length}}}async function Ln(e,a){let s=Ka(e,a.frameworkIds);if(!a.analyzer)return s;let n=Ha(e),t=[];for(let r of s.frameworks){let o=r.controls;try{let p=await a.analyzer.refine({frameworkId:r.frameworkId,controls:r.controls,artifactSummary:n});Array.isArray(p)&&p.length>0&&(o=p);}catch{}let{score:c,assessed:u}=qe(o);t.push({...r,controls:o,gaps:o.filter(p=>p.status==="gap"),score:c,assessed:u});}return {generatedAt:new Date().toISOString(),mode:"llm",frameworks:t}}function On(e){let a=[];a.push("# Compliance Assessment"),a.push(""),a.push(`_Mode: ${e.mode} \xB7 generated ${e.generatedAt}_`),a.push("");for(let s of e.frameworks){let n=s.score===null?"n/a (no observable controls)":`${s.score}/100`;a.push(`## ${s.name} \u2014 ${n}`),a.push(""),a.push(`Assessed ${s.assessed}/${s.total} controls.${s.gaps.length?` ${s.gaps.length} gap(s).`:""}`),a.push(""),a.push("| Control | Status | Evidence | Recommendation |"),a.push("|---|---|---|---|");for(let t of s.controls){let r=t.recommendation??"";a.push(`| ${t.id} ${t.name} | ${t.status} | ${t.evidence} | ${r} |`);}a.push("");}return a.push("> Offline verdicts are a coarse, automated pre-assessment. `unknown` means a static"),a.push("> scan cannot observe the control \u2014 confirm organisational/operational controls out of band."),a.join(`
318
+ `)}var Va=new Set(["sharp","canvas","jimp","@napi-rs/image","imagemagick","gm","fluent-ffmpeg","ffmpeg-static","puppeteer","playwright","playwright-core","bcrypt","argon2","sodium-native","libsodium-wrappers","node-forge","ssh2","keytar","better-sqlite3","sqlite3","pg-native","oracledb","odbc","ibm_db","couchbase","rocksdb","leveldown","lmdb","node-gyp","node-pre-gyp","@mapbox/node-pre-gyp","prebuild","prebuild-install","esbuild","@swc/core","@rspack/core","@biomejs/biome","node-sass","sass-embedded","turbo","@vercel/nft","fsevents","cpu-features","deasync","usb","serialport","node-hid","i2c-bus","spi-device","node-bluetooth","mdns","snappy","zstd-napi","lz4","brotli","re2","oniguruma","vscode-oniguruma","tree-sitter","node-tree-sitter","libxmljs","libxmljs2","node-expat","htmlparser2","@grpc/grpc-js","grpc","zeromq","nanomsg","unix-dgram","dtrace-provider","v8-profiler-next","heapdump","farmhash","xxhash","xxhash-addon","iconv","ref-napi","ffi-napi","node-pty","robotjs","electron","xdg-open","windows-process-tree"]),Qa=[{pattern:/\bcmd\.exe\b|\.bat\b|\.cmd\b/i,label:"windows-scripts"},{pattern:/\bpowershell\b|\bpwsh\b/i,label:"powershell"},{pattern:/\bbash\b|#!\/bin\/bash/i,label:"bash-scripts"},{pattern:/\\\\/g,label:"backslash-paths"}];async function Ja(e,a){let s={dotnetTargetFrameworks:[],nativeModules:[],osAssumptions:[],dockerBaseImages:[],nodeVersionFiles:[]},n$1=a?await a.findPackageJsonFiles(e):await j$1(e),t=new Set,r=new Set;for(let i of n$1)try{let d=a?await a.readJsonFile(i):await n(i);d.engines?.node&&!s.nodeEngines&&(s.nodeEngines=d.engines.node),d.engines?.npm&&!s.npmEngines&&(s.npmEngines=d.engines.npm),d.engines?.pnpm&&!s.pnpmEngines&&(s.pnpmEngines=d.engines.pnpm);for(let m of ["dependencies","devDependencies","optionalDependencies"]){let y=d[m];if(y)for(let l of Object.keys(y))t.add(l);}let g=d.scripts;if(g&&typeof g=="object")for(let m of Object.values(g)){if(typeof m!="string")continue;let y=m.split(/\s/)[0]??"";for(let{pattern:l,label:f}of Qa)l.test(y)&&r.add(f);}}catch{}for(let i of t)Va.has(i)&&s.nativeModules.push(i);s.nativeModules.sort(),s.osAssumptions=[...r].sort();let o$1=a?await a.findFiles(e,i=>i.endsWith(".csproj")||i.endsWith(".vbproj")):await i(e,i=>i.endsWith(".csproj")||i.endsWith(".vbproj")),c=new Set;for(let i of o$1)try{let d=a?await a.readTextFile(i):await o(i),g=d.match(/<TargetFramework>(.*?)<\/TargetFramework>/);g?.[1]&&c.add(g[1]);let m=d.match(/<TargetFrameworks>(.*?)<\/TargetFrameworks>/);if(m?.[1])for(let y of m[1].split(";"))y.trim()&&c.add(y.trim());}catch{}s.dotnetTargetFrameworks=[...c].sort();let u=a?await a.findFiles(e,i=>i==="Dockerfile"||i.startsWith("Dockerfile.")):await i(e,i=>i==="Dockerfile"||i.startsWith("Dockerfile.")),p$1=new Set;for(let i of u)try{let d=a?await a.readTextFile(i):await o(i);for(let g of d.split(`
319
+ `)){let m=g.trim();if(/^FROM\s+/i.test(m)){let y=m.split(/\s+/);if(y[1]&&!y[1].startsWith("--"))p$1.add(y[1]);else if(y[1]?.startsWith("--")){let l=y[1].includes("=")?2:3;y[l]&&p$1.add(y[l]);}}}}catch{}s.dockerBaseImages=[...p$1].sort();for(let i of [".nvmrc",".node-version",".tool-versions"])(a?await a.pathExists(I.join(e,i)):await p(I.join(e,i)))&&s.nodeVersionFiles.push(i);return s}var Za=new Set(["request","node-sass","tslint","istanbul","popper.js","Left-pad","left-pad","bower","grunt","gulp","coffee-script","coffeescript","merge","nomnom","optimist","natives","querystring","domain-browser","sys","punycode"]),Ya=new Set(["sharp","canvas","bcrypt","node-gyp","fsevents","better-sqlite3","sqlite3","leveldown","sodium-native","node-sass","argon2","usb","serialport","re2","libxmljs","libxmljs2","cpu-features","deasync","farmhash","grpc","@grpc/grpc-js"]);function Xa(e){let a=new Set,s=new Set,n=0;for(let t of e)for(let r of t.dependencies)n++,Za.has(r.package)&&a.add(r.package),Ya.has(r.package)&&s.add(r.package);return {deprecatedPackages:[...a].sort(),nativeModulePackages:[...s].sort(),totalDependencies:n}}function et(e){let a=[],s=/^\s+\/?(@?[^@\s][^@\s]*?)@(\d+\.\d+\.\d+[^:\s]*)\s*:/gm,n;for(;(n=s.exec(e))!==null;)n[1]&&n[2]&&a.push({name:n[1],version:n[2]});return a}function at(e){let a=[];try{let n=JSON.parse(e);if(n.packages&&typeof n.packages=="object")for(let[t,r]of Object.entries(n.packages)){if(t==="")continue;let o=r;if(o.version){let c=t.replace(/^node_modules\//,"").replace(/.*node_modules\//,"");a.push({name:c,version:o.version});}}else if(n.dependencies&&typeof n.dependencies=="object"){let t=function(r){for(let[o,c]of Object.entries(r))c.version&&a.push({name:o,version:c.version}),c.dependencies&&t(c.dependencies);};var s=t;t(n.dependencies);}}catch{}return a}function tt(e){let a=[],s=/^"?(@?[^\s"@]+)@[^:]+:\s*\n\s+version\s+"([^"]+)"/gm,n;for(;(n=s.exec(e))!==null;)n[1]&&n[2]&&a.push({name:n[1],version:n[2]});return a}async function nt(e,a){let s={lockfileType:null,totalUnique:0,totalInstalled:0,duplicatedPackages:[],phantomDependencies:[]},n$1=[],t=I.join(e,"pnpm-lock.yaml"),r=I.join(e,"package-lock.json"),o$1=I.join(e,"yarn.lock"),c=a?l=>a.pathExists(l):p,u=a?l=>a.readTextFile(l):o;if(await c(t)){s.lockfileType="pnpm";let l=await u(t);n$1=et(l);}else if(await c(r)){s.lockfileType="npm";let l=await u(r);n$1=at(l);}else if(await c(o$1)){s.lockfileType="yarn";let l=await u(o$1);n$1=tt(l);}if(n$1.length===0)return s;let p$1=new Map;for(let l of n$1){let f=p$1.get(l.name);f?f.add(l.version):p$1.set(l.name,new Set([l.version]));}s.totalInstalled=n$1.length,s.totalUnique=p$1.size;let i=[];for(let[l,f]of p$1)f.size>1&&i.push({name:l,versions:[...f].sort(),consumers:f.size});i.sort((l,f)=>f.versions.length-l.versions.length||l.name.localeCompare(f.name)),s.duplicatedPackages=i;let d=new Set(p$1.keys()),g=a?await a.findPackageJsonFiles(e):await j$1(e),m=new Set,y=[];for(let l of g)try{let f=a?await a.readJsonFile(l):await n(l),h=I.relative(e,l);for(let k of ["dependencies","devDependencies"]){let v=f[k];if(v)for(let[b,C]of Object.entries(v)){let R=typeof C=="string"?C:"";!d.has(b)&&!R.startsWith("workspace:")&&(m.add(b),y.push({package:b,spec:R,sourcePath:h}));}}}catch{}return s.phantomDependencies=[...m].sort(),s.phantomDependencyDetails=y.sort((l,f)=>l.sourcePath.localeCompare(f.sourcePath)||l.package.localeCompare(f.package)),s}var st={frontend:{react:"React","react-dom":"React DOM",vue:"Vue","@angular/core":"Angular",svelte:"Svelte","solid-js":"Solid",qwik:"Qwik","htmx.org":"htmx",preact:"Preact",lit:"Lit",alpinejs:"Alpine.js",stimulus:"Stimulus","petite-vue":"petite-vue",mithril:"Mithril",inferno:"Inferno",hyperapp:"Hyperapp",marko:"Marko","@builder.io/qwik":"Qwik (Builder)",million:"Million","ember-source":"Ember"},metaFrameworks:{next:"Next.js",nuxt:"Nuxt","@analogjs/platform":"Analog",astro:"Astro","@remix-run/react":"Remix",gatsby:"Gatsby","@sveltejs/kit":"SvelteKit","@tanstack/start":"TanStack Start","@adonisjs/core":"AdonisJS","@redwoodjs/core":"RedwoodJS",blitz:"Blitz.js","@solidjs/start":"SolidStart",fresh:"Fresh (Deno)"},bundlers:{vite:"Vite",webpack:"webpack",rollup:"Rollup",esbuild:"esbuild",parcel:"Parcel",turbo:"Turbo",tsup:"tsup",unbuild:"unbuild","@swc/core":"SWC",bun:"Bun",pkg:"pkg",ncc:"ncc","@vercel/ncc":"Vercel ncc",microbundle:"microbundle","tsc-watch":"tsc-watch","ts-node":"ts-node",tsx:"tsx",jiti:"jiti","@rspack/core":"Rspack",farm:"Farm"},css:{tailwindcss:"Tailwind CSS","@mui/material":"MUI",vuetify:"Vuetify",bootstrap:"Bootstrap","styled-components":"styled-components","@emotion/react":"Emotion","@chakra-ui/react":"Chakra UI",sass:"Sass","@mantine/core":"Mantine",antd:"Ant Design","@radix-ui/react-slot":"Radix UI","@headlessui/react":"Headless UI",daisyui:"DaisyUI","@shadcn/ui":"shadcn/ui",primereact:"PrimeReact",primevue:"PrimeVue","@nextui-org/react":"NextUI","@ariakit/react":"Ariakit",windstitch:"Windstitch","vanilla-extract":"vanilla-extract","@vanilla-extract/css":"vanilla-extract",linaria:"Linaria",stylex:"StyleX","@stylexjs/stylex":"StyleX",unocss:"UnoCSS",postcss:"PostCSS",autoprefixer:"Autoprefixer",lightningcss:"Lightning CSS",less:"Less",stylus:"Stylus","open-props":"Open Props","@ark-ui/react":"Ark UI"},backend:{express:"Express",fastify:"Fastify","@nestjs/core":"NestJS",hono:"Hono",koa:"Koa","@hapi/hapi":"Hapi",restify:"Restify",elysia:"Elysia","@elysiajs/eden":"Elysia Eden",moleculer:"Moleculer","@feathersjs/feathers":"Feathers",sails:"Sails",micro:"Micro",polka:"Polka",h3:"h3",nitro:"Nitro","@trpc/server":"tRPC Server","@trpc/client":"tRPC Client",middy:"Middy (Lambda)",serverless:"Serverless Framework","aws-lambda":"AWS Lambda","@aws-sdk/client-lambda":"AWS Lambda SDK","@cloudflare/workers-types":"Cloudflare Workers",wrangler:"Wrangler"},orm:{prisma:"Prisma","@prisma/client":"Prisma Client","drizzle-orm":"Drizzle",typeorm:"TypeORM",sequelize:"Sequelize",knex:"Knex",pg:"pg (PostgreSQL)",mysql2:"mysql2",mongodb:"MongoDB",ioredis:"ioredis",redis:"Redis","better-sqlite3":"better-sqlite3","@mikro-orm/core":"MikroORM",mongoose:"Mongoose",mssql:"mssql",kysely:"Kysely",objection:"Objection.js","@planetscale/database":"PlanetScale","@neondatabase/serverless":"Neon","@libsql/client":"libSQL (Turso)","@electric-sql/pglite":"PGlite","sql.js":"sql.js",oracledb:"Oracle DB","cassandra-driver":"Cassandra","neo4j-driver":"Neo4j","@upstash/redis":"Upstash Redis","@upstash/kafka":"Upstash Kafka",dynamoose:"Dynamoose",fauna:"Fauna",faunadb:"FaunaDB","@clickhouse/client":"ClickHouse",influx:"InfluxDB",slonik:"Slonik",massive:"Massive.js"},testing:{vitest:"Vitest",jest:"Jest",mocha:"Mocha","@playwright/test":"Playwright",cypress:"Cypress","@testing-library/react":"Testing Library (React)","@testing-library/vue":"Testing Library (Vue)","@testing-library/svelte":"Testing Library (Svelte)","@testing-library/jest-dom":"Testing Library DOM","@testing-library/user-event":"Testing Library User Event",chai:"Chai",ava:"AVA",tap:"node-tap",supertest:"Supertest",storybook:"Storybook","@storybook/react":"Storybook (React)","@storybook/vue3":"Storybook (Vue)",msw:"Mock Service Worker",nock:"Nock",sinon:"Sinon",faker:"Faker","@faker-js/faker":"Faker.js",testcontainers:"Testcontainers",pact:"Pact","@pact-foundation/pact":"Pact",k6:"k6",artillery:"Artillery",autocannon:"Autocannon",puppeteer:"Puppeteer",webdriverio:"WebdriverIO",nightwatch:"Nightwatch",detox:"Detox (Mobile)","jest-image-snapshot":"Image Snapshot","happy-dom":"happy-dom",jsdom:"jsdom",c8:"c8 (coverage)",nyc:"nyc (coverage)","@vitest/coverage-v8":"Vitest Coverage"},lintFormat:{eslint:"ESLint",prettier:"Prettier",stylelint:"Stylelint","@biomejs/biome":"Biome",oxlint:"oxlint",tslint:"TSLint","@typescript-eslint/parser":"typescript-eslint","eslint-config-next":"ESLint Next.js","eslint-config-prettier":"ESLint Prettier","eslint-plugin-react":"ESLint React","eslint-plugin-vue":"ESLint Vue",husky:"Husky","lint-staged":"lint-staged",commitlint:"commitlint","@commitlint/cli":"commitlint",lefthook:"Lefthook",cspell:"CSpell",markdownlint:"markdownlint",depcheck:"depcheck",knip:"Knip",madge:"Madge",publint:"publint",arethetypeswrong:"Are the Types Wrong","sort-package-json":"sort-package-json"},apiMessaging:{graphql:"GraphQL","@grpc/grpc-js":"gRPC","@trpc/server":"tRPC","@connectrpc/connect":"Connect","socket.io":"Socket.IO",ws:"WebSocket (ws)","@apollo/server":"Apollo Server","@apollo/client":"Apollo Client",urql:"URQL","graphql-yoga":"GraphQL Yoga",mercurius:"Mercurius","type-graphql":"TypeGraphQL",nexus:"Nexus",pothos:"Pothos","@graphql-codegen/cli":"GraphQL Codegen",kafkajs:"Kafka.js",amqplib:"AMQP (RabbitMQ)",bullmq:"BullMQ",bull:"Bull","bee-queue":"Bee Queue",agenda:"Agenda","pg-boss":"pg-boss","@temporalio/client":"Temporal",inngest:"Inngest","trigger.dev":"Trigger.dev",nats:"NATS",mqtt:"MQTT",zeromq:"ZeroMQ","sse-channel":"SSE Channel"},observability:{"@sentry/node":"Sentry (Node)","@sentry/browser":"Sentry (Browser)","@sentry/react":"Sentry (React)","@sentry/nextjs":"Sentry (Next.js)","@opentelemetry/api":"OpenTelemetry API","@opentelemetry/sdk-node":"OpenTelemetry SDK","@opentelemetry/auto-instrumentations-node":"OpenTelemetry Auto",applicationinsights:"Application Insights",pino:"Pino",winston:"Winston","dd-trace":"Datadog",newrelic:"New Relic",bunyan:"Bunyan","@axiomhq/pino":"Axiom (Pino)",loglevel:"loglevel",consola:"consola","@logtail/node":"Logtail","elastic-apm-node":"Elastic APM","prom-client":"Prometheus Client","@google-cloud/trace-agent":"GCP Trace","@google-cloud/logging":"GCP Logging","lightstep-tracer":"Lightstep",roarr:"Roarr","cls-hooked":"CLS Hooked","@baselime/node-opentelemetry":"Baselime","highlight.run":"Highlight","posthog-node":"PostHog","@amplitude/node":"Amplitude",mixpanel:"Mixpanel","@segment/analytics-node":"Segment"}};function ot(e){let a={frontend:[],metaFrameworks:[],bundlers:[],css:[],backend:[],orm:[],testing:[],lintFormat:[],apiMessaging:[],observability:[]},s=new Map;for(let n of e)for(let t of n.dependencies)s.has(t.package)||s.set(t.package,t.resolvedVersion);for(let[n,t]of Object.entries(st)){let r=[];for(let[o,c]of Object.entries(t))s.has(o)&&r.push({name:c,package:o,version:s.get(o)??null});r.sort((o,c)=>o.name.localeCompare(c.name)),a[n]=r;}return a}var rt={".github/workflows":"github-actions",".gitlab-ci.yml":"gitlab-ci","azure-pipelines.yml":"azure-devops","bitbucket-pipelines.yml":"bitbucket-pipelines",Jenkinsfile:"jenkins",".circleci/config.yml":"circleci",".travis.yml":"travis-ci"},it=new Set(["semantic-release","@changesets/cli","standard-version","release-it","auto","lerna"]),lt={".changeset":"changesets",".releaserc":"semantic-release",".releaserc.json":"semantic-release",".releaserc.yml":"semantic-release","release.config.js":"semantic-release","release.config.cjs":"semantic-release","GitVersion.yml":"gitversion"},ct={"pnpm-workspace.yaml":"pnpm-workspaces","lerna.json":"lerna","nx.json":"nx","turbo.json":"turbo","rush.json":"rush"},pt={".tf":"terraform",".bicep":"bicep"};async function dt(e,a){let s={ci:[],ciWorkflowCount:0,docker:{dockerfileCount:0,baseImages:[]},iac:[],releaseTooling:[],packageManagers:[],monorepoTools:[]},n$1=a?v=>a.pathExists(v):p,t=a?(v,b)=>a.findFiles(v,b):i,r=a?v=>a.readTextFile(v):o,o$1=new Set;for(let[v,b]of Object.entries(rt)){let C=I.join(e,v);await n$1(C)&&o$1.add(b);}let c=I.join(e,".github","workflows");if(await n$1(c))try{if(a){let v=await a.walkDir(e),b=I.relative(e,c)+I.sep;s.ciWorkflowCount=v.filter(C=>C.isFile&&C.relPath.startsWith(b)&&(C.name.endsWith(".yml")||C.name.endsWith(".yaml"))).length;}else {let v=await t(c,b=>b.endsWith(".yml")||b.endsWith(".yaml"));s.ciWorkflowCount=v.length;}}catch{}s.ci=[...o$1].sort();let u=await t(e,v=>v==="Dockerfile"||v.startsWith("Dockerfile."));s.docker.dockerfileCount=u.length;let p$1=new Set;for(let v of u)try{let b=await r(v);for(let C of b.split(`
320
+ `)){let R=C.trim();if(/^FROM\s+/i.test(R)){let P=R.split(/\s+/),E=1;P[1]?.startsWith("--")&&(E=P[1].includes("=")?2:3),P[E]&&p$1.add(P[E]);}}}catch{}s.docker.baseImages=[...p$1].sort();let i$1=new Set;for(let[v,b]of Object.entries(pt))(await t(e,R=>R.endsWith(v))).length>0&&i$1.add(b);(await t(e,v=>v.endsWith(".cfn.json")||v.endsWith(".cfn.yaml"))).length>0&&i$1.add("cloudformation"),await n$1(I.join(e,"Pulumi.yaml"))&&i$1.add("pulumi"),s.iac=[...i$1].sort();let g=new Set;for(let[v,b]of Object.entries(lt))await n$1(I.join(e,v))&&g.add(b);let m=a?await a.findPackageJsonFiles(e):await j$1(e);for(let v of m)try{let b=a?await a.readJsonFile(v):await n(v);for(let C of ["dependencies","devDependencies"]){let R=b[C];if(R)for(let P of Object.keys(R))it.has(P)&&g.add(P);}}catch{}s.releaseTooling=[...g].sort();let y={"pnpm-lock.yaml":"pnpm","package-lock.json":"npm","yarn.lock":"yarn","bun.lockb":"bun"},l=new Set;for(let[v,b]of Object.entries(y))await n$1(I.join(e,v))&&l.add(b);let f=null,h=I.join(e,"package.json");if(await n$1(h))try{f=a?await a.readJsonFile(h):await n(h);}catch{}if(f?.packageManager){let v=f.packageManager.split("@")[0]?.toLowerCase();v&&["pnpm","yarn","npm","bun"].includes(v)&&l.add(v);}s.packageManagers=[...l].sort();let k=new Set;for(let[v,b]of Object.entries(ct))await n$1(I.join(e,v))&&k.add(b);return f?.workspaces&&k.add(l.has("yarn")?"yarn-workspaces":"npm-workspaces"),s.monorepoTools=[...k].sort(),s}async function ut(e,a){let s={typescriptVersion:null,strict:null,noImplicitAny:null,strictNullChecks:null,module:null,moduleResolution:null,target:null,moduleType:null,exportsField:false},n$1=a?await a.findPackageJsonFiles(e):await j$1(e),t=false,r=false;for(let u of n$1)try{let p=a?await a.readJsonFile(u):await n(u);if(!s.typescriptVersion){let d=p.devDependencies?.typescript??p.dependencies?.typescript;d&&(s.typescriptVersion=d.replace(/^[\^~>=<\s]+/,""));}let i=p.type;i==="module"?t=!0:i==="commonjs"?r=!0:i||(r=!0),p.exports&&(s.exportsField=!0);}catch{}t&&r?s.moduleType="mixed":t?s.moduleType="esm":r&&(s.moduleType="cjs");let o$1=I.join(e,"tsconfig.json");if(!(a?await a.pathExists(o$1):await p(o$1))){let u=a?await a.findFiles(e,p=>p==="tsconfig.json"):await i(e,p=>p==="tsconfig.json");if(u.length>0)o$1=u[0];else return s}try{let p=(a?await a.readTextFile(o$1):await o(o$1)).replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/,(\s*[}\]])/g,"$1"),d=JSON.parse(p)?.compilerOptions;d&&(typeof d.strict=="boolean"&&(s.strict=d.strict),typeof d.noImplicitAny=="boolean"&&(s.noImplicitAny=d.noImplicitAny),typeof d.strictNullChecks=="boolean"&&(s.strictNullChecks=d.strictNullChecks),typeof d.module=="string"&&(s.module=d.module),typeof d.moduleResolution=="string"&&(s.moduleResolution=d.moduleResolution),typeof d.target=="string"&&(s.target=d.target));}catch{}return s}var ft=new Set(["request","request-promise","request-promise-native","moment","node-sass","tslint","aws-sdk","babel-core","babel-preset-env","babel-preset-react","babel-loader","core-js","istanbul","istanbul-instrumenter-loader","left-pad","popper.js","create-react-class","react-addons-css-transition-group","react-addons-test-utils","@types/express-serve-static-core","enzyme","enzyme-adapter-react-16","enzyme-adapter-react-17","react-hot-loader","react-loadable","react-router-dom-v5-compat","redux-thunk","redux-saga","recompose","classnames","glamor","radium","material-ui","@material-ui/core","bower","grunt","gulp","browserify","coffee-script","coffeescript","jade","nomnom","optimist","minimist","colors","faker","event-stream","ua-parser-js","caniuse-db","circular-json","mkdirp","rimraf","glob","swig","dustjs-linkedin","hogan.js","passport-local-mongoose","@angular/http","rxjs-compat","protractor","karma","karma-jasmine","jasmine"]),mt=new Set(["node-fetch","cross-fetch","isomorphic-fetch","whatwg-fetch","abort-controller","form-data","formdata-polyfill","web-streams-polyfill","whatwg-url","url-parse","domexception","abortcontroller-polyfill","querystring","string_decoder","buffer","events","path-browserify","stream-browserify","stream-http","https-browserify","os-browserify","crypto-browserify","assert","util","process","timers-browserify","tty-browserify","vm-browserify","domain-browser","punycode","readable-stream","es6-promise","promise-polyfill","es6-symbol","es6-map","es6-set","es6-weak-map","es6-iterator","object-assign","object.assign","array.prototype.find","array.prototype.findindex","array.prototype.flat","array.prototype.flatmap","array-includes","string.prototype.startswith","string.prototype.endswith","string.prototype.includes","string.prototype.padstart","string.prototype.padend","string.prototype.matchall","string.prototype.replaceall","string.prototype.trimstart","string.prototype.trimend","string.prototype.at","object.entries","object.values","object.fromentries","globalthis","symbol-observable","setimmediate","regenerator-runtime","@babel/polyfill","whatwg-encoding","text-encoding","encoding","unorm","number.isnan","is-nan","has-symbols","has","hasown","safe-buffer","safer-buffer"]),gt=["BREAKING","Breaking Change","Removed","Deprecated","Migration","Rename","Drop support"],We={vue:{impactedFeatures:["Options API-heavy components","Deprecated hooks","Template filters","$listeners / $attrs merge behavior","Mixin-heavy architecture"],usagePatterns:[/\bexport\s+default\s*\{/,/\bmixins\s*:/,/\bfilters\s*:/,/\$listeners\b/,/beforeDestroy\b/,/destroyed\b/],automation:"manual"},"react-router-dom":{impactedFeatures:["Switch/Route v5 patterns","history prop mutation flows","withRouter HOC usage"],usagePatterns:[/\bSwitch\b/,/\bwithRouter\b/,/\bhistory\./,/<Route\s+component=/],automation:"deterministic-recipe"},eslint:{impactedFeatures:["Flat config migration",".eslintrc plugin resolution","legacy parser/plugin options"],usagePatterns:[/\.eslintrc/,/eslintConfig/,/module\.exports\s*=\s*\[/,/extends\s*:/],automation:"deterministic-recipe"},typescript:{impactedFeatures:["Stricter type checks","tsconfig option removals","moduleResolution defaults changes"],usagePatterns:[/tsconfig\.json/,/strictNullChecks/,/noImplicitAny/,/moduleResolution/],automation:"manual"},"@angular/core":{impactedFeatures:["NgModule bootstrap assumptions","Standalone component migration","Deprecated lifecycle signatures"],usagePatterns:[/@NgModule\b/,/ngOnInit\(/,/providers\s*:/],automation:"codemod-available",codemod:"ng update"}};function fe(e,a,s){return e===0?"do-nothing":s>0&&a===0?"codemod-available":a>0?"manual-hotspots":e<=2?"upgrade-safely-now":"plan-major-upgrade"}function Ue(e){return e?_.coerce(e)?.major??null:null}function yt(e){return e.resolvedVersion&&_.valid(_.coerce(e.resolvedVersion))?_.coerce(e.resolvedVersion)?.version??null:_.minVersion(e.currentSpec)?.version??null}function ht(e,a){if(a<=e+1)return [];let s=[];for(let n=e+1;n<a;n++)s.push(`${n}.x`);return s}async function vt(e,a,s,n){let t=new Map;for(let p of n)t.set(p,{importSites:0,filesTouched:0,patternHits:0});let r=await s.walkDir(a),o=e.path.replace(/\\/g,"/").replace(/^\.\//,""),u=r.filter(p=>p.isFile&&p.relPath.replace(/\\/g,"/").startsWith(o)).filter(p=>/\.(ts|tsx|js|jsx|vue|mjs|cjs|json)$/.test(p.name));for(let p of u){let i="";try{i=await s.readTextFile(I.join(a,p.relPath));}catch{continue}for(let d of n){let g=t.get(d);if(!g)continue;let m=d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),y=new RegExp(`(?:from\\s+['"]${m}['"]|require\\(\\s*['"]${m}['"]\\s*\\)|import\\(\\s*['"]${m}['"]\\s*\\))`,"g"),l=i.match(y)??[];l.length>0&&(g.importSites+=l.length,g.filesTouched+=1);let f=We[d];if(f)for(let h of f.usagePatterns){let k=i.match(new RegExp(h.source,"g"));k&&(g.patternHits+=k.length);}}}return t}async function kt(e,a,s){let n=new Set,t=new Set,r=false;for(let m of e)for(let y of m.dependencies)ft.has(y.package)&&n.add(y.package),mt.has(y.package)&&t.add(y.package),y.section==="peerDependencies"&&y.majorsBehind!==null&&y.majorsBehind>=2&&(r=true);let o=0;o+=Math.min(n.size*10,40),o+=Math.min(t.size*5,30),o+=r?20:0,o=Math.min(o,100);let c=[],u=new Map,p=0,i=0,d=0;for(let m of e){let y=m.dependencies.filter(k=>(k.majorsBehind??0)>=1&&k.latestStable);if(y.length===0){c.push({project:m.name,projectPath:m.path,packages:[],recommendation:"do-nothing"});continue}let l=await vt(m,a,s,y.map(k=>k.package)),f=y.map(k=>{let v=yt(k),b=k.latestStable,C=Ue(v),R=Ue(b),P=C!==null&&R!==null?ht(C,R):[],E=l.get(k.package)??{importSites:0,filesTouched:0,patternHits:0},oe=Math.max(1,m.fileCount??1),re=Math.min(100,Math.round((E.filesTouched+E.patternHits)/oe*100)),U=We[k.package],ea=U?.impactedFeatures??["Public API usage patterns","Configuration surface","Runtime compatibility expectations"],ie=U?.automation??(E.patternHits>0?"manual":"deterministic-recipe");return p++,ie==="manual"&&i++,ie==="codemod-available"&&d++,{package:k.package,currentVersion:v,targetVersion:b,majorJumpCount:k.majorsBehind??0,interimMajors:P,releaseNoteSources:["GitHub Releases","Repository tags","CHANGELOG.md"],parsedSignals:[...gt],impactedFeatures:ea,usage:{importSites:E.importSites,filesTouchedEstimate:E.filesTouched,functionsTouchedEstimate:E.patternHits,touchedPercent:re},automatable:ie,codemod:U?.codemod}}),h=fe(f.length,f.filter(k=>k.automatable==="manual").length,f.filter(k=>k.automatable==="codemod-available").length);if(c.push({project:m.name,projectPath:m.path,packages:f,recommendation:h}),m.solutionId){let k=m.solutionId,v=u.get(k)??{solutionId:k,solutionName:m.solutionName??k,projectCount:0,majorPackages:0,recommendation:"do-nothing"};v.projectCount+=1,v.majorPackages+=f.length,v.recommendation=fe(v.majorPackages,i,d),u.set(k,v);}}let g=fe(p,i,d);return {deprecatedPackages:[...n].sort(),legacyPolyfills:[...t].sort(),peerConflictsDetected:r,exposureScore:o,projectIntelligence:c,solutionIntelligence:[...u.values()],overallRecommendation:g}}var bt=new Set(["node_modules",".git",".wrangler",".next","dist","build","out",".turbo",".cache","coverage","bin","obj",".vs","TestResults",".nuxt",".output",".svelte-kit"]),Me=new Set([".map",".lock",".png",".jpg",".jpeg",".gif",".ico",".svg",".woff",".woff2",".ttf",".otf",".eot",".mp4",".webm"]);async function wt(e,a){let s={},n=[],t=0;if(a){let o=await a.walkDir(e);for(let c of o){if(!c.isFile)continue;let u=I.extname(c.name).toLowerCase();if(Me.has(u))continue;let p=c.relPath.split(I.sep).length-1;p>t&&(t=p),s[u]=(s[u]??0)+1;try{let i=await V.stat(c.absPath);n.push({path:c.relPath,bytes:i.size});}catch{}}}else {async function o(c,u){u>t&&(t=u);let p;try{p=(await V.readdir(c,{withFileTypes:!0})).map(d=>({name:d.name,isDirectory:d.isDirectory(),isFile:d.isFile()}));}catch{return}for(let i of p)if(i.isDirectory){if(bt.has(i.name))continue;await o(I.join(c,i.name),u+1);}else if(i.isFile){let d=I.extname(i.name).toLowerCase();if(Me.has(d))continue;s[d]=(s[d]??0)+1;try{let g=await V.stat(I.join(c,i.name));n.push({path:I.relative(e,I.join(c,i.name)),bytes:g.size});}catch{}}}await o(e,0);}n.sort((o,c)=>c.bytes-o.bytes);let r=n.slice(0,20);return {fileCountByExtension:s,largestFiles:r,totalFiles:n.length,maxDirectoryDepth:t,mostUsedPackages:[]}}var St={"pnpm-lock.yaml":"pnpm","package-lock.json":"npm","yarn.lock":"yarn","bun.lockb":"bun","packages.lock.json":"nuget"};async function xt(e,a){let s={lockfilePresent:false,multipleLockfileTypes:false,gitignoreCoversEnv:false,gitignoreCoversNodeModules:false,envFilesTracked:false,lockfileTypes:[]},n=a?c=>a.pathExists(c):p,t=a?c=>a.readTextFile(c):o,r=[];for(let[c,u]of Object.entries(St))await n(I.join(e,c))&&r.push(u);s.lockfilePresent=r.length>0,s.multipleLockfileTypes=r.length>1,s.lockfileTypes=r.sort();let o$1=I.join(e,".gitignore");if(await n(o$1))try{let u=(await t(o$1)).split(`
321
+ `).map(p=>p.trim());s.gitignoreCoversEnv=u.some(p=>p===".env"||p===".env*"||p===".env.*"||p===".env.local"||p==="*.env"),s.gitignoreCoversNodeModules=u.some(p=>p==="node_modules"||p==="node_modules/"||p==="/node_modules");}catch{}for(let c of [".env",".env.local",".env.development",".env.production"])if(await n(I.join(e,c))&&!s.gitignoreCoversEnv){s.envFilesTracked=true;break}return s}var jt={payment:{stripe:"Stripe","@stripe/stripe-js":"Stripe.js","@stripe/react-stripe-js":"Stripe React",braintree:"Braintree","braintree-web":"Braintree Web","@paypal/checkout-server-sdk":"PayPal","@paypal/react-paypal-js":"PayPal React","@paypal/paypal-js":"PayPal.js",square:"Square",razorpay:"Razorpay","adyen-api-library":"Adyen","@adyen/api-library":"Adyen","@adyen/adyen-web":"Adyen Web","mollie-api-node":"Mollie","@lemonsqueezy/lemonsqueezy.js":"Lemon Squeezy","paddle-sdk":"Paddle","@paddle/paddle-node-sdk":"Paddle","coinbase-commerce-node":"Coinbase Commerce","gocardless-nodejs":"GoCardless","klarna-checkout":"Klarna","@recurly/recurly-js":"Recurly",chargebee:"Chargebee"},auth:{"@auth0/auth0-spa-js":"Auth0 SPA","@auth0/auth0-react":"Auth0 React","@auth0/nextjs-auth0":"Auth0 Next.js",auth0:"Auth0","@clerk/clerk-js":"Clerk.js","@clerk/clerk-sdk-node":"Clerk (Node)","@clerk/nextjs":"Clerk (Next.js)","@clerk/react-router":"Clerk (React Router)","@clerk/tanstack-react-start":"Clerk (TanStack Start)","@clerk/expo":"Clerk (Expo)","@clerk/astro":"Clerk (Astro)","@clerk/chrome-extension":"Clerk (Chrome Extension)","@clerk/express":"Clerk (Express)","@clerk/fastify":"Clerk (Fastify)","@clerk/hono":"Clerk (Hono)","@clerk/nuxt":"Clerk (Nuxt)","@clerk/react":"Clerk (React)","@clerk/vue":"Clerk (Vue)","@clerk/clerk-react":"Clerk (React)","firebase-admin":"Firebase Admin",firebase:"Firebase","@firebase/auth":"Firebase Auth",passport:"Passport.js","passport-local":"Passport Local","passport-google-oauth20":"Passport Google","passport-github2":"Passport GitHub","next-auth":"NextAuth","@auth/core":"Auth.js","@supabase/supabase-js":"Supabase","@supabase/auth-helpers-nextjs":"Supabase Auth (Next.js)","@supabase/ssr":"Supabase SSR",jsonwebtoken:"JWT",jose:"JOSE","@okta/okta-auth-js":"Okta","@okta/okta-react":"Okta React","oidc-client-ts":"OIDC Client","@casl/ability":"CASL",casbin:"Casbin","keycloak-js":"Keycloak","@keycloak/keycloak-admin-client":"Keycloak Admin",lucia:"Lucia Auth","@lucia-auth/adapter-prisma":"Lucia (Prisma)",arctic:"Arctic (OAuth)","better-auth":"Better Auth",grant:"Grant (OAuth)","@workos-inc/node":"WorkOS",stytch:"Stytch",frontegg:"Frontegg","@descope/node-sdk":"Descope","kinde-auth-nextjs":"Kinde"},email:{"@sendgrid/mail":"SendGrid","@sendgrid/client":"SendGrid Client",nodemailer:"Nodemailer",twilio:"Twilio","@aws-sdk/client-ses":"AWS SES","@aws-sdk/client-sesv2":"AWS SES v2",postmark:"Postmark","mailgun.js":"Mailgun",resend:"Resend","@react-email/components":"React Email","react-email":"React Email",mjml:"MJML","email-templates":"Email Templates","@mailchimp/mailchimp_marketing":"Mailchimp","@mailchimp/mailchimp_transactional":"Mailchimp Transactional","plunk-node":"Plunk",brevo:"Brevo (Sendinblue)","sib-api-v3-sdk":"Brevo v3","@customer.io/node":"Customer.io",sparkpost:"SparkPost","mandrill-api":"Mandrill","mail-listener5":"Mail Listener","@azure/communication-email":"Azure Email"},cloud:{"aws-sdk":"AWS SDK v2","@aws-sdk/client-s3":"AWS S3","@aws-sdk/client-lambda":"AWS Lambda","@aws-sdk/client-dynamodb":"AWS DynamoDB","@aws-sdk/client-ec2":"AWS EC2","@aws-sdk/client-ecs":"AWS ECS","@aws-sdk/client-ecr":"AWS ECR","@aws-sdk/client-cloudformation":"AWS CloudFormation","@aws-sdk/client-cloudwatch":"AWS CloudWatch","@aws-sdk/client-cloudfront":"AWS CloudFront","@aws-sdk/client-iam":"AWS IAM","@aws-sdk/client-secrets-manager":"AWS Secrets Manager","@aws-sdk/client-ssm":"AWS SSM","@aws-sdk/client-sts":"AWS STS","@aws-sdk/client-cognito-identity-provider":"AWS Cognito","@aws-sdk/client-route-53":"AWS Route 53","@aws-sdk/client-step-functions":"AWS Step Functions","@aws-sdk/client-eventbridge":"AWS EventBridge","@aws-sdk/client-kinesis":"AWS Kinesis","@aws-sdk/client-kms":"AWS KMS","@aws-sdk/client-athena":"AWS Athena","@aws-sdk/client-bedrock-runtime":"AWS Bedrock","@aws-sdk/lib-dynamodb":"AWS DynamoDB Doc","@azure/storage-blob":"Azure Blob","@azure/identity":"Azure Identity","@azure/cosmos":"Azure Cosmos DB","@azure/keyvault-secrets":"Azure Key Vault","@azure/service-bus":"Azure Service Bus","@azure/event-hubs":"Azure Event Hubs","@azure/functions":"Azure Functions","@azure/ai-form-recognizer":"Azure Form Recognizer","@azure/openai":"Azure OpenAI","@azure/app-configuration":"Azure App Config","@azure/monitor-opentelemetry":"Azure Monitor OTel","@azure/container-registry":"Azure Container Registry","@google-cloud/storage":"GCP Storage","@google-cloud/functions-framework":"GCP Functions","@google-cloud/bigquery":"GCP BigQuery","@google-cloud/firestore":"GCP Firestore","@google-cloud/pubsub":"GCP Pub/Sub","@google-cloud/secret-manager":"GCP Secret Manager","@google-cloud/tasks":"GCP Cloud Tasks","@google-cloud/run":"GCP Cloud Run","@google-cloud/logging":"GCP Logging","@google-cloud/translate":"GCP Translate","@google-cloud/vertexai":"GCP Vertex AI","@vercel/sdk":"Vercel","@vercel/kv":"Vercel KV","@vercel/blob":"Vercel Blob","@vercel/postgres":"Vercel Postgres","@vercel/edge-config":"Vercel Edge Config","@netlify/functions":"Netlify Functions","@cloudflare/workers-types":"Cloudflare Workers",wrangler:"Wrangler","@railway/cli":"Railway","@fly/apps":"Fly.io","heroku-client":"Heroku","@pulumi/pulumi":"Pulumi","@pulumi/aws":"Pulumi AWS",cdktf:"CDK for Terraform","aws-cdk-lib":"AWS CDK",sst:"SST"},databases:{pg:"PostgreSQL",postgres:"Postgres.js",mysql2:"MySQL",mysql:"MySQL (legacy)",mongodb:"MongoDB",ioredis:"Redis (ioredis)",redis:"Redis","better-sqlite3":"SQLite","sql.js":"sql.js","@prisma/client":"Prisma","drizzle-orm":"Drizzle",typeorm:"TypeORM",sequelize:"Sequelize",knex:"Knex",kysely:"Kysely",objection:"Objection.js",slonik:"Slonik",massive:"Massive.js",mongoose:"Mongoose","@mikro-orm/core":"MikroORM",mssql:"SQL Server",oracledb:"Oracle","cassandra-driver":"Cassandra","neo4j-driver":"Neo4j",arangojs:"ArangoDB","@clickhouse/client":"ClickHouse",influx:"InfluxDB","@libsql/client":"libSQL (Turso)","@neondatabase/serverless":"Neon","@planetscale/database":"PlanetScale","@electric-sql/pglite":"PGlite","@upstash/redis":"Upstash Redis","@upstash/kafka":"Upstash Kafka","@upstash/qstash":"Upstash QStash","@upstash/vector":"Upstash Vector",dynamoose:"Dynamoose",fauna:"Fauna",faunadb:"FaunaDB","@supabase/postgrest-js":"Supabase PostgREST",couchbase:"Couchbase","couchdb-nano":"CouchDB",duckdb:"DuckDB","@tidbcloud/serverless":"TiDB Serverless"},messaging:{"@aws-sdk/client-sqs":"AWS SQS","@aws-sdk/client-sns":"AWS SNS",amqplib:"RabbitMQ",kafkajs:"Kafka",bullmq:"BullMQ",bull:"Bull","@google-cloud/pubsub":"GCP Pub/Sub","bee-queue":"Bee Queue","pg-boss":"pg-boss",agenda:"Agenda","@azure/service-bus":"Azure Service Bus","@azure/event-hubs":"Azure Event Hubs",nats:"NATS",mqtt:"MQTT",zeromq:"ZeroMQ","@temporalio/client":"Temporal Client","@temporalio/worker":"Temporal Worker",inngest:"Inngest","@trigger.dev/sdk":"Trigger.dev","@defer/client":"Defer","graphile-worker":"Graphile Worker","@quirrel/quirrel":"Quirrel",rhea:"AMQP 1.0 (rhea)",stompit:"STOMP","@eventstore/db-client":"EventStoreDB","@aws-sdk/client-eventbridge":"AWS EventBridge","@aws-sdk/client-kinesis":"AWS Kinesis","@aws-sdk/client-firehose":"AWS Firehose"},observability:{"@sentry/node":"Sentry (Node)","@sentry/browser":"Sentry (Browser)","@sentry/react":"Sentry (React)","@sentry/nextjs":"Sentry (Next.js)","@sentry/vue":"Sentry (Vue)","@sentry/angular":"Sentry (Angular)","@opentelemetry/api":"OpenTelemetry API","@opentelemetry/sdk-node":"OpenTelemetry SDK","@opentelemetry/auto-instrumentations-node":"OpenTelemetry Auto",applicationinsights:"App Insights","dd-trace":"Datadog","@datadog/browser-rum":"Datadog RUM",newrelic:"New Relic","@newrelic/browser-agent":"New Relic Browser",pino:"Pino",winston:"Winston",bunyan:"Bunyan",consola:"Consola",loglevel:"loglevel",roarr:"Roarr","prom-client":"Prometheus","elastic-apm-node":"Elastic APM","@logtail/node":"Logtail","@axiomhq/pino":"Axiom (Pino)","@axiomhq/winston":"Axiom (Winston)","@baselime/node-opentelemetry":"Baselime","highlight.run":"Highlight","@google-cloud/trace-agent":"GCP Trace","@google-cloud/logging":"GCP Logging","@azure/monitor-opentelemetry":"Azure Monitor","lightstep-tracer":"Lightstep","honeycomb-beeline":"Honeycomb","@honeycombio/opentelemetry-node":"Honeycomb OTel","posthog-node":"PostHog","@amplitude/node":"Amplitude",mixpanel:"Mixpanel","@segment/analytics-node":"Segment","analytics-node":"Segment (legacy)","@rudderstack/rudder-sdk-node":"RudderStack","heap-api":"Heap","@fullstory/browser":"FullStory","@logrocket/react":"LogRocket",logrocket:"LogRocket","hotjar-js":"Hotjar","@clarity-ai/clarity":"Microsoft Clarity"},crm:{"xero-node":"Xero","hubspot-api-client":"HubSpot","@hubspot/api-client":"HubSpot","@slack/web-api":"Slack Web API","@slack/bolt":"Slack Bolt","@slack/events-api":"Slack Events","discord.js":"Discord","intercom-client":"Intercom","salesforce-sdk":"Salesforce",jsforce:"JSforce (Salesforce)","@zendesk/sell-client":"Zendesk","node-zendesk":"Zendesk","freshdesk-api":"Freshdesk",pipedrive:"Pipedrive",airtable:"Airtable","@notionhq/client":"Notion","@linear/sdk":"Linear","jira-client":"Jira","jira.js":"Jira.js","@octokit/rest":"GitHub (Octokit)","@octokit/core":"GitHub (Octokit Core)",gitlab:"GitLab","@gitbeaker/rest":"GitLab (Gitbeaker)","clickup.js":"ClickUp",asana:"Asana","monday-sdk-js":"Monday.com","telegram-bot-api":"Telegram",telegraf:"Telegraf (Telegram)","@microsoft/microsoft-graph-client":"Microsoft Graph",googleapis:"Google APIs","@google-cloud/aiplatform":"Google AI Platform"},storage:{"@aws-sdk/client-s3":"AWS S3","@aws-sdk/s3-request-presigner":"AWS S3 Presigner","@azure/storage-blob":"Azure Blob","@azure/storage-queue":"Azure Storage Queue","@azure/storage-file-share":"Azure File Share","@google-cloud/storage":"GCP Storage",minio:"MinIO","@supabase/storage-js":"Supabase Storage",cloudinary:"Cloudinary",uploadthing:"UploadThing","@uploadthing/react":"UploadThing React",multer:"Multer","multer-s3":"Multer S3",formidable:"Formidable",busboy:"Busboy","@vercel/blob":"Vercel Blob",imagekit:"ImageKit",sharp:"Sharp (image)",jimp:"Jimp (image)","fluent-ffmpeg":"FFmpeg","@google-cloud/vision":"GCP Vision","@aws-sdk/client-rekognition":"AWS Rekognition","file-type":"file-type","@backblaze-b2/sdk":"Backblaze B2","wasabi-sdk":"Wasabi"},search:{"@elastic/elasticsearch":"Elasticsearch",algoliasearch:"Algolia","@algolia/client-search":"Algolia Client","react-instantsearch":"Algolia InstantSearch",meilisearch:"Meilisearch",typesense:"Typesense","@opensearch-project/opensearch":"OpenSearch","solr-client":"Solr",lunr:"Lunr",flexsearch:"FlexSearch","fuse.js":"Fuse.js",minisearch:"MiniSearch",orama:"Orama","@orama/orama":"Orama","@trieve/trieve-ts-sdk":"Trieve",pagefind:"Pagefind","@pinecone-database/pinecone":"Pinecone",chromadb:"Chroma","@qdrant/js-client-rest":"Qdrant","weaviate-ts-client":"Weaviate","@zilliz/milvus2-sdk-node":"Milvus",openai:"OpenAI","@anthropic-ai/sdk":"Anthropic","@langchain/core":"LangChain",langchain:"LangChain","@google/generative-ai":"Google Gemini","cohere-ai":"Cohere",replicate:"Replicate","@huggingface/inference":"Hugging Face",ai:"Vercel AI SDK","@ai-sdk/openai":"AI SDK (OpenAI)"}};function Ct(e){let a=new Map;for(let n of e)for(let t of n.dependencies)a.has(t.package)||a.set(t.package,t.resolvedVersion);let s={payment:[],auth:[],email:[],cloud:[],databases:[],messaging:[],observability:[],crm:[],storage:[],search:[]};for(let[n,t]of Object.entries(jt)){let r=[];for(let[o,c]of Object.entries(t))a.has(o)&&r.push({name:c,package:o,version:a.get(o)??null});r.sort((o,c)=>o.name.localeCompare(c.name)),s[n]=r;}return s}var Rt=[{packages:["next","@next/core"],archetype:"nextjs",weight:10},{packages:["@remix-run/react","@remix-run/node","@remix-run/dev"],archetype:"remix",weight:10},{packages:["@sveltejs/kit"],archetype:"sveltekit",weight:10},{packages:["nuxt"],archetype:"nuxt",weight:10},{packages:["@nestjs/core","@nestjs/common"],archetype:"nestjs",weight:9},{packages:["fastify"],archetype:"fastify",weight:8},{packages:["hono"],archetype:"hono",weight:8},{packages:["koa"],archetype:"koa",weight:8},{packages:["express"],archetype:"express",weight:7},{packages:["serverless","aws-lambda","@aws-sdk/client-lambda","middy","@cloudflare/workers-types"],archetype:"serverless",weight:6},{packages:["commander","yargs","meow","cac","clipanion","oclif"],archetype:"cli",weight:5}];function Tt(e){let a=new Set;for(let r of e)for(let o of r.dependencies)a.add(o.package);if(e.length>2)return {archetype:"monorepo",confidence:.8};let s="unknown",n=0;for(let r of Rt){let o=r.packages.filter(c=>a.has(c)).length;if(o>0){let c=o*r.weight;c>n&&(n=c,s=r.archetype);}}s==="unknown"&&(s="library",n=3);let t=Math.min(n/15,1);return {archetype:s,confidence:Math.round(t*100)/100}}var Pt=[{pattern:/\/__tests__\//,layer:"testing",confidence:.95,signal:"__tests__ directory"},{pattern:/\.test\.[jt]sx?$/,layer:"testing",confidence:.95,signal:".test.* file"},{pattern:/\.spec\.[jt]sx?$/,layer:"testing",confidence:.95,signal:".spec.* file"},{pattern:/\/test\//,layer:"testing",confidence:.85,signal:"test/ directory"},{pattern:/\/tests\//,layer:"testing",confidence:.85,signal:"tests/ directory"},{pattern:/\/__mocks__\//,layer:"testing",confidence:.9,signal:"__mocks__ directory"},{pattern:/\/fixtures\//,layer:"testing",confidence:.8,signal:"fixtures/ directory"},{pattern:/\/config\.[jt]sx?$/,layer:"config",confidence:.85,signal:"config.* file"},{pattern:/\/config\//,layer:"config",confidence:.8,signal:"config/ directory"},{pattern:/\.config\.[jt]sx?$/,layer:"config",confidence:.9,signal:".config.* file"},{pattern:/\/env\.[jt]sx?$/,layer:"config",confidence:.85,signal:"env.* file"},{pattern:/\/bootstrap\.[jt]sx?$/,layer:"config",confidence:.85,signal:"bootstrap file"},{pattern:/\/setup\.[jt]sx?$/,layer:"config",confidence:.8,signal:"setup file"},{pattern:/(^|\/)app\/.*\/route\.[jt]sx?$/,layer:"routing",confidence:.95,signal:"Next.js App Router route",archetypes:["nextjs"]},{pattern:/(^|\/)pages\/api\//,layer:"routing",confidence:.95,signal:"Next.js Pages API route",archetypes:["nextjs"]},{pattern:/(^|\/)app\/.*page\.[jt]sx?$/,layer:"presentation",confidence:.9,signal:"Next.js page component",archetypes:["nextjs"]},{pattern:/(^|\/)app\/.*layout\.[jt]sx?$/,layer:"presentation",confidence:.9,signal:"Next.js layout component",archetypes:["nextjs"]},{pattern:/(^|\/)app\/.*loading\.[jt]sx?$/,layer:"presentation",confidence:.85,signal:"Next.js loading component",archetypes:["nextjs"]},{pattern:/(^|\/)app\/.*error\.[jt]sx?$/,layer:"presentation",confidence:.85,signal:"Next.js error component",archetypes:["nextjs"]},{pattern:/(^|\/)middleware\.[jt]sx?$/,layer:"middleware",confidence:.9,signal:"Next.js middleware",archetypes:["nextjs"]},{pattern:/\/app\/routes\//,layer:"routing",confidence:.95,signal:"Remix route file",archetypes:["remix"]},{pattern:/\/app\/root\.[jt]sx?$/,layer:"presentation",confidence:.9,signal:"Remix root",archetypes:["remix"]},{pattern:/\/src\/routes\/.*\+server\.[jt]s$/,layer:"routing",confidence:.95,signal:"SvelteKit API route",archetypes:["sveltekit"]},{pattern:/\/src\/routes\/.*\+page\.svelte$/,layer:"presentation",confidence:.9,signal:"SvelteKit page",archetypes:["sveltekit"]},{pattern:/\/src\/routes\/.*\+layout\.svelte$/,layer:"presentation",confidence:.9,signal:"SvelteKit layout",archetypes:["sveltekit"]},{pattern:/\/src\/hooks\.server\.[jt]s$/,layer:"middleware",confidence:.9,signal:"SvelteKit server hooks",archetypes:["sveltekit"]},{pattern:/\/server\/api\//,layer:"routing",confidence:.95,signal:"Nuxt server API",archetypes:["nuxt"]},{pattern:/\/server\/routes\//,layer:"routing",confidence:.95,signal:"Nuxt server route",archetypes:["nuxt"]},{pattern:/\/server\/middleware\//,layer:"middleware",confidence:.95,signal:"Nuxt server middleware",archetypes:["nuxt"]},{pattern:/\/pages\//,layer:"presentation",confidence:.85,signal:"Nuxt pages directory",archetypes:["nuxt"]},{pattern:/\.controller\.[jt]sx?$/,layer:"routing",confidence:.95,signal:"NestJS controller",archetypes:["nestjs"]},{pattern:/\.service\.[jt]sx?$/,layer:"services",confidence:.95,signal:"NestJS service",archetypes:["nestjs"]},{pattern:/\.module\.[jt]sx?$/,layer:"config",confidence:.9,signal:"NestJS module",archetypes:["nestjs"]},{pattern:/\.guard\.[jt]sx?$/,layer:"middleware",confidence:.9,signal:"NestJS guard",archetypes:["nestjs"]},{pattern:/\.interceptor\.[jt]sx?$/,layer:"middleware",confidence:.9,signal:"NestJS interceptor",archetypes:["nestjs"]},{pattern:/\.pipe\.[jt]sx?$/,layer:"middleware",confidence:.85,signal:"NestJS pipe",archetypes:["nestjs"]},{pattern:/\.middleware\.[jt]sx?$/,layer:"middleware",confidence:.9,signal:"NestJS middleware",archetypes:["nestjs"]},{pattern:/\.entity\.[jt]sx?$/,layer:"domain",confidence:.9,signal:"NestJS entity",archetypes:["nestjs"]},{pattern:/\.dto\.[jt]sx?$/,layer:"domain",confidence:.85,signal:"NestJS DTO",archetypes:["nestjs"]},{pattern:/\.repository\.[jt]sx?$/,layer:"data-access",confidence:.9,signal:"NestJS repository",archetypes:["nestjs"]},{pattern:/\/routes\//,layer:"routing",confidence:.8,signal:"routes/ directory"},{pattern:/\/router\//,layer:"routing",confidence:.8,signal:"router/ directory"},{pattern:/\/controllers\//,layer:"routing",confidence:.8,signal:"controllers/ directory"},{pattern:/\/handlers\//,layer:"routing",confidence:.75,signal:"handlers/ directory"},{pattern:/\/api\//,layer:"routing",confidence:.7,signal:"api/ directory"},{pattern:/\/endpoints\//,layer:"routing",confidence:.8,signal:"endpoints/ directory"},{pattern:/\/middleware\//,layer:"middleware",confidence:.85,signal:"middleware/ directory"},{pattern:/\/middlewares\//,layer:"middleware",confidence:.85,signal:"middlewares/ directory"},{pattern:/\/hooks\//,layer:"middleware",confidence:.6,signal:"hooks/ directory"},{pattern:/\/plugins\//,layer:"middleware",confidence:.6,signal:"plugins/ directory"},{pattern:/\/guards\//,layer:"middleware",confidence:.85,signal:"guards/ directory"},{pattern:/\/interceptors\//,layer:"middleware",confidence:.85,signal:"interceptors/ directory"},{pattern:/\/services\//,layer:"services",confidence:.85,signal:"services/ directory"},{pattern:/\/service\//,layer:"services",confidence:.8,signal:"service/ directory"},{pattern:/\/usecases\//,layer:"services",confidence:.85,signal:"usecases/ directory"},{pattern:/\/use-cases\//,layer:"services",confidence:.85,signal:"use-cases/ directory"},{pattern:/\/application\//,layer:"services",confidence:.7,signal:"application/ directory"},{pattern:/\/actions\//,layer:"services",confidence:.65,signal:"actions/ directory"},{pattern:/\/domain\//,layer:"domain",confidence:.85,signal:"domain/ directory"},{pattern:/\/models\//,layer:"domain",confidence:.8,signal:"models/ directory"},{pattern:/\/entities\//,layer:"domain",confidence:.85,signal:"entities/ directory"},{pattern:/\/types\//,layer:"domain",confidence:.7,signal:"types/ directory"},{pattern:/\/schemas\//,layer:"domain",confidence:.7,signal:"schemas/ directory"},{pattern:/\/validators\//,layer:"domain",confidence:.7,signal:"validators/ directory"},{pattern:/\/repositories\//,layer:"data-access",confidence:.9,signal:"repositories/ directory"},{pattern:/\/repository\//,layer:"data-access",confidence:.85,signal:"repository/ directory"},{pattern:/\/dao\//,layer:"data-access",confidence:.9,signal:"dao/ directory"},{pattern:/\/db\//,layer:"data-access",confidence:.8,signal:"db/ directory"},{pattern:/\/database\//,layer:"data-access",confidence:.8,signal:"database/ directory"},{pattern:/\/persistence\//,layer:"data-access",confidence:.85,signal:"persistence/ directory"},{pattern:/\/migrations\//,layer:"data-access",confidence:.9,signal:"migrations/ directory"},{pattern:/\/seeds\//,layer:"data-access",confidence:.85,signal:"seeds/ directory"},{pattern:/\/prisma\//,layer:"data-access",confidence:.85,signal:"prisma/ directory"},{pattern:/\/drizzle\//,layer:"data-access",confidence:.85,signal:"drizzle/ directory"},{pattern:/\/infra\//,layer:"infrastructure",confidence:.85,signal:"infra/ directory"},{pattern:/\/infrastructure\//,layer:"infrastructure",confidence:.85,signal:"infrastructure/ directory"},{pattern:/\/adapters\//,layer:"infrastructure",confidence:.8,signal:"adapters/ directory"},{pattern:/\/clients\//,layer:"infrastructure",confidence:.75,signal:"clients/ directory"},{pattern:/\/integrations\//,layer:"infrastructure",confidence:.8,signal:"integrations/ directory"},{pattern:/\/external\//,layer:"infrastructure",confidence:.75,signal:"external/ directory"},{pattern:/\/queue\//,layer:"infrastructure",confidence:.8,signal:"queue/ directory"},{pattern:/\/jobs\//,layer:"infrastructure",confidence:.75,signal:"jobs/ directory"},{pattern:/\/workers\//,layer:"infrastructure",confidence:.75,signal:"workers/ directory"},{pattern:/\/cron\//,layer:"infrastructure",confidence:.8,signal:"cron/ directory"},{pattern:/\/components\//,layer:"presentation",confidence:.85,signal:"components/ directory"},{pattern:/\/views\//,layer:"presentation",confidence:.85,signal:"views/ directory"},{pattern:/\/pages\//,layer:"presentation",confidence:.8,signal:"pages/ directory"},{pattern:/\/layouts\//,layer:"presentation",confidence:.85,signal:"layouts/ directory"},{pattern:/\/templates\//,layer:"presentation",confidence:.8,signal:"templates/ directory"},{pattern:/\/widgets\//,layer:"presentation",confidence:.8,signal:"widgets/ directory"},{pattern:/\/ui\//,layer:"presentation",confidence:.75,signal:"ui/ directory"},{pattern:/\/utils\//,layer:"shared",confidence:.7,signal:"utils/ directory"},{pattern:/\/helpers\//,layer:"shared",confidence:.7,signal:"helpers/ directory"},{pattern:/\/lib\//,layer:"shared",confidence:.6,signal:"lib/ directory"},{pattern:/\/common\//,layer:"shared",confidence:.65,signal:"common/ directory"},{pattern:/\/shared\//,layer:"shared",confidence:.75,signal:"shared/ directory"},{pattern:/\/constants\//,layer:"shared",confidence:.7,signal:"constants/ directory"},{pattern:/\/commands\//,layer:"routing",confidence:.8,signal:"commands/ directory",archetypes:["cli"]},{pattern:/\/formatters\//,layer:"presentation",confidence:.8,signal:"formatters/ directory",archetypes:["cli"]},{pattern:/\/scanners\//,layer:"services",confidence:.8,signal:"scanners/ directory",archetypes:["cli"]},{pattern:/\/scoring\//,layer:"domain",confidence:.8,signal:"scoring/ directory",archetypes:["cli"]},{pattern:/\/functions\//,layer:"routing",confidence:.8,signal:"functions/ directory",archetypes:["serverless"]},{pattern:/\/lambdas\//,layer:"routing",confidence:.85,signal:"lambdas/ directory",archetypes:["serverless"]},{pattern:/\/layers\//,layer:"shared",confidence:.7,signal:"Lambda layers/ directory",archetypes:["serverless"]}],At=[{suffix:".controller",layer:"routing",confidence:.85,signal:"controller suffix"},{suffix:".route",layer:"routing",confidence:.85,signal:"route suffix"},{suffix:".router",layer:"routing",confidence:.85,signal:"router suffix"},{suffix:".handler",layer:"routing",confidence:.8,signal:"handler suffix"},{suffix:".middleware",layer:"middleware",confidence:.85,signal:"middleware suffix"},{suffix:".guard",layer:"middleware",confidence:.85,signal:"guard suffix"},{suffix:".interceptor",layer:"middleware",confidence:.85,signal:"interceptor suffix"},{suffix:".service",layer:"services",confidence:.85,signal:"service suffix"},{suffix:".usecase",layer:"services",confidence:.85,signal:"usecase suffix"},{suffix:".model",layer:"domain",confidence:.8,signal:"model suffix"},{suffix:".entity",layer:"domain",confidence:.85,signal:"entity suffix"},{suffix:".dto",layer:"domain",confidence:.8,signal:"DTO suffix"},{suffix:".schema",layer:"domain",confidence:.75,signal:"schema suffix"},{suffix:".validator",layer:"domain",confidence:.75,signal:"validator suffix"},{suffix:".repository",layer:"data-access",confidence:.9,signal:"repository suffix"},{suffix:".repo",layer:"data-access",confidence:.85,signal:"repo suffix"},{suffix:".dao",layer:"data-access",confidence:.9,signal:"dao suffix"},{suffix:".migration",layer:"data-access",confidence:.85,signal:"migration suffix"},{suffix:".adapter",layer:"infrastructure",confidence:.8,signal:"adapter suffix"},{suffix:".client",layer:"infrastructure",confidence:.75,signal:"client suffix"},{suffix:".provider",layer:"infrastructure",confidence:.7,signal:"provider suffix"},{suffix:".config",layer:"config",confidence:.8,signal:"config suffix"},{suffix:".component",layer:"presentation",confidence:.8,signal:"component suffix"},{suffix:".page",layer:"presentation",confidence:.85,signal:"page suffix"},{suffix:".view",layer:"presentation",confidence:.8,signal:"view suffix"},{suffix:".layout",layer:"presentation",confidence:.85,signal:"layout suffix"},{suffix:".util",layer:"shared",confidence:.7,signal:"util suffix"},{suffix:".helper",layer:"shared",confidence:.7,signal:"helper suffix"},{suffix:".constant",layer:"shared",confidence:.7,signal:"constant suffix"}],ge={express:"routing",fastify:"routing","@nestjs/core":"routing",hono:"routing",koa:"routing","koa-router":"routing","@hapi/hapi":"routing",h3:"routing",cors:"middleware",helmet:"middleware",passport:"middleware","express-rate-limit":"middleware","cookie-parser":"middleware","body-parser":"middleware",multer:"middleware",morgan:"middleware",compression:"middleware","express-session":"middleware",bullmq:"services",bull:"services",agenda:"services","pg-boss":"services",inngest:"services",zod:"domain",joi:"domain",yup:"domain","class-validator":"domain","class-transformer":"domain",superstruct:"domain",valibot:"domain",prisma:"data-access","@prisma/client":"data-access","drizzle-orm":"data-access",typeorm:"data-access",sequelize:"data-access",knex:"data-access",pg:"data-access",mysql2:"data-access",mongodb:"data-access",mongoose:"data-access",ioredis:"data-access",redis:"data-access","better-sqlite3":"data-access",kysely:"data-access","@mikro-orm/core":"data-access","@aws-sdk/client-s3":"infrastructure","@aws-sdk/client-sqs":"infrastructure","@aws-sdk/client-sns":"infrastructure","@aws-sdk/client-ses":"infrastructure","@aws-sdk/client-lambda":"infrastructure","@google-cloud/storage":"infrastructure","@azure/storage-blob":"infrastructure",nodemailer:"infrastructure","@sendgrid/mail":"infrastructure",stripe:"infrastructure",kafkajs:"infrastructure",amqplib:"infrastructure",react:"presentation","react-dom":"presentation",vue:"presentation","@angular/core":"presentation",svelte:"presentation",lodash:"shared",dayjs:"shared","date-fns":"shared",uuid:"shared",nanoid:"shared",vitest:"testing",jest:"testing",mocha:"testing","@playwright/test":"testing",cypress:"testing",supertest:"testing","@sentry/node":"infrastructure","@opentelemetry/api":"infrastructure",pino:"infrastructure",winston:"infrastructure","dd-trace":"infrastructure"},$e=new Set([".ts",".tsx",".js",".jsx",".mts",".mjs",".cts",".cjs",".svelte",".vue"]),Et=new Set(["node_modules",".git",".wrangler","dist","build",".next",".nuxt",".output",".svelte-kit","coverage",".vibgrate"]);async function He(e,a){if(a)return (await a.walkDir(e)).filter(r=>{if(!r.isFile)return false;let o=I.basename(r.absPath);if(o.startsWith(".")&&o!==".")return false;let c=I.extname(o);return $e.has(c)}).map(r=>r.relPath);let s=[];async function n(t){let r;try{r=await V.readdir(t,{withFileTypes:!0});}catch{return}for(let o of r){if(o.name.startsWith(".")&&o.name!==".")continue;let c=I.join(t,o.name);if(o.isDirectory())Et.has(o.name)||await n(c);else if(o.isFile()){let u=I.extname(o.name);$e.has(u)&&s.push(I.relative(e,c));}}}return await n(e),s}function Ve(e,a){let s=e.replace(/\\/g,"/"),n=null;for(let t of Pt)if(!(t.archetypes&&t.archetypes.length>0&&!t.archetypes.includes(a))&&t.pattern.test(s)){let r=t.archetypes?.05:0,o=Math.min(t.confidence+r,1);(!n||o>n.confidence)&&(n={layer:t.layer,confidence:o,signal:t.signal});}if(!n||n.confidence<.7){let r=I.basename(e,I.extname(e)).replace(/\.(test|spec)$/,"");for(let o of At)r.endsWith(o.suffix)&&(!n||o.confidence>n.confidence)&&(n={layer:o.layer,confidence:o.confidence,signal:o.signal});}return n?{filePath:e,layer:n.layer,confidence:n.confidence,signals:[n.signal]}:null}function Qe(e){if(e.length===0)return {score:0,riskLevel:"none"};let a=0,s=0,n=0,t=0;for(let g of e)g.majorsBehind===null?t++:g.majorsBehind===0?a++:g.majorsBehind===1?s++:n++;let r=a+s+n;if(r===0)return {score:0,riskLevel:"none"};let o=a/r,c=s/r,u=n/r,i=100-Math.round(Math.max(0,Math.min(100,o*100-c*10-u*40))),d=i<=30?"low":i<=60?"moderate":"high";return {score:i,riskLevel:d}}function It(e,a,s){let n=new Map,t=new Map,r=new Map;for(let[o,c]of s)for(let u of c)r.set(u,o);if(e)for(let[,o]of Object.entries(e))for(let c of o){let u=r.get(c.package)??ge[c.package]??"shared";n.has(u)||n.set(u,[]);let p=n.get(u);p.some(i=>i.package===c.package)||p.push(c);}if(a)for(let[,o]of Object.entries(a))for(let c of o){let u=r.get(c.package)??ge[c.package]??"infrastructure";t.has(u)||t.set(u,[]);let p=t.get(u);p.some(i=>i.package===c.package)||p.push(c);}return {layerTooling:n,layerServices:t}}function Ft(e){let a={presentation:"Presentation",routing:"Routing",middleware:"Middleware",services:"Services",domain:"Domain","data-access":"Data Access",infrastructure:"Infrastructure",config:"Config",shared:"Shared",testing:"Testing"};if(e.length===0)return `flowchart TD
322
+ APP["Project"]`;let s=[...e],n=["flowchart TD"];for(let t=0;t<s.length;t++){let r=s[t];n.push(` L${t}["${a[r]}"]`),t>0&&n.push(` L${t-1} --> L${t}`);}return n.join(`
323
+ `)}async function Ut(e,a,s,n){let t=I.resolve(e,a.path||"."),r=await He(t,n),o=new Set;for(let p of r){let i=Ve(p,s);i&&o.add(i.layer);}let u=["presentation","routing","middleware","services","domain","data-access","infrastructure","config","shared","testing"].filter(p=>o.has(p));return Ft(u)}async function Mt(e,a,s){let n=I.resolve(e,a.path||".");return Je(n,[a],void 0,void 0,s)}function $t(e){if(e.length===0)return {archetype:"unknown",archetypeConfidence:0,layers:[],totalClassified:0,unclassified:0};if(e.length===1)return e[0];let a="unknown",s=0;for(let u of e)(u.archetypeConfidence>s||u.archetypeConfidence===s&&u.archetype!=="monorepo")&&(a=u.archetype,s=u.archetypeConfidence);let n=new Map;for(let u of e)for(let p of u.layers){let i=n.get(p.layer);if(!i)n.set(p.layer,{...p,packages:[...p.packages],techStack:[...p.techStack],services:[...p.services]});else {i.fileCount+=p.fileCount;let d=new Set(i.packages.map(f=>f.name));for(let f of p.packages)d.has(f.name)||(i.packages.push(f),d.add(f.name));let g=new Set(i.techStack.map(f=>f.package));for(let f of p.techStack)g.has(f.package)||(i.techStack.push(f),g.add(f.package));let m=new Set(i.services.map(f=>f.package));for(let f of p.services)m.has(f.package)||(i.services.push(f),m.add(f.package));let{score:y,riskLevel:l}=Qe(i.packages);i.driftScore=y,i.riskLevel=l;}}let t={presentation:0,routing:1,middleware:2,services:3,domain:4,"data-access":5,infrastructure:6,config:7,shared:8,testing:9},r=[...n.values()].sort((u,p)=>(t[u.layer]??99)-(t[p.layer]??99)),o=e.reduce((u,p)=>u+p.totalClassified,0),c=e.reduce((u,p)=>u+p.unclassified,0);return {archetype:a,archetypeConfidence:s,layers:r,totalClassified:o,unclassified:c}}async function Je(e,a,s,n,t){let{archetype:r,confidence:o}=Tt(a),c=await He(e,t),u=[],p=0;for(let k of c){let v=Ve(k,r);v?u.push(v):p++;}let i=new Map;for(let k of a)for(let v of k.dependencies)i.has(v.package)||i.set(v.package,v);let d=new Map;for(let[k]of i){let v=ge[k];v&&(d.has(v)||d.set(v,new Set),d.get(v).add(k));}let{layerTooling:g,layerServices:m}=It(s,n,d),y=["routing","middleware","services","domain","data-access","infrastructure","presentation","config","testing","shared"],l=new Map;for(let k of u)l.set(k.layer,(l.get(k.layer)??0)+1);let f=[];for(let k of y){let v=l.get(k)??0,b=d.get(k)??new Set,C=g.get(k)??[],R=m.get(k)??[];if(v===0&&b.size===0&&C.length===0&&R.length===0)continue;let P=[];for(let re of b){let U=i.get(re);U&&P.push({name:U.package,version:U.resolvedVersion,latestStable:U.latestStable,majorsBehind:U.majorsBehind,drift:U.drift});}let{score:E,riskLevel:oe}=Qe(P);f.push({layer:k,fileCount:v,driftScore:E,riskLevel:oe,techStack:C,services:R,packages:P});}let h={presentation:0,routing:1,middleware:2,services:3,domain:4,"data-access":5,infrastructure:6,config:7,shared:8,testing:9};return f.sort((k,v)=>(h[k.layer]??99)-(h[v.layer]??99)),{archetype:r,archetypeConfidence:o,layers:f,totalClassified:u.length,unclassified:p}}var Le=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs"]),Lt={filesAnalyzed:0,functionsAnalyzed:0,avgCyclomaticComplexity:0,avgFunctionLength:0,maxNestingDepth:0,godFiles:[],circularDependencies:0,deadCodePercent:0};async function Ot(e,a){let s=await Dt(e,a);if(s.length===0)return {...Lt};let n=0,t=0,r=0,o$1=0,c=0,u=[],p=new Map;for(let g of s){let m="";try{m=a?await a.readTextFile(g):await o(g);}catch{continue}if(!m.trim())continue;let y=Ze(I.relative(e,g)),l=w.createSourceFile(g,m,w.ScriptTarget.Latest,true),f=Bt(l,I.dirname(g),e);p.set(y,f);let h=Nt(l,m);n+=h.functionsAnalyzed,t+=h.totalComplexity,r+=h.totalFunctionLength,o$1=Math.max(o$1,h.maxNestingDepth),c+=h.deadFunctionCount;let k=h.functionsAnalyzed>0?h.totalComplexity/h.functionsAnalyzed:0;(h.lines>=450||h.functionsAnalyzed>=25||h.functionsAnalyzed>=10&&k>=8)&&u.push({path:y,lines:h.lines,functionCount:h.functionsAnalyzed,averageComplexity:ee(k)});}let i=_t(p),d=n>0?c/n*100:0;return {filesAnalyzed:p.size,functionsAnalyzed:n,avgCyclomaticComplexity:n>0?ee(t/n):0,avgFunctionLength:n>0?ee(r/n):0,maxNestingDepth:o$1,godFiles:u.sort((g,m)=>m.lines-g.lines||m.functionCount-g.functionCount).slice(0,10),circularDependencies:i,deadCodePercent:ee(d)}}async function Dt(e,a){return a?(await a.walkDir(e)).filter(t=>t.isFile&&Le.has(I.extname(t.name).toLowerCase())).map(t=>t.absPath):await i(e,n=>Le.has(I.extname(n).toLowerCase()))}function Bt(e,a,s){let n=new Set,t=r=>{if(w.isImportDeclaration(r)&&w.isStringLiteral(r.moduleSpecifier)){let o=Oe(r.moduleSpecifier.text,a,s);o&&n.add(o);}if(w.isCallExpression(r)&&r.expression.kind===w.SyntaxKind.ImportKeyword&&r.arguments[0]&&w.isStringLiteral(r.arguments[0])){let o=Oe(r.arguments[0].text,a,s);o&&n.add(o);}se(r,t);};return t(e),[...n]}function Oe(e,a,s){if(!e.startsWith("."))return null;let n=I.resolve(a,e),t=I.relative(s,n).replace(/\\/g,"/");return !t||t.startsWith("..")?null:Ze(t)}function Ze(e){return e.replace(/\\/g,"/").replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/,"").replace(/\/index$/,"")}function Nt(e,a){let s=0,n=0,t=0,r=0,o=0,c=[],u=i=>{if(Wt(i)){let d=zt(i),g=Gt(e,i),m=qt(i);s++,n+=d,t+=g,r=Math.max(r,m);}w.isFunctionDeclaration(i)&&i.name&&c.push(i),se(i,u);};u(e);let p=a;for(let i of c){if(Ht(i))continue;let d=i.name?.text;if(!d)continue;Vt(p,d)<=1&&o++;}return {lines:a.split(/\r?\n/).length,functionsAnalyzed:s,totalComplexity:n,totalFunctionLength:t,maxNestingDepth:r,deadFunctionCount:o}}function zt(e){let a=1,s=n=>{switch(n.kind){case w.SyntaxKind.IfStatement:case w.SyntaxKind.ForStatement:case w.SyntaxKind.ForOfStatement:case w.SyntaxKind.ForInStatement:case w.SyntaxKind.WhileStatement:case w.SyntaxKind.DoStatement:case w.SyntaxKind.CaseClause:case w.SyntaxKind.CatchClause:case w.SyntaxKind.ConditionalExpression:a++;break;case w.SyntaxKind.BinaryExpression:{let t=n;(t.operatorToken.kind===w.SyntaxKind.AmpersandAmpersandToken||t.operatorToken.kind===w.SyntaxKind.BarBarToken||t.operatorToken.kind===w.SyntaxKind.QuestionQuestionToken)&&a++;break}}se(n,s);};return s(e),a}function qt(e){let a=0,s=(n,t)=>{let r=Kt(n)?t+1:t;a=Math.max(a,r),se(n,o=>s(o,r));};return s(e,0),Math.max(0,a-1)}function _t(e){let a=0,s=new Set,n=new Set,t=r=>{s.add(r),n.add(r);let o=e.get(r)??[];for(let c of o)e.has(c)&&(s.has(c)?n.has(c)&&a++:t(c));n.delete(r);};for(let r of e.keys())s.has(r)||t(r);return a}function Gt(e,a){let s=e.getLineAndCharacterOfPosition(a.getStart(e)).line;return e.getLineAndCharacterOfPosition(a.getEnd()).line-s+1}function Wt(e){return w.isFunctionDeclaration(e)||w.isMethodDeclaration(e)||w.isFunctionExpression(e)||w.isArrowFunction(e)||w.isConstructorDeclaration(e)}function Kt(e){return e.kind===w.SyntaxKind.IfStatement||e.kind===w.SyntaxKind.ForStatement||e.kind===w.SyntaxKind.ForOfStatement||e.kind===w.SyntaxKind.ForInStatement||e.kind===w.SyntaxKind.WhileStatement||e.kind===w.SyntaxKind.DoStatement||e.kind===w.SyntaxKind.SwitchStatement||e.kind===w.SyntaxKind.TryStatement||e.kind===w.SyntaxKind.CatchClause}function Ht(e){return w.canHaveModifiers(e)?!!w.getModifiers(e)?.some(s=>s.kind===w.SyntaxKind.ExportKeyword):false}function Vt(e,a){let s=new RegExp(`\\b${Qt(a)}\\b`,"g");return e.match(s)?.length??0}function Qt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ee(e){return Math.round(e*100)/100}function se(e,a){e.forEachChild(a);}var Jt=new Set([".tsx",".jsx",".ts",".js",".vue",".svelte",".html",".mdx",".json",".yml",".yaml"]),Zt=new Set(["stripe","posthog-js","posthog-node","@sentry/node","@sentry/browser","@sentry/react","next-auth","firebase","auth0","@auth0/auth0-react","@supabase/supabase-js","supabase","clerk","@clerk/clerk-js","@clerk/react"]),Yt=new Set(["welcome","home","click here","learn more","submit","cancel"]);async function De(e,a,s=300){let t=(await a.walkDir(e)).filter(g=>g.isFile),r=t.filter(g=>g.relPath.endsWith("package.json")&&!g.relPath.includes("node_modules")),o=[];for(let g of r)try{o.push(JSON.parse(await a.readTextFile(g.absPath)));}catch{}let c=an(o),u=[];for(let g of t){let m=Xt(g.relPath);if(!Jt.has(m))continue;if(!en(g.relPath)){let h=Be(g.relPath,c);h.length>0&&u.push(...h.map(k=>({...k,file:g.relPath})));continue}let y=Be(g.relPath,c);y.length>0&&u.push(...y.map(h=>({...h,file:g.relPath})));let l=await a.readTextFile(g.absPath);if(!l||l.length>512e3)continue;let f=tn(l);for(let h of f){let k=nn(h),v=sn(k,h);u.push({kind:k,value:h,file:g.relPath,weight:v});}/(featureFlag|FEATURE_FLAG|launchDarkly|isFeatureEnabled|flags\.)/.test(l)&&u.push({kind:"feature_flag",value:`flags in ${g.relPath}`,file:g.relPath,weight:2});}for(let g of o){let m=ln(g);for(let[y,l]of m)Zt.has(y)&&u.push({kind:"dependency",value:`${y}@${l}`,file:"package.json",weight:4});}let p=on(u).sort((g,m)=>m.weight-g.weight||g.value.localeCompare(m.value)),i=p.slice(0,s),d=rn(i);return {enabled:true,detectedFrameworks:c,evidenceCount:p.length,capped:p.length>i.length,topEvidence:i,unknownSignals:d}}function Xt(e){let a=e.lastIndexOf(".");return a===-1?"":e.slice(a).toLowerCase()}function en(e){let a=e.toLowerCase();return a.startsWith("pages/")||a.includes("/pages/")||a.startsWith("app/")||a.includes("/app/")||a.startsWith("components/")||a.includes("/components/")||a.startsWith("ui/")||a.includes("/ui/")||a.startsWith("views/")||a.includes("/views/")||a.includes("/routes")||a.startsWith("routes")||a.includes("/router")||a.startsWith("router")||a.startsWith("locales/")||a.includes("/locales/")||a.startsWith("i18n/")||a.includes("/i18n/")||a.endsWith(".html")||a.endsWith(".mdx")}function an(e){let a=new Set;for(let s of e){let n={...ye(s.dependencies),...ye(s.devDependencies)};n.next&&a.add("nextjs"),(n.nuxt||n.nuxt3)&&a.add("nuxt"),n.react&&a.add("react"),n.vue&&a.add("vue"),n.svelte&&a.add("svelte"),n["@angular/core"]&&a.add("angular");}return Array.from(a)}function Be(e,a){let s=[];if(a.includes("nextjs")){let n=e.match(/^(?:src\/)?(pages|app)\/(.+)\.(tsx|jsx|ts|js)$/);if(n){let t="/"+n[2].replace(/(^|\/)page$/i,"").replace(/(^|\/)route$/i,"").replace(/index$/i,"").replace(/\[(?:\.\.\.)?(.+?)\]/g,":$1").replace(/\/+/g,"/");t!=="/"&&t.endsWith("/")&&(t=t.slice(0,-1)),s.push({kind:"route",value:t||"/",weight:5});}}return (/(^|\/)(routes?|router)\.(ts|js|json)$/.test(e)||e.includes("/router/"))&&s.push({kind:"route",value:`route config: ${e}`,weight:3}),s}function tn(e){let a=[],s=/>\s*([A-Za-z0-9][^<>]{2,120}?)\s*</g;for(let o of e.matchAll(s)){let c=ae(o[1]??"");te(c)&&a.push(c);}let n=/<title>\s*([^<]{2,120})\s*<\/title>|title\s*[:=]\s*["'`](.{2,120}?)["'`]/g;for(let o of e.matchAll(n)){let c=ae((o[1]??o[2]??"").trim());te(c)&&a.push(c);}let t=/(?:aria-label|label|placeholder|alt)\s*=\s*["'`](.{2,120}?)["'`]/g;for(let o of e.matchAll(t)){let c=ae(o[1]??"");te(c)&&a.push(c);}let r=/:\s*["'`](.{2,140}?)["'`]\s*[,\n]/g;for(let o of e.matchAll(r)){let c=ae(o[1]??"");te(c)&&a.push(c);}return a}function nn(e){let a=e.toLowerCase();return /(pricing|plan|billing|subscription|trial|credit)/.test(a)||/(sign in|sign up|log in|register|invite|workspace|organization|sso|oauth)/.test(a)?"copy":/(dashboard|reports|settings|integrations|users|roles|permissions)/.test(a)?"heading":/(get started|start|scan|generate|export|run|deploy|upgrade|analy[sz]e)/.test(a)?"cta":/(overview|features|about|documentation|docs)/.test(a)?"title":/(menu|navigation|sidebar|breadcrumb)/.test(a)?"nav":"copy"}function sn(e,a){let s=a.toLowerCase();if(Yt.has(s))return 0;let n=1;return e==="route"&&(n+=4),e==="nav"&&(n+=3),e==="title"&&(n+=2),e==="heading"&&(n+=2),e==="cta"&&(n+=2),/(pricing|billing|subscription|auth|security|integration)/.test(s)&&(n+=2),/(dashboard|report|scan|workspace|project|repository)/.test(s)&&(n+=1),n}function on(e){let a=new Map;for(let s of e){let n=`${s.kind}::${s.value.toLowerCase()}`,t=a.get(n);(!t||s.weight>t.weight)&&a.set(n,s);}return Array.from(a.values()).filter(s=>s.weight>0)}function rn(e){let a=[],s=e.some(o=>/pricing|billing|subscription|trial|credit/i.test(o.value)),n=e.some(o=>/sign in|sign up|login|auth|sso|oauth|invite/i.test(o.value)),t=e.some(o=>/integration|webhook|api key|connector/i.test(o.value)),r=e.some(o=>o.kind==="route");return s||a.push("No pricing or billing evidence found."),n||a.push("No authentication or user access flow evidence found."),t||a.push("No integrations/connectors evidence found."),r||a.push("No route structure evidence found."),a}function ye(e){return !e||typeof e!="object"?{}:e}function ln(e){return Object.entries(ye(e.dependencies))}function ae(e){return e.replace(/\s+/g," ").trim()}function te(e){return !(!e||e.length<3||e.length>160||/^[0-9_./-]+$/.test(e)||/^(true|false|null|undefined)$/i.test(e)||/[<>{}]/.test(e)||/function\s*\(|=>|console\.|import\s+|export\s+/.test(e))}var cn=75e4;function j(e){return [...new Set(e)].sort((a,s)=>a.localeCompare(s))}function pn(e,a,s){if(!a)return;let n=a.trim();n&&e.push(`${n} (${s})`);}function he(e){let a=new Set;return e.filter(s=>{let n=s.lastIndexOf(" ("),t=n>0?s.slice(0,n).trim():s.trim();return a.has(t)?false:(a.add(t),true)})}function S(e,a,s){let n=[],t;for(;(t=a.exec(e))!==null;){let r=t.slice(1).find(o=>typeof o=="string"&&o.length>0);pn(n,r??t[0],s);}return n}function dn(e){let a=e.trim();if(/^@(?:yearly|monthly|weekly|daily|hourly|reboot)$/.test(a))return true;let s=/^(?:\*(?:\/\d+)?|\d+(?:[,\-]\d+)*(?:\/\d+)?|[?LW]|[\dLW]#\d)$/,n=a.split(/\s+/);return n.length!==5&&n.length!==6?false:n.every(t=>s.test(t))}function un(e,a){let s=[],n=/['"`]((?:[\d*\/,\-?LW#@A-Za-z]+[ \t]+){4,5}[\d*\/,\-?LW#@A-Za-z]+)['"`]/g,t;for(;(t=n.exec(e))!==null;){let r=t[1].trim();dn(r)&&s.push(`${r} (${a})`);}return s}var fn=new Set(["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"]);function mn(e){let a=new Set,s=/\b([A-Z]{3})\b/g,n;for(;(n=s.exec(e))!==null;){let t=n[1];fn.has(t)&&a.add(t);}return [...a]}var gn=new Set(["af-ZA","am-ET","ar-AE","ar-BH","ar-DZ","ar-EG","ar-IQ","ar-JO","ar-KW","ar-LB","ar-LY","ar-MA","ar-OM","ar-QA","ar-SA","ar-SY","ar-TN","ar-YE","az-AZ","be-BY","bg-BG","bn-BD","bn-IN","bs-BA","ca-ES","cs-CZ","cy-GB","da-DK","de-AT","de-CH","de-DE","de-LI","de-LU","el-CY","el-GR","en-AU","en-BZ","en-CA","en-CB","en-GB","en-GH","en-HK","en-IE","en-IN","en-JM","en-KE","en-MT","en-MY","en-NG","en-NZ","en-PH","en-SG","en-TT","en-US","en-ZA","en-ZW","es-AR","es-BO","es-CL","es-CO","es-CR","es-CU","es-DO","es-EC","es-ES","es-GT","es-HN","es-MX","es-NI","es-PA","es-PE","es-PR","es-PY","es-SV","es-US","es-UY","es-VE","et-EE","eu-ES","fa-IR","fi-FI","fil-PH","fo-FO","fr-BE","fr-CA","fr-CH","fr-FR","fr-LU","fr-MC","ga-IE","gl-ES","gu-IN","ha-NG","he-IL","hi-IN","hr-BA","hr-HR","hu-HU","hy-AM","id-ID","ig-NG","is-IS","it-CH","it-IT","ja-JP","ka-GE","kk-KZ","km-KH","kn-IN","ko-KR","ky-KG","lb-LU","lo-LA","lt-LT","lv-LV","mi-NZ","mk-MK","ml-IN","mn-MN","mr-IN","ms-BN","ms-MY","mt-MT","my-MM","nb-NO","ne-NP","nl-BE","nl-NL","nn-NO","or-IN","pa-IN","pl-PL","ps-AF","pt-BR","pt-PT","ro-MD","ro-RO","ru-RU","rw-RW","si-LK","sk-SK","sl-SI","so-SO","sq-AL","sr-BA","sr-ME","sr-RS","sv-FI","sv-SE","sw-KE","sw-TZ","ta-IN","ta-LK","te-IN","tg-TJ","th-TH","ti-ER","ti-ET","tk-TM","tr-TR","uk-UA","ur-IN","ur-PK","uz-UZ","vi-VN","yo-NG","zh-CN","zh-HK","zh-MO","zh-SG","zh-TW","zu-ZA"]);function yn(e){let a=new Set,s=/\b([a-z]{2}-[A-Z]{2})\b/g,n;for(;(n=s.exec(e))!==null;){let t=n[1];gn.has(t)&&a.add(t);}return [...a]}function hn(e){let a=new Set,s=/\b((?:Africa|America|Antarctica|Arctic|Asia|Atlantic|Australia|Europe|Indian|Pacific)\/[A-Z][A-Za-z0-9_]+(?:\/[A-Z][A-Za-z0-9_]+)?)\b/g,n=/\b(UTC|GMT)([+-]\d{1,2}(?::?\d{2})?)?\b/g,t;for(;(t=s.exec(e))!==null;)a.add(t[1]);for(;(t=n.exec(e))!==null;)a.add(t[0]);return [...a]}function vn(e){let a=new Set,s=/\b(UTF-?8|UTF-?16(?:BE|LE)?|UTF-?32(?:BE|LE)?|ISO-8859-(?:1[0-5]?|[2-9])|US-ASCII|ASCII|Windows-125[0-8]|Shift[_-]?JIS|EUC-(?:JP|KR|CN)|Big5|GB2312|GBK|GB18030|KOI8-[RU]|ISO-2022-JP|Latin-?[1-9])\b/gi,n;for(;(n=s.exec(e))!==null;)a.add(n[1].toUpperCase());return [...a]}function kn(e){let a=e.split("/");return a.length===1?"root":a[0]==="packages"&&a.length>=2?a[1]:a[0]}var bn=new Set(["package-lock.json","pnpm-lock.yaml","yarn.lock","composer.lock","Gemfile.lock","Cargo.lock","poetry.lock","Pipfile.lock","packages.lock.json"]);function wn(e){let a=e.toLowerCase();return a.includes("postgres")?{kind:"sql",brand:"PostgreSQL",version:null,evidence:e}:a.includes("mysql")||a.includes("mariadb")?{kind:"sql",brand:"MySQL/MariaDB",version:null,evidence:e}:a.includes("mssql")||a.includes("sqlserver")?{kind:"sql",brand:"SQL Server",version:null,evidence:e}:a.includes("oracle")?{kind:"sql",brand:"Oracle",version:null,evidence:e}:a.includes("sqlite")?{kind:"sql",brand:"SQLite",version:null,evidence:e}:a.includes("mongodb")?{kind:"nosql",brand:"MongoDB",version:null,evidence:e}:a.includes("redis")?{kind:"nosql",brand:"Redis",version:null,evidence:e}:a.includes("cassandra")?{kind:"nosql",brand:"Cassandra",version:null,evidence:e}:a.includes("cosmosdb")||a.includes("@azure/cosmos")||a.includes("cosmos")?{kind:"nosql",brand:"CosmosDB",version:null,evidence:e}:a.includes("dynamodb")?{kind:"nosql",brand:"DynamoDB",version:null,evidence:e}:a.includes("neo4j")?{kind:"nosql",brand:"Neo4j",version:null,evidence:e}:a.includes("clickhouse")?{kind:"sql",brand:"ClickHouse",version:null,evidence:e}:a.includes("snowflake")?{kind:"sql",brand:"Snowflake",version:null,evidence:e}:a.includes("bigquery")?{kind:"sql",brand:"BigQuery",version:null,evidence:e}:a.includes("firestore")?{kind:"nosql",brand:"Firestore",version:null,evidence:e}:a.includes("cockroach")?{kind:"sql",brand:"CockroachDB",version:null,evidence:e}:a.includes("planetscale")?{kind:"sql",brand:"PlanetScale",version:null,evidence:e}:a.includes("supabase")?{kind:"sql",brand:"Supabase",version:null,evidence:e}:a.includes("tidb")?{kind:"sql",brand:"TiDB",version:null,evidence:e}:a.includes("couchdb")?{kind:"nosql",brand:"CouchDB",version:null,evidence:e}:a.includes("elasticsearch")||a.includes("opensearch")?{kind:"nosql",brand:"Elasticsearch",version:null,evidence:e}:a.includes("influxdb")?{kind:"nosql",brand:"InfluxDB",version:null,evidence:e}:a.includes("memcached")?{kind:"nosql",brand:"Memcached",version:null,evidence:e}:a.includes("cockroachdb")?{kind:"sql",brand:"CockroachDB",version:null,evidence:e}:null}async function J(e,a){let n=(await a.walkDir(e)).filter(r=>r.isFile).map(r=>r.absPath),t=[];for(let r of n)try{let o=I.relative(e,r).replace(/\\/g,"/"),c=await a.readTextFile(r);if(!c||c.length>cn)continue;t.push({relPath:o,content:c});}catch{}return t}async function Sn(e,a){let s=await J(e,a),n={environmentVariables:[],featureFlags:[],hiddenConfigFiles:[],dotEnvFiles:[],secretsInjectionPaths:[],containerEntrypoints:[],startupArguments:[],jvmFlags:[],threadPoolSettings:[]};for(let t of s)t.relPath.split("/").some(r=>r.startsWith("."))&&n.hiddenConfigFiles.push(t.relPath),/\.env(\.|$)/i.test(t.relPath)&&n.dotEnvFiles.push(t.relPath),n.environmentVariables.push(...S(t.content,/(?:process\.env\.([A-Z0-9_]{3,})|process\.env\[['"]([A-Z0-9_]{3,})['"]\]|System\.getenv\(['"]([A-Z0-9_]{3,})['"]\)|os\.environ\[['"]([A-Z0-9_]{3,})['"]\]|getenv\(['"]([A-Z0-9_]{3,})['"]\))/g,t.relPath)),n.featureFlags.push(...S(t.content,/\b(?:feature[_-]?flag|ff_|is[A-Z][A-Za-z0-9]+Enabled|launchdarkly|unleash)\b/gi,t.relPath)),n.secretsInjectionPaths.push(...S(t.content,/\b(?:vault|secrets?\/(?:mount|inject|path)|aws\/secretsmanager|gcp\/secretmanager)\b/gi,t.relPath)),n.containerEntrypoints.push(...S(t.content,/\b(?:ENTRYPOINT|CMD)\s+([^\n]+)/g,t.relPath)),n.jvmFlags.push(...S(t.content,/\b(-Xmx\S+|-Xms\S+|-XX:[^\s'"\]]+)/g,t.relPath)),n.threadPoolSettings.push(...S(t.content,/\b(?:thread[_-]?pool|max[_-]?threads|min[_-]?threads|worker[_-]?threads)\b[^\n]*/gi,t.relPath));return n.environmentVariables=j(n.environmentVariables),n.featureFlags=he(n.featureFlags),n.hiddenConfigFiles=[...new Set(n.hiddenConfigFiles)],n.dotEnvFiles=j(n.dotEnvFiles),n.secretsInjectionPaths=j(n.secretsInjectionPaths),n.containerEntrypoints=j(n.containerEntrypoints),n.startupArguments=j(n.startupArguments).slice(0,250),n.jvmFlags=j(n.jvmFlags),n.threadPoolSettings=j(n.threadPoolSettings),n}async function xn(e,a){let s=await J(e,a),n=[],t={databaseTechnologies:[],connectionStrings:[],connectionPoolSettings:[],replicationSettings:[],readReplicaSettings:[],failoverSettings:[],collationAndEncoding:[],queryTimeoutDefaults:[],manualIndexes:[],tables:[],views:[],storedProcedures:[],triggers:[],rowLevelSecurityPolicies:[],otherServices:[]};for(let o of s){let c=S(o.content,/\b(?:postgres(?:ql)?:\/\/[^\s'"`]+|mysql:\/\/[^\s'"`]+|mongodb(?:\+srv)?:\/\/[^\s'"`]+|redis:\/\/[^\s'"`]+|clickhouse:\/\/[^\s'"`]+|cockroachdb:\/\/[^\s'"`]+|snowflake:\/\/[^\s'"`]+)\b/gi,o.relPath);if(t.connectionStrings.push(...c),!bn.has(I.basename(o.relPath))){let p=[...S(o.content,/\b(?:postgres|postgresql|mysql|mariadb|mssql|sqlserver|oracle|sqlite|mongodb|redis|cassandra|cosmosdb|cosmos|dynamodb|neo4j|clickhouse|snowflake|bigquery|firestore|cockroach|cockroachdb|planetscale|supabase|tidb|couchdb|elasticsearch|opensearch|influxdb|memcached)\b/gi,o.relPath),...c];for(let i of p){let d=wn(i);d&&n.push(d);}}t.replicationSettings.push(...S(o.content,/\b(?:replication|cluster|replicaSet)\b[^\n]*/gi,o.relPath)),t.readReplicaSettings.push(...S(o.content,/\b(?:read[_-]?replica|reader[_-]?endpoint)\b[^\n]*/gi,o.relPath)),t.failoverSettings.push(...S(o.content,/\b(?:failover|multi[_-]?az|secondary[_-]?host)\b[^\n]*/gi,o.relPath)),t.collationAndEncoding.push(...S(o.content,/\b(UTF-?8|UTF-?16(?:BE|LE)?|UTF-?32(?:BE|LE)?|Unicode|ASCII|US-ASCII|ISO-8859-(?:1[0-5]?|[2-9])|Windows-125[0-8]|Shift[_-]?JIS|EUC-(?:JP|KR|CN)|Big5|GB2312|GBK|GB18030|KOI8-[RU]|Latin-?[1-9]|SQL_Latin1_General_CP1_C[IS]_AS|Latin1_General_C[IS]_A[IS])\b/gi,o.relPath)),t.manualIndexes.push(...S(o.content,/\bcreate\s+(?:unique\s+)?index\s+[^;\n]+/gi,o.relPath)),t.tables.push(...S(o.content,/\bcreate\s+table\s+([a-zA-Z0-9_."]+)/gi,o.relPath)),t.views.push(...S(o.content,/\bcreate\s+view\s+([a-zA-Z0-9_."]+)/gi,o.relPath)),t.storedProcedures.push(...S(o.content,/\bcreate\s+(?:or\s+replace\s+)?procedure\s+([a-zA-Z0-9_."]+)/gi,o.relPath)),t.triggers.push(...S(o.content,/\bcreate\s+trigger\s+([a-zA-Z0-9_."]+)/gi,o.relPath)),t.rowLevelSecurityPolicies.push(...S(o.content,/\b(?:row\s+level\s+security|create\s+policy|alter\s+table\s+.*\s+enable\s+row\s+level\s+security)\b[^;\n]*/gi,o.relPath)),t.otherServices.push(...S(o.content,/\b(?:redis:\/\/[^\s'"`]+|amqp:\/\/[^\s'"`]+|kafka:\/\/[^\s'"`]+|elasticsearch:\/\/[^\s'"`]+)\b/gi,o.relPath));}let r=new Map;for(let o of n){if(/\.xml\b/i.test(o.evidence))continue;let c=`${o.kind}:${o.brand}`;r.has(c)||r.set(c,o);}return t.databaseTechnologies=[...r.values()].sort((o,c)=>o.brand.localeCompare(c.brand)),t.connectionStrings=j(t.connectionStrings),t.connectionPoolSettings=j(t.connectionPoolSettings),t.replicationSettings=j(t.replicationSettings),t.readReplicaSettings=j(t.readReplicaSettings),t.failoverSettings=j(t.failoverSettings),t.collationAndEncoding=he(t.collationAndEncoding),t.queryTimeoutDefaults=j(t.queryTimeoutDefaults),t.manualIndexes=j(t.manualIndexes),t.tables=j(t.tables),t.views=j(t.views),t.storedProcedures=j(t.storedProcedures),t.triggers=j(t.triggers),t.rowLevelSecurityPolicies=j(t.rowLevelSecurityPolicies),t.otherServices=j(t.otherServices),t}function jn(e,a){let s=e.toLowerCase(),n=s.endsWith(".json")?"json":s.endsWith(".yaml")?"yaml":s.endsWith(".yml")?"yml":null;if(!n)return null;let t=/\bopenapi\s*[:=]\s*['"]?3\./i.test(a)||/\bswagger\s*[:=]\s*['"]?2\.0/i.test(a)||/"openapi"\s*:\s*"3\./i.test(a),r=/(openapi|swagger).*(\.ya?ml|\.json)$/i.test(s)||/\/api-docs\b/i.test(s);if(!t&&!r)return null;let o=a.match(/\bopenapi\s*[:=]\s*['"]?([^'"\s,]+)/i)?.[1]??a.match(/\bswagger\s*[:=]\s*['"]?([^'"\s,]+)/i)?.[1]??null,c=a.match(/\btitle\s*[:=]\s*['"]([^'"]+)['"]/i)?.[1]??a.match(/\btitle\s*[:=]\s*([^\n#]+)/i)?.[1]?.trim()??a.match(/"title"\s*:\s*"([^"]+)"/i)?.[1]??null,u=a.match(/(^|\n)\s*\/[^\n:]+:\s*(get|post|put|patch|delete|options|head)/gim)?.length??a.match(/"\/[^"]+"\s*:\s*\{/g)?.length??null;return {path:e,format:n,version:o,title:c,endpointCount:u}}function Cn(e){let a=e.toLowerCase();return !!(a==="localhost"||a==="127.0.0.1"||a==="::1"||a==="0.0.0.0"||/^192\.168\./.test(a)||/^10\./.test(a)||/^172\.(1[6-9]|2\d|3[01])\./.test(a)||!a.includes(".")||/^(example|test|localhost|local|internal)\b/.test(a))}function Rn(e){return e.replace(/[\u0000-\u001F\u007F-\u009F\u200B-\u200F\u202A-\u202E\u2066-\u2069\uFEFF]/g,"").trim()}async function Tn(e,a){let s=await J(e,a),n=[],t={integrations:[],openApiSpecifications:[],webhookUrls:[],callbackEndpoints:[],apiVersionPins:[],tokenExpirationPolicies:[],rateLimitOverrides:[],customHeaders:[],corsPolicies:[],oauthScopes:[],apiTokens:[]};for(let o of s){let c=jn(o.relPath,o.content);c&&t.openApiSpecifications.push(c);let u=/\bhttps?:\/\/[^\s'"`]+/gi,p;for(;(p=u.exec(o.content))!==null;){let i=p[0].replace(/[,;)\]}"'`]+$/,""),d=Rn(i);if(!d.startsWith("http"))continue;let g;try{g=new URL(d).hostname;}catch{continue}if(Cn(g))continue;let m=d.match(/\/(v\d+(?:\.\d+)?)\b/i),y=d.match(/[?&]([a-zA-Z0-9_.-]+)=/g)?.map(l=>l.replace(/[?&=]/g,""))??[];n.push({provider:g,endpoint:d,version:m?m[1]:null,parameters:y,configOptions:S(o.content,/\b(?:baseUrl|apiUrl|endpoint|timeout|retries|apiVersion)\b[^\n]*/gi,o.relPath),authHints:S(o.content,/\b(?:api[_-]?key|bearer\s+[a-z0-9_.-]+|client[_-]?secret|oauth)\b[^\n]*/gi,o.relPath),files:[o.relPath]});}t.webhookUrls.push(...S(o.content,/\bhttps?:\/\/[^\s'"`]*(?:webhook|hooks?)[^\s'"`]*/gi,o.relPath)),t.callbackEndpoints.push(...S(o.content,/\bhttps?:\/\/[^\s'"`]*(?:callback|redirect_uri)[^\s'"`]*/gi,o.relPath)),t.apiVersionPins.push(...S(o.content,/\bapi[_-]?version\b[^\n]*/gi,o.relPath)),t.tokenExpirationPolicies.push(...S(o.content,/\b(?:token[_-]?expiry|expires[_-]?in|refresh[_-]?token[_-]?ttl)\b[^\n]*/gi,o.relPath)),t.apiTokens.push(...S(o.content,/\b(?:api[_-]?token|access[_-]?token|bearer[_-]?token)\b[^\n]*/gi,o.relPath));}let r=new Map;for(let o of n){let c=o.endpoint,u=r.get(c);u?(u.files=j([...u.files,...o.files]),u.parameters=j([...u.parameters,...o.parameters]),u.configOptions=j([...u.configOptions,...o.configOptions]),u.authHints=j([...u.authHints,...o.authHints])):r.set(c,{...o,parameters:j(o.parameters),configOptions:j(o.configOptions),authHints:j(o.authHints),files:[...o.files]});}return t.integrations=[...r.values()].filter(o=>o.files.some(c=>!Ye.has(I.extname(c).toLowerCase()))).filter(o=>o.provider!=="www.w3.org").filter(o=>!o.files.some(c=>/\.(js|xml)$/i.test(c))).sort((o,c)=>o.provider.localeCompare(c.provider)),t.openApiSpecifications=[...new Map(t.openApiSpecifications.map(o=>[o.path,o])).values()].sort((o,c)=>o.path.localeCompare(c.path)),t.webhookUrls=j(t.webhookUrls),t.callbackEndpoints=j(t.callbackEndpoints),t.apiVersionPins=j(t.apiVersionPins),t.tokenExpirationPolicies=j(t.tokenExpirationPolicies),t.rateLimitOverrides=j(t.rateLimitOverrides),t.customHeaders=j(t.customHeaders),t.corsPolicies=j(t.corsPolicies),t.oauthScopes=j(t.oauthScopes),t.apiTokens=he(t.apiTokens),t}var Ye=new Set([".md",".mdx",".markdown",".txt",".rst",".adoc",".asciidoc",".html",".htm",".pdf",".docx",".doc",".rtf"]);async function Pn(e,a){let n=(await J(e,a)).filter(r=>{let o=I.extname(r.relPath).toLowerCase();return !Ye.has(o)}),t={implicitTimeouts:[],defaultPaginationSize:[],implicitRetryLogic:[],defaultLocale:[],defaultCurrency:[],implicitTimezone:[],defaultCharacterEncoding:[],sessionStores:[],distributedLocks:[],jobSchedulers:[],idempotencyKeys:[],rateLimitingCounters:[],circuitBreakerState:[],abTestToggles:[],regionalEnablementRules:[],betaAccessGroups:[],licensingEnforcementLogic:[],killSwitches:[],connectorRetryLogic:[],apiPollingIntervals:[],fieldMappings:[],schemaRegistryRules:[],deadLetterQueueBehavior:[],dataMaskingRules:[],transformationLogic:[],timezoneHandling:[],encryptionSettings:[],hardcodedSecretSignals:[]};for(let r of n){t.defaultLocale.push(...yn(r.content)),t.defaultCurrency.push(...mn(r.content)),t.implicitTimezone.push(...hn(r.content)),t.defaultCharacterEncoding.push(...vn(r.content)),t.sessionStores.push(...S(r.content,/\b(?:sessionStore|redisStore|memoryStore)\b[^\n]*/gi,r.relPath)),t.distributedLocks.push(...S(r.content,/\b(?:distributed[_-]?lock|redlock|mutex)\b[^\n]*/gi,r.relPath));for(let o of un(r.content,r.relPath)){let c=kn(r.relPath);t.jobSchedulers.push(`[${c}] ${o}`);}t.idempotencyKeys.push(...S(r.content,/\b(?:idempotency[_-]?key|Idempotency-Key)\b[^\n]*/gi,r.relPath)),t.circuitBreakerState.push(...S(r.content,/\b(?:circuit[_-]?breaker|half[_-]?open|open[_-]?state)\b[^\n]*/gi,r.relPath)),t.abTestToggles.push(...S(r.content,/\b(?:a\/b|ab[_-]?test|experiment[_-]?flag)\b[^\n]*/gi,r.relPath)),t.regionalEnablementRules.push(...S(r.content,/\b(?:region[_-]?enabled|geo[_-]?fence|country[_-]?allow)\b[^\n]*/gi,r.relPath)),t.betaAccessGroups.push(...S(r.content,/\b(?:beta[_-]?users?|early[_-]?access|allowlist)\b[^\n]*/gi,r.relPath)),t.licensingEnforcementLogic.push(...S(r.content,/\b(?:license[_-]?key|entitlement|plan[_-]?check)\b[^\n]*/gi,r.relPath)),t.killSwitches.push(...S(r.content,/\b(?:kill[_-]?switch|disable[_-]?all|emergency[_-]?stop)\b[^\n]*/gi,r.relPath)),t.connectorRetryLogic.push(...S(r.content,/\b(?:connector|integration)\b[^\n]*(?:retry|backoff)/gi,r.relPath)),t.apiPollingIntervals.push(...S(r.content,/\b(?:poll(?:ing)?[_-]?interval|sync[_-]?interval)\b[^\n]*/gi,r.relPath)),t.fieldMappings.push(...S(r.content,/\b(?:field[_-]?mapping|mapFields?|column[_-]?map)\b[^\n]*/gi,r.relPath)),t.schemaRegistryRules.push(...S(r.content,/\b(?:schema[_-]?registry|avro|protobuf)\b[^\n]*/gi,r.relPath)),t.deadLetterQueueBehavior.push(...S(r.content,/\b(?:dead[_-]?letter|dlq)\b[^\n]*/gi,r.relPath)),t.dataMaskingRules.push(...S(r.content,/\b(?:data[_-]?mask|redact|pii[_-]?mask)\b[^\n]*/gi,r.relPath)),t.timezoneHandling.push(...S(r.content,/\b(?:convertTimezone|tz\(|moment\.tz|DateTimeZone)\b[^\n]*/gi,r.relPath)),t.encryptionSettings.push(...S(r.content,/(aes-(?:128|192|256)-(?:gcm|cbc|ctr|cfb8?|ofb|ecb|ccm|ocb|wrap(?:-pad)?)|chacha20-poly1305|des-ede3?(?:-(?:cbc|cfb8?|ofb))?|bf-(?:cbc|cfb|ecb|ofb)|aria-(?:128|192|256)-(?:gcm|cbc|ctr|cfb8?|ofb|ecb|ccm)|camellia-(?:128|192|256)-(?:cbc|cfb8?|ofb|ecb)|seed-cbc|rc4(?:-(?:40|hmac-md5))?|rc2-(?:(?:40|64|128)-)?cbc)/gi,r.relPath)),t.hardcodedSecretSignals.push(...S(r.content,/\b(?:password|passwd|connectionString|api[_-]?key|secret)\b\s*[:=]\s*['"][^'"]{4,}['"]/gi,r.relPath));}return Object.keys(t).forEach(r=>{t[r]=j(t[r]);}),t}async function An(e,a){let s=await a.walkDir(e),n=s.filter(o=>o.isFile&&/favicon/i.test(o.name)),t=s.filter(o=>o.isFile&&/logo/i.test(o.name)),r=[];for(let o of n.slice(0,10))try{let c=await a.readTextFile(o.absPath);if(!c)continue;let u=Buffer.from(c).toString("base64");r.push({path:o.relPath,base64:u.slice(0,1e4)});}catch{}return {faviconFiles:r,productLogos:j(t.map(o=>o.relPath))}}async function En(e){let a=new d;try{let n=(await a.walkDir(e)).find(r=>r.isFile&&/favicon/i.test(r.name));if(!n)return null;let t=await a.readTextFile(n.absPath);return t?Buffer.from(t).toString("base64").slice(0,1e4):null}catch{return null}}async function In(e,a){let s=await J(e,a),n=new Set,t=new Set,r=[],o=[];for(let c of s)/package(-lock)?\.json$|pnpm-lock\.yaml$|poetry\.lock$|pom\.xml$/i.test(c.relPath)&&(c.content.match(/"([@a-zA-Z0-9_.\/-]+)"\s*:/g)??[]).forEach(p=>t.add(p.replace(/["\s:]/g,""))),/package\.json$/i.test(c.relPath)&&(c.content.match(/"([@a-zA-Z0-9_.\/-]+)"\s*:\s*"[~^0-9*><=.-]+"/g)??[]).forEach(p=>{let i=p.split(":")[0]?.replace(/"/g,"").trim();i&&n.add(i);}),r.push(...S(c.content,/\b(?:CVE-\d{4}-\d{4,}|critical vulnerability|high severity)\b[^\n]*/gi,c.relPath)),/package(-lock)?\.json$|pnpm-lock\.yaml$|yarn\.lock$|poetry\.lock$|pom\.xml$|build\.gradle(\.kts)?$|Cargo\.(toml|lock)$|composer\.(json|lock)$|requirements\.txt$|\.csproj$|\.nuspec$/i.test(c.relPath)&&o.push(...S(c.content,/\b(?:GPL-3\.0|AGPL|SSPL|BUSL|source[- ]available)\b[^\n]*/gi,c.relPath));return {directDependencies:n.size,transitiveDependencies:Math.max(t.size,n.size),knownVulnerabilities:j(r),licenseRisks:j(o)}}var Fn={team:[6,5,4,3.5],business:[15,12,10,8]},Ne=[0,25,100,300,500],Wn=10;function Kn(e,a){let s=Fn[a],n=0,t=[];for(let r=0;r<4;r++){let o=Ne[r],c=r===3?1/0:Ne[r+1];if(e>o){let u=Math.min(e,c)-o;n+=u*s[r],t.push({cnt:u,rate:s[r]});}}return {total:n,lines:t}}async function Xe(e){let{rootDir:a,opts:s,scanners:n,maxPrivacyMode:t,allProjects:r,solutions:o,projectsByPath:c,fileCache:u,progress:p,extended:i}=e;if(n===false){i.standards=Fe(r,i);return}let d={platformMatrix:!t,serviceDependencies:!t,breakingChangeExposure:!t,buildDeploy:!t,tsModernity:!t,fileHotspots:!t,architecture:!t,codeQuality:!t,runtimeConfiguration:!t,apiSurface:!t,operationalResilience:!t},g=[...d.platformMatrix&&n?.platformMatrix?.enabled!==false?[{id:"platform",label:"Platform matrix"}]:[],...n?.toolingInventory?.enabled!==false?[{id:"tooling",label:"Tooling inventory"}]:[],...d.serviceDependencies&&n?.serviceDependencies?.enabled!==false?[{id:"services",label:"Service dependencies"}]:[],...d.breakingChangeExposure&&n?.breakingChangeExposure?.enabled!==false?[{id:"breaking",label:"Breaking change exposure"}]:[],...n?.securityPosture?.enabled!==false?[{id:"security",label:"Security posture"}]:[],...d.buildDeploy&&n?.buildDeploy?.enabled!==false?[{id:"build",label:"Build & deploy analysis"}]:[],...d.tsModernity&&n?.tsModernity?.enabled!==false?[{id:"ts",label:"TypeScript modernity"}]:[],...d.fileHotspots&&n?.fileHotspots?.enabled!==false?[{id:"hotspots",label:"File hotspots"}]:[],...n?.dependencyGraph?.enabled!==false?[{id:"depgraph",label:"Dependency graph"}]:[],...n?.dependencyRisk?.enabled!==false?[{id:"deprisk",label:"Dependency risk"}]:[],...d.architecture&&n?.architecture?.enabled!==false?[{id:"architecture",label:"Architecture layers"}]:[],...d.codeQuality&&n?.codeQuality?.enabled!==false?[{id:"codequality",label:"Code quality metrics"}]:[],...!t&&(s.uiPurpose||n?.uiPurpose?.enabled===true)?[{id:"uipurpose",label:"UI purpose evidence"}]:[],...d.runtimeConfiguration&&n?.runtimeConfiguration?.enabled!==false?[{id:"runtimecfg",label:"Runtime configuration"}]:[],...n?.dataStores?.enabled!==false?[{id:"datastores",label:"Data stores & schema"}]:[],...d.apiSurface&&n?.apiSurface?.enabled!==false?[{id:"apisurface",label:"API integrations"}]:[],...d.operationalResilience&&n?.operationalResilience?.enabled!==false?[{id:"resilience",label:"Operational resilience"}]:[],...n?.assetBranding?.enabled!==false?[{id:"branding",label:"Branding assets"}]:[],...n?.ossGovernance?.enabled!==false?[{id:"ossgov",label:"OSS governance"}]:[]];for(let l of g)p.insertStepBefore("drift",l);let m=[];if(d.platformMatrix&&n?.platformMatrix?.enabled!==false&&(p.startStep("platform"),m.push(Ja(a,u).then(l=>{i.platformMatrix=l;let f=l.nativeModules.length,h=l.dockerBaseImages.length,k=[];f>0&&k.push(`${f} native`),h>0&&k.push(`${h} docker`),p.completeStep("platform",k.join(", ")||"clean",f+h);}))),n?.toolingInventory?.enabled!==false&&(p.startStep("tooling"),m.push(Promise.resolve().then(()=>{i.toolingInventory=ot(r);let l=Object.values(i.toolingInventory).reduce((f,h)=>f+h.length,0);p.completeStep("tooling",`${l} tool${l!==1?"s":""} mapped`,l);}))),d.serviceDependencies&&n?.serviceDependencies?.enabled!==false&&(p.startStep("services"),m.push(Promise.resolve().then(()=>{i.serviceDependencies=Ct(r);let l=Object.values(i.serviceDependencies).reduce((f,h)=>f+h.length,0);p.completeStep("services",`${l} service${l!==1?"s":""} detected`,l);}))),d.breakingChangeExposure&&n?.breakingChangeExposure?.enabled!==false&&(p.startStep("breaking"),m.push(Promise.resolve().then(async()=>{i.breakingChangeExposure=await kt(r,a,u);let l=i.breakingChangeExposure,f=l.deprecatedPackages.length+l.legacyPolyfills.length;p.completeStep("breaking",f>0?`${l.deprecatedPackages.length} deprecated, ${l.legacyPolyfills.length} polyfills`:"none found",f);}))),n?.securityPosture?.enabled!==false&&(p.startStep("security"),m.push(xt(a,u).then(l=>{i.securityPosture=l;let f=l.lockfilePresent?`lockfile \u2714${l.gitignoreCoversEnv?" \xB7 .env \u2714":" \xB7 .env \u2716"}`:"no lockfile";p.completeStep("security",f);}))),d.buildDeploy&&n?.buildDeploy?.enabled!==false&&(p.startStep("build"),m.push(dt(a,u).then(l=>{i.buildDeploy=l;let f=[];l.ci.length>0&&f.push(l.ci.join(", ")),l.docker.dockerfileCount>0&&f.push(`${l.docker.dockerfileCount} Dockerfile${l.docker.dockerfileCount!==1?"s":""}`),p.completeStep("build",f.join(" \xB7 ")||"none detected");}))),d.tsModernity&&n?.tsModernity?.enabled!==false&&(p.startStep("ts"),m.push(ut(a,u).then(l=>{i.tsModernity=l;let f=[];l.typescriptVersion&&f.push(`v${l.typescriptVersion}`),l.strict===true&&f.push("strict"),l.moduleType&&f.push(l.moduleType.toUpperCase()),p.completeStep("ts",f.join(" \xB7 ")||"no tsconfig");}))),d.fileHotspots&&n?.fileHotspots?.enabled!==false&&(p.startStep("hotspots"),m.push(wt(a,u).then(l=>{i.fileHotspots=l,p.completeStep("hotspots",`${l.totalFiles} files`,l.totalFiles);}))),n?.dependencyGraph?.enabled!==false&&(p.startStep("depgraph"),m.push(nt(a,u).then(l=>{i.dependencyGraph=l;let f=l.lockfileType?`${l.lockfileType} \xB7 ${l.totalUnique} unique`:"no lockfile";p.completeStep("depgraph",f,l.totalUnique);}))),d.codeQuality&&n?.codeQuality?.enabled!==false&&(p.startStep("codequality"),m.push(Ot(a,u).then(l=>{i.codeQuality=l;let f=[];f.push(`${l.filesAnalyzed} files`),f.push(`${l.functionsAnalyzed} functions`),l.circularDependencies>0&&f.push(`${l.circularDependencies} cycles`),p.completeStep("codequality",f.join(" \xB7 "),l.functionsAnalyzed);}))),d.runtimeConfiguration&&n?.runtimeConfiguration?.enabled!==false&&(p.startStep("runtimecfg"),m.push(Sn(a,u).then(l=>{i.runtimeConfiguration=l;let f=l.environmentVariables.length+l.featureFlags.length+l.dotEnvFiles.length;p.completeStep("runtimecfg",`${f} runtime signals`,f);}))),n?.dataStores?.enabled!==false&&(p.startStep("datastores"),m.push(xn(a,u).then(l=>{i.dataStores=l;let f=l.databaseTechnologies.length+l.tables.length+l.views.length;p.completeStep("datastores",`${l.databaseTechnologies.length} engines \xB7 ${l.tables.length} tables`,f);}))),d.apiSurface&&n?.apiSurface?.enabled!==false&&(p.startStep("apisurface"),m.push(Tn(a,u).then(l=>{i.apiSurface=l;let f=l.integrations.length+l.webhookUrls.length;p.completeStep("apisurface",`${l.integrations.length} integrations`,f);}))),d.operationalResilience&&n?.operationalResilience?.enabled!==false&&(p.startStep("resilience"),m.push(Pn(a,u).then(l=>{i.operationalResilience=l;let f=l.killSwitches.length;p.completeStep("resilience",`${f} resilience signals`,f);}))),n?.assetBranding?.enabled!==false&&(p.startStep("branding"),m.push(An(a,u).then(l=>{i.assetBranding=l;let f=l.faviconFiles.length+l.productLogos.length;p.completeStep("branding",`${l.faviconFiles.length} favicons \xB7 ${l.productLogos.length} logos`,f);}))),n?.ossGovernance?.enabled!==false&&(p.startStep("ossgov"),m.push(In(a,u).then(l=>{i.ossGovernance=l;let f=l.directDependencies+l.knownVulnerabilities.length+l.licenseRisks.length;p.completeStep("ossgov",`${l.directDependencies} direct deps`,f);}))),n?.dependencyRisk?.enabled!==false&&(p.startStep("deprisk"),m.push(Promise.resolve().then(()=>{i.dependencyRisk=Xa(r);let l=i.dependencyRisk,f=[];l.deprecatedPackages.length>0&&f.push(`${l.deprecatedPackages.length} deprecated`),l.nativeModulePackages.length>0&&f.push(`${l.nativeModulePackages.length} native`),p.completeStep("deprisk",f.join(", ")||"low risk");}))),await Promise.all(m),!t&&n?.uiPurpose?.enabled!==false){p.startStep("uipurpose"),i.uiPurpose=await De(a,u);let l=i.uiPurpose,f=[`${l.topEvidence.length} evidence`,...l.capped?["capped"]:[]].join(" \xB7 ");p.completeStep("uipurpose",f,l.topEvidence.length),await Promise.all(r.map(async h=>{let k=I.join(a,h.path),v=await De(k,u,150);v.topEvidence.length>0&&(h.uiPurpose=na$1(v));}));}if(await Promise.all(r.map(async l=>{let f=I.join(a,l.path),h=await En(f);h&&(l.faviconBase64=h);})),d.architecture&&n?.architecture?.enabled!==false){p.startStep("architecture"),i.architecture=await Je(a,r,i.toolingInventory,i.serviceDependencies,u);let l=i.architecture,f=l.layers.filter(h=>h.fileCount>0).length;await Promise.all(r.map(async h=>{h.architectureMermaid=await Ut(a,h,l.archetype,u),h.architecture=await Mt(a,h,u);}));for(let h of o){let v=h.projectPaths.map(b=>c.get(b)??c.get(I.dirname(b).replace(/\\/g,"/"))).filter(b=>!!b).map(b=>b.architecture).filter(b=>!!b);v.length>0&&(h.architecture=$t(v));}p.completeStep("architecture",`${l.archetype} \xB7 ${f} layer${f!==1?"s":""} \xB7 ${l.totalClassified} files`,f);}i.standards=Fe(r,i);let y=0;i.fileHotspots&&(y+=i.fileHotspots.totalFiles),i.securityPosture&&(y+=1),i.tsModernity?.typescriptVersion&&(y+=1),i.dependencyGraph?.lockfileType&&(y+=1),i.buildDeploy&&(y+=i.buildDeploy.docker.dockerfileCount,y+=i.buildDeploy.ci.length),i.codeQuality&&(y+=i.codeQuality.filesAnalyzed),i.uiPurpose&&(y+=i.uiPurpose.topEvidence.length),i.runtimeConfiguration&&(y+=i.runtimeConfiguration.hiddenConfigFiles.length),i.dataStores&&(y+=i.dataStores.databaseTechnologies.length+i.dataStores.tables.length),i.apiSurface&&(y+=i.apiSurface.integrations.length),i.operationalResilience&&(y+=i.operationalResilience.implicitTimeouts.length),i.assetBranding&&(y+=i.assetBranding.faviconFiles.length+i.assetBranding.productLogos.length),i.ossGovernance&&(y+=i.ossGovernance.directDependencies),y>0&&e.addFilesScanned(y);}var Qn=Xe;async function Jn(e,a){return ua$1(e,a,Xe)}export{ot as A,dt as B,ut as C,kt as D,wt as E,xt as F,Ct as G,Ut as H,Mt as I,$t as J,Je as K,Ot as L,De as M,Sn as N,xn as O,Tn as P,Pn as Q,An as R,En as S,In as T,Fn as U,Ne as V,Wn as W,Kn as X,Qn as Y,Jn as Z,Y as a,D as b,X as c,H as d,le as e,de as f,ce as g,Ce as h,ue as i,la as j,x as k,fa as l,G as m,pe as n,ya as o,Ta as p,Pa as q,$n as r,Na as s,Fe as t,Ka as u,Ln as v,On as w,Ja as x,Xa as y,nt as z};