@preventive/triage 1.0.0-alpha.41 → 1.0.0-alpha.43
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.
- package/common/managed/report-filter.ts +2 -1
- package/common/security-links.d.ts +5 -0
- package/common/security-links.js +33 -0
- package/out/{chunk-TY4RZD3Z.js → chunk-7RU5EDRO.js} +61 -61
- package/out/{chunk-XL35ZV6R.js → chunk-A7M4GV7M.js} +1 -1
- package/out/{chunk-2AFQKRAM.js → chunk-CLPKNNC7.js} +7 -7
- package/out/{chunk-UZAZM2SX.js → chunk-LAAB5SZT.js} +1 -1
- package/out/{chunk-KVEUXIEU.js → chunk-NWZ4PVPN.js} +1 -1
- package/out/{chunk-QZ3A376W.js → chunk-OSIMGFUF.js} +1 -1
- package/out/{chunk-U6OPEXIA.js → chunk-XOCAPDCM.js} +1 -1
- package/out/client-managed.js +19 -19
- package/out/index.html +3 -3
- package/out/view.js +54 -54
- package/package.json +9 -3
- package/risk/files/runs-code.js +13 -5
- package/risk/index.d.ts +26 -0
- package/risk/index.js +1 -1
- package/risk/npm/assess.js +60 -14
- package/risk/npm/combined.js +4 -1
- package/risk/npm/compare.js +10 -5
- package/risk/npm/dependencies.js +11 -3
- package/risk/npm/diff.js +42 -6
- package/risk/npm/held.js +5 -2
- package/risk/npm/new-dependency.js +42 -12
- package/risk/npm/registry.js +122 -21
- package/server-managed/http.ts +63 -26
- package/server-managed/locked-packages.ts +18 -6
- package/server-managed/npm-kept.ts +38 -14
- package/server-managed/npm-packages.ts +27 -13
- package/server-managed/npm-risk.ts +69 -11
- package/server-managed/pretty-print.ts +1 -1
- package/server-managed/queue.ts +23 -0
- package/server-managed/report-sources.ts +1 -1
- package/server-managed/repository-risk-assess.ts +105 -0
- package/server-managed/repository-risk-audit.ts +66 -0
- package/server-managed/repository-risk.ts +255 -201
- package/server-managed/scan-downloads.ts +87 -0
- package/server-managed/sql.ts +1 -1
- package/server-managed/team-reports.ts +6 -11
- package/server-managed/type-only-worker.js +3 -3
- package/server-managed/type-only.ts +4 -2
- package/server-managed/upstream-cache.ts +16 -0
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import{b as Cv}from"./chunk-K3X5EJBQ.js";import{a as ut,b as be,d as uv,e as Al,f as pv,g as N,h as re,i as El}from"./chunk-CVVJAXVY.js";import{A as mt,B as ce,C as Xt,D as fe,E as Cn,F as qp,G as Yp,H as Jo,I as l$,J as Je,K as Xp,L as c$,M as Jr,N as Jp,O as _n,P as Zp,Q as Qp,R as ef,S as tf,T as nf,U as rf,a as ql,b as o$,d as ft,e as Yo,f as tr,g as Yl,h as xi,i as Hp,j as kt,k as Si,l as Up,m as Vp,n as jp,o as s$,p as i$,q as Yt,r as ve,s as Te,t as nr,u as Ci,v as a$,w as Gp,x as Kp,y as Xo,z as Xl}from"./chunk-VIHGO77Y.js";import{m as e$,o as t$,q as n$,w as r$,x as zp,y as Wp}from"./chunk-RFZQQXSG.js";import{a as Tw,b as ct,c as Me,e as cp,f as Iw,g as gl,h as Aw,i as Ew,j as up,k as Fw,l as bl,m as yl,n as wl,o as vl,p as ke,q as qn,r as Cl,s as fi,t as Nw}from"./chunk-RSHMVYNS.js";import{$ as wv,A as xn,B as Qw,C as hp,D as Ot,E as ev,F as Xn,G as Ml,H as tv,I as gi,J as nv,K as hi,L as bp,M as Uo,N as ov,O as sv,P as iv,Q as Tl,R as av,S as Il,T as lv,U as cv,V as dv,X as hv,Y as yp,Z as bv,_ as yv,a as zw,aa as Fl,b as De,ba as yi,c as oe,ca as Vo,d as Hw,da as jo,ea as Nt,f as Uw,fa as vv,ga as wp,h as Vw,ha as vp,i as jw,ia as Ll,ja as Ol,k as mi,ka as Go,l as Gw,la as $p,m as Wo,ma as $v,n as kn,na as kv,oa as xv,p as Kw,pa as Sv,q as _l,qa as kp,r as qw,ra as xp,s as gp,sa as Sp,t as Yw,ta as Cp,u as Xw,v as Lt,w as Jw,x as Rl,y as we,z as Zw}from"./chunk-2AFQKRAM.js";import{a as Bw,b as Pw,c as Yn,d as mp,e as Dw,f as vn,h as $n}from"./chunk-UYAXVRVL.js";import{g as _v,h as Rv,i as _p,j as wi,k as Bl,l as Jn,m as Ko,n as Rp,o as Mp,q as Pl,r as Tp,s as pt,t as Ip,w as Mv}from"./chunk-VQJCXGIY.js";import{a as qe,b as Wr,c as Hr,d as Kn,e as fl,f as ae,g as ml,h as tt}from"./chunk-W4J3MGLB.js";import{b as dp,c as ci,d as hl}from"./chunk-PNHBZGDD.js";import{$ as ee,A as Zn,B as Hl,C as Ul,D as Qn,E as Nv,F as Xr,H as nt,I as Op,J as Vl,K as Bv,L as er,M as Pv,N as Dv,O as ki,P as zv,Q as Wv,R as Hv,S as Uv,T as Vv,U as jv,V as Gv,X as Kv,Y as jl,Z as Gl,_ as qv,a as q,aa as Bt,b as le,ba as Yv,c as j,ca as Xv,d as Tv,fa as Sn,ga as Np,h as Ap,ha as Bp,i as Ep,ia as Pp,j as Fp,ja as Kl,k as Iv,ka as Dp,l as Av,m as Ev,ma as Jv,n as Dl,o as vi,oa as Zv,p as Lp,pa as Qv,q as qr,s as zl,t as Fv,u as $i,v as Yr,w as Lv,x as Ov,y as Wl,z as qo}from"./chunk-UXNUAIIC.js";import{a as Nl}from"./chunk-R5O6FAW4.js";import{a as fv,b as mv,d as bi,e as gv}from"./chunk-CMQA4DM6.js";import{b as pl,c as dt,d as Sl,e as jr,f as fp,g as pi}from"./chunk-4F6JSF57.js";import{a as ge,e as Kr,g as rv,h as Ho}from"./chunk-YVZH5SHP.js";import{a as Gr}from"./chunk-3BZ7JERB.js";import{a as Z}from"./chunk-TZ5KB2Y5.js";import{a as Ww}from"./chunk-XYFXXB2G.js";import{a as W}from"./chunk-DIJJNTRH.js";import{a as pp,c as Vr,d as $l,e as Lw,g as kl,h as zo,i as di,j as Ye,k as xl,l as ui,m as Ow,n as Xe}from"./chunk-WZDTZE64.js";import{A as Sw,B as Bo,C as Po,D as Pe,E as Ft,G as Cw,H as Gn,J as yn,K as _w,L as lp,M as Rw,N as Mw,O as $t,a as Pr,f as ww,h as Dr,i as _e,j as et,k as ai,l as No,m as de,n as vw,o as $w,p as Be,q as jn,r as cl,t as zr,u as li,v as qt,w as kw,x as dl,y as xw,z as ul}from"./chunk-GNXOKIGP.js";import{a as mw,b as ap,c as gw}from"./chunk-C4Z6ZBXV.js";import{a as P,b as ip,c as u,d as Un,g,i as J,j as Et}from"./chunk-2XUEZHIP.js";import{a as Do,b as wn,c as Ur}from"./chunk-TUII34K2.js";import{a as hw,c as Fo,d as Lo,e as Oo,j as il,k as bw,l as Vn,m as yw,p as Kt,q as al,r as ll}from"./chunk-V5O7M2YT.js";var lf=new WeakMap,f$=Symbol("iteration key");function IT(e){lf.set(e,new Map)}function AT(e,{target:t,key:n,type:r}){r==="iterate"&&(n=f$);let o=lf.get(t),s=o.get(n);s||(s=new Set,o.set(n,s)),s.has(e)||(s.add(e),e.cleaners.push(s))}function ET({target:e,key:t,type:n}){let r=lf.get(e),o=new Set;if(n==="clear"?r.forEach((s,i)=>{of(o,r,i)}):of(o,r,t),n==="add"||n==="delete"||n==="clear"){let s=Array.isArray(e)?"length":f$;of(o,r,s)}return o}function of(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function m$(e){e.cleaners&&e.cleaners.forEach(FT,e),e.cleaners=[]}function FT(e){e.delete(this)}var Zo=[],sf=!1;function LT(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(Zo.indexOf(e)===-1){m$(e);try{return Zo.push(e),Reflect.apply(t,n,r)}finally{Zo.pop()}}}function Pt(e){let t=Zo[Zo.length-1];t&&(g$(t,e),AT(t,e))}function rr(e){ET(e).forEach(OT,e)}function OT(e){g$(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function g$(e,t){if(e.debugger&&!sf)try{sf=!0,e.debugger(t)}finally{sf=!1}}function h$(){return Zo.length>0}var d$=Symbol("is reaction");function b$(e,t={}){let n=e[d$]?e:function r(){return LT(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[d$]=!0,t.lazy||n(),n}function cf(e){e.unobserved||(e.unobserved=!0,m$(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}var He=new WeakMap,Ql=new WeakMap,NT=Object.prototype.hasOwnProperty;function Zl(e){let t=Ql.get(e);return h$()&&typeof e=="object"&&e!==null?t||ec(e):t||e}function af(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=Zl(o[1]):o=Zl(o)),{done:r,value:o}},e}var u$={has(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Pt({target:t,key:e,type:"has"}),n.has.apply(t,arguments)},get(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Pt({target:t,key:e,type:"get"}),Zl(n.get.apply(t,arguments))},add(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.add.apply(t,arguments);return r||rr({target:t,key:e,value:e,type:"add"}),o},set(e,t){let n=He.get(this),r=Reflect.getPrototypeOf(this),o=r.has.call(n,e),s=r.get.call(n,e),i=r.set.apply(n,arguments);return o?t!==s&&rr({target:n,key:e,value:t,oldValue:s,type:"set"}):rr({target:n,key:e,value:t,type:"add"}),i},delete(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.get?n.get.call(t,e):void 0,s=n.delete.apply(t,arguments);return r&&rr({target:t,key:e,oldValue:o,type:"delete"}),s},clear(){let e=He.get(this),t=Reflect.getPrototypeOf(this),n=e.size!==0,r=e instanceof Map?new Map(e):new Set(e),o=t.clear.apply(e,arguments);return n&&rr({target:e,oldTarget:r,type:"clear"}),o},forEach(e,...t){let n=He.get(this),r=Reflect.getPrototypeOf(this);Pt({target:n,type:"iterate"});let o=(s,...i)=>e(Zl(s),...i);return r.forEach.call(n,o,...t)},keys(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Pt({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Pt({target:e,type:"iterate"});let n=t.values.apply(e,arguments);return af(n,!1)},entries(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Pt({target:e,type:"iterate"});let n=t.entries.apply(e,arguments);return af(n,!0)},[Symbol.iterator](){let e=He.get(this),t=Reflect.getPrototypeOf(this);Pt({target:e,type:"iterate"});let n=t[Symbol.iterator].apply(e,arguments);return af(n,e instanceof Map)},get size(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Pt({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Jl={get(e,t,n){return e=NT.call(u$,t)?u$:e,Reflect.get(e,t,n)}},p$=typeof window=="object"?window:Function("return this")(),y$=new Map([[Map,Jl],[Set,Jl],[WeakMap,Jl],[WeakSet,Jl],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function BT({constructor:e}){return!(typeof e=="function"&&e.name in p$&&p$[e.name]===e)||y$.has(e)}function PT(e){return y$.get(e.constructor)}var w$=Object.prototype.hasOwnProperty,DT=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));function zT(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&DT.has(t))return r;Pt({target:e,key:t,receiver:n,type:"get"});let o=Ql.get(r);if(h$()&&typeof r=="object"&&r!==null){if(o)return o;let s=Reflect.getOwnPropertyDescriptor(e,t);if(!s||!(s.writable===!1&&s.configurable===!1))return ec(r)}return o||r}function WT(e,t){let n=Reflect.has(e,t);return Pt({target:e,key:t,type:"has"}),n}function HT(e){return Pt({target:e,type:"iterate"}),Reflect.ownKeys(e)}function UT(e,t,n,r){typeof n=="object"&&n!==null&&(n=He.get(n)||n);let o=w$.call(e,t),s=e[t],i=Reflect.set(e,t,n,r);return e!==He.get(r)||(o?n!==s&&rr({target:e,key:t,value:n,oldValue:s,receiver:r,type:"set"}):rr({target:e,key:t,value:n,receiver:r,type:"add"})),i}function VT(e,t){let n=w$.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&rr({target:e,key:t,oldValue:r,type:"delete"}),o}var jT={get:zT,has:WT,ownKeys:HT,set:UT,deleteProperty:VT};function ec(e={}){return He.has(e)||!BT(e)?e:Ql.get(e)||GT(e)}function GT(e){let t=PT(e)||jT,n=new Proxy(e,t);return Ql.set(e,n),He.set(n,e),IT(e),n}var rt=ec;function Rn(e){let t=!0,n=b$(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw cf(n),r}return()=>cf(n)}var $$="deepview.viewMode",k$="deepview.severityMode",Ri="deepview.repoUrls",x$="deepview.focusSplit",S$="deepview.kanbanDetailFullscreen",C$="deepview.bundleSourceWrap",KT=new Set(["corrected","original"]),uf=50,tc=20,nc=80;try{localStorage.removeItem($$)}catch{}function qT(){try{let e=localStorage.getItem(k$);return e!==null&&KT.has(e)?e:null}catch{return null}}function YT(){try{let e=localStorage.getItem(S$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function XT(){try{let e=localStorage.getItem(C$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function _$(e){if(!Number.isFinite(e))return uf;let t=Math.round(e*10)/10;return Math.min(Math.max(t,tc),nc)}function JT(){try{let e=localStorage.getItem(x$);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?_$(t):null}catch{return null}}function rc(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function oc(){return rc(ve(Ri))}function Ze(e){return e?oc()[e]??"":""}var df=new Set;function R$(e){return df.add(e),()=>{df.delete(e)}}function M$(e){for(let t of df)try{t(e)}catch(n){console.warn("repo-url listener:",n)}}function Zr(e,t){if(_()||!e)return;let n=oc();t?n[e]=t:delete n[e],Te(Ri,JSON.stringify(n)).catch(r=>console.warn("saveRepoUrlFor:",r)),Xo(Ri,r=>{let o=rc(r);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(r=>console.warn("saveRepoUrlFor cross-tab merge:",r)),M$(e)}async function T$(e,t){await Xo(Ri,n=>{let r=rc(n),o=t==="replace"?{...e}:t==="prefer-imported"?{...r,...e}:{...e,...r};return JSON.stringify(o)}),mf()}async function sc(e){if(!e||typeof e!="object")return[];let t=[];if(await Xo(Ri,n=>{let r=rc(n);t=[];for(let[o,s]of Object.entries(e))!o||typeof s!="string"||!s||r[o]||(r[o]=s,t.push(o));return t.length===0?n:JSON.stringify(r)}),t.length===0)return t;mf();for(let n of t)M$(n);return t}async function pf(e,t){return!e||!t?!1:(await sc({[e]:t})).length>0}var _i=pt(),v$=Ko(_i?.mode??"e2e",globalThis.location?.pathname??"")?"managed":null,c=rt({reports:[],workspaceMerges:[],currentFile:null,currentWorkspace:null,workspaceContentFileCount:0,currentManagedTeam:null,currentManagedReport:null,currentReportWorkspace:null,currentView:"findings",currentLinks:null,bundles:[],storedFiles:[],selectedBundle:null,selectedBundleWorkspace:null,scanSelection:null,bundleCreationRepoId:null,bundleDetails:null,bundleDetailsTab:"overview",selectedPackage:null,selectedPackageVersion:null,packageDetailsTab:"overview",packageSlideTriage:null,packageSlideTransient:!1,packagesSearchQuery:"",packagesSortBy:"findings-desc",expandedPackages:new Set,selectedRepository:null,repositoryDetailsTab:"overview",repositorySlideTriage:null,repositorySlideTransient:!1,repositoriesSearchQuery:"",repositoriesSortBy:"findings-desc",bundleSourceFile:null,bundleSourceFindingIdx:null,bundleSourceTargetLine:null,bundleSourceWrap:XT()??!0,bundleSourcePretty:!1,bundleCodeFileRequest:null,npmLookup:{input:"",pending:!1,error:null},bundleCompare:null,bundleOverviewFilesSort:"name",bundleOverviewPackagesSort:"size",bundleCodeHistory:null,bundleCodeSearchMode:"files",bundleCodeSearchQuery:"",bundleSearchQuery:"",bundleSearchRegex:!1,bundleSearchCase:!1,bundleSearchContext:!0,filterSeverities:new Set,filterColors:new Set,filterSources:new Set,filterAnalyzer:"",filterModel:"",filterRepo:"",filterRevalidate:"",filterPartial:"",showRevalidation:!0,revalidationDetailed:!1,upstreamOnly:!1,revalidateConflicts:new Map,codePreviews:new Set,filterConfMin:0,filterConfMax:10,filterInclude:"",filterIncludeNegate:!1,filterComment:"",filterFix:"",filterFlagged:"",filterDuplicates:"",filterCrossContext:"",filterAppStacked:"",filterSecurity:"",repoUrl:"",repoEditing:!1,sortBy:"severity",viewMode:"kanban",severityMode:qT()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:YT()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:JT()??uf,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:Rp(_i?.mode??"e2e",v$),serverModeConfig:_i?.mode??null,serverModeSelection:v$,deepviewScanServer:null,githubNewIssueLabels:_i?.githubNewIssueLabels??"",localMode:!1,managed:_i?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map,managedIssues:new Map});function _(){return c.serverMode==="managed"&&!c.localMode}function Mn(e){c.localMode=!!e}function ic(e,t=globalThis.location?.pathname??""){let n=Ko(e,t);n&&(c.serverModeSelection="managed"),c.serverModeConfig=e,c.serverMode=Rp(e,c.serverModeSelection),c.serverModeSelection!==c.serverMode&&(c.serverModeSelection=null),(n||c.serverMode==="e2e"||Jn(e))&&Mn(!1)}function ff(){return Jn(c.serverModeConfig)?(c.serverModeSelection=c.serverMode==="managed"?"e2e":"managed",c.serverMode=c.serverModeSelection,Mn(!1),!0):c.serverMode!=="managed"?!1:(Mn(!c.localMode),!0)}function Jt(){return c.serverMode==="standalone"&&c.localMode?"local":c.serverMode!=="managed"?c.serverMode:c.localMode?"local":"managed"}function mf(){_()||c.repoEditing||c.currentFile&&(c.repoUrl=Ze(c.currentFile))}Yt(()=>{mf()});var Qo=null;function I$(){Qo=null}function Mi(){return _()&&Qo?.teamId===c.currentManagedTeam&&Qo?.userId===c.managedSession?.id&&Qo?.role===c.managedSession?.role?Qo:null}function A$(e,t){let n=new Map,r=new Map,o=[],s=[];fi(t.links??[],r);for(let i of t){let a=i.data;if(a.source==="links"&&Array.isArray(a.links)){o.push({id:i.id,name:i.filename,groups:a.links,skipped:0}),fi(a.links,r);continue}let l=yn(a)??[],p=pl([{groups:[l.flat().filter(d=>d&&typeof d=="object")],tree:a.tree}]);for(let[d,f]of l.entries()){let m=(Array.isArray(f)?f:[f]).filter(b=>b&&typeof b=="object").map(b=>{let y={...b,_managedReportId:i.id,_reportName:i.filename,_repoFallback:i.repo.github,_repoDirectory:i.repo.directory,_source:b.source??a.source??null,_bundleHashes:a.bundleHashes??[],_depsDirectory:p};return Po(y,a),y._analyzer=y._source??y.type??null,"isApp"in y||(y.isApp=jn(y,y._source)),y}),h={report:i.filename,managedReportId:i.id,index:d,members:m};s.push(h);for(let b of m)n.has(b.id)||n.set(b.id,[]),n.get(b.id).push(h)}}Qo={teamId:e,userId:c.managedSession?.id,role:c.managedSession?.role,links:o,rows:s,byId:n,duplicates:r},c.linksTick++,c.findingIndexTick++}function ac(e){let t=Mi();return[...new Set(e.flatMap(n=>t?.byId.get(n)??[]))]}function E$(e){for(let t of ac([e])){let n=qt(t.members.find(r=>r.id===e));if(n)return n}return""}var ZT="solidity-bundle",QT="0.0.0";function or(e){if(e?.name!==ZT)return!1;let t=e.version;return!t||t===QT}function L$(e){let t=e?.package?.npm,n=t?.version;if(typeof n=="string"&&n&&!or(t))return n;let r=e?.file;if(!r)return null;let o=/(?:^|\/)node_modules\/\.pnpm\/([^/]+)\/node_modules\//u.exec(r);if(!o)return null;let s=o[1],i=s.indexOf("_");i>0&&(s=s.slice(0,i));let a=s.lastIndexOf("@");return a<=0?null:s.slice(a+1)||null}function lc(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function cc(e,t,n,r){e.reports.add(n);let o=e._keyReports.get(t);o||e._keyReports.set(t,o=new Set);let s=!o.has(n);return o.add(n),e.keys.has(t)||(e.keys.add(t),e.findings.push(r),e.files.has(r.file)||e.files.set(r.file,[]),e.files.get(r.file).push(r)),s}function dc(e,t,n,r){e._keyReports.delete(t),e.keys.delete(t);let o=e.findings.findIndex(a=>r(a)===t);o>=0&&e.findings.splice(o,1);let s=e.files.get(n);if(!s)return;let i=s.findIndex(a=>r(a)===t);i>=0&&s.splice(i,1),s.length===0&&e.files.delete(n)}function uc(e){let t=new Set;for(let n of e._keyReports.values())for(let r of n)t.add(r);e.reports=t}function O$(e,t,n,r,o){let s=e.byVersion.get(t);s||(s=lc(),e.byVersion.set(t,s)),cc(s,r,o,n)}function N$(e,t,n,r,o,s){let i=e.byVersion.get(t);if(!i)return;let a=i._keyReports.get(n);if(a&&(a.delete(o),a.size===0&&dc(i,n,r,s)),i._keyReports.size===0){e.byVersion.delete(t);return}uc(i)}function gf(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[n,r=""]=F$(e,"-"),[o,s=""]=F$(t,"-"),i=n.split("."),a=o.split("."),l=Math.max(i.length,a.length);for(let p=0;p<l;p++){let d=i[p]??"0",f=a[p]??"0",m=/^\d+$/u.test(d),h=/^\d+$/u.test(f);if(m&&h){let b=Number(f)-Number(d);if(b!==0)return b}else{let b=f.localeCompare(d);if(b!==0)return b}}return r===""&&s!==""?-1:r!==""&&s===""?1:s.localeCompare(r)}function F$(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+1)]}var Qr=new Map,es=new Map,ts=new Map,eo=new Map,pc=new Map;function eI(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!or(t))return t.name;if(!e?.file)return null;let n=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,r;for(;(r=n.exec(e.file))!==null;)if(r[1]!==".pnpm")return r[1];return null}function tI(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function nI(e,t){return typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:typeof t=="string"&&t?t:null}var Ii=new Set,hf=new Set,Ti=null,bf=!1;function rI(e){return hf.add(e),()=>hf.delete(e)}function yf(){for(let e of hf)try{e()}catch{}}function wf(e){return Qr.get(e)?.list??[]}function vf(){let e=0;for(let t of Qr.values())e+=t.list.length;return e}function Zt(){return es}function to(){return ts}function Ai(e,t){let n=Qr.get(e);if(!n)return[];let r=n.reports.get(sr(t));return r?[...r]:[]}function $f(e,t){let n=es.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function kf(e,t){let n=ts.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function no(e){return _()?[...new Set(ac([e]).map(t=>t.report))]:[...eo.get(e)?.reports.keys()??[]]}function xf(e){if(_())return E$(e);for(let{title:t}of eo.get(e)?.reports.values()??[])if(t)return t;return""}function Qt(e){if(_())return ac(e);let t=new Set;for(let n of e)for(let r of eo.get(n)?.reports.values()??[])for(let o of r.rows)t.add(o);return[...t]}function sr(e){let t=e.id?`id:${e.id}`:`c:${e.severity??""}|${e.description??""}|${e.file??""}|${e.line??""}`;return JSON.stringify([t,ct(e)])}function fc(e,t,n){let r=pc.get(e);r||(r={hash:[],pkg:[],repo:[],id:[]},pc.set(e,r)),r[t].push(n)}function oI(e,t,n){let r=eo.get(e.id);r||eo.set(e.id,r={reports:new Map});let o=r.reports.get(t);return o?(o.rows.add(n),!1):(r.reports.set(t,{title:qt(e),rows:new Set([n])}),fc(t,"id",e.id),!0)}function sI(e,t,n){let r=Qr.get(e.fileHash);r||(r={keys:new Set,list:[],reports:new Map},Qr.set(e.fileHash,r));let o=r.reports.get(t);o||(o=new Set,r.reports.set(t,o));let s=!o.has(n);return o.add(n),s&&fc(n,"hash",{hash:e.fileHash,key:t}),r.keys.has(t)?s:(r.keys.add(t),r.list.push(e),!0)}function iI(e,t,n){let r=eI(e);if(!r)return!1;let o=L$(e),s=es.get(r);if(s||(s={...lc(),repos:new Set,byVersion:new Map,_repoReports:new Map},es.set(r,s)),typeof e.repo?.github=="string"&&e.repo.github){s.repos.add(e.repo.github);let a=s._repoReports.get(e.repo.github);a||s._repoReports.set(e.repo.github,a=new Set),a.add(n)}O$(s,o,e,t,n);let i=cc(s,t,n,e);return fc(n,"pkg",{pkg:r,key:t,file:e.file,version:o}),i}function aI(e,t,n,r){if(tI(e))return!1;let o=nI(e,r);if(!o)return!1;let s=ts.get(o);s||(s=lc(),ts.set(o,s));let i=cc(s,t,n,e);return i&&fc(n,"repo",{repo:o,key:t,file:e.file}),i}function Sf(e){let t=pc.get(e);if(pc.delete(e),Ii.delete(e),!t)return!1;let n=!1;for(let{hash:o,key:s}of t.hash){let i=Qr.get(o);if(!i)continue;let a=i.reports.get(s);if(a){if(a.delete(e)&&(n=!0),a.size===0){i.reports.delete(s),i.keys.delete(s);let l=i.list.findIndex(p=>sr(p)===s);l>=0&&i.list.splice(l,1)}i.keys.size===0&&Qr.delete(o)}}let r=new Set;for(let{pkg:o,key:s,file:i,version:a}of t.pkg){let l=es.get(o);if(!l)continue;let p=l._keyReports.get(s);if(p){if(p.delete(e)&&(n=!0),p.size===0&&dc(l,s,i,sr),N$(l,a,s,i,e,sr),!r.has(o)){r.add(o);for(let d of[...l._repoReports.keys()]){let f=l._repoReports.get(d);f?.delete(e)&&f.size===0&&(l._repoReports.delete(d),l.repos.delete(d),n=!0)}}l._keyReports.size===0?es.delete(o):uc(l)}}for(let{repo:o,key:s,file:i}of t.repo){let a=ts.get(o);if(!a)continue;let l=a._keyReports.get(s);l&&(l.delete(e)&&(n=!0),l.size===0&&dc(a,s,i,sr),a._keyReports.size===0?ts.delete(o):uc(a))}for(let o of t.id){let s=eo.get(o);s&&(s.reports.delete(e)&&(n=!0),s.reports.size===0&&eo.delete(o))}return n}async function lI(e){if(Ii.has(e))return!1;Ii.add(e);try{let t=await fe(e),n=await $t(t);if(!n)return!1;let{data:r,findings:o}=n;if(o.length===0)return!1;Tw(o,r),Gn(yn(r).map(a=>Array.isArray(a)?a:[a]),{source:r.source});let s=Pe(r)??"";if(!s)try{s=Ze(e)}catch{}let i=!1;for(let a of o){let l=sr(a);a.fileHash&&sI(a,l,e)&&(i=!0),a.file&&iI(a,l,e)&&(i=!0),a.file&&aI(a,l,e,s)&&(i=!0)}for(let[a,l]of yn(r).entries()){let p=(Array.isArray(l)?l:[l]).filter(f=>f?.id);if(p.length===0)continue;let d={report:e,index:a,members:p.map(f=>{let m=f.source??r.source??null;return{id:f.id,title:qt(f),source:m,revalidate:Be(f),isApp:f.isApp??jn(f,m),isSecurity:f.isSecurity,...f.file?{file:f.file,_depsDirectory:f._depsDirectory}:{}}})};for(let f of p)oI(f,e,d)&&(i=!0)}return Ii.has(e)?i:(Sf(e),bf=!0,!1)}catch{return Ii.delete(e),!1}}function xt(){return _()?Promise.resolve():Ti||(Ti=(async()=>{try{do{bf=!1;let e=await ce();for(let t of e)await lI(t)&&yf()}while(bf)}finally{Ti=null}})(),Ti)}mt(e=>{Sf(e)&&yf()});R$(e=>{Sf(e)&&yf(),xt().catch(()=>{})});var Ei=new Map,ns=new Map,mc=new Map,Cf=new Set;function cI(e){return Cf.add(e),()=>Cf.delete(e)}function B$(){for(let e of Cf)try{e()}catch{}}function Fi(e,t){if(!e||!t)return!1;let n=!ns.has(e);ns.set(e,t),mc.delete(e);for(let[r,o]of t){if(!o)continue;let s=Ei.get(o);s||(s=new Map,Ei.set(o,s)),s.set(e,r)}return n&&B$(),n}function _f(e){let t=ns.get(e);if(ns.delete(e),mc.delete(e),!!t){for(let n of t.values()){let r=Ei.get(n);r&&(r.delete(e),r.size===0&&Ei.delete(n))}B$()}}function Rf(e,t){let n=ns.get(e);if(!n||typeof t!="string"||t==="")return null;if(n.has(t))return t;let r=dI(e,n).get(P$(t));if(!r)return null;let o=t.startsWith("/")?t:`/${t}`,s=null;for(let i of r)if(i.endsWith(o)){if(s!==null)return null;s=i}return s}function P$(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function dI(e,t){let n=mc.get(e);if(n)return n;n=new Map;for(let r of t.keys()){let o=P$(r),s=n.get(o);s?s.push(r):n.set(o,[r])}return mc.set(e,n),n}function ro(e){if(!e)return[];let t=Ei.get(e);if(!t)return[];let n=[];for(let[r,o]of t)n.push({integrity:r,file:o});return n}function Mf(e){return ns.has(e)}var D$="deepview.fileCounts",Tf=4,uI=new Set([3,Tf]),Oi=null;function hc(){if(Oi)return Oi;let e;try{e=JSON.parse(ve(D$)||"{}")}catch{e={}}return uI.has(e?.__v)?e.__v=Tf:e={__v:Tf},Oi=e,Oi}function If(){Te(D$,JSON.stringify(Oi)).catch(e=>console.warn("counts persist:",e))}function z$(e){if(e==="__v")return;let t=hc()[e];if(t!==void 0)return typeof t=="number"?{count:t}:t}function Ni(e){return z$(e)?.count}function Ie(e){return z$(e)?.source}function Ue(e,t,n){let r=hc();r[e]={count:t,source:n??null},If()}function os(e){let t=hc();delete t[e],If()}function Ve(e){let t=qn(e);return t?{count:Cl(t.groups),source:ke,recognized:!0}:Rw(e)}var Li=null,rs=null,gc=null;function pI(e,t){for(let{names:n,onUpdate:r}of gc)if(n.has(e))try{r(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function Af(e,t){if(Li){t&&gc.push({names:new Set(e),onUpdate:t});for(let n of e)rs.add(n);return Li}return rs=new Set(e),gc=t?[{names:new Set(e),onUpdate:t}]:[],Li=(async()=>{await Promise.resolve();try{let n=hc();for(;rs.size>0;){let r=rs.values().next().value;if(rs.delete(r),n[r]===void 0)try{let o=await fe(r);if(n[r]!==void 0)continue;let{count:s,source:i}=Ve(o);n[r]=i?{count:s,source:i}:{count:s},If(),pI(r,s)}catch{}}}finally{Li=null,rs=null,gc=null}})(),Li}var fI=`deepview/workspace-id/v1
|
|
2
|
-
`;async function
|
|
3
|
-
`))if(t.trim())return t.trim();return""}function RI(e){let t=new Set(e.map(r=>r.id)),n=new Map;for(let r of c.reports)for(let o of r.groups)for(let s of o){let i=s.id??String(s._id);if(!(!t.has(i)||n.has(i))&&(n.set(i,{severity:s.severity,file:s.file,line:s.line,description:Kf(s.description)}),n.size===t.size))return n}return n}var ir=new Map,Xf=new Map,$c=new Map,qf=new Set,Gi=null,Ki=null,Yf=0,qi=!1,zt=!1;function Jf(){return _()||zt}function Yi(e){return qf.add(e),()=>qf.delete(e)}function as(){for(let e of qf)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function Zf(){let e=new Map;for(let t of ir.values())t&&fi(t.groups,e);Xf=e}function Qf(){if(_())return Mi()?.links??[];let e=[];for(let[t,n]of ir)n&&e.push({name:t,groups:n.groups,skipped:n.skipped});return e.toSorted((t,n)=>t.name.localeCompare(n.name))}function em(){return _()?!!Mi()?.duplicates.size:Xf.size>0}function gt(e){if(_())return[...Mi()?.duplicates.get(e)??[]];let t=Xf.get(e);return t?[...t]:[]}async function q$(e){if(ir.has(e))return!1;let t=$c.get(e)??0,n;try{n=await fe(e)}catch{return!1}if(n==null)return!1;if(($c.get(e)??0)!==t)return qi=!0,!1;let r=/^\s*\[/u.test(n)?qn(n):null;if(ir.set(e,r),r&&Ie(e)!==ke)Ue(e,Cl(r.groups),ke);else if(!r&&Ie(e)===ke){let{count:o,source:s}=Ve(n);Ue(e,o,s)}return r!==null}function Y$(){return _()?Promise.resolve():Ki||(Ki=(async()=>{try{let e,t;do{t=Yf,e=await ce(),zt&&e.some(o=>!ir.has(o))&&(zt=!1,as());let n=e.filter(o=>Ie(o)===ke);(await Promise.all(n.map(o=>q$(o)))).some(Boolean)&&(Zf(),as())}while(t!==Yf);return e}catch(e){throw zt&&(zt=!1,as()),e}finally{Ki=null}})(),Ki)}function Xi(){return _()?Promise.resolve():Gi||(Gi=(async()=>{try{do{qi=!1;let e=await Y$(),t=!1;for(let o of e)await q$(o)&&(t=!0);let n=!qi&&e.every(o=>ir.has(o)),r=zt!==n;zt=n,t&&Zf(),(t||r)&&as()}while(qi)}catch(e){throw zt&&(zt=!1,as()),e}finally{Gi=null}})(),Gi)}mt(e=>{let t=zt;zt=!1,Yf++,$c.set(e,($c.get(e)??0)+1),qi=!0;let n=ir.get(e)!=null;ir.delete(e),n&&Zf(),(n||t)&&as()});var tm=()=>{};function nm(e){tm=typeof e=="function"?e:()=>{}}var J$=()=>{};function rm(e){J$=typeof e=="function"?e:()=>{}}var Z$=()=>{};function MI(e){Z$=typeof e=="function"?e:()=>{}}var ar="deepview.triage",Tn="deepview.triage.pending",en=/^\d+$/u;async function TI(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function II(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}var AI="deepview.triage.save",X$=0;function kc(){return!_()&&cp(c.triage,c.reports)}function om(){kc();let e={};for(let[t,n]of c.triage){if(en.test(t))continue;let r=fl(n);r&&(e[t]=r)}return e}function xe(){if(_())return J$(),Promise.resolve();let e=++X$,t=om(),n=Object.keys(t).length===0,r=n?null:JSON.stringify(t);if(r!=null)try{localStorage.setItem(Tn,r)}catch{}return navigator.locks.request(o$,{mode:"shared"},async()=>{let o=null,s=null;if(r!=null)try{let i=Do(r),a=await TI(i);s=xi(),o=(s?await s$(a):a).toBase64()}catch(i){console.warn("Failed to save triage:",i),tm();return}await navigator.locks.request(AI,()=>{try{if(e!==X$)return;if(r!=null&&xi()!==s){queueMicrotask(()=>{xe()});return}if(n)localStorage.removeItem(ar),localStorage.removeItem(Tn);else{localStorage.setItem(ar,o);try{localStorage.removeItem(Tn)}catch{}}}catch(i){console.warn("Failed to save triage:",i)}}),tm()})}async function xc(){let e=localStorage.getItem(Tn);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(ar);if(!t)return null;let n=Uint8Array.fromBase64(t);if(ql(n)){if(!xi())throw new Error("triage: vault locked, cannot decrypt envelope");n=await i$(n)}let r=await II(n);return JSON.parse(Ur(r))}function Q$(e,{replace:t=!1}={}){let n=c.triage;if(t){let r=null,o=localStorage.getItem(Tn);if(o)try{r=JSON.parse(o)}catch{}let s=i=>r!=null&&i in r;for(let i of[...n.keys()]){if(en.test(i))continue;let a=e?.[i],l=!e||!(i in e);!(s(i)&&r[i]?.color)&&(l||!a?.color)&&ae(n,i,{color:void 0}),!(s(i)&&(r[i]?.triage||r[i]?.deleted))&&!qe(a)&&ae(n,i,{triage:void 0}),!(s(i)&&r[i]?.comment)&&(l||typeof a?.comment!="string"||!a.comment)&&ae(n,i,{comment:void 0}),!(s(i)&&r[i]?.fix)&&(l||typeof a?.fix!="string"||!a.fix)&&ae(n,i,{fix:void 0}),!(s(i)&&r[i]?.flagged!==void 0)&&(l||a?.flagged===void 0)&&ae(n,i,{flagged:void 0})}for(let i of[...n.keys()]){if(en.test(i))continue;let a=n.get(i)?.ignoredReports;if(!a||a.length===0)continue;let l=e?.[i],p=!Wr(l);for(let d of[...a]){if(s(i)&&Array.isArray(r[i]?.ignoredReports)&&r[i].ignoredReports.includes(d))continue;if(p){tt(n,i,d,!1);continue}let f=l?.ignoredReports;(!Array.isArray(f)||!f.includes(d))&&tt(n,i,d,!1)}}}if(e)for(let[r,o]of Object.entries(e)){let s=qe(o),i={};if(o&&o.color&&(i.color=o.color),s&&(i.triage=s),o&&typeof o.comment=="string"&&o.comment&&(i.comment=o.comment),o&&typeof o.fix=="string"&&o.fix&&(i.fix=o.fix),o&&typeof o.flagged=="boolean"&&(i.flagged=o.flagged),Object.keys(i).length>0&&ae(n,r,i),Wr(o)&&o&&Array.isArray(o.ignoredReports))for(let a of o.ignoredReports)typeof a=="string"&&tt(n,r,a,!0,Kn(o,a))}}async function ls(){if(_())return!1;if(![...c.triage.values()].some(r=>r.ignoredReports?.length))return;let{readFileFresh:e,withStoredItem:t}=await import("./chunk-WGG7KQUH.js"),n=await Iw(Object.fromEntries(c.triage),r=>t("report",r,()=>e(r)));if(!_())return cp(c.triage,n)}async function EI(){if(!_())try{let e=await xc();if(_())return;Q$(e),await ls()&&await xe()}catch(e){console.warn("Failed to load triage:",e)}}async function Ji(){if(!_())try{let e=await xc();if(_())return;Q$(e,{replace:!0}),await ls()&&await xe(),Z$()}catch(e){console.warn("Failed to reload triage:",e)}}typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==ar&&e.key!==Tn||Ji()});var FI;function io(){return _()?Promise.resolve():FI??=EI()}kt(()=>{Ji()});kt(()=>{_()||xi()&&localStorage.getItem(Tn)&&xe()});async function sm({seal:e}){try{localStorage.removeItem(Tn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(ql(n))return;let r=await e(n,Hp());localStorage.setItem(ar,r.toBase64())}async function im({open:e}){try{localStorage.removeItem(Tn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(!ql(n))return;let r=await e(n,Hp());localStorage.setItem(ar,r.toBase64())}function Sc(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function ek(e){if(typeof e!="string"||!e)return null;if(e.startsWith("r:"))try{let t=JSON.parse(e.slice(2));if(t&&typeof t.name=="string"&&t.name&&typeof t.workspaceId=="string"&&t.workspaceId)return{name:t.name,workspaceId:t.workspaceId}}catch{}return{name:e,workspaceId:null}}var tk="deepview.lastFile",Zi=null;function am(){return Zi||(Zi=LI(),Zi.catch(()=>{Zi=null})),Zi}async function LI(){try{await io()}catch{}let e=await ce(),t=new Set(e),n=new Set(e),r=new Set;for(let o of e){if(!o.toLowerCase().endsWith(".deepseek"))continue;let s=o.slice(0,-9)+".md";if(t.has(s))continue;let i;try{i=await fe(o),await Xt(s,i),await Jo(o)}catch(f){console.warn(`migrate: failed to rename ${o} -> ${s}`,f);continue}t.delete(o),t.add(s),r.add(o);let a=Ni(o);if(os(o),a===void 0){let{count:f,source:m}=Ve(i);Ue(s,f,m)}else{let{source:f}=Ve(i);Ue(s,a,f)}let l=Ze(o);l&&(Zr(o,""),Zr(s,l));let p=!1;for(let[f,m]of[...c.triage])m.ignoredReports?.includes(o)&&(tt(c.triage,f,o,!1),tt(c.triage,f,s,!0,Kn(m,o)),p=!0);p&&await xe();let d=ek(ve(tk));if(d?.name===o)try{await Te(tk,Sc(s,d.workspaceId))}catch{}}for(let o of Y())for(let s of o.reports){if(!s.toLowerCase().endsWith(".deepseek")||!r.has(s)&&n.has(s))continue;let i=s.slice(0,-9)+".md";await Vi(s,o.id),await oo(i,o.id)}}function lm(){return{...nk,hydrateKey:a$,localContentSyncStatus:Mv,readTriageBlob:async()=>(await gl(await xc(),e=>Xl("report",e,()=>qp(e)))).entries,reportSyncHash:e=>Xl("report",e,async()=>_v(await Cn(e)))}}var nk={hasStoredBundleBytes:c$,listBundles:Je,listFiles:ce,onBundleMutated:l$,onFileMutated:mt,readBundle:_n,readFile:qp,withStoredItem:Xl,isEncryptionEnabled:ft,isUnlocked:Yo,onVaultStateChange:kt,unlockEncryption:Si};function cm(e=nk){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(o,s,i)=>{let a=!1,l=!1,p=e.onVaultStateChange(()=>{a=!0}),d=s==="report"?e.onFileMutated:e.onBundleMutated,f=i===void 0?null:d(m=>{m===i&&(l=!0)});return{check(){if(o?.throwIfAborted(),t()||a)throw new Error("Local data is locked or has changed. Unlock it and select the file again.");if(l)throw new Error(`This local ${s} changed. Select it again before importing.`)},unsubscribe(){p(),f?.()}}},r=async o=>o==="report"?(await e.listFiles()).map(s=>({value:s,label:s})):(await e.listBundles()).map(s=>({value:s.integrity,label:s.name,secondary:s.integrity}));return{get locked(){return t()},async hasData(o){return o==="report"?(await e.listFiles()).length>0:t()?e.hasStoredBundleBytes():(await e.listBundles()).length>0},async list(o){let s=n();try{s.check();let i=await r(o);return s.check(),i}finally{s.unsubscribe()}},unlock(o){return e.unlockEncryption(o)},subscribe(o){let s=e.onVaultStateChange(()=>o()),i=e.onFileMutated(l=>o({kind:"report",value:l})),a=e.onBundleMutated(l=>o({kind:"bundle",value:l}));return()=>{s(),i(),a()}},async importItem(o,s,i,{signal:a}={}){let l=n(a,o,s);try{l.check();let{result:p}=await e.withStoredItem(o,s,async()=>{l.check();let d=(await r(o)).find(h=>h.value===s);if(l.check(),!d)throw new Error("This file is no longer in local storage. Select another file.");let f=o==="report"?await e.readFile(s):await e.readBundle(s);l.check();let m=new File([f],d.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let h=Promise.resolve(i(m));return h.catch(()=>{}),{result:h}}finally{l.unsubscribe()}});return p}finally{l.unsubscribe()}}}}function rk(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function cs(){if(!rk()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function dm(){let e={supported:rk(),persisted:null,usage:null,quota:null};if(!e.supported)return e;if(typeof navigator.storage.persisted=="function")try{e.persisted=await navigator.storage.persisted()}catch{}if(typeof navigator.storage.estimate=="function")try{let t=await navigator.storage.estimate();typeof t?.usage=="number"&&(e.usage=t.usage),typeof t?.quota=="number"&&(e.quota=t.quota)}catch{}return e}var Cc="deepview.scan.access",um=new Set;function ok(){for(let e of um)e()}function ds(){return ve(Cc)!=null}function pm(e){try{let t=JSON.parse(ve(Cc)),n=t?.provider==="moonshotai"?"moonshot":t?.provider;return!e||t?.server!==e||typeof t.deepview!="string"||!t.deepview.trim()||![null,"anthropic","openai","moonshot","openrouter"].includes(n)||typeof t.token!="string"?null:{...t,provider:n}}catch{return null}}async function fm({server:e,deepview:t,provider:n,token:r}){await Te(Cc,JSON.stringify({server:e,deepview:t,provider:n,token:r})),ok()}async function mm(){await nr(Cc),ok()}function gm(e){um.add(e);let t=Yt(e);return()=>{um.delete(e),t()}}var hm=1;function OI(){let e=om(),t=oc();return{version:hm,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function NI(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function BI(){let e=OI();return{blob:new Blob([await ci(JSON.stringify(e))]),filename:NI()}}async function PI(e){let t;try{t=await hl(new Uint8Array(await e.arrayBuffer()))}catch(r){throw new Error(`Failed to gunzip: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch(r){throw new Error(`Failed to parse JSON: ${r.message}`,{cause:r})}if(!n||typeof n!="object")throw new Error("Invalid backup file (not an object)");if(n.version!==hm)throw new Error(`Unsupported backup version: ${n.version} (expected ${hm})`);if(!n.triage||typeof n.triage!="object")throw new Error("Backup is missing the `triage` map");if(!n.repoUrls||typeof n.repoUrls!="object")throw new Error("Backup is missing the `repoUrls` map");return n}async function DI(e,t){if(!["replace","prefer-imported","prefer-current"].includes(t))throw new Error(`Unknown merge mode: ${t}`);if(!e||typeof e!="object")throw new Error("Invalid payload: not an object");if(!e.triage||typeof e.triage!="object"||Array.isArray(e.triage))throw new Error("Invalid payload: missing or non-object `triage`");if(!e.repoUrls||typeof e.repoUrls!="object"||Array.isArray(e.repoUrls))throw new Error("Invalid payload: missing or non-object `repoUrls`");let n=e.triage,r=c.triage;if(t==="replace")for(let a of[...r.keys()])en.test(a)||r.delete(a);let o=t==="prefer-current";for(let[a,l]of Object.entries(n)){if(en.test(a)||!l||typeof l!="object")continue;typeof l.color=="string"&&l.color&&(!o||!r.get(a)?.color)&&ae(r,a,{color:l.color});let p=qe(l);if(p&&(!o||!qe(r.get(a)))&&ae(r,a,{triage:p}),typeof l.comment=="string"&&l.comment&&(!o||!r.get(a)?.comment)&&ae(r,a,{comment:l.comment}),typeof l.fix=="string"&&l.fix&&(!o||!r.get(a)?.fix)&&ae(r,a,{fix:l.fix}),typeof l.flagged=="boolean"&&(!o||r.get(a)?.flagged===void 0)&&ae(r,a,{flagged:l.flagged}),Array.isArray(l.ignoredReports)&&Wr(r.get(a)))for(let d of l.ignoredReports)typeof d=="string"&&tt(r,a,d,!0,Kn(l,d))}await ls(),await xe();let s=0,i=null;try{await T$(e.repoUrls,t),s=Object.keys(e.repoUrls).length}catch(a){console.warn("applyTriageImport: repo-URL import failed:",a),i=a}return{triageEntries:Object.keys(n).length,repoUrls:s,repoUrlError:i}}function zI(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function bm(e){let t=new Set;for(let n of e){let r;try{r=await fe(n)}catch(s){if(zI(s))continue;throw new Error(`Failed to read ${n}: ${s.message}`,{cause:s})}if(r==null)continue;let o=await $t(r);if(o)for(let s of o.findings)s.id&&t.add(s.id)}return t}function WI(){let e=new Set;for(let t of c.triage.keys())en.test(t)||e.add(t);return e}async function _c(e){let t=WI();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await bm(e),r=new Set;for(let d of t)n.has(d)&&r.add(d);if(r.size===0)return{orphanedCount:0,sharedCount:0};let o=await ce(),s=new Set(e),i=o.filter(d=>!s.has(d)),a=await bm(i),l=0,p=0;for(let d of r)a.has(d)?p++:l++;return{orphanedCount:l,sharedCount:p}}async function Rc(){let e=new Set(c.triage.keys()),t=[];for(let[i,a]of c.triage)if(a.ignoredReports)for(let l of a.ignoredReports)t.push({id:i,report:l});let n=await ce(),r=new Set(n),o=await bm(n),s=!1;for(let i of e){if(en.test(i)||o.has(i))continue;let a=c.triage.get(i);!a||!(a.color||qe(a)||a.comment||a.fix||a.flagged!==void 0)||ae(c.triage,i,{color:void 0,triage:void 0,comment:void 0,fix:void 0,flagged:void 0,deleted:void 0})&&(s=!0)}for(let{id:i,report:a}of t)en.test(i)||o.has(i)&&r.has(a)||Hr(c.triage,i,a)&&tt(c.triage,i,a,!1)&&(s=!0);s&&await xe()}var HI=1;async function UI(e){let t=new Set,n=await $t(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function ym(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function VI(e){if(!Array.isArray(e)||e.length===0)return[];let t=await Je(),n=new Map(t.map(o=>[o.integrity,o.name])),r=[];for(let o of e){let s=n.get(o);if(!s)continue;let i;try{i=await _n(o)}catch(a){console.warn(`Workspace export: failed to read bundle ${o}: ${a?.message??a}`);continue}r.push({integrity:o,name:s,data:i.toBase64()})}return r}function jI(e){let t=Ze(e);return t?{github:t}:null}async function sk(e){let t=[];for(let n of e.reports??[]){let r;try{r=await fe(n)}catch(s){console.warn(`Workspace export: skipping ${n}: ${s?.message??s}`),(s instanceof DOMException&&s.name==="NotFoundError"||typeof s?.message=="string"&&s.message.startsWith("File not found:"))&&await Ui(n,null);continue}let o=jI(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function GI(e,{includeBundleBytes:t=!1}={}){let n=await sk(e),r=new Set;for(let p of n)for(let d of await UI(p.content))r.add(d);let o=new Set(e.reports??[]),s={};for(let[p,d]of c.triage){if(!r.has(p))continue;let f=(d.ignoredReports??[]).filter(h=>o.has(h)),m=fl({...d,ignoredReports:f});m&&(s[p]=m)}let i={};for(let p of n)p.repo?.github&&(i[p.name]=p.repo.github);let a=(e.bundles??[]).filter(p=>typeof p=="string"&&p.length>0),l={version:HI,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:n,bundles:a,repoUrls:i,triage:s};if(t){let p=await VI(a);p.length>0&&(l.bundleBlobs=p)}return l}async function ik(e,{includeBundleBytes:t=!1}={}){let n=await GI(e,{includeBundleBytes:t});return{blob:new Blob([await ci(JSON.stringify(n))]),filename:`${ym(e.name)}.deepview-workspace.json.gz`}}async function KI(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await ik(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),s=await Fw(o,t);return{blob:new Blob([s],{type:"application/octet-stream"}),filename:`${ym(e.name)}.deepview-workspace.enc`}}async function wm(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await KI(e,t,{includeBundleBytes:n}):await ik(e,{includeBundleBytes:n})}async function qI(e){return{reports:await sk(e)}}async function vm(e){let t=await qI(e);return{blob:new Blob([await ci(JSON.stringify(t))]),filename:`${ym(e.name)}.deepview-reports.json.gz`}}function YI(e){return qe(e)??null}async function XI(e){let t=new Map;for(let n of e??[]){if(typeof n?.content!="string")continue;let r=await $t(n.content);if(r)for(let o of r.findings)!o.id||t.has(o.id)||t.set(o.id,{severity:o.severity,file:o.file,line:o.line,description:Kf(o.description)})}return t}async function JI(e,t,n){if(!e||typeof e!="object"||Array.isArray(e))return;let r=c.triage,o=[];for(let[s,i]of Object.entries(e)){if(!i||typeof i!="object")continue;let a=r.get(s)?.color,l=typeof i.color=="string"?i.color:void 0;l&&a&&a!==l?o.push({id:s,property:"color",local:a,imported:l}):l&&l!==a&&ae(r,s,{color:l});let p=r.get(s)?.comment??"",d=typeof i.comment=="string"?i.comment:"";d&&p&&p!==d?o.push({id:s,property:"comment",local:p,imported:d}):d&&d!==p&&ae(r,s,{comment:d});let f=r.get(s)?.fix??"",m=typeof i.fix=="string"?i.fix:"";m&&f&&f!==m?o.push({id:s,property:"fix",local:f,imported:m}):m&&m!==f&&ae(r,s,{fix:m});let h=YI(i),b=qe(r.get(s))??null;h&&b&&b!==h?o.push({id:s,property:"triage",local:b,imported:h}):h&&!b&&ae(r,s,{triage:h,...h==="ignored"?{}:{ignoredReports:void 0}});let y=r.get(s)?.flagged,w=typeof i.flagged=="boolean"?i.flagged:void 0;w!==void 0&&y!==void 0&&y!==w?o.push({id:s,property:"flagged",local:y?"flagged":"not flagged",imported:w?"flagged":"not flagged"}):w!==void 0&&w!==y&&ae(r,s,{flagged:w});let v=Array.isArray(i.ignoredReports)?i.ignoredReports:[];if(Wr(r.get(s)))for(let x of v)typeof x=="string"&&tt(r,s,x,!0,Kn(i,x))}if(o.length>0&&t){let s=await t(o,n??new Map);s&&ZI(o,s)}await xe()}function ZI(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&QI(n.id,n.property)===n.local&&(n.property==="color"?ae(c.triage,n.id,{color:n.imported}):n.property==="comment"?ae(c.triage,n.id,{comment:n.imported}):n.property==="fix"?ae(c.triage,n.id,{fix:n.imported}):n.property==="triage"?ae(c.triage,n.id,{triage:n.imported,...n.imported==="ignored"?{}:{ignoredReports:void 0}}):n.property==="flagged"&&ae(c.triage,n.id,{flagged:n.imported==="flagged"?!0:n.imported==="not flagged"?!1:void 0}))}}function QI(e,t){if(t==="color")return c.triage.get(e)?.color;if(t==="triage")return qe(c.triage.get(e))??null;if(t==="comment")return c.triage.get(e)?.comment??"";if(t==="fix")return c.triage.get(e)?.fix??"";if(t==="flagged"){let n=c.triage.get(e)?.flagged;return n===!0?"flagged":n===!1?"not flagged":""}}async function eA(e){if(Array.isArray(e))for(let t of e){let n;try{n=Uint8Array.fromBase64(t.data)}catch(r){console.warn(`Workspace import: failed to decode bundle ${t.integrity}: ${r?.message??r}`);continue}try{let r=await Jr(t.name,n);r?.integrity!==t.integrity&&console.warn(`Workspace import: bundle ${t.name} integrity mismatch (claimed ${t.integrity}, computed ${r?.integrity})`)}catch(r){console.warn(`Workspace import: failed to save bundle ${t.name}: ${r?.message??r}`)}}}async function $m(e,{conflictResolver:t}={}){let n=[];for(let f of e.reports)if(!(typeof f?.name!="string"||typeof f?.content!="string"))try{await Xt(f.name,f.content);let{count:m,source:h}=Ve(f.content);Ue(f.name,m,h??Ie(f.name)),n.push(f.name)}catch(m){console.warn(`Workspace import: failed to save ${f.name}: ${m.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await eA(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await XI(e.reports):new Map,s=await gl(e.triage,f=>e.reports.find(m=>m.name===f)?.content);await JI(s.entries,t,o);let i=Array.isArray(e.bundles),a=i?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],l=await G$({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:n,bundles:i?a:void 0,preserveBundles:!i,createdAt:e.workspace.createdAt}),p=new Set(n),d=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[f,m]of Object.entries(e.repoUrls))!p.has(f)||typeof m!="string"||!m||(d[f]=m);if(Object.keys(d).length>0)try{await sc(d)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return l}function tA(e){return!e||typeof e!="object"||Array.isArray(e)?"payload is not an object":e.version!==void 0||e.workspace!==void 0?"payload claims to be a workspace export":Array.isArray(e.reports)?e.reports.length>bl?`reports count (${e.reports.length}) exceeds cap (${bl})`:null:"reports field must be an array"}function ak(e){return tA(e)===null}async function km(e){if(up(e))return{kind:"encrypted"};let t;try{t=await hl(e)}catch(r){throw new Error(`gzip decompression failed: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch{return{kind:"workspace",text:t}}return ak(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}async function xm({id:e,name:t,privateKeyBase64:n,password:r}){if(typeof e!="string"||!e)throw new TypeError("encodeShareLink: id required");if(typeof t!="string"||!t)throw new TypeError("encodeShareLink: name required");if(typeof n!="string"||!n)throw new TypeError("encodeShareLink: privateKey required");if(typeof r!="string"||!r)throw new TypeError("encodeShareLink: password required");let s=await Bi(n)===e?{v:1,n:t,k:n}:{v:1,i:e,n:t,k:n};return(await Aw(Do(JSON.stringify(s)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function nA({encoded:e,password:t}){if(typeof e!="string"||!e)throw new Error("malformed share link");if(typeof t!="string"||!t)throw new TypeError("decodeShareLink: password required");let n;try{n=Uint8Array.fromBase64(e,{alphabet:"base64url"})}catch{throw new Error("malformed share link")}let r=await Ew(n,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await rA(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function rA(e){let t=JSON.parse(Ur(e));if(!t||typeof t!="object"||typeof t.n!="string"||typeof t.k!="string"||!t.n||!t.k)throw new Error("shape");if(t.i!==void 0&&(typeof t.i!="string"||!t.i))throw new Error("shape");if(typeof t.i=="string"&&t.i.length>256)throw new Error("shape");if(t.n.length>1024)throw new Error("shape");if(Uint8Array.fromBase64(t.k).length!==32)throw new Error("shape");return{id:typeof t.i=="string"?t.i:await Bi(t.k),name:t.n,privateKeyBase64:t.k}}function Sm(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function oA(e){let t=typeof e=="string"?e:typeof location>"u"?"":location.hash;if(!t)return null;let n=t.replace(/^#/u,"");if(!n)return null;for(let r of n.split("&")){let o=r.indexOf("=");if(o<0||r.slice(0,o)!=="share")continue;return r.slice(o+1)||null}return null}var Mm="deepview.workspaceApp",lk=2,Cm=new Set,_m=new Set,Rm=0,Tm=0,Im=0,Tc=new Map,Ic=Promise.resolve(),ck=null;function ps(e=ve(Mm)){try{let t=JSON.parse(e);if(t?.version===lk&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:lk,revision:"",links:"[]",entries:{}}}function us(){for(let e of Cm)e()}function dk(e){let t=Ic.then(()=>Xo(Mm,n=>e(ps(n))));return Ic=t.catch(n=>console.warn("workspace App cache:",n)),t}function Mc(e){return JSON.stringify(e.reports.toSorted())}function uk(){return JSON.stringify(Qf().map(({name:e,groups:t})=>({name:e,groups:t})))}function Am(e){return Jf()&&e.links===uk()}function pk(e,t){return e.workspaceRevisions?.[t]??""}function fk(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(Tc.get(t?.id)??0)&&n.workspaceRevision===pk(e,t?.id)}function mk(e,t,n){return n.reportEpoch===Im&&n.reportRevision===(e.reportRevision??e.revision)&&fk(e,t,n)}function Em(e,t){return mk(ps(),e,t)}function gk(e,t){if(Rm||_m.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==Mc(e)||typeof n.appMode!="boolean"||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function Fm(e){return gk(e,ps())?.appMode??null}function ao(e){let t=ps(),n=gk(e,t);return!n||!Am(t)?null:n}async function Qi(e,t=null){let n;do n=Ic,await n;while(n!==Ic);let r=ps(),o=r.reportRevision??r.revision;return t&&(!mk(r,e,t)||!Am(r))?null:{epoch:Tm,revision:r.revision,reportEpoch:Im,reportRevision:o,workspaceId:e?.id,workspaceEpoch:Tc.get(e?.id)??0,workspaceRevision:pk(r,e?.id)}}async function Lm(e,t,n){let r=!1;return await dk(o=>{if(n.epoch!==Tm||n.revision!==o.revision||!fk(o,e,n)||!Am(o))return;let s=Y().find(i=>i.id===e.id);if(!(!s||Mc(s)!==Mc(e)))return o.entries[e.id]={...t,reports:Mc(e)},r=!0,JSON.stringify(o)}),r&&us(),r}function Ac(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)Tm++,t===void 0&&Im++,Rm++;else for(let n of e)Tc.set(n,(Tc.get(n)??0)+1),_m.add(n);return us(),dk(n=>{if(n.reportRevision??=n.revision,e===null)n.revision=crypto.randomUUID(),t===void 0&&(n.reportRevision=n.revision),n.entries={};else{n.workspaceRevisions??={};for(let r of e)n.workspaceRevisions[r]=crypto.randomUUID(),delete n.entries[r]}return t!==void 0&&(n.links=t),JSON.stringify(n)}).finally(()=>{if(e===null)Rm--;else for(let n of e)_m.delete(n);us()})}function Om(e){return Cm.add(e),()=>Cm.delete(e)}Yt(()=>{let e=ve(Mm);e!==ck&&(ck=e,us())});zi(e=>{Ac([e]).catch(()=>{})});Di(e=>{Ac([e]).catch(()=>{})});mt(e=>{let t=Y().filter(n=>n.reports.includes(e)).map(n=>n.id);Ac(t).catch(()=>{})});Yi(()=>{if(!Jf()){us();return}let e=uk();ps().links===e?us():Ac(null,e).catch(()=>{})});var St="deepviewManagedNavigation",Ec="deepviewManagedLoginFinding";function Nm(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Fc(e,t){return e?.bundleTab!=="code"||t?.bundleTab!=="code"||e.view!==t.view?!1:e.view==="npm"?e.packageName===t.packageName&&(e.packageSpec??null)===(t.packageSpec??null):e.view==="bundles"&&(e.teamSlug??null)===(t.teamSlug??null)&&e.bundleSlug===t.bundleSlug}function sA(e){let t=e.location.hash,n=Dw(t),r=!1,o=null,s=0,i=null,a=null,l=!1,p=null,d=null,f=null;function m(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h($){let S=ui($),C=S?.view==="home"?pi($.hash):null;return S?{...S,...C?{finding:C}:{}}:null}function b(){try{let $=e.sessionStorage?.getItem(Ec);if(e.sessionStorage?.removeItem(Ec),!$)return null;let S=new URL($,e.location.origin),C=S.origin===e.location.origin?h(S):null;return C?.finding?C:null}catch{return null}}function y(){if(!r||!pi(e.location.hash)||p===e.location.href||e.history.state?.[St]&&e.history.state[St]!==o)return;let $=p=e.location.href,S=h(new URL($));v(S??{view:"home"},{replace:!0}).finally(()=>{p===$&&(p=null)})}function w($){m()||($=$n($,n),e.history.replaceState(r?{[St]:o}:null,"",$),a=$)}async function v($,{replace:S=!1,pop:C=!1}={}){if(!r||!i||m())return!1;$??={view:"home"};let R=Ye($);if(R===null)return!1;let L=++s,A=d={route:$,findingRoute:null,codeRoute:null},E=()=>r&&L===s&&!m(),T=!1;try{T=await i($,E)}catch(I){console.warn("managed: navigation failed:",I)}return E()?T?(typeof T=="object"&&(R=Ye(T)??R),Nm(A.findingRoute,typeof T=="object"?T:$)&&(R=Ye(A.findingRoute)),Fc(A.codeRoute,typeof T=="object"?T:$)&&(R=Ye(A.codeRoute)),d=null,C||S?w(R):$n(R,n)!==a&&(R=$n(R,n),e.history.pushState({[St]:o},"",R),a=R),!0):(await i({view:"home"},E),E()&&(d=null,w("/")),!1):!1}function x($){if(m())return;if(!r){$.state?.[St]&&w("/");return}if((!$.state?.[St]||$.state[St]===o)&&pi(e.location.hash)){y();return}if(!$.state?.[St]){let C=h(new URL(e.location.href)),R=a==null?null:ui(new URL(a,e.location.href));if(C?.file!=null&&C.file===R?.file&&Fc(C,R)){w(Ye(C));return}}let S=$.state?.[St]===o?h(new URL(e.location.href)):null;v(S??{view:"home"},{pop:!0})}function k($){if(!r||$.defaultPrevented||$.button!==0||$.metaKey||$.ctrlKey||$.shiftKey||$.altKey)return;let S=$.composedPath().find(L=>L.matches?.("a.comment-self-ref[href]"));if(!S||S.hasAttribute("download")||S.target&&S.target!=="_self")return;let C=new URL(S.href);if(C.origin!==e.location.origin)return;let R=h(C);if(R?.finding)return $.preventDefault(),v(R)}return{get active(){return r},rememberFinding(){let $=h(new URL(e.location.href));if(!$?.finding)return;let S=$.view==="home"?`/#${jr($.finding)}`:Ye($);try{e.sessionStorage?.setItem(Ec,S)}catch{}},start($,{onCancel:S=null}={}){if(r)return;r=!0,i=$,f=S,o=typeof e.history.state?.[St]=="string"?e.history.state[St]:e.crypto.randomUUID(),l||(e.addEventListener("popstate",x),e.addEventListener("hashchange",y),e.addEventListener("click",k),e.launchQueue?.setConsumer(({targetURL:L})=>{if(!r||!L)return;let A=new URL(L);if(A.origin!==e.location.origin)return;let E=h(A);E&&v(E)}),l=!0);let C=b(),R=h(new URL(e.location.href))??{view:"home"};return C&&R.view==="home"&&!R.finding&&(R=C),v(R,{replace:!0})},navigate:v,replaceFindingRoute($){if(!r||$?.view!=="findings"||m())return;let S=Ye($);if(S!=null){if(d){(d.route.view==="home"&&d.route.finding||Nm($,{...d.route,view:"findings"}))&&(d.findingRoute=$);return}Nm($,ui(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceCodeRoute($){if(!r||m()||!["bundles","npm"].includes($?.view)||$.bundleTab!=="code")return;let S=Ye($);if(S!=null){if(d){Fc($,d.route)&&(d.codeRoute=$);return}Fc($,ui(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceRoute($){if(!r||!$||m())return;let S=Ye($);S!=null&&!d&&w(S)},pushRoute($){if(!r||!$||m())return;let S=Ye($);if(S==null)return;let C=d!==null;++s,d=null,S=$n(S,n),S!==a&&(e.history.pushState({[St]:o},"",S),a=S),C&&f?.()},reset({force:$=!1}={}){if(++s,d=null,r||$){try{e.sessionStorage?.removeItem(Ec)}catch{}r=!1,o=null,i=null,w("/")}}}}var te=typeof window>"u"?null:sA(window);function ea(e){return _()&&!c.managedSession?.publicShare&&Yn(c.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}function hk(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function iA(e){let[t,n,r]=e.split("/");return r===void 0&&t!==void 0&&n!==void 0&&t.length<=39&&/^[a-zA-Z\d](?:-?[a-zA-Z\d])*$/u.test(t)&&n.length<=100&&n!=="."&&n!==".."&&/^[a-zA-Z\d._-]+$/u.test(n)}function bk(e,t){if(typeof e!="string"||e.length>2048)return null;let n;try{n=new URL(e)}catch{return null}if(n.href!==e||n.origin!=="https://github.com"||n.username||n.password)return null;let r=t.exec(n.pathname);if(!r)return null;let o=`${r[1]}/${r[2]}`,s=Number(r[3]);return!iA(o)||!Number.isSafeInteger(s)||s<=0?null:{repo:o,number:s}}function Bm(e){return bk(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Pm(e){return bk(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function Dm(e){let t=Bm(e);if(t)return{...t,kind:"pull"};let n=Pm(e);return n?{...n,kind:"issue"}:null}function zm(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}function Lc(e){return _()&&c.currentManagedTeam&&c.managedSession&&!c.managedSession.publicShare?c.managedIssues.get(e?.id)??null:null}function tn(e){return Lc(e)?.autoFix??""}function ta(e,t={},n){let r=!1;for(let o of e){if(n&&c.managedIssues.get(o)!==n.get(o))continue;let s=Object.hasOwn(t,o)?t[o]:null,i=Pm(s?.url)?{url:s.url,autoFix:Bm(s.autoFix)?s.autoFix:null}:null,a=c.managedIssues.get(o);a?.url===i?.url&&a?.autoFix===i?.autoFix||(i?c.managedIssues.set(o,i):c.managedIssues.delete(o),r=!0)}return r}function aA(e){let t=e?.teams?.find(n=>n.id===e.teamId);return t?!t.cacheKey||!Array.isArray(t.reports)||t.reports.some(n=>!n.cacheKey)?e.teams:JSON.stringify([t.cacheKey,t.reports.map(n=>[n.id,n.cacheKey,n.visible!==!1]).toSorted()]):null}var Oc=class{constructor({context:t,fetchWorkspace:n,changed:r=()=>{},now:o=Date.now}){this.getContext=t,this.fetchWorkspace=n,this.changed=r,this.now=o,this.entries=new Map,this.required=new Set,this.expires=0,this.context=null,this.scope=null,this.timer=null,this.run=null}reset(){this.run?.abort(),this.run=null,clearTimeout(this.timer),this.timer=null,this.entries.clear(),this.required.clear(),this.expires=0,this.context=null,this.scope=null}syncContext(){let t=this.getContext();if(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||t?.teams!==this.context?.teams){let n=aA(t);(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||n!==this.scope)&&this.reset(),this.context=t,this.scope=n}return this.scope===null?null:this.context}schedule(){!this.timer&&!this.run&&(this.timer=setTimeout(()=>{this.timer=null,this.flush()},0))}read(t,{refreshIfMissing:n=!1}={}){let o=this.syncContext()?.teamId&&Dm(t);if(!o)return null;let s=zm(o),i=this.entries.get(s)??null;return n&&!i&&(this.run?this.required.add(s):this.expires=0),this.expires<=this.now()&&this.schedule(),i}async flush(){let t=this.syncContext();if(!t?.teamId||this.run||this.expires>this.now())return;let n=this.run=new AbortController,r;try{r=await this.fetchWorkspace(t.teamId,n.signal,t.reportId)}catch{r=null}if(this.syncContext(),this.run!==n||n.signal.aborted)return;this.entries.clear();for(let s of Array.isArray(r)?r:[]){let i=Dm(s?.url);if(i&&typeof s.title=="string"&&["open","draft","closed","merged"].includes(s.status)){let a=i.kind==="issue"&&s.status==="closed"?hk(s.stateReason):null;this.entries.set(zm(i),{title:s.title,description:typeof s.description=="string"?s.description:null,status:s.status,stateReason:a})}}this.expires=this.now()+6e4,this.run=null;let o=[...this.required].some(s=>!this.entries.has(s));this.required.clear(),o&&(this.expires=0,this.schedule()),this.changed()}};var Nc=new Set,Wm=new Oc({context:()=>{let e=c.managedSession;return _()&&e?.id&&c.currentManagedTeam?{key:JSON.stringify([e.id,e.role,e.csrfToken]),teamId:c.currentManagedTeam,reportId:c.managedTeams.find(t=>t.id===c.currentManagedTeam)?.reports.find(t=>t.id===c.currentManagedReport&&t.visible===!1)?.id??null,teams:c.managedTeams}:null},fetchWorkspace:yk,changed:()=>{for(let e of Nc)e()}});function J4(e){return Nc.add(e),()=>Nc.delete(e)}function Hm(){Wm.reset();for(let e of Nc)e()}function fs(e){c.currentManagedTeam===e&&Hm()}function Um(e,t,n){if(c.currentManagedTeam!==e)return;let r=[...t].map(s=>({id:s,issue:c.managedIssues.get(s)}));r.some(({id:s,issue:i})=>i?.url!==n.get(s)?.url)&&fs(e);for(let{id:s,issue:i}of r)i?.autoFix&&i.autoFix!==n.get(s)?.autoFix&&Wm.read(i.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:s})=>s?.url)?.issue.url;o&&Wm.read(o)}var na=null,nn=null;function Vm(){return nn?.getPreviewRole()??null}function wk(){nn?.setPreviewRole(null)}function vk(){nn?.resetManagedAppState()}function $k(e){nn?.setManagedAppSession(e)}function kk(e){return nn?.setManagedReportCatalog(e)??new Set}function Bc(e,t=c.currentManagedTeam){return nn?.readReportSources(e,t)}function xk(){nn?.clearReportSources(),nn?.clearFindingHistory()}async function Sk(e,t=c.currentManagedTeam){return(await D()).fetchReportSources(e,t)}function D(){return na||(na=(async()=>{let e="./client-managed.js";try{return nn=await import(e),nn}catch(t){throw na=null,t}})(),na)}async function Ck(e){return(await D()).probeSession(e)}async function _k(e){return(await D()).probeTeams(e)}async function jm(e){return(await D()).fetchManagedBundleCatalog(e)}async function Rk(e,t,n){return(await D()).fetchNpmPackage(e,t,n)}async function Mk(e,t){return(await D()).fetchNpmVersions(e,t)}async function Tk(e,t){return(await D()).fetchNpmStats(e,t)}async function Ik(e,t){return(await D()).fetchNpmAdvisories(e,t)}async function Ak(e,t,n){return(await D()).fetchNpmTags(e,t,n)}async function Ek(e,t,n,r){return(await D()).fetchNpmRisk(e,t,n,r)}async function Fk(e,t,n){return(await D()).fetchNpmSocket(e,t,n)}async function Lk(e,t,n){return(await D()).fetchNpmProvenance(e,t,n)}async function Ok(e,t,n,r){return(await D()).fetchPrettyBundleFile(e,t,n,r)}async function Nk(e,t,n,r){return(await D()).fetchPrettyNpmFiles(e,t,n,r)}async function Bk(e,t,n,r,o){return(await D()).fetchPrettyNpmFile(e,t,n,r,o)}async function Pk(e,t,n,r){return(await D()).fetchPrettyBundleChanges(e,t,n,r)}async function Dk(e,t,n,r,o){return(await D()).fetchPrettyNpmChanges(e,t,n,r,o)}async function oz(e,t,n,r){return(await D()).fetchBundleRenameDiff(e,t,n,r)}async function sz(e,t,n,r,o){return(await D()).fetchNpmRenameDiff(e,t,n,r,o)}async function iz(e,t,n,r){return(await D()).fetchBundleRenameDiffs(e,t,n,r)}async function az(e,t,n,r,o){return(await D()).fetchNpmRenameDiffs(e,t,n,r,o)}async function lz(e,t,n,r){return(await D()).fetchBundleTypeOnly(e,t,n,r)}async function cz(e,t,n,r,o){return(await D()).fetchNpmTypeOnly(e,t,n,r,o)}async function zk(e){return(await D()).openManagedShareDialog(e,"",c.managedSession)}async function dz(e){let t=()=>c.managedSession?.id===e.session.id&&c.managedSession?.csrfToken===e.session.csrfToken&&c.currentManagedTeam===e.teamId,[n,{render:r}]=await Promise.all([D(),import("./chunk-KVEUXIEU.js")]);return t()?n.openManagedIssueDialog({...e,isCurrent:t,onCreated:o=>{if(!t())return;let s=e.context.findingId,i=c.managedIssues.get(s),a=ta([s],{[s]:{url:o,autoFix:i?.url===o?i.autoFix:null}});fs(e.teamId),a&&r()}}):null}async function uz(e){if(!ea(e))return null;let t=c.reports,n=c.managedSession,r=c.currentManagedTeam,o=()=>ea(e)&&c.managedSession===n&&c.currentManagedTeam===r&&c.reports===t,s=await D();return o()?s.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:o}):null}async function Wk(e,t){return(await D()).fetchTeamAnnotations(e,t)}async function Gm(e,t=c.currentManagedTeam,n){return(await D()).fetchReportTriage(e,t,n)}async function yk(e,t,n){return(await D()).fetchFixes(e,t,n)}async function Hk(e,t=c.currentManagedTeam,n){return(await D()).fetchReportComments(e,t,n)}async function Uk(e,t,n,r=c.currentManagedTeam){return(await D()).saveReportComment(e,t,n,r)}async function Vk(e,t,n,r,o=c.currentManagedTeam){return(await D()).deleteReportComment(e,t,n,r,o)}async function jk(e,t,n,r=c.currentManagedTeam){return(await D()).pushReportTriage(e,t,n,r)}async function Gk(e){return e&&te?.rememberFinding(),(await D()).login(e)}async function Kk(e){return(await D()).logout(e)}async function qk(e){return(await D()).stopViewing(e)}async function Pc(e,t){return(await D()).fetchBundleMetadata(e,t)}async function Yk(e,t){return(await D()).fetchBundleContents(e,t)}async function Km(e,t){return(await D()).fetchTeamReports(e,t)}async function Xk(e,t){return(await D()).watchTeamFeed(e,t)}async function Jk(e,t=c.currentManagedTeam,n="",r=!1,o=!1){return(await D()).fetchBundleAdvisories(e,t,n,r,o)}async function pz(...e){return(await D()).dependencyReviews(...e)}async function fz(...e){return(await D()).myDependencyReviews(...e)}async function mz(...e){return(await D()).discardDependencyReview(...e)}async function gz(...e){return(await D()).latestDependencyReview(...e)}var ye={...zw,[ke]:bw},lA=new Set(Object.keys(Dr)),ms={...Dr,default:"DeepView"};function Dc(e){let t=e._source??e.source;return t!=="default"&&Object.hasOwn(De,t)?t:null}function Ae(e){return qm(e,Ie(e))}function qm(e,t){if(t===ke)return ke;if(t!==void 0)return lA.has(t)?t:"default";let n=e.toLowerCase();return n.endsWith(".generic-md")?"markdown-generic":n.endsWith(".codex")?"codex-security":n.endsWith(".md")?"claude-security":"default"}function zc(e){return Ie(e)===ke}var rn=`dialog{max-width:520px;width:min(94vw,520px)}.wsl-field{display:block;margin-top:.6rem;color:var(--text);font-size:.78rem;>span{display:block;margin-bottom:.25rem;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}}.wsl-ack{display:flex;align-items:flex-start;gap:.5rem;margin-top:.6rem;color:var(--text);font-size:.8rem;line-height:1.4;>input[type=checkbox]{flex:0 0 auto;margin-top:.15rem}>span{flex:1 1 auto}}.wsl-link{display:block;width:100%;box-sizing:border-box;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.78rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;word-break:break-all}.wsl-error{margin:.55rem 0 0;color:var(--critical, #f87171);font-size:.74rem;line-height:1.4}.wsl-warning{padding:.55rem .65rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 6px);background:rgb(from var(--critical, #f87171) r g b / .08);>p+p{margin-top:.45rem}}.wsl-optout{display:flex;align-items:center;gap:.5rem;margin-top:.7rem;color:var(--text);font-size:.78rem}.nwd-input:disabled{opacity:.5}.nwd-actions button.primary.danger{background:var(--critical, #f87171);border-color:var(--critical, #f87171);color:var(--surface);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--surface);filter:brightness(1.08)}}
|
|
4
|
-
`;var
|
|
5
|
-
`;var
|
|
6
|
-
`;function
|
|
7
|
-
`;var Ee=class extends N{static styles=[...N.styles,P(ot)];firstUpdated(){if(this.signal?.aborted){this._onCancel();return}this.signal?.addEventListener("abort",this._onCancel,{once:!0}),super.firstUpdated()}disconnectedCallback(){this.signal?.removeEventListener("abort",this._onCancel),super.disconnectedCallback()}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}confirmationResult(t){return{confirmed:t&&!this.signal?.aborted}}_finish(t){this._settled||super._finish(this.confirmationResult(!!t))}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0)};var
|
|
8
|
-
`;var
|
|
9
|
-
`;var
|
|
10
|
-
`)}`:e==="flagged"?t?"Flagged":"Not flagged":e==="triage"?
|
|
11
|
-
`)[0]||i}</h4>${a.file?u`<p class="location">${a.file}${a.line?`:${a.line}`:""}</p>`:g}<p class="finding-id"><code>${i}</code> · ${a.reports.join(", ")}</p><div class="table-scroll"><table><thead><tr><th scope="col">Field</th><th scope="col">Local</th><th scope="col">Managed</th></tr></thead><tbody>${l.map(p=>u`<tr class="${p.kind}"><th scope="row">${xA[p.property]}<span class="difference-kind">${l0[p.kind]}</span></th><td class="${p.kind==="managed-only"?"":"highlight"}">${c0(p.property,p.local)}</td><td class="${p.kind==="local-only"?"":"highlight"}">${c0(p.property,p.managed)}</td></tr>`)}</tbody></table></div></section>`)} ${r.length===0?u`<p class="empty">${t>0?"No triage differences in the shared findings.":n===0?"No findings were found in the readable local reports.":"No findings are present in both local and managed reports."}</p>`:g}</div><footer class="nwd-actions"><span class="nwd-spacer"></span><button type="button" data-role="cancel" @click="${this._onCancel}">Close</button></footer></dialog>`}};customElements.define("triage-comparison-dialog",Qm);var d0=e=>re("triage-comparison-dialog",e);var CA={get state(){return c},listWorkspaces:Y,addReportToWorkspace:oo,addBundleToWorkspace:so,onReportMembershipChanged:zi,onBundleMembershipChanged:Ff,onWorkspaceDeleted:Di,onWorkspacePrivateKeyChanged:Ef,analyzeContent:Ve,setCount:Ue,gunzipBytes:dp,listBundles:Je,listFiles:ce,readBundle:_n,readFileBytes:Cn,saveBundle:Jr,saveFileBytes:Yp,onFileMutated:mt,async saveTriage(){return await ls(),xe()},getSecureItem:ve,setSecureItem:Te,removeSecureItem:nr,onSecureStorageHydrated:Yt};function u0(e){e.installSyncHost(CA),nm(()=>e.triageSync.notify())}var X=null,lo=null;function g0(){try{return ve("deepview.sync.userEnabled")!=="0"}catch{return!0}}var h0=!1;function Xc(e){h0=!!e}function Yc(){if(h0||c.serverMode!=="e2e")return!0;try{return pt()?.mode==="managed"}catch{return!1}}function ra(){return lo||(Yc()&&!X?Promise.resolve(null):(lo=(async()=>{let e="./client-sync.js";try{let t=await import(e);return u0(t),X=t,_A(),t}catch(t){throw lo=null,t}})(),lo))}var b0=[];function oa(e){X?e(X):b0.push(e)}function _A(){let e=b0.splice(0);for(let t of e)try{t(X)}catch(n){console.warn("client-sync: deferred apply failed:",n)}}function co(e,t){let n={cancelled:!1,unsub:null};return oa(r=>{n.cancelled||(n.unsub=t(r,e))}),()=>{n.cancelled=!0,n.unsub&&n.unsub()}}function eg(e,t){return X?X.isInRemote(e,t):!1}function y0(e,t){return X?X.isBundleInRemote(e,t):!1}var RA="deepview.objstore-presence.";function w0(e){try{let t=localStorage.getItem(RA+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function gs(e,t){if(X&&X.isInRemote(e,t))return!0;let n=w0(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function tg(e,t){if(X&&X.isBundleInRemote(e,t))return!0;let n=w0(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function ng(e){return X?X.remoteCount(e):0}function v0(e){return X?X.differingReports(e):[]}function yW(e){return co(e,(t,n)=>t.onAutoDownloaded(n))}function wW(e){return co(e,(t,n)=>t.onBundleAutoDownloaded(n))}function vW(e){return co(e,(t,n)=>t.onChange(n))}var p0=null,f0=null,m0=null,qc=[];function $W(e){if(X){X.setRedraw(e);return}p0=e,oa(t=>{p0===e&&t.setRedraw(e)})}function kW(e){if(X){X.setAuthenticationResolver(e);return}f0=e,oa(t=>{f0===e&&t.setAuthenticationResolver(e)})}function xW(e){if(X){X.setHydrationConflictResolver(e);return}m0=e,oa(t=>{m0===e&&t.setHydrationConflictResolver(e)})}async function on(e,t){if(Yc()||!g0()&&!X)return;let n=await ra();if(!(!n||Yc()))return n[e](...t)}function $0(...e){return on("downloadFileFromRemote",e)}function k0(...e){return on("fetchBundleFromRemote",e)}function Jc(...e){return on("putFile",e)}function x0(...e){return on("holdLocalChangeChecks",e)}function S0(...e){return on("putBundleToRemote",e)}function Zc(...e){return on("deleteFromRemote",e)}function Qc(...e){return on("deleteBundleFromRemote",e)}function sa(...e){return on("openWorkspace",e)}async function rg(...e){return(X??(lo?await lo:null))?.closeWorkspace(...e)}function C0(...e){return on("recheckRemoteStorage",e)}function _0(...e){return on("resolveReportDifference",e)}function In(e,t){if(X)return X.triageSync[e](...t);oa(n=>{n.triageSync[e](...t)})}var G={get status(){return X?X.triageSync.status:"off"},get openSessions(){return X?X.triageSync.openSessions:[]},get persistenceDegraded(){return X?X.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return X?X.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return Yc()?Promise.resolve(null):ra().then(t=>{t.triageSync.setEnabled(!0);let n=qc;qc=[];for(let r of n)try{t.openWorkspace(r)}catch(o){console.warn(`client-sync: openWorkspace(${r}) failed during re-enable:`,o)}return null}).catch(t=>(console.warn("client-sync: setEnabled load failed:",t),null));if(X){qc=X.openWorkspaceIds();for(let t of qc)try{X.closeWorkspace(t)}catch(n){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,n)}X.triageSync.setEnabled(!1);return}In("setEnabled",[e])},isEnabled(){return X?X.triageSync.isEnabled():g0()},openSession(e){In("openSession",[e])},closeSession(e){In("closeSession",[e])},refreshSession(e){In("refreshSession",[e])},dismissError(e){In("dismissError",[e])},setForcedOff(e){In("setForcedOff",[e])},setProtocolLocked(e){In("setProtocolLocked",[e])},setServerUrl(e){In("setServerUrl",[e])},getServerUrl(){return X?X.triageSync.getServerUrl():null},notify(){In("notify",[])},onStatusChange(e){return co(e,(t,n)=>t.triageSync.onStatusChange(n))},onServerInfo(e){return co(e,(t,n)=>t.triageSync.onServerInfo(n))},onPersistenceDegraded(e){return co(e,(t,n)=>t.triageSync.onPersistenceDegraded(n))},onProxyAuthRequired(e){return co(e,(t,n)=>t.triageSync.onProxyAuthRequired(n))}};function ed(){let e=new Set;if(c.currentWorkspace||!em())return e;let t=c.currentFile??c.reports[0]?.fileName;if(!t)return e;let n=new Set;for(let r of c.reports)if(r.fileName===t)for(let o of r.groups)for(let s of o)s.id!=null&&n.add(String(s.id));for(let r of n)gt(r).some(o=>!n.has(o)&&no(o).some(s=>s!==t))&&e.add(r);return e}var hs="\0",sg="",bs="";function ia(e){return cl(e.model)||null}function ig(e){let t=cr();if(t.filterAnalyzer){let n=e._analyzer??null,r=t.filterAnalyzer===hs?null:t.filterAnalyzer;if(n!==r)return!1}if(t.filterModel){let n=ia(e),r=t.filterModel===bs?null:t.filterModel;if(n!==r)return!1}return!0}function ag(e){let t=typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:null;return e.isApp&&!(e._source??e.source)&&t?t:typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:t}function T0(e){let t=new Set;for(let n of e)for(let r of n)t.add(ag(r));return t}function td(){c.filterSeverities=new Set,c.filterColors=new Set,c.filterSources=new Set,c.filterAnalyzer="",c.filterModel="",c.filterRepo="",c.filterConfMin=0,c.filterConfMax=10,c.filterInclude="",c.filterIncludeNegate=!1,c.filterComment="",c.filterFix="",c.filterFlagged="",c.filterDuplicates="",c.filterCrossContext="",c.filterAppStacked="",c.filterSecurity="",c.filterRevalidate="",c.filterPartial="",c.sortBy="severity"}var MA=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];function FW(){let e={};for(let t of MA){let n=c[t];e[t]=n instanceof Set?new Set(n):n}return e}var lg=null;function LW(e){lg=e}function OW(){lg=null}function cr(){return lg??c}function I0(e){return qr(e)||(e._source&&!e._sourcePass?"revalidation":"")}function A0(e){let t=Ap("confirmed","");return e.some(n=>t.includes(I0(n)))}function TA(e,t){let n=e.map(Ct).filter(r=>r.length>0);return Ev(n,t,Av(e,Ct,qr),qr)?"confirmed":""}function IA(e,t=Ct){return Iv(e,t)}function AA(e,{tabs:t=Ct,kindOf:n=qr,severityMode:r=c.severityMode}={}){return Dl(e,{tabs:t,kindOf:n,severityMode:r})}function nd(e){return c.showRevalidation===!1||c.upstreamOnly||uo()?!1:AA(e)}function aa(e,{resetSort:t=!0}={}){c.filterConfMin=IA(e),c.filterConfMax=10,c.filterRevalidate=TA(e,c.filterConfMin),c.filterPartial="",t&&(c.sortBy=cg(e)?"priority-desc":"severity")}function cg(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(E0(t)===void 0)return!1;let n=t.filter(o=>o.isApp);if(n.length===0)return!0;let r=t.some(o=>o.priority!==void 0);return n.some(o=>o.priority!==void 0||!r&&Yr(o))})}function E0(e){let t=e.find(n=>n.priority!==void 0);return t?t.priority:e.some(Yr)?0:void 0}function F0(e){let t=cr();if(t.filterSources.size===1){let n=t.filterSources.has("own");if(n&&Zn(e.file)||!n&&!Zn(e.file))return!1}if(t.filterRevalidate){let n=Ap(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(I0(e)))return!1}if(!t.filterRevalidate){let n=Lv(e)?0:Ep(e);if(n===void 0){if(t.filterConfMin>0)return!1}else if(n<t.filterConfMin||t.filterConfMax<10&&n>t.filterConfMax)return!1}return!0}function EA(e){if(!F0(e))return!1;let t=cr(),n=t.filterInclude.toLowerCase();if(t.filterSeverities.size>0&&!t.filterSeverities.has(de(e,c.severityMode)))return!1;if(t.filterColors.size>0){let r=he(e)?.color??"none";if(!t.filterColors.has(r))return!1}if(!ig(e))return!1;if(t.filterRepo){let r=ag(e),o=t.filterRepo===sg?null:t.filterRepo;if(r!==o)return!1}if(n){let r=he(e),o=Nv(e).includes(n)||(r?.comment??"").toLowerCase().includes(n)||(r?.fix??"").toLowerCase().includes(n)||n.length>=6&&n.split(/\s+/u).some(s=>s.length>=6&&e.id?.toLowerCase().includes(s));return t.filterIncludeNegate?!o:o}return!0}function FA(e){let t=cr();if(!t.filterComment&&!t.filterFix&&!t.filterFlagged)return!0;let n=r=>e.some(o=>r(he(o)));if(t.filterComment){let r=n(o=>!!o?.comment);if(t.filterComment==="with"?!r:r)return!1}if(t.filterFix){let r=e.some(o=>!!(he(o)?.fix||tn(o)));if(t.filterFix==="with"?!r:r)return!1}if(t.filterFlagged){let r=n(o=>o?.flagged===!0);if(t.filterFlagged==="with"?!r:r)return!1}return!0}function LA(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!or(t))return t.name;let n=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(n)?.[1]??null}function L0(){return c.showRevalidation!==!1&&!c.upstreamOnly}function dg(e){if(L0())return!1;let t=Ct(e);if(t.length<2)return!1;let n=new Set,r=new Set;for(let o of t){let s=ag(o);s&&n.add(s);let i=LA(o);i&&r.add(i)}return n.size>1||r.size>1}function ug(e){if(!L0()||Ct(e).length===0)return!1;let n=e.filter(r=>r.isApp);return n.length>0&&n.length>1}function og(e){return e.some(t=>t.isSecurity===!0)}function O0(e){return e.some(og)&&e.some(t=>!og(t))}function N0(e){return e.filter(t=>t.some(F0)).map(Ct)}function rd(e){let t=!c.currentWorkspace&&cr().filterDuplicates,n=t?ed():null,r=cr().filterCrossContext,o=cr().filterAppStacked,s=cr().filterSecurity;return e.filter(i=>i.some(EA)&&FA(i)&&(!t||t==="with"===i.some(a=>n.has(j(a))))&&(!r||r==="with"===dg(i))&&(!o||o==="with"===ug(i))&&(!s||s==="with"===og(i)))}function R0(e,t){let n=t==="desc"?-1:11;return(r,o)=>{let s=r[e]??n,i=o[e]??n;return(t==="desc"?i-s:s-i)||r.file.localeCompare(o.file)}}function B0(e){let t=e==="desc"?-1:11;return(n,r)=>{let o=n.confidence===void 0&&n.critical===!0,s=r.confidence===void 0&&r.critical===!0,i=n.confidence??(o?10:t),a=r.confidence??(s?10:t);return(e==="desc"?a-i:i-a)||(o===s?0:o?-1:1)||n.file.localeCompare(r.file)}}var M0=B0("desc"),OA={severity:(e,t)=>(_e[de(t,c.severityMode)]||0)-(_e[de(e,c.severityMode)]||0)||M0(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":M0,"confidence-asc":B0("asc"),"priority-desc":R0("priority","desc"),"priority-asc":R0("priority","asc")};function P0(e){let t=OA[c.sortBy];if(!t)return[...e];if(c.sortBy==="priority-desc"||c.sortBy==="priority-asc"){let n=c.sortBy==="priority-desc"?"desc":"asc",r=n==="desc"?-1:11;return e.map(o=>({p:E0(o),g:o})).toSorted((o,s)=>{let i=o.p??r,a=s.p??r;return(n==="desc"?a-i:i-a)||An(o.g).file.localeCompare(An(s.g).file)}).map(o=>o.g)}return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}function D0(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.startsWith("revalidate")&&n!=null))}function z0(e,t,n){let r=D0(t);if(!e._revalidationCopies){let o=D0(e);if(Object.keys(o).length===0&&Object.keys(r).length===0)return[];e._revalidationCopies=Object.keys(o).length>0?[{reportName:e._reportName??"",fields:o}]:[]}return Object.keys(r).length>0&&e._revalidationCopies.push({reportName:n,fields:r}),e._revalidationCopies}function DW(e){let t=new Map,n=new Set($w);for(let{reportName:r,fields:o}of e)for(let[s,i]of Object.entries(o)){if(i==null)continue;let a=s==="revalidate"?Be(o)||String(i).trim().toLowerCase():String(i).trim();if(s==="revalidate"&&!a||s==="revalidate"&&!n.has(a))continue;t.has(s)||t.set(s,new Map);let l=t.get(s);l.has(a)||l.set(a,new Set),l.get(a).add(r)}return[...t].filter(([,r])=>r.size>1).map(([r,o])=>({field:r,variants:[...o].map(([s,i])=>({value:s,reports:[...i]}))}))}var NA=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"]);function W0(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,o]of Object.entries(t)){if(r.startsWith("_")||NA.has(r)||o==null)continue;if(r==="revalidate"){let i=Be(t);if(!i)continue;let a=Be(e);a?a!==i&&(n=!0):e[r]=o;continue}let s=e[r];if(s==null){e[r]=o;continue}r.startsWith("revalidate")&&String(s).trim()!==String(o).trim()&&(n=!0)}return n}function pg(e,t,n,r){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:ai(e),reason:e.correctedSeverityReason}},e._correctedByReport[n]={severity:ai(t),reason:t.correctedSeverityReason});let o=z0(e,t,n);(W0(e,t)||r.has(e.id))&&r.set(e.id,{finding:e,copies:o})}function la(e,t=null){let n=t??e.filter(d=>d.isApp),r=e.filter(d=>!d.isApp);if(n.length===0||r.length===0)return[e];if(t&&e.some(d=>d.isApp))return[e];if(r.some(d=>typeof d.id!="string"||!d.id))return[e];let o=new Set(r.map(d=>d.id)),s=new Map,i=new Set;for(let d of n){let f=d.revalidateInputs===void 0?[]:d.revalidateInputs;if(!Array.isArray(f))return[e];for(let m of f){if(!o.has(m))return[e];i.add(m)}s.set(d,f)}if(i.size!==o.size)return[e];let a=new Map([...o].map(d=>[d,d])),l=d=>{let f=d;for(;a.get(f)!==f;)f=a.get(f);for(;a.get(d)!==f;){let m=a.get(d);a.set(d,f),d=m}return f};for(let d of s.values()){if(d.length===0)continue;let f=l(d[0]);for(let m of d)a.set(l(m),f)}let p=new Map;for(let d of e){let f=s.get(d),m=f?f.length>0?l(f[0]):d:l(d.id);p.has(m)||p.set(m,[]),p.get(m).push(d)}return p.size===1?[e]:[...p.values()]}function od(e,{showRevalidation:t=!0,upstreamOnly:n=!1,hideRuledOut:r=!1,merges:o=[]}={}){let s=[],i=new Set;for(let y=0;y<e.length;y++){let w=e[y];for(let v of w.groups){for(let $ of v)$.id&&["refuted","unreachable"].includes(Be($))&&i.add($.id);let x=n?v.filter($=>$.isUpstream&&Be($)!=="revalidation").map(H0):t?r?v.filter($=>!["refuted","unreachable"].includes(Be($))):v:v.filter($=>Be($)!=="revalidation").map(H0),k=x.length===v.length&&x.every(($,S)=>$===v[S])?v:x;k.length>0&&s.push({group:k,sourceGroup:v,reportIndex:y,reportName:w.fileName??"",hasApp:k.some($=>$.isApp)})}}let a=s.map((y,w)=>w),l=s.map(y=>y.hasApp),p=y=>{let w=y;for(;a[w]!==w;)w=a[w];for(;a[y]!==w;){let v=a[y];a[y]=w,y=v}return w},d=(y,w)=>{y=p(y),w=p(w),y!==w&&(a[w]=y,l[y]||=l[w])},f=new Map;for(let y=0;y<s.length;y++)for(let w of s[y].group)w.id&&(f.has(w.id)||f.set(w.id,[]),f.get(w.id).push({index:y,app:w.isApp}));for(let y of f.values()){let w=new Map,v=y.find(x=>x.app);for(let{index:x}of y){v&&d(v.index,x);let k=s[x].reportIndex;w.has(k)?d(w.get(k),x):w.set(k,x)}}for(let y of f.values()){let w=null;for(let{index:v}of y)l[p(v)]||(w===null?w=v:d(w,v))}for(let y of o){let w=null;for(let v of y)for(let{index:x}of f.get(v)??[])w===null?w=x:d(w,x)}let m=new Map;for(let y=0;y<s.length;y++){let w=p(y);m.has(w)||m.set(w,[]),m.get(w).push(s[y])}let h=new Map,b=[];for(let y of m.values()){let w=y[0].group,v=w.map(R=>R.id).filter(Boolean);if(y.length===1&&new Set(v).size===v.length&&o.length===0){let R=e.length>1&&w.find(L=>L.isApp);if(R){let L=[...w];L.workspaceKey=R.id??String(R._id),b.push(...fg(y,L,t,n))}else b.push(...fg(y,w,t,n));continue}let x=new Map,k=new Map,$=[];for(let{group:R,reportName:L}of y)for(let A of R)if(A.id&&k.has(A.id))pg(k.get(A.id),A,L,x);else{let E={...A,_reportName:A._reportName??L};A.id&&k.set(A.id,E),$.push(E)}let S=new Set;for(let R of o)for(let L of R)k.has(L)&&S.add(L);for(let{group:R}of y)if(R.length>1)for(let L of R)L.id&&S.add(L.id);let C=[...S].map(R=>k.get(R));for(let R of $)S.has(R.id)||C.push(R);if(e.length>1){let R=C.find(L=>L.isApp);R&&(C.workspaceKey=R.id??String(R._id))}b.push(...fg(y,C,t,n));for(let[R,L]of x){let A=h.get(R);h.set(R,A?{finding:A.finding,copies:[...A.copies,...L.copies]}:L)}}return Object.defineProperty(b,"ruledOutIds",{value:i,configurable:!0}),{groups:b,conflicts:h}}function fg(e,t,n,r){if(n)return[t];if(r){let s=e.flatMap(d=>d.sourceGroup),i=la(s);if(i.length===1)return[t];let a=[],l=new Set;for(let d of i){let f=new Set(d.filter(h=>!h.isApp&&h.id).map(h=>h.id)),m=t.filter(h=>f.has(h.id));if(m.length>0){a.push(m);for(let h of m)l.add(h.id)}}let p=new Set(t.map(d=>d.id).filter(Boolean));return l.size===p.size?a:[t]}let o=e.flatMap(s=>s.sourceGroup.filter(i=>i.isApp));return la(t,o)}function H0(e){let t=Object.keys(e).filter(r=>r.startsWith("revalidate")||r==="_revalidationCopies");if(t.length===0)return e;let n={...e};for(let r of t)delete n[r];return n}var po=null,mg=0;function ys(){return c.currentView==="links"&&po?.owner===c.currentLinks?po:null}function U0(){mg++,po=null}async function ZW(e,t,n,r){if(c.currentView!=="links"||!c.currentLinks)return;let o=rt(c.currentLinks),s=++mg;po={owner:o,id:e,reportName:t,group:null,error:""},c.focusCodeStack=[],c.focusCodeAt=0;let i=()=>s===mg&&c.currentView==="links"&&c.currentLinks===o;try{if(_()){let h=Qt([e]).find(b=>b.report===t&&(!r||b.managedReportId===r)&&(n==null||b.index===Number(n)));if(!h)throw new Error("This finding is no longer in the report.");po={owner:o,id:e,reportName:t,group:h.members.map(b=>({...b})),error:""},c.activeTabByGroup.set(h.members[0].id,e);return}let a=await $t(await fe(t));if(!i())return;let l=(yn(a?.data)??[]).map(h=>Array.isArray(h)?h:[h]),p=h=>h?.some(b=>String(b?.id)===e),d=p(l[n])?l[n]:l.find(p);if(!d)throw new Error("This finding is no longer in the report.");let{data:f}=a,m=d.filter(h=>h?.id).map(h=>{let b={...h,_reportName:t,_repoFallback:Pe(f)??Ze(t),_repoDirectory:Ft(f?.repo),_bundleHashes:f.bundleHashes??[],_source:h.source??f.source??null};return Po(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=jn(b,b._source)),b});await Promise.all([io(),dt("report",t),...ji(t).map(h=>dt("workspace",h.id))]),i()&&(Gn([m],{linkedIds:gt,knownRows:h=>[...Qt(h),...c.reports.flatMap(b=>b.groups??[]).filter(b=>b.some(y=>h.includes(y.id))).map(b=>({members:b}))]}),po.group=m,c.activeTabByGroup.set(m[0].id,e))}catch(a){i()&&(po.error=a.message||"Unable to load this finding.")}}function sd(e,t,n,r=n){let o=e.map((f,m)=>m),s=f=>{for(;o[f]!==f;)o[f]=o[o[f]],f=o[f];return f},i=e.map(n),a=new Map;for(let f=0;f<i.length;f++)for(let m of i[f])m.id&&(a.has(m.id)||a.set(m.id,[]),a.get(m.id).push(f));for(let[f,m]of a)for(let h of t(f))if(h!==f)for(let b of m)for(let y of a.get(h)??[]){let w=s(b),v=s(y);w!==v&&(o[v]=w)}let l=new Map;for(let f=0;f<e.length;f++){let m=s(f);l.has(m)||l.set(m,[]),l.get(m).push(f)}if(l.size===e.length)return e;let p=f=>f.id??String(f._id),d=[...l.values()].map(f=>{if(f.length===1)return e[f[0]];let m=new Map;for(let w of f)for(let v of r(e[w]))m.has(p(v))||m.set(p(v),v);let h=new Map;for(let w of f)for(let v of e[w])h.has(p(v))||h.set(p(v),m.get(p(v))??v);let b=[...h.values()],y=e[f[0]];return b.workspaceKey=y.workspaceKey??p(y[0]),b.linkedTabs=[...m.values()],b});return Object.defineProperty(d,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),d}function ie(e){return e.workspaceKey??j(e[0])}function id(e){return Array.isArray(e)?e:[e]}function uo(){return c.revalidationDetailed===!0}function BA(e){return e?._reportName??""}var V0=null,j0=!0;function PA(){let e=c.reports;return!Array.isArray(e)||e.length===0?!0:(e!==V0&&(V0=e,j0=zl(e)),j0)}function dr(e){return!e.isUpstream||c.showRevalidation===!1||c.upstreamOnly===!0||!PA()}function DA(){let e=c.managedSession;return _()&&(e?.publicShare===!0||!Yn(e?.role,"triage"))}function _t(e){return dr(e)&&!DA()}function he(e){if(!dr(e))return;let t=c.triage.get(j(e)),n=t?.triage==="ignored"&&ct(e,qo())?{...t,triage:void 0}:t;if(!_())return n;let r=c.managedComments?.get(e.id)??[];return r.length===0&&!n?.comment?n:{...n,comment:r.map(o=>o.authorLogin?`${o.authorLogin}: ${o.body}`:o.body).join(`
|
|
1
|
+
import{b as Bv}from"./chunk-K3X5EJBQ.js";import{a as ut,b as be,d as xv,e as Bl,f as Sv,g as N,h as re,i as Pl}from"./chunk-CVVJAXVY.js";import{A as mt,B as ce,C as Jt,D as fe,E as Cn,F as rf,G as of,H as Qo,I as w$,J as Je,K as sf,L as v$,M as Qr,N as af,O as _n,P as lf,Q as cf,R as df,S as uf,T as pf,U as ff,a as nc,b as g$,d as ft,e as Jo,f as tr,g as rc,h as Ri,i as Jp,j as $t,k as Mi,l as Zp,m as Qp,n as ef,o as h$,p as b$,q as Xt,r as ve,s as Te,t as nr,u as Ti,v as y$,w as tf,x as nf,y as Zo,z as oc}from"./chunk-VIHGO77Y.js";import{m as p$,o as f$,q as m$,w as ec,x as tc,y as _i}from"./chunk-RFZQQXSG.js";import{a as Ww,b as ct,c as Me,e as vp,f as Hw,g as $l,h as Uw,i as Vw,j as kp,k as jw,l as xl,m as Sl,n as Cl,o as _l,p as ke,q as qn,r as Al,s as hi,t as qw}from"./chunk-RSHMVYNS.js";import{$ as Av,A as xn,B as uv,C as Rp,D as Nt,E as pv,F as Xn,G as Ll,H as fv,I as yi,J as mv,K as wi,L as Mp,M as Go,N as hv,O as bv,P as yv,Q as Ol,R as wv,S as Nl,T as vv,U as $v,V as kv,X as Mv,Y as Tp,Z as Tv,_ as Iv,a as Zw,aa as Dl,b as De,ba as $i,c as oe,ca as Ko,d as ev,da as qo,ea as Bt,f as tv,fa as Ev,ga as Ip,h as nv,ha as Ap,i as rv,ia as zl,ja as Wl,k as bi,ka as Yr,l as ov,la as Ep,m as Vo,ma as Fv,n as kn,na as Lv,oa as Ov,p as sv,pa as Nv,q as El,qa as Fp,r as iv,ra as Lp,s as _p,sa as Op,t as av,ta as Np,u as lv,v as Ot,w as cv,x as Fl,y as we,z as dv}from"./chunk-CLPKNNC7.js";import{a as Yw,b as Xw,c as Yn,d as Cp,e as Jw,f as vn,h as $n}from"./chunk-UYAXVRVL.js";import{g as Pv,h as Dv,i as Bp,j as ki,k as Ul,l as Jn,m as Yo,n as Pp,o as Dp,q as Vl,r as zp,s as pt,t as Wp,w as zv}from"./chunk-VQJCXGIY.js";import{a as qe,b as Hr,c as Ur,d as Kn,e as wl,f as ae,g as vl,h as tt}from"./chunk-W4J3MGLB.js";import{b as $p,c as pi,d as kl}from"./chunk-PNHBZGDD.js";import{$ as ee,A as Zn,B as ql,C as Yl,D as Qn,E as qv,F as Zr,H as nt,I as Gp,J as Xl,K as Yv,L as er,M as Xv,N as Jv,O as Ci,P as Zv,Q as Qv,R as e$,S as t$,T as n$,U as r$,V as o$,X as s$,Y as Jl,Z as Zl,_ as i$,a as q,aa as Pt,b as le,ba as a$,c as j,ca as l$,d as Wv,fa as Sn,ga as Kp,h as Hp,ha as qp,i as Up,ia as Yp,j as Vp,ja as Ql,k as Hv,ka as Xp,l as Uv,m as Vv,ma as c$,n as jl,o as xi,oa as d$,p as jp,pa as u$,q as Xr,s as Gl,t as jv,u as Si,v as Jr,w as Gv,x as Kv,y as Kl,z as Xo}from"./chunk-UXNUAIIC.js";import{a as Hl}from"./chunk-R5O6FAW4.js";import{a as Cv,b as _v,d as vi,e as Rv}from"./chunk-CMQA4DM6.js";import{b as yl,c as dt,d as Il,e as Gr,f as Sp,g as gi}from"./chunk-4F6JSF57.js";import{a as ge,e as qr,g as gv,h as jo}from"./chunk-YVZH5SHP.js";import{a as Kr}from"./chunk-3BZ7JERB.js";import{a as Z}from"./chunk-TZ5KB2Y5.js";import{a as Qw}from"./chunk-XYFXXB2G.js";import{a as W}from"./chunk-DIJJNTRH.js";import{a as xp,c as jr,d as Rl,e as Gw,g as Ml,h as Uo,i as fi,j as Ye,k as Tl,l as mi,m as Kw,n as Xe}from"./chunk-WZDTZE64.js";import{A as Nw,B as zo,C as Wo,D as Pe,E as Lt,G as Bw,H as Gn,J as yn,K as Pw,L as wp,M as Dw,N as zw,O as vt,a as Dr,f as Aw,h as zr,i as _e,j as et,k as di,l as Do,m as de,n as Ew,o as Fw,p as Be,q as jn,r as gl,t as Wr,u as ui,v as Ft,w as Lw,x as hl,y as Ow,z as bl}from"./chunk-GNXOKIGP.js";import{a as _w,b as yp,c as Rw}from"./chunk-C4Z6ZBXV.js";import{a as P,b as bp,c as u,d as Un,g,i as J,j as Et}from"./chunk-2XUEZHIP.js";import{a as Ho,b as wn,c as Vr}from"./chunk-TUII34K2.js";import{a as Mw,c as No,d as Bo,e as Po,j as pl,k as Tw,l as Vn,m as Iw,p as Yt,q as fl,r as ml}from"./chunk-V5O7M2YT.js";var bf=new WeakMap,S$=Symbol("iteration key");function ZT(e){bf.set(e,new Map)}function QT(e,{target:t,key:n,type:r}){r==="iterate"&&(n=S$);let o=bf.get(t),s=o.get(n);s||(s=new Set,o.set(n,s)),s.has(e)||(s.add(e),e.cleaners.push(s))}function eI({target:e,key:t,type:n}){let r=bf.get(e),o=new Set;if(n==="clear"?r.forEach((s,i)=>{mf(o,r,i)}):mf(o,r,t),n==="add"||n==="delete"||n==="clear"){let s=Array.isArray(e)?"length":S$;mf(o,r,s)}return o}function mf(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function C$(e){e.cleaners&&e.cleaners.forEach(tI,e),e.cleaners=[]}function tI(e){e.delete(this)}var es=[],gf=!1;function nI(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(es.indexOf(e)===-1){C$(e);try{return es.push(e),Reflect.apply(t,n,r)}finally{es.pop()}}}function Dt(e){let t=es[es.length-1];t&&(_$(t,e),QT(t,e))}function rr(e){eI(e).forEach(rI,e)}function rI(e){_$(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function _$(e,t){if(e.debugger&&!gf)try{gf=!0,e.debugger(t)}finally{gf=!1}}function R$(){return es.length>0}var $$=Symbol("is reaction");function M$(e,t={}){let n=e[$$]?e:function r(){return nI(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[$$]=!0,t.lazy||n(),n}function yf(e){e.unobserved||(e.unobserved=!0,C$(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}var He=new WeakMap,ac=new WeakMap,oI=Object.prototype.hasOwnProperty;function ic(e){let t=ac.get(e);return R$()&&typeof e=="object"&&e!==null?t||lc(e):t||e}function hf(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=ic(o[1]):o=ic(o)),{done:r,value:o}},e}var k$={has(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Dt({target:t,key:e,type:"has"}),n.has.apply(t,arguments)},get(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Dt({target:t,key:e,type:"get"}),ic(n.get.apply(t,arguments))},add(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.add.apply(t,arguments);return r||rr({target:t,key:e,value:e,type:"add"}),o},set(e,t){let n=He.get(this),r=Reflect.getPrototypeOf(this),o=r.has.call(n,e),s=r.get.call(n,e),i=r.set.apply(n,arguments);return o?t!==s&&rr({target:n,key:e,value:t,oldValue:s,type:"set"}):rr({target:n,key:e,value:t,type:"add"}),i},delete(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.get?n.get.call(t,e):void 0,s=n.delete.apply(t,arguments);return r&&rr({target:t,key:e,oldValue:o,type:"delete"}),s},clear(){let e=He.get(this),t=Reflect.getPrototypeOf(this),n=e.size!==0,r=e instanceof Map?new Map(e):new Set(e),o=t.clear.apply(e,arguments);return n&&rr({target:e,oldTarget:r,type:"clear"}),o},forEach(e,...t){let n=He.get(this),r=Reflect.getPrototypeOf(this);Dt({target:n,type:"iterate"});let o=(s,...i)=>e(ic(s),...i);return r.forEach.call(n,o,...t)},keys(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Dt({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t.values.apply(e,arguments);return hf(n,!1)},entries(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t.entries.apply(e,arguments);return hf(n,!0)},[Symbol.iterator](){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t[Symbol.iterator].apply(e,arguments);return hf(n,e instanceof Map)},get size(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Dt({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},sc={get(e,t,n){return e=oI.call(k$,t)?k$:e,Reflect.get(e,t,n)}},x$=typeof window=="object"?window:Function("return this")(),T$=new Map([[Map,sc],[Set,sc],[WeakMap,sc],[WeakSet,sc],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function sI({constructor:e}){return!(typeof e=="function"&&e.name in x$&&x$[e.name]===e)||T$.has(e)}function iI(e){return T$.get(e.constructor)}var I$=Object.prototype.hasOwnProperty,aI=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));function lI(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&aI.has(t))return r;Dt({target:e,key:t,receiver:n,type:"get"});let o=ac.get(r);if(R$()&&typeof r=="object"&&r!==null){if(o)return o;let s=Reflect.getOwnPropertyDescriptor(e,t);if(!s||!(s.writable===!1&&s.configurable===!1))return lc(r)}return o||r}function cI(e,t){let n=Reflect.has(e,t);return Dt({target:e,key:t,type:"has"}),n}function dI(e){return Dt({target:e,type:"iterate"}),Reflect.ownKeys(e)}function uI(e,t,n,r){typeof n=="object"&&n!==null&&(n=He.get(n)||n);let o=I$.call(e,t),s=e[t],i=Reflect.set(e,t,n,r);return e!==He.get(r)||(o?n!==s&&rr({target:e,key:t,value:n,oldValue:s,receiver:r,type:"set"}):rr({target:e,key:t,value:n,receiver:r,type:"add"})),i}function pI(e,t){let n=I$.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&rr({target:e,key:t,oldValue:r,type:"delete"}),o}var fI={get:lI,has:cI,ownKeys:dI,set:uI,deleteProperty:pI};function lc(e={}){return He.has(e)||!sI(e)?e:ac.get(e)||mI(e)}function mI(e){let t=iI(e)||fI,n=new Proxy(e,t);return ac.set(e,n),He.set(n,e),ZT(e),n}var rt=lc;function Rn(e){let t=!0,n=M$(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw yf(n),r}return()=>yf(n)}var E$="deepview.viewMode",F$="deepview.severityMode",Ai="deepview.repoUrls",L$="deepview.focusSplit",O$="deepview.kanbanDetailFullscreen",N$="deepview.bundleSourceWrap",gI=new Set(["corrected","original"]),vf=50,cc=20,dc=80;try{localStorage.removeItem(E$)}catch{}function hI(){try{let e=localStorage.getItem(F$);return e!==null&&gI.has(e)?e:null}catch{return null}}function bI(){try{let e=localStorage.getItem(O$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function yI(){try{let e=localStorage.getItem(N$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function B$(e){if(!Number.isFinite(e))return vf;let t=Math.round(e*10)/10;return Math.min(Math.max(t,cc),dc)}function wI(){try{let e=localStorage.getItem(L$);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?B$(t):null}catch{return null}}function uc(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function pc(){return uc(ve(Ai))}function Ze(e){return e?pc()[e]??"":""}var wf=new Set;function P$(e){return wf.add(e),()=>{wf.delete(e)}}function D$(e){for(let t of wf)try{t(e)}catch(n){console.warn("repo-url listener:",n)}}function eo(e,t){if(R()||!e)return;let n=pc();t?n[e]=t:delete n[e],Te(Ai,JSON.stringify(n)).catch(r=>console.warn("saveRepoUrlFor:",r)),Zo(Ai,r=>{let o=uc(r);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(r=>console.warn("saveRepoUrlFor cross-tab merge:",r)),D$(e)}async function z$(e,t){await Zo(Ai,n=>{let r=uc(n),o=t==="replace"?{...e}:t==="prefer-imported"?{...r,...e}:{...e,...r};return JSON.stringify(o)}),xf()}async function fc(e){if(!e||typeof e!="object")return[];let t=[];if(await Zo(Ai,n=>{let r=uc(n);t=[];for(let[o,s]of Object.entries(e))!o||typeof s!="string"||!s||r[o]||(r[o]=s,t.push(o));return t.length===0?n:JSON.stringify(r)}),t.length===0)return t;xf();for(let n of t)D$(n);return t}async function $f(e,t){return!e||!t?!1:(await fc({[e]:t})).length>0}var Ii=pt(),A$=Yo(Ii?.mode??"e2e",globalThis.location?.pathname??"")?"managed":null,c=rt({reports:[],workspaceMerges:[],currentFile:null,currentWorkspace:null,workspaceContentFileCount:0,currentManagedTeam:null,currentManagedReport:null,currentReportWorkspace:null,currentView:"findings",currentLinks:null,bundles:[],storedFiles:[],selectedBundle:null,selectedBundleWorkspace:null,scanSelection:null,bundleCreationRepoId:null,bundleDetails:null,bundleDetailsTab:"overview",selectedPackage:null,selectedPackageVersion:null,packageDetailsTab:"overview",packageSlideTriage:null,packageSlideTransient:!1,packagesSearchQuery:"",packagesSortBy:"findings-desc",expandedPackages:new Set,selectedRepository:null,repositoryDetailsTab:"overview",repositorySlideTriage:null,repositorySlideTransient:!1,repositoriesSearchQuery:"",repositoriesSortBy:"findings-desc",bundleSourceFile:null,bundleSourceFindingIdx:null,bundleSourceTargetLine:null,bundleSourceWrap:yI()??!0,bundleSourcePretty:!1,bundleCodeFileRequest:null,npmLookup:{input:"",pending:!1,error:null},bundleCompare:null,bundleOverviewFilesSort:"name",bundleOverviewPackagesSort:"size",bundleCodeHistory:null,bundleCodeSearchMode:"files",bundleCodeSearchQuery:"",bundleSearchQuery:"",bundleSearchRegex:!1,bundleSearchCase:!1,bundleSearchContext:!0,filterSeverities:new Set,filterColors:new Set,filterSources:new Set,filterAnalyzer:"",filterModel:"",filterRepo:"",filterRevalidate:"",filterPartial:"",showRevalidation:!0,revalidationDetailed:!1,upstreamOnly:!1,revalidateConflicts:new Map,codePreviews:new Set,filterConfMin:0,filterConfMax:10,filterInclude:"",filterIncludeNegate:!1,filterComment:"",filterFix:"",filterFlagged:"",filterDuplicates:"",filterCrossContext:"",filterAppStacked:"",filterSecurity:"",repoUrl:"",repoEditing:!1,sortBy:"severity",viewMode:"kanban",severityMode:hI()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:bI()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:wI()??vf,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:Pp(Ii?.mode??"e2e",A$),serverModeConfig:Ii?.mode??null,serverModeSelection:A$,deepviewScanServer:null,githubNewIssueLabels:Ii?.githubNewIssueLabels??"",localMode:!1,managed:Ii?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map,managedIssues:new Map});function R(){return c.serverMode==="managed"&&!c.localMode}function Mn(e){c.localMode=!!e}function mc(e,t=globalThis.location?.pathname??""){let n=Yo(e,t);n&&(c.serverModeSelection="managed"),c.serverModeConfig=e,c.serverMode=Pp(e,c.serverModeSelection),c.serverModeSelection!==c.serverMode&&(c.serverModeSelection=null),(n||c.serverMode==="e2e"||Jn(e))&&Mn(!1)}function kf(){return Jn(c.serverModeConfig)?(c.serverModeSelection=c.serverMode==="managed"?"e2e":"managed",c.serverMode=c.serverModeSelection,Mn(!1),!0):c.serverMode!=="managed"?!1:(Mn(!c.localMode),!0)}function Zt(){return c.serverMode==="standalone"&&c.localMode?"local":c.serverMode!=="managed"?c.serverMode:c.localMode?"local":"managed"}function xf(){R()||c.repoEditing||c.currentFile&&(c.repoUrl=Ze(c.currentFile))}Xt(()=>{xf()});function W$(e=[]){let t=new Map,n=(o,s)=>{t.has(o)||t.set(o,new Set),t.get(o).add(s)},r=o=>{for(let s of o.slice(1))n(o[0],s),n(s,o[0])};for(let o of e)r(o);return{add:r,linkedIds:o=>t.get(o)??[]}}function to(e){let t=[];for(let n of e){let r=n?.revalidateInputs;n?.isApp!==!0||typeof n.id!="string"||!Array.isArray(r)||t.push([n.id,...r.filter(o=>typeof o=="string"&&o!=="")])}return t}var ts=null;function H$(){ts=null}function ns(){return R()&&ts?.teamId===c.currentManagedTeam&&ts?.userId===c.managedSession?.id&&ts?.role===c.managedSession?.role?ts:null}function U$(e,t){let n=new Map,r=new Map,o=new Map,s=[],i=[];hi(t.links??[],o);for(let a of t){let l=a.data;if(l.source==="links"&&Array.isArray(l.links)){s.push({id:a.id,name:a.filename,groups:l.links,skipped:0}),hi(l.links,o);continue}let p=yn(l)??[],d=yl([{groups:[p.flat().filter(f=>f&&typeof f=="object")],tree:l.tree}]);for(let[f,m]of p.entries()){let h=(Array.isArray(m)?m:[m]).filter(y=>y&&typeof y=="object").map(y=>{let w={...y,_managedReportId:a.id,_reportName:a.filename,_repoFallback:a.repo.github,_repoDirectory:a.repo.directory,_source:y.source??l.source??null,_bundleHashes:l.bundleHashes??[],_depsDirectory:d};return Wo(w,l),w._analyzer=w._source??w.type??null,"isApp"in w||(w.isApp=jn(w,w._source)),w}),b={report:a.filename,managedReportId:a.id,index:f,members:h};i.push(b);for(let y of h)n.has(y.id)||n.set(y.id,[]),n.get(y.id).push(b);for(let y of to(h).flatMap(([,...w])=>w))r.has(y)||r.set(y,new Set),r.get(y).add(b)}}ts={teamId:e,userId:c.managedSession?.id,role:c.managedSession?.role,links:s,rows:i,byId:n,citedBy:r,duplicates:o},c.linksTick++,c.findingIndexTick++}function gc(e){let t=ns();return[...new Set(e.flatMap(n=>t?.byId.get(n)??[]))]}function V$(e){let t=ns();return[...new Set(e.flatMap(n=>[...t?.citedBy.get(n)??[]]))]}function j$(e){for(let t of gc([e])){let n=Ft(t.members.find(r=>r.id===e));if(n)return n}return""}var no=new Map,rs=new Map,Ei=new Map;function or(e){return R()?[...new Set(gc([e]).map(t=>t.report))]:[...no.get(e)?.reports.keys()??[]]}function hc(e){if(R())return j$(e);for(let{title:t}of no.get(e)?.reports.values()??[])if(t)return t;return""}function zt(e){if(R())return gc(e);let t=new Set;for(let n of e)for(let r of no.get(n)?.reports.values()??[])for(let o of r.rows)t.add(o);return[...t]}function bc(e){if(R())return V$(e);let t=new Set;for(let n of e)for(let r of rs.get(n)?.values()??[])for(let o of r)t.add(o);return[...t]}function G$(e){return Ei.has(e)||Ei.set(e,{ids:new Set,inputs:new Set}),Ei.get(e)}function K$(e,t){let n=!1;for(let r of t.members){let o=no.get(r.id);o||no.set(r.id,o={reports:new Map});let s=o.reports.get(e);if(s){s.rows.add(t);continue}o.reports.set(e,{title:Ft(r),rows:new Set([t])}),G$(e).ids.add(r.id),n=!0}for(let[,...r]of to(t.members))for(let o of r){rs.has(o)||rs.set(o,new Map);let s=rs.get(o);s.has(e)||s.set(e,new Set),s.get(e).add(t),G$(e).inputs.add(o)}return n}function q$(e){let t=Ei.get(e);if(Ei.delete(e),!t)return!1;for(let n of t.ids){let r=no.get(n);r?.reports.delete(e),r?.reports.size===0&&no.delete(n)}for(let n of t.inputs){let r=rs.get(n);r?.delete(e),r?.size===0&&rs.delete(n)}return!0}var vI="solidity-bundle",$I="0.0.0";function sr(e){if(e?.name!==vI)return!1;let t=e.version;return!t||t===$I}function X$(e){let t=e?.package?.npm,n=t?.version;if(typeof n=="string"&&n&&!sr(t))return n;let r=e?.file;if(!r)return null;let o=/(?:^|\/)node_modules\/\.pnpm\/([^/]+)\/node_modules\//u.exec(r);if(!o)return null;let s=o[1],i=s.indexOf("_");i>0&&(s=s.slice(0,i));let a=s.lastIndexOf("@");return a<=0?null:s.slice(a+1)||null}function yc(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function wc(e,t,n,r){e.reports.add(n);let o=e._keyReports.get(t);o||e._keyReports.set(t,o=new Set);let s=!o.has(n);return o.add(n),e.keys.has(t)||(e.keys.add(t),e.findings.push(r),e.files.has(r.file)||e.files.set(r.file,[]),e.files.get(r.file).push(r)),s}function vc(e,t,n,r){e._keyReports.delete(t),e.keys.delete(t);let o=e.findings.findIndex(a=>r(a)===t);o>=0&&e.findings.splice(o,1);let s=e.files.get(n);if(!s)return;let i=s.findIndex(a=>r(a)===t);i>=0&&s.splice(i,1),s.length===0&&e.files.delete(n)}function $c(e){let t=new Set;for(let n of e._keyReports.values())for(let r of n)t.add(r);e.reports=t}function J$(e,t,n,r,o){let s=e.byVersion.get(t);s||(s=yc(),e.byVersion.set(t,s)),wc(s,r,o,n)}function Z$(e,t,n,r,o,s){let i=e.byVersion.get(t);if(!i)return;let a=i._keyReports.get(n);if(a&&(a.delete(o),a.size===0&&vc(i,n,r,s)),i._keyReports.size===0){e.byVersion.delete(t);return}$c(i)}function Sf(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[n,r=""]=Y$(e,"-"),[o,s=""]=Y$(t,"-"),i=n.split("."),a=o.split("."),l=Math.max(i.length,a.length);for(let p=0;p<l;p++){let d=i[p]??"0",f=a[p]??"0",m=/^\d+$/u.test(d),h=/^\d+$/u.test(f);if(m&&h){let b=Number(f)-Number(d);if(b!==0)return b}else{let b=f.localeCompare(d);if(b!==0)return b}}return r===""&&s!==""?-1:r!==""&&s===""?1:s.localeCompare(r)}function Y$(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+1)]}var ro=new Map,os=new Map,ss=new Map,kc=new Map;function kI(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!sr(t))return t.name;if(!e?.file)return null;let n=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,r;for(;(r=n.exec(e.file))!==null;)if(r[1]!==".pnpm")return r[1];return null}function xI(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function SI(e,t){return typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:typeof t=="string"&&t?t:null}var Li=new Set,Cf=new Set,Fi=null,_f=!1;function CI(e){return Cf.add(e),()=>Cf.delete(e)}function Rf(){for(let e of Cf)try{e()}catch{}}function Mf(e){return ro.get(e)?.list??[]}function Tf(){let e=0;for(let t of ro.values())e+=t.list.length;return e}function Qt(){return os}function oo(){return ss}function Oi(e,t){let n=ro.get(e);if(!n)return[];let r=n.reports.get(ir(t));return r?[...r]:[]}function If(e,t){let n=os.get(e);if(!n)return[];let r=n._keyReports.get(ir(t));return r?[...r]:[]}function Af(e,t){let n=ss.get(e);if(!n)return[];let r=n._keyReports.get(ir(t));return r?[...r]:[]}function ir(e){let t=e.id?`id:${e.id}`:`c:${e.severity??""}|${e.description??""}|${e.file??""}|${e.line??""}`;return JSON.stringify([t,ct(e)])}function Ef(e,t,n){let r=kc.get(e);r||(r={hash:[],pkg:[],repo:[]},kc.set(e,r)),r[t].push(n)}function _I(e,t,n){let r=ro.get(e.fileHash);r||(r={keys:new Set,list:[],reports:new Map},ro.set(e.fileHash,r));let o=r.reports.get(t);o||(o=new Set,r.reports.set(t,o));let s=!o.has(n);return o.add(n),s&&Ef(n,"hash",{hash:e.fileHash,key:t}),r.keys.has(t)?s:(r.keys.add(t),r.list.push(e),!0)}function RI(e,t,n){let r=kI(e);if(!r)return!1;let o=X$(e),s=os.get(r);if(s||(s={...yc(),repos:new Set,byVersion:new Map,_repoReports:new Map},os.set(r,s)),typeof e.repo?.github=="string"&&e.repo.github){s.repos.add(e.repo.github);let a=s._repoReports.get(e.repo.github);a||s._repoReports.set(e.repo.github,a=new Set),a.add(n)}J$(s,o,e,t,n);let i=wc(s,t,n,e);return Ef(n,"pkg",{pkg:r,key:t,file:e.file,version:o}),i}function MI(e,t,n,r){if(xI(e))return!1;let o=SI(e,r);if(!o)return!1;let s=ss.get(o);s||(s=yc(),ss.set(o,s));let i=wc(s,t,n,e);return i&&Ef(n,"repo",{repo:o,key:t,file:e.file}),i}function Ff(e){let t=kc.get(e);kc.delete(e),Li.delete(e);let n=q$(e);if(!t)return n;let r=n;for(let{hash:s,key:i}of t.hash){let a=ro.get(s);if(!a)continue;let l=a.reports.get(i);if(l){if(l.delete(e)&&(r=!0),l.size===0){a.reports.delete(i),a.keys.delete(i);let p=a.list.findIndex(d=>ir(d)===i);p>=0&&a.list.splice(p,1)}a.keys.size===0&&ro.delete(s)}}let o=new Set;for(let{pkg:s,key:i,file:a,version:l}of t.pkg){let p=os.get(s);if(!p)continue;let d=p._keyReports.get(i);if(d){if(d.delete(e)&&(r=!0),d.size===0&&vc(p,i,a,ir),Z$(p,l,i,a,e,ir),!o.has(s)){o.add(s);for(let f of[...p._repoReports.keys()]){let m=p._repoReports.get(f);m?.delete(e)&&m.size===0&&(p._repoReports.delete(f),p.repos.delete(f),r=!0)}}p._keyReports.size===0?os.delete(s):$c(p)}}for(let{repo:s,key:i,file:a}of t.repo){let l=ss.get(s);if(!l)continue;let p=l._keyReports.get(i);p&&(p.delete(e)&&(r=!0),p.size===0&&vc(l,i,a,ir),l._keyReports.size===0?ss.delete(s):$c(l))}return r}async function TI(e){if(Li.has(e))return!1;Li.add(e);try{let t=await fe(e),n=await vt(t);if(!n)return!1;let{data:r,findings:o}=n;if(o.length===0)return!1;Ww(o,r),Gn(yn(r).map(a=>Array.isArray(a)?a:[a]),{source:r.source});let s=Pe(r)??"";if(!s)try{s=Ze(e)}catch{}let i=!1;for(let a of o){let l=ir(a);a.fileHash&&_I(a,l,e)&&(i=!0),a.file&&RI(a,l,e)&&(i=!0),a.file&&MI(a,l,e,s)&&(i=!0)}for(let[a,l]of yn(r).entries()){let p=(Array.isArray(l)?l:[l]).filter(f=>f?.id);if(p.length===0)continue;let d={report:e,index:a,members:p.map(f=>{let m=f.source??r.source??null;return{id:f.id,title:Ft(f),source:m,revalidate:Be(f),isApp:f.isApp??jn(f,m),isSecurity:f.isSecurity,...f.file?{file:f.file,_depsDirectory:f._depsDirectory}:{},...Array.isArray(f.revalidateInputs)?{revalidateInputs:[...f.revalidateInputs]}:{}}})};K$(e,d)&&(i=!0)}return Li.has(e)?i:(Ff(e),_f=!0,!1)}catch{return Li.delete(e),!1}}function kt(){return R()?Promise.resolve():Fi||(Fi=(async()=>{try{do{_f=!1;let e=await ce();for(let t of e)await TI(t)&&Rf()}while(_f)}finally{Fi=null}})(),Fi)}mt(e=>{Ff(e)&&Rf()});P$(e=>{Ff(e)&&Rf(),kt().catch(()=>{})});var Ni=new Map,is=new Map,xc=new Map,Lf=new Set;function II(e){return Lf.add(e),()=>Lf.delete(e)}function Q$(){for(let e of Lf)try{e()}catch{}}function Bi(e,t){if(!e||!t)return!1;let n=!is.has(e);is.set(e,t),xc.delete(e);for(let[r,o]of t){if(!o)continue;let s=Ni.get(o);s||(s=new Map,Ni.set(o,s)),s.set(e,r)}return n&&Q$(),n}function Of(e){let t=is.get(e);if(is.delete(e),xc.delete(e),!!t){for(let n of t.values()){let r=Ni.get(n);r&&(r.delete(e),r.size===0&&Ni.delete(n))}Q$()}}function Nf(e,t){let n=is.get(e);if(!n||typeof t!="string"||t==="")return null;if(n.has(t))return t;let r=AI(e,n).get(ek(t));if(!r)return null;let o=t.startsWith("/")?t:`/${t}`,s=null;for(let i of r)if(i.endsWith(o)){if(s!==null)return null;s=i}return s}function ek(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function AI(e,t){let n=xc.get(e);if(n)return n;n=new Map;for(let r of t.keys()){let o=ek(r),s=n.get(o);s?s.push(r):n.set(o,[r])}return xc.set(e,n),n}function so(e){if(!e)return[];let t=Ni.get(e);if(!t)return[];let n=[];for(let[r,o]of t)n.push({integrity:r,file:o});return n}function Bf(e){return is.has(e)}var tk="deepview.fileCounts",Pf=4,EI=new Set([3,Pf]),Di=null;function Cc(){if(Di)return Di;let e;try{e=JSON.parse(ve(tk)||"{}")}catch{e={}}return EI.has(e?.__v)?e.__v=Pf:e={__v:Pf},Di=e,Di}function Df(){Te(tk,JSON.stringify(Di)).catch(e=>console.warn("counts persist:",e))}function nk(e){if(e==="__v")return;let t=Cc()[e];if(t!==void 0)return typeof t=="number"?{count:t}:t}function zi(e){return nk(e)?.count}function Ie(e){return nk(e)?.source}function Ue(e,t,n){let r=Cc();r[e]={count:t,source:n??null},Df()}function ls(e){let t=Cc();delete t[e],Df()}function Ve(e){let t=qn(e);return t?{count:Al(t.groups),source:ke,recognized:!0}:Dw(e)}var Pi=null,as=null,Sc=null;function FI(e,t){for(let{names:n,onUpdate:r}of Sc)if(n.has(e))try{r(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function zf(e,t){if(Pi){t&&Sc.push({names:new Set(e),onUpdate:t});for(let n of e)as.add(n);return Pi}return as=new Set(e),Sc=t?[{names:new Set(e),onUpdate:t}]:[],Pi=(async()=>{await Promise.resolve();try{let n=Cc();for(;as.size>0;){let r=as.values().next().value;if(as.delete(r),n[r]===void 0)try{let o=await fe(r);if(n[r]!==void 0)continue;let{count:s,source:i}=Ve(o);n[r]=i?{count:s,source:i}:{count:s},Df(),FI(r,s)}catch{}}}finally{Pi=null,as=null,Sc=null}})(),Pi}var LI=`deepview/workspace-id/v1
|
|
2
|
+
`;async function Wi(e){let t=Uint8Array.fromBase64(e),n=Ho(LI),r=new Uint8Array(n.length+t.length);r.set(n,0),r.set(t,n.length);let o=new Uint8Array(await crypto.subtle.digest("SHA-256",r)),i=Array.from(o.subarray(0,16),p=>p.toString(16).padStart(2,"0")).join("").split("");i[12]="8";let a=parseInt(i[16],16)&3|8;i[16]=a.toString(16);let l=i.join("");return`${l.slice(0,8)}-${l.slice(8,12)}-${l.slice(12,16)}-${l.slice(16,20)}-${l.slice(20,32)}`}function Hi(e){let t=new Set;function n(o){return t.add(o),()=>t.delete(o)}function r(o){for(let s of t)try{s(o)}catch(i){console.warn(`workspace ${e} listener failed:`,i)}}return{on:n,fire:r}}var rk=Hi("create"),ok=Hi("delete"),sk=Hi("privateKey"),ik=Hi("report-membership"),ak=Hi("bundle-membership"),OI=rk.on,Ui=ok.on,Wf=sk.on,Vi=ik.on,Hf=ak.on,_c=rk.fire,Uf=ok.fire,Vf=sk.fire,Rc=ik.fire,Mc=ak.fire;var Gf="deepview.workspaces",NI=1;function ji(){try{let e=ve(Gf);if(!e)return[];let t=JSON.parse(e);return t&&typeof t=="object"&&Array.isArray(t.workspaces)?t.workspaces:Array.isArray(t)?t:[]}catch{return[]}}async function BI(e){await Te(Gf,JSON.stringify({version:NI,workspaces:e}))}var PI=Gf;function ds(e){return navigator.locks.request(PI,async()=>{await Ti();let t=ji(),n=await e(t);if(n!==!1)return await BI(t),n})}function Gi(e){return{id:e.id,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...e.reports]:[],bundles:Array.isArray(e.bundles)?[...e.bundles]:[]}}var Wt=ji().map(Gi);function Kf(){Wt=ji().map(Gi)}function qf(e){Wt=Wt.filter(t=>t.id!==e.id),Wt.push(Gi(e))}function DI(e,t){let n=Array.isArray(e[t])?[...e[t]]:[],r=Wt.find(o=>o.id===e.id);if(r){r[t]=n;return}Wt.push(Gi(e))}function zI(e){Wt=Wt.filter(t=>t.id!==e)}function Y(){let e=ji();for(let t of e)Array.isArray(t.reports)||(t.reports=[]),Array.isArray(t.bundles)||(t.bundles=[]);return e}var WI=200;function cs(e){let t=(e??"").trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,"").slice(0,WI)||null}async function Yf(e){let t=cs(e);if(!t)return null;let n=new Uint8Array(32);crypto.getRandomValues(n);let r=n.toBase64(),o={id:await Wi(r),name:t,privateKey:r,reports:[],bundles:[],createdAt:Date.now()};return await ds(i=>i.some(a=>a.id===o.id)?!1:(i.push(o),o))?(qf(o),o):null}async function Xf(e){await ds(n=>{let r=n.findIndex(o=>o.id===e);return r<0?!1:(n.splice(r,1),!0)})&&(Uf(e),zI(e))}async function Jf(e,t){let n=cs(t);return!(!n||!await ds(o=>{let s=o.find(i=>i.id===e);return!s||s.name===n?!1:(s.name=n,s)}))}async function lk(e){let t=await ds(o=>{let s=o.findIndex(d=>d.id===e.id),i=s>=0?o[s]:null,a=cs(e.name)??i?.name??"Workspace",l=e.preserveBundles?Array.isArray(i?.bundles)?i.bundles:[]:Array.isArray(e.bundles)?e.bundles:[],p={id:e.id,name:a,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...new Set(e.reports)]:[],bundles:[...new Set(l)],createdAt:e.createdAt??Date.now()};return s>=0?o[s]=p:o.push(p),{previous:i,next:p}}),{next:n}=t,r=Wt.find(o=>o.id===n.id)??null;return r==null?_c(n.id):(r.privateKey!==n.privateKey&&Vf(n.id),Tc(r.reports,n.reports)||Rc(n.id),Tc(r.bundles,n.bundles)||Mc(n.id)),qf(n),n}async function HI({id:e,name:t,privateKey:n,createdAt:r}){let o=null;return await ds(s=>{let i=cs(t);if(!i)return o={status:"name-collision",existing:null},!1;let a=s.find(d=>d.id===e)??null;if(a)return o={status:"already-attached",workspace:a},!1;let l=s.find(d=>cs(d.name)===i)??null;if(l)return o={status:"name-collision",existing:l},!1;let p={id:e,name:i,privateKey:n,reports:[],bundles:[],createdAt:r??Date.now()};s.push(p),o={status:"attached",workspace:p}}),o?.status==="attached"&&(_c(o.workspace.id),qf(o.workspace)),o}function Tc(e,t){let n=new Set(e),r=new Set(t);if(n.size!==r.size)return!1;for(let o of n)if(!r.has(o))return!1;return!0}async function jf({identifier:e,workspaceId:t,field:n,fire:r,additive:o=!1,from:s=void 0}){let i=await ds(p=>{if((p.find(b=>Array.isArray(b[n])&&b[n].includes(e))?.id??null)===(t??null))return!1;let f=null;if(t!=null&&(f=p.find(b=>b.id===t)??null,!f))return!1;let m=new Set;if(!o)for(let b of p)s!==void 0&&b.id!==s||(Array.isArray(b[n])||(b[n]=[]),b[n].includes(e)&&(b[n]=b[n].filter(y=>y!==e),m.add(b.id)));if(f&&(Array.isArray(f[n])||(f[n]=[]),f[n].includes(e)||(f[n].push(e),m.add(f.id))),m.size===0)return!1;let h=new Map;for(let b of m){let y=p.find(w=>w.id===b);y&&h.set(b,y)}return{affected:m,snapshot:h}});if(!i)return;let{affected:a,snapshot:l}=i;for(let p of a){r(p);let d=l.get(p);d&&DI(d,n)}}function ck(e,t){return{move:(n,r)=>jf({identifier:n,workspaceId:r,field:e,fire:t}),add:(n,r)=>jf({identifier:n,workspaceId:r,field:e,fire:t,additive:!0}),remove:(n,r)=>jf({identifier:n,field:e,fire:t,from:r})}}var Zf=ck("reports",Rc),Qf=ck("bundles",Mc),Ki=Zf.move,io=Zf.add,qi=Zf.remove,em=Qf.move,ao=Qf.add,tm=Qf.remove;function UI(){let e=ji().map(Gi),t=Wt,n=new Map(t.map(o=>[o.id,o])),r=new Map(e.map(o=>[o.id,o]));for(let o of n.keys())r.has(o)||Uf(o);for(let[o,s]of r){let i=n.get(o);if(!i){_c(o);continue}i.privateKey!==s.privateKey&&Vf(o),Tc(i.reports,s.reports)||Rc(o),Tc(i.bundles,s.bundles)||Mc(o)}Wt=e}Xt(()=>{UI()});async function VI(e){if(!e)return null;let t=Y(),r=(await Promise.all(t.map(o=>dt("workspace",o.id)))).indexOf(e);return r===-1?null:t[r]}async function jI(e){if(!e)return null;let t=await ce(),r=(await Promise.all(t.map(o=>dt("report",o)))).indexOf(e);return r===-1?null:t[r]}async function GI(e,t){let n;try{n=await fe(e)}catch{return!1}return n==null?!1:(await vt(n))?.findings.some(o=>o.id===t)??!1}async function KI(e,{skip:t=[]}={}){if(!e)return null;let n=new Set(t),r=(await ce()).filter(o=>!n.has(o));for(let o of r)if(await GI(o,e))return o;return null}function Yi(e){return e?Y().filter(t=>t.reports.includes(e)):[]}function nm(e){if(!e)return"";for(let t of e.split(`
|
|
3
|
+
`))if(t.trim())return t.trim();return""}function qI(e){let t=new Set(e.map(r=>r.id)),n=new Map;for(let r of c.reports)for(let o of r.groups)for(let s of o){let i=s.id??String(s._id);if(!(!t.has(i)||n.has(i))&&(n.set(i,{severity:s.severity,file:s.file,line:s.line,description:nm(s.description)}),n.size===t.size))return n}return n}var ar=new Map,sm=new Map,Ic=new Map,rm=new Set,Xi=null,Ji=null,om=0,Zi=!1,Ht=!1;function im(){return R()||Ht}function Qi(e){return rm.add(e),()=>rm.delete(e)}function us(){for(let e of rm)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function am(){let e=new Map;for(let t of ar.values())t&&hi(t.groups,e);sm=e}function lm(){if(R())return ns()?.links??[];let e=[];for(let[t,n]of ar)n&&e.push({name:t,groups:n.groups,skipped:n.skipped});return e.toSorted((t,n)=>t.name.localeCompare(n.name))}function cm(){return R()?!!ns()?.duplicates.size:sm.size>0}function xt(e){if(R())return[...ns()?.duplicates.get(e)??[]];let t=sm.get(e);return t?[...t]:[]}async function dk(e){if(ar.has(e))return!1;let t=Ic.get(e)??0,n;try{n=await fe(e)}catch{return!1}if(n==null)return!1;if((Ic.get(e)??0)!==t)return Zi=!0,!1;let r=/^\s*\[/u.test(n)?qn(n):null;if(ar.set(e,r),r&&Ie(e)!==ke)Ue(e,Al(r.groups),ke);else if(!r&&Ie(e)===ke){let{count:o,source:s}=Ve(n);Ue(e,o,s)}return r!==null}function uk(){return R()?Promise.resolve():Ji||(Ji=(async()=>{try{let e,t;do{t=om,e=await ce(),Ht&&e.some(o=>!ar.has(o))&&(Ht=!1,us());let n=e.filter(o=>Ie(o)===ke);(await Promise.all(n.map(o=>dk(o)))).some(Boolean)&&(am(),us())}while(t!==om);return e}catch(e){throw Ht&&(Ht=!1,us()),e}finally{Ji=null}})(),Ji)}function ea(){return R()?Promise.resolve():Xi||(Xi=(async()=>{try{do{Zi=!1;let e=await uk(),t=!1;for(let o of e)await dk(o)&&(t=!0);let n=!Zi&&e.every(o=>ar.has(o)),r=Ht!==n;Ht=n,t&&am(),(t||r)&&us()}while(Zi)}catch(e){throw Ht&&(Ht=!1,us()),e}finally{Xi=null}})(),Xi)}mt(e=>{let t=Ht;Ht=!1,om++,Ic.set(e,(Ic.get(e)??0)+1),Zi=!0;let n=ar.get(e)!=null;ar.delete(e),n&&am(),(n||t)&&us()});var dm=()=>{};function um(e){dm=typeof e=="function"?e:()=>{}}var fk=()=>{};function pm(e){fk=typeof e=="function"?e:()=>{}}var mk=()=>{};function YI(e){mk=typeof e=="function"?e:()=>{}}var lr="deepview.triage",Tn="deepview.triage.pending",en=/^\d+$/u;async function XI(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function JI(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}var ZI="deepview.triage.save",pk=0;function Ac(){return!R()&&vp(c.triage,c.reports)}function fm(){Ac();let e={};for(let[t,n]of c.triage){if(en.test(t))continue;let r=wl(n);r&&(e[t]=r)}return e}function xe(){if(R())return fk(),Promise.resolve();let e=++pk,t=fm(),n=Object.keys(t).length===0,r=n?null:JSON.stringify(t);if(r!=null)try{localStorage.setItem(Tn,r)}catch{}return navigator.locks.request(g$,{mode:"shared"},async()=>{let o=null,s=null;if(r!=null)try{let i=Ho(r),a=await XI(i);s=Ri(),o=(s?await h$(a):a).toBase64()}catch(i){console.warn("Failed to save triage:",i),dm();return}await navigator.locks.request(ZI,()=>{try{if(e!==pk)return;if(r!=null&&Ri()!==s){queueMicrotask(()=>{xe()});return}if(n)localStorage.removeItem(lr),localStorage.removeItem(Tn);else{localStorage.setItem(lr,o);try{localStorage.removeItem(Tn)}catch{}}}catch(i){console.warn("Failed to save triage:",i)}}),dm()})}async function Ec(){let e=localStorage.getItem(Tn);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(lr);if(!t)return null;let n=Uint8Array.fromBase64(t);if(nc(n)){if(!Ri())throw new Error("triage: vault locked, cannot decrypt envelope");n=await b$(n)}let r=await JI(n);return JSON.parse(Vr(r))}function gk(e,{replace:t=!1}={}){let n=c.triage;if(t){let r=null,o=localStorage.getItem(Tn);if(o)try{r=JSON.parse(o)}catch{}let s=i=>r!=null&&i in r;for(let i of[...n.keys()]){if(en.test(i))continue;let a=e?.[i],l=!e||!(i in e);!(s(i)&&r[i]?.color)&&(l||!a?.color)&&ae(n,i,{color:void 0}),!(s(i)&&(r[i]?.triage||r[i]?.deleted))&&!qe(a)&&ae(n,i,{triage:void 0}),!(s(i)&&r[i]?.comment)&&(l||typeof a?.comment!="string"||!a.comment)&&ae(n,i,{comment:void 0}),!(s(i)&&r[i]?.fix)&&(l||typeof a?.fix!="string"||!a.fix)&&ae(n,i,{fix:void 0}),!(s(i)&&r[i]?.flagged!==void 0)&&(l||a?.flagged===void 0)&&ae(n,i,{flagged:void 0})}for(let i of[...n.keys()]){if(en.test(i))continue;let a=n.get(i)?.ignoredReports;if(!a||a.length===0)continue;let l=e?.[i],p=!Hr(l);for(let d of[...a]){if(s(i)&&Array.isArray(r[i]?.ignoredReports)&&r[i].ignoredReports.includes(d))continue;if(p){tt(n,i,d,!1);continue}let f=l?.ignoredReports;(!Array.isArray(f)||!f.includes(d))&&tt(n,i,d,!1)}}}if(e)for(let[r,o]of Object.entries(e)){let s=qe(o),i={};if(o&&o.color&&(i.color=o.color),s&&(i.triage=s),o&&typeof o.comment=="string"&&o.comment&&(i.comment=o.comment),o&&typeof o.fix=="string"&&o.fix&&(i.fix=o.fix),o&&typeof o.flagged=="boolean"&&(i.flagged=o.flagged),Object.keys(i).length>0&&ae(n,r,i),Hr(o)&&o&&Array.isArray(o.ignoredReports))for(let a of o.ignoredReports)typeof a=="string"&&tt(n,r,a,!0,Kn(o,a))}}async function ps(){if(R())return!1;if(![...c.triage.values()].some(r=>r.ignoredReports?.length))return;let{readFileFresh:e,withStoredItem:t}=await import("./chunk-WGG7KQUH.js"),n=await Hw(Object.fromEntries(c.triage),r=>t("report",r,()=>e(r)));if(!R())return vp(c.triage,n)}async function QI(){if(!R())try{let e=await Ec();if(R())return;gk(e),await ps()&&await xe()}catch(e){console.warn("Failed to load triage:",e)}}async function ta(){if(!R())try{let e=await Ec();if(R())return;gk(e,{replace:!0}),await ps()&&await xe(),mk()}catch(e){console.warn("Failed to reload triage:",e)}}typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==lr&&e.key!==Tn||ta()});var eA;function lo(){return R()?Promise.resolve():eA??=QI()}$t(()=>{ta()});$t(()=>{R()||Ri()&&localStorage.getItem(Tn)&&xe()});async function mm({seal:e}){try{localStorage.removeItem(Tn)}catch{}let t=localStorage.getItem(lr);if(!t)return;let n=Uint8Array.fromBase64(t);if(nc(n))return;let r=await e(n,Jp());localStorage.setItem(lr,r.toBase64())}async function gm({open:e}){try{localStorage.removeItem(Tn)}catch{}let t=localStorage.getItem(lr);if(!t)return;let n=Uint8Array.fromBase64(t);if(!nc(n))return;let r=await e(n,Jp());localStorage.setItem(lr,r.toBase64())}function Fc(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function hk(e){if(typeof e!="string"||!e)return null;if(e.startsWith("r:"))try{let t=JSON.parse(e.slice(2));if(t&&typeof t.name=="string"&&t.name&&typeof t.workspaceId=="string"&&t.workspaceId)return{name:t.name,workspaceId:t.workspaceId}}catch{}return{name:e,workspaceId:null}}var bk="deepview.lastFile",na=null;function hm(){return na||(na=tA(),na.catch(()=>{na=null})),na}async function tA(){try{await lo()}catch{}let e=await ce(),t=new Set(e),n=new Set(e),r=new Set;for(let o of e){if(!o.toLowerCase().endsWith(".deepseek"))continue;let s=o.slice(0,-9)+".md";if(t.has(s))continue;let i;try{i=await fe(o),await Jt(s,i),await Qo(o)}catch(f){console.warn(`migrate: failed to rename ${o} -> ${s}`,f);continue}t.delete(o),t.add(s),r.add(o);let a=zi(o);if(ls(o),a===void 0){let{count:f,source:m}=Ve(i);Ue(s,f,m)}else{let{source:f}=Ve(i);Ue(s,a,f)}let l=Ze(o);l&&(eo(o,""),eo(s,l));let p=!1;for(let[f,m]of[...c.triage])m.ignoredReports?.includes(o)&&(tt(c.triage,f,o,!1),tt(c.triage,f,s,!0,Kn(m,o)),p=!0);p&&await xe();let d=hk(ve(bk));if(d?.name===o)try{await Te(bk,Fc(s,d.workspaceId))}catch{}}for(let o of Y())for(let s of o.reports){if(!s.toLowerCase().endsWith(".deepseek")||!r.has(s)&&n.has(s))continue;let i=s.slice(0,-9)+".md";await qi(s,o.id),await io(i,o.id)}}function bm(){return{...yk,hydrateKey:y$,localContentSyncStatus:zv,readTriageBlob:async()=>(await $l(await Ec(),e=>oc("report",e,()=>rf(e)))).entries,reportSyncHash:e=>oc("report",e,async()=>Pv(await Cn(e)))}}var yk={hasStoredBundleBytes:v$,listBundles:Je,listFiles:ce,onBundleMutated:w$,onFileMutated:mt,readBundle:_n,readFile:rf,withStoredItem:oc,isEncryptionEnabled:ft,isUnlocked:Jo,onVaultStateChange:$t,unlockEncryption:Mi};function ym(e=yk){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(o,s,i)=>{let a=!1,l=!1,p=e.onVaultStateChange(()=>{a=!0}),d=s==="report"?e.onFileMutated:e.onBundleMutated,f=i===void 0?null:d(m=>{m===i&&(l=!0)});return{check(){if(o?.throwIfAborted(),t()||a)throw new Error("Local data is locked or has changed. Unlock it and select the file again.");if(l)throw new Error(`This local ${s} changed. Select it again before importing.`)},unsubscribe(){p(),f?.()}}},r=async o=>o==="report"?(await e.listFiles()).map(s=>({value:s,label:s})):(await e.listBundles()).map(s=>({value:s.integrity,label:s.name,secondary:s.integrity}));return{get locked(){return t()},async hasData(o){return o==="report"?(await e.listFiles()).length>0:t()?e.hasStoredBundleBytes():(await e.listBundles()).length>0},async list(o){let s=n();try{s.check();let i=await r(o);return s.check(),i}finally{s.unsubscribe()}},unlock(o){return e.unlockEncryption(o)},subscribe(o){let s=e.onVaultStateChange(()=>o()),i=e.onFileMutated(l=>o({kind:"report",value:l})),a=e.onBundleMutated(l=>o({kind:"bundle",value:l}));return()=>{s(),i(),a()}},async importItem(o,s,i,{signal:a}={}){let l=n(a,o,s);try{l.check();let{result:p}=await e.withStoredItem(o,s,async()=>{l.check();let d=(await r(o)).find(h=>h.value===s);if(l.check(),!d)throw new Error("This file is no longer in local storage. Select another file.");let f=o==="report"?await e.readFile(s):await e.readBundle(s);l.check();let m=new File([f],d.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let h=Promise.resolve(i(m));return h.catch(()=>{}),{result:h}}finally{l.unsubscribe()}});return p}finally{l.unsubscribe()}}}}function wk(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function fs(){if(!wk()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function wm(){let e={supported:wk(),persisted:null,usage:null,quota:null};if(!e.supported)return e;if(typeof navigator.storage.persisted=="function")try{e.persisted=await navigator.storage.persisted()}catch{}if(typeof navigator.storage.estimate=="function")try{let t=await navigator.storage.estimate();typeof t?.usage=="number"&&(e.usage=t.usage),typeof t?.quota=="number"&&(e.quota=t.quota)}catch{}return e}var Lc="deepview.scan.access",vm=new Set;function vk(){for(let e of vm)e()}function ms(){return ve(Lc)!=null}function $m(e){try{let t=JSON.parse(ve(Lc)),n=t?.provider==="moonshotai"?"moonshot":t?.provider;return!e||t?.server!==e||typeof t.deepview!="string"||!t.deepview.trim()||![null,"anthropic","openai","moonshot","openrouter"].includes(n)||typeof t.token!="string"?null:{...t,provider:n}}catch{return null}}async function km({server:e,deepview:t,provider:n,token:r}){await Te(Lc,JSON.stringify({server:e,deepview:t,provider:n,token:r})),vk()}async function xm(){await nr(Lc),vk()}function Sm(e){vm.add(e);let t=Xt(e);return()=>{vm.delete(e),t()}}var Cm=1;function nA(){let e=fm(),t=pc();return{version:Cm,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function rA(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function oA(){let e=nA();return{blob:new Blob([await pi(JSON.stringify(e))]),filename:rA()}}async function sA(e){let t;try{t=await kl(new Uint8Array(await e.arrayBuffer()))}catch(r){throw new Error(`Failed to gunzip: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch(r){throw new Error(`Failed to parse JSON: ${r.message}`,{cause:r})}if(!n||typeof n!="object")throw new Error("Invalid backup file (not an object)");if(n.version!==Cm)throw new Error(`Unsupported backup version: ${n.version} (expected ${Cm})`);if(!n.triage||typeof n.triage!="object")throw new Error("Backup is missing the `triage` map");if(!n.repoUrls||typeof n.repoUrls!="object")throw new Error("Backup is missing the `repoUrls` map");return n}async function iA(e,t){if(!["replace","prefer-imported","prefer-current"].includes(t))throw new Error(`Unknown merge mode: ${t}`);if(!e||typeof e!="object")throw new Error("Invalid payload: not an object");if(!e.triage||typeof e.triage!="object"||Array.isArray(e.triage))throw new Error("Invalid payload: missing or non-object `triage`");if(!e.repoUrls||typeof e.repoUrls!="object"||Array.isArray(e.repoUrls))throw new Error("Invalid payload: missing or non-object `repoUrls`");let n=e.triage,r=c.triage;if(t==="replace")for(let a of[...r.keys()])en.test(a)||r.delete(a);let o=t==="prefer-current";for(let[a,l]of Object.entries(n)){if(en.test(a)||!l||typeof l!="object")continue;typeof l.color=="string"&&l.color&&(!o||!r.get(a)?.color)&&ae(r,a,{color:l.color});let p=qe(l);if(p&&(!o||!qe(r.get(a)))&&ae(r,a,{triage:p}),typeof l.comment=="string"&&l.comment&&(!o||!r.get(a)?.comment)&&ae(r,a,{comment:l.comment}),typeof l.fix=="string"&&l.fix&&(!o||!r.get(a)?.fix)&&ae(r,a,{fix:l.fix}),typeof l.flagged=="boolean"&&(!o||r.get(a)?.flagged===void 0)&&ae(r,a,{flagged:l.flagged}),Array.isArray(l.ignoredReports)&&Hr(r.get(a)))for(let d of l.ignoredReports)typeof d=="string"&&tt(r,a,d,!0,Kn(l,d))}await ps(),await xe();let s=0,i=null;try{await z$(e.repoUrls,t),s=Object.keys(e.repoUrls).length}catch(a){console.warn("applyTriageImport: repo-URL import failed:",a),i=a}return{triageEntries:Object.keys(n).length,repoUrls:s,repoUrlError:i}}function aA(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function _m(e){let t=new Set;for(let n of e){let r;try{r=await fe(n)}catch(s){if(aA(s))continue;throw new Error(`Failed to read ${n}: ${s.message}`,{cause:s})}if(r==null)continue;let o=await vt(r);if(o)for(let s of o.findings)s.id&&t.add(s.id)}return t}function lA(){let e=new Set;for(let t of c.triage.keys())en.test(t)||e.add(t);return e}async function Oc(e){let t=lA();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await _m(e),r=new Set;for(let d of t)n.has(d)&&r.add(d);if(r.size===0)return{orphanedCount:0,sharedCount:0};let o=await ce(),s=new Set(e),i=o.filter(d=>!s.has(d)),a=await _m(i),l=0,p=0;for(let d of r)a.has(d)?p++:l++;return{orphanedCount:l,sharedCount:p}}async function Nc(){let e=new Set(c.triage.keys()),t=[];for(let[i,a]of c.triage)if(a.ignoredReports)for(let l of a.ignoredReports)t.push({id:i,report:l});let n=await ce(),r=new Set(n),o=await _m(n),s=!1;for(let i of e){if(en.test(i)||o.has(i))continue;let a=c.triage.get(i);!a||!(a.color||qe(a)||a.comment||a.fix||a.flagged!==void 0)||ae(c.triage,i,{color:void 0,triage:void 0,comment:void 0,fix:void 0,flagged:void 0,deleted:void 0})&&(s=!0)}for(let{id:i,report:a}of t)en.test(i)||o.has(i)&&r.has(a)||Ur(c.triage,i,a)&&tt(c.triage,i,a,!1)&&(s=!0);s&&await xe()}var cA=1;async function dA(e){let t=new Set,n=await vt(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function Rm(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function uA(e){if(!Array.isArray(e)||e.length===0)return[];let t=await Je(),n=new Map(t.map(o=>[o.integrity,o.name])),r=[];for(let o of e){let s=n.get(o);if(!s)continue;let i;try{i=await _n(o)}catch(a){console.warn(`Workspace export: failed to read bundle ${o}: ${a?.message??a}`);continue}r.push({integrity:o,name:s,data:i.toBase64()})}return r}function pA(e){let t=Ze(e);return t?{github:t}:null}async function $k(e){let t=[];for(let n of e.reports??[]){let r;try{r=await fe(n)}catch(s){console.warn(`Workspace export: skipping ${n}: ${s?.message??s}`),(s instanceof DOMException&&s.name==="NotFoundError"||typeof s?.message=="string"&&s.message.startsWith("File not found:"))&&await Ki(n,null);continue}let o=pA(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function fA(e,{includeBundleBytes:t=!1}={}){let n=await $k(e),r=new Set;for(let p of n)for(let d of await dA(p.content))r.add(d);let o=new Set(e.reports??[]),s={};for(let[p,d]of c.triage){if(!r.has(p))continue;let f=(d.ignoredReports??[]).filter(h=>o.has(h)),m=wl({...d,ignoredReports:f});m&&(s[p]=m)}let i={};for(let p of n)p.repo?.github&&(i[p.name]=p.repo.github);let a=(e.bundles??[]).filter(p=>typeof p=="string"&&p.length>0),l={version:cA,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:n,bundles:a,repoUrls:i,triage:s};if(t){let p=await uA(a);p.length>0&&(l.bundleBlobs=p)}return l}async function kk(e,{includeBundleBytes:t=!1}={}){let n=await fA(e,{includeBundleBytes:t});return{blob:new Blob([await pi(JSON.stringify(n))]),filename:`${Rm(e.name)}.deepview-workspace.json.gz`}}async function mA(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await kk(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),s=await jw(o,t);return{blob:new Blob([s],{type:"application/octet-stream"}),filename:`${Rm(e.name)}.deepview-workspace.enc`}}async function Mm(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await mA(e,t,{includeBundleBytes:n}):await kk(e,{includeBundleBytes:n})}async function gA(e){return{reports:await $k(e)}}async function Tm(e){let t=await gA(e);return{blob:new Blob([await pi(JSON.stringify(t))]),filename:`${Rm(e.name)}.deepview-reports.json.gz`}}function hA(e){return qe(e)??null}async function bA(e){let t=new Map;for(let n of e??[]){if(typeof n?.content!="string")continue;let r=await vt(n.content);if(r)for(let o of r.findings)!o.id||t.has(o.id)||t.set(o.id,{severity:o.severity,file:o.file,line:o.line,description:nm(o.description)})}return t}async function yA(e,t,n){if(!e||typeof e!="object"||Array.isArray(e))return;let r=c.triage,o=[];for(let[s,i]of Object.entries(e)){if(!i||typeof i!="object")continue;let a=r.get(s)?.color,l=typeof i.color=="string"?i.color:void 0;l&&a&&a!==l?o.push({id:s,property:"color",local:a,imported:l}):l&&l!==a&&ae(r,s,{color:l});let p=r.get(s)?.comment??"",d=typeof i.comment=="string"?i.comment:"";d&&p&&p!==d?o.push({id:s,property:"comment",local:p,imported:d}):d&&d!==p&&ae(r,s,{comment:d});let f=r.get(s)?.fix??"",m=typeof i.fix=="string"?i.fix:"";m&&f&&f!==m?o.push({id:s,property:"fix",local:f,imported:m}):m&&m!==f&&ae(r,s,{fix:m});let h=hA(i),b=qe(r.get(s))??null;h&&b&&b!==h?o.push({id:s,property:"triage",local:b,imported:h}):h&&!b&&ae(r,s,{triage:h,...h==="ignored"?{}:{ignoredReports:void 0}});let y=r.get(s)?.flagged,w=typeof i.flagged=="boolean"?i.flagged:void 0;w!==void 0&&y!==void 0&&y!==w?o.push({id:s,property:"flagged",local:y?"flagged":"not flagged",imported:w?"flagged":"not flagged"}):w!==void 0&&w!==y&&ae(r,s,{flagged:w});let v=Array.isArray(i.ignoredReports)?i.ignoredReports:[];if(Hr(r.get(s)))for(let x of v)typeof x=="string"&&tt(r,s,x,!0,Kn(i,x))}if(o.length>0&&t){let s=await t(o,n??new Map);s&&wA(o,s)}await xe()}function wA(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&vA(n.id,n.property)===n.local&&(n.property==="color"?ae(c.triage,n.id,{color:n.imported}):n.property==="comment"?ae(c.triage,n.id,{comment:n.imported}):n.property==="fix"?ae(c.triage,n.id,{fix:n.imported}):n.property==="triage"?ae(c.triage,n.id,{triage:n.imported,...n.imported==="ignored"?{}:{ignoredReports:void 0}}):n.property==="flagged"&&ae(c.triage,n.id,{flagged:n.imported==="flagged"?!0:n.imported==="not flagged"?!1:void 0}))}}function vA(e,t){if(t==="color")return c.triage.get(e)?.color;if(t==="triage")return qe(c.triage.get(e))??null;if(t==="comment")return c.triage.get(e)?.comment??"";if(t==="fix")return c.triage.get(e)?.fix??"";if(t==="flagged"){let n=c.triage.get(e)?.flagged;return n===!0?"flagged":n===!1?"not flagged":""}}async function $A(e){if(Array.isArray(e))for(let t of e){let n;try{n=Uint8Array.fromBase64(t.data)}catch(r){console.warn(`Workspace import: failed to decode bundle ${t.integrity}: ${r?.message??r}`);continue}try{let r=await Qr(t.name,n);r?.integrity!==t.integrity&&console.warn(`Workspace import: bundle ${t.name} integrity mismatch (claimed ${t.integrity}, computed ${r?.integrity})`)}catch(r){console.warn(`Workspace import: failed to save bundle ${t.name}: ${r?.message??r}`)}}}async function Im(e,{conflictResolver:t}={}){let n=[];for(let f of e.reports)if(!(typeof f?.name!="string"||typeof f?.content!="string"))try{await Jt(f.name,f.content);let{count:m,source:h}=Ve(f.content);Ue(f.name,m,h??Ie(f.name)),n.push(f.name)}catch(m){console.warn(`Workspace import: failed to save ${f.name}: ${m.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await $A(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await bA(e.reports):new Map,s=await $l(e.triage,f=>e.reports.find(m=>m.name===f)?.content);await yA(s.entries,t,o);let i=Array.isArray(e.bundles),a=i?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],l=await lk({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:n,bundles:i?a:void 0,preserveBundles:!i,createdAt:e.workspace.createdAt}),p=new Set(n),d=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[f,m]of Object.entries(e.repoUrls))!p.has(f)||typeof m!="string"||!m||(d[f]=m);if(Object.keys(d).length>0)try{await fc(d)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return l}function kA(e){return!e||typeof e!="object"||Array.isArray(e)?"payload is not an object":e.version!==void 0||e.workspace!==void 0?"payload claims to be a workspace export":Array.isArray(e.reports)?e.reports.length>xl?`reports count (${e.reports.length}) exceeds cap (${xl})`:null:"reports field must be an array"}function xk(e){return kA(e)===null}async function Am(e){if(kp(e))return{kind:"encrypted"};let t;try{t=await kl(e)}catch(r){throw new Error(`gzip decompression failed: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch{return{kind:"workspace",text:t}}return xk(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}async function Em({id:e,name:t,privateKeyBase64:n,password:r}){if(typeof e!="string"||!e)throw new TypeError("encodeShareLink: id required");if(typeof t!="string"||!t)throw new TypeError("encodeShareLink: name required");if(typeof n!="string"||!n)throw new TypeError("encodeShareLink: privateKey required");if(typeof r!="string"||!r)throw new TypeError("encodeShareLink: password required");let s=await Wi(n)===e?{v:1,n:t,k:n}:{v:1,i:e,n:t,k:n};return(await Uw(Ho(JSON.stringify(s)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function xA({encoded:e,password:t}){if(typeof e!="string"||!e)throw new Error("malformed share link");if(typeof t!="string"||!t)throw new TypeError("decodeShareLink: password required");let n;try{n=Uint8Array.fromBase64(e,{alphabet:"base64url"})}catch{throw new Error("malformed share link")}let r=await Vw(n,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await SA(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function SA(e){let t=JSON.parse(Vr(e));if(!t||typeof t!="object"||typeof t.n!="string"||typeof t.k!="string"||!t.n||!t.k)throw new Error("shape");if(t.i!==void 0&&(typeof t.i!="string"||!t.i))throw new Error("shape");if(typeof t.i=="string"&&t.i.length>256)throw new Error("shape");if(t.n.length>1024)throw new Error("shape");if(Uint8Array.fromBase64(t.k).length!==32)throw new Error("shape");return{id:typeof t.i=="string"?t.i:await Wi(t.k),name:t.n,privateKeyBase64:t.k}}function Fm(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function CA(e){let t=typeof e=="string"?e:typeof location>"u"?"":location.hash;if(!t)return null;let n=t.replace(/^#/u,"");if(!n)return null;for(let r of n.split("&")){let o=r.indexOf("=");if(o<0||r.slice(0,o)!=="share")continue;return r.slice(o+1)||null}return null}var Bm="deepview.workspaceApp",Sk=2,Lm=new Set,Om=new Set,Nm=0,Pm=0,Dm=0,Pc=new Map,Dc=Promise.resolve(),Ck=null;function hs(e=ve(Bm)){try{let t=JSON.parse(e);if(t?.version===Sk&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:Sk,revision:"",links:"[]",entries:{}}}function gs(){for(let e of Lm)e()}function _k(e){let t=Dc.then(()=>Zo(Bm,n=>e(hs(n))));return Dc=t.catch(n=>console.warn("workspace App cache:",n)),t}function Bc(e){return JSON.stringify(e.reports.toSorted())}function Rk(){return JSON.stringify(lm().map(({name:e,groups:t})=>({name:e,groups:t})))}function zm(e){return im()&&e.links===Rk()}function Mk(e,t){return e.workspaceRevisions?.[t]??""}function Tk(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(Pc.get(t?.id)??0)&&n.workspaceRevision===Mk(e,t?.id)}function Ik(e,t,n){return n.reportEpoch===Dm&&n.reportRevision===(e.reportRevision??e.revision)&&Tk(e,t,n)}function Wm(e,t){return Ik(hs(),e,t)}function Ak(e,t){if(Nm||Om.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==Bc(e)||typeof n.appMode!="boolean"||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function Hm(e){return Ak(e,hs())?.appMode??null}function co(e){let t=hs(),n=Ak(e,t);return!n||!zm(t)?null:n}async function ra(e,t=null){let n;do n=Dc,await n;while(n!==Dc);let r=hs(),o=r.reportRevision??r.revision;return t&&(!Ik(r,e,t)||!zm(r))?null:{epoch:Pm,revision:r.revision,reportEpoch:Dm,reportRevision:o,workspaceId:e?.id,workspaceEpoch:Pc.get(e?.id)??0,workspaceRevision:Mk(r,e?.id)}}async function Um(e,t,n){let r=!1;return await _k(o=>{if(n.epoch!==Pm||n.revision!==o.revision||!Tk(o,e,n)||!zm(o))return;let s=Y().find(i=>i.id===e.id);if(!(!s||Bc(s)!==Bc(e)))return o.entries[e.id]={...t,reports:Bc(e)},r=!0,JSON.stringify(o)}),r&&gs(),r}function zc(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)Pm++,t===void 0&&Dm++,Nm++;else for(let n of e)Pc.set(n,(Pc.get(n)??0)+1),Om.add(n);return gs(),_k(n=>{if(n.reportRevision??=n.revision,e===null)n.revision=crypto.randomUUID(),t===void 0&&(n.reportRevision=n.revision),n.entries={};else{n.workspaceRevisions??={};for(let r of e)n.workspaceRevisions[r]=crypto.randomUUID(),delete n.entries[r]}return t!==void 0&&(n.links=t),JSON.stringify(n)}).finally(()=>{if(e===null)Nm--;else for(let n of e)Om.delete(n);gs()})}function Vm(e){return Lm.add(e),()=>Lm.delete(e)}Xt(()=>{let e=ve(Bm);e!==Ck&&(Ck=e,gs())});Vi(e=>{zc([e]).catch(()=>{})});Ui(e=>{zc([e]).catch(()=>{})});mt(e=>{let t=Y().filter(n=>n.reports.includes(e)).map(n=>n.id);zc(t).catch(()=>{})});Qi(()=>{if(!im()){gs();return}let e=Rk();hs().links===e?gs():zc(null,e).catch(()=>{})});var St="deepviewManagedNavigation",Wc="deepviewManagedLoginFinding";function jm(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Hc(e,t){return e?.bundleTab!=="code"||t?.bundleTab!=="code"||e.view!==t.view?!1:e.view==="npm"?e.packageName===t.packageName&&(e.packageSpec??null)===(t.packageSpec??null):e.view==="bundles"&&(e.teamSlug??null)===(t.teamSlug??null)&&e.bundleSlug===t.bundleSlug}function _A(e){let t=e.location.hash,n=Jw(t),r=!1,o=null,s=0,i=null,a=null,l=!1,p=null,d=null,f=null;function m(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h(k){let S=mi(k),C=S?.view==="home"?gi(k.hash):null;return S?{...S,...C?{finding:C}:{}}:null}function b(){try{let k=e.sessionStorage?.getItem(Wc);if(e.sessionStorage?.removeItem(Wc),!k)return null;let S=new URL(k,e.location.origin),C=S.origin===e.location.origin?h(S):null;return C?.finding?C:null}catch{return null}}function y(){if(!r||!gi(e.location.hash)||p===e.location.href||e.history.state?.[St]&&e.history.state[St]!==o)return;let k=p=e.location.href,S=h(new URL(k));v(S??{view:"home"},{replace:!0}).finally(()=>{p===k&&(p=null)})}function w(k){m()||(k=$n(k,n),e.history.replaceState(r?{[St]:o}:null,"",k),a=k)}async function v(k,{replace:S=!1,pop:C=!1}={}){if(!r||!i||m())return!1;k??={view:"home"};let _=Ye(k);if(_===null)return!1;let L=++s,A=d={route:k,findingRoute:null,codeRoute:null},E=()=>r&&L===s&&!m(),T=!1;try{T=await i(k,E)}catch(I){console.warn("managed: navigation failed:",I)}return E()?T?(typeof T=="object"&&(_=Ye(T)??_),jm(A.findingRoute,typeof T=="object"?T:k)&&(_=Ye(A.findingRoute)),Hc(A.codeRoute,typeof T=="object"?T:k)&&(_=Ye(A.codeRoute)),d=null,C||S?w(_):$n(_,n)!==a&&(_=$n(_,n),e.history.pushState({[St]:o},"",_),a=_),!0):(await i({view:"home"},E),E()&&(d=null,w("/")),!1):!1}function x(k){if(m())return;if(!r){k.state?.[St]&&w("/");return}if((!k.state?.[St]||k.state[St]===o)&&gi(e.location.hash)){y();return}if(!k.state?.[St]){let C=h(new URL(e.location.href)),_=a==null?null:mi(new URL(a,e.location.href));if(C?.file!=null&&C.file===_?.file&&Hc(C,_)){w(Ye(C));return}}let S=k.state?.[St]===o?h(new URL(e.location.href)):null;v(S??{view:"home"},{pop:!0})}function $(k){if(!r||k.defaultPrevented||k.button!==0||k.metaKey||k.ctrlKey||k.shiftKey||k.altKey)return;let S=k.composedPath().find(L=>L.matches?.("a.comment-self-ref[href]"));if(!S||S.hasAttribute("download")||S.target&&S.target!=="_self")return;let C=new URL(S.href);if(C.origin!==e.location.origin)return;let _=h(C);if(_?.finding)return k.preventDefault(),v(_)}return{get active(){return r},rememberFinding(){let k=h(new URL(e.location.href));if(!k?.finding)return;let S=k.view==="home"?`/#${Gr(k.finding)}`:Ye(k);try{e.sessionStorage?.setItem(Wc,S)}catch{}},start(k,{onCancel:S=null}={}){if(r)return;r=!0,i=k,f=S,o=typeof e.history.state?.[St]=="string"?e.history.state[St]:e.crypto.randomUUID(),l||(e.addEventListener("popstate",x),e.addEventListener("hashchange",y),e.addEventListener("click",$),e.launchQueue?.setConsumer(({targetURL:L})=>{if(!r||!L)return;let A=new URL(L);if(A.origin!==e.location.origin)return;let E=h(A);E&&v(E)}),l=!0);let C=b(),_=h(new URL(e.location.href))??{view:"home"};return C&&_.view==="home"&&!_.finding&&(_=C),v(_,{replace:!0})},navigate:v,replaceFindingRoute(k){if(!r||k?.view!=="findings"||m())return;let S=Ye(k);if(S!=null){if(d){(d.route.view==="home"&&d.route.finding||jm(k,{...d.route,view:"findings"}))&&(d.findingRoute=k);return}jm(k,mi(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceCodeRoute(k){if(!r||m()||!["bundles","npm"].includes(k?.view)||k.bundleTab!=="code")return;let S=Ye(k);if(S!=null){if(d){Hc(k,d.route)&&(d.codeRoute=k);return}Hc(k,mi(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceRoute(k){if(!r||!k||m())return;let S=Ye(k);S!=null&&!d&&w(S)},pushRoute(k){if(!r||!k||m())return;let S=Ye(k);if(S==null)return;let C=d!==null;++s,d=null,S=$n(S,n),S!==a&&(e.history.pushState({[St]:o},"",S),a=S),C&&f?.()},reset({force:k=!1}={}){if(++s,d=null,r||k){try{e.sessionStorage?.removeItem(Wc)}catch{}r=!1,o=null,i=null,w("/")}}}}var te=typeof window>"u"?null:_A(window);function oa(e){return R()&&!c.managedSession?.publicShare&&Yn(c.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}function Ek(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function RA(e){let[t,n,r]=e.split("/");return r===void 0&&t!==void 0&&n!==void 0&&t.length<=39&&/^[a-zA-Z\d](?:-?[a-zA-Z\d])*$/u.test(t)&&n.length<=100&&n!=="."&&n!==".."&&/^[a-zA-Z\d._-]+$/u.test(n)}function Fk(e,t){if(typeof e!="string"||e.length>2048)return null;let n;try{n=new URL(e)}catch{return null}if(n.href!==e||n.origin!=="https://github.com"||n.username||n.password)return null;let r=t.exec(n.pathname);if(!r)return null;let o=`${r[1]}/${r[2]}`,s=Number(r[3]);return!RA(o)||!Number.isSafeInteger(s)||s<=0?null:{repo:o,number:s}}function Gm(e){return Fk(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Km(e){return Fk(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function qm(e){let t=Gm(e);if(t)return{...t,kind:"pull"};let n=Km(e);return n?{...n,kind:"issue"}:null}function Ym(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}function Uc(e){return R()&&c.currentManagedTeam&&c.managedSession&&!c.managedSession.publicShare?c.managedIssues.get(e?.id)??null:null}function tn(e){return Uc(e)?.autoFix??""}function sa(e,t={},n){let r=!1;for(let o of e){if(n&&c.managedIssues.get(o)!==n.get(o))continue;let s=Object.hasOwn(t,o)?t[o]:null,i=Km(s?.url)?{url:s.url,autoFix:Gm(s.autoFix)?s.autoFix:null}:null,a=c.managedIssues.get(o);a?.url===i?.url&&a?.autoFix===i?.autoFix||(i?c.managedIssues.set(o,i):c.managedIssues.delete(o),r=!0)}return r}function MA(e){let t=e?.teams?.find(n=>n.id===e.teamId);return t?!t.cacheKey||!Array.isArray(t.reports)||t.reports.some(n=>!n.cacheKey)?e.teams:JSON.stringify([t.cacheKey,t.reports.map(n=>[n.id,n.cacheKey,n.visible!==!1]).toSorted()]):null}var Vc=class{constructor({context:t,fetchWorkspace:n,changed:r=()=>{},now:o=Date.now}){this.getContext=t,this.fetchWorkspace=n,this.changed=r,this.now=o,this.entries=new Map,this.required=new Set,this.expires=0,this.context=null,this.scope=null,this.timer=null,this.run=null}reset(){this.run?.abort(),this.run=null,clearTimeout(this.timer),this.timer=null,this.entries.clear(),this.required.clear(),this.expires=0,this.context=null,this.scope=null}syncContext(){let t=this.getContext();if(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||t?.teams!==this.context?.teams){let n=MA(t);(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||n!==this.scope)&&this.reset(),this.context=t,this.scope=n}return this.scope===null?null:this.context}schedule(){!this.timer&&!this.run&&(this.timer=setTimeout(()=>{this.timer=null,this.flush()},0))}read(t,{refreshIfMissing:n=!1}={}){let o=this.syncContext()?.teamId&&qm(t);if(!o)return null;let s=Ym(o),i=this.entries.get(s)??null;return n&&!i&&(this.run?this.required.add(s):this.expires=0),this.expires<=this.now()&&this.schedule(),i}async flush(){let t=this.syncContext();if(!t?.teamId||this.run||this.expires>this.now())return;let n=this.run=new AbortController,r;try{r=await this.fetchWorkspace(t.teamId,n.signal,t.reportId)}catch{r=null}if(this.syncContext(),this.run!==n||n.signal.aborted)return;this.entries.clear();for(let s of Array.isArray(r)?r:[]){let i=qm(s?.url);if(i&&typeof s.title=="string"&&["open","draft","closed","merged"].includes(s.status)){let a=i.kind==="issue"&&s.status==="closed"?Ek(s.stateReason):null;this.entries.set(Ym(i),{title:s.title,description:typeof s.description=="string"?s.description:null,status:s.status,stateReason:a})}}this.expires=this.now()+6e4,this.run=null;let o=[...this.required].some(s=>!this.entries.has(s));this.required.clear(),o&&(this.expires=0,this.schedule()),this.changed()}};var jc=new Set,Xm=new Vc({context:()=>{let e=c.managedSession;return R()&&e?.id&&c.currentManagedTeam?{key:JSON.stringify([e.id,e.role,e.csrfToken]),teamId:c.currentManagedTeam,reportId:c.managedTeams.find(t=>t.id===c.currentManagedTeam)?.reports.find(t=>t.id===c.currentManagedReport&&t.visible===!1)?.id??null,teams:c.managedTeams}:null},fetchWorkspace:Lk,changed:()=>{for(let e of jc)e()}});function Oz(e){return jc.add(e),()=>jc.delete(e)}function Jm(){Xm.reset();for(let e of jc)e()}function bs(e){c.currentManagedTeam===e&&Jm()}function Zm(e,t,n){if(c.currentManagedTeam!==e)return;let r=[...t].map(s=>({id:s,issue:c.managedIssues.get(s)}));r.some(({id:s,issue:i})=>i?.url!==n.get(s)?.url)&&bs(e);for(let{id:s,issue:i}of r)i?.autoFix&&i.autoFix!==n.get(s)?.autoFix&&Xm.read(i.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:s})=>s?.url)?.issue.url;o&&Xm.read(o)}var ia=null,nn=null;function Qm(){return nn?.getPreviewRole()??null}function Ok(){nn?.setPreviewRole(null)}function Nk(){nn?.resetManagedAppState()}function Bk(e){nn?.setManagedAppSession(e)}function Pk(e){return nn?.setManagedReportCatalog(e)??new Set}function Gc(e,t=c.currentManagedTeam){return nn?.readReportSources(e,t)}function Dk(){nn?.clearReportSources(),nn?.clearFindingHistory()}async function zk(e,t=c.currentManagedTeam){return(await D()).fetchReportSources(e,t)}function D(){return ia||(ia=(async()=>{let e="./client-managed.js";try{return nn=await import(e),nn}catch(t){throw ia=null,t}})(),ia)}async function Wk(e){return(await D()).probeSession(e)}async function Hk(e){return(await D()).probeTeams(e)}async function eg(e){return(await D()).fetchManagedBundleCatalog(e)}async function Uk(e,t,n){return(await D()).fetchNpmPackage(e,t,n)}async function Vk(e,t){return(await D()).fetchNpmVersions(e,t)}async function jk(e,t){return(await D()).fetchNpmStats(e,t)}async function Gk(e,t){return(await D()).fetchNpmAdvisories(e,t)}async function Kk(e,t,n){return(await D()).fetchNpmTags(e,t,n)}async function qk(e,t,n,r){return(await D()).fetchNpmRisk(e,t,n,r)}async function Yk(e,t,n){return(await D()).fetchNpmSocket(e,t,n)}async function Xk(e,t,n){return(await D()).fetchNpmProvenance(e,t,n)}async function Jk(e,t,n,r){return(await D()).fetchPrettyBundleFile(e,t,n,r)}async function Zk(e,t,n,r){return(await D()).fetchPrettyNpmFiles(e,t,n,r)}async function Qk(e,t,n,r,o){return(await D()).fetchPrettyNpmFile(e,t,n,r,o)}async function e0(e,t,n,r){return(await D()).fetchPrettyBundleChanges(e,t,n,r)}async function t0(e,t,n,r,o){return(await D()).fetchPrettyNpmChanges(e,t,n,r,o)}async function Hz(e,t,n,r){return(await D()).fetchBundleRenameDiff(e,t,n,r)}async function Uz(e,t,n,r,o){return(await D()).fetchNpmRenameDiff(e,t,n,r,o)}async function Vz(e,t,n,r){return(await D()).fetchBundleRenameDiffs(e,t,n,r)}async function jz(e,t,n,r,o){return(await D()).fetchNpmRenameDiffs(e,t,n,r,o)}async function Gz(e,t,n,r){return(await D()).fetchBundleTypeOnly(e,t,n,r)}async function Kz(e,t,n,r,o){return(await D()).fetchNpmTypeOnly(e,t,n,r,o)}async function n0(e){return(await D()).openManagedShareDialog(e,"",c.managedSession)}async function qz(e){let t=()=>c.managedSession?.id===e.session.id&&c.managedSession?.csrfToken===e.session.csrfToken&&c.currentManagedTeam===e.teamId,[n,{render:r}]=await Promise.all([D(),import("./chunk-NWZ4PVPN.js")]);return t()?n.openManagedIssueDialog({...e,isCurrent:t,onCreated:o=>{if(!t())return;let s=e.context.findingId,i=c.managedIssues.get(s),a=sa([s],{[s]:{url:o,autoFix:i?.url===o?i.autoFix:null}});bs(e.teamId),a&&r()}}):null}async function Yz(e){if(!oa(e))return null;let t=c.reports,n=c.managedSession,r=c.currentManagedTeam,o=()=>oa(e)&&c.managedSession===n&&c.currentManagedTeam===r&&c.reports===t,s=await D();return o()?s.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:o}):null}async function r0(e,t){return(await D()).fetchTeamAnnotations(e,t)}async function tg(e,t=c.currentManagedTeam,n){return(await D()).fetchReportTriage(e,t,n)}async function Lk(e,t,n){return(await D()).fetchFixes(e,t,n)}async function o0(e,t=c.currentManagedTeam,n){return(await D()).fetchReportComments(e,t,n)}async function s0(e,t,n,r=c.currentManagedTeam){return(await D()).saveReportComment(e,t,n,r)}async function i0(e,t,n,r,o=c.currentManagedTeam){return(await D()).deleteReportComment(e,t,n,r,o)}async function a0(e,t,n,r=c.currentManagedTeam){return(await D()).pushReportTriage(e,t,n,r)}async function l0(e){return e&&te?.rememberFinding(),(await D()).login(e)}async function c0(e){return(await D()).logout(e)}async function d0(e){return(await D()).stopViewing(e)}async function Kc(e,t){return(await D()).fetchBundleMetadata(e,t)}async function u0(e,t){return(await D()).fetchBundleContents(e,t)}async function ng(e,t){return(await D()).fetchTeamReports(e,t)}async function p0(e,t){return(await D()).watchTeamFeed(e,t)}async function f0(e,t=c.currentManagedTeam,n="",r=!1,o=!1){return(await D()).fetchBundleAdvisories(e,t,n,r,o)}async function Xz(...e){return(await D()).dependencyReviews(...e)}async function Jz(...e){return(await D()).myDependencyReviews(...e)}async function Zz(...e){return(await D()).discardDependencyReview(...e)}async function Qz(...e){return(await D()).latestDependencyReview(...e)}var ye={...Zw,[ke]:Tw},TA=new Set(Object.keys(zr)),ys={...zr,default:"DeepView"};function qc(e){let t=e._source??e.source;return t!=="default"&&Object.hasOwn(De,t)?t:null}function Ae(e){return rg(e,Ie(e))}function rg(e,t){if(t===ke)return ke;if(t!==void 0)return TA.has(t)?t:"default";let n=e.toLowerCase();return n.endsWith(".generic-md")?"markdown-generic":n.endsWith(".codex")?"codex-security":n.endsWith(".md")?"claude-security":"default"}function Yc(e){return Ie(e)===ke}var rn=`dialog{max-width:520px;width:min(94vw,520px)}.wsl-field{display:block;margin-top:.6rem;color:var(--text);font-size:.78rem;>span{display:block;margin-bottom:.25rem;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}}.wsl-ack{display:flex;align-items:flex-start;gap:.5rem;margin-top:.6rem;color:var(--text);font-size:.8rem;line-height:1.4;>input[type=checkbox]{flex:0 0 auto;margin-top:.15rem}>span{flex:1 1 auto}}.wsl-link{display:block;width:100%;box-sizing:border-box;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.78rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;word-break:break-all}.wsl-error{margin:.55rem 0 0;color:var(--critical, #f87171);font-size:.74rem;line-height:1.4}.wsl-warning{padding:.55rem .65rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 6px);background:rgb(from var(--critical, #f87171) r g b / .08);>p+p{margin-top:.45rem}}.wsl-optout{display:flex;align-items:center;gap:.5rem;margin-top:.7rem;color:var(--text);font-size:.78rem}.nwd-input:disabled{opacity:.5}.nwd-actions button.primary.danger{background:var(--critical, #f87171);border-color:var(--critical, #f87171);color:var(--surface);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--surface);filter:brightness(1.08)}}
|
|
4
|
+
`;var og=class extends N{static styles=[...N.styles,P(rn)];static properties={_password:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this._password="",this._busy=!1,this._error="",this._settled=!1,this._tryPassword=null}_finish(t){this._settled||(this._password="",this._tryPassword=null,super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let t=await this._tryPassword(this._password);if(this._settled)return;this._finish(t)}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onUnlock())};render(){return u`<dialog @close="${this._onClose}"><header><h3>Unlock encrypted workspace</h3></header><p class="nwd-note ui-hint">This workspace bundle is password-protected. Enter the password the sender shared with you separately to decrypt and import it.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-bundle-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._password||this._busy}" @click="${this._onUnlock}">${this._busy?"Unlocking\u2026":"Unlock"}</button></footer></dialog>`}};customElements.define("workspace-unlock-bundle-dialog",og);function Xc({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return Pl("workspace-unlock-bundle-dialog",{_tryPassword:e},t=>{t._tryPassword=null})}var Jc=`.conflict-sev{display:inline-block;padding:1px .4rem;border-radius:3px;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#fff;flex-shrink:0;&.sev-critical{background:var(--critical)}&.sev-high{background:var(--high)}&.sev-medium,&.sev-moderate{background:var(--medium)}&.sev-low{background:var(--low)}&.sev-high_bug{background:var(--high-bug)}&.sev-bug{background:var(--bug)}&.sev-informational,&.sev-info{background:var(--info)}&.sev-unrated{background:var(--low);color:var(--badge-low-text)}}
|
|
5
|
+
`;var m0=`dialog{max-width:720px;width:min(94vw,720px)}header h3{margin:0 0 .25rem}header p{margin:0 0 .75rem;color:var(--muted);font-size:.82rem}.bulk{display:flex;gap:.4rem;margin-bottom:.7rem;padding-bottom:.7rem;border-bottom:1px solid var(--border)}.bulk button,.actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.3rem .8rem;font:inherit;font-size:.78rem;&:hover{border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent)}&.primary:hover{filter:brightness(1.08)}}.list{list-style:none;margin:0;padding:0;max-height:60vh;overflow-y:auto;overscroll-behavior:none;-webkit-app-region:no-drag;app-region:no-drag;display:flex;flex-direction:column;gap:.5rem}.card{border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.55rem .7rem .6rem;background:rgb(from var(--text) r g b / .02)}.card-head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.35rem}.loc{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.68rem;color:var(--muted);padding:1px .3rem;background:rgb(from var(--text) r g b / .05);border-radius:var(--ui-radius, 3px)}.desc{font-size:.78rem;color:var(--muted);margin-bottom:.55rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rows{display:flex;flex-direction:column;gap:.35rem}.row{display:grid;grid-template-columns:5rem 1fr 1fr;align-items:stretch;gap:.4rem}.row-label{color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;align-self:center}.choice{position:relative;display:flex;flex-direction:column;gap:.15rem;padding:.35rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);min-width:0;&:has(input:checked){border-color:var(--accent);background:rgb(from var(--accent) r g b / .07)}&:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:1px}}.choice input[type=radio]{position:absolute;opacity:0;pointer-events:none}.choice-label{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.choice:has(input:checked) .choice-label{color:var(--accent)}.choice-value{font-size:.82rem;min-width:0}.flag-badge{font-size:.82rem;color:var(--muted)}.flag-badge.on{color:var(--accent);font-weight:600}.color{display:inline-flex;align-items:center;gap:.35rem}.color-dot{width:12px;height:12px;border-radius:50%;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .2);flex-shrink:0;&.marker-red{background:var(--marker-red)}&.marker-blue{background:var(--marker-blue)}&.marker-green{background:var(--marker-green)}&.marker-gray{background:var(--marker-gray)}}.color-name{text-transform:capitalize}.comment-text,.fix-text{cursor:text;user-select:text;-webkit-user-select:text}.comment-text{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;& em{color:var(--muted);font-style:italic}}.fix-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.actions{display:flex;justify-content:flex-end;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}
|
|
6
|
+
`;function g0({tabs:e,current:t,prefix:n,select:r,disabled:o=!1}){return u`<div class="dlg-tabs" role="tablist" @keydown="${i=>{if(i.key!=="ArrowLeft"&&i.key!=="ArrowRight")return;i.preventDefault();let a=e.findIndex(f=>f.id===t),l=i.key==="ArrowRight"?1:-1,p=e[(a+l+e.length)%e.length];if(!p||p.id===t)return;let d=i.currentTarget;r(p.id),requestAnimationFrame(()=>d.querySelector(`#${n}-tab-${p.id}`)?.focus())}}">${e.map(i=>u`<button type="button" role="tab" class="dlg-tab" id="${`${n}-tab-${i.id}`}" aria-controls="${`${n}-panel-${i.id}`}" aria-selected="${String(t===i.id)}" tabindex="${t===i.id?0:-1}" ?disabled="${o&&t!==i.id}" @click="${()=>r(i.id)}">${i.icon??g}${i.label}</button>`)}</div>`}function Zc(e){if(!e)return g;let t=e.replaceAll("_"," ");return u`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function FA(e){return`bundle-${e.slice(7,19)}\u2026`}function cr(e){return e.kind==="bundle"?e.label??FA(e.identifier):e.identifier}function h0(e){return e.kind==="bundle"?"bundle":Yc(e.identifier)?"links file":"report"}function Qc(e){let t=e.length,n=t===1,r=new Set(e.map(h0)),o="items";if(r.size===1){let s=[...r][0];o=n?s:`${s}s`}return{count:t,singular:n,kindLabel:o}}function ed(e){return u`<ul class="lwd-list">${e.map(t=>{let n=h0(t);return u`<li>${cr(t)}${n==="report"?g:u`<span class="lwd-kind-tag">${n}</span>`}</li>`})}</ul>`}function td(e){return e.length===0?g:u`<ul class="lwd-list" role="alert">${e.map(t=>u`<li><strong>${t.label}</strong> — ${t.reason}</li>`)}</ul>`}function LA(e){return e?u`<span class="color"><span class="${`color-dot marker-${e}`}"></span> <span class="color-name">${e}</span></span>`:u`<em>none</em>`}function OA(e){return u`<span class="comment-text">${e||u`<em>empty</em>`}</span>`}function NA(e){return e?zo(e)?u`<span class="fix-text"><a href="${e}" target="_blank" rel="noopener noreferrer">${e}</a></span>`:u`<span class="fix-text">${e}</span>`:u`<span class="comment-text"><em>empty</em></span>`}function BA(e){return e?u`<span class="${`triage triage-${e}`}">${e}</span>`:u`<em>none</em>`}function PA(e){return e?u`<span class="${`flag-badge${e==="flagged"?" on":""}`}">${e}</span>`:u`<em>none</em>`}function b0(e,t){return e==="color"?LA(t):e==="comment"?OA(t):e==="fix"?NA(t):e==="triage"?BA(t):e==="flagged"?PA(t):u`${String(t)}`}function DA(e,t){let n=e?.file?e.line?`${e.file}:${e.line}`:e.file:"";return u`<div class="card-head">${Zc(e?.severity)} ${n?u`<span class="loc" data-tooltip-truncated data-tooltip="${n}">${n}</span>`:g} <code class="id" data-tooltip="${t}">${t.slice(0,8)}…</code></div>${e?.description?u`<div class="desc" data-tooltip-truncated data-tooltip="${e.description}">${e.description}</div>`:g}`}var w0={title:"Triage conflicts",intro:"disagree with your local triage on",trailingNote:"",applyButton:"Apply",importedSideLabel:"Apply imported"},y0={color:0,comment:1,fix:2,triage:3,flagged:4},zA={color:"Color",comment:"Comment",fix:"Fix",triage:"Triage state",flagged:"Flag"},sg=class extends N{static styles=[...N.styles,P(Jc),P(m0)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...w0},this._settled=!1}focusInitial(){}_blockEscClose=t=>t.preventDefault();_onClick=t=>{let n=t.target.closest("[data-bulk]");if(!n)return;let r=n.dataset.bulk;for(let o of this.renderRoot.querySelectorAll(`input[type="radio"][value="${r}"]`))o.checked=!0};_onSubmit=t=>{t.preventDefault();let n={};for(let r of this.conflicts){let o=`${r.id}:${r.property}`,s=this.renderRoot.querySelector(`input[name="conflict-${CSS.escape(o)}"]:checked`);s&&(n[o]=s.value)}this._finish(n)};render(){let t=this.labels,n=new Map;for(let d of this.conflicts)n.has(d.id)||n.set(d.id,[]),n.get(d.id).push(d);for(let d of n.values())d.sort((f,m)=>(y0[f.property]??99)-(y0[m.property]??99));let r=this.conflicts.filter(d=>d.property==="color").length,o=this.conflicts.filter(d=>d.property==="comment").length,s=this.conflicts.filter(d=>d.property==="fix").length,i=this.conflicts.filter(d=>d.property==="triage").length,a=this.conflicts.filter(d=>d.property==="flagged").length,l=[r?`${r} color${r===1?"":"s"}`:"",o?`${o} comment${o===1?"":"s"}`:"",s?`${s} fix${s===1?"":"es"}`:"",i?`${i} triage state${i===1?"":"s"}`:"",a?`${a} flag${a===1?"":"s"}`:""].filter(Boolean).join(", "),p=`${n.size} finding${n.size===1?"":"s"}`;return u`<dialog @click="${this._onClick}" @cancel="${this._blockEscClose}" @close="${this._onClose}"><header><h3>${t.title}</h3><p>${p} ${t.intro} ${l}.${t.trailingNote?` ${t.trailingNote}`:""}</p><div class="bulk"><button type="button" data-bulk="local">Keep all current</button> <button type="button" data-bulk="imported">${t.importedSideLabel} (all)</button></div></header><form @submit="${this._onSubmit}"><ul class="list">${[...n.entries()].map(([d,f])=>u`<li class="card" data-id="${d}">${DA(this.findingLookup.get(d),d)}<div class="rows">${f.map(m=>{let h=`${m.id}:${m.property}`,b=`conflict-${h}`;return u`<div class="row" data-key="${h}"><span class="row-label">${zA[m.property]??m.property}</span> <label class="choice"><input type="radio" name="${b}" value="local" required> <span class="choice-label">Keep current</span> <span class="choice-value">${b0(m.property,m.local)}</span></label> <label class="choice"><input type="radio" name="${b}" value="imported" required> <span class="choice-label">${t.importedSideLabel}</span> <span class="choice-value">${b0(m.property,m.imported)}</span></label></div>`})}</div></li>`)}</ul><footer class="actions"><button type="submit" class="primary">${t.applyButton}</button></footer></form></dialog>`}};customElements.define("triage-conflict-dialog",sg);function nd(e,t,n={}){return new Promise((r,o)=>{let s=document.createElement("triage-conflict-dialog");s.conflicts=e,s.findingLookup=t,s.labels={...w0,...n},s.addEventListener("resolve",i=>{s.remove(),r(i.detail)}),s.addEventListener("modal-conflict",i=>{s.remove(),o(Bl(i.detail?.cause))}),document.body.append(s)})}var ot=`.lwd-body{margin:.2rem 0 .55rem;color:var(--text);font-size:.86rem;line-height:1.5}.lwd-empty{margin:.2rem 0 .55rem;color:var(--muted);font-size:.78rem}.lwd-note{margin:.2rem 0 .65rem;padding:.55rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);color:var(--muted);font-size:.78rem;line-height:1.45}.lwd-choice{margin:.2rem 0 .65rem;padding:.55rem .7rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);& legend{padding:0 .35rem;color:var(--text);font-size:.78rem;font-weight:500;& strong{font-weight:600}}}.lwd-option{display:flex;align-items:flex-start;gap:.5rem;padding:.3rem .15rem;& input[type=radio]{margin:.15rem 0 0;accent-color:var(--accent)}.lwd-option-text{display:flex;flex-direction:column;gap:.1rem;min-width:0}.lwd-option-title{color:var(--text);font-size:.82rem;line-height:1.35}.lwd-option-hint{color:var(--muted);font-size:.72rem;line-height:1.4}}.lwd-list{margin:0;padding-left:1.1rem;color:var(--muted);font-size:.76rem;line-height:1.5;& li+li{margin-top:.2rem}& strong{color:var(--text);font-weight:600}}.lwd-kind-tag{display:inline-block;vertical-align:middle;margin-left:.3rem;padding:0 .35rem;border:1px solid var(--border);border-radius:3px;background:rgb(from var(--text) r g b / .04);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.lwd-rename-input{margin-top:.2rem}.lwd-rename-error{margin:.25rem 0 0;color:var(--critical, #f87171);font-size:.72rem;line-height:1.35}
|
|
7
|
+
`;var Ee=class extends N{static styles=[...N.styles,P(ot)];firstUpdated(){if(this.signal?.aborted){this._onCancel();return}this.signal?.addEventListener("abort",this._onCancel,{once:!0}),super.firstUpdated()}disconnectedCallback(){this.signal?.removeEventListener("abort",this._onCancel),super.disconnectedCallback()}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}confirmationResult(t){return{confirmed:t&&!this.signal?.aborted}}_finish(t){this._settled||super._finish(this.confirmationResult(!!t))}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0)};var ig=class extends Ee{static properties={matched:{type:Number},available:{type:Number}};constructor(){super(),this.matched=0,this.available=0}confirmationResult(t){return{confirmed:t&&this.matched>0&&!this.signal?.aborted}}render(){return u`<dialog aria-labelledby="import-title" @close="${this._onClose}"><header><h3 id="import-title">Import local triage</h3></header><p class="lwd-body"><strong>${this.matched}</strong> of <strong>${this.available}</strong> local triage ${this.available===1?"entry":"entries"} can be imported.</p><p class="lwd-note">${this.matched>0?"Import saved triage and comments for these findings? Conflicting values will prompt for resolution.":this.available>0?"None match findings in managed reports.":"There is no saved local triage to import."}</p>${this.available>this.matched?u`<p class="lwd-empty">Unmatched entries stay in this browser.</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">${this.matched>0?"Cancel":"Close"}</button> ${this.matched>0?u`<button type="button" class="primary" @click="${this._onConfirm}">Import triage</button>`:g}</footer></dialog>`}};customElements.define("local-triage-import-dialog",ig);function v0(e){return re("local-triage-import-dialog",e)}var $0=`dialog{width:min(42rem,90vw)}.content-import-groups{max-height:55vh;overflow:auto}fieldset{margin:.7rem 0;padding:.5rem .75rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px)}legend{padding:0 .35rem;font-size:.85rem;font-weight:600}.content-import-item{display:flex;gap:.65rem;align-items:flex-start;padding:.65rem 0}.content-import-item+.content-import-item{border-top:1px solid var(--border)}.content-import-item input{margin:.15rem 0 0;accent-color:var(--accent)}.content-import-item.unavailable{opacity:.55;cursor:default}.content-import-label{display:grid;gap:.25rem;min-width:0;overflow-wrap:anywhere;font-size:.82rem}.content-import-status{display:flex;flex-wrap:wrap;gap:.4rem;color:var(--muted);font-size:.74rem}.content-import-present{border:1px solid var(--border);border-radius:3px;padding:0 .3rem}input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:disabled{opacity:.5}
|
|
8
|
+
`;var ag=class extends Ee{static styles=[...Ee.styles,P($0)];static properties={plan:{attribute:!1},selected:{state:!0}};constructor(){super(),this.plan={kind:"report",items:[],groups:[]},this.selected=new Set}beforeOpen(){this.selected=new Set(this.plan.items.filter(t=>t.synced&&!t.present&&!t.error).map(t=>t.value))}toggle(t,n){if(t.present||t.error)return;let r=new Set(this.selected);n?r.add(t.value):r.delete(t.value),this.selected=r}confirmationResult(t){let n=this.plan.items.filter(o=>this.selected.has(o.value)&&!o.present&&!o.error).map(o=>o.value),r=t&&n.length>0&&!this.signal?.aborted;return{confirmed:r,selected:r?n:[]}}render(){let t=this.plan.kind==="bundle"?"bundles":"reports";return u`<dialog aria-labelledby="content-import-title" @close="${this._onClose}"><header><h3 id="content-import-title">Import ${t}</h3></header><p class="lwd-body">Choose files to upload. Cloud-synced files are selected by default.</p><p class="lwd-note">Workspaces are shown for organization only. Teams and triage are not imported. Repository locations follow each file’s embedded metadata; files without it stay unattached.</p><div class="content-import-groups">${this.plan.groups.map(n=>u`<fieldset><legend>${n.name}</legend>${n.items.map(({item:r,synced:o,cached:s})=>u`<label class="${`content-import-item${r.present||r.error?" unavailable":""}`}"><input type="checkbox" .checked="${this.selected.has(r.value)}" ?disabled="${r.present||!!r.error}" @change="${i=>this.toggle(r,i.target.checked)}"> <span class="content-import-label"><strong>${r.name}</strong> <span class="content-import-status">${o?"Cloud synced":"Not synced"}${s?" \xB7 last known status":""} ${r.present?u`<span class="content-import-present">Already present</span>`:g}</span> ${r.error?u`<span>${r.error}</span>`:g}</span></label>`)}</fieldset>`)} ${this.plan.items.length===0?u`<p class="lwd-empty">No local ${t} available.</p>`:g}</div><footer class="nwd-actions"><span class="lwd-empty" role="status">${this.selected.size} selected</span><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${this.selected.size===0}" @click="${this._onConfirm}">Import ${t}</button></footer></dialog>`}};customElements.define("local-content-import-dialog",ag);function k0(e){return re("local-content-import-dialog",e)}var x0=`dialog{width:min(94vw,68rem);max-width:68rem;max-height:calc(100dvh - 7rem);display:flex;flex-direction:column}dialog:not([open]){display:none}.comparison-results{overflow:auto;min-height:0}.difference-counts{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin:.8rem 0;font-size:.8rem}.difference-counts span{border-inline-start:3px solid var(--difference);padding-inline-start:.5rem}.managed-only{--difference: var(--marker-blue, #559adf)}.local-only{--difference: var(--marker-green, #53a96a)}.mismatch{--difference: var(--high, #d69d37)}.finding{margin:.8rem 0 1.3rem}h4{font-size:.9rem;font-weight:600;overflow-wrap:anywhere}.location,.finding-id{margin-top:.3rem;color:var(--muted);font-size:.75rem;overflow-wrap:anywhere}.table-scroll{margin-top:.6rem;overflow-x:auto}table{width:100%;min-width:32rem;border-collapse:collapse;table-layout:fixed;font-size:.8rem}th,td{padding:.6rem .7rem;text-align:left;vertical-align:top;border:1px solid var(--border);overflow-wrap:anywhere}thead th{color:var(--muted);font-weight:500}th:first-child{width:8rem}tbody th{font-weight:500}td{white-space:pre-wrap}.difference-kind{display:block;margin-top:.3rem;color:var(--difference);font-size:.72rem}.highlight{background:rgb(from var(--difference) r g b / .08)}.unset{color:var(--muted);font-style:normal}.comment+.comment{margin-top:.6rem}.comment.changed{border-inline-start:3px solid var(--difference);padding-inline-start:.5rem}.skipped{color:var(--high, #d69d37);margin:.75rem 0;font-size:.8rem}.skipped ul{padding:.6rem 0 .6rem 1.2rem;overflow-wrap:anywhere}.empty{margin:1rem 0;color:var(--muted);font-size:.85rem}
|
|
9
|
+
`;var VA={triage:"Triage state",color:"Color",fix:"Fix",flagged:"Flag",comment:"Comments",ignoredReports:"Per-report ignores"},S0={"managed-only":"Only managed","local-only":"Only local",mismatch:"Different"},jA={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"};function C0(e,t){return t===void 0||Array.isArray(t)&&t.length===0?u`<em class="unset">Not set</em>`:e==="comment"?t.map(n=>u`<div class="${`comment${n.different?" changed":""}`}">${n.text}</div>`):e==="ignoredReports"?u`${t.join(`
|
|
10
|
+
`)}`:e==="flagged"?t?"Flagged":"Not flagged":e==="triage"?jA[t]??t:t}var lg=class extends Ee{static styles=[...Ee.styles,P(x0)];static properties={comparison:{attribute:!1}};constructor(){super(),this.comparison={matched:0,localFindings:0,findings:[],skipped:[]}}render(){let{matched:t,localFindings:n,findings:r,skipped:o}=this.comparison,s={"managed-only":0,"local-only":0,mismatch:0};for(let i of r)for(let a of i.differences)s[a.kind]++;return u`<dialog aria-labelledby="compare-triage-title" @close="${this._onClose}"><header><h3 id="compare-triage-title">Compare triage</h3><p class="lwd-body">${t} shared ${t===1?"finding":"findings"} compared · ${r.length} with differences</p><p class="lwd-note">Local reports and managed reports are matched by finding ID. This comparison does not change either side. Comments are compared by text; per-report ignores only exist locally.</p>${r.length>0?u`<div class="difference-counts">Field differences: ${Object.entries(S0).map(([i,a])=>u`<span class="${i}">${a}: ${s[i]}</span>`)}</div>`:g}</header><div class="comparison-results">${o.length>0?u`<details class="skipped"><summary>${o.length} local ${o.length===1?"report could":"reports could"} not be read; comparison is incomplete.</summary><ul>${o.map(i=>u`<li>${i.name}: ${i.reason}</li>`)}</ul></details>`:g} ${r.map(({id:i,finding:a,differences:l})=>u`<section class="finding"><h4>${a.title||a.description?.split(`
|
|
11
|
+
`)[0]||i}</h4>${a.file?u`<p class="location">${a.file}${a.line?`:${a.line}`:""}</p>`:g}<p class="finding-id"><code>${i}</code> · ${a.reports.join(", ")}</p><div class="table-scroll"><table><thead><tr><th scope="col">Field</th><th scope="col">Local</th><th scope="col">Managed</th></tr></thead><tbody>${l.map(p=>u`<tr class="${p.kind}"><th scope="row">${VA[p.property]}<span class="difference-kind">${S0[p.kind]}</span></th><td class="${p.kind==="managed-only"?"":"highlight"}">${C0(p.property,p.local)}</td><td class="${p.kind==="local-only"?"":"highlight"}">${C0(p.property,p.managed)}</td></tr>`)}</tbody></table></div></section>`)} ${r.length===0?u`<p class="empty">${t>0?"No triage differences in the shared findings.":n===0?"No findings were found in the readable local reports.":"No findings are present in both local and managed reports."}</p>`:g}</div><footer class="nwd-actions"><span class="nwd-spacer"></span><button type="button" data-role="cancel" @click="${this._onCancel}">Close</button></footer></dialog>`}};customElements.define("triage-comparison-dialog",lg);var _0=e=>re("triage-comparison-dialog",e);var GA={get state(){return c},listWorkspaces:Y,addReportToWorkspace:io,addBundleToWorkspace:ao,onReportMembershipChanged:Vi,onBundleMembershipChanged:Hf,onWorkspaceDeleted:Ui,onWorkspacePrivateKeyChanged:Wf,analyzeContent:Ve,setCount:Ue,gunzipBytes:$p,listBundles:Je,listFiles:ce,readBundle:_n,readFileBytes:Cn,saveBundle:Qr,saveFileBytes:of,onFileMutated:mt,async saveTriage(){return await ps(),xe()},getSecureItem:ve,setSecureItem:Te,removeSecureItem:nr,onSecureStorageHydrated:Xt};function R0(e){e.installSyncHost(GA),um(()=>e.triageSync.notify())}var X=null,uo=null;function A0(){try{return ve("deepview.sync.userEnabled")!=="0"}catch{return!0}}var E0=!1;function sd(e){E0=!!e}function od(){if(E0||c.serverMode!=="e2e")return!0;try{return pt()?.mode==="managed"}catch{return!1}}function aa(){return uo||(od()&&!X?Promise.resolve(null):(uo=(async()=>{let e="./client-sync.js";try{let t=await import(e);return R0(t),X=t,KA(),t}catch(t){throw uo=null,t}})(),uo))}var F0=[];function la(e){X?e(X):F0.push(e)}function KA(){let e=F0.splice(0);for(let t of e)try{t(X)}catch(n){console.warn("client-sync: deferred apply failed:",n)}}function po(e,t){let n={cancelled:!1,unsub:null};return la(r=>{n.cancelled||(n.unsub=t(r,e))}),()=>{n.cancelled=!0,n.unsub&&n.unsub()}}function cg(e,t){return X?X.isInRemote(e,t):!1}function L0(e,t){return X?X.isBundleInRemote(e,t):!1}var qA="deepview.objstore-presence.";function O0(e){try{let t=localStorage.getItem(qA+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function ws(e,t){if(X&&X.isInRemote(e,t))return!0;let n=O0(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function dg(e,t){if(X&&X.isBundleInRemote(e,t))return!0;let n=O0(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function ug(e){return X?X.remoteCount(e):0}function N0(e){return X?X.differingReports(e):[]}function n6(e){return po(e,(t,n)=>t.onAutoDownloaded(n))}function r6(e){return po(e,(t,n)=>t.onBundleAutoDownloaded(n))}function o6(e){return po(e,(t,n)=>t.onChange(n))}var M0=null,T0=null,I0=null,rd=[];function s6(e){if(X){X.setRedraw(e);return}M0=e,la(t=>{M0===e&&t.setRedraw(e)})}function i6(e){if(X){X.setAuthenticationResolver(e);return}T0=e,la(t=>{T0===e&&t.setAuthenticationResolver(e)})}function a6(e){if(X){X.setHydrationConflictResolver(e);return}I0=e,la(t=>{I0===e&&t.setHydrationConflictResolver(e)})}async function on(e,t){if(od()||!A0()&&!X)return;let n=await aa();if(!(!n||od()))return n[e](...t)}function B0(...e){return on("downloadFileFromRemote",e)}function P0(...e){return on("fetchBundleFromRemote",e)}function id(...e){return on("putFile",e)}function D0(...e){return on("holdLocalChangeChecks",e)}function z0(...e){return on("putBundleToRemote",e)}function ad(...e){return on("deleteFromRemote",e)}function ld(...e){return on("deleteBundleFromRemote",e)}function ca(...e){return on("openWorkspace",e)}async function pg(...e){return(X??(uo?await uo:null))?.closeWorkspace(...e)}function W0(...e){return on("recheckRemoteStorage",e)}function H0(...e){return on("resolveReportDifference",e)}function In(e,t){if(X)return X.triageSync[e](...t);la(n=>{n.triageSync[e](...t)})}var G={get status(){return X?X.triageSync.status:"off"},get openSessions(){return X?X.triageSync.openSessions:[]},get persistenceDegraded(){return X?X.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return X?X.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return od()?Promise.resolve(null):aa().then(t=>{t.triageSync.setEnabled(!0);let n=rd;rd=[];for(let r of n)try{t.openWorkspace(r)}catch(o){console.warn(`client-sync: openWorkspace(${r}) failed during re-enable:`,o)}return null}).catch(t=>(console.warn("client-sync: setEnabled load failed:",t),null));if(X){rd=X.openWorkspaceIds();for(let t of rd)try{X.closeWorkspace(t)}catch(n){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,n)}X.triageSync.setEnabled(!1);return}In("setEnabled",[e])},isEnabled(){return X?X.triageSync.isEnabled():A0()},openSession(e){In("openSession",[e])},closeSession(e){In("closeSession",[e])},refreshSession(e){In("refreshSession",[e])},dismissError(e){In("dismissError",[e])},setForcedOff(e){In("setForcedOff",[e])},setProtocolLocked(e){In("setProtocolLocked",[e])},setServerUrl(e){In("setServerUrl",[e])},getServerUrl(){return X?X.triageSync.getServerUrl():null},notify(){In("notify",[])},onStatusChange(e){return po(e,(t,n)=>t.triageSync.onStatusChange(n))},onServerInfo(e){return po(e,(t,n)=>t.triageSync.onServerInfo(n))},onPersistenceDegraded(e){return po(e,(t,n)=>t.triageSync.onPersistenceDegraded(n))},onProxyAuthRequired(e){return po(e,(t,n)=>t.triageSync.onProxyAuthRequired(n))}};function cd(){let e=new Set;if(c.currentWorkspace||!cm())return e;let t=c.currentFile??c.reports[0]?.fileName;if(!t)return e;let n=new Set;for(let r of c.reports)if(r.fileName===t)for(let o of r.groups)for(let s of o)s.id!=null&&n.add(String(s.id));for(let r of n)xt(r).some(o=>!n.has(o)&&or(o).some(s=>s!==t))&&e.add(r);return e}var vs="\0",mg="",$s="";function da(e){return gl(e.model)||null}function gg(e){let t=dr();if(t.filterAnalyzer){let n=e._analyzer??null,r=t.filterAnalyzer===vs?null:t.filterAnalyzer;if(n!==r)return!1}if(t.filterModel){let n=da(e),r=t.filterModel===$s?null:t.filterModel;if(n!==r)return!1}return!0}function hg(e){let t=typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:null;return e.isApp&&!(e._source??e.source)&&t?t:typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:t}function j0(e){let t=new Set;for(let n of e)for(let r of n)t.add(hg(r));return t}function dd(){c.filterSeverities=new Set,c.filterColors=new Set,c.filterSources=new Set,c.filterAnalyzer="",c.filterModel="",c.filterRepo="",c.filterConfMin=0,c.filterConfMax=10,c.filterInclude="",c.filterIncludeNegate=!1,c.filterComment="",c.filterFix="",c.filterFlagged="",c.filterDuplicates="",c.filterCrossContext="",c.filterAppStacked="",c.filterSecurity="",c.filterRevalidate="",c.filterPartial="",c.sortBy="severity"}var YA=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];function b6(){let e={};for(let t of YA){let n=c[t];e[t]=n instanceof Set?new Set(n):n}return e}var bg=null;function y6(e){bg=e}function w6(){bg=null}function dr(){return bg??c}function G0(e){return Xr(e)||(e._source&&!e._sourcePass?"revalidation":"")}function K0(e){let t=Hp("confirmed","");return e.some(n=>t.includes(G0(n)))}function XA(e,t){let n=e.map(Ct).filter(r=>r.length>0);return Vv(n,t,Uv(e,Ct,Xr),Xr)?"confirmed":""}function JA(e,t=Ct){return Hv(e,t)}function ZA(e,{tabs:t=Ct,kindOf:n=Xr,severityMode:r=c.severityMode}={}){return jl(e,{tabs:t,kindOf:n,severityMode:r})}function ud(e){return c.showRevalidation===!1||c.upstreamOnly||fo()?!1:ZA(e)}function ua(e,{resetSort:t=!0}={}){c.filterConfMin=JA(e),c.filterConfMax=10,c.filterRevalidate=XA(e,c.filterConfMin),c.filterPartial="",t&&(c.sortBy=yg(e)?"priority-desc":"severity")}function yg(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(q0(t)===void 0)return!1;let n=t.filter(o=>o.isApp);if(n.length===0)return!0;let r=t.some(o=>o.priority!==void 0);return n.some(o=>o.priority!==void 0||!r&&Jr(o))})}function q0(e){let t=e.find(n=>n.priority!==void 0);return t?t.priority:e.some(Jr)?0:void 0}function Y0(e){let t=dr();if(t.filterSources.size===1){let n=t.filterSources.has("own");if(n&&Zn(e.file)||!n&&!Zn(e.file))return!1}if(t.filterRevalidate){let n=Hp(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(G0(e)))return!1}if(!t.filterRevalidate){let n=Gv(e)?0:Up(e);if(n===void 0){if(t.filterConfMin>0)return!1}else if(n<t.filterConfMin||t.filterConfMax<10&&n>t.filterConfMax)return!1}return!0}function QA(e){if(!Y0(e))return!1;let t=dr(),n=t.filterInclude.toLowerCase();if(t.filterSeverities.size>0&&!t.filterSeverities.has(de(e,c.severityMode)))return!1;if(t.filterColors.size>0){let r=he(e)?.color??"none";if(!t.filterColors.has(r))return!1}if(!gg(e))return!1;if(t.filterRepo){let r=hg(e),o=t.filterRepo===mg?null:t.filterRepo;if(r!==o)return!1}if(n){let r=he(e),o=qv(e).includes(n)||(r?.comment??"").toLowerCase().includes(n)||(r?.fix??"").toLowerCase().includes(n)||n.length>=6&&n.split(/\s+/u).some(s=>s.length>=6&&e.id?.toLowerCase().includes(s));return t.filterIncludeNegate?!o:o}return!0}function eE(e){let t=dr();if(!t.filterComment&&!t.filterFix&&!t.filterFlagged)return!0;let n=r=>e.some(o=>r(he(o)));if(t.filterComment){let r=n(o=>!!o?.comment);if(t.filterComment==="with"?!r:r)return!1}if(t.filterFix){let r=e.some(o=>!!(he(o)?.fix||tn(o)));if(t.filterFix==="with"?!r:r)return!1}if(t.filterFlagged){let r=n(o=>o?.flagged===!0);if(t.filterFlagged==="with"?!r:r)return!1}return!0}function tE(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!sr(t))return t.name;let n=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(n)?.[1]??null}function X0(){return c.showRevalidation!==!1&&!c.upstreamOnly}function wg(e){if(X0())return!1;let t=Ct(e);if(t.length<2)return!1;let n=new Set,r=new Set;for(let o of t){let s=hg(o);s&&n.add(s);let i=tE(o);i&&r.add(i)}return n.size>1||r.size>1}function vg(e){if(!X0()||Ct(e).length===0)return!1;let n=e.filter(r=>r.isApp);return n.length>0&&n.length>1}function fg(e){return e.some(t=>t.isSecurity===!0)}function J0(e){return e.some(fg)&&e.some(t=>!fg(t))}function Z0(e){return e.filter(t=>t.some(Y0)).map(Ct)}function pd(e){let t=!c.currentWorkspace&&dr().filterDuplicates,n=t?cd():null,r=dr().filterCrossContext,o=dr().filterAppStacked,s=dr().filterSecurity;return e.filter(i=>i.some(QA)&&eE(i)&&(!t||t==="with"===i.some(a=>n.has(j(a))))&&(!r||r==="with"===wg(i))&&(!o||o==="with"===vg(i))&&(!s||s==="with"===fg(i)))}function U0(e,t){let n=t==="desc"?-1:11;return(r,o)=>{let s=r[e]??n,i=o[e]??n;return(t==="desc"?i-s:s-i)||r.file.localeCompare(o.file)}}function Q0(e){let t=e==="desc"?-1:11;return(n,r)=>{let o=n.confidence===void 0&&n.critical===!0,s=r.confidence===void 0&&r.critical===!0,i=n.confidence??(o?10:t),a=r.confidence??(s?10:t);return(e==="desc"?a-i:i-a)||(o===s?0:o?-1:1)||n.file.localeCompare(r.file)}}var V0=Q0("desc"),nE={severity:(e,t)=>(_e[de(t,c.severityMode)]||0)-(_e[de(e,c.severityMode)]||0)||V0(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":V0,"confidence-asc":Q0("asc"),"priority-desc":U0("priority","desc"),"priority-asc":U0("priority","asc")};function ex(e){let t=nE[c.sortBy];if(!t)return[...e];if(c.sortBy==="priority-desc"||c.sortBy==="priority-asc"){let n=c.sortBy==="priority-desc"?"desc":"asc",r=n==="desc"?-1:11;return e.map(o=>({p:q0(o),g:o})).toSorted((o,s)=>{let i=o.p??r,a=s.p??r;return(n==="desc"?a-i:i-a)||An(o.g).file.localeCompare(An(s.g).file)}).map(o=>o.g)}return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}function tx(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.startsWith("revalidate")&&n!=null))}function nx(e,t,n){let r=tx(t);if(!e._revalidationCopies){let o=tx(e);if(Object.keys(o).length===0&&Object.keys(r).length===0)return[];e._revalidationCopies=Object.keys(o).length>0?[{reportName:e._reportName??"",fields:o}]:[]}return Object.keys(r).length>0&&e._revalidationCopies.push({reportName:n,fields:r}),e._revalidationCopies}function x6(e){let t=new Map,n=new Set(Fw);for(let{reportName:r,fields:o}of e)for(let[s,i]of Object.entries(o)){if(i==null)continue;let a=s==="revalidate"?Be(o)||String(i).trim().toLowerCase():String(i).trim();if(s==="revalidate"&&!a||s==="revalidate"&&!n.has(a))continue;t.has(s)||t.set(s,new Map);let l=t.get(s);l.has(a)||l.set(a,new Set),l.get(a).add(r)}return[...t].filter(([,r])=>r.size>1).map(([r,o])=>({field:r,variants:[...o].map(([s,i])=>({value:s,reports:[...i]}))}))}var rE=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"]);function rx(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,o]of Object.entries(t)){if(r.startsWith("_")||rE.has(r)||o==null)continue;if(r==="revalidate"){let i=Be(t);if(!i)continue;let a=Be(e);a?a!==i&&(n=!0):e[r]=o;continue}let s=e[r];if(s==null){e[r]=o;continue}r.startsWith("revalidate")&&String(s).trim()!==String(o).trim()&&(n=!0)}return n}function $g(e,t,n,r){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:di(e),reason:e.correctedSeverityReason}},e._correctedByReport[n]={severity:di(t),reason:t.correctedSeverityReason});let o=nx(e,t,n);(rx(e,t)||r.has(e.id))&&r.set(e.id,{finding:e,copies:o})}function pa(e,t=null){let n=t??e.filter(d=>d.isApp),r=e.filter(d=>!d.isApp);if(n.length===0||r.length===0)return[e];if(t&&e.some(d=>d.isApp))return[e];if(r.some(d=>typeof d.id!="string"||!d.id))return[e];let o=new Set(r.map(d=>d.id)),s=new Map,i=new Set;for(let d of n){let f=d.revalidateInputs===void 0?[]:d.revalidateInputs;if(!Array.isArray(f))return[e];for(let m of f){if(!o.has(m))return[e];i.add(m)}s.set(d,f)}if(i.size!==o.size)return[e];let a=new Map([...o].map(d=>[d,d])),l=d=>{let f=d;for(;a.get(f)!==f;)f=a.get(f);for(;a.get(d)!==f;){let m=a.get(d);a.set(d,f),d=m}return f};for(let d of s.values()){if(d.length===0)continue;let f=l(d[0]);for(let m of d)a.set(l(m),f)}let p=new Map;for(let d of e){let f=s.get(d),m=f?f.length>0?l(f[0]):d:l(d.id);p.has(m)||p.set(m,[]),p.get(m).push(d)}return p.size===1?[e]:[...p.values()]}function fd(e,{showRevalidation:t=!0,upstreamOnly:n=!1,hideRuledOut:r=!1,merges:o=[]}={}){let s=[],i=new Set;for(let y=0;y<e.length;y++){let w=e[y];for(let v of w.groups){for(let k of v)k.id&&["refuted","unreachable"].includes(Be(k))&&i.add(k.id);let x=n?v.filter(k=>k.isUpstream&&Be(k)!=="revalidation").map(ox):t?r?v.filter(k=>!["refuted","unreachable"].includes(Be(k))):v:v.filter(k=>Be(k)!=="revalidation").map(ox),$=x.length===v.length&&x.every((k,S)=>k===v[S])?v:x;$.length>0&&s.push({group:$,sourceGroup:v,reportIndex:y,reportName:w.fileName??"",hasApp:$.some(k=>k.isApp)})}}let a=s.map((y,w)=>w),l=s.map(y=>y.hasApp),p=y=>{let w=y;for(;a[w]!==w;)w=a[w];for(;a[y]!==w;){let v=a[y];a[y]=w,y=v}return w},d=(y,w)=>{y=p(y),w=p(w),y!==w&&(a[w]=y,l[y]||=l[w])},f=new Map;for(let y=0;y<s.length;y++)for(let w of s[y].group)w.id&&(f.has(w.id)||f.set(w.id,[]),f.get(w.id).push({index:y,app:w.isApp}));for(let y of f.values()){let w=new Map,v=y.find(x=>x.app);for(let{index:x}of y){v&&d(v.index,x);let $=s[x].reportIndex;w.has($)?d(w.get($),x):w.set($,x)}}for(let y of f.values()){let w=null;for(let{index:v}of y)l[p(v)]||(w===null?w=v:d(w,v))}for(let y of o){let w=null;for(let v of y)for(let{index:x}of f.get(v)??[])w===null?w=x:d(w,x)}let m=new Map;for(let y=0;y<s.length;y++){let w=p(y);m.has(w)||m.set(w,[]),m.get(w).push(s[y])}let h=new Map,b=[];for(let y of m.values()){let w=y[0].group,v=w.map(_=>_.id).filter(Boolean);if(y.length===1&&new Set(v).size===v.length&&o.length===0){let _=e.length>1&&w.find(L=>L.isApp);if(_){let L=[...w];L.workspaceKey=_.id??String(_._id),b.push(...kg(y,L,t,n))}else b.push(...kg(y,w,t,n));continue}let x=new Map,$=new Map,k=[];for(let{group:_,reportName:L}of y)for(let A of _)if(A.id&&$.has(A.id))$g($.get(A.id),A,L,x);else{let E={...A,_reportName:A._reportName??L};A.id&&$.set(A.id,E),k.push(E)}let S=new Set;for(let _ of o)for(let L of _)$.has(L)&&S.add(L);for(let{group:_}of y)if(_.length>1)for(let L of _)L.id&&S.add(L.id);let C=[...S].map(_=>$.get(_));for(let _ of k)S.has(_.id)||C.push(_);if(e.length>1){let _=C.find(L=>L.isApp);_&&(C.workspaceKey=_.id??String(_._id))}b.push(...kg(y,C,t,n));for(let[_,L]of x){let A=h.get(_);h.set(_,A?{finding:A.finding,copies:[...A.copies,...L.copies]}:L)}}return Object.defineProperty(b,"ruledOutIds",{value:i,configurable:!0}),{groups:b,conflicts:h}}function kg(e,t,n,r){if(n)return[t];if(r){let s=e.flatMap(d=>d.sourceGroup),i=pa(s);if(i.length===1)return[t];let a=[],l=new Set;for(let d of i){let f=new Set(d.filter(h=>!h.isApp&&h.id).map(h=>h.id)),m=t.filter(h=>f.has(h.id));if(m.length>0){a.push(m);for(let h of m)l.add(h.id)}}let p=new Set(t.map(d=>d.id).filter(Boolean));return l.size===p.size?a:[t]}let o=e.flatMap(s=>s.sourceGroup.filter(i=>i.isApp));return pa(t,o)}function ox(e){let t=Object.keys(e).filter(r=>r.startsWith("revalidate")||r==="_revalidationCopies");if(t.length===0)return e;let n={...e};for(let r of t)delete n[r];return n}function md(e,t=zt){let n=W$(to(e.flat()));return{linkedIds:r=>[...xt(r),...n.linkedIds(r)],knownRows:r=>{let o=[...t(r),...bc(r)];for(let s of o)for(let i of to(s.members))n.add(i);return o}}}var mo=null,xg=0;function ks(){return c.currentView==="links"&&mo?.owner===c.currentLinks?mo:null}function sx(){xg++,mo=null}async function z6(e,t,n,r){if(c.currentView!=="links"||!c.currentLinks)return;let o=rt(c.currentLinks),s=++xg;mo={owner:o,id:e,reportName:t,group:null,error:""},c.focusCodeStack=[],c.focusCodeAt=0;let i=()=>s===xg&&c.currentView==="links"&&c.currentLinks===o;try{if(R()){let h=zt([e]).find(b=>b.report===t&&(!r||b.managedReportId===r)&&(n==null||b.index===Number(n)));if(!h)throw new Error("This finding is no longer in the report.");mo={owner:o,id:e,reportName:t,group:h.members.map(b=>({...b})),error:""},c.activeTabByGroup.set(h.members[0].id,e);return}let a=await vt(await fe(t));if(!i())return;let l=(yn(a?.data)??[]).map(h=>Array.isArray(h)?h:[h]),p=h=>h?.some(b=>String(b?.id)===e),d=p(l[n])?l[n]:l.find(p);if(!d)throw new Error("This finding is no longer in the report.");let{data:f}=a,m=d.filter(h=>h?.id).map(h=>{let b={...h,_reportName:t,_repoFallback:Pe(f)??Ze(t),_repoDirectory:Lt(f?.repo),_bundleHashes:f.bundleHashes??[],_source:h.source??f.source??null};return Wo(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=jn(b,b._source)),b});if(await Promise.all([lo(),dt("report",t),...Yi(t).map(h=>dt("workspace",h.id))]),i()){let h=(b,y)=>y.includes(b.id)||Array.isArray(b.revalidateInputs)&&b.revalidateInputs.some(w=>y.includes(w));Gn([m],md([m],b=>[...zt(b),...c.reports.flatMap(y=>y.groups??[]).filter(y=>y.some(w=>h(w,b))).map(y=>({members:y}))])),mo.group=m,c.activeTabByGroup.set(m[0].id,e)}}catch(a){i()&&(mo.error=a.message||"Unable to load this finding.")}}function gd(e,t,n,r=n){let o=e.map((f,m)=>m),s=f=>{for(;o[f]!==f;)o[f]=o[o[f]],f=o[f];return f},i=e.map(n),a=new Map;for(let f=0;f<i.length;f++)for(let m of i[f])m.id&&(a.has(m.id)||a.set(m.id,[]),a.get(m.id).push(f));for(let[f,m]of a)for(let h of t(f))if(h!==f)for(let b of m)for(let y of a.get(h)??[]){let w=s(b),v=s(y);w!==v&&(o[v]=w)}let l=new Map;for(let f=0;f<e.length;f++){let m=s(f);l.has(m)||l.set(m,[]),l.get(m).push(f)}if(l.size===e.length)return e;let p=f=>f.id??String(f._id),d=[...l.values()].map(f=>{if(f.length===1)return e[f[0]];let m=new Map;for(let w of f)for(let v of r(e[w]))m.has(p(v))||m.set(p(v),v);let h=new Map;for(let w of f)for(let v of e[w])h.has(p(v))||h.set(p(v),m.get(p(v))??v);let b=[...h.values()],y=e[f[0]];return b.workspaceKey=y.workspaceKey??p(y[0]),b.linkedTabs=[...m.values()],b});return Object.defineProperty(d,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),d}function ie(e){return e.workspaceKey??j(e[0])}function hd(e){return Array.isArray(e)?e:[e]}function fo(){return c.revalidationDetailed===!0}function oE(e){return e?._reportName??""}var ix=null,ax=!0;function sE(){let e=c.reports;return!Array.isArray(e)||e.length===0?!0:(e!==ix&&(ix=e,ax=Gl(e)),ax)}function ur(e){return!e.isUpstream||c.showRevalidation===!1||c.upstreamOnly===!0||!sE()}function iE(){let e=c.managedSession;return R()&&(e?.publicShare===!0||!Yn(e?.role,"triage"))}function _t(e){return ur(e)&&!iE()}function he(e){if(!ur(e))return;let t=c.triage.get(j(e)),n=t?.triage==="ignored"&&ct(e,Xo())?{...t,triage:void 0}:t;if(!R())return n;let r=c.managedComments?.get(e.id)??[];return r.length===0&&!n?.comment?n:{...n,comment:r.map(o=>o.authorLogin?`${o.authorLogin}: ${o.body}`:o.body).join(`
|
|
12
12
|
|
|
13
|
-
`)}}function zA(e){return dr(e)&&(Me(e,c.triage.get(j(e)),qo())==="ignored"||ct(e,qo())&&Hr(c.triage,j(e),BA(e)))}function ca(e,t=he(e)){if(dr(e))return Me(e,t,qo())??(zA(e)?"ignored":void 0)}function Ct(e){return ys()?.group===e?e:e.linkedTabs?e.linkedTabs:uo()?e:G0(e)}function G0(e){return e.length<=1||!e.some($i)?e:e.filter($i)}function ur(e){let t=Ct(e);return t.length<=1?t:[...t].toSorted((n,r)=>{let o=$i(n)?1:0,s=$i(r)?1:0;if(o!==s)return s-o;let i=he(n)?.color?1:0,a=he(r)?.color?1:0;if(i!==a)return a-i;let l=_e[de(n,c.severityMode)]||0,p=_e[de(r,c.severityMode)]||0;if(l!==p)return p-l;let d=n.confidence??-1;return(r.confidence??-1)-d})}function An(e){return e.length===1?e[0]:ur(e)[0]}function K0(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function WA(e){let t=he(e);return!!t?.comment||!!(t?.fix||tn(e))||t?.flagged===!0}function je(e){if(e.length===1)return e[0];let t=ur(e);if(t.length===1)return t[0];let n=c.activeTabByGroup.get(ie(e));if(n){let o=t.find(s=>j(s)===n);if(o)return o}let r=t;if(c.filterAnalyzer||c.filterModel){let o=t.filter(ig);o.length>0&&(r=o)}return r.find(WA)??r[0]}function q0(e){return e?._repoFallback||c.repoUrl||""}function En(e){return{github:q0(e),directory:e?._repoDirectory??""}}function Y0(e){for(let t of Zt().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||q0(e)||null}function ws(e){if(!Array.isArray(e))return[];let t=e.filter(n=>!n.isUpstream);return t.length===0||t.length===e.length?e:t}function Fe(e){let t=ws(e),n=0,r=!1,o,s=!1,i=!1,a,l=!1,p=null,d=!1,f=!0;for(let w of t){let v=he(w),x=ca(w,v),k=v?.color;k===void 0&&x===void 0||(n++,k!==void 0&&(s?k!==o&&(r=!0):(s=!0,o=k)),l?x!==a&&(i=!0):(l=!0,a=x),x?(p===null&&(p=x),x==="ignored"&&v?.triage!=="ignored"?f=!1:d=!0):f=!1)}let m=r||i,h=!m&&s?o:null,b=n>0&&f,y=!m&&p!==null?p:null;return{hasConflict:m,commonColor:h,anyTriage:d,allTriaged:b,commonTriage:y,allIgnored:y==="ignored"&&n===t.length,isInProgress:y==="inprogress",isFixed:y==="fixed",isInvalid:y==="invalid",isDeleted:y==="deleted",isIgnored:y==="ignored"}}function f6(e,t){if(!Array.isArray(e)||e.length<2)return!1;let n=e.filter(_t);if(n.length<2)return!1;let r=(t??"").trim();return n.every(o=>HA(o,r))}function HA(e,t){if(!_t(e))return!1;let n=(he(e)?.fix??"").trim();return n===""||n===(t??"").trim()}function m6(e,t){if(!_t(je(e)))return{targets:[],clearing:!1};let n=Fe(e);return{targets:da(e,n),clearing:t==="restore"||gg(e,n)===t}}function da(e,t=Fe(e)){let n=ws(e),r=e.linkedTabs||n!==e&&e.some(o=>o.isApp)?n:t.hasConflict?[je(e)]:n;return r.every(_t)?r:r.filter(_t)}function gg(e,t=Fe(e),n=null){return e.linkedTabs||e.some(r=>r.isApp)&&ws(e)!==e||!t.hasConflict?t.commonTriage??null:ca(n??je(e))??null}function g6(e){let t=ws(e);if(t.length<2)return!1;let r=Fe(e).commonTriage;if(!r||r==="ignored"&&!t.some(s=>he(s)?.triage==="ignored"))return!1;let o=!1;for(let s of t){if(!_t(s))continue;let i=j(s),a=c.triage.get(i);ca(s,a)!==r&&(r==="ignored"&&ct(s,qo())||r!=="ignored"&&a?.ignoredReports?.length||ae(c.triage,i,{triage:r})&&(o=!0))}return o}var ht=null;function pr(){ht=null}function ad(e,t=!1,n=!1){let r=c.reports,o=c.workspaceMerges,s=_();(!ht||ht.reports.length!==r.length||ht.reports.some((a,l)=>a!==r[l])||ht.merges!==o||ht.mergeCount!==o.length||ht.securityLinksTick!==c.linksTick||ht.findingIndexTick!==c.findingIndexTick||ht.managed!==s)&&(Gn(r.flatMap(a=>a.groups??[]),{linkedIds:gt,knownRows:Qt}),ht={reports:[...r],merges:o,mergeCount:o.length,managed:s,securityLinksTick:c.linksTick,findingIndexTick:c.findingIndexTick});let i=t?"upstream":e?n?"workspace-app":"app":"code";return ht[i]||(ht[i]=od(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:o})),ht[i]}function X0(){return ad(c.showRevalidation!==!1).groups}function hg(){return ad(!0).groups}function J0(){return ad(!0,!1,!!c.currentWorkspace).conflicts}function fr(){let e=ad(c.showRevalidation!==!1,c.upstreamOnly===!0,!!c.currentWorkspace),t=e.groups;if(c.showRevalidation===!1||c.upstreamOnly)return t;if(c.currentWorkspace){let n=uo();return(!e.linkedGroups||e.linksTick!==c.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=sd(t,gt,G0,Ct),e.linksTick=c.linksTick,e.linkedDetailed=n),e.linkedGroups}return uo()?t:e.visibleGroups??=(()=>{let n=t.flatMap(r=>{let o=r.filter(s=>!Yr(s));return o.length===r.length?[r]:o.length===0?[]:(o.workspaceKey=ie(r),[o])});return Object.defineProperty(n,"ruledOutIds",{value:t.ruledOutIds,configurable:!0}),n})()}function fo(){let e=fr();if(c.viewMode==="kanban")return e;let t=e.filter(n=>Fe(n).commonTriage===c.shownTriage);return Object.defineProperty(t,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),t}function h6(e){if(c.showRevalidation||c.upstreamOnly||!Array.isArray(e)||e.length===0)return e;let t=new Set(e.map(j)),n=new Map;for(let r of hg())for(let o of la(r))if(o.some(s=>t.has(j(s))))for(let s of o)n.set(j(s),s);return n.size===e.length&&e.every(r=>n.get(j(r))===r)?e:n.size>0?[...n.values()]:e}function b6(e){let t=ys()?.group;if(t&&ie(t)===e)return t;for(let n of fr())if(ie(n)===e)return n;return null}var ld=class extends Et{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Rn(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,n=Rn(r=>{if(!r){n(),this._dispose===n&&(this._dispose=null),this.updateComplete.then(()=>this.requestUpdate());return}t=this._render()});return this._dispose=n,t}),this._disposers.push(()=>this._dispose&&this._dispose())}disconnectedCallback(){for(super.disconnectedCallback();this._disposers.length>0;)this._disposers.pop()()}};var yg=Dr;function Z0(e){return e==null?"(none)":yg[e]??e}function Q0(e){return e??"(no model)"}var bg=class extends ld{static properties={analyzers:{attribute:!1},models:{attribute:!1},groups:{attribute:!1},_open:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.analyzers=[],this.models=[],this.groups=[],this._open=!1}render(){let t=this.analyzers.length>1,n=this.models.length>1;if(!t&&!n)return g;let r=c.filterAnalyzer===""?void 0:c.filterAnalyzer===hs?null:c.filterAnalyzer,o=c.filterModel===""?void 0:c.filterModel===bs?null:c.filterModel,s=new Map,i=new Map;for(let f of this.groups){let m=new Set,h=new Set;for(let b of f){let y=b._analyzer??null,w=ia(b);(o===void 0||w===o)&&m.add(y),(r===void 0||y===r)&&h.add(w)}for(let b of m)s.set(b,(s.get(b)??0)+1);for(let b of h)i.set(b,(i.get(b)??0)+1)}let a=r===void 0?null:Z0(r),l=o===void 0?null:Q0(o),p=a!=null&&l!=null?`${a} \xB7 ${l}`:a??l??(t?"All analyzers":"All models"),d=a!=null||l!=null;return u`<button type="button" class="${q({"analyzer-btn":!0,active:d})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${p}`}"><span class="analyzer-btn-label">${p}</span> <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="analyzer-select-menu" class="analyzer-menu" @beforetoggle="${this._onToggle}">${t?this._column({dim:"analyzer",heading:"Analyzer",allLabel:"All analyzers",values:this.analyzers,sentinel:hs,labelOf:Z0,counts:s,current:c.filterAnalyzer}):g} ${t&&n?u`<div class="analyzer-menu-sep"></div>`:g} ${n?this._column({dim:"model",heading:"Model",allLabel:"All models",values:this.models,sentinel:bs,labelOf:Q0,counts:i,current:c.filterModel}):g}</div>`}_column({dim:t,heading:n,allLabel:r,values:o,sentinel:s,labelOf:i,counts:a,current:l}){return u`<div class="analyzer-menu-col" role="group" aria-label="${`Filter by ${t}`}"><div class="analyzer-menu-head">${n}</div><button type="button" aria-pressed="${String(l==="")}" class="${q({"analyzer-menu-item":!0,active:l===""})}" @click="${()=>this._pick(t,"")}"><span class="analyzer-menu-label">${r}</span></button> ${o.map(p=>{let d=p??s,f=a.get(p)??0,m=l===d;return u`<button type="button" aria-pressed="${String(m)}" class="${q({"analyzer-menu-item":!0,active:m,zero:f===0})}" @click="${()=>this._pick(t,d)}"><span class="analyzer-menu-label">${i(p)}</span><span class="analyzer-menu-count">${f}</span></button>`})}</div>`}_pick(t,n){let r=t==="analyzer"?c.filterAnalyzer:c.filterModel,o=n!==""&&r===n?"":n;this.dispatchEvent(new CustomEvent("analyzer-change",{detail:{analyzer:t==="analyzer"?o:c.filterAnalyzer,model:t==="model"?o:c.filterModel},bubbles:!0,composed:!0}))}_onToggle=t=>{this._open=t.newState==="open",this._open&&this._position()};_position(){let t=this.querySelector(".analyzer-menu"),n=this.querySelector(".analyzer-btn");if(!t||!n)return;let r=n.getBoundingClientRect(),o=t.offsetWidth||240,s=t.offsetHeight||200,i=4,a=r.left;a+o>window.innerWidth-4&&(a=window.innerWidth-o-4),a<4&&(a=4);let l=r.bottom+i;l+s>window.innerHeight-4&&r.top>s+i&&(l=r.top-s-i),t.style.top=`${l}px`,t.style.left=`${a}px`}updated(){this._open&&this.querySelector(".analyzer-menu")?.matches(":popover-open")&&this._position()}};customElements.define("analyzer-select",bg);var cd=["type","model","effort","exportsMode"],ex=["security","correctness"],UA=["max","xhigh","high","medium","low","minimal"],VA=["list","isolate"];function wg(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}var jA={type:e=>e==="terminal"?ex.length+2:wg(ex,e),model:e=>e==null?1:0,effort:e=>wg(UA,e),exportsMode:e=>wg(VA,e)};function GA(e,t,n){for(let r of n){let o=jA[r],s=o(e[r])-o(t[r]);if(s!==0)return s;let i=String(e[r]??"").localeCompare(String(t[r]??""));if(i!==0)return i}return 0}function tx(e,t,{typePrefix:n=!0}={}){return e==="type"?n?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function KA(e,t){let n=t.filter(s=>s!=="exportsMode"),r=[],o=new Map;for(let s of e){if(s.exportsMode==null){r.push({...s});continue}let i=n.map(p=>s[p]??"").join("|"),a=o.get(i);if(a){a.exportsMode=`${a.exportsMode}+${s.exportsMode}`;continue}let l={...s};o.set(i,l),r.push(l)}return r}function nx(e,t=cd){let n=new Map;for(let m of e){let h={};for(let y of t)h[y]=y==="model"?cl(m.model)??null:m[y]??null;let b=t.map(y=>h[y]??"").join("|");n.has(b)||n.set(b,h)}let r=[...n.values()].toSorted((m,h)=>GA(m,h,t));if(r.length===0)return[];let o={};for(let m of t)o[m]=new Set(r.map(h=>h[m])).size===1;let s=t.filter(m=>!o[m]),i=s.includes("exportsMode")?KA(r,t):r,a=i.length>2&&s.includes("type")&&s.length>1,l=["model","effort"].filter(m=>t.includes(m)&&o[m]),p=[...l,...t.filter(m=>!l.includes(m))],d=[],f=!1;for(let m of p)if(o[m]){let h=tx(m,i[0][m]);h!=null&&d.push(h)}else if(!f){for(let h of i){let b=s.map(y=>tx(y,h[y],{typePrefix:!a})).filter(y=>y!=null);b.length>0&&d.push(b.join(" \xB7 "))}f=!0}return d}function rx(e=!1,t=""){let n=new Set;return["deepview",...e?["security"]:[],...t.split(",")].map(r=>r.trim()).filter(r=>{let o=r.toLowerCase();return!r||n.has(o)?!1:(n.add(o),!0)})}var dd=null;function qA(){return dd||(dd=(async()=>await import("./prism.js"))(),dd)}var ox=1024*1024;function YA(e){return e.length<=ox&&wn(e)<=ox}var XA={__proto__:null,js:"javascript",javascript:"javascript",mjs:"javascript",cjs:"javascript",node:"javascript",jsx:"jsx",ts:"typescript",typescript:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",markup:"markup",yaml:"yaml",yml:"yaml",sh:"bash",bash:"bash",shell:"bash",zsh:"bash",console:"bash",md:"markdown",markdown:"markdown",sol:"solidity",solidity:"solidity",rs:"rust",rust:"rust",rb:"ruby",ruby:"ruby",py:"python",python:"python",py3:"python",python3:"python",php:"php",phtml:"php",java:"java",cpp:"cpp","c++":"cpp",cc:"cpp",cxx:"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp","h++":"cpp",h:"cpp",c:"c",objc:"objectivec",objectivec:"objectivec","objective-c":"objectivec",m:"objectivec",mm:"objectivec"};function sx(e){return typeof e!="string"?null:XA[e.toLowerCase()]??null}async function vs(e,t,n=null){if(!t||!YA(e))return null;try{return(await qA()).highlight(e,t,n)}catch{return null}}function W6(e){let t=[],n=[],r="",o=0;for(;o<e.length;){let s=e.indexOf("<",o),a=(s===-1?e.slice(o):e.slice(o,s)).split(`
|
|
14
|
-
`);r+=a[0];for(let d=1;d<a.length;d++){for(let f=n.length-1;f>=0;f--)r+=n[f].close;t.push(r),r=n.map(f=>f.open).join("")+a[d]}if(s===-1)break;let l=e.indexOf(">",s);if(l===-1){r+=e.slice(s);break}let p=e.slice(s,l+1);p.startsWith("</")?n.pop():n.push({open:p,close:`</${/^<([a-zA-Z][^\s/>]*)/u.exec(p)?.[1]??"span"}>`}),r+=p,o=l+1}return t.push(r),t}var vg=new Map,$g=new Set,kg=!1;function JA(){kg||(kg=!0,queueMicrotask(()=>{kg=!1,c.codeBlockTick++,O()}))}function xg(e,t){let n=sx(t);if(!n||!e)return null;let r=`${n}\0${e}`;return vg.has(r)?vg.get(r):($g.has(r)||($g.add(r),(async()=>{let o=await vs(e,n);vg.set(r,o??null),$g.delete(r),JA()})()),null)}var ud=null,pd=null;function ZA(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function QA(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function eE(){if("serviceWorker"in navigator)try{let e=await navigator.serviceWorker.getRegistrations();for(let t of e){let n=t.active?.scriptURL??t.installing?.scriptURL??t.waiting?.scriptURL;n&&n.endsWith("/brotli-sw.js")&&await t.unregister()}}catch{}}var ix="./brotli-fallback.js",fd=Symbol("brotli worker unavailable"),sn=null,Sg=!1,tE=0,$s=new Map;function nE(){return pd||(pd=(async()=>await import(ix))(),pd)}function Cg(){Sg=!0,sn&&(sn.terminate(),sn=null);let e=[...$s.values()];$s.clear();for(let t of e)t.resolve(fd)}function rE(e){let{id:t,bytes:n,error:r}=e.data??{},o=$s.get(t);o&&($s.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function oE(){if(sn)return sn;if(Sg||typeof Worker>"u")return null;try{sn=new Worker(new URL(ix,import.meta.url),{type:"module"})}catch{return Sg=!0,null}return sn.addEventListener("message",rE),sn.addEventListener("error",Cg),sn.addEventListener("messageerror",Cg),sn}function sE(e){let t=oE();return t?new Promise((n,r)=>{let o=++tE;$s.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{$s.delete(o),Cg(),n(fd)}}):Promise.resolve(fd)}async function iE(){await eE();let e=ZA();return e?{kind:"native",format:e}:{kind:"fallback"}}function ax(){return ud||(ud=iE(),ud)}async function lx(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await ax();if(n(),r.kind==="native")return QA(r.format,e);let o=await sE(e);return n(),o!==fd?o:(await nE()).brotliDecompress(e)}ax().catch(()=>{});var cx=0,_g=new AbortController;function me(){return cx}function Le(){return _g.signal}function Oe(){return _g.abort(),_g=new AbortController,++cx}var aE=new Map,lE=new Map,ua=new Map,md=new WeakMap;async function Rg(e){try{let t=await Zp(e);return t?hi(t,e):null}catch{return null}}var mr=null;function sH(e){let t=new Map(e.filter(n=>n&&!n.error).map(n=>[n.integrity,n]));return mr=t.size>0?{bundles:t}:null,mr}function iH(e){mr===e&&(mr=null)}function Mg(e,t=()=>!0){let n=mr?.bundles.get(e);return!n||!t(n)?null:(mr.bundles.delete(e),mr.bundles.size===0&&(mr=null),n)}function mo(e,t,{sources:n=!0}={}){if(!t.managedId&&_())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let r=n?aE:lE,o=t.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis",s=c.bundleDetails;if(s?.integrity===e&&s.kind===o&&s.managedId===t.managedId&&!s.error&&(!n||!s.metadataOnly))return Promise.resolve(s);let i=Mg(e,f=>f.kind===o&&f.managedId===t.managedId&&(!n||!f.metadataOnly));if(i)return Promise.resolve(i);let a=`${t.managedId??"local"}:${e}:${o}`,l=t.managedId&&n?Le():void 0,p=r.get(a);if(p&&p.signal===l)return p.job;let d=(async()=>{if(t.managedId)try{let h=n?bp(await Yk(t.managedId,{signal:l}),{integrity:e,kind:o,size:t.size}):hi(await Pc(t.managedId),e);return h.managedId=t.managedId,h}catch(h){if(h.name==="AbortError")throw h;return{integrity:e,kind:o,size:t.size,managedId:t.managedId,error:h.message}}if(!n){let h=await Rg(e);return h?.kind===o&&!h.stale?h:mo(e,t)}let[f,m]=await Promise.all([cE(e,t),Rg(e)]);if(!f.error){let h=m?.kind===f.kind&&!m.stale;h&&(f.fileHashes=m.fileHashes,f.fileSizes=m.fileSizes,f.lineCounts=m.lineCounts),h||nv(f).then(b=>Qp(e,b)).catch(()=>{})}return f})();return r.set(a,{job:d,signal:l}),d.finally(()=>{r.get(a)?.job===d&&r.delete(a)}).catch(()=>{}),d}function gr(e,t=c.currentView==="bundles"?c.bundleDetailsTab:"overview",{workspaceId:n=null}={}){let r=c.bundleDetails,o=c.bundleCodeFileRequest,s=o?.bundle===c.selectedBundle&&(!r||r.metadataOnly===!0&&!r.sourceError),i=c.currentView==="bundles"&&c.bundleDetailsTab==="code"&&t==="code"?c.bundleSourceFile??(s?o.path:null):null;Oe(),c.currentView="bundles",c.selectedBundle=e,c.selectedBundleWorkspace=n,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleCodeHistory=null,c.bundleCodeFileRequest=i?{bundle:e,path:i}:null,c.bundleCompare=null,c.bundleSourceFindingIdx=null,c.bundleCodeSearchQuery="",c.bundleCodeSearchMode="files",c.bundleSearchQuery="",c.bundleSearchRegex=!1,c.bundleSearchCase=!1,c.bundleSearchContext=!0,c.bundleDetailsTab=t??"overview",ee.showAll=!0,c.shownTriage=null}function aH(e,{preserveSource:t=!1}={}){Xn(c.bundleDetailsTab,c.bundleSourceFile)&&!Xn(e,t?c.bundleSourceFile:null)&&Oe(),c.bundleDetailsTab=e,c.bundleCodeFileRequest=null,t||(c.bundleSourceFile=null,c.bundleCodeHistory=null),c.bundleSourceFindingIdx=null}async function cE(e,t){try{let n=await _n(e);if(_())throw new DOMException("Local bundle closed","AbortError");let r=t.name.toLowerCase().endsWith(".map"),o=r?"sourcemap":"stasis";try{if(r)return bp(Ur(n),{integrity:e,kind:o,size:n.byteLength});let s=Ur(await lx(n,()=>!_())),i=Yw.parse(s);return{integrity:e,kind:o,size:n.byteLength,bundle:i}}catch(s){if(s.name==="AbortError")throw s;return{integrity:e,kind:o,size:n.byteLength,error:s.message}}}catch(n){if(n.name==="AbortError")throw n;return{integrity:e,error:n.message,size:0}}}function dE(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Fi(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Ml(e);if(Fi(e.integrity,t),c.bundleDetails!==e)return;e.fileHashes=t,O()}catch{}})()}}function uE(e){if(Mf(e))return Promise.resolve();if(ua.has(e))return ua.get(e);let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t||t.managedId)return Promise.resolve();let n=(async()=>{let r=await Rg(e);if(!(!r?.json&&!r?.bundle))try{let o=await Ml(r);Fi(e,o)}catch{}})();return ua.set(e,n),n.finally(()=>{ua.get(e)===n&&ua.delete(e)}).catch(()=>{}),n}async function Tg(e,t=()=>!0){let n=new Set(e);if(n.size!==0){await new Promise(r=>{let o=()=>setTimeout(r,0);typeof requestAnimationFrame=="function"?requestAnimationFrame(o):o()});for(let r of n){if(!t())return;await uE(r)}}}async function gd(e){let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t)return;let n;try{n=await mo(e,t,{sources:Xn(c.bundleDetailsTab,c.bundleSourceFile)})}catch(r){if(r.name==="AbortError")return;throw r}c.selectedBundle!==e||t.managedId&&!c.bundles.includes(t)||(c.bundleDetails=n,O(),dE(n),t.managedId||xt().catch(()=>{}))}function Ig(e=c.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Le():void 0,n=md.get(e);if(n&&n.signal===t)return n.job;let r=(c.bundles??[]).find(s=>s.integrity===e.integrity);if(!r)return Promise.resolve(null);let o=mo(e.integrity,r).then(s=>(t?.throwIfAborted(),c.bundleDetails!==e?s:s.error&&e.managedId?(e.sourceError=s.error,O(),null):(s.error||(s.fileHashes=e.fileHashes,s.fileSizes=e.fileSizes,s.lineCounts=e.lineCounts,s.codeStats=e.codeStats,e.edges&&(s.edges=e.edges)),c.bundleDetails=s,O(),s))).catch(s=>{if(s.name==="AbortError")return null;throw s});return md.set(e,{job:o,signal:t}),o.finally(()=>{md.get(e)?.job===o&&md.delete(e)}).catch(()=>{}),o}var hd=new WeakMap,dx=new WeakMap;function ks(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??"",r=t?.[2]??e,o=r.startsWith("/"),s=[];for(let i of r.split("/"))if(!(!i||i==="."))if(i===".."&&s.length>0&&s.at(-1)!=="..")s.pop();else{if(i===".."&&o&&s.length===0)return null;s.push(i)}return n+(o?"/":"")+s.join("/")}function ux(e){let t=new Map;for(let n of e.keys()){let r=ks(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function pE(e,t,n,r){let o=ks(n);if(o===null)return null;let s=typeof r=="string"?ks(`${r}/package.json`):null,i=o.slice(0,o.lastIndexOf("/")+1),a=dx.get(e);for(a||(a=new Map,dx.set(e,a));;){if(i.endsWith("node_modules/"))return null;let l=`${i}package.json`;if(t.has(l)){if(!a.has(l)){let d=e.get(t.get(l)),f=null;try{f=typeof d=="string"?JSON.parse(d.replace(/^\uFEFF/u,""))?.imports??null:null}catch{}a.set(l,f&&typeof f=="object"&&!Array.isArray(f)?f:null)}return{directory:i,imports:a.get(l)}}if(l===s||!i||i==="/"||i.endsWith("../")||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(i))return null;let p=i.slice(0,-1);i=p.slice(0,p.lastIndexOf("/")+1)}}function fE(e,t){if(!e)return null;if(Object.hasOwn(e,t)&&!t.includes("*"))return{value:e[t],wildcard:null};let n=null;for(let r of Object.keys(e)){let o=r.indexOf("*");if(!r.startsWith("#")||o===-1||r.indexOf("*",o+1)!==-1)continue;let s=r.slice(0,o),i=r.slice(o+1);t.length<=s.length+i.length||!t.startsWith(s)||!t.endsWith(i)||(!n||o>n.star||o===n.star&&r.length>n.pattern.length)&&(n={pattern:r,star:o,suffix:i})}return n?{value:e[n.pattern],wildcard:t.slice(n.star,t.length-n.suffix.length)}:null}function fx(e,t,n=0){return n>16?[null]:typeof e=="string"?[t===null?e:e.replaceAll("*",t)]:e&&typeof e=="object"?Object.values(e).flatMap(r=>fx(r,t,n+1)):[null]}function mE(e,t,n,r,o,s){if(typeof e!="string"||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let i=e.startsWith("./"),a=null;if(i){let f;try{f=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(f)||f.split("/").some(m=>[".","..","node_modules"].includes(m.toLowerCase())))return null;a=ks(t.directory+f)}else if(e.startsWith("../")||e.startsWith("/")||e.startsWith("#")||e.includes(":"))return null;let l=new Set([e]);if(i)for(let f of o?.keys()??[])(f.startsWith("./")||f.startsWith("../"))&&ks(s+f)===a&&l.add(f);let p=!1,d=null;for(let f of l){if(!o?.has(f))continue;let m=o.get(f);if(typeof m!="string"||!n.has(m)||p&&m!==d)return null;p=!0,d=m}return p?d:i?r.get(a)??null:null}function gE(e,t,n,r,o,s){let i=fE(e?.imports,t);if(!i)return null;let a=fx(i.value,i.wildcard),l=null;for(let p of a){let d=mE(p,e,n,r,o,s);if(!d||l&&d!==l)return null;l=d}return l}function Ag(e,t=Lt(e)){let n=new Map;if(e?.kind==="stasis")for(let r of e.bundle?.imports?.values()??[])for(let[o,s]of r){if(!t.has(o))continue;n.has(o)||n.set(o,new Map);let i=n.get(o);for(let[a,l]of s){let p=typeof l=="string"&&t.has(l)?l:null;i.set(a,i.has(a)&&i.get(a)!==p?null:p)}}else if(e?.kind==="sourcemap")for(let[r,o]of Xw(e))t.has(r)&&n.set(r,new Map([...o].map(([s,i])=>[s,t.has(i)?i:null])));return n}function bd(e,t,n=null,r=e,o=null){let s=hd.get(e);s||(s=ux(e),hd.set(e,s));let i=hd.get(r);i||(i=ux(r),hd.set(r,i));let a=n?.get(t),l=t.slice(0,t.lastIndexOf("/")+1),p=n?pE(r,i,t,o?.get(t)):null;return d=>{if(typeof d!="string"||/\p{Cc}/u.test(d))return null;if(a?.has(d)){let h=a.get(d);return typeof h=="string"&&e.has(h)?h:null}if(d.startsWith("#"))return gE(p,d,e,s,a,l);if(!d.startsWith("./")&&!d.startsWith("../"))return null;let f=d.slice(d.lastIndexOf("/")+1),m=f.lastIndexOf(".");return m<=0||m===f.length-1?null:s.get(ks(l+d))??null}}var px=new WeakMap;function Eg(e,t){let n=Lt(e),r=px.get(n);return r||(r={imports:Ag(e,n),packageDirs:Ot(e)},px.set(n,r)),bd(n,t,r.imports,we(e),r.packageDirs)}var gx=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u2800\u3000\p{Cf}\p{Cs}\p{Co}\p{Cn}\p{Default_Ignorable_Code_Point}]/u,yd=new RegExp(gx.source,"gu"),hE=new Map(`
|
|
13
|
+
`)}}function aE(e){return ur(e)&&(Me(e,c.triage.get(j(e)),Xo())==="ignored"||ct(e,Xo())&&Ur(c.triage,j(e),oE(e)))}function fa(e,t=he(e)){if(ur(e))return Me(e,t,Xo())??(aE(e)?"ignored":void 0)}function Ct(e){return ks()?.group===e?e:e.linkedTabs?e.linkedTabs:fo()?e:lx(e)}function lx(e){return e.length<=1||!e.some(Si)?e:e.filter(Si)}function pr(e){let t=Ct(e);return t.length<=1?t:[...t].toSorted((n,r)=>{let o=Si(n)?1:0,s=Si(r)?1:0;if(o!==s)return s-o;let i=he(n)?.color?1:0,a=he(r)?.color?1:0;if(i!==a)return a-i;let l=_e[de(n,c.severityMode)]||0,p=_e[de(r,c.severityMode)]||0;if(l!==p)return p-l;let d=n.confidence??-1;return(r.confidence??-1)-d})}function An(e){return e.length===1?e[0]:pr(e)[0]}function cx(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function lE(e){let t=he(e);return!!t?.comment||!!(t?.fix||tn(e))||t?.flagged===!0}function je(e){if(e.length===1)return e[0];let t=pr(e);if(t.length===1)return t[0];let n=c.activeTabByGroup.get(ie(e));if(n){let o=t.find(s=>j(s)===n);if(o)return o}let r=t;if(c.filterAnalyzer||c.filterModel){let o=t.filter(gg);o.length>0&&(r=o)}return r.find(lE)??r[0]}function dx(e){return e?._repoFallback||c.repoUrl||""}function En(e){return{github:dx(e),directory:e?._repoDirectory??""}}function ux(e){for(let t of Qt().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||dx(e)||null}function xs(e){if(!Array.isArray(e))return[];let t=e.filter(n=>!n.isUpstream);return t.length===0||t.length===e.length?e:t}function Fe(e){let t=xs(e),n=0,r=!1,o,s=!1,i=!1,a,l=!1,p=null,d=!1,f=!0;for(let w of t){let v=he(w),x=fa(w,v),$=v?.color;$===void 0&&x===void 0||(n++,$!==void 0&&(s?$!==o&&(r=!0):(s=!0,o=$)),l?x!==a&&(i=!0):(l=!0,a=x),x?(p===null&&(p=x),x==="ignored"&&v?.triage!=="ignored"?f=!1:d=!0):f=!1)}let m=r||i,h=!m&&s?o:null,b=n>0&&f,y=!m&&p!==null?p:null;return{hasConflict:m,commonColor:h,anyTriage:d,allTriaged:b,commonTriage:y,allIgnored:y==="ignored"&&n===t.length,isInProgress:y==="inprogress",isFixed:y==="fixed",isInvalid:y==="invalid",isDeleted:y==="deleted",isIgnored:y==="ignored"}}function nH(e,t){if(!Array.isArray(e)||e.length<2)return!1;let n=e.filter(_t);if(n.length<2)return!1;let r=(t??"").trim();return n.every(o=>cE(o,r))}function cE(e,t){if(!_t(e))return!1;let n=(he(e)?.fix??"").trim();return n===""||n===(t??"").trim()}function rH(e,t){if(!_t(je(e)))return{targets:[],clearing:!1};let n=Fe(e);return{targets:ma(e,n),clearing:t==="restore"||Sg(e,n)===t}}function ma(e,t=Fe(e)){let n=xs(e),r=e.linkedTabs||n!==e&&e.some(o=>o.isApp)?n:t.hasConflict?[je(e)]:n;return r.every(_t)?r:r.filter(_t)}function Sg(e,t=Fe(e),n=null){return e.linkedTabs||e.some(r=>r.isApp)&&xs(e)!==e||!t.hasConflict?t.commonTriage??null:fa(n??je(e))??null}function oH(e){let t=xs(e);if(t.length<2)return!1;let r=Fe(e).commonTriage;if(!r||r==="ignored"&&!t.some(s=>he(s)?.triage==="ignored"))return!1;let o=!1;for(let s of t){if(!_t(s))continue;let i=j(s),a=c.triage.get(i);fa(s,a)!==r&&(r==="ignored"&&ct(s,Xo())||r!=="ignored"&&a?.ignoredReports?.length||ae(c.triage,i,{triage:r})&&(o=!0))}return o}var gt=null;function fr(){gt=null}function bd(e,t=!1,n=!1){let r=c.reports,o=c.workspaceMerges,s=R();if(!gt||gt.reports.length!==r.length||gt.reports.some((a,l)=>a!==r[l])||gt.merges!==o||gt.mergeCount!==o.length||gt.securityLinksTick!==c.linksTick||gt.findingIndexTick!==c.findingIndexTick||gt.managed!==s){let a=r.flatMap(l=>l.groups??[]);Gn(a,md(a)),gt={reports:[...r],merges:o,mergeCount:o.length,managed:s,securityLinksTick:c.linksTick,findingIndexTick:c.findingIndexTick}}let i=t?"upstream":e?n?"workspace-app":"app":"code";return gt[i]||(gt[i]=fd(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:o})),gt[i]}function px(){return bd(c.showRevalidation!==!1).groups}function Cg(){return bd(!0).groups}function fx(){return bd(!0,!1,!!c.currentWorkspace).conflicts}function mr(){let e=bd(c.showRevalidation!==!1,c.upstreamOnly===!0,!!c.currentWorkspace),t=e.groups;if(c.showRevalidation===!1||c.upstreamOnly)return t;if(c.currentWorkspace){let n=fo();return(!e.linkedGroups||e.linksTick!==c.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=gd(t,xt,lx,Ct),e.linksTick=c.linksTick,e.linkedDetailed=n),e.linkedGroups}return fo()?t:e.visibleGroups??=(()=>{let n=t.flatMap(r=>{let o=r.filter(s=>!Jr(s));return o.length===r.length?[r]:o.length===0?[]:(o.workspaceKey=ie(r),[o])});return Object.defineProperty(n,"ruledOutIds",{value:t.ruledOutIds,configurable:!0}),n})()}function go(){let e=mr();if(c.viewMode==="kanban")return e;let t=e.filter(n=>Fe(n).commonTriage===c.shownTriage);return Object.defineProperty(t,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),t}function sH(e){if(c.showRevalidation||c.upstreamOnly||!Array.isArray(e)||e.length===0)return e;let t=new Set(e.map(j)),n=new Map;for(let r of Cg())for(let o of pa(r))if(o.some(s=>t.has(j(s))))for(let s of o)n.set(j(s),s);return n.size===e.length&&e.every(r=>n.get(j(r))===r)?e:n.size>0?[...n.values()]:e}function iH(e){let t=ks()?.group;if(t&&ie(t)===e)return t;for(let n of mr())if(ie(n)===e)return n;return null}var yd=class extends Et{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Rn(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,n=Rn(r=>{if(!r){n(),this._dispose===n&&(this._dispose=null),this.updateComplete.then(()=>this.requestUpdate());return}t=this._render()});return this._dispose=n,t}),this._disposers.push(()=>this._dispose&&this._dispose())}disconnectedCallback(){for(super.disconnectedCallback();this._disposers.length>0;)this._disposers.pop()()}};var Rg=zr;function mx(e){return e==null?"(none)":Rg[e]??e}function gx(e){return e??"(no model)"}var _g=class extends yd{static properties={analyzers:{attribute:!1},models:{attribute:!1},groups:{attribute:!1},_open:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.analyzers=[],this.models=[],this.groups=[],this._open=!1}render(){let t=this.analyzers.length>1,n=this.models.length>1;if(!t&&!n)return g;let r=c.filterAnalyzer===""?void 0:c.filterAnalyzer===vs?null:c.filterAnalyzer,o=c.filterModel===""?void 0:c.filterModel===$s?null:c.filterModel,s=new Map,i=new Map;for(let f of this.groups){let m=new Set,h=new Set;for(let b of f){let y=b._analyzer??null,w=da(b);(o===void 0||w===o)&&m.add(y),(r===void 0||y===r)&&h.add(w)}for(let b of m)s.set(b,(s.get(b)??0)+1);for(let b of h)i.set(b,(i.get(b)??0)+1)}let a=r===void 0?null:mx(r),l=o===void 0?null:gx(o),p=a!=null&&l!=null?`${a} \xB7 ${l}`:a??l??(t?"All analyzers":"All models"),d=a!=null||l!=null;return u`<button type="button" class="${q({"analyzer-btn":!0,active:d})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${p}`}"><span class="analyzer-btn-label">${p}</span> <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="analyzer-select-menu" class="analyzer-menu" @beforetoggle="${this._onToggle}">${t?this._column({dim:"analyzer",heading:"Analyzer",allLabel:"All analyzers",values:this.analyzers,sentinel:vs,labelOf:mx,counts:s,current:c.filterAnalyzer}):g} ${t&&n?u`<div class="analyzer-menu-sep"></div>`:g} ${n?this._column({dim:"model",heading:"Model",allLabel:"All models",values:this.models,sentinel:$s,labelOf:gx,counts:i,current:c.filterModel}):g}</div>`}_column({dim:t,heading:n,allLabel:r,values:o,sentinel:s,labelOf:i,counts:a,current:l}){return u`<div class="analyzer-menu-col" role="group" aria-label="${`Filter by ${t}`}"><div class="analyzer-menu-head">${n}</div><button type="button" aria-pressed="${String(l==="")}" class="${q({"analyzer-menu-item":!0,active:l===""})}" @click="${()=>this._pick(t,"")}"><span class="analyzer-menu-label">${r}</span></button> ${o.map(p=>{let d=p??s,f=a.get(p)??0,m=l===d;return u`<button type="button" aria-pressed="${String(m)}" class="${q({"analyzer-menu-item":!0,active:m,zero:f===0})}" @click="${()=>this._pick(t,d)}"><span class="analyzer-menu-label">${i(p)}</span><span class="analyzer-menu-count">${f}</span></button>`})}</div>`}_pick(t,n){let r=t==="analyzer"?c.filterAnalyzer:c.filterModel,o=n!==""&&r===n?"":n;this.dispatchEvent(new CustomEvent("analyzer-change",{detail:{analyzer:t==="analyzer"?o:c.filterAnalyzer,model:t==="model"?o:c.filterModel},bubbles:!0,composed:!0}))}_onToggle=t=>{this._open=t.newState==="open",this._open&&this._position()};_position(){let t=this.querySelector(".analyzer-menu"),n=this.querySelector(".analyzer-btn");if(!t||!n)return;let r=n.getBoundingClientRect(),o=t.offsetWidth||240,s=t.offsetHeight||200,i=4,a=r.left;a+o>window.innerWidth-4&&(a=window.innerWidth-o-4),a<4&&(a=4);let l=r.bottom+i;l+s>window.innerHeight-4&&r.top>s+i&&(l=r.top-s-i),t.style.top=`${l}px`,t.style.left=`${a}px`}updated(){this._open&&this.querySelector(".analyzer-menu")?.matches(":popover-open")&&this._position()}};customElements.define("analyzer-select",_g);var wd=["type","model","effort","exportsMode"],hx=["security","correctness"],dE=["max","xhigh","high","medium","low","minimal"],uE=["list","isolate"];function Mg(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}var pE={type:e=>e==="terminal"?hx.length+2:Mg(hx,e),model:e=>e==null?1:0,effort:e=>Mg(dE,e),exportsMode:e=>Mg(uE,e)};function fE(e,t,n){for(let r of n){let o=pE[r],s=o(e[r])-o(t[r]);if(s!==0)return s;let i=String(e[r]??"").localeCompare(String(t[r]??""));if(i!==0)return i}return 0}function bx(e,t,{typePrefix:n=!0}={}){return e==="type"?n?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function mE(e,t){let n=t.filter(s=>s!=="exportsMode"),r=[],o=new Map;for(let s of e){if(s.exportsMode==null){r.push({...s});continue}let i=n.map(p=>s[p]??"").join("|"),a=o.get(i);if(a){a.exportsMode=`${a.exportsMode}+${s.exportsMode}`;continue}let l={...s};o.set(i,l),r.push(l)}return r}function yx(e,t=wd){let n=new Map;for(let m of e){let h={};for(let y of t)h[y]=y==="model"?gl(m.model)??null:m[y]??null;let b=t.map(y=>h[y]??"").join("|");n.has(b)||n.set(b,h)}let r=[...n.values()].toSorted((m,h)=>fE(m,h,t));if(r.length===0)return[];let o={};for(let m of t)o[m]=new Set(r.map(h=>h[m])).size===1;let s=t.filter(m=>!o[m]),i=s.includes("exportsMode")?mE(r,t):r,a=i.length>2&&s.includes("type")&&s.length>1,l=["model","effort"].filter(m=>t.includes(m)&&o[m]),p=[...l,...t.filter(m=>!l.includes(m))],d=[],f=!1;for(let m of p)if(o[m]){let h=bx(m,i[0][m]);h!=null&&d.push(h)}else if(!f){for(let h of i){let b=s.map(y=>bx(y,h[y],{typePrefix:!a})).filter(y=>y!=null);b.length>0&&d.push(b.join(" \xB7 "))}f=!0}return d}function wx(e=!1,t=""){let n=new Set;return["deepview",...e?["security"]:[],...t.split(",")].map(r=>r.trim()).filter(r=>{let o=r.toLowerCase();return!r||n.has(o)?!1:(n.add(o),!0)})}var vd=null;function gE(){return vd||(vd=(async()=>await import("./prism.js"))(),vd)}var vx=1024*1024;function hE(e){return e.length<=vx&&wn(e)<=vx}var bE={__proto__:null,js:"javascript",javascript:"javascript",mjs:"javascript",cjs:"javascript",node:"javascript",jsx:"jsx",ts:"typescript",typescript:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",markup:"markup",yaml:"yaml",yml:"yaml",sh:"bash",bash:"bash",shell:"bash",zsh:"bash",console:"bash",md:"markdown",markdown:"markdown",sol:"solidity",solidity:"solidity",rs:"rust",rust:"rust",rb:"ruby",ruby:"ruby",py:"python",python:"python",py3:"python",python3:"python",php:"php",phtml:"php",java:"java",cpp:"cpp","c++":"cpp",cc:"cpp",cxx:"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp","h++":"cpp",h:"cpp",c:"c",objc:"objectivec",objectivec:"objectivec","objective-c":"objectivec",m:"objectivec",mm:"objectivec"};function $x(e){return typeof e!="string"?null:bE[e.toLowerCase()]??null}async function Ss(e,t,n=null){if(!t||!hE(e))return null;try{return(await gE()).highlight(e,t,n)}catch{return null}}function IH(e){let t=[],n=[],r="",o=0;for(;o<e.length;){let s=e.indexOf("<",o),a=(s===-1?e.slice(o):e.slice(o,s)).split(`
|
|
14
|
+
`);r+=a[0];for(let d=1;d<a.length;d++){for(let f=n.length-1;f>=0;f--)r+=n[f].close;t.push(r),r=n.map(f=>f.open).join("")+a[d]}if(s===-1)break;let l=e.indexOf(">",s);if(l===-1){r+=e.slice(s);break}let p=e.slice(s,l+1);p.startsWith("</")?n.pop():n.push({open:p,close:`</${/^<([a-zA-Z][^\s/>]*)/u.exec(p)?.[1]??"span"}>`}),r+=p,o=l+1}return t.push(r),t}var Tg=new Map,Ig=new Set,Ag=!1;function yE(){Ag||(Ag=!0,queueMicrotask(()=>{Ag=!1,c.codeBlockTick++,O()}))}function Eg(e,t){let n=$x(t);if(!n||!e)return null;let r=`${n}\0${e}`;return Tg.has(r)?Tg.get(r):(Ig.has(r)||(Ig.add(r),(async()=>{let o=await Ss(e,n);Tg.set(r,o??null),Ig.delete(r),yE()})()),null)}var $d=null,kd=null;function wE(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function vE(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function $E(){if("serviceWorker"in navigator)try{let e=await navigator.serviceWorker.getRegistrations();for(let t of e){let n=t.active?.scriptURL??t.installing?.scriptURL??t.waiting?.scriptURL;n&&n.endsWith("/brotli-sw.js")&&await t.unregister()}}catch{}}var kx="./brotli-fallback.js",xd=Symbol("brotli worker unavailable"),sn=null,Fg=!1,kE=0,Cs=new Map;function xE(){return kd||(kd=(async()=>await import(kx))(),kd)}function Lg(){Fg=!0,sn&&(sn.terminate(),sn=null);let e=[...Cs.values()];Cs.clear();for(let t of e)t.resolve(xd)}function SE(e){let{id:t,bytes:n,error:r}=e.data??{},o=Cs.get(t);o&&(Cs.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function CE(){if(sn)return sn;if(Fg||typeof Worker>"u")return null;try{sn=new Worker(new URL(kx,import.meta.url),{type:"module"})}catch{return Fg=!0,null}return sn.addEventListener("message",SE),sn.addEventListener("error",Lg),sn.addEventListener("messageerror",Lg),sn}function _E(e){let t=CE();return t?new Promise((n,r)=>{let o=++kE;Cs.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{Cs.delete(o),Lg(),n(xd)}}):Promise.resolve(xd)}async function RE(){await $E();let e=wE();return e?{kind:"native",format:e}:{kind:"fallback"}}function xx(){return $d||($d=RE(),$d)}async function Sx(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await xx();if(n(),r.kind==="native")return vE(r.format,e);let o=await _E(e);return n(),o!==xd?o:(await xE()).brotliDecompress(e)}xx().catch(()=>{});var Cx=0,Og=new AbortController;function me(){return Cx}function Le(){return Og.signal}function Oe(){return Og.abort(),Og=new AbortController,++Cx}var ME=new Map,TE=new Map,ga=new Map,Sd=new WeakMap;async function Ng(e){try{let t=await lf(e);return t?wi(t,e):null}catch{return null}}var gr=null;function qH(e){let t=new Map(e.filter(n=>n&&!n.error).map(n=>[n.integrity,n]));return gr=t.size>0?{bundles:t}:null,gr}function YH(e){gr===e&&(gr=null)}function Bg(e,t=()=>!0){let n=gr?.bundles.get(e);return!n||!t(n)?null:(gr.bundles.delete(e),gr.bundles.size===0&&(gr=null),n)}function ho(e,t,{sources:n=!0}={}){if(!t.managedId&&R())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let r=n?ME:TE,o=t.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis",s=c.bundleDetails;if(s?.integrity===e&&s.kind===o&&s.managedId===t.managedId&&!s.error&&(!n||!s.metadataOnly))return Promise.resolve(s);let i=Bg(e,f=>f.kind===o&&f.managedId===t.managedId&&(!n||!f.metadataOnly));if(i)return Promise.resolve(i);let a=`${t.managedId??"local"}:${e}:${o}`,l=t.managedId&&n?Le():void 0,p=r.get(a);if(p&&p.signal===l)return p.job;let d=(async()=>{if(t.managedId)try{let h=n?Mp(await u0(t.managedId,{signal:l}),{integrity:e,kind:o,size:t.size}):wi(await Kc(t.managedId),e);return h.managedId=t.managedId,h}catch(h){if(h.name==="AbortError")throw h;return{integrity:e,kind:o,size:t.size,managedId:t.managedId,error:h.message}}if(!n){let h=await Ng(e);return h?.kind===o&&!h.stale?h:ho(e,t)}let[f,m]=await Promise.all([IE(e,t),Ng(e)]);if(!f.error){let h=m?.kind===f.kind&&!m.stale;h&&(f.fileHashes=m.fileHashes,f.fileSizes=m.fileSizes,f.lineCounts=m.lineCounts),h||mv(f).then(b=>cf(e,b)).catch(()=>{})}return f})();return r.set(a,{job:d,signal:l}),d.finally(()=>{r.get(a)?.job===d&&r.delete(a)}).catch(()=>{}),d}function hr(e,t=c.currentView==="bundles"?c.bundleDetailsTab:"overview",{workspaceId:n=null}={}){let r=c.bundleDetails,o=c.bundleCodeFileRequest,s=o?.bundle===c.selectedBundle&&(!r||r.metadataOnly===!0&&!r.sourceError),i=c.currentView==="bundles"&&c.bundleDetailsTab==="code"&&t==="code"?c.bundleSourceFile??(s?o.path:null):null;Oe(),c.currentView="bundles",c.selectedBundle=e,c.selectedBundleWorkspace=n,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleCodeHistory=null,c.bundleCodeFileRequest=i?{bundle:e,path:i}:null,c.bundleCompare=null,c.bundleSourceFindingIdx=null,c.bundleCodeSearchQuery="",c.bundleCodeSearchMode="files",c.bundleSearchQuery="",c.bundleSearchRegex=!1,c.bundleSearchCase=!1,c.bundleSearchContext=!0,c.bundleDetailsTab=t??"overview",ee.showAll=!0,c.shownTriage=null}function XH(e,{preserveSource:t=!1}={}){Xn(c.bundleDetailsTab,c.bundleSourceFile)&&!Xn(e,t?c.bundleSourceFile:null)&&Oe(),c.bundleDetailsTab=e,c.bundleCodeFileRequest=null,t||(c.bundleSourceFile=null,c.bundleCodeHistory=null),c.bundleSourceFindingIdx=null}async function IE(e,t){try{let n=await _n(e);if(R())throw new DOMException("Local bundle closed","AbortError");let r=t.name.toLowerCase().endsWith(".map"),o=r?"sourcemap":"stasis";try{if(r)return Mp(Vr(n),{integrity:e,kind:o,size:n.byteLength});let s=Vr(await Sx(n,()=>!R())),i=av.parse(s);return{integrity:e,kind:o,size:n.byteLength,bundle:i}}catch(s){if(s.name==="AbortError")throw s;return{integrity:e,kind:o,size:n.byteLength,error:s.message}}}catch(n){if(n.name==="AbortError")throw n;return{integrity:e,error:n.message,size:0}}}function AE(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Bi(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Ll(e);if(Bi(e.integrity,t),c.bundleDetails!==e)return;e.fileHashes=t,O()}catch{}})()}}function EE(e){if(Bf(e))return Promise.resolve();if(ga.has(e))return ga.get(e);let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t||t.managedId)return Promise.resolve();let n=(async()=>{let r=await Ng(e);if(!(!r?.json&&!r?.bundle))try{let o=await Ll(r);Bi(e,o)}catch{}})();return ga.set(e,n),n.finally(()=>{ga.get(e)===n&&ga.delete(e)}).catch(()=>{}),n}async function Pg(e,t=()=>!0){let n=new Set(e);if(n.size!==0){await new Promise(r=>{let o=()=>setTimeout(r,0);typeof requestAnimationFrame=="function"?requestAnimationFrame(o):o()});for(let r of n){if(!t())return;await EE(r)}}}async function Cd(e){let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t)return;let n;try{n=await ho(e,t,{sources:Xn(c.bundleDetailsTab,c.bundleSourceFile)})}catch(r){if(r.name==="AbortError")return;throw r}c.selectedBundle!==e||t.managedId&&!c.bundles.includes(t)||(c.bundleDetails=n,O(),AE(n),t.managedId||kt().catch(()=>{}))}function Dg(e=c.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Le():void 0,n=Sd.get(e);if(n&&n.signal===t)return n.job;let r=(c.bundles??[]).find(s=>s.integrity===e.integrity);if(!r)return Promise.resolve(null);let o=ho(e.integrity,r).then(s=>(t?.throwIfAborted(),c.bundleDetails!==e?s:s.error&&e.managedId?(e.sourceError=s.error,O(),null):(s.error||(s.fileHashes=e.fileHashes,s.fileSizes=e.fileSizes,s.lineCounts=e.lineCounts,s.codeStats=e.codeStats,e.edges&&(s.edges=e.edges)),c.bundleDetails=s,O(),s))).catch(s=>{if(s.name==="AbortError")return null;throw s});return Sd.set(e,{job:o,signal:t}),o.finally(()=>{Sd.get(e)?.job===o&&Sd.delete(e)}).catch(()=>{}),o}var _d=new WeakMap,_x=new WeakMap;function _s(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??"",r=t?.[2]??e,o=r.startsWith("/"),s=[];for(let i of r.split("/"))if(!(!i||i==="."))if(i===".."&&s.length>0&&s.at(-1)!=="..")s.pop();else{if(i===".."&&o&&s.length===0)return null;s.push(i)}return n+(o?"/":"")+s.join("/")}function Rx(e){let t=new Map;for(let n of e.keys()){let r=_s(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function FE(e,t,n,r){let o=_s(n);if(o===null)return null;let s=typeof r=="string"?_s(`${r}/package.json`):null,i=o.slice(0,o.lastIndexOf("/")+1),a=_x.get(e);for(a||(a=new Map,_x.set(e,a));;){if(i.endsWith("node_modules/"))return null;let l=`${i}package.json`;if(t.has(l)){if(!a.has(l)){let d=e.get(t.get(l)),f=null;try{f=typeof d=="string"?JSON.parse(d.replace(/^\uFEFF/u,""))?.imports??null:null}catch{}a.set(l,f&&typeof f=="object"&&!Array.isArray(f)?f:null)}return{directory:i,imports:a.get(l)}}if(l===s||!i||i==="/"||i.endsWith("../")||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(i))return null;let p=i.slice(0,-1);i=p.slice(0,p.lastIndexOf("/")+1)}}function LE(e,t){if(!e)return null;if(Object.hasOwn(e,t)&&!t.includes("*"))return{value:e[t],wildcard:null};let n=null;for(let r of Object.keys(e)){let o=r.indexOf("*");if(!r.startsWith("#")||o===-1||r.indexOf("*",o+1)!==-1)continue;let s=r.slice(0,o),i=r.slice(o+1);t.length<=s.length+i.length||!t.startsWith(s)||!t.endsWith(i)||(!n||o>n.star||o===n.star&&r.length>n.pattern.length)&&(n={pattern:r,star:o,suffix:i})}return n?{value:e[n.pattern],wildcard:t.slice(n.star,t.length-n.suffix.length)}:null}function Tx(e,t,n=0){return n>16?[null]:typeof e=="string"?[t===null?e:e.replaceAll("*",t)]:e&&typeof e=="object"?Object.values(e).flatMap(r=>Tx(r,t,n+1)):[null]}function OE(e,t,n,r,o,s){if(typeof e!="string"||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let i=e.startsWith("./"),a=null;if(i){let f;try{f=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(f)||f.split("/").some(m=>[".","..","node_modules"].includes(m.toLowerCase())))return null;a=_s(t.directory+f)}else if(e.startsWith("../")||e.startsWith("/")||e.startsWith("#")||e.includes(":"))return null;let l=new Set([e]);if(i)for(let f of o?.keys()??[])(f.startsWith("./")||f.startsWith("../"))&&_s(s+f)===a&&l.add(f);let p=!1,d=null;for(let f of l){if(!o?.has(f))continue;let m=o.get(f);if(typeof m!="string"||!n.has(m)||p&&m!==d)return null;p=!0,d=m}return p?d:i?r.get(a)??null:null}function NE(e,t,n,r,o,s){let i=LE(e?.imports,t);if(!i)return null;let a=Tx(i.value,i.wildcard),l=null;for(let p of a){let d=OE(p,e,n,r,o,s);if(!d||l&&d!==l)return null;l=d}return l}function zg(e,t=Ot(e)){let n=new Map;if(e?.kind==="stasis")for(let r of e.bundle?.imports?.values()??[])for(let[o,s]of r){if(!t.has(o))continue;n.has(o)||n.set(o,new Map);let i=n.get(o);for(let[a,l]of s){let p=typeof l=="string"&&t.has(l)?l:null;i.set(a,i.has(a)&&i.get(a)!==p?null:p)}}else if(e?.kind==="sourcemap")for(let[r,o]of lv(e))t.has(r)&&n.set(r,new Map([...o].map(([s,i])=>[s,t.has(i)?i:null])));return n}function Rd(e,t,n=null,r=e,o=null){let s=_d.get(e);s||(s=Rx(e),_d.set(e,s));let i=_d.get(r);i||(i=Rx(r),_d.set(r,i));let a=n?.get(t),l=t.slice(0,t.lastIndexOf("/")+1),p=n?FE(r,i,t,o?.get(t)):null;return d=>{if(typeof d!="string"||/\p{Cc}/u.test(d))return null;if(a?.has(d)){let h=a.get(d);return typeof h=="string"&&e.has(h)?h:null}if(d.startsWith("#"))return NE(p,d,e,s,a,l);if(!d.startsWith("./")&&!d.startsWith("../"))return null;let f=d.slice(d.lastIndexOf("/")+1),m=f.lastIndexOf(".");return m<=0||m===f.length-1?null:s.get(_s(l+d))??null}}var Mx=new WeakMap;function Wg(e,t){let n=Ot(e),r=Mx.get(n);return r||(r={imports:zg(e,n),packageDirs:Nt(e)},Mx.set(n,r)),Rd(n,t,r.imports,we(e),r.packageDirs)}var Ax=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u2800\u3000\p{Cf}\p{Cs}\p{Co}\p{Cn}\p{Default_Ignorable_Code_Point}]/u,Md=new RegExp(Ax.source,"gu"),BE=new Map(`
|
|
15
15
|
0000 NUL NULL
|
|
16
16
|
0001 SOH START OF HEADING
|
|
17
17
|
0002 STX START OF TEXT
|
|
@@ -128,78 +128,78 @@ E0001 LANG LANGUAGE TAG
|
|
|
128
128
|
E0020 SP TAG SPACE
|
|
129
129
|
E007F CANCEL CANCEL TAG
|
|
130
130
|
`.trim().split(`
|
|
131
|
-
`).map(e=>{let[,t,n,r]=/^(\S+) (\S+) (.+)$/u.exec(e);return[Number.parseInt(t,16),{label:n,name:r}]})),pa=e=>`U+${e.toString(16).toUpperCase().padStart(4,"0")}`;function hx(e){let t=hE.get(e);if(t)return{label:t.label,title:`${pa(e)} ${t.name}`};if(e>917536&&e<917631){let r=String.fromCodePoint(e-917504);return{label:r,title:`${pa(e)} TAG ${r}`}}let n=e>=65024&&e<=65039?e-65024+1:e>=917760&&e<=917999?e-917760+17:0;return n?{label:`VS${n}`,title:`${pa(e)} VARIATION SELECTOR-${n}`}:{label:pa(e),title:`${pa(e)} ${vE(e)}`}}var bE=/\p{Cf}/u,yE=/\p{Default_Ignorable_Code_Point}/u,wE=/\p{Cn}/u;function vE(e){if(e>=55296&&e<57344)return"lone surrogate";if((e&65534)===65534||e>=64976&&e<=65007)return"noncharacter";if(e>=57344&&e<=63743||e>=983040)return"private use character";let t=String.fromCodePoint(e);return bE.test(t)?"format character":yE.test(t)&&!wE.test(t)?"invisible character":"unassigned code point"}function bx(e,t){let n=[];yd.lastIndex=0;for(let r=yd.exec(e);r;r=yd.exec(e)){let o=r[0].codePointAt(0),s=hv(e,r.index,o,t);s===-1?n.push([r.index,o]):yd.lastIndex=s}return n}function xs(e){return gx.test(e)}var $E=e=>{let{label:t,title:n}=hx(e);return u`<span class="code-control" data-tooltip="${n}">${t}</span>`};function yx(e,t=!1){if(!xs(e))return[e];let n=[],r=0;for(let[o,s]of bx(e,t))o>r&&n.push(e.slice(r,o)),n.push($E(s)),r=o+(s>65535?2:1);return r<e.length&&n.push(e.slice(r)),n}var mx=e=>e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""");function wd(e,t=!1){if(!xs(e))return e;let n="",r=[];for(let a=0;a<e.length;){let l=e.indexOf("<",a),p=l===-1?e.length:l;if(p>a&&(r.push({text:n.length,markup:a}),n+=e.slice(a,p)),l===-1)break;let d=e.indexOf(">",l);a=d===-1?e.length:d+1}let o="",s=0,i=0;for(let[a,l]of bx(n,t)){for(;r[i+1]?.text<=a;)i++;let p=r[i].markup+a-r[i].text,{label:d,title:f}=hx(l);o+=`${e.slice(s,p)}<span class="code-control" data-tooltip="${mx(f)}">${mx(d)}</span>`,s=p+(l>65535?2:1)}return o+e.slice(s)}function vd(e,t){return!!e&&!!t&&e.integrity===t.integrity&&e.file===t.file&&(e.range?.start??null)===(t.range?.start??null)&&(e.range?.end??null)===(t.range?.end??null)}var kE=[];function Fg(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!vd(e[0],n))return{stack:kE,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function gH({stack:e,at:t,base:n},r){let o=e.length>0?e[t]:n;if(vd(o,r))return null;let s=e.length>0?e.slice(0,t+1):[n];return{stack:[...s,r],at:s.length}}function hH(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}function wx(e,t){if(!e||!t||t.length===0)return;let n=e.getBoundingClientRect().top,r=t[0].getBoundingClientRect(),o=t.item(t.length-1).getBoundingClientRect(),s=r.top-n+e.scrollTop,i=o.bottom-n+e.scrollTop,a=s+(i-s)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(a,s-r.height)),behavior:"instant"})}var fa=new Map,Og=new Map,xE=new Set,vx=new WeakMap,Lg=new Set;function $x(e,t,n,r,o,s=Og,i=xE){let a=`${e}\0${t}`;if(s.has(a)||i.has(a))return;let l=mi(t,r,n);if(!l){s.set(a,null);return}i.add(a),(async()=>{let p=await vs(n,l,o);s.set(a,typeof p=="string"?wd(p):null),i.delete(a),c.focusCodeTick++,queueMicrotask(O)})()}async function SE(e){let t=fa.get(e);if(t&&(t.loading||t.sources))return;let n=(c.bundles??[]).find(r=>r.integrity===e);if(n){fa.set(e,{sources:null,loading:!0,error:null});try{let r=await mo(e,n),o=Lt(r);fa.set(e,{sources:o,packageFiles:we(r),packageDirs:Ot(r),imports:Ag(r,o),formats:r.kind==="stasis"?r.bundle?.formats:null,loading:!1,error:r.error??null})}catch(r){fa.set(e,{sources:null,loading:!1,error:r.message})}c.focusCodeTick++,queueMicrotask(O),queueMicrotask(kx)}}function kx(){let e=be.querySelectorAll(".focus-code-line-active");e.length!==0&&wx(e[0].closest(".focus-code-body"),e)}function ma(e){if(_()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;c.focusCodeTick;let n=Bc(e._managedReportId);if(n?.data===null||n?.error)return null;let r={integrity:n?.data?.integrity??null,reportId:e._managedReportId},o=[e,...Array.isArray(e.evidence)?e.evidence:[]];for(let s of o){let i=ga(r,s?.file);if(i)return{...r,file:i,line:s.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null:ro(e.fileHash).find(({integrity:n})=>t.includes(n))??null}function ga(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return Rf(e.integrity,t);let n=Bc(e.reportId);if(!n||n.data===void 0&&!n.error)return t;let r=n.data;return r?.paths.get(t)??(r?.sources.has(t)?t:null)}function xx(e,t,n){if(!_())return null;let r=Bc(e);if(!r||r.data===void 0&&!r.error)return n&&!Lg.has(e)&&(Lg.add(e),Sk(e).catch(()=>{}).finally(()=>{Lg.delete(e),c.focusCodeTick++,queueMicrotask(O),queueMicrotask(kx)})),n?{loading:!0}:null;let o=r.data;if(!o)return null;t=o.paths.get(t)??t;let s=o.sources.get(t);if(typeof s!="string")return null;let i=vx.get(o);return i||(i={cache:new Map,pending:new Set},vx.set(o,i)),$x(o.integrity,t,s,o.formats?.get(t),bd(o.sources,t,o.imports,o.sources,o.packageDirs),i.cache,i.pending),{content:s,highlighted:i.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function go(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return xx(r,t,n);if(_())return null;let o=fa.get(e);if(!o)return n?(SE(e),{loading:!0}):null;if(o.loading&&!n)return null;if(o.loading)return{loading:!0};if(!o.sources)return null;let s=o.sources.get(t);if(typeof s!="string")return null;$x(e,t,s,o.formats?.get(t),bd(o.sources,t,o.imports,o.packageFiles,o.packageDirs));let i=`${e}\0${t}`;return{content:s,highlighted:Og.has(i)?Og.get(i):void 0,loading:!1}}function Sx(e){let t=ma(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:ki(t.reportId?t.line:e.line)}:null}function CE(e){return e?Sx(je(e)):null}function $d(e){let t=CE(e);return t?{base:t,...Fg(c.focusCodeStack,c.focusCodeAt,t)}:null}function Cx(e){let t=Sx(e);return t?Fg(c.focusCodeStack,c.focusCodeAt,t).pos:null}function EH(e,t,n,r){let o=$d(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let s=je(e),i=go(t,r,{kick:!1,reportId:s?._managedReportId});return i&&!i.loading?{integrity:t,file:r,range:null}:null}function _x(e){let t=e&&je(e),n=ma(t);if(n?.reportId&&!n.integrity)return xx(n.reportId,n.file,!0);let r=$d(e);if(!r)return null;let{pos:o}=r,s=go(o.integrity,o.file,{reportId:t?._managedReportId});return!s||s.loading?s:{...s,file:o.file,integrity:o.integrity,range:o.range}}function kd(e,{teamOnly:t=!1,reportId:n}={}){if(!e)return null;let r=j(e);if(!Vr(r))return null;if(_()){let i=t?null:n??(c.currentView==="links"?e._managedReportId:c.currentManagedReport),a=Ye(Xe({view:"findings",teamId:c.currentManagedTeam,reportId:i,finding:{id:r}},c.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||c.currentFile||"",s=c.currentWorkspace||Ss(o);return fp({id:r,report:c.currentWorkspace?null:Sl("report",o),workspace:Sl("workspace",s??"")})}function Ss(e,t=c.currentReportWorkspace||c.currentWorkspace){let n=ji(e);return n.some(r=>r.id===t)?t:n.length===1?n[0].id:null}function zH(e){for(let t of[fr(),X0()])for(let n of t)for(let r of n)if(j(r)===e)return{group:n,finding:r};return null}function _E(e,t){c.currentView="findings",c.viewMode==="graph"&&(c.viewMode="table",Bt());let n=Fe(e).commonTriage;if(c.viewMode==="kanban"){let i=n??"untriaged";c.kanbanExpandedColumn!==null&&c.kanbanExpandedColumn!==i&&(c.kanbanExpandedColumn=null)}else n!==c.shownTriage&&(c.shownTriage=n);c.upstreamOnly&&!e.every(i=>i.isUpstream)&&(c.upstreamOnly=!1),vi(c.showRevalidation,c.upstreamOnly);let r=e.find(i=>j(i)===t);if(Yr(r)||nd(fo())&&!A0(e)||!ur(e).some(i=>j(i)===t))if(c.currentWorkspace){r?.isUpstream?c.upstreamOnly=!0:c.showRevalidation=!1,vi(c.showRevalidation,c.upstreamOnly);let i=fr().find(a=>a.some(l=>j(l)===t));if(i)return _E(i,t)}else c.revalidationDetailed=!0;if(rd([e]).length===0){let i=c.sortBy;td(),c.sortBy=i}let s=ie(e);return e.length>1&&c.activeTabByGroup.set(s,t),c.viewMode==="table"?c.tableSelectedGid=s:c.viewMode==="focus"?c.focusGid=s:c.viewMode==="kanban"&&(c.kanbanPopoverGid=s),s}function Rx(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function Mx(e,t){if(e.createdAt==null&&t.createdAt!=null)return-1;if(e.createdAt!=null&&t.createdAt==null)return 1;let n=(e.createdAt??0)-(t.createdAt??0);return n!==0?n:e.id===t.id?0:e.id<t.id?-1:1}var ha=new Map;function KH(e,t){ha.has(e)||ha.set(e,new Set);let n=ha.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&ha.delete(e)}}function Ng(e,t){c.managedComments.set(e,t);for(let n of ha.get(e)??[])n()}function Tx(e){return _()?c.managedComments?.get(e?.id)??[]:[]}function Ix(){return _()&&c.managedSession!=null&&Yn(c.managedSession.role,"triage")}function RE(e){return Ix()&&Rx(e,c.managedSession)}function Bg(e){let t=c.reports,n=c.managedSession?.id;return()=>_()&&n!=null&&c.managedSession?.id===n&&c.reports===t&&c.managedReports.some(r=>r.id===e)}async function xd(e,{signal:t,readAnnotations:n}={}){let r=Bg(e);if(!r())return!1;let o=new Set(c.reports.filter(l=>l._managedReportId===e).flatMap(l=>l.groups.flatMap(p=>p.map(d=>d.id)))),s=new Map([...o].map(l=>[l,c.managedComments.get(l)])),i=n?(await n(e))?.comments:await Hk(e,c.currentManagedTeam,{signal:t});if(!r()||i==null||t?.aborted)return!1;let a=new Map([...o].map(l=>[l,[]]));for(let l of i)a.has(l.findingId)&&a.get(l.findingId).push(l);for(let[l,p]of a)c.managedComments.get(l)===s.get(l)&&Ng(l,p);return!0}async function qH(e,t,n=null){let r=e?._managedReportId,o=Bg(r);if(!o()||!Ix())return{status:403};if(n&&n.authorId!==c.managedSession.id)return{status:403};let s=await Uk(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},c.managedSession.csrfToken);if(!o())return{status:0};if(s.comment){let a=(c.managedComments.get(e.id)??[]).filter(l=>l.id!==s.comment.id);a.push(s.comment),a.sort(Mx),Ng(e.id,a)}return s}async function YH(e,t){let n=e?._managedReportId,r=Bg(n);if(!r()||!RE(t))return 403;let o=await Vk(n,t.id,t.version,c.managedSession.csrfToken);if(!r())return 0;if(o===204){let s=c.managedComments.get(e.id)??[];Ng(e.id,s.filter(i=>i.id!==t.id))}return o}function Sd(e){return qv(e,{managed:_()}).map(t=>typeof t=="string"?t:t.self?u`<a class="comment-self-ref" href="${t.url}">${t.label}</a>`:u`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Cd=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Cs=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 3 5 8l5 5"/></svg>`,_s=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3 11 8l-5 5"/></svg>`,Ax=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 3.5h12M2 8h9a2.5 2.5 0 0 1 0 5H8.5M10 11.5 8.5 13l1.5 1.5M2 13h3.5"/></svg>`,Ex=u`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M5 2h8a1 1 0 0 1 1 1v8M3 5h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1ZM4.5 9.5h4"/></svg>`,nU=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 4.5a1 1 0 0 1 1-1h3.2l1.3 1.5H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4.5Z"/></svg>`,rU=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 4.5L2 8l3.5 3.5"/><path d="M10.5 4.5L14 8l-3.5 3.5"/></svg>`;function st(e){return e==="informational"?"info":e.replaceAll("_"," ")}function Pg(e,{variant:t="full"}={}){let n=c.severityMode,r=de(e,n),o=u`<span class="${`badge ${r}`}">${st(r)}</span>`,s=No(e),i=t==="tab"?null:vw(e);if(!s&&!i)return o;let a=i?`Corrected severity varies across reports \u2014 ${Object.entries(i).map(([k,$])=>`${k||"(this report)"}: ${st($.severity)}`).join("; ")}`:null,l=i?u`<span class="badge-varies" data-tooltip="${a}" aria-label="${a}">varies</span>`:g;if(!s)return u`<span class="${`badge-pair badge-pair-${t}`}">${o}${l}</span>`;let p=de(e,"original"),d=ai(e),f=e.correctedSeverityReason,m=(_e[d]??0)>(_e[p]??0),h=m?"up":"down",b=m?"\u25B2":"\u25BC",y=n!=="original",w=(y?`Corrected ${h} from ${st(p)}`:`Original severity \u2014 corrected ${h} to ${st(d)}`)+(f?` \u2014 ${f}`:""),v=`Severity ${st(r)}; ${y?`corrected ${h} from ${st(p)}`:`original, corrected to ${st(d)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return u`<span class="badge-pair badge-pair-tab" data-tooltip="${w}" aria-label="${v}">${o}<span class="${`badge-corr-mark ${h}`}" aria-hidden="true">${b}</span></span>`;let x=y?p:d;return u`<span class="${`badge-pair badge-pair-${t}`}" data-tooltip="${w}" aria-label="${v}">${o}<span class="badge-orig-wrap"><span class="${`badge-arrow ${h}`}" aria-hidden="true">${b}</span>${y?u`<span class="badge-pre" aria-hidden="true">was</span>`:g}<span class="${`badge-orig ${x}${y?" struck":""}`}">${st(x)}</span></span>${l}</span>`}var Fx=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;function ya(e){Fx.lastIndex=0;let t=[],n=0,r;for(;(r=Fx.exec(e))!==null;){r.index>n&&t.push(e.slice(n,r.index));let o=r[0].codePointAt(0);if(o===91){let s=Vv(r[0]);t.push(s?u`<a href="${s.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${s.url}">${s.label}</a>`:r[0])}else o===42?t.push(u`<strong>${r[0].slice(2,-2)}</strong>`):o===96?t.push(u`<span class="inline-code">${r[0].slice(1,-1)}</span>`):t.push(u`<span class="inline-quote">${r[0]}</span>`);n=r.index+r[0].length}return n===0?e:(n<e.length&&t.push(e.slice(n)),t)}function ME({lang:e,code:t}){c.codeBlockTick;let n=xg(t,e);return u`<div class="code-block" data-lang="${e||g}">${e?u`<div class="code-block-lang">${e}</div>`:g}<pre><code>${n?W(n):t}</code></pre></div>`}function TE(e,{wrap:t=!1}={}){let n=e.split(/\n{2,}/u).filter(r=>r.trim());return n.length<2?t?u`<div class="para">${ya(e)}</div>`:ya(e):n.map(r=>u`<div class="para">${ya(r)}</div>`)}function IE({ordered:e,start:t,items:n}){let r=n.map(o=>u`<li>${it(o)}</li>`);return e?u`<ol class="md-list" start="${t>1?t:g}">${r}</ol>`:u`<ul class="md-list">${r}</ul>`}function it(e,{paragraphs:t=!0}={}){if(!e)return e;let n=t?Dv(e):[e],r=n.length>1,o=i=>t?TE(i,{wrap:r}):ya(i),s=i=>{let a=Pv(i);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(l=>typeof l=="string"?o(l):ME(l))};return n.length===1&&typeof n[0]=="string"?s(n[0]):n.map(i=>typeof i=="string"?s(i):IE(i))}function AE(e){let t=new Set;for(let n of e)t.add(Ae(n));return[...t]}function EE(e){let t=Ae(e);return ms[t]??t}function FE(e,t){c.linksTick,c.findingIndexTick;let n=j(e),r=Vr(n)?gt(n).filter(o=>!t.has(o)):[];return r.length===0?g:u`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${r.map(o=>{let s=Gl(o),i=no(o),a=c.currentView==="links"&&c.currentLinks?.managedId?Qt([o])[0]:null,l=i.length===0?"":` \u2014 in ${i.map(p=>`${oe(p)} (${EE(p)})`).join(", ")}`;return u`<a class="duplicate-ref" href="${_()?kd({id:o},{teamOnly:!0}):`#${jr({id:o})}`}" data-links-preview="${a?o:g}" data-preview-report="${a?.report??g}" data-preview-row="${a?.index??g}" data-preview-managed-report="${a?.managedReportId??g}" data-tooltip="${`${s}${l}`}">${AE(i).map(p=>W(ye[p]??ye.default))}<span class="duplicate-ref-id">${jl(o)??s}</span></a>`})}</div>`}function LE(e){let t=Fv(e);return t?u`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:g}function OE(e){let t=Lp()?zr(e.revalidateVerdict,e):"";return t?u`<div class="revalidate-verdict">${it(er(t))}</div>`:g}function ba(e,t,n="section",{collapsible:r=!1}={}){let o=t?u`<div class="section-body">${it(er(t))}</div>`:g;return!r||!t?u`<div class="${n}"><div class="section-label">${e}</div>${o}</div>`:u`<details class="${n}"><summary class="section-label">${e}</summary>${o}</details>`}function NE(e,t,n){let r=e?.integrity&&t?.file?ga(e,t.file):null;return r?u`<span class="evidence-ref" role="link" tabindex="0" data-code-nav-integrity="${e.integrity}" data-code-nav-file="${r}" data-code-nav-line="${t?.line??""}">${n}</span>`:u`<span class="evidence-ref">${n}</span>`}function BE(e,t){let n=Array.isArray(e.evidence)?e.evidence:[];if(n.length===0)return g;let r=En(e),o=ma(e),s=t==="focus"&&o!==null,i=s?Cx(e):null;return u`<details class="evidence"><summary class="section-label">Evidence<span class="evidence-count">(${n.length})</span></summary><ol class="evidence-list">${n.map((a,l)=>{let p=ul(a),d=Hv(a,e,r,l),f=Sw(a),m=Nx(e,`ev${l}`,o,a?.file,a?.line),h=Dg(d),b=s&&vd(i,{integrity:o.integrity,file:ga(o,a?.file),range:ki(a?.line)});return u`<li class="${q({current:b})}">${s?NE(o,a,p):d?u`<a class="evidence-ref" href="${d}" target="_blank" rel="noopener">${p}</a>`:u`<span class="evidence-ref">${p}</span>`} ${m?.mark??g} ${h} ${m?.tip??g} ${f?u`<div class="evidence-note">${it(er(f))}</div>`:g} ${m?.body??g}</li>`})}</ol></details>`}function Ox(e,t){let n=ul(e);return t?u`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function PE(e,t){if(!t)return g;let n=t.slice(0,7),r=Gv(e,t);return r?u`<a href="${r}" target="_blank" rel="noopener" data-tooltip="${t}">${n}</a>`:u`<span data-tooltip="${t}">${n}</span>`}var Rd=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Ms=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,DE=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"><path d="M6.2 11.2H4.8a3.2 3.2 0 0 1 0-6.4h1.4"/><path d="M9.8 4.8h1.4a3.2 3.2 0 0 1 0 6.4H9.8"/><path d="M5.6 8h4.8"/></g></svg>`,zE=u`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><path d="M4.4 4.6 1.3 8l3.1 3.4"/><path d="m11.6 4.6 3.1 3.4-3.1 3.4"/><path d="M9.8 2.6 6.2 13.4"/></g></svg>`,WE=W(Kt);function Dg(e){let t=Bv(e);return t?u`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${WE}</a>`:g}function HE(e,t,n,r){return`${j(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:""}`}var Rs={key:null,host:null};function _d(e,t){if(Rs.key===e)return;let n=Rs.host,r=e===null?null:t?.getRootNode?.()?.host??null;Rs={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function Lx(e,t,n){c.codeBlockTick;let{text:r,lines:o,startLine:s}=Wv(e,t);if(o.length===0)return g;let i=n.lastIndexOf("."),a=xg(r,i<0?"":n.slice(i+1)),l=s+o.length-1;return u`<div class="code-preview" style="${le({"--lineno-width":`${String(l).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${o.map((p,d)=>{let f=s+d,m=!!t&&f>=t.start&&f<=t.end;return u`<div class="${q({"code-preview-lineno":!0,cited:m})}">${f}</div>`})}</aside><pre class="code-preview-source"><code>${a?W(a):r}</code></pre></div>`}function Nx(e,t,n,r,o){if(c.bundleHashTick,!n||!r)return null;let s=ga(n,r);if(!s)return null;let i=ki(o),a=HE(e,t,r,i),l=c.codePreviews.has(a);c.focusCodeTick;let p=u`<button type="button" class="${q({"code-preview-btn":!0,open:l})}" data-code-preview="${a}" aria-expanded="${String(l)}" aria-label="${l?`Hide the source at ${r}`:`Show the source at ${r}`}" @mouseenter="${m=>{_d(a,m.currentTarget),go(n.integrity,s,{reportId:n.reportId})}}" @mouseleave="${m=>{Rs.key===a&&_d(null,m.currentTarget)}}" @focus="${m=>{_d(a,m.currentTarget),go(n.integrity,s,{reportId:n.reportId})}}" @blur="${m=>{Rs.key===a&&_d(null,m.currentTarget)}}">${zE}</button>`;if(l){let m=go(n.integrity,s,{reportId:n.reportId}),h=!m||m.loading?u`<div class="code-preview code-preview-pending">${m?"Loading source\u2026":"Source unavailable"}</div>`:Lx(m.content,i,s);return{mark:p,tip:g,body:h}}if(Rs.key!==a)return{mark:p,tip:g,body:g};let d=go(n.integrity,s,{kick:!1,reportId:n.reportId}),f=d&&!d.loading?u`<div class="code-preview-tip" role="tooltip">${Lx(d.content,i,s)}</div>`:g;return{mark:p,tip:f,body:g}}var UE=u`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${hw}"/></svg>`,VE=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.2"/><circle cx="8" cy="8" r="1.7" fill="currentColor"/></svg>`,Md=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`;function jE(e,t=!1){let n=he(e)?.flagged===!0,r=n?"Remove flag":"Flag this finding";return u`<button type="button" class="${q({"mark-flag":!0,flagged:n})}" data-flag-toggle="${j(e)}" ?disabled="${!_t(e)}" aria-label="${r}" aria-pressed="${String(n)}">${Md}${t?u`<span class="mark-btn-label">${n?"Flagged":"Flag"}</span>`:g}</button>`}function GE(e){let t=qt(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function KE(e){let t=Vl(e,En(e)),n=ul(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let o=Uv(e);return o&&r.push(o),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
|
|
131
|
+
`).map(e=>{let[,t,n,r]=/^(\S+) (\S+) (.+)$/u.exec(e);return[Number.parseInt(t,16),{label:n,name:r}]})),ha=e=>`U+${e.toString(16).toUpperCase().padStart(4,"0")}`;function Ex(e){let t=BE.get(e);if(t)return{label:t.label,title:`${ha(e)} ${t.name}`};if(e>917536&&e<917631){let r=String.fromCodePoint(e-917504);return{label:r,title:`${ha(e)} TAG ${r}`}}let n=e>=65024&&e<=65039?e-65024+1:e>=917760&&e<=917999?e-917760+17:0;return n?{label:`VS${n}`,title:`${ha(e)} VARIATION SELECTOR-${n}`}:{label:ha(e),title:`${ha(e)} ${WE(e)}`}}var PE=/\p{Cf}/u,DE=/\p{Default_Ignorable_Code_Point}/u,zE=/\p{Cn}/u;function WE(e){if(e>=55296&&e<57344)return"lone surrogate";if((e&65534)===65534||e>=64976&&e<=65007)return"noncharacter";if(e>=57344&&e<=63743||e>=983040)return"private use character";let t=String.fromCodePoint(e);return PE.test(t)?"format character":DE.test(t)&&!zE.test(t)?"invisible character":"unassigned code point"}function Fx(e,t){let n=[];Md.lastIndex=0;for(let r=Md.exec(e);r;r=Md.exec(e)){let o=r[0].codePointAt(0),s=Mv(e,r.index,o,t);s===-1?n.push([r.index,o]):Md.lastIndex=s}return n}function Rs(e){return Ax.test(e)}var HE=e=>{let{label:t,title:n}=Ex(e);return u`<span class="code-control" data-tooltip="${n}">${t}</span>`};function Lx(e,t=!1){if(!Rs(e))return[e];let n=[],r=0;for(let[o,s]of Fx(e,t))o>r&&n.push(e.slice(r,o)),n.push(HE(s)),r=o+(s>65535?2:1);return r<e.length&&n.push(e.slice(r)),n}var Ix=e=>e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""");function Td(e,t=!1){if(!Rs(e))return e;let n="",r=[];for(let a=0;a<e.length;){let l=e.indexOf("<",a),p=l===-1?e.length:l;if(p>a&&(r.push({text:n.length,markup:a}),n+=e.slice(a,p)),l===-1)break;let d=e.indexOf(">",l);a=d===-1?e.length:d+1}let o="",s=0,i=0;for(let[a,l]of Fx(n,t)){for(;r[i+1]?.text<=a;)i++;let p=r[i].markup+a-r[i].text,{label:d,title:f}=Ex(l);o+=`${e.slice(s,p)}<span class="code-control" data-tooltip="${Ix(f)}">${Ix(d)}</span>`,s=p+(l>65535?2:1)}return o+e.slice(s)}function Id(e,t){return!!e&&!!t&&e.integrity===t.integrity&&e.file===t.file&&(e.range?.start??null)===(t.range?.start??null)&&(e.range?.end??null)===(t.range?.end??null)}var UE=[];function Hg(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!Id(e[0],n))return{stack:UE,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function oU({stack:e,at:t,base:n},r){let o=e.length>0?e[t]:n;if(Id(o,r))return null;let s=e.length>0?e.slice(0,t+1):[n];return{stack:[...s,r],at:s.length}}function sU(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}function Ox(e,t){if(!e||!t||t.length===0)return;let n=e.getBoundingClientRect().top,r=t[0].getBoundingClientRect(),o=t.item(t.length-1).getBoundingClientRect(),s=r.top-n+e.scrollTop,i=o.bottom-n+e.scrollTop,a=s+(i-s)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(a,s-r.height)),behavior:"instant"})}var ba=new Map,Vg=new Map,VE=new Set,Nx=new WeakMap,Ug=new Set;function Bx(e,t,n,r,o,s=Vg,i=VE){let a=`${e}\0${t}`;if(s.has(a)||i.has(a))return;let l=bi(t,r,n);if(!l){s.set(a,null);return}i.add(a),(async()=>{let p=await Ss(n,l,o);s.set(a,typeof p=="string"?Td(p):null),i.delete(a),c.focusCodeTick++,queueMicrotask(O)})()}async function jE(e){let t=ba.get(e);if(t&&(t.loading||t.sources))return;let n=(c.bundles??[]).find(r=>r.integrity===e);if(n){ba.set(e,{sources:null,loading:!0,error:null});try{let r=await ho(e,n),o=Ot(r);ba.set(e,{sources:o,packageFiles:we(r),packageDirs:Nt(r),imports:zg(r,o),formats:r.kind==="stasis"?r.bundle?.formats:null,loading:!1,error:r.error??null})}catch(r){ba.set(e,{sources:null,loading:!1,error:r.message})}c.focusCodeTick++,queueMicrotask(O),queueMicrotask(Px)}}function Px(){let e=be.querySelectorAll(".focus-code-line-active");e.length!==0&&Ox(e[0].closest(".focus-code-body"),e)}function ya(e){if(R()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;c.focusCodeTick;let n=Gc(e._managedReportId);if(n?.data===null||n?.error)return null;let r={integrity:n?.data?.integrity??null,reportId:e._managedReportId},o=[e,...Array.isArray(e.evidence)?e.evidence:[]];for(let s of o){let i=wa(r,s?.file);if(i)return{...r,file:i,line:s.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null:so(e.fileHash).find(({integrity:n})=>t.includes(n))??null}function wa(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return Nf(e.integrity,t);let n=Gc(e.reportId);if(!n||n.data===void 0&&!n.error)return t;let r=n.data;return r?.paths.get(t)??(r?.sources.has(t)?t:null)}function Dx(e,t,n){if(!R())return null;let r=Gc(e);if(!r||r.data===void 0&&!r.error)return n&&!Ug.has(e)&&(Ug.add(e),zk(e).catch(()=>{}).finally(()=>{Ug.delete(e),c.focusCodeTick++,queueMicrotask(O),queueMicrotask(Px)})),n?{loading:!0}:null;let o=r.data;if(!o)return null;t=o.paths.get(t)??t;let s=o.sources.get(t);if(typeof s!="string")return null;let i=Nx.get(o);return i||(i={cache:new Map,pending:new Set},Nx.set(o,i)),Bx(o.integrity,t,s,o.formats?.get(t),Rd(o.sources,t,o.imports,o.sources,o.packageDirs),i.cache,i.pending),{content:s,highlighted:i.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function bo(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return Dx(r,t,n);if(R())return null;let o=ba.get(e);if(!o)return n?(jE(e),{loading:!0}):null;if(o.loading&&!n)return null;if(o.loading)return{loading:!0};if(!o.sources)return null;let s=o.sources.get(t);if(typeof s!="string")return null;Bx(e,t,s,o.formats?.get(t),Rd(o.sources,t,o.imports,o.packageFiles,o.packageDirs));let i=`${e}\0${t}`;return{content:s,highlighted:Vg.has(i)?Vg.get(i):void 0,loading:!1}}function zx(e){let t=ya(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:Ci(t.reportId?t.line:e.line)}:null}function GE(e){return e?zx(je(e)):null}function Ad(e){let t=GE(e);return t?{base:t,...Hg(c.focusCodeStack,c.focusCodeAt,t)}:null}function Wx(e){let t=zx(e);return t?Hg(c.focusCodeStack,c.focusCodeAt,t).pos:null}function $U(e,t,n,r){let o=Ad(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let s=je(e),i=bo(t,r,{kick:!1,reportId:s?._managedReportId});return i&&!i.loading?{integrity:t,file:r,range:null}:null}function Hx(e){let t=e&&je(e),n=ya(t);if(n?.reportId&&!n.integrity)return Dx(n.reportId,n.file,!0);let r=Ad(e);if(!r)return null;let{pos:o}=r,s=bo(o.integrity,o.file,{reportId:t?._managedReportId});return!s||s.loading?s:{...s,file:o.file,integrity:o.integrity,range:o.range}}function Ed(e,{teamOnly:t=!1,reportId:n}={}){if(!e)return null;let r=j(e);if(!jr(r))return null;if(R()){let i=t?null:n??(c.currentView==="links"?e._managedReportId:c.currentManagedReport),a=Ye(Xe({view:"findings",teamId:c.currentManagedTeam,reportId:i,finding:{id:r}},c.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||c.currentFile||"",s=c.currentWorkspace||Ms(o);return Sp({id:r,report:c.currentWorkspace?null:Il("report",o),workspace:Il("workspace",s??"")})}function Ms(e,t=c.currentReportWorkspace||c.currentWorkspace){let n=Yi(e);return n.some(r=>r.id===t)?t:n.length===1?n[0].id:null}function TU(e){for(let t of[mr(),px()])for(let n of t)for(let r of n)if(j(r)===e)return{group:n,finding:r};return null}function KE(e,t){c.currentView="findings",c.viewMode==="graph"&&(c.viewMode="table",Pt());let n=Fe(e).commonTriage;if(c.viewMode==="kanban"){let i=n??"untriaged";c.kanbanExpandedColumn!==null&&c.kanbanExpandedColumn!==i&&(c.kanbanExpandedColumn=null)}else n!==c.shownTriage&&(c.shownTriage=n);c.upstreamOnly&&!e.every(i=>i.isUpstream)&&(c.upstreamOnly=!1),xi(c.showRevalidation,c.upstreamOnly);let r=e.find(i=>j(i)===t);if(Jr(r)||ud(go())&&!K0(e)||!pr(e).some(i=>j(i)===t))if(c.currentWorkspace){r?.isUpstream?c.upstreamOnly=!0:c.showRevalidation=!1,xi(c.showRevalidation,c.upstreamOnly);let i=mr().find(a=>a.some(l=>j(l)===t));if(i)return KE(i,t)}else c.revalidationDetailed=!0;if(pd([e]).length===0){let i=c.sortBy;dd(),c.sortBy=i}let s=ie(e);return e.length>1&&c.activeTabByGroup.set(s,t),c.viewMode==="table"?c.tableSelectedGid=s:c.viewMode==="focus"?c.focusGid=s:c.viewMode==="kanban"&&(c.kanbanPopoverGid=s),s}function Ux(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function Vx(e,t){if(e.createdAt==null&&t.createdAt!=null)return-1;if(e.createdAt!=null&&t.createdAt==null)return 1;let n=(e.createdAt??0)-(t.createdAt??0);return n!==0?n:e.id===t.id?0:e.id<t.id?-1:1}var va=new Map;function NU(e,t){va.has(e)||va.set(e,new Set);let n=va.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&va.delete(e)}}function jg(e,t){c.managedComments.set(e,t);for(let n of va.get(e)??[])n()}function jx(e){return R()?c.managedComments?.get(e?.id)??[]:[]}function Gx(){return R()&&c.managedSession!=null&&Yn(c.managedSession.role,"triage")}function qE(e){return Gx()&&Ux(e,c.managedSession)}function Gg(e){let t=c.reports,n=c.managedSession?.id;return()=>R()&&n!=null&&c.managedSession?.id===n&&c.reports===t&&c.managedReports.some(r=>r.id===e)}async function Fd(e,{signal:t,readAnnotations:n}={}){let r=Gg(e);if(!r())return!1;let o=new Set(c.reports.filter(l=>l._managedReportId===e).flatMap(l=>l.groups.flatMap(p=>p.map(d=>d.id)))),s=new Map([...o].map(l=>[l,c.managedComments.get(l)])),i=n?(await n(e))?.comments:await o0(e,c.currentManagedTeam,{signal:t});if(!r()||i==null||t?.aborted)return!1;let a=new Map([...o].map(l=>[l,[]]));for(let l of i)a.has(l.findingId)&&a.get(l.findingId).push(l);for(let[l,p]of a)c.managedComments.get(l)===s.get(l)&&jg(l,p);return!0}async function BU(e,t,n=null){let r=e?._managedReportId,o=Gg(r);if(!o()||!Gx())return{status:403};if(n&&n.authorId!==c.managedSession.id)return{status:403};let s=await s0(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},c.managedSession.csrfToken);if(!o())return{status:0};if(s.comment){let a=(c.managedComments.get(e.id)??[]).filter(l=>l.id!==s.comment.id);a.push(s.comment),a.sort(Vx),jg(e.id,a)}return s}async function PU(e,t){let n=e?._managedReportId,r=Gg(n);if(!r()||!qE(t))return 403;let o=await i0(n,t.id,t.version,c.managedSession.csrfToken);if(!r())return 0;if(o===204){let s=c.managedComments.get(e.id)??[];jg(e.id,s.filter(i=>i.id!==t.id))}return o}function Ld(e){return i$(e,{managed:R()}).map(t=>typeof t=="string"?t:t.self?u`<a class="comment-self-ref" href="${t.url}">${t.label}</a>`:u`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Od=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Ts=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 3 5 8l5 5"/></svg>`,Is=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3 11 8l-5 5"/></svg>`,Kx=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 3.5h12M2 8h9a2.5 2.5 0 0 1 0 5H8.5M10 11.5 8.5 13l1.5 1.5M2 13h3.5"/></svg>`,qx=u`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M5 2h8a1 1 0 0 1 1 1v8M3 5h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1ZM4.5 9.5h4"/></svg>`,jU=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 4.5a1 1 0 0 1 1-1h3.2l1.3 1.5H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4.5Z"/></svg>`,GU=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 4.5L2 8l3.5 3.5"/><path d="M10.5 4.5L14 8l-3.5 3.5"/></svg>`;function st(e){return e==="informational"?"info":e.replaceAll("_"," ")}function Kg(e,{variant:t="full"}={}){let n=c.severityMode,r=de(e,n),o=u`<span class="${`badge ${r}`}">${st(r)}</span>`,s=Do(e),i=t==="tab"?null:Ew(e);if(!s&&!i)return o;let a=i?`Corrected severity varies across reports \u2014 ${Object.entries(i).map(([$,k])=>`${$||"(this report)"}: ${st(k.severity)}`).join("; ")}`:null,l=i?u`<span class="badge-varies" data-tooltip="${a}" aria-label="${a}">varies</span>`:g;if(!s)return u`<span class="${`badge-pair badge-pair-${t}`}">${o}${l}</span>`;let p=de(e,"original"),d=di(e),f=e.correctedSeverityReason,m=(_e[d]??0)>(_e[p]??0),h=m?"up":"down",b=m?"\u25B2":"\u25BC",y=n!=="original",w=(y?`Corrected ${h} from ${st(p)}`:`Original severity \u2014 corrected ${h} to ${st(d)}`)+(f?` \u2014 ${f}`:""),v=`Severity ${st(r)}; ${y?`corrected ${h} from ${st(p)}`:`original, corrected to ${st(d)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return u`<span class="badge-pair badge-pair-tab" data-tooltip="${w}" aria-label="${v}">${o}<span class="${`badge-corr-mark ${h}`}" aria-hidden="true">${b}</span></span>`;let x=y?p:d;return u`<span class="${`badge-pair badge-pair-${t}`}" data-tooltip="${w}" aria-label="${v}">${o}<span class="badge-orig-wrap"><span class="${`badge-arrow ${h}`}" aria-hidden="true">${b}</span>${y?u`<span class="badge-pre" aria-hidden="true">was</span>`:g}<span class="${`badge-orig ${x}${y?" struck":""}`}">${st(x)}</span></span>${l}</span>`}var Yx=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;function ka(e){Yx.lastIndex=0;let t=[],n=0,r;for(;(r=Yx.exec(e))!==null;){r.index>n&&t.push(e.slice(n,r.index));let o=r[0].codePointAt(0);if(o===91){let s=n$(r[0]);t.push(s?u`<a href="${s.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${s.url}">${s.label}</a>`:r[0])}else o===42?t.push(u`<strong>${r[0].slice(2,-2)}</strong>`):o===96?t.push(u`<span class="inline-code">${r[0].slice(1,-1)}</span>`):t.push(u`<span class="inline-quote">${r[0]}</span>`);n=r.index+r[0].length}return n===0?e:(n<e.length&&t.push(e.slice(n)),t)}function YE({lang:e,code:t}){c.codeBlockTick;let n=Eg(t,e);return u`<div class="code-block" data-lang="${e||g}">${e?u`<div class="code-block-lang">${e}</div>`:g}<pre><code>${n?W(n):t}</code></pre></div>`}function XE(e,{wrap:t=!1}={}){let n=e.split(/\n{2,}/u).filter(r=>r.trim());return n.length<2?t?u`<div class="para">${ka(e)}</div>`:ka(e):n.map(r=>u`<div class="para">${ka(r)}</div>`)}function JE({ordered:e,start:t,items:n}){let r=n.map(o=>u`<li>${it(o)}</li>`);return e?u`<ol class="md-list" start="${t>1?t:g}">${r}</ol>`:u`<ul class="md-list">${r}</ul>`}function it(e,{paragraphs:t=!0}={}){if(!e)return e;let n=t?Jv(e):[e],r=n.length>1,o=i=>t?XE(i,{wrap:r}):ka(i),s=i=>{let a=Xv(i);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(l=>typeof l=="string"?o(l):YE(l))};return n.length===1&&typeof n[0]=="string"?s(n[0]):n.map(i=>typeof i=="string"?s(i):JE(i))}function ZE(e){let t=new Set;for(let n of e)t.add(Ae(n));return[...t]}function QE(e){let t=Ae(e);return ys[t]??t}function eF(e,t){c.linksTick,c.findingIndexTick;let n=j(e),r=jr(n)?xt(n).filter(o=>!t.has(o)):[];return r.length===0?g:u`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${r.map(o=>{let s=Zl(o),i=or(o),a=c.currentView==="links"&&c.currentLinks?.managedId?zt([o])[0]:null,l=i.length===0?"":` \u2014 in ${i.map(p=>`${oe(p)} (${QE(p)})`).join(", ")}`;return u`<a class="duplicate-ref" href="${R()?Ed({id:o},{teamOnly:!0}):`#${Gr({id:o})}`}" data-links-preview="${a?o:g}" data-preview-report="${a?.report??g}" data-preview-row="${a?.index??g}" data-preview-managed-report="${a?.managedReportId??g}" data-tooltip="${`${s}${l}`}">${ZE(i).map(p=>W(ye[p]??ye.default))}<span class="duplicate-ref-id">${Jl(o)??s}</span></a>`})}</div>`}function tF(e){let t=jv(e);return t?u`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:g}function nF(e){let t=jp()?Wr(e.revalidateVerdict,e):"";return t?u`<div class="revalidate-verdict">${it(er(t))}</div>`:g}function $a(e,t,n="section",{collapsible:r=!1}={}){let o=t?u`<div class="section-body">${it(er(t))}</div>`:g;return!r||!t?u`<div class="${n}"><div class="section-label">${e}</div>${o}</div>`:u`<details class="${n}"><summary class="section-label">${e}</summary>${o}</details>`}function rF(e,t,n){let r=e?.integrity&&t?.file?wa(e,t.file):null;return r?u`<span class="evidence-ref" role="link" tabindex="0" data-code-nav-integrity="${e.integrity}" data-code-nav-file="${r}" data-code-nav-line="${t?.line??""}">${n}</span>`:u`<span class="evidence-ref">${n}</span>`}function oF(e,t){let n=Array.isArray(e.evidence)?e.evidence:[];if(n.length===0)return g;let r=En(e),o=ya(e),s=t==="focus"&&o!==null,i=s?Wx(e):null;return u`<details class="evidence"><summary class="section-label">Evidence<span class="evidence-count">(${n.length})</span></summary><ol class="evidence-list">${n.map((a,l)=>{let p=bl(a),d=e$(a,e,r,l),f=Nw(a),m=Zx(e,`ev${l}`,o,a?.file,a?.line),h=qg(d),b=s&&Id(i,{integrity:o.integrity,file:wa(o,a?.file),range:Ci(a?.line)});return u`<li class="${q({current:b})}">${s?rF(o,a,p):d?u`<a class="evidence-ref" href="${d}" target="_blank" rel="noopener">${p}</a>`:u`<span class="evidence-ref">${p}</span>`} ${m?.mark??g} ${h} ${m?.tip??g} ${f?u`<div class="evidence-note">${it(er(f))}</div>`:g} ${m?.body??g}</li>`})}</ol></details>`}function Jx(e,t){let n=bl(e);return t?u`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function sF(e,t){if(!t)return g;let n=t.slice(0,7),r=o$(e,t);return r?u`<a href="${r}" target="_blank" rel="noopener" data-tooltip="${t}">${n}</a>`:u`<span data-tooltip="${t}">${n}</span>`}var Bd=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Es=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,iF=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"><path d="M6.2 11.2H4.8a3.2 3.2 0 0 1 0-6.4h1.4"/><path d="M9.8 4.8h1.4a3.2 3.2 0 0 1 0 6.4H9.8"/><path d="M5.6 8h4.8"/></g></svg>`,aF=u`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><path d="M4.4 4.6 1.3 8l3.1 3.4"/><path d="m11.6 4.6 3.1 3.4-3.1 3.4"/><path d="M9.8 2.6 6.2 13.4"/></g></svg>`,lF=W(Yt);function qg(e){let t=Yv(e);return t?u`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${lF}</a>`:g}function cF(e,t,n,r){return`${j(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:""}`}var As={key:null,host:null};function Nd(e,t){if(As.key===e)return;let n=As.host,r=e===null?null:t?.getRootNode?.()?.host??null;As={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function Xx(e,t,n){c.codeBlockTick;let{text:r,lines:o,startLine:s}=Qv(e,t);if(o.length===0)return g;let i=n.lastIndexOf("."),a=Eg(r,i<0?"":n.slice(i+1)),l=s+o.length-1;return u`<div class="code-preview" style="${le({"--lineno-width":`${String(l).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${o.map((p,d)=>{let f=s+d,m=!!t&&f>=t.start&&f<=t.end;return u`<div class="${q({"code-preview-lineno":!0,cited:m})}">${f}</div>`})}</aside><pre class="code-preview-source"><code>${a?W(a):r}</code></pre></div>`}function Zx(e,t,n,r,o){if(c.bundleHashTick,!n||!r)return null;let s=wa(n,r);if(!s)return null;let i=Ci(o),a=cF(e,t,r,i),l=c.codePreviews.has(a);c.focusCodeTick;let p=u`<button type="button" class="${q({"code-preview-btn":!0,open:l})}" data-code-preview="${a}" aria-expanded="${String(l)}" aria-label="${l?`Hide the source at ${r}`:`Show the source at ${r}`}" @mouseenter="${m=>{Nd(a,m.currentTarget),bo(n.integrity,s,{reportId:n.reportId})}}" @mouseleave="${m=>{As.key===a&&Nd(null,m.currentTarget)}}" @focus="${m=>{Nd(a,m.currentTarget),bo(n.integrity,s,{reportId:n.reportId})}}" @blur="${m=>{As.key===a&&Nd(null,m.currentTarget)}}">${aF}</button>`;if(l){let m=bo(n.integrity,s,{reportId:n.reportId}),h=!m||m.loading?u`<div class="code-preview code-preview-pending">${m?"Loading source\u2026":"Source unavailable"}</div>`:Xx(m.content,i,s);return{mark:p,tip:g,body:h}}if(As.key!==a)return{mark:p,tip:g,body:g};let d=bo(n.integrity,s,{kick:!1,reportId:n.reportId}),f=d&&!d.loading?u`<div class="code-preview-tip" role="tooltip">${Xx(d.content,i,s)}</div>`:g;return{mark:p,tip:f,body:g}}var dF=u`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${Mw}"/></svg>`,uF=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.2"/><circle cx="8" cy="8" r="1.7" fill="currentColor"/></svg>`,Pd=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`;function pF(e,t=!1){let n=he(e)?.flagged===!0,r=n?"Remove flag":"Flag this finding";return u`<button type="button" class="${q({"mark-flag":!0,flagged:n})}" data-flag-toggle="${j(e)}" ?disabled="${!_t(e)}" aria-label="${r}" aria-pressed="${String(n)}">${Pd}${t?u`<span class="mark-btn-label">${n?"Flagged":"Flag"}</span>`:g}</button>`}function fF(e){let t=Ft(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function mF(e){let t=Xl(e,En(e)),n=bl(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let o=t$(e);return o&&r.push(o),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
|
|
132
132
|
|
|
133
|
-
`)}function qE(e){if(!c.currentWorkspace)return g;let t=e._reportName;if(!t)return g;if(_()&&!e._managedReportId)return g;let n=De[Ae(t)]??De.default,r=u`${W(n)}<span class="report-chip-label report-button-label">${oe(t)}</span>`;if(_()){let o=kd(e,{reportId:e._managedReportId});if(o)return u`<a class="report-chip report-button comment-self-ref" href="${$n(o)}">${r}</a>`}return u`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${j(e)}" data-managed-report="${_()?e._managedReportId:g}">${r}</button>`}function Bx(e,t,n,r,o=null){let s=o==="table"?g:qE(r),i=he(r),a=!dr(r),l=!_t(r),p=i?.color??null,d=i?.comment??"",f=i?.fix??"",m=_()?"View comments":d?`Edit comment: ${d}`:"Add comment",h=f?`Edit fix link: ${f}`:"Add fix link (PR URL, etc.)",b=o==="focus"&&s===g,y=_()?"Comments":d?"Edit comment":"Comment",w=f?"Edit fix link":"Fix link",v=u`<button type="button" ?disabled="${a}" class="${q({"mark-comment":!0,"has-comment":d})}" data-tooltip="${d&&!_()?m:g}" aria-label="${m}">${Rd}${b?u`<span class="mark-btn-label">${y}</span>`:g}</button>`,x=u`<button type="button" ?disabled="${l}" class="${q({"mark-fix":!0,"has-fix":f})}" data-tooltip="${f?h:g}" aria-label="${h}">${Ms}${b?u`<span class="mark-btn-label">${w}</span>`:g}</button>`,k=jE(r,b),$=u`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${Cd}${b?u`<span class="mark-btn-label">Copy</span>`:g}</button>`,S=kd(r)?u`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${DE}${b?u`<span class="mark-btn-label">Link</span>`:g}</button>`:g,C=_()?Pe({repo:{github:r.repo?.github||r._repoFallback}}):Y0(r),R=Kv(C,{title:GE(r),body:KE(r),labels:rx(r.isSecurity===!0,c.githubNewIssueLabels)}),L=_()&&c.managedSession&&!c.managedSession.publicShare&&c.currentManagedTeam,A=u`${VE}${b?u`<span class="mark-btn-label">Issue</span>`:g}`,E=Lc(r)?g:R?L?u`<button type="button" class="mark-issue" data-issue-form="${R}" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</button>`:u`<a class="mark-issue" href="${R}" target="_blank" rel="noopener" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</a>`:g,T=u`<button type="button" class="mark-claude" data-tooltip="${b?g:"Open in Claude Code (claude://) with a confirm-and-fix prompt"}" aria-label="Open finding in Claude Code">${UE}${b?u`<span class="mark-btn-label">Claude</span>`:g}</button>`,I=u`<color-marker .selected="${p}" .disabled="${l}"></color-marker>`,U=ws(e)!==e,K=e.linkedTabs?"change triage state for linked findings":U?"change triage state for App and own-source findings":n.hasConflict?"change triage state (colors mismatch \u2014 acts per-tab)":t.length>1?"change triage state for the whole group":"change triage state";return u`<div class="finding-actions">${s}<div class="finding-action-controls"><span class="mark-action-group">${v}${x}${k}</span><span class="mark-action-group">${$}${S}${E}${T}</span>${I}${XE(e,K,o,n,r)}</div></div>`}function YE(e){if(e.newState!=="open")return;let t=e.currentTarget,r=t.getRootNode().querySelector?.(`[popovertarget="${t.id}"]`);if(!r)return;let o=r.getBoundingClientRect(),s=t.offsetWidth||110,i=t.offsetHeight||100,a=4,l=o.right-s;l<4&&(l=4),l+s>window.innerWidth-4&&(l=window.innerWidth-s-4);let p=o.bottom+a;p+i>window.innerHeight-4&&o.top>i+a&&(p=o.top-i-a),t.style.top=`${p}px`,t.style.left=`${l}px`}function XE(e,t,n,r,o){let s=ie(e),i=!_t(o)||da(e,r).length===0,a=i?null:gg(e,r,o),l={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},p={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Delete",ignored:"Ignore"},d=!!c.shownTriage,f=d?l[c.shownTriage]:null,m=["inprogress","fixed","invalid","deleted","ignored"],b=d&&!(n==="focus")?[{key:"restore",label:"Restore"},...m.filter(v=>v!==c.shownTriage).map(v=>({key:v,label:p[v]}))]:m.map(v=>({key:v,label:p[v]})),y=["mark-triage-menu"];d&&y.push("with-label",`triage-state-${c.shownTriage}`);let w=`triage-menu-${s.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return u`<div class="triage-menu-wrap"><button type="button" class="${y.join(" ")}" popovertarget="${w}" popovertargetaction="toggle" aria-label="${t}" ?disabled="${i}">${f?u`<span class="mark-triage-label">${f}</span>`:g} <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="${w}" class="triage-menu" data-gid="${s}" role="menu" @beforetoggle="${YE}">${b.map(v=>u`<button type="button" class="${q({"triage-menu-item":!0,[`triage-menu-${v.key}`]:!0,active:a===v.key})}" data-triage-action="${v.key}" ?disabled="${i}" role="menuitem">${v.label}</button>`)}</div></div>`}function JE(e,t){let n=!!e?.comment,r=!!(e?.fix||tn(t)),o=e?.flagged===!0;return!n&&!r&&!o?g:u`<span class="tab-marks">${n?u`<span class="has-comment" role="img" aria-label="Has a comment">${Rd}</span>`:g}${r?u`<span class="has-fix" role="img" aria-label="Has a fix link">${Ms}</span>`:g}${o?u`<span class="flagged" role="img" aria-label="Flagged">${Md}</span>`:g}</span>`}function Px(e,t,n){let{app:r,source:o}=K0(e),s=i=>ZE(i,j(i)===t,n);return u`<div class="tabs">${r.map(s)} ${r.length>0&&o.length>0?u`<span class="tab-level-separator" aria-hidden="true">•</span>`:g} ${o.map(s)}</div>`}function ZE(e,t,n){let r=j(e),o=he(e),s=o?.color,i=ca(e,o),a=["tab",`tab-severity-${de(e,c.severityMode)}`];t&&a.push("active"),s&&a.push(`tab-mark-${s}`),i==="ignored"&&!n.allIgnored?a.push("tab-ignored"):i&&i!=="ignored"&&n.commonTriage===null&&a.push(`tab-${i}`);let l=Dc(e),p=l?De[l]:null,d=!p&&e.confidence!=null;p?a.push("tab-with-analyzer"):d&&a.push("tab-with-confidence");let f=p?u`<span class="tab-analyzer" role="img" aria-label="${ms[l]}">${W(p)}</span>`:d?u`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:g;return u`<button type="button" class="${a.join(" ")}" data-tid="${r}" aria-pressed="${t}" aria-description="${s?`${s} color label`:g}"><span class="tab-label"><span class="tab-severity">${Pg(e,{variant:"tab"})}</span><span class="tab-indicators">${JE(o,e)}</span></span>${f}</button>`}function QE(e){if(c.viewMode==="table"||c.viewMode==="focus"){let t=e.confidence*10;return u`<div class="${`conf-ring ${de(e,c.severityMode)}`}"><svg viewBox="0 0 36 36" aria-hidden="true"><circle class="conf-ring-track" cx="18" cy="18" r="15.9155"/><circle class="conf-ring-arc" cx="18" cy="18" r="15.9155" style="stroke-dasharray: ${t} 100"/></svg> <span>${e.confidence}<small>/10</small></span></div><div class="value-label">Confidence</div>`}return u`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}var eF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function tF(e){if(or(e))return g;let t=e?.name;if(typeof t!="string"||!eF.test(t))return g;let n=e?.version,r=typeof n=="string"&&n.length>0,o=r?`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`:`https://www.npmjs.com/package/${t}`,s=r?`${t}@${n}`:t;return u`<span class="line-num"><a class="npm-link" href="${o}" target="_blank" rel="noopener noreferrer">npm: ${s}</a></span>`}function nF(e,t,n,r,o,s){let i=j(e),a=he(e),l=a?.comment??"",p=a?.fix??"",d=tn(e),f=Lc(e),m=Vl(e,En(e)),h=Ox(e,m),b=li(e),y=ma(e),w=Nx(e,"loc",y,e.file,e.line),v=Dg(m),x=u`<span class="line-num">${b?u`${h}, ${b}`:h}${w?.mark??g}${v}</span>`,k=Xr(e),$=String(e.discoveredIn??"").trim(),S=$===String(e.file??"").trim()?"":$,C=o==="focus"?tF(e.package?.npm):g,R=g;if(o!=="focus"&&_()&&w)R=u`<button type="button" class="finding-code-btn" data-finding-code-report="${y.reportId}" data-finding-code-file="${e.file}" data-finding-code-line="${e.line??""}" aria-label="${`Open full source for ${e.file}`}">Code</button>`;else if(o!=="focus"&&!_()&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){c.bundleHashTick;let K=new Set(e._bundleHashes),Q=ro(e.fileHash).find(({integrity:ze})=>K.has(ze));Q&&(R=u`<button type="button" class="finding-code-btn" data-finding-code-bundle="${Q.integrity}" data-finding-code-file="${Q.file}" data-finding-code-line="${e.line??""}" data-tooltip="${`Open ${Q.file} in bundle source viewer`}">Code</button>`)}let{title:L,body:A}=kw(e),E=xw(A),T=E.findIndex(K=>K.label!==null),I=T===-1?E:E.slice(0,T),U=T===-1?[]:E.slice(T);return u`<div class="${q({"tab-body":!0,active:t})}" data-tid="${i}">${r>1?u`<div class="print-case-label">${n+1} of ${r}</div>`:g}<div class="finding-left">${a?.color||a?.flagged===!0?u`<div class="${a?.color?`finding-top-marks color-${a.color}`:"finding-top-marks"}">${a?.color?u`<span class="finding-color-mark" role="img" aria-label="${`Color label: ${a.color}`}"></span>`:g} ${a?.flagged===!0?u`<span class="finding-bookmark-mark" role="img" aria-label="Bookmarked"></span>`:g}</div>`:g} ${Pg(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?g:QE(e)} ${LE(e)} ${R}</div><div class="finding-body"><div class="line-row">${x} ${w?.tip??g} ${C} ${S?u`<span class="line-num discovered-in">(found analyzing ${S})</span>`:g} ${k?u`<span class="run-meta">${k}</span>`:g}</div>${w?.body??g} ${L?u`<div class="desc-title">${ya(L)}</div>`:g} ${I.map(K=>u`<div class="desc">${it(er(K.body))}</div>`)} ${BE(e,o)} ${U.map(K=>K.label===null?u`<div class="desc">${it(er(K.body))}</div>`:ba(K.label,K.body))} ${e.impact?ba("Impact",zr(e.impact,e)):g} ${e.reproduction?ba("Reproduction",zr(e.reproduction,e),"section",{collapsible:!0}):g} ${e.recommendation?ba("Recommendation",zr(e.recommendation,e),"recommendation",{collapsible:!0}):g} ${e.confidenceReason?u`<div class="conf-reason">${it(zr(e.confidenceReason,e))}</div>`:g} ${OE(e)} ${e.revalidateRecommendation&&Lp()?ba("Revalidation recommendation",zr(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):g} ${No(e)&&e.correctedSeverityReason?u`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${it(e.correctedSeverityReason)}</div>`:g} ${FE(e,s)} ${_()?Tx(e).map(K=>u`<div class="comment-block">${Cv(K,Sd(K.body))}</div>`):l?u`<div class="comment-block"><span class="comment-label">Comment:</span> ${Sd(l)}</div>`:g} ${f?u`<div class="fix-block"><span class="fix-label">Issue:</span><managed-fix-link .url="${f.url}"></managed-fix-link></div>`:g} ${p?u`<div class="fix-block"><span class="fix-label">Fix:</span> ${Bo(p)?u`<managed-fix-link .url="${p}"></managed-fix-link>`:p}</div>`:g} ${d&&d!==p?u`<div class="fix-block"><span class="fix-label">Fix from issue:</span><managed-fix-link .url="${d}"></managed-fix-link></div>`:g}</div></div>`}function _U(e){let t=["finding",...rF(e)];return ur(e).length>1&&t.push("multi-case"),t}function RU(e,t={}){let{context:n=null}=t,r=Fe(e),o=ur(e),s=new Set(o.map(j)),i=je(e),a=j(i),l=i.commitHash?u`<div class="commit-ref">introduced in ${PE(i.repo?.github,i.commitHash)}</div>`:g,p=c.currentWorkspace&&l!==g;return u`${o.map((d,f)=>nF(d,j(d)===a,f,o.length,n,s))} ${p?u`<div class="marks-commit-row">${l}</div>`:g}<div class="marks"><div class="marks-left">${p?g:l} ${o.length>1?Px(o,a,r):g}</div>${Bx(e,o,r,i,n)}</div>`}function rF(e){let t=Fe(e),n=e.some(o=>o.critical||de(o,c.severityMode)==="critical"),r=[];return n&&r.push("is-critical"),t.hasConflict?r.push("has-conflict"):t.commonColor&&r.push(`mark-${t.commonColor}`),c.shownTriage&&r.push(`triage-${c.shownTriage}`),r}function MU(e){let t=Fe(e),n=ur(e),r=je(e),o=j(r),s=r,i=qt(s),a=Xr(s),l=li(s),p=l?`, ${l}`:"",d=Vl(s,En(s));return u`<div class="row-score">${Pg(s,{variant:"compact"})} ${s.confidence===void 0?g:u`<span class="row-conf"><strong>${s.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${i}</span> ${a?u`<span class="row-type">${a}</span>`:g}</div><div class="meta-row"><span class="row-loc">${Ox(s,d)}${p}</span> ${Dg(d)}<div class="marks">${Bx(e,n,t,r,"table")}</div></div>${n.length>1?u`<div class="tabs-row">${Px(n,o,t)}</div>`:g}</div>`}function Dx(e){if(!e)return g;let t=ro(e)[0];return t?u`<button type="button" class="tree-code-btn" data-finding-code-bundle="${t.integrity}" data-finding-code-file="${t.file}" data-tooltip="${`Open ${t.file} in bundle source viewer`}">Code</button>`:g}function zx(e,t){let n=Object.keys(e).toSorted(),r=new Map;for(let d of n)for(let f of e[d].imports??[]){let m=r.get(f)??[];m.push(d),r.set(f,m)}let o=c.filesSearch.trim().toLowerCase(),s=o?n.filter(d=>d.toLowerCase().includes(o)):n,i=d=>e[d]?u`<a href="${`#${Np(d)}`}"><span class="name">${d}</span></a>`:u`<span class="name">${d}</span>`,a=d=>{let f=t.get(d);if(!f)return null;let m=et.filter(h=>(f[h]??0)>0);return m.length===0?null:u`<span class="tree-count-chips">${m.map(h=>u`<span class="${`tree-count-chip ${h}`}">${f[h]} ${h.replaceAll("_"," ")}</span>`)}</span>`},l=d=>{let f=t.get(d);return f?et.reduce((m,h)=>m+(f[h]??0),0):0},p=u`<div class="tree-toolbar"><view-mode-buttons modes="table,list" kind="files"></view-mode-buttons><div class="search-row"><toolbar-search kind="files"></toolbar-search><span class="result-count">${s.length} of ${n.length}</span></div></div>`;if(c.filesViewMode==="table"){let d=c.filesSelectedFile&&e[c.filesSelectedFile]&&s.includes(c.filesSelectedFile)?c.filesSelectedFile:null;return u`<div class="${d?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${p}<div class="${d?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(h=>{let b=l(h),y=h===d,w=Ul(e[h].size);return u`<div class="${`tree-table-row${y?" selected":""}${b===0?" clean":""}`}" data-tree-select="${h}"><span class="tree-table-name" data-tooltip-truncated data-tooltip="${h}">${h}</span> ${a(h)??u`<span class="tree-table-clean-marker">—</span>`} ${w?u`<span class="tree-table-size">${w}</span>`:g}</div>`})}</div>${d?u`<aside class="tree-table-details" id="tree-table-details"><header class="tree-table-details-bar"><span class="tree-table-details-label">Details</span> <button type="button" class="tree-table-details-close" data-tree-deselect aria-label="Close details">×</button></header><div class="tree-table-details-body">${oF(e[d],d,r.get(d)??[],i)}</div></aside>`:g}</div></div>`}return u`<div class="tree-view">${p} ${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(d=>{let f=e[d],m=r.get(d)??[],h=Ul(f.size);return u`<section class="tree-file" id="${Np(d)}"><div class="tree-file-header"><span class="name">${d}</span> ${a(d)} ${h?u`<span class="tree-file-size">${h}</span>`:g} ${Dx(f.fileHash)}</div>${Wx(f,m,i)}</section>`})}</div>`}function Wx(e,t,n){return u`${e.fileHash||e.treeHash?u`<div class="tree-hashes hashes">${e.fileHash?u`<div class="tree-hash">file: ${e.fileHash}</div>`:g} ${e.treeHash?u`<div class="tree-hash">tree: ${e.treeHash}</div>`:g}</div>`:g} ${e.imports?.length>0?u`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${t.length>0?u`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${e.exports?.length>0?u`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(r=>u`<li><span class="name">${r}</span></li>`)}</ul></div>`:g}`}function oF(e,t,n,r){let o=Ul(e.size);return u`<div class="tree-detail-name"><span class="name">${t}</span> ${o?u`<span class="tree-detail-size">${o}</span>`:g} ${Dx(e.fileHash)}</div>${Wx(e,n,r)}`}var wa=null,Hx=null;function Ts(){return Hx}function sF(){return wa||(wa=(async()=>{let e="./graph.js";try{let t=await import(e);return Hx=t,t}catch(t){throw wa=null,t}})(),wa)}async function zg(e,t,n,r,o){try{let s=await sF(),i=s.buildGraphFromPrep(t);J(u`<graph-layout .graph="${i}" .options="${n}"></graph-layout>`,e);let a=e.querySelector("graph-layout");return await a.updateComplete,r(),o(),s.attachGraph2Interaction(e,i,r,o),a}catch(s){let i=s instanceof Error?s.message:String(s);return e.textContent=`Graph failed to load: ${i}`,null}}var va=null,hr=null;function Ux(){hr=null}function iF(){return va||(va=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw va=null,t}})(),va)}function aF(e){let t=we(e);if(t.size===0)return t;let n=[...t.keys()],{stripped:r}=Qn(n),o=new Map;for(let s=0;s<n.length;s++)o.set(r[s],t.get(n[s]));return o}async function Vx(e,t){let n=t?.integrity??"";(!hr||hr.integrity!==n||(t?.managedId||hr.managedId)&&hr.details!==t)&&(hr={integrity:n,managedId:t?.managedId,details:t?.managedId?t:null,promise:lF(t,n)});try{let r=await hr.promise;return!e.isConnected||e.contains(r)||e.replaceChildren(r),r}catch(r){hr=null;let o=r instanceof Error?r.message:String(r);return e.textContent=`Terminal failed to load: ${o}`,null}}async function lF(e,t){return(await iF()).createTerminalElement(aF(e),t)}function Is(e,t){let n=e.find(r=>r.integrity===t);return e.filter(r=>r.integrity!==t&&(n?.managedId?r.managedId&&n.repoId!=null&&r.repoId===n.repoId:!r.managedId))}function br(e){return{managedId:e.id,slug:e.slug,integrity:e.integrity,kind:e.kind,summary:e.summary,commitInfo:e.commitInfo??null,name:e.filename,size:e.byteSize,repoId:e.repoId,repoFullName:e.repoFullName,repoDirectory:e.repoDirectory??""}}function yr(e){return e.currentView!=="bundles"?null:e.bundleDetails?e.bundleDetails.managedId??null:e.bundles?.find(t=>t.integrity===e.selectedBundle)?.managedId??null}function wr(e,t,n,r="overview",o=null,s=[t]){if(!t?.managedId)return null;let i=e.find(l=>l.id===n&&l.bundles?.some(p=>p.id===t.managedId));if(n!=null&&!i)return null;let a=[t,...s.filter(l=>l.managedId&&l.managedId===o?.compareId)];return Xe({view:"bundles",teamId:i?.id??null,bundleId:t.managedId,bundleTab:r,...o},e,a.map(l=>({id:l.managedId,slug:l.slug})))}function Td(e,t=e.bundleDetailsTab){if(t!=="code")return null;let n=e.bundleCodeFileRequest;if(n?.bundle===e.selectedBundle){if(n.file==null)return null;let{bundle:s,...i}=n;return i}if(!e.bundleSourceFile||e.bundleDetails?.integrity!==e.selectedBundle)return null;let r=Rl(Lt(e.bundleDetails)).numbers.get(e.bundleSourceFile);if(r==null)return null;let o=e.bundleSourceTargetLine;return o?.bundle!==e.selectedBundle||o.path!==e.bundleSourceFile?{file:r}:{file:r,line:o.line,...o.end>o.line?{endLine:o.end}:{}}}function Wg(e,t=e.bundleDetailsTab){let n=e.bundleCompare;if(t!=="compare"||!n?.target||n.bundle!==e.selectedBundle)return null;if(e.bundles?.find(o=>o.integrity===e.selectedBundle)?.npm)return{compareSpec:n.target,...zo(n.mode)};let r=Is(e.bundles??[],e.selectedBundle).find(o=>o.integrity===n.target);return r?.managedId?{compareId:r.managedId,...zo(n.mode)}:null}function vr(e,t=e.bundleDetailsTab){let n=e.bundles?.find(s=>s.integrity===e.selectedBundle)?.npm,r=e.npmReview?.bundle===e.selectedBundle?e.npmReview:null,o=e.bundleCompare?.bundle===e.selectedBundle?e.bundleCompare:null;if(n&&t==="review"&&e.bundleDetailsTab==="compare"&&o?.target&&!(r?.started&&r.user===e.managedSession?.id))return{reviewPackage:n.name,reviewSpec:o.target};if(n&&t==="compare"&&e.bundleDetailsTab==="review"&&r?.reviewPackage===n.name)return{compareSpec:r.reviewSpec,...zo(o?.mode??"code")};if(t==="review"&&r){let{bundle:s,started:i,user:a,resume:l,...p}=r;return p}return Td(e,t)??Wg(e,t)}function jU(e,t,n=()=>null){let r=e.bundles?.find(a=>a.integrity===e.selectedBundle)?.npm;if(!r||t===e.bundleDetailsTab)return;let o=vr(e,t);if(t==="review"){let a=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.started&&e.npmReview.user===e.managedSession?.id;e.npmReview={...a?e.npmReview:{bundle:e.selectedBundle,...o},resume:!0}}if(t!=="compare")return;let s=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.reviewPackage===r.name?e.npmReview:null,i=o?.compareSpec??s?.reviewSpec??n(r);i&&(e.bundleDetailsTab==="review"||!o?.compareSpec)&&(e.bundleCompare={bundle:e.selectedBundle,target:i,mode:o?.compareMode??"overview"})}function As(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,br(t)])).values()]}var Hg=(e,t,n)=>{for(let r of t)if(r[0]===e)return(0,r[1])();return n?.()};var $a=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let r of n)r._$AO?.(t,!1),$a(r,t);return!0},Id=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},jx=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),uF(t)}};function cF(e){this._$AN!==void 0?(Id(this),this._$AM=e,jx(this)):this._$AM=e}function dF(e,t=!1,n=0){let r=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(r))for(let s=n;s<r.length;s++)$a(r[s],!1),Id(r[s]);else r!=null&&($a(r,!1),Id(r));else $a(this,e)}var uF=e=>{e.type==mw.CHILD&&(e._$AP??=dF,e._$AQ??=cF)},Ad=class extends gw{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,n,r){super._$AT(t,n,r),jx(this),this.isConnected=t._$AU}_$AO(t,n=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),n&&($a(this,t),Id(this))}setValue(t){if(Ww(this._$Ct))this._$Ct._$AI(t,this);else{let n=[...this._$Ct._$AH];n[this._$Ci]=t,this._$Ct._$AI(n,this,0)}}disconnected(){}reconnected(){}};var Ug=new WeakMap,Gx=ap(class extends Ad{render(e){return g}update(e,[t]){let n=t!==this.G;return n&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),g}rt(e){if(this.G!==void 0)if(this.isConnected||(e=void 0),typeof this.G=="function"){let t=this.ht??globalThis,n=Ug.get(t);n===void 0&&(n=new WeakMap,Ug.set(t,n)),n.get(this.G)!==void 0&&this.G.call(this.ht,void 0),n.set(this.G,e),e!==void 0&&this.G.call(this.ht,e)}else this.G.value=e}get lt(){return typeof this.G=="function"?Ug.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var Ed=2**20,Kx=Math.floor(2**25/15);function pF(e){let t=[];for(let n=0;n<e.length;){let r=Math.min(n+Ed,e.length);r<e.length&&e.codePointAt(r-1)>65535&&r--,t.push(e.slice(n,r)),n=r}return t}function Fd(e,t=!1){return e.length<=Ed&&!xs(e)?e:yx(e,t).flatMap(n=>typeof n=="string"?pF(n):[n])}var fF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu,qx=200;function mF(e){let t=[...e];return t.length>qx?`${t.slice(0,qx-1).join("").trimEnd()}\u2026`:e}var Ld=e=>e.split("/").map(encodeURIComponent).join("/"),Vg=(e,t)=>`https://github.com/${Ld(e)}/releases/tag/${Ld(t)}`;function Yx(e,t){return t&&e?.sha===t&&Array.isArray(e.tags)?e.tags.filter(n=>typeof n=="string"&&n):[]}function Es(e,t,n=null){let o=typeof e?.github=="string"&&typeof n=="string"&&n.toLowerCase()===e.github.toLowerCase()?Yx(e,t):[],s=t&&e?.sha===t&&typeof e.details?.subject=="string"?e.details:null;if(!(!s&&o.length===0))return JSON.stringify({tags:o,...s?{title:mF(s.subject),authorName:s.authorName,authorLogin:s.authorLogin,date:s.committedAt??s.authoredAt}:{}})}function Od(e,t="",n=null){let r=[],o=Pe(e);if(o){let i=[Ft(e.repo),Ft({directory:t})].filter(Boolean).join("/"),a=Gr(e.repo?.commit),l=i.split("/").map(encodeURIComponent).join("/"),p=`https://github.com/${o}`,d=Pe({repo:{github:n?.github}}),f=d?Yx(n,a):[];r.push({label:"GitHub",text:o+(i?`/${i}`:""),href:a||i?`${p}/tree/${a??"HEAD"}${l?`/${l}`:""}`:p,...a?{commit:{hash:a,text:a.slice(0,7),href:`${p}/commit/${a}`,...f.length>0?{tags:f.map(m=>({name:m,href:Vg(d,m)}))}:{}}}:{}})}let s=e?.package?.npm;if(typeof s?.name=="string"&&fF.test(s.name)){let i=typeof s.version=="string"?s.version.trim():"";r.push({label:"npm",text:s.name+(i?`@${i}`:""),href:`https://www.npmjs.com/package/${s.name}${i?`/v/${encodeURIComponent(i)}`:""}`})}return r}var gF=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,Xx=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,Gg=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,jg=e=>JSON.stringify(e).replaceAll(gF,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);function $e(e){let t=Xx(e,64);return t===e?jg(e):`${jg(t)}...`}var Nd=class extends Error{constructor(t,n){super(n===void 0?t:`${t} at line ${n+1}`),this.name=new.target.name,this.line=n}};var Wt=class extends Nd{};function se(e,t,n){if(!e)throw new Wt(typeof n=="function"?n():n,t.line)}function $r(e,t){t.lastIndex=e.pos;let n=t.exec(e.text);return n!==null&&(e.pos=t.lastIndex),n}var x8=2**20;var hF=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,bF=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,yF=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,wF=[31,28,31,30,31,30,31,31,30,31,30,31];function Kg(e){let t=hF.exec(e);if(t===null)return;let[n,r,o,s,i,a]=[Number(t[1]),Number(t[2]),Number(t[3]),Number(t[5]),Number(t[6]),Number(t[7])],l=n%4===0&&n%100!==0||n%400===0;if(r<1||r>12||o<1||o>(r===2&&l?29:wF[r-1])||s>23||i>59||a>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let p=[];(t[4]==="t"||t[9]==="z")&&p.push('a date-time with a lower-case "t" or "z" is not supported'),n===0&&p.push("the year 0000 is not supported"),a===60&&p.push("a leap second is not supported");let d=t[10]===void 0?0:(t[10]==="-"?-1:1)*(Number(t[11])*60+Number(t[12]));return{year:n,month:r,day:o,hour:s,minute:i,second:a,fraction:t[8]?.slice(1)??"",offset:d,unsupported:p}}var Bd=class{constructor(t){if(typeof t!="string"||Kg(t)?.unsupported.length!==0)throw new TypeError("expected an RFC 3339 offset date-time");this.text=t,Object.freeze(this)}toString(){return this.text}toJSON(){return this.text}toDate(){let{year:t,month:n,day:r,hour:o,minute:s,second:i,fraction:a,offset:l}=Kg(this.text),p=new Date(0);return p.setUTCFullYear(t,n-1,r),p.setUTCHours(o,s-l,i,Number(a.padEnd(3,"0").slice(0,3))),p}};function Zx(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let n=Kg(e);if(n?.unsupported.length===0)return new Bd(e);let r=/^\d{4}-\d\d-\d\d$/u.test(e)&&/^ \d\d:/u.test(t.text.slice(t.pos,t.pos+4));throw se(!r,t,'a date-time with a space in place of "T" is not supported'),se(!bF.test(e),t,()=>`local dates and times are not supported: ${$e(e)}`),se(!yF.test(e),t,()=>`a date-time or a time without seconds is not supported: ${$e(e)}`),se(n?.unsupported.length!==1,t,()=>`${n.unsupported[0]}: ${$e(e)}`),new Wt(`${$e(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,t.line)}var vF=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,$F=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,kF=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,Qx=2n**63n,eS=BigInt(Number.MAX_SAFE_INTEGER),xF={__proto__:null,x:16,o:21,b:63};function nS(e,t){let n=vF.test(e);if(!n&&!$F.test(e))return;let r=e.replaceAll("_",""),o=n?r.replace(/^[+-]/u,""):r.slice(2).replace(/^0+/u,""),i=o.length<=(n?19:xF[r[1]])?BigInt(n?r:`${r.slice(0,2)}${o||"0"}`):void 0;return se(i!==void 0&&i>=-Qx&&i<Qx,t,()=>`integer out of range ${$e(e)}`),i>=-eS&&i<=eS?Number(i):i}var tS={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};function rS(e){if(typeof e!="string"||!kF.test(e))return;if(e in tS)return tS[e];let t=Number(e.replaceAll("_","")),n=!/[1-9]/u.test(e.split(/[Ee]/u)[0]);return Number.isFinite(t)&&(t!==0||n)?t:null}var Pd=class{constructor(t){let n=rS(t);if(n==null)throw new TypeError("expected a TOML float that a double can hold");this.text=t,this.value=n,Object.freeze(this)}valueOf(){return this.value}toString(){return this.text}toJSON(){return this.value}};function oS(e,t){let n=rS(e);if(n!==void 0)return se(n!==null,t,()=>`float out of range ${$e(e)}`),new Pd(e)}var aS=64;function kr(e){for(;e.text[e.pos]===" "||e.text[e.pos]===" ";)e.pos++}function ho(e){if(e.pos>=e.text.length)return"the end of the text";let t=/^[^\n]*/u.exec(e.text.slice(e.pos,e.pos+64+1))[0].replace(/\r$/u,"");return t===""?"the end of the line":$e(t)}var lS="a carriage return must be followed by a line feed";function cS(e,t,n){throw new Wt(t==="\r"?lS:`${Gg(t)} is not allowed in ${n}`,e.line)}var zd=e=>e.pos>=e.text.length||e.text[e.pos]===`
|
|
133
|
+
`)}function gF(e){if(!c.currentWorkspace)return g;let t=e._reportName;if(!t)return g;if(R()&&!e._managedReportId)return g;let n=De[Ae(t)]??De.default,r=u`${W(n)}<span class="report-chip-label report-button-label">${oe(t)}</span>`;if(R()){let o=Ed(e,{reportId:e._managedReportId});if(o)return u`<a class="report-chip report-button comment-self-ref" href="${$n(o)}">${r}</a>`}return u`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${j(e)}" data-managed-report="${R()?e._managedReportId:g}">${r}</button>`}function Qx(e,t,n,r,o=null){let s=o==="table"?g:gF(r),i=he(r),a=!ur(r),l=!_t(r),p=i?.color??null,d=i?.comment??"",f=i?.fix??"",m=R()?"View comments":d?`Edit comment: ${d}`:"Add comment",h=f?`Edit fix link: ${f}`:"Add fix link (PR URL, etc.)",b=o==="focus"&&s===g,y=R()?"Comments":d?"Edit comment":"Comment",w=f?"Edit fix link":"Fix link",v=u`<button type="button" ?disabled="${a}" class="${q({"mark-comment":!0,"has-comment":d})}" data-tooltip="${d&&!R()?m:g}" aria-label="${m}">${Bd}${b?u`<span class="mark-btn-label">${y}</span>`:g}</button>`,x=u`<button type="button" ?disabled="${l}" class="${q({"mark-fix":!0,"has-fix":f})}" data-tooltip="${f?h:g}" aria-label="${h}">${Es}${b?u`<span class="mark-btn-label">${w}</span>`:g}</button>`,$=pF(r,b),k=u`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${Od}${b?u`<span class="mark-btn-label">Copy</span>`:g}</button>`,S=Ed(r)?u`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${iF}${b?u`<span class="mark-btn-label">Link</span>`:g}</button>`:g,C=R()?Pe({repo:{github:r.repo?.github||r._repoFallback}}):ux(r),_=s$(C,{title:fF(r),body:mF(r),labels:wx(r.isSecurity===!0,c.githubNewIssueLabels)}),L=R()&&c.managedSession&&!c.managedSession.publicShare&&c.currentManagedTeam,A=u`${uF}${b?u`<span class="mark-btn-label">Issue</span>`:g}`,E=Uc(r)?g:_?L?u`<button type="button" class="mark-issue" data-issue-form="${_}" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</button>`:u`<a class="mark-issue" href="${_}" target="_blank" rel="noopener" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</a>`:g,T=u`<button type="button" class="mark-claude" data-tooltip="${b?g:"Open in Claude Code (claude://) with a confirm-and-fix prompt"}" aria-label="Open finding in Claude Code">${dF}${b?u`<span class="mark-btn-label">Claude</span>`:g}</button>`,I=u`<color-marker .selected="${p}" .disabled="${l}"></color-marker>`,U=xs(e)!==e,K=e.linkedTabs?"change triage state for linked findings":U?"change triage state for App and own-source findings":n.hasConflict?"change triage state (colors mismatch \u2014 acts per-tab)":t.length>1?"change triage state for the whole group":"change triage state";return u`<div class="finding-actions">${s}<div class="finding-action-controls"><span class="mark-action-group">${v}${x}${$}</span><span class="mark-action-group">${k}${S}${E}${T}</span>${I}${bF(e,K,o,n,r)}</div></div>`}function hF(e){if(e.newState!=="open")return;let t=e.currentTarget,r=t.getRootNode().querySelector?.(`[popovertarget="${t.id}"]`);if(!r)return;let o=r.getBoundingClientRect(),s=t.offsetWidth||110,i=t.offsetHeight||100,a=4,l=o.right-s;l<4&&(l=4),l+s>window.innerWidth-4&&(l=window.innerWidth-s-4);let p=o.bottom+a;p+i>window.innerHeight-4&&o.top>i+a&&(p=o.top-i-a),t.style.top=`${p}px`,t.style.left=`${l}px`}function bF(e,t,n,r,o){let s=ie(e),i=!_t(o)||ma(e,r).length===0,a=i?null:Sg(e,r,o),l={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},p={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Delete",ignored:"Ignore"},d=!!c.shownTriage,f=d?l[c.shownTriage]:null,m=["inprogress","fixed","invalid","deleted","ignored"],b=d&&!(n==="focus")?[{key:"restore",label:"Restore"},...m.filter(v=>v!==c.shownTriage).map(v=>({key:v,label:p[v]}))]:m.map(v=>({key:v,label:p[v]})),y=["mark-triage-menu"];d&&y.push("with-label",`triage-state-${c.shownTriage}`);let w=`triage-menu-${s.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return u`<div class="triage-menu-wrap"><button type="button" class="${y.join(" ")}" popovertarget="${w}" popovertargetaction="toggle" aria-label="${t}" ?disabled="${i}">${f?u`<span class="mark-triage-label">${f}</span>`:g} <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="${w}" class="triage-menu" data-gid="${s}" role="menu" @beforetoggle="${hF}">${b.map(v=>u`<button type="button" class="${q({"triage-menu-item":!0,[`triage-menu-${v.key}`]:!0,active:a===v.key})}" data-triage-action="${v.key}" ?disabled="${i}" role="menuitem">${v.label}</button>`)}</div></div>`}function yF(e,t){let n=!!e?.comment,r=!!(e?.fix||tn(t)),o=e?.flagged===!0;return!n&&!r&&!o?g:u`<span class="tab-marks">${n?u`<span class="has-comment" role="img" aria-label="Has a comment">${Bd}</span>`:g}${r?u`<span class="has-fix" role="img" aria-label="Has a fix link">${Es}</span>`:g}${o?u`<span class="flagged" role="img" aria-label="Flagged">${Pd}</span>`:g}</span>`}function eS(e,t,n){let{app:r,source:o}=cx(e),s=i=>wF(i,j(i)===t,n);return u`<div class="tabs">${r.map(s)} ${r.length>0&&o.length>0?u`<span class="tab-level-separator" aria-hidden="true">•</span>`:g} ${o.map(s)}</div>`}function wF(e,t,n){let r=j(e),o=he(e),s=o?.color,i=fa(e,o),a=["tab",`tab-severity-${de(e,c.severityMode)}`];t&&a.push("active"),s&&a.push(`tab-mark-${s}`),i==="ignored"&&!n.allIgnored?a.push("tab-ignored"):i&&i!=="ignored"&&n.commonTriage===null&&a.push(`tab-${i}`);let l=qc(e),p=l?De[l]:null,d=!p&&e.confidence!=null;p?a.push("tab-with-analyzer"):d&&a.push("tab-with-confidence");let f=p?u`<span class="tab-analyzer" role="img" aria-label="${ys[l]}">${W(p)}</span>`:d?u`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:g;return u`<button type="button" class="${a.join(" ")}" data-tid="${r}" aria-pressed="${t}" aria-description="${s?`${s} color label`:g}"><span class="tab-label"><span class="tab-severity">${Kg(e,{variant:"tab"})}</span><span class="tab-indicators">${yF(o,e)}</span></span>${f}</button>`}function vF(e){if(c.viewMode==="table"||c.viewMode==="focus"){let t=e.confidence*10;return u`<div class="${`conf-ring ${de(e,c.severityMode)}`}"><svg viewBox="0 0 36 36" aria-hidden="true"><circle class="conf-ring-track" cx="18" cy="18" r="15.9155"/><circle class="conf-ring-arc" cx="18" cy="18" r="15.9155" style="stroke-dasharray: ${t} 100"/></svg> <span>${e.confidence}<small>/10</small></span></div><div class="value-label">Confidence</div>`}return u`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}var $F=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function kF(e){if(sr(e))return g;let t=e?.name;if(typeof t!="string"||!$F.test(t))return g;let n=e?.version,r=typeof n=="string"&&n.length>0,o=r?`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`:`https://www.npmjs.com/package/${t}`,s=r?`${t}@${n}`:t;return u`<span class="line-num"><a class="npm-link" href="${o}" target="_blank" rel="noopener noreferrer">npm: ${s}</a></span>`}function xF(e,t,n,r,o,s){let i=j(e),a=he(e),l=a?.comment??"",p=a?.fix??"",d=tn(e),f=Uc(e),m=Xl(e,En(e)),h=Jx(e,m),b=ui(e),y=ya(e),w=Zx(e,"loc",y,e.file,e.line),v=qg(m),x=u`<span class="line-num">${b?u`${h}, ${b}`:h}${w?.mark??g}${v}</span>`,$=Zr(e),k=String(e.discoveredIn??"").trim(),S=k===String(e.file??"").trim()?"":k,C=o==="focus"?kF(e.package?.npm):g,_=g;if(o!=="focus"&&R()&&w)_=u`<button type="button" class="finding-code-btn" data-finding-code-report="${y.reportId}" data-finding-code-file="${e.file}" data-finding-code-line="${e.line??""}" aria-label="${`Open full source for ${e.file}`}">Code</button>`;else if(o!=="focus"&&!R()&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){c.bundleHashTick;let K=new Set(e._bundleHashes),Q=so(e.fileHash).find(({integrity:ze})=>K.has(ze));Q&&(_=u`<button type="button" class="finding-code-btn" data-finding-code-bundle="${Q.integrity}" data-finding-code-file="${Q.file}" data-finding-code-line="${e.line??""}" data-tooltip="${`Open ${Q.file} in bundle source viewer`}">Code</button>`)}let{title:L,body:A}=Lw(e),E=Ow(A),T=E.findIndex(K=>K.label!==null),I=T===-1?E:E.slice(0,T),U=T===-1?[]:E.slice(T);return u`<div class="${q({"tab-body":!0,active:t})}" data-tid="${i}">${r>1?u`<div class="print-case-label">${n+1} of ${r}</div>`:g}<div class="finding-left">${a?.color||a?.flagged===!0?u`<div class="${a?.color?`finding-top-marks color-${a.color}`:"finding-top-marks"}">${a?.color?u`<span class="finding-color-mark" role="img" aria-label="${`Color label: ${a.color}`}"></span>`:g} ${a?.flagged===!0?u`<span class="finding-bookmark-mark" role="img" aria-label="Bookmarked"></span>`:g}</div>`:g} ${Kg(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?g:vF(e)} ${tF(e)} ${_}</div><div class="finding-body"><div class="line-row">${x} ${w?.tip??g} ${C} ${S?u`<span class="line-num discovered-in">(found analyzing ${S})</span>`:g} ${$?u`<span class="run-meta">${$}</span>`:g}</div>${w?.body??g} ${L?u`<div class="desc-title">${ka(L)}</div>`:g} ${I.map(K=>u`<div class="desc">${it(er(K.body))}</div>`)} ${oF(e,o)} ${U.map(K=>K.label===null?u`<div class="desc">${it(er(K.body))}</div>`:$a(K.label,K.body))} ${e.impact?$a("Impact",Wr(e.impact,e)):g} ${e.reproduction?$a("Reproduction",Wr(e.reproduction,e),"section",{collapsible:!0}):g} ${e.recommendation?$a("Recommendation",Wr(e.recommendation,e),"recommendation",{collapsible:!0}):g} ${e.confidenceReason?u`<div class="conf-reason">${it(Wr(e.confidenceReason,e))}</div>`:g} ${nF(e)} ${e.revalidateRecommendation&&jp()?$a("Revalidation recommendation",Wr(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):g} ${Do(e)&&e.correctedSeverityReason?u`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${it(e.correctedSeverityReason)}</div>`:g} ${eF(e,s)} ${R()?jx(e).map(K=>u`<div class="comment-block">${Bv(K,Ld(K.body))}</div>`):l?u`<div class="comment-block"><span class="comment-label">Comment:</span> ${Ld(l)}</div>`:g} ${f?u`<div class="fix-block"><span class="fix-label">Issue:</span><managed-fix-link .url="${f.url}"></managed-fix-link></div>`:g} ${p?u`<div class="fix-block"><span class="fix-label">Fix:</span> ${zo(p)?u`<managed-fix-link .url="${p}"></managed-fix-link>`:p}</div>`:g} ${d&&d!==p?u`<div class="fix-block"><span class="fix-label">Fix from issue:</span><managed-fix-link .url="${d}"></managed-fix-link></div>`:g}</div></div>`}function g8(e){let t=["finding",...SF(e)];return pr(e).length>1&&t.push("multi-case"),t}function h8(e,t={}){let{context:n=null}=t,r=Fe(e),o=pr(e),s=new Set(o.map(j)),i=je(e),a=j(i),l=i.commitHash?u`<div class="commit-ref">introduced in ${sF(i.repo?.github,i.commitHash)}</div>`:g,p=c.currentWorkspace&&l!==g;return u`${o.map((d,f)=>xF(d,j(d)===a,f,o.length,n,s))} ${p?u`<div class="marks-commit-row">${l}</div>`:g}<div class="marks"><div class="marks-left">${p?g:l} ${o.length>1?eS(o,a,r):g}</div>${Qx(e,o,r,i,n)}</div>`}function SF(e){let t=Fe(e),n=e.some(o=>o.critical||de(o,c.severityMode)==="critical"),r=[];return n&&r.push("is-critical"),t.hasConflict?r.push("has-conflict"):t.commonColor&&r.push(`mark-${t.commonColor}`),c.shownTriage&&r.push(`triage-${c.shownTriage}`),r}function b8(e){let t=Fe(e),n=pr(e),r=je(e),o=j(r),s=r,i=Ft(s),a=Zr(s),l=ui(s),p=l?`, ${l}`:"",d=Xl(s,En(s));return u`<div class="row-score">${Kg(s,{variant:"compact"})} ${s.confidence===void 0?g:u`<span class="row-conf"><strong>${s.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${i}</span> ${a?u`<span class="row-type">${a}</span>`:g}</div><div class="meta-row"><span class="row-loc">${Jx(s,d)}${p}</span> ${qg(d)}<div class="marks">${Qx(e,n,t,r,"table")}</div></div>${n.length>1?u`<div class="tabs-row">${eS(n,o,t)}</div>`:g}</div>`}function tS(e){if(!e)return g;let t=so(e)[0];return t?u`<button type="button" class="tree-code-btn" data-finding-code-bundle="${t.integrity}" data-finding-code-file="${t.file}" data-tooltip="${`Open ${t.file} in bundle source viewer`}">Code</button>`:g}function nS(e,t){let n=Object.keys(e).toSorted(),r=new Map;for(let d of n)for(let f of e[d].imports??[]){let m=r.get(f)??[];m.push(d),r.set(f,m)}let o=c.filesSearch.trim().toLowerCase(),s=o?n.filter(d=>d.toLowerCase().includes(o)):n,i=d=>e[d]?u`<a href="${`#${Kp(d)}`}"><span class="name">${d}</span></a>`:u`<span class="name">${d}</span>`,a=d=>{let f=t.get(d);if(!f)return null;let m=et.filter(h=>(f[h]??0)>0);return m.length===0?null:u`<span class="tree-count-chips">${m.map(h=>u`<span class="${`tree-count-chip ${h}`}">${f[h]} ${h.replaceAll("_"," ")}</span>`)}</span>`},l=d=>{let f=t.get(d);return f?et.reduce((m,h)=>m+(f[h]??0),0):0},p=u`<div class="tree-toolbar"><view-mode-buttons modes="table,list" kind="files"></view-mode-buttons><div class="search-row"><toolbar-search kind="files"></toolbar-search><span class="result-count">${s.length} of ${n.length}</span></div></div>`;if(c.filesViewMode==="table"){let d=c.filesSelectedFile&&e[c.filesSelectedFile]&&s.includes(c.filesSelectedFile)?c.filesSelectedFile:null;return u`<div class="${d?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${p}<div class="${d?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(h=>{let b=l(h),y=h===d,w=Yl(e[h].size);return u`<div class="${`tree-table-row${y?" selected":""}${b===0?" clean":""}`}" data-tree-select="${h}"><span class="tree-table-name" data-tooltip-truncated data-tooltip="${h}">${h}</span> ${a(h)??u`<span class="tree-table-clean-marker">—</span>`} ${w?u`<span class="tree-table-size">${w}</span>`:g}</div>`})}</div>${d?u`<aside class="tree-table-details" id="tree-table-details"><header class="tree-table-details-bar"><span class="tree-table-details-label">Details</span> <button type="button" class="tree-table-details-close" data-tree-deselect aria-label="Close details">×</button></header><div class="tree-table-details-body">${CF(e[d],d,r.get(d)??[],i)}</div></aside>`:g}</div></div>`}return u`<div class="tree-view">${p} ${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(d=>{let f=e[d],m=r.get(d)??[],h=Yl(f.size);return u`<section class="tree-file" id="${Kp(d)}"><div class="tree-file-header"><span class="name">${d}</span> ${a(d)} ${h?u`<span class="tree-file-size">${h}</span>`:g} ${tS(f.fileHash)}</div>${rS(f,m,i)}</section>`})}</div>`}function rS(e,t,n){return u`${e.fileHash||e.treeHash?u`<div class="tree-hashes hashes">${e.fileHash?u`<div class="tree-hash">file: ${e.fileHash}</div>`:g} ${e.treeHash?u`<div class="tree-hash">tree: ${e.treeHash}</div>`:g}</div>`:g} ${e.imports?.length>0?u`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${t.length>0?u`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${e.exports?.length>0?u`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(r=>u`<li><span class="name">${r}</span></li>`)}</ul></div>`:g}`}function CF(e,t,n,r){let o=Yl(e.size);return u`<div class="tree-detail-name"><span class="name">${t}</span> ${o?u`<span class="tree-detail-size">${o}</span>`:g} ${tS(e.fileHash)}</div>${rS(e,n,r)}`}var xa=null,oS=null;function Fs(){return oS}function _F(){return xa||(xa=(async()=>{let e="./graph.js";try{let t=await import(e);return oS=t,t}catch(t){throw xa=null,t}})(),xa)}async function Yg(e,t,n,r,o){try{let s=await _F(),i=s.buildGraphFromPrep(t);J(u`<graph-layout .graph="${i}" .options="${n}"></graph-layout>`,e);let a=e.querySelector("graph-layout");return await a.updateComplete,r(),o(),s.attachGraph2Interaction(e,i,r,o),a}catch(s){let i=s instanceof Error?s.message:String(s);return e.textContent=`Graph failed to load: ${i}`,null}}var Sa=null,br=null;function sS(){br=null}function RF(){return Sa||(Sa=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw Sa=null,t}})(),Sa)}function MF(e){let t=we(e);if(t.size===0)return t;let n=[...t.keys()],{stripped:r}=Qn(n),o=new Map;for(let s=0;s<n.length;s++)o.set(r[s],t.get(n[s]));return o}async function iS(e,t){let n=t?.integrity??"";(!br||br.integrity!==n||(t?.managedId||br.managedId)&&br.details!==t)&&(br={integrity:n,managedId:t?.managedId,details:t?.managedId?t:null,promise:TF(t,n)});try{let r=await br.promise;return!e.isConnected||e.contains(r)||e.replaceChildren(r),r}catch(r){br=null;let o=r instanceof Error?r.message:String(r);return e.textContent=`Terminal failed to load: ${o}`,null}}async function TF(e,t){return(await RF()).createTerminalElement(MF(e),t)}function Ls(e,t){let n=e.find(r=>r.integrity===t);return e.filter(r=>r.integrity!==t&&(n?.managedId?r.managedId&&n.repoId!=null&&r.repoId===n.repoId:!r.managedId))}function yr(e){return{managedId:e.id,slug:e.slug,integrity:e.integrity,kind:e.kind,summary:e.summary,commitInfo:e.commitInfo??null,name:e.filename,size:e.byteSize,repoId:e.repoId,repoFullName:e.repoFullName,repoDirectory:e.repoDirectory??""}}function wr(e){return e.currentView!=="bundles"?null:e.bundleDetails?e.bundleDetails.managedId??null:e.bundles?.find(t=>t.integrity===e.selectedBundle)?.managedId??null}function vr(e,t,n,r="overview",o=null,s=[t]){if(!t?.managedId)return null;let i=e.find(l=>l.id===n&&l.bundles?.some(p=>p.id===t.managedId));if(n!=null&&!i)return null;let a=[t,...s.filter(l=>l.managedId&&l.managedId===o?.compareId)];return Xe({view:"bundles",teamId:i?.id??null,bundleId:t.managedId,bundleTab:r,...o},e,a.map(l=>({id:l.managedId,slug:l.slug})))}function Dd(e,t=e.bundleDetailsTab){if(t!=="code")return null;let n=e.bundleCodeFileRequest;if(n?.bundle===e.selectedBundle){if(n.file==null)return null;let{bundle:s,...i}=n;return i}if(!e.bundleSourceFile||e.bundleDetails?.integrity!==e.selectedBundle)return null;let r=Fl(Ot(e.bundleDetails)).numbers.get(e.bundleSourceFile);if(r==null)return null;let o=e.bundleSourceTargetLine;return o?.bundle!==e.selectedBundle||o.path!==e.bundleSourceFile?{file:r}:{file:r,line:o.line,...o.end>o.line?{endLine:o.end}:{}}}function Xg(e,t=e.bundleDetailsTab){let n=e.bundleCompare;if(t!=="compare"||!n?.target||n.bundle!==e.selectedBundle)return null;if(e.bundles?.find(o=>o.integrity===e.selectedBundle)?.npm)return{compareSpec:n.target,...Uo(n.mode)};let r=Ls(e.bundles??[],e.selectedBundle).find(o=>o.integrity===n.target);return r?.managedId?{compareId:r.managedId,...Uo(n.mode)}:null}function $r(e,t=e.bundleDetailsTab){let n=e.bundles?.find(s=>s.integrity===e.selectedBundle)?.npm,r=e.npmReview?.bundle===e.selectedBundle?e.npmReview:null,o=e.bundleCompare?.bundle===e.selectedBundle?e.bundleCompare:null;if(n&&t==="review"&&e.bundleDetailsTab==="compare"&&o?.target&&!(r?.started&&r.user===e.managedSession?.id))return{reviewPackage:n.name,reviewSpec:o.target};if(n&&t==="compare"&&e.bundleDetailsTab==="review"&&r?.reviewPackage===n.name)return{compareSpec:r.reviewSpec,...Uo(o?.mode??"code")};if(t==="review"&&r){let{bundle:s,started:i,user:a,resume:l,...p}=r;return p}return Dd(e,t)??Xg(e,t)}function L8(e,t,n=()=>null){let r=e.bundles?.find(a=>a.integrity===e.selectedBundle)?.npm;if(!r||t===e.bundleDetailsTab)return;let o=$r(e,t);if(t==="review"){let a=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.started&&e.npmReview.user===e.managedSession?.id;e.npmReview={...a?e.npmReview:{bundle:e.selectedBundle,...o},resume:!0}}if(t!=="compare")return;let s=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.reviewPackage===r.name?e.npmReview:null,i=o?.compareSpec??s?.reviewSpec??n(r);i&&(e.bundleDetailsTab==="review"||!o?.compareSpec)&&(e.bundleCompare={bundle:e.selectedBundle,target:i,mode:o?.compareMode??"overview"})}function Os(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,yr(t)])).values()]}var Jg=(e,t,n)=>{for(let r of t)if(r[0]===e)return(0,r[1])();return n?.()};var Ca=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let r of n)r._$AO?.(t,!1),Ca(r,t);return!0},zd=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},aS=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),EF(t)}};function IF(e){this._$AN!==void 0?(zd(this),this._$AM=e,aS(this)):this._$AM=e}function AF(e,t=!1,n=0){let r=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(r))for(let s=n;s<r.length;s++)Ca(r[s],!1),zd(r[s]);else r!=null&&(Ca(r,!1),zd(r));else Ca(this,e)}var EF=e=>{e.type==_w.CHILD&&(e._$AP??=AF,e._$AQ??=IF)},Wd=class extends Rw{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,n,r){super._$AT(t,n,r),aS(this),this.isConnected=t._$AU}_$AO(t,n=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),n&&(Ca(this,t),zd(this))}setValue(t){if(Qw(this._$Ct))this._$Ct._$AI(t,this);else{let n=[...this._$Ct._$AH];n[this._$Ci]=t,this._$Ct._$AI(n,this,0)}}disconnected(){}reconnected(){}};var Zg=new WeakMap,lS=yp(class extends Wd{render(e){return g}update(e,[t]){let n=t!==this.G;return n&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),g}rt(e){if(this.G!==void 0)if(this.isConnected||(e=void 0),typeof this.G=="function"){let t=this.ht??globalThis,n=Zg.get(t);n===void 0&&(n=new WeakMap,Zg.set(t,n)),n.get(this.G)!==void 0&&this.G.call(this.ht,void 0),n.set(this.G,e),e!==void 0&&this.G.call(this.ht,e)}else this.G.value=e}get lt(){return typeof this.G=="function"?Zg.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var Hd=2**20,cS=Math.floor(2**25/15);function FF(e){let t=[];for(let n=0;n<e.length;){let r=Math.min(n+Hd,e.length);r<e.length&&e.codePointAt(r-1)>65535&&r--,t.push(e.slice(n,r)),n=r}return t}function Ud(e,t=!1){return e.length<=Hd&&!Rs(e)?e:Lx(e,t).flatMap(n=>typeof n=="string"?FF(n):[n])}var LF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu,dS=200;function OF(e){let t=[...e];return t.length>dS?`${t.slice(0,dS-1).join("").trimEnd()}\u2026`:e}var Vd=e=>e.split("/").map(encodeURIComponent).join("/"),Qg=(e,t)=>`https://github.com/${Vd(e)}/releases/tag/${Vd(t)}`;function uS(e,t){return t&&e?.sha===t&&Array.isArray(e.tags)?e.tags.filter(n=>typeof n=="string"&&n):[]}function Ns(e,t,n=null){let o=typeof e?.github=="string"&&typeof n=="string"&&n.toLowerCase()===e.github.toLowerCase()?uS(e,t):[],s=t&&e?.sha===t&&typeof e.details?.subject=="string"?e.details:null;if(!(!s&&o.length===0))return JSON.stringify({tags:o,...s?{title:OF(s.subject),authorName:s.authorName,authorLogin:s.authorLogin,date:s.committedAt??s.authoredAt}:{}})}function jd(e,t="",n=null){let r=[],o=Pe(e);if(o){let i=[Lt(e.repo),Lt({directory:t})].filter(Boolean).join("/"),a=Kr(e.repo?.commit),l=i.split("/").map(encodeURIComponent).join("/"),p=`https://github.com/${o}`,d=Pe({repo:{github:n?.github}}),f=d?uS(n,a):[];r.push({label:"GitHub",text:o+(i?`/${i}`:""),href:a||i?`${p}/tree/${a??"HEAD"}${l?`/${l}`:""}`:p,...a?{commit:{hash:a,text:a.slice(0,7),href:`${p}/commit/${a}`,...f.length>0?{tags:f.map(m=>({name:m,href:Qg(d,m)}))}:{}}}:{}})}let s=e?.package?.npm;if(typeof s?.name=="string"&&LF.test(s.name)){let i=typeof s.version=="string"?s.version.trim():"";r.push({label:"npm",text:s.name+(i?`@${i}`:""),href:`https://www.npmjs.com/package/${s.name}${i?`/v/${encodeURIComponent(i)}`:""}`})}return r}var NF=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,pS=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,th=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,eh=e=>JSON.stringify(e).replaceAll(NF,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);function $e(e){let t=pS(e,64);return t===e?eh(e):`${eh(t)}...`}var Gd=class extends Error{constructor(t,n){super(n===void 0?t:`${t} at line ${n+1}`),this.name=new.target.name,this.line=n}};var Ut=class extends Gd{};function se(e,t,n){if(!e)throw new Ut(typeof n=="function"?n():n,t.line)}function kr(e,t){t.lastIndex=e.pos;let n=t.exec(e.text);return n!==null&&(e.pos=t.lastIndex),n}var pV=2**20;var BF=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,PF=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,DF=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,zF=[31,28,31,30,31,30,31,31,30,31,30,31];function nh(e){let t=BF.exec(e);if(t===null)return;let[n,r,o,s,i,a]=[Number(t[1]),Number(t[2]),Number(t[3]),Number(t[5]),Number(t[6]),Number(t[7])],l=n%4===0&&n%100!==0||n%400===0;if(r<1||r>12||o<1||o>(r===2&&l?29:zF[r-1])||s>23||i>59||a>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let p=[];(t[4]==="t"||t[9]==="z")&&p.push('a date-time with a lower-case "t" or "z" is not supported'),n===0&&p.push("the year 0000 is not supported"),a===60&&p.push("a leap second is not supported");let d=t[10]===void 0?0:(t[10]==="-"?-1:1)*(Number(t[11])*60+Number(t[12]));return{year:n,month:r,day:o,hour:s,minute:i,second:a,fraction:t[8]?.slice(1)??"",offset:d,unsupported:p}}var Kd=class{constructor(t){if(typeof t!="string"||nh(t)?.unsupported.length!==0)throw new TypeError("expected an RFC 3339 offset date-time");this.text=t,Object.freeze(this)}toString(){return this.text}toJSON(){return this.text}toDate(){let{year:t,month:n,day:r,hour:o,minute:s,second:i,fraction:a,offset:l}=nh(this.text),p=new Date(0);return p.setUTCFullYear(t,n-1,r),p.setUTCHours(o,s-l,i,Number(a.padEnd(3,"0").slice(0,3))),p}};function mS(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let n=nh(e);if(n?.unsupported.length===0)return new Kd(e);let r=/^\d{4}-\d\d-\d\d$/u.test(e)&&/^ \d\d:/u.test(t.text.slice(t.pos,t.pos+4));throw se(!r,t,'a date-time with a space in place of "T" is not supported'),se(!PF.test(e),t,()=>`local dates and times are not supported: ${$e(e)}`),se(!DF.test(e),t,()=>`a date-time or a time without seconds is not supported: ${$e(e)}`),se(n?.unsupported.length!==1,t,()=>`${n.unsupported[0]}: ${$e(e)}`),new Ut(`${$e(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,t.line)}var WF=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,HF=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,UF=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,gS=2n**63n,hS=BigInt(Number.MAX_SAFE_INTEGER),VF={__proto__:null,x:16,o:21,b:63};function yS(e,t){let n=WF.test(e);if(!n&&!HF.test(e))return;let r=e.replaceAll("_",""),o=n?r.replace(/^[+-]/u,""):r.slice(2).replace(/^0+/u,""),i=o.length<=(n?19:VF[r[1]])?BigInt(n?r:`${r.slice(0,2)}${o||"0"}`):void 0;return se(i!==void 0&&i>=-gS&&i<gS,t,()=>`integer out of range ${$e(e)}`),i>=-hS&&i<=hS?Number(i):i}var bS={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};function wS(e){if(typeof e!="string"||!UF.test(e))return;if(e in bS)return bS[e];let t=Number(e.replaceAll("_","")),n=!/[1-9]/u.test(e.split(/[Ee]/u)[0]);return Number.isFinite(t)&&(t!==0||n)?t:null}var qd=class{constructor(t){let n=wS(t);if(n==null)throw new TypeError("expected a TOML float that a double can hold");this.text=t,this.value=n,Object.freeze(this)}valueOf(){return this.value}toString(){return this.text}toJSON(){return this.value}};function vS(e,t){let n=wS(e);if(n!==void 0)return se(n!==null,t,()=>`float out of range ${$e(e)}`),new qd(e)}var xS=64;function xr(e){for(;e.text[e.pos]===" "||e.text[e.pos]===" ";)e.pos++}function yo(e){if(e.pos>=e.text.length)return"the end of the text";let t=/^[^\n]*/u.exec(e.text.slice(e.pos,e.pos+64+1))[0].replace(/\r$/u,"");return t===""?"the end of the line":$e(t)}var SS="a carriage return must be followed by a line feed";function CS(e,t,n){throw new Ut(t==="\r"?SS:`${th(t)} is not allowed in ${n}`,e.line)}var Xd=e=>e.pos>=e.text.length||e.text[e.pos]===`
|
|
134
134
|
`||e.text.startsWith(`\r
|
|
135
|
-
`,e.pos),
|
|
135
|
+
`,e.pos),jF=/#[^[\p{Cc}--[\t\u0080-\u009F]]]*/vy;function _S(e){e.text[e.pos]==="#"&&(kr(e,jF),Xd(e)||CS(e,e.text[e.pos],"a comment"))}function Yd(e){if(e.text[e.pos]===`
|
|
136
136
|
`)e.pos+=1;else if(e.text.startsWith(`\r
|
|
137
|
-
`,e.pos))e.pos+=2;else return!1;return e.line++,!0}function
|
|
138
|
-
`,f:"\f",r:"\r",'"':'"',"\\":"\\"},
|
|
139
|
-
`).length-1,"")}var
|
|
140
|
-
`;continue}se(!
|
|
141
|
-
`).length-1;throw new Wt(VF[t[0]]??"a lone surrogate is not well-formed Unicode",n)}function Jg(e){jF(e);let t=Object.create(null),n={text:e,pos:0,line:0},r={root:t,current:t,implicit:new Set,pending:new Set,arrays:new Set,fixed:new Set};for(;n.pos<e.length;){let o=bS(n);o?.header===!0?WF(r,n,o.keys,o.array):o!==void 0&&UF(r,n,o.keys,o.value),yS(n)}return t}function GF(e){if(typeof e!="string")return null;let t=/^(?:github:|(?:git\+)?(?:(?:https?|ssh|git):\/\/(?:[\w.~%!$&'()*+,;=:-]*@)?(?:www\.)?github\.com(?::\d+)?\/|ssh:\/\/(?:[\w.~%!$&'()*+,;=-]*@)?(?:www\.)?github\.com:|(?:[^@/:]+@)?(?:www\.)?github\.com:))?([\w.-]+)\/([\w.-]+?)(?:\.git)?\/?$/iu.exec(e.trim().replace(/#.*$/su,"")),n=t&&`${t[1]}/${t[2]}`;return n&&gp("github",n)?n:null}function KF(e,t){if(typeof e!="string")return;let n=/^https?:\/\/(?:www\.)?github\.com\/([^/]+\/[^/]+)\/tree\/[^/#?]+\/([^#?]+)/iu.exec(e.trim());if(!(!n||n[1].toLowerCase()!==t.toLowerCase()))try{return decodeURIComponent(n[2])}catch{return}}var qF=e=>e.replaceAll("\\","/").split("/").every(t=>t===""||t===".");function YF(e){if(typeof e!="string")return{};let t=e.replaceAll("\\","/").split("/");if(t.includes(".."))return{};let n=t.filter(r=>r!==""&&r!==".").join("/");return gp("directory",n)?{directory:n}:{}}function vS(e){let t=e?.repository,n=typeof t=="string"?t:t?.url,r=GF(n);if(!r)return;let o=t.directory;return typeof o!="string"&&(o=KF(e.homepage,r),o!==void 0&&qF(o)&&(o=void 0)),{github:r,...YF(o)}}function Zg(e,t){let n=e?.[t];if(typeof n!="string")return null;try{return t.endsWith(".toml")?Jg(n):JSON.parse(n.replace(/^\uFEFF/u,""))}catch{return null}}function XF(e){let t=typeof e=="string"?e:e?.url;if(typeof t!="string")return null;let n=t.trim().replace(/#.*$/su,"").replace(/^github:/iu,"").replace(/^git\+/iu,"").replace(/^(?:ssh|git):\/\/(?:git@)?github\.com\//iu,"https://github.com/").replace(/^git@github\.com:/iu,"https://github.com/");return/^(?:https?:\/\/)?(?:www\.)?github\.com\//iu.test(n)?Pe({repo:{github:n}}):null}function Hd(e,t,n){let r=t?.ecosystem??e.ecosystem??"npm",o=r==="composer"?Zg(t?.files,"composer.json"):r==="cargo"?Zg(t?.files,"Cargo.toml")?.package:Zg(t?.files,"package.json"),s=t?.name??e.name,i=t?.version??e.version??o?.version,a=Pe(t),l=a?{github:a,directory:t.repo.directory}:r==="npm"||r==="soldeer"?vS(o):{github:[o?.repository,o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(f=>XF(f)).find(Boolean)},p=typeof l?.directory=="string"?l.directory:void 0,d=a?Gr(t.repo.commit):null;return{ecosystem:r,name:s,version:typeof i=="string"?i:void 0,github:l?.github??null,...p===void 0?{}:{directory:p},...d?{commit:d}:{},fileCount:n}}var $S=new WeakMap;function kS(e,t){let n=$S.get(e);if(n||$S.set(e,n=new Map),!n.has(t)){let r=`${t}/`,o=0,s=0;for(let[i,a]of e)i.startsWith(r)&&(o+=wn(a),s+=tv(a));n.set(t,{bytes:o,loc:s})}return n.get(t)}var Ud=new Set(["cargo","composer","soldeer"]);function Vd(e,t,n){if(t?.ecosystem!==void 0)return t.ecosystem;if(!t?.name||/(?:^|\/)vendor\/([^/]+\/[^/]+)$/u.exec(e)?.[1]!==t.name)return;let r=Object.entries(t.files??{}).filter(([o,s])=>typeof s=="string"&&(!n||n.has(`${e}/${o}`)));return r.length>0&&r.every(([o])=>/\.(?:php|phtml)$/iu.test(o))?"composer":void 0}function xS(e,t=e,n=null){let r={path:"",files:new Map,dirs:new Map};for(let s=0;s<e.length;s++){let i=e[s].split("/"),a=r,l=t[s].split("/");for(let[p,d]of i.slice(0,-1).entries())a.dirs.has(d)||a.dirs.set(d,{path:i.slice(0,p+1).join("/"),sourcePath:l.slice(0,-(i.length-p-1)).join("/"),files:new Map,dirs:new Map}),a=a.dirs.get(d);a.files.set(i.at(-1),t[s])}CS(r,n,n?new Set(t):null);let o=s=>{s.package&&(s.packageInfo=Hd(s.package,n?.get(s.sourcePath),s.fileCount));for(let i of s.dirs.values())o(i)};return o(r),r}function SS(e,t=null,n=null){let r=/(?:^|\/)node_modules\//u.exec(e),o=r?r.index+(r[0].startsWith("/")?1:0):e.length,s=n?new Set(n):null;for(let[i,a]of t??[]){let l=Vd(i,a,s);if(!Ud.has(l)||!a.name||i==="."||!e.startsWith(`${i}/`)&&!i.startsWith(e))continue;let p=(l==="soldeer"?/(?:^|\/)dependencies\//u:/(?:^|\/)vendor\//u).exec(`${i}/`),d=p?p.index+(p[0].startsWith("/")?1:0):i.lastIndexOf("/")+1;o=Math.min(o,d)}return e.slice(0,o)}function CS(e,t,n){for(let s of e.dirs.values())CS(s,t,n);e.fileCount=e.files.size+[...e.dirs.values()].reduce((s,i)=>s+i.fileCount,0);let r=t?.get(e.sourcePath),o=Vd(e.sourcePath,r,n);if(Ud.has(o)&&r.name&&(e.boundary=!0,e.package={name:r.name,version:r.version,ecosystem:o},e.hideSrc=e.dirs.size===1&&e.dirs.has("src"),e.hideSrc&&(e.srcNameConflicts=new Set([...e.dirs.get("src").files.keys()].filter(s=>e.files.has(s))))),/(?:^|\/)dependencies$/u.test(e.path)&&[...e.dirs.values()].some(s=>s.package?.ecosystem==="soldeer")&&(e.boundary=!0),/(?:^|\/)vendor$/u.test(e.path)){let s=new Map;for(let[i,a]of e.dirs)if(!a.package&&a.files.size===0&&a.dirs.size>0&&[...a.dirs.values()].every(l=>l.package?.ecosystem==="composer")){e.boundary=!0;for(let[l,p]of a.dirs)s.set(`${i}/${l}`,p)}else Ud.has(a.package?.ecosystem)&&(e.boundary=!0),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs)if(a.boundary=!0,i.startsWith("@")&&a.files.size===0&&[...a.dirs.keys()].every(l=>!l.startsWith(".")&&!l.startsWith("@")))for(let[l,p]of a.dirs)p.boundary=!0,p.package??={name:`${i}/${l}`},s.set(`${i}/${l}`,p);else!i.startsWith(".")&&!i.startsWith("@")&&(a.package??={name:i}),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules\/\.pnpm$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs){if(a.boundary=!0,a.files.size>0||a.dirs.size!==1)continue;let l=a.dirs.get("node_modules");if(!l||l.files.size>0||l.dirs.size!==1)continue;let p=l.dirs.values().next().value;if(!p.package)continue;let d=`${p.package.name.replace("/","+")}@`;if(!i.startsWith(d))continue;let f=/^(\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?)([_(].*)?$/iu.exec(i.slice(d.length));if(!f)continue;p.package={...p.package,version:f[1]},e.dirs.set(i,p);let m=bo(i,p);s.has(m)||s.set(m,[]),s.get(m).push(p)}for(let i of s.values())if(!(i.length<2)){i.sort((a,l)=>a.path.localeCompare(l.path));for(let[a,l]of i.entries())l.package.variant=a+1}}return e}function bo(e,t){let n=t.package;return n?`${n.name}${n.version?`${Ud.has(n.ecosystem)?" - ":"@"}${n.version}`:""}`:e}function _S(e,t,n="",r=null){let o=t.toLowerCase(),s=(i,a,l=null)=>{let p=new Map([...i.files].filter(([f,m])=>{let h=n&&m.startsWith(n)?m.slice(n.length):m,b=l?.srcNameConflicts.has(f)?`src/${f}`:f;return(!r||r(m))&&(h.toLowerCase().includes(o)||`${a}/${b}`.toLowerCase().includes(o))})),d=new Map;for(let[f,m]of i.dirs){let h=i.hideSrc&&f==="src",b=s(m,h?a:`${a}/${bo(f,m)}`,h?i:null);b&&d.set(f,b)}return p.size>0||d.size>0?{...i,files:p,dirs:d}:null};return o||r?s(e,""):e}function Qg(e,t,n){let r=[e];if(t.hideSrc&&t.dirs.has("src")){let s=t.dirs.get("src"),i=new Map(t.files);for(let[a,l]of s.files)i.set(t.srcNameConflicts.has(a)?`src/${a}`:a,l);return{names:r,node:{...t,sourcePath:s.sourcePath,files:i,dirs:s.dirs}}}if(e==="node_modules"&&t.files.size===0&&t.dirs.size===1&&t.dirs.has(".pnpm"))return{names:["node_modules",".pnpm"],node:t.dirs.get(".pnpm")};let o=Math.max(12,24-Math.max(0,n-1)*2);for(;!t.boundary&&t.files.size===0&&t.dirs.size===1&&r.length<3;){let[s,i]=t.dirs.entries().next().value;if(i.boundary||[...r,s].join("/").length>o)break;r.push(s),t=i}return{names:r,node:t}}function RS(e){if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.currentTarget,n=e.target.closest("summary, .bundle-code-tree-link");if(!n||!t.contains(n)||!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Home","End"].includes(e.key))return;e.preventDefault(),e.stopPropagation();let o=[...t.querySelectorAll("summary, .bundle-code-tree-link")].filter(l=>{let p=l.parentElement;return l.tagName==="SUMMARY"&&(p=p.parentElement),!p.closest("details:not([open])")}),s=o.indexOf(n),i=n.tagName==="SUMMARY"?n.parentElement:null,a=n;e.key==="ArrowDown"&&(a=o[Math.min(s+1,o.length-1)]),e.key==="ArrowUp"&&(a=o[Math.max(s-1,0)]),e.key==="Home"&&(a=o[0]),e.key==="End"&&(a=o.at(-1)),e.key==="ArrowRight"&&i&&(i.open?a=o[s+1]??n:n.click()),e.key==="ArrowLeft"&&(i?.open?n.click():a=(i??n).parentElement.closest("details")?.querySelector("summary")??n),a?.focus()}function JF([e,t],[n,r]){return bo(e,t).localeCompare(bo(n,r))||t.path.localeCompare(r.path)}function ZF(e,t=0,n=[]){for(let[r,o]of[...e.dirs.entries()].toSorted(JF))ZF(Qg(r,o,t).node,t+1,n);for(let[,r]of[...e.files.entries()].toSorted(([o],[s])=>o.localeCompare(s)))n.push(r);return n}function eh(e,t,n,r,o){let s=[t,n].filter(Boolean).join("/"),i=Gr(r);return{href:`https://github.com/${e}/blob/${i??"HEAD"}/${s.split("/").map(encodeURIComponent).join("/")}`,github:e,path:s,commit:i,package:typeof o?.name=="string"&&o.name?{name:o.name,version:o.version,ecosystem:o.ecosystem}:null}}function MS(e,t,n=null){if(typeof t!="string")return null;let r=e?.npm?.manifest;if(r){let f=Gr(r.gitHead);return r.github?.github&&f?eh(r.github.github,Ft({directory:r.github.directory??""}),t,f,null):null}if(e?.kind!=="stasis")return null;let o=e.bundle,s=null;for(let[f,m]of o?.modules??[]){let h=f==="."?t:t.startsWith(`${f}/`)?t.slice(f.length+1):null;if(h!==null&&Object.hasOwn(m.files,h)){s={dir:f,info:m,rel:h};break}}if(!s)return null;let{dir:i,info:a,rel:l}=s,p=i==="."?void 0:Vd(i,a,null)??(i.split("/").includes("node_modules")?"npm":void 0);if(p===void 0){let f=Pe(o),m=Pe({repo:{github:n?.github}}),h=f??m;if(!h)return null;let b=typeof o.repo?.directory=="string"?Ft(o.repo):m?.toLowerCase()===h.toLowerCase()?Ft({directory:n.directory}):"";return eh(h,b,t,f?o.repo?.commit:void 0,null)}let d=Hd({name:a.name,ecosystem:p},a,0);return d.github?eh(d.github,d.directory??"",l,d.commit,d):null}function TS(e,t=null){return u`<a class="bundle-code-github-link" href="${e.href}" target="_blank" rel="noopener noreferrer" aria-label="Open on GitHub" data-tooltip="${e.path}" data-tooltip-repo="${e.github}" data-tooltip-commit="${e.commit??g}" data-tooltip-commit-info="${Es(t,e.commit,e.github)??g}" data-tooltip-package="${e.package?.name??g}" data-tooltip-ecosystem="${e.package?.ecosystem??g}" data-tooltip-version="${e.package?.version??g}">${W(Kt)}${e.package?u`<span hidden data-tooltip-package-icon>${_l(e.package.ecosystem)}</span>`:g}</a>`}var ES=".bundle-code-main, .bundle-source-modal, .bundle-search-side",jd=new Map,nh=new WeakMap,th=null;function rh(e){if(!e){queueMicrotask(IS);return}if(IS(),jd.has(e))return;if(!e.isConnected){queueMicrotask(()=>{e.isConnected&&rh(e)});return}let t=e.querySelector(":scope > .bundle-source-code");if(!t)return;let n=new ResizeObserver(()=>{nh.get(e)?.width!==FS(e)&&AS(e)});n.observe(t),n.observe(e.parentElement);let r=new MutationObserver(()=>AS(e));r.observe(t,{childList:!0,subtree:!0,characterData:!0}),r.observe(e,{attributes:!0,attributeFilter:["class"]}),jd.set(e,()=>{n.disconnect(),r.disconnect()})}function IS(){for(let[e,t]of jd)e.isConnected||(t(),jd.delete(e))}function FS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col");if(!t||!n)return 0;let r=getComputedStyle(t);return e.parentElement.clientWidth-n.getBoundingClientRect().width-parseFloat(r.paddingLeft)-parseFloat(r.paddingRight)}function AS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col"),r=FS(e);if(!t||!n||!e.isConnected||r<=0)return;let o=e.classList.contains("is-wrapped"),s=nh.get(e)?.rows??new Map,i=null;for(let m of n.children)if((!i||(s.get(m)??1)<s.get(i))&&(i=m),!s.has(m))break;let a=i?parseFloat(getComputedStyle(i).height)/(s.get(i)??1):parseFloat(getComputedStyle(t).lineHeight),{rows:l,toggles:p}=QF(t,r,o,a),d=new Map;for(let[m,h]of l){let b=n.children[m];if(!b)continue;let y=`"${"\\A ".repeat(h-1)} "`;b.style.getPropertyValue("--wrap-breaks")!==y&&b.style.setProperty("--wrap-breaks",y),d.set(b,h)}for(let m of s.keys())d.has(m)||m.style.removeProperty("--wrap-breaks");nh.set(e,{rows:d,width:r});let f=e.closest(ES)?.querySelector("[data-bundle-source-wrap]");f&&(f.hidden=!p)}function QF(e,t,n,r){let o=getComputedStyle(e);th??=document.createElement("canvas").getContext("2d"),th.font=`${o.fontSize} ${o.fontFamily}`;let s=t/(2*th.measureText("0").width),i=[],a=null,l=null,p=0,d=0,f=()=>{p>s&&l&&i.push({line:d,first:a,last:l}),d++,p=0,a=l=null},m=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(let x=m.nextNode();x;x=m.nextNode()){let k=x.data;for(let $=0;$<k.length;){let S=k.indexOf(`
|
|
142
|
-
`,$),C=S===-1?k.length:S;if(C>$){a??={node:x,from:$,to:$+(k.codePointAt($)>65535?2:1)};let R=C;for(;R>$&&(k[R-1]===" "||k[R-1]===" ");)R--;R>$&&(l={node:x,from:R-(R-2>=$&&k.codePointAt(R-2)>65535?2:1),to:R}),p+=C-$}if(S===-1)break;f(),$=S+1}}f();let h=new Map,b=document.createRange(),y=({node:x,from:k,to:$})=>(b.setStart(x,k),b.setEnd(x,$),b.getBoundingClientRect()),w=e.getBoundingClientRect().left+e.clientLeft+parseFloat(o.paddingLeft),v=!1;for(let{line:x,first:k,last:$}of i){let S=!!k.node.parentElement.closest(".bundle-source-long-line");if(n||S){let C=Math.round((y($).top-y(k).top)/r)+1;C>1&&h.set(x,C),C>1&&!S&&(v=!0)}else!v&&y($).right-w>t+.5&&(v=!0)}return{rows:h,toggles:v}}function mV(e){let t=e.closest(ES)?.querySelector(".bundle-source-code-wrap"),n=t?.querySelectorAll(".bundle-source-lineno-row");if(!n?.length)return()=>{};let r=t.getBoundingClientRect().top,o=n.length-1,s=0;for(;s<o;){let l=s+o>>1;n[l].getBoundingClientRect().bottom<=r?s=l+1:o=l}let i=n[s],a=i.getBoundingClientRect().top-r;return()=>{i.isConnected&&(t.scrollTop+=i.getBoundingClientRect().top-r-a)}}var eL=new Set(["js","mjs","cjs","jsx","ts","mts","cts","tsx","css","json"]),tL=4*1024*1024;function nL(e){let t=/\.([a-z]+)$/iu.exec(e)?.[1]?.toLowerCase();return eL.has(t)?t:null}function LS(e,t,n=()=>Fl(e,t)){return nL(e)!==null&&wn(t)<=tL&&n().category==="minified"}var OS=e=>e.bundle??e.json??e,NS=new WeakMap;function oh(e,t){let n=NS.get(OS(e));if(n||NS.set(OS(e),n=new Map),!n.has(t)){let r=we(e).get(t);n.set(t,kv(t,typeof r=="string"?r:null,xn(e).get(t)))}return n.get(t)}var Ls=(e,t=n=>n)=>e?new Map(Object.entries(e).map(([n,r])=>[t(n),r])):null,rL=({stamps:e,readability:t,runsCode:n,exfiltration:r,hosts:o})=>({stamps:e,runsCode:Ls(n),exfiltration:Ls(r),hosts:Ls(o),readability:t&&{...t,controls:Ls(t.controls,Number)}});function oL(e){switch(e.id){case"held-runs-code":case"held-exfiltration":case"held-remote":case"held-ip-lookup":return{...e,files:e.files.map(t=>({...t,found:Ls(t.found),...t.added?{added:Ls(t.added)}:{}}))};case"popularity":return{...e,tier:e.tier??1/0};default:return e}}var BS=e=>({oldVersion:e.oldVersion??null,findings:e.findings.map(oL),files:new Map(Object.entries(e.files).map(([t,n])=>[t,rL(n)])),dependencies:e.dependencies,score:e.score??null}),Gd=e=>e?.npm?e.risk?.()?.files??null:null,sL={stamps:[],readability:null,runsCode:null,exfiltration:null,hosts:null};function Fn(e,t){return e?.npm?Gd(e)?.get(t)??sL:oh(e,t)}var sh=({names:e,loop:t})=>[e>=yv&&`${e.toLocaleString("en")}${e===wv?" or more":""} names such as _0x1a2b`,t&&"while(!![])"].filter(Boolean).join(", and ");function DS(e,t,n){return n===we(e).get(t)&&typeof n=="string"?Fn(e,t).readability:ih(e,t,n)}var PS=new WeakMap;function ih(e,t,n){let r=PS.get(e);r||PS.set(e,r=new Map);let o=r.get(t);if(o?.text===n)return o.read;let s=Fl(t,n);return r.set(t,{text:n,read:s}),s}function iL(e,t){let n=vv(e,t),r=n.slice(0,6).map(([o,s])=>`U+${o.toString(16).toUpperCase().padStart(4,"0")} \xD7${s.toLocaleString("en")}`);return`${Nt.get(t).name}: ${r.join(", ")}${n.length>6?`, and ${n.length-6} more`:""}`}var zS=({longLines:e,longest:t})=>`${e.toLocaleString("en")} ${e===1?"line":"lines"} over ${bv} characters, the longest ${t.toLocaleString("en")}`;function aL(e){let{average:t,category:n,longLines:r,inlineMap:o}=e,s=()=>zS(e);switch(n){case"binary":return"Not UTF-8 text, or holding a NUL: there is no text to read";case"map":return"A source map";case"inline-map":return`Inline source map, ${ge(o)}${r>0?`; minified: ${s()}`:""}`;case"minified":return`Minified: ${r>0?s():`its lines of code ${t.toLocaleString("en")} characters long on average, strings and comments aside, with few spaces`}`;default:return g}}function WS(e,t=!1){if(!e)return g;let n=yi(e),{tag:r,short:o,mark:s}=Nt.get(n);return u`<span class="${`npm-encoding-tag${s?` is-${s}`:""}`}" data-tooltip="${aL({...e,category:n})}">${t?o??r:r}</span>`}function TV(e){let t=e?.kind;return t!=="ascii"&&t!=="utf8"||yi(e)===t?g:WS({...e,category:t})}function HS(e,t=null){let n=e?Vo(e).filter(o=>["controls","invisible","long"].includes(o)&&(t===null||t.includes(jo(e,o)))):[];if(n.length===0)return g;let r=o=>o==="long"?`${zS(e)}${e.category==="long"?", among readable ones":""}`:iL(e.controls,o);return n.map(o=>u`<span class="${`npm-flag-tag is-${jo(e,o)}`}" data-tooltip="${r(o)}">${Nt.get(o).tag}</span>`)}function US(e){if(!e)return g;let t=yi(e);return t==="ascii"||t==="map"?HS(e):lL(e)}var lL=e=>e?u`${HS(e)}${WS(e)}`:g;function VS(e,t,n,r=!0){let{stamps:o,readability:s}=Fn(e,t),i=r&&o.some(({name:l})=>l==="Large"),a=s?.obfuscation;return!i&&!a?g:u`${i?u`<span class="npm-flag-tag is-notice" data-tooltip="${`A code file of ${ge(n)}, 256 KiB or more`}">Large</span>`:g}${a?u`<span class="npm-flag-tag is-warn" data-tooltip="${`An obfuscator's fingerprint: ${sh(a)}`}">Obfuscated</span>`:g}`}var YS=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 2.5c-1.4 0-2 .6-2 2v1.6c0 .9-.5 1.6-1.5 1.9 1 .3 1.5 1 1.5 1.9v1.6c0 1.4.6 2 2 2M10.5 2.5c1.4 0 2 .6 2 2v1.6c0 .9.5 1.6 1.5 1.9-1 .3-1.5 1-1.5 1.9v1.6c0 1.4-.6 2-2 2"/></svg>`,XS=e=>e?.status==="loading"?"Pretty-printing\u2026":e?.status==="error"?`Couldn't pretty-print${e.of>1?` ${e.failed} of ${e.of} files`:""}: ${e.message}`:"Pretty-print",cL=8,dL=4,uL=2,pL=30,fL=2,ka="The server's copy is of another file than the one open.",mL="The server didn't pretty-print this file.",Ns=e=>!(e>=400&&e<500&&e!==429),gL=5e3,hL=5*6e4,ah=new Map;function JS(e,t,n,r){if(!t?.retry){ah.delete(e);return}let o=ah.get(e)??0;ah.set(e,o+1),setTimeout(()=>{n()&&r()?.()},Math.min(gL*2**o,hL))?.unref?.()}var at=new Map,Bs=0,DV=()=>Bs,Os=new Map,bL=(e,t)=>`${e.integrity}\0${t}`,an=new Map,Rt=new Map,jS=new WeakMap;function ZS(e,t,n,r){if(!(t?.managedId||t?.npm)||typeof r!="string")return!1;let o=jS.get(e);return o||jS.set(e,o=new Map),o.has(n)||o.set(n,LS(n,r,()=>ih(e,n,r))),o.get(n)}var lh=!1,qd=new Set,QS=new Set;function yL(e,t){at.delete(e),at.set(e,t),lh||(lh=!0,QS=qd,qd=new Set,setTimeout(()=>{lh=!1})),qd.add(e),e1()}function e1(){for(let[e,t]of at){if(at.size<=cL)break;qd.has(e)||QS.has(e)||t.status==="loading"||(at.delete(e),Os.delete(e))}}var ch=0,GS=[];async function wL(e){ch<fL?ch++:await new Promise(t=>{GS.push(t)});try{return await e()}finally{let t=GS.shift();t?t():ch--}}async function vL(e,t,n,r,o,s){let i;try{let p=s??await Pr(o),{text:d,source:f}=await wL(()=>n.npm?Bk(n.npm.name,n.npm.version,r,p):Ok(n.managedId,r,p));i=f===p&&typeof d=="string"?{status:"ready",text:d,hash:await Pr(d)}:{status:"error",message:ka,retry:!0}}catch(p){if(p?.name==="AbortError"){at.get(e)===t&&(at.delete(e),Os.delete(e));return}i={status:"error",message:p?.message??String(p),retry:Ns(p?.status)}}if(at.get(e)!==t)return;at.set(e,i),Bs++;let a=Os.get(e),l=i.status==="error"&&i.retry;l||Os.delete(e),JS(`file ${e}`,l?i:null,()=>at.get(e)===i&&at.delete(e),()=>Os.get(e)),a?.(),e1()}function t1(){for(let[e,t]of an){if(an.size<=dL)break;t.rest&&an.delete(e)}}function KS(e,t){let n=e.notifiers.get(t);e.notifiers.delete(t),n?.()}async function $L(e,t,n,{npm:r}){let o=we(n),s;try{await Nk(r.name,r.version,async({path:i,source:a,text:l,status:p,message:d})=>{let f=o.get(i),h=typeof l=="string"&&typeof f=="string"&&a===await Pr(f)?{status:"ready",text:l,hash:await Pr(l)}:typeof l=="string"?{status:"error",message:ka,retry:!0}:{status:"error",message:d,retry:Ns(p)};t.copies.set(i,h),Bs++,KS(t,i)}),s={status:"error",message:mL,retry:!1}}catch(i){if(i?.name==="AbortError"){an.get(e)===t&&an.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}t.rest=s,Bs++;for(let i of[...t.notifiers.keys()])KS(t,i);t1()}function kL(e,t,n,r,o){let s=e.integrity,i=an.get(s);if(an.delete(s),i||(i={copies:new Map,notifiers:new Map,rest:null},$L(s,i,e,t)),an.set(s,i),t1(),r!==we(e).get(n))return{status:"error",message:ka,retry:!1};let a=i.copies.get(n)??i.rest;return a||(i.notifiers.set(n,o),{status:"loading"})}function n1(e,t,n,r,o){return c.bundleSourcePretty?t.npm?kL(e,t,n,r,o):r1(e,n,r,o,t):null}function r1(e,t,n,r,o=e){let s=bL(e,t),i=at.get(s),a=i??{status:"loading"};return yL(s,a),(a.status==="loading"||a.retry)&&Os.set(s,r),i||vL(s,a,o,t,n,e.fileHashes?.get(t)),a}var Kd=new Set;function qS(e){e&&(Kd.size===0&&setTimeout(()=>{let t=[...Kd];Kd.clear();for(let n of t)n()},pL),Kd.add(e))}function o1(){for(let[e,t]of Rt){if(Rt.size<=uL)break;t.ended&&Rt.delete(e)}}async function xL(e,t,n,r){let o={base:n,other:r},s=null;try{let i=async({side:a,path:l,source:p,text:d,status:f,message:m})=>{if(typeof d!="string"&&Ns(f))return;let h=Object.hasOwn(o,a)?o[a]:null,b=h&&we(h).get(l),y=typeof d=="string"&&typeof b=="string"&&p===(h.fileHashes?.get(l)??await Pr(b));t.copies.set(`${a}\0${l}`,y?{status:"ready",text:d,hash:await Pr(d)}:typeof d=="string"?{status:"error",message:ka,retry:!0}:{status:"error",message:m,retry:Ns(f)}),Bs++,qS(t.notify)};await(n.npm?Dk(n.npm.name,n.npm.version,r.npm.version,i):Pk(n.managedId,r.managedId,i))}catch(i){if(i?.name==="AbortError"){Rt.get(e)===t&&Rt.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}Object.assign(t,{ended:!0,rest:s}),Bs++,JS(`comparison ${e}`,s,()=>Rt.get(e)===t&&Rt.delete(e),()=>t.notify),qS(t.notify),o1()}function zV(e,t,n,r,o,s){let i=`${e.integrity}\0${t.integrity}`,a=Rt.get(i);Rt.delete(i),a||(a={copies:new Map,notify:null,ended:!1,rest:null},xL(i,a,e,t)),Rt.set(i,a),o1();let l=n==="base"?e:t;return o!==we(l).get(r)?{status:"error",message:ka,retry:!1}:(a.notify=s,a.copies.get(`${n}\0${r}`)??a.rest??(a.ended?r1(l,r,o,s):{status:"loading"}))}function WV(){if(c.bundleSourcePretty=!c.bundleSourcePretty,!c.bundleSourcePretty)return;let e=t=>t.status==="error"&&t.retry;for(let[t,n]of at)e(n)&&at.delete(t);for(let[t,n]of an)n.rest&&(e(n.rest)||[...n.copies.values()].some(e))&&an.delete(t);for(let[t,n]of Rt)n.ended&&(n.rest?e(n.rest):[...n.copies.values()].some(e))&&Rt.delete(t)}function dh(e,t,n){return e?.bundle===t&&e.files[e.at]===n?e:{bundle:t,files:n?[n]:[],at:0}}function UV(e,t){if(e.files[e.at]===t)return e;let n=[...e.files.slice(0,e.at+1),t];return{...e,files:n,at:n.length-1}}function VV(e,t){return{...e,at:Math.max(0,Math.min(e.at+t,e.files.length-1))}}function Ln({title:e,count:t,extra:n=g,tools:r=g,body:o,list:s=!1,className:i=""}){return u`<section class="${`bundles-overview-col ${i}`}"><header class="bundles-overview-col-head"><span class="bundles-overview-col-title">${e} <span class="bundles-overview-col-count">${t}</span>${n}</span>${r}</header><div class="${`bundles-overview-col-body${s?" bundles-overview-col-body--list":""}`}">${o}</div></section>`}var uh=1024,s1=1024*uh,i1=["tiny","small","medium","large","gigantic"],SL={dependencies:[1,4,11,26],files:[3,24,192,1536],lines:[400,3200,25600,204800],unpacked:[16*uh,128*uh,s1,8*s1]};function CL(e,t){let n=SL[e].findIndex(r=>t<r);return i1[n===-1?i1.length-1:n]}function Yd(e,t,n){return u`<span class="${`npm-sized is-${CL(e,t)}`}">${n}</span>`}var _L=["preinstall","install","postinstall"];function a1(e,t=!1){let n={...e};return!n.preinstall&&!n.install&&t&&(n.install="node-gyp rebuild"),_L.filter(r=>typeof n[r]=="string").map(r=>[r,n[r]])}function xa(e,t=[]){return a1(e?.installScripts,!!(t&&(t instanceof Set?t.has("binding.gyp"):t.includes("binding.gyp"))))}function XV(e,t=!1){let n=null;try{n=typeof e=="string"?JSON.parse(e.replace(/^\uFEFF/u,"")):null}catch{}let r=n&&typeof n=="object"&&n.scripts&&typeof n.scripts=="object"?n.scripts:{};return a1(r,t)}var ph=14*864e5,fh=(e,{minimumReleaseAge:t=ph,now:n=Date.now()}={})=>t>0&&typeof e=="string"&&n-Date.parse(e)<t,ej=90*864e5;var yo=72,Qe={top:6,right:0,bottom:18,left:40},RL=24,ML=4,Sa=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),l1=new Intl.NumberFormat("en"),Jd=e=>new Intl.DateTimeFormat("en",{...e,timeZone:"UTC"}).format,TL=Jd({month:"short",day:"numeric"}),Ds=Jd({month:"short",day:"numeric",year:"numeric"}),mh=Jd({month:"short",year:"numeric"}),c1=Jd({month:"long",year:"numeric"}),Zd=e=>e===1/0?"unpopular":`top ${e.toLocaleString("en")}`,IL=(e,t)=>{let n=t&&Cp(e);return u`<dd class="${`npm-downloads-tier ${n?"is-mid":Sp(e)}`}" data-tooltip="${n?t:g}">${Zd(e)}</dd>`},Ps={week:{label:"Weekly",of:e=>Sv(e).slice(-52),name:e=>`${TL(e.from)} \u2013 ${Ds(e.to)}`},month:{label:"Monthly",of:kp,name:e=>c1(e.from)}},gh=(e,t)=>`${l1.format(e)} downloads, ${t}`;function d1(e){let t=kp(e).at(-1);return t?bh(t):null}var bh=({total:e,from:t})=>({total:e,month:c1(t)});function AL(e){if(!(e>0))return 1;let t=10**Math.floor(Math.log10(e));return[1,2,2.5,5,10].map(n=>n*t).find(n=>n>=e)}var hh=class extends Et{static properties={downloads:{attribute:!1},status:{},known:{attribute:!1},_width:{state:!0},_at:{state:!0},_unit:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.downloads=null,this.status="loading",this.known=null,this._width=0,this._at=null,this._unit="week",this._resize=new ResizeObserver(([t])=>{this._width=Math.floor(t.contentRect.width)})}connectedCallback(){super.connectedCallback(),this._resize.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this._resize.disconnect()}_key(t){let n=this._periods.length-1,r={ArrowLeft:-1,ArrowRight:1,Home:-n-1,End:n+1};t.key in r&&(t.preventDefault(),this._at=Math.min(n,Math.max(0,(this._at??n)+r[t.key])))}willUpdate(t){let n=Ps[this._unit],{downloads:r}=this;if((t.has("downloads")||t.has("_unit"))&&(this._periods=n.of(r)),t.has("downloads")){this._latest=r==null?null:Object.fromEntries(Object.entries(Ps).map(([i,{of:a,name:l}])=>{let p=a(r).at(-1);return[i,{total:p?.total??0,tooltip:p&&gh(p.total,l(p))}]})),this._tier=xp(r);let o=r?.days.slice(-365),s=o?.reduce((i,a)=>i+a,0);this._year=r==null?null:{total:s,tooltip:gh(s,`${Ds(xv(r.start,r.days.length-o.length))} \u2013 ${Ds(Date.parse(r.end))}`)}}(t.has("downloads")||t.has("_unit")||t.has("_width"))&&(this._shape=this._shapeOf(n))}_shapeOf(t){let n=this._periods,r=this._width;if(n.length===0||r<=Qe.left+Qe.right)return null;let o=r-Qe.left-Qe.right,s=yo-Qe.bottom,i=AL(Math.max(...n.map(v=>v.total))),a=v=>s-v/i*(s-Qe.top),l=v=>v.toFixed(1),p=this._unit==="month",d=o/(p?n.length:Math.max(n.length-1,1)),f=p?v=>Qe.left+(v+.5)*d:v=>Qe.left+(n.length>1?v*d:o/2),m=n.length-1,h=v=>Math.min(m,Math.max(0,(p?Math.floor:Math.round)((v-Qe.left)/d))),b=mh(n[0].from),y=n.at(-1),w;if(p){let v=Math.min(RL,d*.7)/2;w={bars:n.map(({total:x},k)=>{let[$,S,C]=[f(k)-v,f(k)+v,a(x)],R=Math.min(ML,v,s-C);return`M${l($)},${s}V${l(C+R)}Q${l($)},${l(C)} ${l($+R)},${l(C)}H${l(S-R)}Q${l(S)},${l(C)} ${l(S)},${l(C+R)}V${s}Z`})}}else{let v=n.map((x,k)=>`${k===0?"M":"L"}${l(f(k))},${l(a(x.total))}`).join("");w={line:v,area:`${v}L${l(f(m))},${s}L${l(f(0))},${s}Z`}}return{x:f,y:a,bottom:s,indexAt:h,first:b,last:mh(y.to),...w,ticks:[[0,Sa.format(0)],[i,Sa.format(i)]],label:`${t.label} downloads over the last year, from ${b} to ${mh(y.to)}; the latest ${this._unit}: ${gh(y.total,t.name(y))}.`}}_stat(t,n,r){return u`<div class="npm-stat"><dt class="sr-only">${t}</dt><dd data-tooltip="${n?.tooltip||g}">${this._figure(n,r)}</dd></div>`}_figure(t,n){return u`${t?Sa.format(t.total):this.status==="loading"?"\u2026":"\u2014"}<span class="npm-stat-per">/${n}</span>`}_latestStat(){let t=this._latest?.[this._unit];return u`<div class="npm-stat"><dt class="sr-only">${Ps[this._unit].label} downloads</dt><dd class="npm-stat-units" data-tooltip="${t?.tooltip||g}">${Object.keys(Ps).map(n=>u`<span class="${n===this._unit?"":"is-held"}" aria-hidden="${n===this._unit?g:"true"}">${this._figure(this._latest?.[n],n)}</span>`)}</dd></div>`}_controls(t){return u`<div class="npm-downloads-controls"><span class="bundles-overview-sort" role="group" aria-label="Downloads by">${Object.entries(Ps).map(([n,{label:r}])=>u`<button type="button" aria-pressed="${String(this._unit===n)}" @click="${()=>{this._unit=n,this._at=null}}">${r}</button>`)} </span><span class="npm-downloads-readout" aria-live="polite">${t?u`<strong>${l1.format(t.total)}</strong> <span>${Ps[this._unit].name(t)}</span>`:g}</span></div>`}render(){let t=this.downloads!=null||this.status!=="ready",n=this._at===null?null:this._periods[this._at]??null;return u`<div class="npm-downloads-head"><dl class="npm-stats">${this._latestStat()} ${this._stat("Downloads, last 12 months",this._year,"year")} ${this._tier?u`<div class="npm-stat"><dt class="sr-only">Popularity</dt>${IL(this._tier,this.known)}</div>`:g}</dl>${t?this._controls(n):g}</div>${t?this._plot(n):g}`}_plot(t){let n=this._shape;if(!n)return u`<div class="npm-downloads-plot" style="height: ${yo}px"></div>`;let r=this._width;return u`<div class="npm-downloads-plot" style="height: ${yo}px" tabindex="0" role="img" aria-label="${n.label}" @pointermove="${o=>{this._at=n.indexAt(o.offsetX)}}" @pointerleave="${()=>{this._at=null}}" @keydown="${o=>this._key(o)}" @blur="${()=>{this._at=null}}"><svg width="${r}" height="${yo}" viewBox="0 0 ${r} ${yo}" aria-hidden="true">${n.ticks.map(([o,s])=>Un`<line class="npm-downloads-grid" x1=${Qe.left} x2=${r-Qe.right} y1=${n.y(o)} y2=${n.y(o)}></line>
|
|
143
|
-
<text class="npm-downloads-tick" x=${Qe.left-6} y=${n.y(o)} dy="0.32em" text-anchor="end">${s}</text>`)} ${n.bars?n.bars.map((o,s)=>Un`<path class=${`npm-downloads-bar${s===this._at?" is-at":""}`} d=${o}></path>`):Un`<path class="npm-downloads-area" d=${n.area}></path><path class="npm-downloads-line" d=${n.line}></path>`}<text class="npm-downloads-tick" x="${Qe.left}" y="${
|
|
144
|
-
<circle class="npm-downloads-dot" cx=${n.x(this._at)} cy=${n.y(t.total)} r="4"></circle>`:g}</svg></div>`}};customElements.get("npm-downloads-chart")||customElements.define("npm-downloads-chart",hh);function yh(e,t){let n=wh(e);return[n,`${n}.js`,`${n}.cjs`,`${n}.mjs`,`${n}/index.js`].find(r=>r&&t?.has(r))}var wh=e=>e.replace(/^(?:\.\/)+/u,"").replace(/\/+$/u,""),Ca=/^licen[cs]e(?:-[\w.]+)?(?:\.(?:md|txt))?$/iu;function u1(e,t){let n=t.filter(o=>Ca.test(o)),r=o=>{let s=o.toLowerCase().match(/^[a-z]+/u)?.[0]??"";return n.find(a=>{let l=a.toLowerCase().match(/^licen[cs]e-([a-z]+)/u)?.[1];return l!==void 0&&s!==""&&(l.startsWith(s)||s.startsWith(l))})??(n.length===1?n[0]:null)};return e.split(/(\s+(?:OR|AND|WITH)\s+|[()])/u).filter(Boolean).map(o=>({text:o,file:/^[\w.+-]+$/u.test(o)&&!/^(?:OR|AND|WITH)$/u.test(o)?r(o):null}))}var On=e=>e?.replace(/\.git$/u,""),vh=new Map([["github",{label:"GitHub",domain:"github.com",protocols:["git:","http:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o,s]=e.split("/",5);return(!o||o==="tree")&&n&&On(r)?[n,On(r),o?s:t.slice(1)]:null}}],["bitbucket",{label:"Bitbucket",domain:"bitbucket.org",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="get"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}],["gitlab",{label:"GitLab",domain:"gitlab.com",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let n=e.slice(1),r=n.lastIndexOf("/");return n.includes("/-/")||n.includes("/archive.tar.gz")?null:n.slice(0,Math.max(r,0))&&On(n.slice(r+1))?[n.slice(0,r),On(n.slice(r+1)),t.slice(1)]:null}}],["gist",{label:"Gist",domain:"gist.github.com",protocols:["git:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="raw"&&(n||r)?[r?n:null,On(r||n),t.slice(1)]:null}}],["sourcehut",{label:"SourceHut",domain:"git.sr.ht",protocols:["git+ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="archive"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}]]),EL=new Map([...vh.values()].map(e=>[e.domain,e])),FL=new Set(["git+ssh:","ssh:","git+https:","git:","http:","https:","git+http:",...[...vh.keys()].map(e=>`${e}:`)]);function LL(e){let t=e.indexOf("#"),n=e.indexOf("/"),r=o=>o>-1&&!(t>-1&&o>t);return n>0&&!e.startsWith(".")&&(t>-1?e[t-1]!=="/":!e.endsWith("/"))&&![/\s/u.exec(e)?.index??-1,e.indexOf("@"),e.indexOf(":"),e.indexOf("/",n+1)].some(r)}var Qd=e=>{try{return new URL(e)}catch{return null}};function OL(e){let t=e.indexOf("@"),n=e.indexOf(":"),r=FL.has(e.slice(0,n+1))||t>-1&&t<n?e:t>-1?`git+ssh://${e}`:e.indexOf("//")===n+1?e:`${e.slice(0,n+1)}//${e.slice(n+1)}`;if(Qd(r))return Qd(r);let o=i=>{let a=r.indexOf("#");return r.lastIndexOf(i,a>-1?a:1/0)},s=o(":")>o("@")?`${r.slice(0,o(":"))}/${r.slice(o(":")+1)}`:r;return s.lastIndexOf(":",s.indexOf("#")>-1?s.indexOf("#"):1/0)===-1&&!s.includes("//")&&(s=`git+ssh://${s}`),Qd(s)}function NL(e){if(!e)return null;let t=OL(LL(e)?`github:${e}`:e);if(!t)return null;let n=vh.get(t.protocol.slice(0,-1)),r=n??EL.get(t.hostname.replace(/^www\./u,"")),o=n?[t.pathname.replace(/^\/?[^@]*@|^\//u,""),t.hash.slice(1)]:r?.protocols.includes(t.protocol)&&r.repo(t);try{return o?(o.forEach(s=>s&&decodeURIComponent(s)),r):null}catch{return null}}function BL(e){let t=String(e??"").trim();if(/^(?:[.]|~\/|\/|[a-z]:|file:)/iu.test(t))return"path";if(/^npm:/iu.test(t)||!/[/:]|[.](?:tgz|tar\.gz|tar)$/iu.test(t))return"registry";let n=NL(t);if(n)return n.label;if(/^(?:git\+)?[a-z]+:/iu.test(t)){let r=/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#.*)?$/iu.exec(t);if(t.startsWith("git+ssh:")&&r&&!/:\d+(?:\/|$)/u.test(r[1]))return"git";let o=Qd(t)?.protocol;return/^(?:git|git\+(?:https?|rsync|ftp|file|ssh)):$/u.test(o)?"git":/^https?:$/u.test(o)?"URL":null}return/\/|[.](?:tgz|tar\.gz|tar)$/iu.test(t)?"path":"registry"}function zs(e){let[,t,n=""]=/^npm:((?:@[^/@]+\/)?[^/@]+)(?:@(.*))?$/iu.exec(String(e??"").trim())??[];return t?{name:t,spec:n}:null}var p1=e=>BL(e)==="registry";var PL=[["dependencies",null],["peerDependencies","peer"],["optionalDependencies","optional"]];function Ws(e){let t=[];for(let[n,r]of PL)for(let[o,s]of Object.entries(e?.[n]??{})){let i=zs(s)?.name??o;t.push({name:o,range:s,kind:r,opens:$l(i)&&p1(s)?i:null})}return t.toSorted((n,r)=>n.name.localeCompare(r.name)||(n.kind??"").localeCompare(r.kind??""))}function $h(e,t){let n=l=>new Map(Ws(l).map(p=>[`${p.kind??""}\0${p.name}`,p])),r=n(t),o=n(e),s=[],i=[],a=[];for(let[l,{name:p,kind:d,range:f,opens:m}]of o){let h=r.get(l);h?h.range!==f&&i.push({key:l,name:p,kind:d,from:f,to:h.range,opens:h.opens}):a.push({key:l,name:p,kind:d,range:f,opens:m})}for(let[l,{name:p,kind:d,range:f,opens:m}]of r)o.has(l)||s.push({key:l,name:p,kind:d,range:f,opens:m});return{removed:a,added:s,changed:i}}var eu=(e=[])=>e.map(({check:t,label:n,tooltip:r})=>u`<span class="${`npm-dependency-flag is-${t}`}" data-tooltip="${r}">${n}</span>`);function ln(e,t=null){let n=Nn("risk",`${e.name}@${e.version}${t===null?"":`..${t}`}`,()=>Ek(e.name,e.version,t),BS);return n.status==="ready"?n:null}var DL=/^https?:\/\/(?:www\.)?npmjs\.(?:com|org)\/package\/((?:@[^/]+\/)?[^/?#]+)(?:\/v\/([^/?#]+))?\/?(?:[?#].*)?$/u;function v1(e){let t=String(e??"").trim(),n=DL.exec(t),r,o=null;if(n)try{[r,o]=[decodeURIComponent(n[1]),n[2]?decodeURIComponent(n[2]):null]}catch{return null}else{let s=t.indexOf("@",1);[r,o]=s===-1?[t,null]:[t.slice(0,s),t.slice(s+1)]}return!$l(r)||o!==null&&!Lw(o)?null:{name:r,spec:o}}function zL(e,t){let n=new Set(t),r=[];for(let o of[e?.main,e?.module,"index.js"]){if(typeof o!="string")continue;let s=yh(o,n);s&&!r.includes(s)&&r.push(s)}return r}function WL(e){return{integrity:e.integrity,kind:"sourcemap",name:`${e.name}@${e.version}`,size:e.tarballSize,npm:{name:e.name,version:e.version,private:e.private===!0,published:typeof e.published=="string"?e.published:null,manifest:e.manifest??{}}}}function HL(e,t){let n=Array.isArray(t.files)?t.files:[],r=n.map(([o])=>o);return{integrity:e.integrity,kind:"sourcemap",size:e.size,npm:e.npm,json:{version:3,sources:r,sourcesContent:n.map(([,,o])=>typeof o=="string"?o:null)},fileSizes:new Map(n.map(([o,s])=>[o,s])),npmBinaries:new Map(n.filter(([,,o,s])=>typeof o!="string"&&typeof s=="string").map(([o,s,,i])=>[o,{size:s,digest:i}])),npmEntries:zL(e.npm.manifest,r),risk:()=>ln(e.npm)}}function Ra(e,t="overview",n=null){return e?.npm?{view:"npm",packageName:e.npm.name,packageSpec:e.npm.version,bundleTab:xl.has(t)?t:"overview",...n}:null}var UL=3,f1=new Map,Bn=new Map,VL=1e4,jL=5*6e4,m1=null;function tu(){let e=c.managedSession?`${c.managedSession.id}\0${c.managedSession.role}`:null;return e!==m1&&(f1.clear(),Bn.clear(),m1=e),f1}function g1(e,t){let n=tu();for(n.delete(e.name),n.set(e.name,{entry:e,details:t});n.size>UL;)n.delete(n.keys().next().value)}async function $1(e,t,n){let r=tu().get(`${e}@${t}`);if(r)return g1(r.entry,r.details),r;let o=await Rk(e,t,n),s=WL(o),i=HL(s,o);return s.npm.private||g1(s,i),GL(o),{entry:s,details:i}}function GL({name:e,version:t,known:n}){if(!n||typeof n!="object")return;let r={stats:e,advisories:e,tags:`${e}@${t}`,socket:`${e}@${t}`,provenance:`${e}@${t}`};for(let[o,s]of Object.entries(r)){let i=`${o}\0${s}`;n[o]&&Bn.get(i)?.status!=="ready"&&Bn.set(i,{status:"known",data:n[o]})}}function Nn(e,t,n,r){tu();let o=`${e}\0${t}`,s=Bn.get(o);if(s?.status==="known"){let a={status:"ready",...r(s.data)};return Bn.set(o,a),a}if(s&&!(s.status==="error"&&Date.now()>=s.retryAt))return s;let i={status:"loading",failures:s?.failures??0};return Bn.set(o,i),n().then(a=>({status:"ready",...r(a)}),()=>{let a=i.failures+1,l=Math.min(VL*2**(a-1),jL);return{status:"error",failures:a,wait:l,retryAt:Date.now()+l}}).then(a=>(Bn.get(o)!==i||(Bn.set(o,a),a.status==="error"&&setTimeout(()=>{Bn.get(o)===a&&O()},a.wait).unref?.(),KL()),null)).catch(()=>{}),i}var kh=!1;function KL(){kh||(kh=!0,queueMicrotask(()=>{kh=!1,O()}))}function nu(e){return Nn("versions",e,()=>Mk(e),t=>({versions:t.versions??[],distTags:t.distTags??{},times:t.times??{},created:typeof t.created=="string"?t.created:null,private:t.private===!0,teamScoped:t.teamScoped===!0}))}function qL(e={}){let t=new Map;for(let[n,r]of Object.entries(e))t.set(r,[...t.get(r)??[],n]);return t}function k1(e,t,n=Date.now()){let r=qL(e.distTags);return(e.versions?.includes(t)?e.versions:[t,...e.versions??[]]).map(s=>{let i=e.times?.[s];return{id:s,detail:r.get(s)?.join(", ")??"",...i&&{date:i.slice(0,10)},...i&&x1(e,i,n)&&{age:Rh(i,n)}}})}function x1(e,t,n=Date.now()){return e.status==="ready"&&fh(t,{minimumReleaseAge:e.teamScoped?0:ph,now:n})}var xh=new Intl.RelativeTimeFormat("en",{numeric:"auto"});function h1(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/864e5),r=n<60?xh.format(-n,"day"):n<730?xh.format(-Math.floor(n/30.44),"month"):xh.format(-Math.floor(n/365.25),"year");return`${Ds(Date.parse(e))} \xB7 ${r}`}var Sh=new Intl.RelativeTimeFormat("en",{numeric:"always"});function Rh(e,t=Date.now()){let n=Math.max(0,Math.floor((t-Date.parse(e))/6e4));return n<60?Sh.format(-n,"minute"):n<1440?Sh.format(-Math.floor(n/60),"hour"):Sh.format(-Math.floor(n/1440),"day")}var Mh=e=>Ds(Date.parse(e)),S1=e=>`Published on ${Mh(e)}`;function C1(e){let{name:t,version:n}=e.npm,r=nu(t),o=k1(r,n).map(({id:s,detail:i,date:a,age:l})=>({id:s,name:`${t}@${s}`,displayLabel:s,format:"npm",detail:i,...a&&{date:a},...l&&{dateWarning:l}}));return{noun:"version",base:n,widest:{name:`${t}@10.90.90`,detail:"latest"},pending:r.status==="loading",error:r.status==="error"?`Couldn't list the versions of ${t}.`:null,options:o.filter(s=>s.id!==n),choices:o,name:s=>s===e.integrity||s===n?e.name:`${t}@${s}`,load:async s=>(await $1(t,s)).details,dependencies:ZL,openDependency:eO,open:(s,i,a)=>xr(t,s,"compare",i?{compareSpec:i,...zo(a)}:{})}}function xr(e=null,t=null,n="overview",r={}){!_()||!te?.active||te.navigate(e==null?{view:"npm"}:{view:"npm",packageName:e,packageSpec:t,bundleTab:n,...r})}function Ch(e){c.currentView="npm",c.npmLookup=e,c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1})}async function _1(e,t,n){let{packageName:r,packageSpec:o=null,bundleTab:s="overview"}=e;if(r==null)return Ch({input:c.npmLookup?.input??"",pending:!1,error:null}),n(),{view:"npm"};let i=`${r}${o==null?"":`@${o}`}`,a=c.currentView==="bundles"&&c.bundleDetails?.npm,l=a&&c.bundles?.[0]?.npm?.name===r&&c.bundles[0].npm.version===o?c.bundles[0]:null,p=l?c.bundleDetails:null;if(!l){let f=o!=null&&tu().has(`${r}@${o}`);!a&&!f&&(Ch({input:i,pending:!0,error:null}),n());try{({entry:l,details:p}=await $1(r,o??"latest",{signal:Le()}))}catch(m){return m?.name==="AbortError"||!t()?!1:(_a=null,Ch({input:i,pending:!1,error:m.message}),{view:"npm"})}if(!t()||!_())return!1}_a?.name===r&&_a.spec===o&&(M1([i,...Th().filter(f=>f!==i)]),_a=null),Bt();let d=c.bundleCompare?.bundle===l.integrity?c.bundleCompare:null;return s==="review"&&(c.npmReview={bundle:l.integrity,...e.reviewPackage?{reviewPackage:e.reviewPackage,reviewSpec:e.reviewSpec??null}:{}}),c.bundles=[l],gr(l.integrity,s),s==="code"&&e.file!=null&&(c.bundleCodeFileRequest={bundle:l.integrity,file:e.file,...e.line==null?{}:{line:e.line},...e.endLine==null?{}:{endLine:e.endLine}}),s==="compare"&&e.compareSpec!=null?c.bundleCompare={bundle:l.integrity,target:e.compareSpec,mode:kl(e.compareMode)}:d&&(c.bundleCompare=d),c.bundleDetails=p,c.npmLookup={input:l.name,pending:!1,error:null},c.currentManagedTeam=null,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),n(),document.querySelector("#main-content")?.scrollTo({top:0}),Ra(l,c.bundleDetailsTab,vr(c))}var YL=10,R1=()=>`deepview.npm.recent.${c.managedSession?.id??"anonymous"}`,_a=null;function Th(){try{let e=JSON.parse(localStorage.getItem(R1())??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"&&v1(t)):[]}catch{return[]}}function M1(e){try{localStorage.setItem(R1(),JSON.stringify(e.slice(0,YL)))}catch{}}function XL(e){M1(Th().filter(t=>t!==e)),O()}function T1(e){let t=v1(e);if(!t){c.npmLookup={input:e??"",pending:!1,error:"Enter a package name, like lodash, @scope/name or name@1.2.3."},O();return}_a=t,xr(t.name,t.spec)}function JL(e){e.preventDefault(),T1(e.currentTarget.querySelector('input[name="package"]')?.value)}function I1(){let e=c.npmLookup??{input:"",pending:!1,error:null},t=["admin","manage"].includes(c.managedSession?.role),n=Th();return u`<section class="npm-lookup" aria-labelledby="npm-lookup-title"><header class="npm-lookup-head"><span class="npm-lookup-icon" aria-hidden="true">${W(Lo)}</span><h1 id="npm-lookup-title">npm packages</h1></header><p class="npm-lookup-intro">Open a published version to read its files, as its tarball has them. ${t?g:"You can open public packages, and private ones in npm scopes your teams list."}</p><form class="npm-lookup-form" @submit="${JL}"><input name="package" type="text" aria-label="Package" autocomplete="off" spellcheck="false" maxlength="500" placeholder="lodash, @scope/name@1.2.3 or an npmjs.com link" .value="${e.input??""}" ?disabled="${e.pending}"> <button type="submit" ?disabled="${e.pending}">Open</button></form><div class="npm-lookup-message"><p class="npm-lookup-status" role="status">${e.pending?`Opening ${e.input}\u2026`:g}</p>${e.error?u`<p class="npm-lookup-error" role="alert">${e.error}</p>`:g}</div>${n.length>0?u`<section class="npm-lookup-recent" aria-labelledby="npm-lookup-recent-title"><h2 id="npm-lookup-recent-title">Recent searches</h2><ul>${n.map(r=>u`<li><button type="button" class="npm-lookup-recent-open" ?disabled="${e.pending}" @click="${()=>T1(r)}">${r}</button> <button type="button" class="npm-lookup-recent-remove" aria-label="${`Remove ${r} from recent searches`}" @click="${()=>XL(r)}">×</button></li>`)}</ul></section>`:g}</section>`}function ZL(e,t){let n=$h(e?.npm?.manifest,t?.npm?.manifest),r=e?.npm&&t?.npm?ln(t.npm,e.npm.version)?.dependencies:null,o=[e?.npm,t?.npm],s=(i,a)=>i.map(l=>({flags:[],...a?.find(({key:p})=>p===l.key),...l}));return{removed:n.removed,added:s(n.added,r?.added).map(i=>({...i,compared:o})),changed:s(n.changed,r?.changed)}}var A1=e=>{let t=ln(e)?.dependencies;return new Map((t?.held??t?.added??[]).map(({key:n,flags:r})=>[n,r]))},E1=({kind:e,name:t})=>`${e??""}\0${t}`,QL=/^(?:[\^~]|=)?v?(\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?)$/u,b1=e=>QL.exec(zs(e)?.spec??e.trim())?.[1]??null,y1=e=>zs(e)?.name??null;function eO({opens:e,from:t,to:n}){if(!e)return;let r=n&&b1(n),o=t&&b1(t);!o||!r||o===r||y1(t)!==y1(n)?xr(e):xr(e,r,"compare",{compareSpec:o})}function F1(e){let t=Ws(e.npm.manifest);if(t.length===0)return g;let n=A1(e.npm);return Ln({title:"Dependencies",count:t.length,list:!0,body:u`<ul class="bundles-sources-list npm-dependency-list">${t.map(r=>{let{name:o,range:s,kind:i,opens:a}=r,l=n.get(E1(r))??[],p=u`<span class="npm-dependency-name"><span class="bundles-source-path" data-tooltip-truncated data-tooltip="${o}">${o}</span>${eu(l)}</span> ${i?u`<span class="npm-dependency-kind">${i}</span>`:g} <span class="bundles-source-size" data-tooltip-truncated data-tooltip="${s}">${s}</span>`;return u`<li>${a?u`<button type="button" class="bundles-source-row npm-dependency-row" data-npm-dependency="${a}" @click="${()=>xr(a)}">${p}</button>`:u`<div class="bundles-source-row npm-dependency-row is-resource">${p}</div>`}</li>`})}</ul>`})}var tO=[["source","Non-registry",()=>"From elsewhere than npm's registry"],["unimported","Unimported",e=>`Imported by nothing of ${e}`]];function nO(e){let t=A1(e),n=Map.groupBy(Ws(e.manifest).flatMap(r=>(t.get(E1(r))??[]).map(({check:o})=>({...r,check:o}))),({check:r})=>r);return tO.filter(([r])=>n.has(r)).map(([r,o,s])=>u`<span class="npm-extension is-warn npm-dependency-check" data-tooltip="${`${s(e.version)}: ${n.get(r).map(({name:i,range:a})=>`${i} ${a}`).join(", ")}`}"><span>${o}</span><span class="npm-extension-count">${n.get(r).length}</span></span>`)}function rO(e,t){let{name:n,version:r}=e.npm,o=Nn("tags",`${n}@${r}`,()=>Ak(n,r),s=>({tags:Array.isArray(s.tags)?s.tags.filter(i=>typeof i=="string"&&i):[]}));return o.status!=="ready"||o.tags.length===0?g:u`<span class="bundle-origin-tags">${o.tags.map(s=>u`<a class="bundle-origin-link bundle-tag-link" href="${Vg(t,s)}" target="_blank" rel="noopener noreferrer">${W(ll)}<span>${s}</span></a>`)}</span>`}function Hs(e,t,n=e){let r=n===e||n===`./${e}`?g:`./${e}`;return t?.has(e)?u`<button type="button" class="bundle-entry-point" data-bundle-view-source="${e}" data-tooltip="${r}">${n}</button>`:n}function w1(e,t,n){let r=e.knownAccounts?.includes(t);return u`<a class="${`bundle-origin-link npm-account ${r?"is-known":"is-unknown"}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(t)}`}" data-tooltip="${r?"Publishes one of npm's most downloaded packages":"Unknown publisher"}" target="_blank" rel="noopener noreferrer"><span>${n}</span></a>`}var oO=/^\s*(Package no longer supported\.)\s+Contact Support at https:\/\/www\.npmjs\.com\/support for more info\.\s*$/u,Ih=e=>e.replace(oO,"$1");function Ah(e,{prefix:t="",githubFigures:n=g,provenance:r=g,provenanceNamesBuilder:o=!1,files:s=null}={}){let{manifest:i}=e.npm,a=i.github?.github,l=a?Od({repo:{github:a,directory:i.github.directory??"",commit:i.gitHead}})[0]:null,p=nu(e.npm.name),d=e.npm.published??p.times?.[e.npm.version];return u`<dl class="bundles-detail-meta npm-facts">${e.npm.private?u`<dt>Access</dt><dd>Private</dd>`:g} ${i.deprecated?u`<dt>Deprecated</dt><dd class="npm-deprecated">${Ih(i.deprecated)}</dd>`:g} ${i.description?u`<dt>Description</dt><dd>${i.description}</dd>`:g} ${i.license?u`<dt>License</dt><dd>${u1(i.license,[...s??[]]).map(({text:f,file:m})=>Hs(m,s,f))}</dd>`:g} ${i.author?u`<dt>Author</dt><dd class="bundle-origin-row">${i.authorAccount?u`${w1(i,i.authorAccount,i.author)}${i.author===i.authorAccount?g:u`<span class="npm-publisher">~${i.authorAccount}</span>`}`:i.author}</dd>`:g} ${i.publisher&&i.publisher!==i.authorAccount?u`<dt>Publisher</dt><dd class="bundle-origin-row">${w1(i,i.publisher,`~${i.publisher}`)}</dd>`:i.trustedPublisher&&!o?u`<dt>Publisher</dt><dd class="npm-trusted-publisher">${i.trustedPublisher}</dd>`:g} ${d?u`<dt>Published</dt><dd>${x1(p,d)?u`<span class="npm-recent">${h1(d)}</span>`:h1(d)}</dd>`:g} ${l?u`<dt>GitHub</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${l.href}" target="_blank" rel="noopener noreferrer">${W(Kt)}<span>${l.text}</span></a> ${n}</dd><dt>Commit</dt><dd class="bundle-origin-row">${l.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${l.commit.href}" data-tooltip="${l.commit.hash}" data-tooltip-icon="commit" target="_blank" rel="noopener noreferrer">${W(al)}<span>${l.commit.text}</span></a> ${rO(e,a)}`:u`<span class="npm-commit-missing">Not recorded at publish</span>`}</dd>`:g} ${r===g?g:u`<dt>Provenance</dt><dd class="bundle-origin-row">${r}</dd>`} ${i.homepage&&/^https?:\/\//iu.test(i.homepage)?u`<dt>Homepage</dt><dd><a class="bundle-origin-link" href="${i.homepage}" target="_blank" rel="noopener noreferrer"><span>${i.homepage}</span></a></dd>`:g}<dt>Integrity</dt><dd class="mono bundle-integrity" data-tooltip-truncated data-tooltip="${e.integrity}">${e.integrity}</dd>${t?u`<dt>Prefix</dt><dd class="mono">${t}</dd>`:g}</dl>`}var sO=(e,t)=>e.split(/(\s+)/u).map(n=>{let r=n.replace(/^\.\//u,"");return t?.has(r)?Hs(r,t,n):n});function L1(e,t=null,n=null){let{manifest:r}=e.npm,o=["main","module","types"].filter(d=>typeof r[d]=="string").map(d=>({label:`${d[0].toUpperCase()}${d.slice(1)}`,path:r[d],file:yh(r[d],t)??wh(r[d])})),s=o.find(d=>d.label==="Main"),i=o.find(d=>d.label==="Module");s&&i&&s.file===i.file&&(s.label="Main, Module",o.splice(o.indexOf(i),1));let a=Object.keys(r.bin??{}),l=xa(r,t),p=Ws(r).length;return u`${o.map(({label:d,path:f,file:m})=>u`<dt>${d}</dt><dd class="mono"><span class="npm-entry-point">${kn(m,Wo(n,m))}${Hs(m,t,f)}</span></dd>`)} ${r.type?u`<dt>Type</dt><dd class="mono">${r.type}</dd>`:g} ${a.length>0?u`<dt>Bin</dt><dd class="mono">${a.join(", ")}</dd>`:g} ${r.engines?u`<dt>Engines</dt><dd class="mono">${Object.entries(r.engines).map(([d,f])=>`${d} ${f}`).join(", ")}</dd>`:g} ${l.length>0||r.hasInstallScript?u`<dt>Install scripts</dt><dd class="npm-install-scripts">${l.length===0?"Yes":l.map(([d,f])=>u`<div class="npm-install-script"><span class="npm-install-script-name">${d}</span><code>${sO(f,t)}</code></div>`)}</dd>`:g}<dt>Dependencies</dt><dd class="npm-dependencies-fact">${Yd("dependencies",p,p===0?"None":p)}${nO(e.npm)}</dd>`}var _h=class extends Et{static properties={name:{},version:{},tab:{},list:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.name="",this.version="",this.tab="overview",this.list=null}render(){let t=this.list?.status==="ready"?this.list:{versions:[],distTags:{}},n=k1(t,this.version).map(({id:r,detail:o,date:s,age:i})=>({value:r,label:r,detail:o,secondary:s,...i&&{secondaryWarning:i}}));return u`<bundle-selector .options="${n}" .value="${this.version}" noun="version" versions label="${`Version of ${this.name}`}" placeholder="${this.version}" ?disabled="${n.length<=1}" aria-busy="${this.list?.status==="loading"?"true":g}" @bundle-change="${r=>{r.detail.value!==this.version&&xr(this.name,r.detail.value,this.tab)}}"></bundle-selector>`}};customElements.get("npm-version-select")||customElements.define("npm-version-select",_h);var O1=u`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" aria-hidden="true" viewBox="0 75 405 400"><path fill="currentColor" d="m62 447.6 65.8-68.2c2.2-.9 22.7 12 28.2 14.1C295.4 446.8 399.2 263.6 285.1 172 184.3 91.1 41.1 191.5 82 315.6c3.9 12 10.8 21.7 15.4 33.2l-47.1 47C-32 294.9 7.4 142.3 126.3 91.3 241.3 42 374.4 112 398 234.5c29.4 152.7-116.5 274.9-262.7 223.6-15.9-5.6-17-10.6-34.9-10.6H62Z"/><path fill="#e02129" d="M190.1 181.8c128.8-15 141.2 170.8 26 182.6-126.4 12.9-137.9-169.5-26-182.6M209 236c-7.4 5.6-10.8-5.4-13-7.7-9.6-10.3-19.4-.8-14 1.7s9.5-.3 10.1 5.6-9 9.9-7.9 16.4c13.2-5.9 25.9-6.4 39.1 0 3.2-7.1-7.9-12.1-7.8-14.8.1-9.4 11.6-6.2 12.6-7.2 4.3-4.3-8.9-11.7-17.1-.6-1.3 1.8-1.4 6.3-1.9 6.6zm-7.6 14.3c-10.1-1.5-19.3 10-25 11.8s-23.2 1.5-14.9 16.3c3.9.8 5.1-13.1 13.3-9.4 1.9 13.1-2.8 8.7-9 12.2-10 5.7-8.1 20.2-1.3 12.8 2.7-3 1.5-9.6 10.3-7.7 1.3 15.9-.8 8.4-7.9 11.7-11.5 5.3-9 20.2-1.7 14.8s0-10.8 8.6-9.3c1 .2 5.8 10.8 12.4 14.5 13.7 7.9 35 5.5 44.8-7.6s1.6-6.5 1.8-6.7c4-3.1 11.3 4.6 11 9.2l5.5-1.5c2.2-3.1-1.6-8.2-3.9-10.3-7.6-6.8-13.5.9-11-14.8 9-2.6 8.4 8.7 9.4 9.4 6 4.2 8.4-7.8 1.5-13.2-7.4-5.8-13.2 3.6-10.9-13.4 7.4-1.3 8.3 3.2 9.4 9.4 8.3 1.4 6.9-7.2 3.1-11.8-4.5-5.5-10.5-2.6-15.7-4.7-1.3-.5-25.1-18.8-25.1-9.4v52.5c-1.5.6-4.7-1.4-4.7-2.3z"/><ellipse cx="206.6" cy="270" fill="#e02129" rx="74.6" ry="66.5"/><path fill="#fff" d="M200.6 250v55.5s.4 1 .5 1.1c1.1 1.8 3.7 1.8 4.9 0 .1-.2.5-1.1.5-1.3v-55.4a34 34 0 0 1 17.2 5.8c3.1 2.2 5.6 5.1 7.7 8.3 3.8.1 7.6-.5 11.3.8 5.2 1.8 9.6 7.5 9.6 13.1 0 4.2-5.8 5.3-7.3 1.5-.7-1.8-.3-3.2-1.7-5-.8-1-3-2.7-4.3-2.7h-4.5c1.1 4.1.8 8.4.8 12.6.1.1 1.7-.1 2-.1 7.3 0 13.9 6 14.4 13.5.3 5.3-6.3 6-7.5 1.8-.6-2.1-.3-3.5-2-5.3-.8-.9-2.9-2.2-4.2-2.2h-3c.2 1 .2 2.2.1 3.2 0 2.1-.4 4.3-.9 6.4-.2.9-.5 1.8-.7 2.6 5.5-.7 10.5.7 14.1 5 1.7 2 3.4 5.6 3.6 8.3.5 5.4-6.6 6.7-7.8 1.2-.5-2.3-.7-3.8-2.7-5.4-3.1-2.5-7-1.2-10.7-1.4-1.9 3.2-4.5 6.1-7.5 8.4-14.4 10.8-36.9 7.2-46.2-8.4-.4-.2-2.4 0-2.9 0-3.2 0-6-.6-8.4 2.1-1.6 1.8-1.5 3.2-2.1 5.3-1.2 4.5-7.9 3.6-7.7-1.4.3-5.5 4.9-11.3 10.1-13 1.7-.5 5.7-1 7.4-.6.1 0 .1.1.1-.1 0-1.1-.7-2.8-.9-4.1-.4-2.7-.6-5.4-.4-8.1-2.8-.1-5.3.2-7.2 2.5-1.4 1.7-1.3 2.9-1.8 4.9-1.1 4.4-7.9 3.8-7.6-1.5.2-4.1 2.9-8.7 6.3-11 3-2.1 6.5-2.7 10.1-2.6v-5.8c.2-2.2.3-4.5.9-6.6h-4.5c-1.8 0-4.2 2.2-4.9 3.7-1.1 2.3-.4 6-4.1 6.3-3.4.3-4.5-2.3-4.1-5.2.9-6.1 5.1-11 11.3-12.2 3.1-.6 6.2 0 9.3-.4 2.2-3.1 4.8-6 7.9-8.3 4.9-3.5 10.9-5.1 16.8-5.8Z"/><path fill="#fff" d="M197.3 235.1c4.1-.7 8.3-.9 12.4 0 1.1-7.6 7-14.6 15.2-14 3.3.2 5.7 3.1 3.6 6.1-1.5 2-4.1 1-6.2 1.7s-3.7 2.5-4.5 4.4c-.3.7-1.2 3.8-.9 4.3 0 .1 1.3 1 1.6 1.2 3.4 3.1 6.2 7.4 6.6 12 0 .6-.1 1.2.1 1.8-.1.1-2.6-1.5-2.9-1.8-10.5-6-27.5-5.7-37.9.4-.2.1-2.3 1.6-2.4 1.5-.2-5.5 2.8-10.5 6.8-14 .3-.3 1.3-.9 1.5-1.1.1-.1.1-.2.1-.3 0-.5-.3-1.8-.5-2.3-.9-3.3-3-6-6.6-6.3h-2.2c-4.2-.4-4.5-6.5-.2-7.4 2.3-.5 5.2 0 7.3 1 5.2 2.2 8.5 7.4 9.1 12.9Z"/></svg>`;var iO=new Map([["registry",{label:"Source: npm registry",icon:Kw}],["repository",{label:"Source: GitHub repository",icon:W(Kt)}],["osv",{label:"Source: OSV",icon:O1}]]);function aO(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function lO(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var ru=u`<svg class="external-link-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 13L13 3"/><path d="M5 3h8v8"/></svg>`;function cO(e){let t=/^CWE-(\d+)$/u.exec(e);if(!t)return u`<span>${e}</span>`;let n=`https://cwe.mitre.org/data/definitions/${t[1]}.html`;return u`<a class="bundle-advisory-cwe" href="${n}" target="_blank" rel="noopener noreferrer">${e}</a>`}function dO(e,t){return u`<div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${e}`}">${aO(e)}</span> ${typeof t=="number"?u`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${t.toFixed(1)}</span></span>`:g}</div>`}function uO(e){let t=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,n=e.ghsa??lO(t)??(typeof e.id=="string"?e.id:null),r=iO.get(e.source);return!r&&!(n&&t)?g:u`<span class="bundle-advisory-reference">${r?u`<span class="bundle-advisory-source" role="img" aria-label="${r.label}">${r.icon}</span>`:g} ${n&&t?u`<a class="bundle-advisory-ghsa" href="${t}" target="_blank" rel="noopener noreferrer">${n}${ru}</a>`:g}</span>`}function pO(e){let t=Array.isArray(e)?e.filter(n=>typeof n=="string"):[];return t.length>0?u`<span class="bundle-advisory-cwes">${t.map((n,r)=>u`${r===0?"":", "}${cO(n)}`)}</span>`:g}function ou(e,t=null){let n=typeof e.cvss?.vectorString=="string"?e.cvss.vectorString:"",r=typeof e.vulnerable_versions=="string"?e.vulnerable_versions:null,o=Array.isArray(e.versions)?e.versions.filter(s=>typeof s=="string"):[];return u`<li class="bundle-advisory-row">${dO(e.severity,e.cvss?.score)}<div class="bundle-advisory-body"><div class="bundle-advisory-header">${t&&typeof e.details=="string"&&e.details.trim()?u`<button type="button" class="bundle-advisory-title" aria-haspopup="dialog" @click="${()=>t(e)}">${e.title}</button>`:u`<span class="bundle-advisory-title">${e.title}</span>`} ${uO(e)}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${e.informational?u`<span>${e.informational}</span>`:g} ${r?u`<span>Affected <span class="mono">${r}</span></span>`:g} ${o.length>0?u`<span>Matches <span class="mono">${o.join(", ")}</span></span>`:g} ${pO(e.cwe)}</div>${n?u`<div class="bundle-advisory-cvss-vector mono">${n}</div>`:g}</div></div></li>`}function Eh(e){if(typeof e!="string")throw new TypeError(`a text must be a string, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a text must be a well-formed string");return{proven:!1,reason:"unsupported",at:null}}var fO=e=>e.subarray(0,8e3).includes(0),N1=(e,t)=>(e+Math.imul(t,97)>>>0)%107927;function B1(e){let t=!fO(e),n=new Map,r=(l,p)=>n.set(l,(n.get(l)??0)+p),o=0,s=0,i=0;for(let l=0;l<e.length;l++){let p=e[l];if(t&&p===13&&e[l+1]===10)continue;let d=o;o=(o<<7^s>>>25)+p>>>0,s=(s<<7^d>>>25)>>>0,!(++i<64&&p!==10)&&(r(N1(o,s),i),i=0,o=0,s=0)}i>0&&r(N1(o,s),i);let a=Uint32Array.from(n.keys()).sort();return{hashes:a,bytes:Float64Array.from(a,l=>n.get(l))}}function P1(e,t,n,r){if(e===null||t===null||t.length===0)return 0;let o=Math.abs(e.length-t.length),s=Math.max(e.length,t.length);if(s*(6e4-n)<o*6e4)return 0;let i=r(e),a=r(t),l=0;for(let p=0,d=0;p<i.hashes.length&&d<a.hashes.length;)i.hashes[p]<a.hashes[d]?p++:i.hashes[p]>a.hashes[d]?d++:l+=Math.min(i.bytes[p++],a.bytes[d++]);return Math.trunc(l*6e4/s)}function D1(e,t){let n=e.length;if(n!==t.length)return!1;let r=0;if(n>=32&&(e.byteOffset&3)===(t.byteOffset&3)){for(let a=4-(e.byteOffset&3)&3;r<a;r++)if(e[r]!==t[r])return!1;let o=n-r>>>2,s=new Int32Array(e.buffer,e.byteOffset+r,o),i=new Int32Array(t.buffer,t.byteOffset+r,o);for(let a=0;a<o;a++)if(s[a]!==i[a])return!1;r+=o*4}for(;r<n;r++)if(e[r]!==t[r])return!1;return!0}var bt=class extends Error{constructor(t,n,r){let o=r===void 0?"":` in the ${r} tree`;super(n===void 0?t:`${t}: ${JSON.stringify(n)}${o}`),this.name="CompareError",this.path=n,this.tree=r}};var mO=new Set(["file","contiguous-file"]),gO=new Set(["fifo","character-device","block-device"]),hO=/(?:^|\/)\.{0,2}(?:\/|$)/u;function bO(e){if(!Number.isInteger(e)||e<0||e>4095)throw new RangeError(`a mode must be an integer from 0 to 0o7777, not ${e}`)}function yO(e,t,n,r){if(typeof e!="string")throw new TypeError(`an entry's name must be a string, not ${typeof e}`);if(!(e==="."&&t==="directory")){if(r?e==="":hO.test(e))throw new bt(r?"a name must not be empty":"a name must be a relative path with no empty, `.` or `..` segment",e,n);if(!e.isWellFormed())throw new bt("a name must be well-formed Unicode",e,n)}}function wO(e,t,n){if(typeof e!="string"||e==="")throw new bt("a link must name its target",t,n);if(!e.isWellFormed())throw new bt("a link target must be well-formed Unicode",t,n);return e}function vO(e){if(e===void 0)return new Uint8Array(0);if(e instanceof Uint8Array)return e;if(typeof e!="string")throw new TypeError(`a file's data must be a string or a Uint8Array, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a file's text must be well-formed Unicode");return e}var su=e=>typeof e=="string"?e$(e):e;function $O(e,t,n){if(typeof e!="object"||e===null)throw new TypeError(`an entry must be an object, not ${e===null?"null":typeof e}`);let{name:r,type:o="file",mode:s,linkname:i,data:a}=e;if(yO(r,o,t,n),s!==void 0&&bO(s),mO.has(o))return{path:r,type:"file",mode:s??420,data:vO(a)};if(o==="symlink"||o==="hardlink")return{path:r,type:o,target:wO(i,r,t)};if(o==="directory")return{path:r,type:o};throw gO.has(o)?new bt(`a ${o} is neither a file nor a link`,r,t):new TypeError(`${JSON.stringify(o)} is not an entry type`)}function Ma(e,t){return e.type!==t.type?!1:e.type==="symlink"?e.target===t.target:e.data===t.data?!0:typeof e.data=="string"&&typeof t.data=="string"?!1:D1(su(e.data),su(t.data))}function kO(e,t,n){let r=new Set([e.path]),o=t.get(e.target);for(;o?.type==="hardlink";){if(r.has(o.path))throw new bt("a hard link leads back to itself",e.path,n);r.add(o.path),o=t.get(o.target)}if(o===void 0||o.type==="directory")throw new bt("a hard link must name a file or a link in the tree",e.path,n);return{...o,path:e.path}}function Fh(e,t,n){let r=new Map;for(let s of e){let i=$O(s,t,n);if(!(i.type==="directory"&&i.path===".")){if(r.has(i.path))throw new bt("a name is given twice",i.path,t);r.set(i.path,i)}}let o=new Map;for(let[s,i]of r){for(let a=n?-1:s.lastIndexOf("/");a>0;a=s.lastIndexOf("/",a-1)){let l=r.get(s.slice(0,a));if(l!==void 0&&l.type!=="directory")throw new bt(`a path lies under a ${l.type==="symlink"?"link":"file"}`,s,t)}i.type==="hardlink"?o.set(s,kO(i,r,t)):i.type!=="directory"&&o.set(s,i)}return o}var xO=100,SO=4,z1=e=>e.slice(e.lastIndexOf("/")+1);function W1(e,t){if(e.type==="symlink")return`l${e.target}`;let n=t(e);return`f${n.length}:${n$(n)}`}function CO({sources:e,dests:t,sourceNames:n,destNames:r,used:o,record:s,bytes:i}){let a=Map.groupBy(e.keys(),l=>W1(e[l],i));for(let l=0;l<t.length;l++){let p=-1,d=xO;for(let f of a.get(W1(t[l],i))??[])if(!(o.has(f)||!Ma(e[f],t[l]))&&((p===-1||n[f]===r[l])&&(p=f),n[f]===r[l]||--d===0))break;p!==-1&&s(l,p,6e4)}}var _O=new Map([[".ts",".js"],[".mts",".mjs"],[".cts",".cjs"],[".tsx",".jsx"]]),RO=new Map([...[".js",".mjs",".cjs",".jsx",".ts",".mts",".cts",".tsx"].map(e=>[e,"script"]),...[".css",".scss",".sass",".less"].map(e=>[e,"style"])]);function V1(e){let t=e.split("/"),n=t.pop(),r=n.lastIndexOf(".");return r>0?{dirs:t,stem:n.slice(0,r),extension:n.slice(r)}:{dirs:t,stem:n,extension:""}}function H1(e){let{dirs:t,stem:n,extension:r}=V1(e);return JSON.stringify([t.map(o=>o==="lib"||o==="src"?null:o),n,_O.get(r)??r])}function MO(e){let{dirs:t,stem:n,extension:r}=V1(e),o=[n,RO.get(r)??r],s=t.lastIndexOf("node_modules"),i=s===-1?0:s+(t[s+1]?.startsWith("@")?3:2),a=[JSON.stringify([...o,t])];for(let l=i;l<t.length;l++)a.push(JSON.stringify([...o,t.toSpliced(l,1,null)]));return a}function j1({pairs:e,used:t,scoreOf:n},{remaining:r,open:o},{s,d:i,score:a},l){let p=Math.max(l,a+Math.trunc((6e4-a)/2));return o.some(d=>d!==i&&!e.has(d)&&n(s,d,p)>=p)||r.some(d=>d!==s&&!t.has(d)&&n(d,i,p)>=p)}function TO(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=Map.groupBy(t.remaining.filter(m=>o[m].type==="file"),m=>H1(o[m].path)),f=t.open.filter(m=>s[m].type==="file").flatMap(m=>(d.get(H1(s[m].path))??[]).map(h=>({s:h,d:m,score:p(h,m,0)})));for(let m of f.sort((h,b)=>b.score-h.score))!i.has(m.d)&&!a.has(m.s)&&!(n&&j1(e,t,m,r))&&l(m.d,m.s,m.score)}function IO(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=new Map,f=(y,w,v)=>new Map(w.filter(x=>y[x].type==="file").map(x=>{let k=MO(y[x].path);for(let $ of k)(d.get($)??d.set($,{sources:[],dests:[]}).get($))[v].push(x);return[x,k]})),m=f(s,t.open.filter(y=>!i.has(y)),"dests"),h=f(o,t.remaining.filter(y=>!a.has(y)),"sources"),b=(y,w)=>{let v=new Set(y.flatMap(x=>d.get(x)[w]));return v.size===1?[...v][0]:-1};for(let[y,w]of h){let v=b(w,"dests");if(v===-1||b(m.get(v),"sources")!==y)continue;let x={s:y,d:v,score:p(y,v,0)};n&&j1(e,t,x,r)||l(v,y,x.score)}}function AO(e,t,n){let r=Oh(e),o=t<6e4&&r.remaining.length*r.open.length<=n*n;TO(e,r,o,t),IO(e,r,o,t)}function U1(e,t){let n=new Map;for(let r of t)n.set(e[r],n.has(e[r])?-1:r);return n}function EO({sourceNames:e,destNames:t,record:n,scoreOf:r},{remaining:o,open:s},i){let a=U1(t,s),l=U1(e,o);for(let p of o){let d=a.get(e[p]);if(d===void 0||d===-1||l.get(e[p])===-1)continue;let f=r(p,d,i);f>=i&&n(d,p,f)}}var Lh=(e,t)=>t.score-e.score||t.nameScore-e.nameScore;function FO(e,t){if(e.length<SO){e.push(t);return}let n=0;for(let r=1;r<e.length;r++)Lh(e[r],e[n])>0&&(n=r);Lh(e[n],t)>0&&(e[n]=t)}function LO({sourceNames:e,destNames:t,pairs:n,used:r,record:o,scoreOf:s},{remaining:i,open:a},l){let p=[];for(let d of a){let f=[];for(let m of i)FO(f,{score:s(m,d,l),nameScore:e[m]===t[d]?1:0,dst:d,src:m});p.push(...f)}for(let{dst:d,src:f,score:m}of p.sort(Lh)){if(m<l)break;!n.has(d)&&!r.has(f)&&o(d,f,m)}}var Oh=({sources:e,dests:t,pairs:n,used:r})=>({remaining:e.keys().filter(o=>!r.has(o)).toArray(),open:t.keys().filter(o=>!n.has(o)).toArray()});function Nh(e,t,{minimum:n,limit:r,byPath:o}){let s=new Map,i=new Set;if(e.length===0||t.length===0)return s;let a=new Map,l=new Map,p=h=>h.type==="file"?l.get(h)??l.set(h,su(h.data)).get(h):null,d=h=>a.get(h)??a.set(h,B1(h)).get(h),f={sources:e,dests:t,pairs:s,used:i,sourceNames:e.map(h=>z1(h.path)),destNames:t.map(h=>z1(h.path)),record(h,b,y){s.set(h,{source:b,score:y}),i.add(b)},bytes:p,scoreOf:(h,b,y)=>P1(p(e[h]),p(t[b]),y,d)};if(CO(f),o&&AO(f,n,r),n>=6e4)return s;EO(f,Oh(f),n+Math.trunc(.5*(6e4-n)));let m=Oh(f);return m.remaining.length*m.open.length<=r*r&&LO(f,m,n),s}function Ta(e){if(e===null)return"";let t=e.type==="symlink"?e.target:e.data;if(typeof t=="string")return t.includes("\0")?void 0:t;if(!t.includes(0))try{return t$(t)}catch{return}}var OO=new Set(["none","all","change","trailing"]);function Ia({horizon:e=1/0,whitespace:t="none",ignoreCase:n=!1}={}){if(e!==1/0&&!(Number.isSafeInteger(e)&&e>=0))throw new RangeError(`horizon must be a whole number or Infinity, not ${e}`);if(!OO.has(t))throw new RangeError(`whitespace must be 'none', 'all', 'change' or 'trailing', not ${t}`);if(typeof n!="boolean")throw new TypeError(`ignoreCase must be a boolean, not ${typeof n}`);return{horizon:e,whitespace:t,ignoreCase:n}}function G1(e,t,n){let r=Ta(e),o=Ta(t);if(r===void 0||o===void 0)return{binary:!0,blocks:[],insertions:null,deletions:null};let s=r===o?[]:zp(r,o,n),i=(a,l)=>s.reduce((p,d)=>p+d[l]-d[a],0);return{binary:!1,blocks:s,insertions:i("b0","b1"),deletions:i("a0","a1")}}var NO=50,BO=1e3;function Bh(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r++)if(e[r]!==t[r])return e.codePointAt(r)-t.codePointAt(r);return e.length-t.length}function PO(e){if(e===!1)return null;let t=e===!0?NO:e;if(typeof t!="number")throw new TypeError(`renames must be a boolean or a percentage, not ${typeof e}`);if(!(t>0&&t<=100))throw new RangeError(`renames must be a percentage above 0 and at most 100, not ${e}`);return Math.max(1,Math.trunc(6e4*t/100))}function DO({renamesByPath:e,renameLimit:t,renameGroup:n,paths:r,lines:o}){if(typeof e!="boolean")throw new TypeError(`renamesByPath must be a boolean, not ${typeof e}`);if(t!==1/0&&!(Number.isSafeInteger(t)&&t>=0))throw new RangeError(`renameLimit must be a whole number or Infinity, not ${t}`);if(n!==null&&typeof n!="function")throw new TypeError(`renameGroup must be a function, not ${typeof n}`);if(r!=="tree"&&r!=="keys")throw new RangeError(`paths must be 'tree' or 'keys', not ${r}`);if(typeof o!="boolean")throw new TypeError(`lines must be a boolean, not ${typeof o}`)}var zO=(e,t)=>Ma(e,t)&&(e.type!=="file"||e.mode===t.mode),Aa=(e,t,n,r=null)=>({status:e,old:t,new:n,similarity:r}),WO=/\.d\.(?:[^./]+\.)?[cm]?ts$/u,K1=e=>e.endsWith(".mts")?"module":e.endsWith(".cts")?"commonjs":null;function q1(e){if(e===null)return{proven:!0,inert:!1};let t=Ta(e);try{return t===void 0?{proven:!1}:Eh(t)}catch{return{proven:!1}}}function HO(e){if(![e.old,e.new].filter(o=>o!==null).every(o=>o.type==="file"&&WO.test(o.path))||e.old&&e.new&&e.old.mode!==e.new.mode)return e;let n=q1(e.new),r=q1(e.old);if(!r.proven||!n.proven||!!r.inert!=!!n.inert)return e;if(r.inert){let o=K1(e.old.path);if(o===null||o!==K1(e.new.path))return e}return{...e,typeOnly:!0}}function UO(e,t){let n=[],r=[],o=[];for(let[s,i]of e){let a=t.get(s);a===void 0?o.push(i):a.type!==i.type?r.push(Aa("type-changed",i,a)):zO(i,a)||r.push(Aa("modified",i,a))}for(let[s,i]of t)e.has(s)||n.push(i);return o.sort((s,i)=>Bh(s.path,i.path)),n.sort((s,i)=>Bh(s.path,i.path)),{changes:r,deleted:o,added:n}}function VO(e,t,{group:n,...r}){if(n===null)return Nh(e,t,r);let o=new Map,s=a=>Map.groupBy(a.keys(),l=>n(a[l].path)),i=s(e);for(let[a,l]of s(t)){let p=i.get(a);if(p!==void 0)for(let[d,{source:f,score:m}]of Nh(p.map(h=>e[h]),l.map(h=>t[h]),r))o.set(l[d],{source:p[f],score:m})}return o}function Ph(e,t,{renames:n=!0,renamesByPath:r=!0,renameLimit:o=BO,renameGroup:s=null,paths:i="tree",lines:a=!0,horizon:l,whitespace:p,ignoreCase:d}={}){let f=PO(n);DO({renamesByPath:r,renameLimit:o,renameGroup:s,paths:i,lines:a});let m=Ia({horizon:l,whitespace:p,ignoreCase:d}),h=i==="keys",{changes:b,deleted:y,added:w}=UO(Fh(e,"old",h),Fh(t,"new",h)),v=f===null?new Map:VO(y,w,{minimum:f,limit:o,byPath:r,group:s});for(let[k,$]of w.entries()){let S=v.get(k);b.push(S===void 0?Aa("added",null,$):Aa("renamed",y[S.source],$,Math.trunc(S.score*100/6e4)))}let x=new Set(v.values().map(({source:k})=>k));for(let[k,$]of y.entries())x.has(k)||b.push(Aa("deleted",$,null));return b.sort((k,$)=>Bh((k.new??k.old).path,($.new??$.old).path)),(a?b.map(k=>({...k,...G1(k.old,k.new,m)})):b).map(HO)}var iu=(e,{lo:t,start:n},r)=>e[n+(r-t)/2];function Y1(e,t,{low:n,high:r},o,s){return e===-t||e-1<n||e!==t&&e+1<=r&&iu(o,s,e-1)<iu(o,s,e+1)?e+1:e-1}function jO(e,t,n,{first:r,n:o,m:s,d:i,...a}){e.a.fill(1,0,r).fill(1,o),e.b.fill(1,0,r).fill(1,s);let l=o,p=s;for(let d=i;d>0;d--){let f=l-p,m=Y1(f,d,a,t,n[d]),h=iu(t,n[d],m);for(let b=m>f?h:h+1;b<l;b++)e.a[b]=e.b[b-f]=1;l=h,p=l-m}for(let d=r;d<l;d++)e.a[d]=e.b[d]=1}function X1(e,t,n){let r=0,o=t.length,s=e.length,i=2*(s+o);for(;r<s&&r<o&&e[r]===t[r];)r++;for(;s>r&&o>r&&e[s-1]===t[o-1];)s--,o--;let a={high:s-r,low:r-o},l=[r],p=[{lo:1,start:0}];for(let d=0;d<=a.high-a.low;d++){let f=p[d],m=Math.min(d,a.high),h=Math.max(-d,a.low+(a.low+d&1));p.push({lo:h,start:l.length});for(let b=h;b<=m;b+=2){let y=Y1(b,d,a,l,f),w=iu(l,f,y),v=y>b?w:w+1,x=v;for(;v<s&&v-b<o&&e[v]===t[v-b];)v++;if(i+=2+v-x,l.push(v),v>=s&&v-b>=o)return jO(n,l,p,{first:r,n:s,m:o,d,...a}),i}}throw new Error("no edit script between two lines")}var GO=/[\p{L}\p{N}_$]+|\s+|[^\p{L}\p{N}_$\s]/gu,KO=2e3,qO=800,lu=.6;function au(e,t){if(e.length>KO)return null;let n=e.match(GO)??[];return n.length>qO?null:{line:e,tokens:n,words:n.map(r=>(t.has(r)||t.set(r,t.size),t.get(r)))}}function J1({tokens:e,line:t},n){let r=[];for(let o=0,s=0;s<e.length;o+=e[s++].length){if(n[s])continue;let i=r.at(-1);i&&/^\s*$/u.test(t.slice(i[1],o))?i[1]=o+e[s].length:r.push([o,o+e[s].length])}return r}var Z1=(e,t)=>e.reduce((n,[r,o])=>n+o-r,0)/Math.max(1,t.length);function Dh(e,t){let n={a:e.words.map(()=>0),b:t.words.map(()=>0)},r=X1(e.words,t.words,n),o={a:J1(e,n.a),b:J1(t,n.b)};return{ranges:o,share:n.a.includes(1)?Math.min(Z1(o.a,e.line),Z1(o.b,t.line)):1,steps:r}}function YO(e,t){if(e===t)return{a:[],b:[]};let n=new Map,r=au(e,n),o=au(t,n);if(r===null||o===null)return null;let{ranges:s,share:i}=Dh(r,o);return i<=lu?s:null}var Q1=200,XO=5e6,JO=6,ZO=60,QO=3;function eN(e){let t=new Map;for(let n of e?.tokens??[])t.set(n,(t.get(n)??0)+1);return t}function tN(e,t){let n=new Map,r=[e,t].map(f=>f.map(m=>au(m,n))),o=r.map(f=>f.map(eN)),s=0,i=(f,m,h)=>{let b=0;for(let[y,w]of f)if(s+=QO,(b+=y.length*Math.max(0,w-(m.get(y)??0)))>lu*h.length)return 1/0;return b/Math.max(1,h.length)},a=(f,m)=>r[0][f]===null||r[1][m]===null?1/0:Math.min(i(o[0][f],o[1][m],e[f]),i(o[1][m],o[0][f],t[m])),l=(f,m)=>{if(s+=ZO,a(f,m)===1/0)return 1/0;let{share:h,steps:b}=Dh(r[0][f],r[1][m]);return s+=b,h<=lu?h:1/0},p=new Float64Array(e.length*t.length).fill(Number.NaN);return{share:(f,m)=>{let h=f*t.length+m;return Number.isNaN(p[h])&&(p[h]=e[f]===t[m]?0:l(f,m)),p[h]},floor:a,spent:()=>s}}function nN(e,t,{share:n,spent:r}){let o=Array.from({length:e+1},()=>new Float64Array(t+1)),s=(a,l)=>n(a,l)===1/0?-1/0:1e3-n(a,l)+o[a][l];for(let a=0;a<e;a++)for(let l=0;l<t;l++)if(o[a+1][l+1]=Math.max(o[a][l+1],o[a+1][l],s(a,l)),r()>XO)return null;let i=[];for(let a=e,l=t;a>0&&l>0;)o[a][l]===o[a][l-1]?l--:o[a][l]===o[a-1][l]?a--:i.push([--a,--l]);return i.toReversed()}function rN(e,t,{share:n,floor:r}){let o=[];for(let s=0,i=0;s<e&&i<t;s++){let a=null,l=1/0,p=Array.from({length:Math.min(t,i+JO)-i},(d,f)=>[i+f,r(s,i+f)]);for(let[d,f]of p.toSorted((m,h)=>m[1]-h[1]||m[0]-h[0])){if(f>l)break;(n(s,d)<l||n(s,d)===l&&d<a)&&([a,l]=[d,n(s,d)])}a!==null&&(o.push([s,a]),i=a+1)}return o}function oN(e,t){if(e.length>Q1||t.length>Q1)return[];let n=tN(e,t);return nN(e.length,t.length,n)??rN(e.length,t.length,n)}function eC(e,t,n,r){let{whitespace:o,ignoreCase:s}=Ia(r);try{return Wp(e,t,n,{format:"normal",whitespace:o,ignoreCase:s}),!0}catch(i){if(i instanceof r$)return!1;throw i}}var tC=/[ \t\n\v\f\r]/u,nC=e=>{let t=e.split(`
|
|
145
|
-
`);return t.at(-1)===""&&t.pop(),t};function sN(e,t){for(let n=0,r=0;;n++,r++){let o="",s="";for(;n<e.length&&tC.test(e[n]);)o+=e[n++];for(;r<t.length&&tC.test(t[r]);)s+=t[r++];if(o!==s&&new Set(o+s).size>1)return!0;if(n>=e.length||r>=t.length)return!1}}function iN(e,t,n){try{if(!eC(e,t,n,{whitespace:"all"}))return!0}catch{return!0}let r=nC(e),o=nC(t),s=0,i=0;for(let a=0;a<=n.length;a++){let l=a<n.length?n[a].a0:r.length;for(;s<l;s++,i++)if(r[s]!==o[i]&&sN(r[s],o[i]))return!0;a<n.length&&({a1:s,b1:i}=n[a])}return!1}function aN(e,t,{extension:n=!0}={}){let r=e.split("/"),o=t.split("/"),s=0;for(;s<r.length-1&&s<o.length-1&&r[s]===o[s];)s++;let i=0;for(;i<r.length-s-1&&i<o.length-s-1&&r.at(-1-i)===o.at(-1-i);)i++;let a={head:s?`${r.slice(0,s).join("/")}/`:"",from:r.slice(s,r.length-i).join("/"),to:o.slice(s,o.length-i).join("/"),tail:i?`/${r.slice(-i).join("/")}`:""},l=a.from.lastIndexOf(".");return n&&!a.from.includes("/")&&!a.to.includes("/")&&l>0&&a.to.lastIndexOf(".")===l&&a.from.slice(0,l)===a.to.slice(0,l)?{...a,head:a.head+a.from.slice(0,l),from:a.from.slice(l),to:a.to.slice(l)}:a}function zh(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}var rC=(e,t)=>`${"../".repeat(e.base.split("/").length-1)}${t}`;function Wh(e,t,n){let r=new Map,o=new Set,s=0;for(let a of e){let l=zh(n,a);l===null||!t.has(l)||(r.set(a,l),o.add(l),l!==a&&s++)}for(let a of e)r.has(a)||!t.has(a)||o.has(a)||(r.set(a,a),o.add(a));let i=r.size;for(let a of e){if(r.has(a))continue;let l=zh(n,a)??rC(n,a);for(;t.has(l)||o.has(l);)l=`../${l}`;r.set(a,l),o.add(l)}return{paths:r,paired:i,moved:s}}function lN(e,t){let n=new Set(e),r=new Set(t),o=(a,l)=>{let p=new Map;for(let m of a)for(let h=m.indexOf("/");h!==-1;h=m.indexOf("/",h+1))l.has(m.slice(h+1))&&p.set(m.slice(0,h+1),(p.get(m.slice(0,h+1))??0)+1);let d=null,f=!1;for(let[m,h]of p)h>(p.get(d)??0)?[d,f]=[m,!1]:h===p.get(d)&&(f=!0);return f?null:d},s=Wh(n,r,null).paired,i=[[{base:"",other:o(r,n)},n],[{base:o(n,r),other:""},r]].filter(([a])=>a.base!==null&&a.other!==null).map(([a,l])=>({root:a,side:l,...Wh(n,r,a)})).filter(({side:a,paired:l,moved:p})=>l>s&&p*2>=a.size);return i.length===2&&i[0].paired===i[1].paired?null:i.toSorted((a,l)=>l.paired-a.paired)[0]?.root??null}function Hh(e,t){let n=[...e],r=new Set(t),o=lN(n,r);return{root:o,paths:Wh(n,r,o).paths}}function oC({root:e,paths:t},n,r){if(!e||n===".")return n;for(let s of r){let i=t.get(`${n}/${s}`);if(i?.endsWith(`/${s}`))return i.slice(0,-s.length-1)}let o=zh(e,`${n}/`);return o===null?rC(e,n):o.slice(0,-1)||"."}function cN(e,t,n){if(!e&&!t)return null;let r=Map.groupBy([...e??[]],([,s])=>s),o=new Map([...r].map(([s,i])=>[s,oC(n,s,i.map(([a])=>a.slice(s.length+1)))]));return new Map([...[...e??[]].map(([s,i])=>[n.paths.get(s)??s,o.get(i)]),...t??[]])}function dN(e,t){if(!e)return{prefix:t,from:null,to:null};let n=t.startsWith(e.other)?t:"";return{prefix:n,from:`./${e.base}${n.slice(e.other.length)}`,to:`./${n||e.other}`}}function e7(...e){let t=new Set;for(let r of e){let o=we(r);for(let[s,i]of Object.entries(r?.bundle?.reason??{}))Array.isArray(i)&&i.some(a=>o.has(a))&&t.add(s)}let n=r=>e.some(o=>{if(o?.kind!=="stasis")return!1;let s=we(o),i=o?.bundle?.reason?.[r];return new Set(Array.isArray(i)?i.filter(a=>s.has(a)):[]).size<s.size});return[...t].some(n)?[...t].toSorted().map(r=>({id:`reason:${r}`,label:r})):[]}function uN(e,t=""){let n=we(e);if(!t||e?.kind!=="stasis")return n;let r=e?.bundle?.reason?.[t.replace(/^reason:/u,"")],o=new Set(Array.isArray(r)?r:[]);return new Map([...n].filter(([s])=>o.has(s)))}function Uh(e,t,n,r){return JSON.stringify([e,t,n,r])}function t7(e,t=""){let n=new Map;if(e?.kind!=="stasis"||!e.bundle)return n;let r=t?we(e):null,o=t?uN(e,t):null;for(let[s,i]of e.bundle.imports)for(let[a,l]of i)for(let[p,d]of l){let f=typeof d=="string"?[[null,d]]:d;for(let[m,h]of f){if(o&&!o.has(a)&&(r.has(a)||!o.has(h)))continue;let b=Uh(a,p,s,m);n.set(b,{key:b,parent:a,specifier:p,conditions:s,platform:m,target:h})}}return n}function i7(e,t,n=new Map,r=new Map,o=null){let s=a=>{let l=n.get(a)??r.get(a);return l===void 0?[...new Set([a,hN(o,a)??a])]:[l]},i=[];for(let a of e.values()){let l=s(a.parent).map(p=>t.get(Uh(p,a.specifier,a.conditions,a.platform))).find(Boolean);if(l&&!s(a.target).includes(l.target)){let{target:p,...d}=l;i.push({...d,baseTarget:r.get(a.target)??a.target,otherTarget:p})}}return i.sort((a,l)=>a.key.localeCompare(l.key)),{changed:i,totalChanges:i.length}}function Us(e){return Zw(e)??0}function sC(e,t){return e===t||e?.format==="base64"&&t?.format==="base64"&&e.data===t.data||e?.format==="digest"&&t?.format==="digest"&&e.digest===t.digest}function a7(e){if(e?.kind!=="stasis"||!e.bundle)return null;let{formats:t,executable:n,entries:r}=e.bundle;return o=>({format:t?.get(o),executable:n?.has(o)??!1,entry:r?.has(o)??!1})}function pN(e,t){return!e||!t?[]:["format","executable","entry"].filter(n=>e[n]!==t[n]).map(n=>({field:n,from:e[n],to:t[n]}))}function iC(e){return(t,n)=>Math.abs(n.delta)-Math.abs(t.delta)||t[e].localeCompare(n[e])}function cu(e){return(t,n)=>n.bytes-t.bytes||t[e].localeCompare(n[e])}function fN(e,t){return typeof e=="string"?`\0text\0${e.toWellFormed()}`:e?.format==="base64"?`\0base64\0${e.data}`:e?.format==="digest"?`\0digest\0${e.digest}`:`\0none\0${t}`}var mN=250;function gN(e,t,n,r,o){let s=(l,p,d)=>l.filter(({path:f})=>f!==""&&f.isWellFormed()).map(({path:f},m)=>({name:f,data:fN(p.get(f),`${d}${m}`)})),i={paths:"keys",renameGroup:o,renameLimit:mN,lines:!1},a=Ph(s(e,n,"a"),s(t,r,"b"),i);return new Map(a.filter(({status:l})=>l==="renamed").map(l=>[l.old.path,l.new.path]))}function hN(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}function bN(){return{baseBytes:0,otherBytes:0,onlyBaseFiles:0,onlyOtherFiles:0,changedFiles:0}}function l7(e,t,n,r=Hh(e.keys(),t.keys()),o=[]){let{root:s,paths:i}=r,a=new Map([...i].map(([T,I])=>[I,T]));e=new Map([...e].map(([T,I])=>[i.get(T),I]));let l=T=>a.get(T)===T?{}:{basePath:a.get(T)},p=(T,I)=>{let U=pN(o[0]?.(T),o[1]?.(I));return U.length>0?{meta:U}:{}},d=[],f=[],m=[],h=0,b=0,y=0,w=0,v=0,x=0,k=new Map,$=T=>{let I=n(T),U=k.get(I);return U||(U=bN(),k.set(I,U)),U},S=new Set([...e.keys(),...t.keys()]);for(let T of S){let I=e.has(T),U=t.has(T),K=$(T);if(I&&U){let Q=e.get(T),ze=t.get(T),We=sC(Q,ze),Ke=p(a.get(T),T),Ce=Us(Q),yt=We?Ce:Us(ze);if(h+=Ce,b+=yt,K.baseBytes+=Ce,K.otherBytes+=yt,We&&!Ke.meta)x++;else{let Nr=yt-Ce;m.push({path:T,...l(T),baseBytes:Ce,otherBytes:yt,delta:Nr,...Ke,...We?{modified:!1}:{}}),v+=Nr,K.changedFiles++}}else if(I){let Q=Us(e.get(T));h+=Q,y+=Q,K.baseBytes+=Q,K.onlyBaseFiles++,d.push({path:T,...l(T),bytes:Q})}else{let Q=Us(t.get(T));b+=Q,w+=Q,K.otherBytes+=Q,K.onlyOtherFiles++,f.push({path:T,bytes:Q})}}let C=gN(d,f,e,t,n);if(C.size>0){let T=new Set(C.values());for(let[I,U]of C){let K=e.get(I),Q=t.get(U),ze=sC(K,Q),We=Us(K),Ke=ze?We:Us(Q);y-=We,w-=Ke,m.push({path:U,renamedFrom:I,basePath:a.get(I),baseBytes:We,otherBytes:Ke,delta:Ke-We,modified:!ze,...p(a.get(I),U)}),v+=Ke-We;let Ce=$(I);Ce.onlyBaseFiles--,Ce.onlyOtherFiles--,Ce.changedFiles++}d.splice(0,d.length,...d.filter(I=>!C.has(I.path))),f.splice(0,f.length,...f.filter(I=>!T.has(I.path)))}let R=[],L=[],A=[],E=[];for(let[T,I]of k){let U=I.baseBytes>0||I.onlyBaseFiles>0||I.changedFiles>0,K=I.otherBytes>0||I.onlyOtherFiles>0||I.changedFiles>0,Q=I.onlyBaseFiles+I.onlyOtherFiles+I.changedFiles;U&&!K?R.push({pkg:T,bytes:I.baseBytes}):K&&!U?L.push({pkg:T,bytes:I.otherBytes}):Q>0||I.baseBytes!==I.otherBytes?A.push({pkg:T,baseBytes:I.baseBytes,otherBytes:I.otherBytes,delta:I.otherBytes-I.baseBytes}):E.push({pkg:T,bytes:I.baseBytes})}return d.sort(cu("path")),f.sort(cu("path")),m.sort(iC("path")),R.sort(cu("pkg")),L.sort(cu("pkg")),A.sort(iC("pkg")),{totals:{baseFiles:e.size,baseBytes:h,otherFiles:t.size,otherBytes:b,onlyBaseFiles:d.length,onlyBaseBytes:y,onlyOtherFiles:f.length,onlyOtherBytes:w,changedFiles:m.length,renamedFiles:C.size,changedDelta:v,unchangedFiles:x,fileDelta:t.size-e.size,byteDelta:b-h,identical:d.length===0&&f.length===0&&m.length===0},files:{onlyBase:d,onlyOther:f,changed:m,root:s,basePaths:i},packages:{onlyBase:R,onlyOther:L,changed:A,unchanged:E}}}function c7(e,t,n){let r=new Map;for(let d of e.onlyBase)r.set(d.pkg,{base:d.bytes,other:null});for(let d of e.onlyOther)r.set(d.pkg,{base:null,other:d.bytes});for(let d of e.changed)r.set(d.pkg,{base:d.baseBytes,other:d.otherBytes});for(let d of e.unchanged??[])r.set(d.pkg,{base:d.bytes,other:d.bytes});let o=(d,f)=>[...d.get(f)??[]].toSorted(Ht),s=new Set([...e.onlyBase,...e.onlyOther,...e.changed].map(d=>d.pkg));for(let d of new Set([...t.keys(),...n.keys()]))Vh(o(t,d),o(n,d))||s.add(d);let i=[],a=[],l=[];for(let d of s){let f=r.get(d)??{base:null,other:null},m=o(n,d),h=o(t,d),b=f.base!==null||h.length>0,y=f.other!==null||m.length>0;b&&!y?l.push({pkg:d,bytes:f.base,versions:h}):y&&!b?i.push({pkg:d,bytes:f.other,versions:m}):a.push({pkg:d,baseBytes:f.base,otherBytes:f.other,delta:f.base!==null&&f.other!==null?f.other-f.base:null,baseVersions:h,otherVersions:m,direction:h.length>0&&m.length>0&&!Vh(h,m)?lC(h,m):null})}let p=(d,f)=>d.pkg.localeCompare(f.pkg);return{removed:l.toSorted(p),added:i.toSorted(p),changed:a.toSorted(p)}}function aC(e){let n=String(e).trim().split("+",1)[0],r=n.indexOf("-");return r===-1?{core:n,pre:""}:{core:n.slice(0,r),pre:n.slice(r+1)}}function Ht(e,t){if(e===t)return 0;let n=aC(e),r=aC(t),o=n.core.split("."),s=r.core.split(".");for(let l=0;l<Math.max(o.length,s.length);l++){let p=Number(o[l]??0),d=Number(s[l]??0);if(Number.isNaN(p)||Number.isNaN(d))return e<t?-1:1;if(p!==d)return p<d?-1:1}if(n.pre===r.pre)return 0;if(!n.pre)return 1;if(!r.pre)return-1;let i=n.pre.split("."),a=r.pre.split(".");for(let l=0;l<Math.max(i.length,a.length);l++){let p=i[l],d=a[l];if(p===void 0)return-1;if(d===void 0)return 1;if(p===d)continue;let f=/^\d+$/u.test(p),m=/^\d+$/u.test(d);return f&&m?Number(p)<Number(d)?-1:1:f!==m?f?-1:1:p<d?-1:1}return 0}function Vh(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function lC(e,t){let n=e.filter(l=>!t.includes(l)).toSorted(Ht),r=t.filter(l=>!e.includes(l)).toSorted(Ht),o=e.filter(l=>t.includes(l)).toSorted(Ht),[s,i]=n.length>0&&r.length>0?[n,r]:n.length>0?[n,o]:[o,r];if(s.length===0||i.length===0)return"changed";let a=(l,p)=>Ht(l.at(-1),p[0])<0;return a(s,i)?"up":a(i,s)?"down":"changed"}function d7(e,t){let n=[],r=[],o=[],s=new Set([...e.keys(),...t.keys()]);for(let a of s){let l=e.get(a),p=t.get(a);if(l&&p){let d=[...l].toSorted(Ht),f=[...p].toSorted(Ht);if(Vh(d,f))continue;n.push({pkg:a,baseVersions:d,otherVersions:f,direction:lC(d,f)})}else l?o.push({pkg:a,versions:[...l].toSorted(Ht)}):r.push({pkg:a,versions:[...p].toSorted(Ht)})}let i=(a,l)=>a.pkg.localeCompare(l.pkg);return n.sort(i),r.sort(i),o.sort(i),{updated:n,added:r,removed:o,totals:{baseDeps:e.size,otherDeps:t.size}}}var cC=`.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.code-block:not(.token){white-space:normal;margin:.4rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.4rem .55rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.95em;line-height:1.5;color:var(--text)}& code{font:inherit}}
|
|
146
|
-
`;var
|
|
147
|
-
`;var
|
|
148
|
-
`;var
|
|
149
|
-
`;var
|
|
150
|
-
`;var
|
|
137
|
+
`,e.pos))e.pos+=2;else return!1;return e.line++,!0}function rh(e){do xr(e),_S(e);while(Yd(e))}var $S={__proto__:null,b:"\b",t:" ",n:`
|
|
138
|
+
`,f:"\f",r:"\r",'"':'"',"\\":"\\"},GF={__proto__:null,'"':/[^"\\[\p{Cc}--[\t\u0080-\u009F]]]*/vy,"'":/[^'[\p{Cc}--[\t\u0080-\u009F]]]*/vy},KF=/u([\dA-Fa-f]{4})|U([\dA-Fa-f]{8})/uy;function RS(e){let t=e.text[e.pos];if(t in $S)return $S[e.text[e.pos++]];let n=kr(e,KF);se(n!==null,e,()=>`unsupported escape ${$e(`\\${t??""}`)}`);let r=Number.parseInt(n[1]??n[2],16);return se(r<=1114111&&(r<55296||r>57343),e,()=>`\\${n[0]} is not a Unicode scalar value`),String.fromCodePoint(r)}var qF=/[\t ]*\r?\n(?:[\t ]|\r?\n)*/uy;function YF(e){let t=kr(e,qF);return t===null?RS(e):(e.line+=t[0].split(`
|
|
139
|
+
`).length-1,"")}var MS=(e,t)=>e.text[e.pos+1]===t&&e.text[e.pos+2]===t,XF={__proto__:null,'"':/"/uy,"'":/'/uy,'"""':/"{3,5}/uy,"'''":/'{3,5}/uy};function TS(e,t){let n=MS(e,t),r=XF[n?t.repeat(3):t];e.pos+=n?3:1,n&&Yd(e);let o="";for(;;){if(o+=kr(e,GF[t])[0],n&&Yd(e)){o+=`
|
|
140
|
+
`;continue}se(!Xd(e),e,"unterminated string");let s=kr(e,r);if(s!==null)return o+s[0].slice(3);let i=e.text[e.pos++];i===t?o+=i:i==="\\"?o+=n?YF(e):RS(e):CS(e,i,"a string")}}var JF=/[\w-]+/uy;function kS(e){let t=e.text[e.pos];if(t==='"'||t==="'")return se(!MS(e,t),e,"a multi-line string cannot be a key"),TS(e,t);let n=kr(e,JF);return se(n!==null,e,()=>`expected a key, found ${yo(e)}`),n[0]}function IS(e){let t=[kS(e)];for(;;){if(xr(e),e.text[e.pos]!==".")return t;e.pos++,xr(e),t.push(kS(e)),se(t.length<=xS,e,"a key with too many parts")}}var ZF=/[\w+.:-]+/uy;function QF(e){let t=kr(e,ZF);se(t!==null,e,()=>`expected a value, found ${yo(e)}`);let n=t[0];if(n==="true")return!0;if(n==="false")return!1;let r=yS(n,e)??vS(n,e)??mS(n,e);return se(r!==void 0,e,()=>`expected a value, found ${$e(n)}`),r}function eL(e,t,n,r){se(t[n]===void 0,e,()=>`duplicate key ${$e(n)}`),t[n]=r}function AS(e,t){let n=IS(e);return se(e.text[e.pos]==="=",e,()=>`expected "=" after the key, found ${yo(e)}`),e.pos++,xr(e),{header:!1,keys:n,value:ES(e,t)}}function tL(e,t){e.pos++;let n=[];for(rh(e);e.text[e.pos]!=="]"&&(n.push(ES(e,t+1)),rh(e),e.text[e.pos]!=="]");rh(e))se(e.text[e.pos]===",",e,()=>`expected "," or "]", found ${yo(e)}`),e.pos++;return e.pos++,n}var Bs=e=>typeof e=="object"&&e!==null&&Object.getPrototypeOf(e)===null,nL=new WeakSet;function sh(e,t,n,r,o,s){let i=t;for(let a of r.slice(0,-1)){a in i||n.add(i[a]=Object.create(null));let l=i[a];se(n.has(l),e,()=>s(a,l)),i=l}eL(e,i,r.at(-1),o)}var rL=e=>Array.isArray(e)?"an array":Bs(e)?"an inline table":"a value",oL=(e,t)=>`${$e(e)} is ${rL(t)}, which a dotted key cannot add to`;function oh(e){xr(e),se(!Xd(e)&&e.text[e.pos]!=="#",e,"an inline table across lines is not supported")}function sL(e,t){e.pos++;let n=Object.create(null);nL.add(n);let r=new Set;if(oh(e),e.text[e.pos]==="}")e.pos++;else do{oh(e),se(e.text[e.pos]!=="}",e,"a trailing comma in an inline table is not supported");let{keys:o,value:s}=AS(e,t+1);sh(e,n,r,o,s,oL),oh(e);let i=e.text[e.pos];se(i===","||i==="}",e,()=>`expected "," or "}" on the inline table's line, found ${yo(e)}`)}while(e.text[e.pos++]===",");return n}function ES(e,t){se(t<=xS,e,"nested too deep");let n=e.text[e.pos];return n==='"'||n==="'"?TS(e,n):n==="["?tL(e,t):n==="{"?sL(e,t):QF(e)}function iL(e){let t=e.text.startsWith("[[",e.pos);e.pos+=t?2:1,xr(e);let n=IS(e),r=t?"]]":"]";return se(e.text.startsWith(r,e.pos),e,()=>`expected "${r}", found ${yo(e)}`),e.pos+=r.length,{header:!0,keys:n,array:t}}function FS(e){xr(e);let t=e.text[e.pos];if(t==="[")return iL(e);if(!(t==="#"||t==="\r"||Xd(e)))return AS(e,0)}function LS(e){if(xr(e),_S(e),!(Yd(e)||e.pos===e.text.length))throw se(e.text[e.pos]!=="\r",e,SS),new Ut(`expected the end of the line, found ${yo(e)}`,e.line)}function Jd(e,t){return e.arrays.has(t)?"an array of tables":Array.isArray(t)?"an array":Bs(t)?e.fixed.has(t)?"an inline table":"a table":"a value"}var OS=e=>$e(e.join("."));function aL(e,t,n){let r=e.root;for(let o of n){o in r||e.implicit.add(r[o]=Object.create(null));let s=e.arrays.has(r[o])?r[o].at(-1):r[o];se(Bs(s)&&!e.fixed.has(s),t,()=>`${$e(o)} is ${Jd(e,s)}, which a header cannot add to`),r=s}return r}function lL(e,t,n,r){e.pending.clear();let o=aL(e,t,n.slice(0,-1)),s=n.at(-1);if(r){s in o||e.arrays.add(o[s]=[]),se(e.arrays.has(o[s]),t,()=>`${OS(n)} is ${Jd(e,o[s])}, not an array of tables`),o[s].push(e.current=Object.create(null));return}s in o?se(e.implicit.delete(o[s]),t,()=>`${OS(n)} is ${Jd(e,o[s])} already`):o[s]=Object.create(null),e.current=o[s]}function cL(e,t,n){return!Bs(n)||e.fixed.has(n)?`${$e(t)} is ${Jd(e,n)}, which a dotted key cannot add to`:e.implicit.has(n)?`a dotted key through ${$e(t)}, a table a header made on its way, is not supported`:`${$e(t)} is a table declared elsewhere, which a dotted key cannot add to`}function dL(e,t,n,r){sh(t,e.current,e.pending,n,r,(o,s)=>cL(e,o,s)),Bs(r)&&e.fixed.add(r)}var uL={__proto__:null,"\uFEFF":"a byte order mark is not read","\uFFFD":"U+FFFD is not supported: a decoder puts it where bytes are not UTF-8"};function pL(e){if(typeof e!="string")throw new TypeError("expected a string");let t=/\p{Cs}|^\uFEFF|\uFFFD/u.exec(e);if(t===null)return;let n=e.slice(0,t.index).split(`
|
|
141
|
+
`).length-1;throw new Ut(uL[t[0]]??"a lone surrogate is not well-formed Unicode",n)}function ih(e){pL(e);let t=Object.create(null),n={text:e,pos:0,line:0},r={root:t,current:t,implicit:new Set,pending:new Set,arrays:new Set,fixed:new Set};for(;n.pos<e.length;){let o=FS(n);o?.header===!0?lL(r,n,o.keys,o.array):o!==void 0&&dL(r,n,o.keys,o.value),LS(n)}return t}function fL(e){if(typeof e!="string")return null;let t=/^(?:github:|(?:git\+)?(?:(?:https?|ssh|git):\/\/(?:[\w.~%!$&'()*+,;=:-]*@)?(?:www\.)?github\.com(?::\d+)?\/|ssh:\/\/(?:[\w.~%!$&'()*+,;=-]*@)?(?:www\.)?github\.com:|(?:[^@/:]+@)?(?:www\.)?github\.com:))?([\w.-]+)\/([\w.-]+?)(?:\.git)?\/?$/iu.exec(e.trim().replace(/#.*$/su,"")),n=t&&`${t[1]}/${t[2]}`;return n&&_p("github",n)?n:null}function mL(e,t){if(typeof e!="string")return;let n=/^https?:\/\/(?:www\.)?github\.com\/([^/]+\/[^/]+)\/tree\/[^/#?]+\/([^#?]+)/iu.exec(e.trim());if(!(!n||n[1].toLowerCase()!==t.toLowerCase()))try{return decodeURIComponent(n[2])}catch{return}}var gL=e=>e.replaceAll("\\","/").split("/").every(t=>t===""||t===".");function hL(e){if(typeof e!="string")return{};let t=e.replaceAll("\\","/").split("/");if(t.includes(".."))return{};let n=t.filter(r=>r!==""&&r!==".").join("/");return _p("directory",n)?{directory:n}:{}}function NS(e){let t=e?.repository,n=typeof t=="string"?t:t?.url,r=fL(n);if(!r)return;let o=t.directory;return typeof o!="string"&&(o=mL(e.homepage,r),o!==void 0&&gL(o)&&(o=void 0)),{github:r,...hL(o)}}function ah(e,t){let n=e?.[t];if(typeof n!="string")return null;try{return t.endsWith(".toml")?ih(n):JSON.parse(n.replace(/^\uFEFF/u,""))}catch{return null}}function bL(e){let t=typeof e=="string"?e:e?.url;if(typeof t!="string")return null;let n=t.trim().replace(/#.*$/su,"").replace(/^github:/iu,"").replace(/^git\+/iu,"").replace(/^(?:ssh|git):\/\/(?:git@)?github\.com\//iu,"https://github.com/").replace(/^git@github\.com:/iu,"https://github.com/");return/^(?:https?:\/\/)?(?:www\.)?github\.com\//iu.test(n)?Pe({repo:{github:n}}):null}function Zd(e,t,n){let r=t?.ecosystem??e.ecosystem??"npm",o=r==="composer"?ah(t?.files,"composer.json"):r==="cargo"?ah(t?.files,"Cargo.toml")?.package:ah(t?.files,"package.json"),s=t?.name??e.name,i=t?.version??e.version??o?.version,a=Pe(t),l=a?{github:a,directory:t.repo.directory}:r==="npm"||r==="soldeer"?NS(o):{github:[o?.repository,o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(f=>bL(f)).find(Boolean)},p=typeof l?.directory=="string"?l.directory:void 0,d=a?Kr(t.repo.commit):null;return{ecosystem:r,name:s,version:typeof i=="string"?i:void 0,github:l?.github??null,...p===void 0?{}:{directory:p},...d?{commit:d}:{},fileCount:n}}var BS=new WeakMap;function PS(e,t){let n=BS.get(e);if(n||BS.set(e,n=new Map),!n.has(t)){let r=`${t}/`,o=0,s=0;for(let[i,a]of e)i.startsWith(r)&&(o+=wn(a),s+=fv(a));n.set(t,{bytes:o,loc:s})}return n.get(t)}var Qd=new Set(["cargo","composer","soldeer"]);function eu(e,t,n){if(t?.ecosystem!==void 0)return t.ecosystem;if(!t?.name||/(?:^|\/)vendor\/([^/]+\/[^/]+)$/u.exec(e)?.[1]!==t.name)return;let r=Object.entries(t.files??{}).filter(([o,s])=>typeof s=="string"&&(!n||n.has(`${e}/${o}`)));return r.length>0&&r.every(([o])=>/\.(?:php|phtml)$/iu.test(o))?"composer":void 0}function DS(e,t=e,n=null){let r={path:"",files:new Map,dirs:new Map};for(let s=0;s<e.length;s++){let i=e[s].split("/"),a=r,l=t[s].split("/");for(let[p,d]of i.slice(0,-1).entries())a.dirs.has(d)||a.dirs.set(d,{path:i.slice(0,p+1).join("/"),sourcePath:l.slice(0,-(i.length-p-1)).join("/"),files:new Map,dirs:new Map}),a=a.dirs.get(d);a.files.set(i.at(-1),t[s])}WS(r,n,n?new Set(t):null);let o=s=>{s.package&&(s.packageInfo=Zd(s.package,n?.get(s.sourcePath),s.fileCount));for(let i of s.dirs.values())o(i)};return o(r),r}function zS(e,t=null,n=null){let r=/(?:^|\/)node_modules\//u.exec(e),o=r?r.index+(r[0].startsWith("/")?1:0):e.length,s=n?new Set(n):null;for(let[i,a]of t??[]){let l=eu(i,a,s);if(!Qd.has(l)||!a.name||i==="."||!e.startsWith(`${i}/`)&&!i.startsWith(e))continue;let p=(l==="soldeer"?/(?:^|\/)dependencies\//u:/(?:^|\/)vendor\//u).exec(`${i}/`),d=p?p.index+(p[0].startsWith("/")?1:0):i.lastIndexOf("/")+1;o=Math.min(o,d)}return e.slice(0,o)}function WS(e,t,n){for(let s of e.dirs.values())WS(s,t,n);e.fileCount=e.files.size+[...e.dirs.values()].reduce((s,i)=>s+i.fileCount,0);let r=t?.get(e.sourcePath),o=eu(e.sourcePath,r,n);if(Qd.has(o)&&r.name&&(e.boundary=!0,e.package={name:r.name,version:r.version,ecosystem:o},e.hideSrc=e.dirs.size===1&&e.dirs.has("src"),e.hideSrc&&(e.srcNameConflicts=new Set([...e.dirs.get("src").files.keys()].filter(s=>e.files.has(s))))),/(?:^|\/)dependencies$/u.test(e.path)&&[...e.dirs.values()].some(s=>s.package?.ecosystem==="soldeer")&&(e.boundary=!0),/(?:^|\/)vendor$/u.test(e.path)){let s=new Map;for(let[i,a]of e.dirs)if(!a.package&&a.files.size===0&&a.dirs.size>0&&[...a.dirs.values()].every(l=>l.package?.ecosystem==="composer")){e.boundary=!0;for(let[l,p]of a.dirs)s.set(`${i}/${l}`,p)}else Qd.has(a.package?.ecosystem)&&(e.boundary=!0),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs)if(a.boundary=!0,i.startsWith("@")&&a.files.size===0&&[...a.dirs.keys()].every(l=>!l.startsWith(".")&&!l.startsWith("@")))for(let[l,p]of a.dirs)p.boundary=!0,p.package??={name:`${i}/${l}`},s.set(`${i}/${l}`,p);else!i.startsWith(".")&&!i.startsWith("@")&&(a.package??={name:i}),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules\/\.pnpm$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs){if(a.boundary=!0,a.files.size>0||a.dirs.size!==1)continue;let l=a.dirs.get("node_modules");if(!l||l.files.size>0||l.dirs.size!==1)continue;let p=l.dirs.values().next().value;if(!p.package)continue;let d=`${p.package.name.replace("/","+")}@`;if(!i.startsWith(d))continue;let f=/^(\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?)([_(].*)?$/iu.exec(i.slice(d.length));if(!f)continue;p.package={...p.package,version:f[1]},e.dirs.set(i,p);let m=wo(i,p);s.has(m)||s.set(m,[]),s.get(m).push(p)}for(let i of s.values())if(!(i.length<2)){i.sort((a,l)=>a.path.localeCompare(l.path));for(let[a,l]of i.entries())l.package.variant=a+1}}return e}function wo(e,t){let n=t.package;return n?`${n.name}${n.version?`${Qd.has(n.ecosystem)?" - ":"@"}${n.version}`:""}`:e}function HS(e,t,n="",r=null){let o=t.toLowerCase(),s=(i,a,l=null)=>{let p=new Map([...i.files].filter(([f,m])=>{let h=n&&m.startsWith(n)?m.slice(n.length):m,b=l?.srcNameConflicts.has(f)?`src/${f}`:f;return(!r||r(m))&&(h.toLowerCase().includes(o)||`${a}/${b}`.toLowerCase().includes(o))})),d=new Map;for(let[f,m]of i.dirs){let h=i.hideSrc&&f==="src",b=s(m,h?a:`${a}/${wo(f,m)}`,h?i:null);b&&d.set(f,b)}return p.size>0||d.size>0?{...i,files:p,dirs:d}:null};return o||r?s(e,""):e}function lh(e,t,n){let r=[e];if(t.hideSrc&&t.dirs.has("src")){let s=t.dirs.get("src"),i=new Map(t.files);for(let[a,l]of s.files)i.set(t.srcNameConflicts.has(a)?`src/${a}`:a,l);return{names:r,node:{...t,sourcePath:s.sourcePath,files:i,dirs:s.dirs}}}if(e==="node_modules"&&t.files.size===0&&t.dirs.size===1&&t.dirs.has(".pnpm"))return{names:["node_modules",".pnpm"],node:t.dirs.get(".pnpm")};let o=Math.max(12,24-Math.max(0,n-1)*2);for(;!t.boundary&&t.files.size===0&&t.dirs.size===1&&r.length<3;){let[s,i]=t.dirs.entries().next().value;if(i.boundary||[...r,s].join("/").length>o)break;r.push(s),t=i}return{names:r,node:t}}function US(e){if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.currentTarget,n=e.target.closest("summary, .bundle-code-tree-link");if(!n||!t.contains(n)||!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Home","End"].includes(e.key))return;e.preventDefault(),e.stopPropagation();let o=[...t.querySelectorAll("summary, .bundle-code-tree-link")].filter(l=>{let p=l.parentElement;return l.tagName==="SUMMARY"&&(p=p.parentElement),!p.closest("details:not([open])")}),s=o.indexOf(n),i=n.tagName==="SUMMARY"?n.parentElement:null,a=n;e.key==="ArrowDown"&&(a=o[Math.min(s+1,o.length-1)]),e.key==="ArrowUp"&&(a=o[Math.max(s-1,0)]),e.key==="Home"&&(a=o[0]),e.key==="End"&&(a=o.at(-1)),e.key==="ArrowRight"&&i&&(i.open?a=o[s+1]??n:n.click()),e.key==="ArrowLeft"&&(i?.open?n.click():a=(i??n).parentElement.closest("details")?.querySelector("summary")??n),a?.focus()}function yL([e,t],[n,r]){return wo(e,t).localeCompare(wo(n,r))||t.path.localeCompare(r.path)}function wL(e,t=0,n=[]){for(let[r,o]of[...e.dirs.entries()].toSorted(yL))wL(lh(r,o,t).node,t+1,n);for(let[,r]of[...e.files.entries()].toSorted(([o],[s])=>o.localeCompare(s)))n.push(r);return n}function ch(e,t,n,r,o){let s=[t,n].filter(Boolean).join("/"),i=Kr(r);return{href:`https://github.com/${e}/blob/${i??"HEAD"}/${s.split("/").map(encodeURIComponent).join("/")}`,github:e,path:s,commit:i,package:typeof o?.name=="string"&&o.name?{name:o.name,version:o.version,ecosystem:o.ecosystem}:null}}function VS(e,t,n=null){if(typeof t!="string")return null;let r=e?.npm?.manifest;if(r){let f=Kr(r.gitHead);return r.github?.github&&f?ch(r.github.github,Lt({directory:r.github.directory??""}),t,f,null):null}if(e?.kind!=="stasis")return null;let o=e.bundle,s=null;for(let[f,m]of o?.modules??[]){let h=f==="."?t:t.startsWith(`${f}/`)?t.slice(f.length+1):null;if(h!==null&&Object.hasOwn(m.files,h)){s={dir:f,info:m,rel:h};break}}if(!s)return null;let{dir:i,info:a,rel:l}=s,p=i==="."?void 0:eu(i,a,null)??(i.split("/").includes("node_modules")?"npm":void 0);if(p===void 0){let f=Pe(o),m=Pe({repo:{github:n?.github}}),h=f??m;if(!h)return null;let b=typeof o.repo?.directory=="string"?Lt(o.repo):m?.toLowerCase()===h.toLowerCase()?Lt({directory:n.directory}):"";return ch(h,b,t,f?o.repo?.commit:void 0,null)}let d=Zd({name:a.name,ecosystem:p},a,0);return d.github?ch(d.github,d.directory??"",l,d.commit,d):null}function jS(e,t=null){return u`<a class="bundle-code-github-link" href="${e.href}" target="_blank" rel="noopener noreferrer" aria-label="Open on GitHub" data-tooltip="${e.path}" data-tooltip-repo="${e.github}" data-tooltip-commit="${e.commit??g}" data-tooltip-commit-info="${Ns(t,e.commit,e.github)??g}" data-tooltip-package="${e.package?.name??g}" data-tooltip-ecosystem="${e.package?.ecosystem??g}" data-tooltip-version="${e.package?.version??g}">${W(Yt)}${e.package?u`<span hidden data-tooltip-package-icon>${El(e.package.ecosystem)}</span>`:g}</a>`}var qS=".bundle-code-main, .bundle-source-modal, .bundle-search-side",tu=new Map,uh=new WeakMap,dh=null;function ph(e){if(!e){queueMicrotask(GS);return}if(GS(),tu.has(e))return;if(!e.isConnected){queueMicrotask(()=>{e.isConnected&&ph(e)});return}let t=e.querySelector(":scope > .bundle-source-code");if(!t)return;let n=new ResizeObserver(()=>{uh.get(e)?.width!==YS(e)&&KS(e)});n.observe(t),n.observe(e.parentElement);let r=new MutationObserver(()=>KS(e));r.observe(t,{childList:!0,subtree:!0,characterData:!0}),r.observe(e,{attributes:!0,attributeFilter:["class"]}),tu.set(e,()=>{n.disconnect(),r.disconnect()})}function GS(){for(let[e,t]of tu)e.isConnected||(t(),tu.delete(e))}function YS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col");if(!t||!n)return 0;let r=getComputedStyle(t);return e.parentElement.clientWidth-n.getBoundingClientRect().width-parseFloat(r.paddingLeft)-parseFloat(r.paddingRight)}function KS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col"),r=YS(e);if(!t||!n||!e.isConnected||r<=0)return;let o=e.classList.contains("is-wrapped"),s=uh.get(e)?.rows??new Map,i=null;for(let m of n.children)if((!i||(s.get(m)??1)<s.get(i))&&(i=m),!s.has(m))break;let a=i?parseFloat(getComputedStyle(i).height)/(s.get(i)??1):parseFloat(getComputedStyle(t).lineHeight),{rows:l,toggles:p}=vL(t,r,o,a),d=new Map;for(let[m,h]of l){let b=n.children[m];if(!b)continue;let y=`"${"\\A ".repeat(h-1)} "`;b.style.getPropertyValue("--wrap-breaks")!==y&&b.style.setProperty("--wrap-breaks",y),d.set(b,h)}for(let m of s.keys())d.has(m)||m.style.removeProperty("--wrap-breaks");uh.set(e,{rows:d,width:r});let f=e.closest(qS)?.querySelector("[data-bundle-source-wrap]");f&&(f.hidden=!p)}function vL(e,t,n,r){let o=getComputedStyle(e);dh??=document.createElement("canvas").getContext("2d"),dh.font=`${o.fontSize} ${o.fontFamily}`;let s=t/(2*dh.measureText("0").width),i=[],a=null,l=null,p=0,d=0,f=()=>{p>s&&l&&i.push({line:d,first:a,last:l}),d++,p=0,a=l=null},m=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(let x=m.nextNode();x;x=m.nextNode()){let $=x.data;for(let k=0;k<$.length;){let S=$.indexOf(`
|
|
142
|
+
`,k),C=S===-1?$.length:S;if(C>k){a??={node:x,from:k,to:k+($.codePointAt(k)>65535?2:1)};let _=C;for(;_>k&&($[_-1]===" "||$[_-1]===" ");)_--;_>k&&(l={node:x,from:_-(_-2>=k&&$.codePointAt(_-2)>65535?2:1),to:_}),p+=C-k}if(S===-1)break;f(),k=S+1}}f();let h=new Map,b=document.createRange(),y=({node:x,from:$,to:k})=>(b.setStart(x,$),b.setEnd(x,k),b.getBoundingClientRect()),w=e.getBoundingClientRect().left+e.clientLeft+parseFloat(o.paddingLeft),v=!1;for(let{line:x,first:$,last:k}of i){let S=!!$.node.parentElement.closest(".bundle-source-long-line");if(n||S){let C=Math.round((y(k).top-y($).top)/r)+1;C>1&&h.set(x,C),C>1&&!S&&(v=!0)}else!v&&y(k).right-w>t+.5&&(v=!0)}return{rows:h,toggles:v}}function rj(e){let t=e.closest(qS)?.querySelector(".bundle-source-code-wrap"),n=t?.querySelectorAll(".bundle-source-lineno-row");if(!n?.length)return()=>{};let r=t.getBoundingClientRect().top,o=n.length-1,s=0;for(;s<o;){let l=s+o>>1;n[l].getBoundingClientRect().bottom<=r?s=l+1:o=l}let i=n[s],a=i.getBoundingClientRect().top-r;return()=>{i.isConnected&&(t.scrollTop+=i.getBoundingClientRect().top-r-a)}}var $L=new Set(["js","mjs","cjs","jsx","ts","mts","cts","tsx","css","json"]),kL=4*1024*1024;function xL(e){let t=/\.([a-z]+)$/iu.exec(e)?.[1]?.toLowerCase();return $L.has(t)?t:null}function XS(e,t,n=()=>Dl(e,t)){return xL(e)!==null&&wn(t)<=kL&&n().category==="minified"}var JS=e=>e.bundle??e.json??e,ZS=new WeakMap;function fh(e,t){let n=ZS.get(JS(e));if(n||ZS.set(JS(e),n=new Map),!n.has(t)){let r=we(e).get(t);n.set(t,Lv(t,typeof r=="string"?r:null,xn(e).get(t)))}return n.get(t)}var Ps=(e,t=n=>n)=>e?new Map(Object.entries(e).map(([n,r])=>[t(n),r])):null,SL=({stamps:e,readability:t,runsCode:n,exfiltration:r,hosts:o})=>({stamps:e,runsCode:Ps(n),exfiltration:Ps(r),hosts:Ps(o),readability:t&&{...t,controls:Ps(t.controls,Number)}});function CL(e){switch(e.id){case"held-runs-code":case"held-credentials":case"held-exfiltration":case"held-remote":case"held-ip-lookup":return{...e,files:e.files.map(t=>({...t,found:Ps(t.found),...t.added?{added:Ps(t.added)}:{}}))};case"popularity":return{...e,tier:e.tier??1/0};default:return e}}var QS=e=>({oldVersion:e.oldVersion??null,findings:e.findings.map(CL),files:new Map(Object.entries(e.files).map(([t,n])=>[t,SL(n)])),dependencies:e.dependencies,score:e.score??null}),nu=e=>e?.npm?e.risk?.()?.files??null:null,_L={stamps:[],readability:null,runsCode:null,exfiltration:null,hosts:null};function Fn(e,t){return e?.npm?nu(e)?.get(t)??_L:fh(e,t)}var mh=({names:e,loop:t})=>[e>=Iv&&`${e.toLocaleString("en")}${e===Av?" or more":""} names such as _0x1a2b`,t&&"while(!![])"].filter(Boolean).join(", and ");function t1(e,t,n){return n===we(e).get(t)&&typeof n=="string"?Fn(e,t).readability:gh(e,t,n)}var e1=new WeakMap;function gh(e,t,n){let r=e1.get(e);r||e1.set(e,r=new Map);let o=r.get(t);if(o?.text===n)return o.read;let s=Dl(t,n);return r.set(t,{text:n,read:s}),s}function RL(e,t){let n=Ev(e,t),r=n.slice(0,6).map(([o,s])=>`U+${o.toString(16).toUpperCase().padStart(4,"0")} \xD7${s.toLocaleString("en")}`);return`${Bt.get(t).name}: ${r.join(", ")}${n.length>6?`, and ${n.length-6} more`:""}`}var n1=({longLines:e,longest:t})=>`${e.toLocaleString("en")} ${e===1?"line":"lines"} over ${Tv} characters, the longest ${t.toLocaleString("en")}`;function ML(e){let{average:t,category:n,longLines:r,inlineMap:o}=e,s=()=>n1(e);switch(n){case"binary":return"Not UTF-8 text, or holding a NUL: there is no text to read";case"map":return"A source map";case"inline-map":return`Inline source map, ${ge(o)}${r>0?`; minified: ${s()}`:""}`;case"minified":return`Minified: ${r>0?s():`its lines of code ${t.toLocaleString("en")} characters long on average, strings and comments aside, with few spaces`}`;default:return g}}function r1(e,t=!1){if(!e)return g;let n=$i(e),{tag:r,short:o,mark:s}=Bt.get(n);return u`<span class="${`npm-encoding-tag${s?` is-${s}`:""}`}" data-tooltip="${ML({...e,category:n})}">${t?o??r:r}</span>`}function yj(e){let t=e?.kind;return t!=="ascii"&&t!=="utf8"||$i(e)===t?g:r1({...e,category:t})}function o1(e,t=null){let n=e?Ko(e).filter(o=>["controls","invisible","long"].includes(o)&&(t===null||t.includes(qo(e,o)))):[];if(n.length===0)return g;let r=o=>o==="long"?`${n1(e)}${e.category==="long"?", among readable ones":""}`:RL(e.controls,o);return n.map(o=>u`<span class="${`npm-flag-tag is-${qo(e,o)}`}" data-tooltip="${r(o)}">${Bt.get(o).tag}</span>`)}function s1(e){if(!e)return g;let t=$i(e);return t==="ascii"||t==="map"?o1(e):TL(e)}var TL=e=>e?u`${o1(e)}${r1(e)}`:g;function i1(e,t,n,r=!0){let{stamps:o,readability:s}=Fn(e,t),i=r&&o.some(({name:l})=>l==="Large"),a=s?.obfuscation;return!i&&!a?g:u`${i?u`<span class="npm-flag-tag is-notice" data-tooltip="${`A code file of ${ge(n)}, 256 KiB or more`}">Large</span>`:g}${a?u`<span class="npm-flag-tag is-warn" data-tooltip="${`An obfuscator's fingerprint: ${mh(a)}`}">Obfuscated</span>`:g}`}var u1=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 2.5c-1.4 0-2 .6-2 2v1.6c0 .9-.5 1.6-1.5 1.9 1 .3 1.5 1 1.5 1.9v1.6c0 1.4.6 2 2 2M10.5 2.5c1.4 0 2 .6 2 2v1.6c0 .9.5 1.6 1.5 1.9-1 .3-1.5 1-1.5 1.9v1.6c0 1.4-.6 2-2 2"/></svg>`,p1=e=>e?.status==="loading"?"Pretty-printing\u2026":e?.status==="error"?`Couldn't pretty-print${e.of>1?` ${e.failed} of ${e.of} files`:""}: ${e.message}`:"Pretty-print",IL=8,AL=4,EL=2,FL=30,LL=2,_a="The server's copy is of another file than the one open.",OL="The server didn't pretty-print this file.",zs=e=>!(e>=400&&e<500&&e!==429),NL=5e3,BL=5*6e4,hh=new Map;function f1(e,t,n,r){if(!t?.retry){hh.delete(e);return}let o=hh.get(e)??0;hh.set(e,o+1),setTimeout(()=>{n()&&r()?.()},Math.min(NL*2**o,BL))?.unref?.()}var at=new Map,Ws=0,Mj=()=>Ws,Ds=new Map,PL=(e,t)=>`${e.integrity}\0${t}`,an=new Map,Rt=new Map,a1=new WeakMap;function m1(e,t,n,r){if(!(t?.managedId||t?.npm)||typeof r!="string")return!1;let o=a1.get(e);return o||a1.set(e,o=new Map),o.has(n)||o.set(n,XS(n,r,()=>gh(e,n,r))),o.get(n)}var bh=!1,ou=new Set,g1=new Set;function DL(e,t){at.delete(e),at.set(e,t),bh||(bh=!0,g1=ou,ou=new Set,setTimeout(()=>{bh=!1})),ou.add(e),h1()}function h1(){for(let[e,t]of at){if(at.size<=IL)break;ou.has(e)||g1.has(e)||t.status==="loading"||(at.delete(e),Ds.delete(e))}}var yh=0,l1=[];async function zL(e){yh<LL?yh++:await new Promise(t=>{l1.push(t)});try{return await e()}finally{let t=l1.shift();t?t():yh--}}async function WL(e,t,n,r,o,s){let i;try{let p=s??await Dr(o),{text:d,source:f}=await zL(()=>n.npm?Qk(n.npm.name,n.npm.version,r,p):Jk(n.managedId,r,p));i=f===p&&typeof d=="string"?{status:"ready",text:d,hash:await Dr(d)}:{status:"error",message:_a,retry:!0}}catch(p){if(p?.name==="AbortError"){at.get(e)===t&&(at.delete(e),Ds.delete(e));return}i={status:"error",message:p?.message??String(p),retry:zs(p?.status)}}if(at.get(e)!==t)return;at.set(e,i),Ws++;let a=Ds.get(e),l=i.status==="error"&&i.retry;l||Ds.delete(e),f1(`file ${e}`,l?i:null,()=>at.get(e)===i&&at.delete(e),()=>Ds.get(e)),a?.(),h1()}function b1(){for(let[e,t]of an){if(an.size<=AL)break;t.rest&&an.delete(e)}}function c1(e,t){let n=e.notifiers.get(t);e.notifiers.delete(t),n?.()}async function HL(e,t,n,{npm:r}){let o=we(n),s;try{await Zk(r.name,r.version,async({path:i,source:a,text:l,status:p,message:d})=>{let f=o.get(i),h=typeof l=="string"&&typeof f=="string"&&a===await Dr(f)?{status:"ready",text:l,hash:await Dr(l)}:typeof l=="string"?{status:"error",message:_a,retry:!0}:{status:"error",message:d,retry:zs(p)};t.copies.set(i,h),Ws++,c1(t,i)}),s={status:"error",message:OL,retry:!1}}catch(i){if(i?.name==="AbortError"){an.get(e)===t&&an.delete(e);return}s={status:"error",message:i?.message??String(i),retry:zs(i?.status)}}t.rest=s,Ws++;for(let i of[...t.notifiers.keys()])c1(t,i);b1()}function UL(e,t,n,r,o){let s=e.integrity,i=an.get(s);if(an.delete(s),i||(i={copies:new Map,notifiers:new Map,rest:null},HL(s,i,e,t)),an.set(s,i),b1(),r!==we(e).get(n))return{status:"error",message:_a,retry:!1};let a=i.copies.get(n)??i.rest;return a||(i.notifiers.set(n,o),{status:"loading"})}function y1(e,t,n,r,o){return c.bundleSourcePretty?t.npm?UL(e,t,n,r,o):w1(e,n,r,o,t):null}function w1(e,t,n,r,o=e){let s=PL(e,t),i=at.get(s),a=i??{status:"loading"};return DL(s,a),(a.status==="loading"||a.retry)&&Ds.set(s,r),i||WL(s,a,o,t,n,e.fileHashes?.get(t)),a}var ru=new Set;function d1(e){e&&(ru.size===0&&setTimeout(()=>{let t=[...ru];ru.clear();for(let n of t)n()},FL),ru.add(e))}function v1(){for(let[e,t]of Rt){if(Rt.size<=EL)break;t.ended&&Rt.delete(e)}}async function VL(e,t,n,r){let o={base:n,other:r},s=null;try{let i=async({side:a,path:l,source:p,text:d,status:f,message:m})=>{if(typeof d!="string"&&zs(f))return;let h=Object.hasOwn(o,a)?o[a]:null,b=h&&we(h).get(l),y=typeof d=="string"&&typeof b=="string"&&p===(h.fileHashes?.get(l)??await Dr(b));t.copies.set(`${a}\0${l}`,y?{status:"ready",text:d,hash:await Dr(d)}:typeof d=="string"?{status:"error",message:_a,retry:!0}:{status:"error",message:m,retry:zs(f)}),Ws++,d1(t.notify)};await(n.npm?t0(n.npm.name,n.npm.version,r.npm.version,i):e0(n.managedId,r.managedId,i))}catch(i){if(i?.name==="AbortError"){Rt.get(e)===t&&Rt.delete(e);return}s={status:"error",message:i?.message??String(i),retry:zs(i?.status)}}Object.assign(t,{ended:!0,rest:s}),Ws++,f1(`comparison ${e}`,s,()=>Rt.get(e)===t&&Rt.delete(e),()=>t.notify),d1(t.notify),v1()}function Tj(e,t,n,r,o,s){let i=`${e.integrity}\0${t.integrity}`,a=Rt.get(i);Rt.delete(i),a||(a={copies:new Map,notify:null,ended:!1,rest:null},VL(i,a,e,t)),Rt.set(i,a),v1();let l=n==="base"?e:t;return o!==we(l).get(r)?{status:"error",message:_a,retry:!1}:(a.notify=s,a.copies.get(`${n}\0${r}`)??a.rest??(a.ended?w1(l,r,o,s):{status:"loading"}))}function Ij(){if(c.bundleSourcePretty=!c.bundleSourcePretty,!c.bundleSourcePretty)return;let e=t=>t.status==="error"&&t.retry;for(let[t,n]of at)e(n)&&at.delete(t);for(let[t,n]of an)n.rest&&(e(n.rest)||[...n.copies.values()].some(e))&&an.delete(t);for(let[t,n]of Rt)n.ended&&(n.rest?e(n.rest):[...n.copies.values()].some(e))&&Rt.delete(t)}function wh(e,t,n){return e?.bundle===t&&e.files[e.at]===n?e:{bundle:t,files:n?[n]:[],at:0}}function Ej(e,t){if(e.files[e.at]===t)return e;let n=[...e.files.slice(0,e.at+1),t];return{...e,files:n,at:n.length-1}}function Fj(e,t){return{...e,at:Math.max(0,Math.min(e.at+t,e.files.length-1))}}function Ln({title:e,count:t,extra:n=g,tools:r=g,body:o,list:s=!1,className:i=""}){return u`<section class="${`bundles-overview-col ${i}`}"><header class="bundles-overview-col-head"><span class="bundles-overview-col-title">${e} <span class="bundles-overview-col-count">${t}</span>${n}</span>${r}</header><div class="${`bundles-overview-col-body${s?" bundles-overview-col-body--list":""}`}">${o}</div></section>`}var vh=1024,$1=1024*vh,k1=["tiny","small","medium","large","gigantic"],jL={dependencies:[1,4,11,26],files:[3,24,192,1536],lines:[400,3200,25600,204800],unpacked:[16*vh,128*vh,$1,8*$1]};function GL(e,t){let n=jL[e].findIndex(r=>t<r);return k1[n===-1?k1.length-1:n]}function su(e,t,n){return u`<span class="${`npm-sized is-${GL(e,t)}`}">${n}</span>`}var KL=["preinstall","install","postinstall"];function x1(e,t=!1){let n={...e};return!n.preinstall&&!n.install&&t&&(n.install="node-gyp rebuild"),KL.filter(r=>typeof n[r]=="string").map(r=>[r,n[r]])}function Ra(e,t=[]){return x1(e?.installScripts,!!(t&&(t instanceof Set?t.has("binding.gyp"):t.includes("binding.gyp"))))}function Dj(e,t=!1){let n=null;try{n=typeof e=="string"?JSON.parse(e.replace(/^\uFEFF/u,"")):null}catch{}let r=n&&typeof n=="object"&&n.scripts&&typeof n.scripts=="object"?n.scripts:{};return x1(r,t)}var $h=14*864e5,kh=(e,{minimumReleaseAge:t=$h,now:n=Date.now()}={})=>t>0&&typeof e=="string"&&n-Date.parse(e)<t,Uj=90*864e5;var vo=72,Qe={top:6,right:0,bottom:18,left:40},qL=24,YL=4,Ma=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),S1=new Intl.NumberFormat("en"),au=e=>new Intl.DateTimeFormat("en",{...e,timeZone:"UTC"}).format,XL=au({month:"short",day:"numeric"}),Us=au({month:"short",day:"numeric",year:"numeric"}),xh=au({month:"short",year:"numeric"}),C1=au({month:"long",year:"numeric"}),Ta=e=>e===1/0?"unpopular":`top ${e.toLocaleString("en")}`,JL=(e,t)=>{let n=t&&Np(e);return u`<dd class="${`npm-downloads-tier ${n?"is-mid":Op(e)}`}" data-tooltip="${n?t:g}">${Ta(e)}</dd>`},Hs={week:{label:"Weekly",of:e=>Nv(e).slice(-52),name:e=>`${XL(e.from)} \u2013 ${Us(e.to)}`},month:{label:"Monthly",of:Fp,name:e=>C1(e.from)}},Sh=(e,t)=>`${S1.format(e)} downloads, ${t}`;function _1(e){let t=Fp(e).at(-1);return t?_h(t):null}var _h=({total:e,from:t})=>({total:e,month:C1(t)});function ZL(e){if(!(e>0))return 1;let t=10**Math.floor(Math.log10(e));return[1,2,2.5,5,10].map(n=>n*t).find(n=>n>=e)}var Ch=class extends Et{static properties={downloads:{attribute:!1},status:{},known:{attribute:!1},_width:{state:!0},_at:{state:!0},_unit:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.downloads=null,this.status="loading",this.known=null,this._width=0,this._at=null,this._unit="week",this._resize=new ResizeObserver(([t])=>{this._width=Math.floor(t.contentRect.width)})}connectedCallback(){super.connectedCallback(),this._resize.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this._resize.disconnect()}_key(t){let n=this._periods.length-1,r={ArrowLeft:-1,ArrowRight:1,Home:-n-1,End:n+1};t.key in r&&(t.preventDefault(),this._at=Math.min(n,Math.max(0,(this._at??n)+r[t.key])))}willUpdate(t){let n=Hs[this._unit],{downloads:r}=this;if((t.has("downloads")||t.has("_unit"))&&(this._periods=n.of(r)),t.has("downloads")){this._latest=r==null?null:Object.fromEntries(Object.entries(Hs).map(([i,{of:a,name:l}])=>{let p=a(r).at(-1);return[i,{total:p?.total??0,tooltip:p&&Sh(p.total,l(p))}]})),this._tier=Lp(r);let o=r?.days.slice(-365),s=o?.reduce((i,a)=>i+a,0);this._year=r==null?null:{total:s,tooltip:Sh(s,`${Us(Ov(r.start,r.days.length-o.length))} \u2013 ${Us(Date.parse(r.end))}`)}}(t.has("downloads")||t.has("_unit")||t.has("_width"))&&(this._shape=this._shapeOf(n))}_shapeOf(t){let n=this._periods,r=this._width;if(n.length===0||r<=Qe.left+Qe.right)return null;let o=r-Qe.left-Qe.right,s=vo-Qe.bottom,i=ZL(Math.max(...n.map(v=>v.total))),a=v=>s-v/i*(s-Qe.top),l=v=>v.toFixed(1),p=this._unit==="month",d=o/(p?n.length:Math.max(n.length-1,1)),f=p?v=>Qe.left+(v+.5)*d:v=>Qe.left+(n.length>1?v*d:o/2),m=n.length-1,h=v=>Math.min(m,Math.max(0,(p?Math.floor:Math.round)((v-Qe.left)/d))),b=xh(n[0].from),y=n.at(-1),w;if(p){let v=Math.min(qL,d*.7)/2;w={bars:n.map(({total:x},$)=>{let[k,S,C]=[f($)-v,f($)+v,a(x)],_=Math.min(YL,v,s-C);return`M${l(k)},${s}V${l(C+_)}Q${l(k)},${l(C)} ${l(k+_)},${l(C)}H${l(S-_)}Q${l(S)},${l(C)} ${l(S)},${l(C+_)}V${s}Z`})}}else{let v=n.map((x,$)=>`${$===0?"M":"L"}${l(f($))},${l(a(x.total))}`).join("");w={line:v,area:`${v}L${l(f(m))},${s}L${l(f(0))},${s}Z`}}return{x:f,y:a,bottom:s,indexAt:h,first:b,last:xh(y.to),...w,ticks:[[0,Ma.format(0)],[i,Ma.format(i)]],label:`${t.label} downloads over the last year, from ${b} to ${xh(y.to)}; the latest ${this._unit}: ${Sh(y.total,t.name(y))}.`}}_stat(t,n,r){return u`<div class="npm-stat"><dt class="sr-only">${t}</dt><dd data-tooltip="${n?.tooltip||g}">${this._figure(n,r)}</dd></div>`}_figure(t,n){return u`${t?Ma.format(t.total):this.status==="loading"?"\u2026":"\u2014"}<span class="npm-stat-per">/${n}</span>`}_latestStat(){let t=this._latest?.[this._unit];return u`<div class="npm-stat"><dt class="sr-only">${Hs[this._unit].label} downloads</dt><dd class="npm-stat-units" data-tooltip="${t?.tooltip||g}">${Object.keys(Hs).map(n=>u`<span class="${n===this._unit?"":"is-held"}" aria-hidden="${n===this._unit?g:"true"}">${this._figure(this._latest?.[n],n)}</span>`)}</dd></div>`}_controls(t){return u`<div class="npm-downloads-controls"><span class="bundles-overview-sort" role="group" aria-label="Downloads by">${Object.entries(Hs).map(([n,{label:r}])=>u`<button type="button" aria-pressed="${String(this._unit===n)}" @click="${()=>{this._unit=n,this._at=null}}">${r}</button>`)} </span><span class="npm-downloads-readout" aria-live="polite">${t?u`<strong>${S1.format(t.total)}</strong> <span>${Hs[this._unit].name(t)}</span>`:g}</span></div>`}render(){let t=this.downloads!=null||this.status!=="ready",n=this._at===null?null:this._periods[this._at]??null;return u`<div class="npm-downloads-head"><dl class="npm-stats">${this._latestStat()} ${this._stat("Downloads, last 12 months",this._year,"year")} ${this._tier?u`<div class="npm-stat"><dt class="sr-only">Popularity</dt>${JL(this._tier,this.known)}</div>`:g}</dl>${t?this._controls(n):g}</div>${t?this._plot(n):g}`}_plot(t){let n=this._shape;if(!n)return u`<div class="npm-downloads-plot" style="height: ${vo}px"></div>`;let r=this._width;return u`<div class="npm-downloads-plot" style="height: ${vo}px" tabindex="0" role="img" aria-label="${n.label}" @pointermove="${o=>{this._at=n.indexAt(o.offsetX)}}" @pointerleave="${()=>{this._at=null}}" @keydown="${o=>this._key(o)}" @blur="${()=>{this._at=null}}"><svg width="${r}" height="${vo}" viewBox="0 0 ${r} ${vo}" aria-hidden="true">${n.ticks.map(([o,s])=>Un`<line class="npm-downloads-grid" x1=${Qe.left} x2=${r-Qe.right} y1=${n.y(o)} y2=${n.y(o)}></line>
|
|
143
|
+
<text class="npm-downloads-tick" x=${Qe.left-6} y=${n.y(o)} dy="0.32em" text-anchor="end">${s}</text>`)} ${n.bars?n.bars.map((o,s)=>Un`<path class=${`npm-downloads-bar${s===this._at?" is-at":""}`} d=${o}></path>`):Un`<path class="npm-downloads-area" d=${n.area}></path><path class="npm-downloads-line" d=${n.line}></path>`}<text class="npm-downloads-tick" x="${Qe.left}" y="${vo-4}">${n.first}</text><text class="npm-downloads-tick" x="${r-Qe.right}" y="${vo-4}" text-anchor="end">${n.last}</text>${t&&!n.bars?Un`<line class="npm-downloads-crosshair" x1=${n.x(this._at)} x2=${n.x(this._at)} y1=${Qe.top} y2=${n.bottom}></line>
|
|
144
|
+
<circle class="npm-downloads-dot" cx=${n.x(this._at)} cy=${n.y(t.total)} r="4"></circle>`:g}</svg></div>`}};customElements.get("npm-downloads-chart")||customElements.define("npm-downloads-chart",Ch);function Rh(e,t){let n=Mh(e);return[n,`${n}.js`,`${n}.cjs`,`${n}.mjs`,`${n}/index.js`].find(r=>r&&t?.has(r))}var Mh=e=>e.replace(/^(?:\.\/)+/u,"").replace(/\/+$/u,""),Ia=/^licen[cs]e(?:-[\w.]+)?(?:\.(?:md|txt))?$/iu;function R1(e,t){let n=t.filter(o=>Ia.test(o)),r=o=>{let s=o.toLowerCase().match(/^[a-z]+/u)?.[0]??"";return n.find(a=>{let l=a.toLowerCase().match(/^licen[cs]e-([a-z]+)/u)?.[1];return l!==void 0&&s!==""&&(l.startsWith(s)||s.startsWith(l))})??(n.length===1?n[0]:null)};return e.split(/(\s+(?:OR|AND|WITH)\s+|[()])/u).filter(Boolean).map(o=>({text:o,file:/^[\w.+-]+$/u.test(o)&&!/^(?:OR|AND|WITH)$/u.test(o)?r(o):null}))}var On=e=>e?.replace(/\.git$/u,""),Th=new Map([["github",{label:"GitHub",domain:"github.com",protocols:["git:","http:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o,s]=e.split("/",5);return(!o||o==="tree")&&n&&On(r)?[n,On(r),o?s:t.slice(1)]:null}}],["bitbucket",{label:"Bitbucket",domain:"bitbucket.org",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="get"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}],["gitlab",{label:"GitLab",domain:"gitlab.com",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let n=e.slice(1),r=n.lastIndexOf("/");return n.includes("/-/")||n.includes("/archive.tar.gz")?null:n.slice(0,Math.max(r,0))&&On(n.slice(r+1))?[n.slice(0,r),On(n.slice(r+1)),t.slice(1)]:null}}],["gist",{label:"Gist",domain:"gist.github.com",protocols:["git:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="raw"&&(n||r)?[r?n:null,On(r||n),t.slice(1)]:null}}],["sourcehut",{label:"SourceHut",domain:"git.sr.ht",protocols:["git+ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="archive"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}]]),QL=new Map([...Th.values()].map(e=>[e.domain,e])),eO=new Set(["git+ssh:","ssh:","git+https:","git:","http:","https:","git+http:",...[...Th.keys()].map(e=>`${e}:`)]);function tO(e){let t=e.indexOf("#"),n=e.indexOf("/"),r=o=>o>-1&&!(t>-1&&o>t);return n>0&&!e.startsWith(".")&&(t>-1?e[t-1]!=="/":!e.endsWith("/"))&&![/\s/u.exec(e)?.index??-1,e.indexOf("@"),e.indexOf(":"),e.indexOf("/",n+1)].some(r)}var lu=e=>{try{return new URL(e)}catch{return null}};function nO(e){let t=e.indexOf("@"),n=e.indexOf(":"),r=eO.has(e.slice(0,n+1))||t>-1&&t<n?e:t>-1?`git+ssh://${e}`:e.indexOf("//")===n+1?e:`${e.slice(0,n+1)}//${e.slice(n+1)}`;if(lu(r))return lu(r);let o=i=>{let a=r.indexOf("#");return r.lastIndexOf(i,a>-1?a:1/0)},s=o(":")>o("@")?`${r.slice(0,o(":"))}/${r.slice(o(":")+1)}`:r;return s.lastIndexOf(":",s.indexOf("#")>-1?s.indexOf("#"):1/0)===-1&&!s.includes("//")&&(s=`git+ssh://${s}`),lu(s)}function rO(e){if(!e)return null;let t=nO(tO(e)?`github:${e}`:e);if(!t)return null;let n=Th.get(t.protocol.slice(0,-1)),r=n??QL.get(t.hostname.replace(/^www\./u,"")),o=n?[t.pathname.replace(/^\/?[^@]*@|^\//u,""),t.hash.slice(1)]:r?.protocols.includes(t.protocol)&&r.repo(t);try{return o?(o.forEach(s=>s&&decodeURIComponent(s)),r):null}catch{return null}}function oO(e){let t=String(e??"").trim();if(/^(?:[.]|~\/|\/|[a-z]:|file:)/iu.test(t))return"path";if(/^npm:/iu.test(t)||!/[/:]|[.](?:tgz|tar\.gz|tar)$/iu.test(t))return"registry";let n=rO(t);if(n)return n.label;if(/^(?:git\+)?[a-z]+:/iu.test(t)){let r=/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#.*)?$/iu.exec(t);if(t.startsWith("git+ssh:")&&r&&!/:\d+(?:\/|$)/u.test(r[1]))return"git";let o=lu(t)?.protocol;return/^(?:git|git\+(?:https?|rsync|ftp|file|ssh)):$/u.test(o)?"git":/^https?:$/u.test(o)?"URL":null}return/\/|[.](?:tgz|tar\.gz|tar)$/iu.test(t)?"path":"registry"}function Vs(e){let[,t,n=""]=/^npm:((?:@[^/@]+\/)?[^/@]+)(?:@(.*))?$/iu.exec(String(e??"").trim())??[];return t?{name:t,spec:n}:null}var M1=e=>oO(e)==="registry";var sO=[["dependencies",null],["peerDependencies","peer"],["optionalDependencies","optional"]];function js(e){let t=[];for(let[n,r]of sO)for(let[o,s]of Object.entries(e?.[n]??{})){let i=Vs(s)?.name??o;t.push({name:o,range:s,kind:r,opens:Rl(i)&&M1(s)?i:null})}return t.toSorted((n,r)=>n.name.localeCompare(r.name)||(n.kind??"").localeCompare(r.kind??""))}function Ih(e,t){let n=l=>new Map(js(l).map(p=>[`${p.kind??""}\0${p.name}`,p])),r=n(t),o=n(e),s=[],i=[],a=[];for(let[l,{name:p,kind:d,range:f,opens:m}]of o){let h=r.get(l);h?h.range!==f&&i.push({key:l,name:p,kind:d,from:f,to:h.range,opens:h.opens}):a.push({key:l,name:p,kind:d,range:f,opens:m})}for(let[l,{name:p,kind:d,range:f,opens:m}]of r)o.has(l)||s.push({key:l,name:p,kind:d,range:f,opens:m});return{removed:a,added:s,changed:i}}var cu=(e=[])=>e.map(({check:t,label:n,tooltip:r})=>u`<span class="${`npm-dependency-flag is-${t}`}" data-tooltip="${r}">${n}</span>`);function ln(e,t=null){let n=Nn("risk",`${e.name}@${e.version}${t===null?"":`..${t}`}`,()=>qk(e.name,e.version,t),QS);return n.status==="ready"?n:null}var iO=/^https?:\/\/(?:www\.)?npmjs\.(?:com|org)\/package\/((?:@[^/]+\/)?[^/?#]+)(?:\/v\/([^/?#]+))?\/?(?:[?#].*)?$/u;function N1(e){let t=String(e??"").trim(),n=iO.exec(t),r,o=null;if(n)try{[r,o]=[decodeURIComponent(n[1]),n[2]?decodeURIComponent(n[2]):null]}catch{return null}else{let s=t.indexOf("@",1);[r,o]=s===-1?[t,null]:[t.slice(0,s),t.slice(s+1)]}return!Rl(r)||o!==null&&!Gw(o)?null:{name:r,spec:o}}function aO(e,t){let n=new Set(t),r=[];for(let o of[e?.main,e?.module,"index.js"]){if(typeof o!="string")continue;let s=Rh(o,n);s&&!r.includes(s)&&r.push(s)}return r}function lO(e){return{integrity:e.integrity,kind:"sourcemap",name:`${e.name}@${e.version}`,size:e.tarballSize,npm:{name:e.name,version:e.version,private:e.private===!0,published:typeof e.published=="string"?e.published:null,manifest:e.manifest??{}}}}function cO(e,t){let n=Array.isArray(t.files)?t.files:[],r=n.map(([o])=>o);return{integrity:e.integrity,kind:"sourcemap",size:e.size,npm:e.npm,json:{version:3,sources:r,sourcesContent:n.map(([,,o])=>typeof o=="string"?o:null)},fileSizes:new Map(n.map(([o,s])=>[o,s])),npmBinaries:new Map(n.filter(([,,o,s])=>typeof o!="string"&&typeof s=="string").map(([o,s,,i])=>[o,{size:s,digest:i}])),npmEntries:aO(e.npm.manifest,r),risk:()=>ln(e.npm)}}function Ea(e,t="overview",n=null){return e?.npm?{view:"npm",packageName:e.npm.name,packageSpec:e.npm.version,bundleTab:Tl.has(t)?t:"overview",...n}:null}var dO=3,T1=new Map,Bn=new Map,uO=1e4,pO=5*6e4,I1=null;function du(){let e=c.managedSession?`${c.managedSession.id}\0${c.managedSession.role}`:null;return e!==I1&&(T1.clear(),Bn.clear(),I1=e),T1}function A1(e,t){let n=du();for(n.delete(e.name),n.set(e.name,{entry:e,details:t});n.size>dO;)n.delete(n.keys().next().value)}async function B1(e,t,n){let r=du().get(`${e}@${t}`);if(r)return A1(r.entry,r.details),r;let o=await Uk(e,t,n),s=lO(o),i=cO(s,o);return s.npm.private||A1(s,i),fO(o),{entry:s,details:i}}function fO({name:e,version:t,known:n}){if(!n||typeof n!="object")return;let r={stats:e,advisories:e,tags:`${e}@${t}`,socket:`${e}@${t}`,provenance:`${e}@${t}`};for(let[o,s]of Object.entries(r)){let i=`${o}\0${s}`;n[o]&&Bn.get(i)?.status!=="ready"&&Bn.set(i,{status:"known",data:n[o]})}}function Nn(e,t,n,r){du();let o=`${e}\0${t}`,s=Bn.get(o);if(s?.status==="known"){let a={status:"ready",...r(s.data)};return Bn.set(o,a),a}if(s&&!(s.status==="error"&&Date.now()>=s.retryAt))return s;let i={status:"loading",failures:s?.failures??0};return Bn.set(o,i),n().then(a=>({status:"ready",...r(a)}),()=>{let a=i.failures+1,l=Math.min(uO*2**(a-1),pO);return{status:"error",failures:a,wait:l,retryAt:Date.now()+l}}).then(a=>(Bn.get(o)!==i||(Bn.set(o,a),a.status==="error"&&setTimeout(()=>{Bn.get(o)===a&&O()},a.wait).unref?.(),mO()),null)).catch(()=>{}),i}var Ah=!1;function mO(){Ah||(Ah=!0,queueMicrotask(()=>{Ah=!1,O()}))}function uu(e){return Nn("versions",e,()=>Vk(e),t=>({versions:t.versions??[],distTags:t.distTags??{},times:t.times??{},created:typeof t.created=="string"?t.created:null,private:t.private===!0,teamScoped:t.teamScoped===!0}))}function gO(e={}){let t=new Map;for(let[n,r]of Object.entries(e))t.set(r,[...t.get(r)??[],n]);return t}function P1(e,t,n=Date.now()){let r=gO(e.distTags);return(e.versions?.includes(t)?e.versions:[t,...e.versions??[]]).map(s=>{let i=e.times?.[s];return{id:s,detail:r.get(s)?.join(", ")??"",...i&&{date:i.slice(0,10)},...i&&D1(e,i,n)&&{age:Nh(i,n)}}})}function D1(e,t,n=Date.now()){return e.status==="ready"&&kh(t,{minimumReleaseAge:e.teamScoped?0:$h,now:n})}var Eh=new Intl.RelativeTimeFormat("en",{numeric:"auto"});function E1(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/864e5),r=n<60?Eh.format(-n,"day"):n<730?Eh.format(-Math.floor(n/30.44),"month"):Eh.format(-Math.floor(n/365.25),"year");return`${Us(Date.parse(e))} \xB7 ${r}`}var Fh=new Intl.RelativeTimeFormat("en",{numeric:"always"});function Nh(e,t=Date.now()){let n=Math.max(0,Math.floor((t-Date.parse(e))/6e4));return n<60?Fh.format(-n,"minute"):n<1440?Fh.format(-Math.floor(n/60),"hour"):Fh.format(-Math.floor(n/1440),"day")}var Bh=e=>Us(Date.parse(e)),z1=e=>`Published on ${Bh(e)}`;function W1(e){let{name:t,version:n}=e.npm,r=uu(t),o=P1(r,n).map(({id:s,detail:i,date:a,age:l})=>({id:s,name:`${t}@${s}`,displayLabel:s,format:"npm",detail:i,...a&&{date:a},...l&&{dateWarning:l}}));return{noun:"version",base:n,widest:{name:`${t}@10.90.90`,detail:"latest"},pending:r.status==="loading",error:r.status==="error"?`Couldn't list the versions of ${t}.`:null,options:o.filter(s=>s.id!==n),choices:o,name:s=>s===e.integrity||s===n?e.name:`${t}@${s}`,load:async s=>(await B1(t,s)).details,dependencies:wO,openDependency:$O,open:(s,i,a)=>Sr(t,s,"compare",i?{compareSpec:i,...Uo(a)}:{})}}function Sr(e=null,t=null,n="overview",r={}){!R()||!te?.active||te.navigate(e==null?{view:"npm"}:{view:"npm",packageName:e,packageSpec:t,bundleTab:n,...r})}function Lh(e){c.currentView="npm",c.npmLookup=e,c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1})}async function H1(e,t,n){let{packageName:r,packageSpec:o=null,bundleTab:s="overview"}=e;if(r==null)return Lh({input:c.npmLookup?.input??"",pending:!1,error:null}),n(),{view:"npm"};let i=`${r}${o==null?"":`@${o}`}`,a=c.currentView==="bundles"&&c.bundleDetails?.npm,l=a&&c.bundles?.[0]?.npm?.name===r&&c.bundles[0].npm.version===o?c.bundles[0]:null,p=l?c.bundleDetails:null;if(!l){let f=o!=null&&du().has(`${r}@${o}`);!a&&!f&&(Lh({input:i,pending:!0,error:null}),n());try{({entry:l,details:p}=await B1(r,o??"latest",{signal:Le()}))}catch(m){return m?.name==="AbortError"||!t()?!1:(Aa=null,Lh({input:i,pending:!1,error:m.message}),{view:"npm"})}if(!t()||!R())return!1}Aa?.name===r&&Aa.spec===o&&(V1([i,...Ph().filter(f=>f!==i)]),Aa=null),Pt();let d=c.bundleCompare?.bundle===l.integrity?c.bundleCompare:null;return s==="review"&&(c.npmReview={bundle:l.integrity,...e.reviewPackage?{reviewPackage:e.reviewPackage,reviewSpec:e.reviewSpec??null}:{}}),c.bundles=[l],hr(l.integrity,s),s==="code"&&e.file!=null&&(c.bundleCodeFileRequest={bundle:l.integrity,file:e.file,...e.line==null?{}:{line:e.line},...e.endLine==null?{}:{endLine:e.endLine}}),s==="compare"&&e.compareSpec!=null?c.bundleCompare={bundle:l.integrity,target:e.compareSpec,mode:Ml(e.compareMode)}:d&&(c.bundleCompare=d),c.bundleDetails=p,c.npmLookup={input:l.name,pending:!1,error:null},c.currentManagedTeam=null,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),n(),document.querySelector("#main-content")?.scrollTo({top:0}),Ea(l,c.bundleDetailsTab,$r(c))}var hO=10,U1=()=>`deepview.npm.recent.${c.managedSession?.id??"anonymous"}`,Aa=null;function Ph(){try{let e=JSON.parse(localStorage.getItem(U1())??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"&&N1(t)):[]}catch{return[]}}function V1(e){try{localStorage.setItem(U1(),JSON.stringify(e.slice(0,hO)))}catch{}}function bO(e){V1(Ph().filter(t=>t!==e)),O()}function j1(e){let t=N1(e);if(!t){c.npmLookup={input:e??"",pending:!1,error:"Enter a package name, like lodash, @scope/name or name@1.2.3."},O();return}Aa=t,Sr(t.name,t.spec)}function yO(e){e.preventDefault(),j1(e.currentTarget.querySelector('input[name="package"]')?.value)}function G1(){let e=c.npmLookup??{input:"",pending:!1,error:null},t=["admin","manage"].includes(c.managedSession?.role),n=Ph();return u`<section class="npm-lookup" aria-labelledby="npm-lookup-title"><header class="npm-lookup-head"><span class="npm-lookup-icon" aria-hidden="true">${W(Bo)}</span><h1 id="npm-lookup-title">npm packages</h1></header><p class="npm-lookup-intro">Open a published version to read its files, as its tarball has them. ${t?g:"You can open public packages, and private ones in npm scopes your teams list."}</p><form class="npm-lookup-form" @submit="${yO}"><input name="package" type="text" aria-label="Package" autocomplete="off" spellcheck="false" maxlength="500" placeholder="lodash, @scope/name@1.2.3 or an npmjs.com link" .value="${e.input??""}" ?disabled="${e.pending}"> <button type="submit" ?disabled="${e.pending}">Open</button></form><div class="npm-lookup-message"><p class="npm-lookup-status" role="status">${e.pending?`Opening ${e.input}\u2026`:g}</p>${e.error?u`<p class="npm-lookup-error" role="alert">${e.error}</p>`:g}</div>${n.length>0?u`<section class="npm-lookup-recent" aria-labelledby="npm-lookup-recent-title"><h2 id="npm-lookup-recent-title">Recent searches</h2><ul>${n.map(r=>u`<li><button type="button" class="npm-lookup-recent-open" ?disabled="${e.pending}" @click="${()=>j1(r)}">${r}</button> <button type="button" class="npm-lookup-recent-remove" aria-label="${`Remove ${r} from recent searches`}" @click="${()=>bO(r)}">×</button></li>`)}</ul></section>`:g}</section>`}function wO(e,t){let n=Ih(e?.npm?.manifest,t?.npm?.manifest),r=e?.npm&&t?.npm?ln(t.npm,e.npm.version)?.dependencies:null,o=[e?.npm,t?.npm],s=(i,a)=>i.map(l=>({flags:[],...a?.find(({key:p})=>p===l.key),...l}));return{removed:n.removed,added:s(n.added,r?.added).map(i=>({...i,compared:o})),changed:s(n.changed,r?.changed)}}var K1=e=>{let t=ln(e)?.dependencies;return new Map((t?.held??t?.added??[]).map(({key:n,flags:r})=>[n,r]))},q1=({kind:e,name:t})=>`${e??""}\0${t}`,vO=/^(?:[\^~]|=)?v?(\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?)$/u,F1=e=>vO.exec(Vs(e)?.spec??e.trim())?.[1]??null,L1=e=>Vs(e)?.name??null;function $O({opens:e,from:t,to:n}){if(!e)return;let r=n&&F1(n),o=t&&F1(t);!o||!r||o===r||L1(t)!==L1(n)?Sr(e):Sr(e,r,"compare",{compareSpec:o})}function Y1(e){let t=js(e.npm.manifest);if(t.length===0)return g;let n=K1(e.npm);return Ln({title:"Dependencies",count:t.length,list:!0,body:u`<ul class="bundles-sources-list npm-dependency-list">${t.map(r=>{let{name:o,range:s,kind:i,opens:a}=r,l=n.get(q1(r))??[],p=u`<span class="npm-dependency-name"><span class="bundles-source-path" data-tooltip-truncated data-tooltip="${o}">${o}</span>${cu(l)}</span> ${i?u`<span class="npm-dependency-kind">${i}</span>`:g} <span class="bundles-source-size" data-tooltip-truncated data-tooltip="${s}">${s}</span>`;return u`<li>${a?u`<button type="button" class="bundles-source-row npm-dependency-row" data-npm-dependency="${a}" @click="${()=>Sr(a)}">${p}</button>`:u`<div class="bundles-source-row npm-dependency-row is-resource">${p}</div>`}</li>`})}</ul>`})}var kO=[["source","Non-registry",()=>"From elsewhere than npm's registry"],["unimported","Unimported",e=>`Imported by nothing of ${e}`]];function xO(e){let t=K1(e),n=Map.groupBy(js(e.manifest).flatMap(r=>(t.get(q1(r))??[]).map(({check:o})=>({...r,check:o}))),({check:r})=>r);return kO.filter(([r])=>n.has(r)).map(([r,o,s])=>u`<span class="npm-extension is-warn npm-dependency-check" data-tooltip="${`${s(e.version)}: ${n.get(r).map(({name:i,range:a})=>`${i} ${a}`).join(", ")}`}"><span>${o}</span><span class="npm-extension-count">${n.get(r).length}</span></span>`)}function SO(e,t){let{name:n,version:r}=e.npm,o=Nn("tags",`${n}@${r}`,()=>Kk(n,r),s=>({tags:Array.isArray(s.tags)?s.tags.filter(i=>typeof i=="string"&&i):[]}));return o.status!=="ready"||o.tags.length===0?g:u`<span class="bundle-origin-tags">${o.tags.map(s=>u`<a class="bundle-origin-link bundle-tag-link" href="${Qg(t,s)}" target="_blank" rel="noopener noreferrer">${W(ml)}<span>${s}</span></a>`)}</span>`}function Gs(e,t,n=e){let r=n===e||n===`./${e}`?g:`./${e}`;return t?.has(e)?u`<button type="button" class="bundle-entry-point" data-bundle-view-source="${e}" data-tooltip="${r}">${n}</button>`:n}function O1(e,t,n){let r=e.knownAccounts?.includes(t);return u`<a class="${`bundle-origin-link npm-account ${r?"is-known":"is-unknown"}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(t)}`}" data-tooltip="${r?"Publishes one of npm's most downloaded packages":"Unknown publisher"}" target="_blank" rel="noopener noreferrer"><span>${n}</span></a>`}var CO=/^\s*(Package no longer supported\.)\s+Contact Support at https:\/\/www\.npmjs\.com\/support for more info\.\s*$/u,Dh=e=>e.replace(CO,"$1");function zh(e,{prefix:t="",githubFigures:n=g,provenance:r=g,provenanceNamesBuilder:o=!1,files:s=null}={}){let{manifest:i}=e.npm,a=i.github?.github,l=a?jd({repo:{github:a,directory:i.github.directory??"",commit:i.gitHead}})[0]:null,p=uu(e.npm.name),d=e.npm.published??p.times?.[e.npm.version];return u`<dl class="bundles-detail-meta npm-facts">${e.npm.private?u`<dt>Access</dt><dd>Private</dd>`:g} ${i.deprecated?u`<dt>Deprecated</dt><dd class="npm-deprecated">${Dh(i.deprecated)}</dd>`:g} ${i.description?u`<dt>Description</dt><dd>${i.description}</dd>`:g} ${i.license?u`<dt>License</dt><dd>${R1(i.license,[...s??[]]).map(({text:f,file:m})=>Gs(m,s,f))}</dd>`:g} ${i.author?u`<dt>Author</dt><dd class="bundle-origin-row">${i.authorAccount?u`${O1(i,i.authorAccount,i.author)}${i.author===i.authorAccount?g:u`<span class="npm-publisher">~${i.authorAccount}</span>`}`:i.author}</dd>`:g} ${i.publisher&&i.publisher!==i.authorAccount?u`<dt>Publisher</dt><dd class="bundle-origin-row">${O1(i,i.publisher,`~${i.publisher}`)}</dd>`:i.trustedPublisher&&!o?u`<dt>Publisher</dt><dd class="npm-trusted-publisher">${i.trustedPublisher}</dd>`:g} ${d?u`<dt>Published</dt><dd>${D1(p,d)?u`<span class="npm-recent">${E1(d)}</span>`:E1(d)}</dd>`:g} ${l?u`<dt>GitHub</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${l.href}" target="_blank" rel="noopener noreferrer">${W(Yt)}<span>${l.text}</span></a> ${n}</dd><dt>Commit</dt><dd class="bundle-origin-row">${l.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${l.commit.href}" data-tooltip="${l.commit.hash}" data-tooltip-icon="commit" target="_blank" rel="noopener noreferrer">${W(fl)}<span>${l.commit.text}</span></a> ${SO(e,a)}`:u`<span class="npm-commit-missing">Not recorded at publish</span>`}</dd>`:g} ${r===g?g:u`<dt>Provenance</dt><dd class="bundle-origin-row">${r}</dd>`} ${i.homepage&&/^https?:\/\//iu.test(i.homepage)?u`<dt>Homepage</dt><dd><a class="bundle-origin-link" href="${i.homepage}" target="_blank" rel="noopener noreferrer"><span>${i.homepage}</span></a></dd>`:g}<dt>Integrity</dt><dd class="mono bundle-integrity" data-tooltip-truncated data-tooltip="${e.integrity}">${e.integrity}</dd>${t?u`<dt>Prefix</dt><dd class="mono">${t}</dd>`:g}</dl>`}var _O=(e,t)=>e.split(/(\s+)/u).map(n=>{let r=n.replace(/^\.\//u,"");return t?.has(r)?Gs(r,t,n):n});function X1(e,t=null,n=null){let{manifest:r}=e.npm,o=["main","module","types"].filter(d=>typeof r[d]=="string").map(d=>({label:`${d[0].toUpperCase()}${d.slice(1)}`,path:r[d],file:Rh(r[d],t)??Mh(r[d])})),s=o.find(d=>d.label==="Main"),i=o.find(d=>d.label==="Module");s&&i&&s.file===i.file&&(s.label="Main, Module",o.splice(o.indexOf(i),1));let a=Object.keys(r.bin??{}),l=Ra(r,t),p=js(r).length;return u`${o.map(({label:d,path:f,file:m})=>u`<dt>${d}</dt><dd class="mono"><span class="npm-entry-point">${kn(m,Vo(n,m))}${Gs(m,t,f)}</span></dd>`)} ${r.type?u`<dt>Type</dt><dd class="mono">${r.type}</dd>`:g} ${a.length>0?u`<dt>Bin</dt><dd class="mono">${a.join(", ")}</dd>`:g} ${r.engines?u`<dt>Engines</dt><dd class="mono">${Object.entries(r.engines).map(([d,f])=>`${d} ${f}`).join(", ")}</dd>`:g} ${l.length>0||r.hasInstallScript?u`<dt>Install scripts</dt><dd class="npm-install-scripts">${l.length===0?"Yes":l.map(([d,f])=>u`<div class="npm-install-script"><span class="npm-install-script-name">${d}</span><code>${_O(f,t)}</code></div>`)}</dd>`:g}<dt>Dependencies</dt><dd class="npm-dependencies-fact">${su("dependencies",p,p===0?"None":p)}${xO(e.npm)}</dd>`}var Oh=class extends Et{static properties={name:{},version:{},tab:{},list:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.name="",this.version="",this.tab="overview",this.list=null}render(){let t=this.list?.status==="ready"?this.list:{versions:[],distTags:{}},n=P1(t,this.version).map(({id:r,detail:o,date:s,age:i})=>({value:r,label:r,detail:o,secondary:s,...i&&{secondaryWarning:i}}));return u`<bundle-selector .options="${n}" .value="${this.version}" noun="version" versions label="${`Version of ${this.name}`}" placeholder="${this.version}" ?disabled="${n.length<=1}" aria-busy="${this.list?.status==="loading"?"true":g}" @bundle-change="${r=>{r.detail.value!==this.version&&Sr(this.name,r.detail.value,this.tab)}}"></bundle-selector>`}};customElements.get("npm-version-select")||customElements.define("npm-version-select",Oh);var J1=u`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" aria-hidden="true" viewBox="0 75 405 400"><path fill="currentColor" d="m62 447.6 65.8-68.2c2.2-.9 22.7 12 28.2 14.1C295.4 446.8 399.2 263.6 285.1 172 184.3 91.1 41.1 191.5 82 315.6c3.9 12 10.8 21.7 15.4 33.2l-47.1 47C-32 294.9 7.4 142.3 126.3 91.3 241.3 42 374.4 112 398 234.5c29.4 152.7-116.5 274.9-262.7 223.6-15.9-5.6-17-10.6-34.9-10.6H62Z"/><path fill="#e02129" d="M190.1 181.8c128.8-15 141.2 170.8 26 182.6-126.4 12.9-137.9-169.5-26-182.6M209 236c-7.4 5.6-10.8-5.4-13-7.7-9.6-10.3-19.4-.8-14 1.7s9.5-.3 10.1 5.6-9 9.9-7.9 16.4c13.2-5.9 25.9-6.4 39.1 0 3.2-7.1-7.9-12.1-7.8-14.8.1-9.4 11.6-6.2 12.6-7.2 4.3-4.3-8.9-11.7-17.1-.6-1.3 1.8-1.4 6.3-1.9 6.6zm-7.6 14.3c-10.1-1.5-19.3 10-25 11.8s-23.2 1.5-14.9 16.3c3.9.8 5.1-13.1 13.3-9.4 1.9 13.1-2.8 8.7-9 12.2-10 5.7-8.1 20.2-1.3 12.8 2.7-3 1.5-9.6 10.3-7.7 1.3 15.9-.8 8.4-7.9 11.7-11.5 5.3-9 20.2-1.7 14.8s0-10.8 8.6-9.3c1 .2 5.8 10.8 12.4 14.5 13.7 7.9 35 5.5 44.8-7.6s1.6-6.5 1.8-6.7c4-3.1 11.3 4.6 11 9.2l5.5-1.5c2.2-3.1-1.6-8.2-3.9-10.3-7.6-6.8-13.5.9-11-14.8 9-2.6 8.4 8.7 9.4 9.4 6 4.2 8.4-7.8 1.5-13.2-7.4-5.8-13.2 3.6-10.9-13.4 7.4-1.3 8.3 3.2 9.4 9.4 8.3 1.4 6.9-7.2 3.1-11.8-4.5-5.5-10.5-2.6-15.7-4.7-1.3-.5-25.1-18.8-25.1-9.4v52.5c-1.5.6-4.7-1.4-4.7-2.3z"/><ellipse cx="206.6" cy="270" fill="#e02129" rx="74.6" ry="66.5"/><path fill="#fff" d="M200.6 250v55.5s.4 1 .5 1.1c1.1 1.8 3.7 1.8 4.9 0 .1-.2.5-1.1.5-1.3v-55.4a34 34 0 0 1 17.2 5.8c3.1 2.2 5.6 5.1 7.7 8.3 3.8.1 7.6-.5 11.3.8 5.2 1.8 9.6 7.5 9.6 13.1 0 4.2-5.8 5.3-7.3 1.5-.7-1.8-.3-3.2-1.7-5-.8-1-3-2.7-4.3-2.7h-4.5c1.1 4.1.8 8.4.8 12.6.1.1 1.7-.1 2-.1 7.3 0 13.9 6 14.4 13.5.3 5.3-6.3 6-7.5 1.8-.6-2.1-.3-3.5-2-5.3-.8-.9-2.9-2.2-4.2-2.2h-3c.2 1 .2 2.2.1 3.2 0 2.1-.4 4.3-.9 6.4-.2.9-.5 1.8-.7 2.6 5.5-.7 10.5.7 14.1 5 1.7 2 3.4 5.6 3.6 8.3.5 5.4-6.6 6.7-7.8 1.2-.5-2.3-.7-3.8-2.7-5.4-3.1-2.5-7-1.2-10.7-1.4-1.9 3.2-4.5 6.1-7.5 8.4-14.4 10.8-36.9 7.2-46.2-8.4-.4-.2-2.4 0-2.9 0-3.2 0-6-.6-8.4 2.1-1.6 1.8-1.5 3.2-2.1 5.3-1.2 4.5-7.9 3.6-7.7-1.4.3-5.5 4.9-11.3 10.1-13 1.7-.5 5.7-1 7.4-.6.1 0 .1.1.1-.1 0-1.1-.7-2.8-.9-4.1-.4-2.7-.6-5.4-.4-8.1-2.8-.1-5.3.2-7.2 2.5-1.4 1.7-1.3 2.9-1.8 4.9-1.1 4.4-7.9 3.8-7.6-1.5.2-4.1 2.9-8.7 6.3-11 3-2.1 6.5-2.7 10.1-2.6v-5.8c.2-2.2.3-4.5.9-6.6h-4.5c-1.8 0-4.2 2.2-4.9 3.7-1.1 2.3-.4 6-4.1 6.3-3.4.3-4.5-2.3-4.1-5.2.9-6.1 5.1-11 11.3-12.2 3.1-.6 6.2 0 9.3-.4 2.2-3.1 4.8-6 7.9-8.3 4.9-3.5 10.9-5.1 16.8-5.8Z"/><path fill="#fff" d="M197.3 235.1c4.1-.7 8.3-.9 12.4 0 1.1-7.6 7-14.6 15.2-14 3.3.2 5.7 3.1 3.6 6.1-1.5 2-4.1 1-6.2 1.7s-3.7 2.5-4.5 4.4c-.3.7-1.2 3.8-.9 4.3 0 .1 1.3 1 1.6 1.2 3.4 3.1 6.2 7.4 6.6 12 0 .6-.1 1.2.1 1.8-.1.1-2.6-1.5-2.9-1.8-10.5-6-27.5-5.7-37.9.4-.2.1-2.3 1.6-2.4 1.5-.2-5.5 2.8-10.5 6.8-14 .3-.3 1.3-.9 1.5-1.1.1-.1.1-.2.1-.3 0-.5-.3-1.8-.5-2.3-.9-3.3-3-6-6.6-6.3h-2.2c-4.2-.4-4.5-6.5-.2-7.4 2.3-.5 5.2 0 7.3 1 5.2 2.2 8.5 7.4 9.1 12.9Z"/></svg>`;var RO=new Map([["registry",{label:"Source: npm registry",icon:sv}],["repository",{label:"Source: GitHub repository",icon:W(Yt)}],["osv",{label:"Source: OSV",icon:J1}]]);function MO(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function TO(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var pu=u`<svg class="external-link-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 13L13 3"/><path d="M5 3h8v8"/></svg>`;function IO(e){let t=/^CWE-(\d+)$/u.exec(e);if(!t)return u`<span>${e}</span>`;let n=`https://cwe.mitre.org/data/definitions/${t[1]}.html`;return u`<a class="bundle-advisory-cwe" href="${n}" target="_blank" rel="noopener noreferrer">${e}</a>`}function AO(e,t){return u`<div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${e}`}">${MO(e)}</span> ${typeof t=="number"?u`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${t.toFixed(1)}</span></span>`:g}</div>`}function EO(e){let t=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,n=e.ghsa??TO(t)??(typeof e.id=="string"?e.id:null),r=RO.get(e.source);return!r&&!(n&&t)?g:u`<span class="bundle-advisory-reference">${r?u`<span class="bundle-advisory-source" role="img" aria-label="${r.label}">${r.icon}</span>`:g} ${n&&t?u`<a class="bundle-advisory-ghsa" href="${t}" target="_blank" rel="noopener noreferrer">${n}${pu}</a>`:g}</span>`}function FO(e){let t=Array.isArray(e)?e.filter(n=>typeof n=="string"):[];return t.length>0?u`<span class="bundle-advisory-cwes">${t.map((n,r)=>u`${r===0?"":", "}${IO(n)}`)}</span>`:g}function fu(e,t=null){let n=typeof e.cvss?.vectorString=="string"?e.cvss.vectorString:"",r=typeof e.vulnerable_versions=="string"?e.vulnerable_versions:null,o=Array.isArray(e.versions)?e.versions.filter(s=>typeof s=="string"):[];return u`<li class="bundle-advisory-row">${AO(e.severity,e.cvss?.score)}<div class="bundle-advisory-body"><div class="bundle-advisory-header">${t&&typeof e.details=="string"&&e.details.trim()?u`<button type="button" class="bundle-advisory-title" aria-haspopup="dialog" @click="${()=>t(e)}">${e.title}</button>`:u`<span class="bundle-advisory-title">${e.title}</span>`} ${EO(e)}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${e.informational?u`<span>${e.informational}</span>`:g} ${r?u`<span>Affected <span class="mono">${r}</span></span>`:g} ${o.length>0?u`<span>Matches <span class="mono">${o.join(", ")}</span></span>`:g} ${FO(e.cwe)}</div>${n?u`<div class="bundle-advisory-cvss-vector mono">${n}</div>`:g}</div></div></li>`}function Wh(e){if(typeof e!="string")throw new TypeError(`a text must be a string, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a text must be a well-formed string");return{proven:!1,reason:"unsupported",at:null}}var LO=e=>e.subarray(0,8e3).includes(0),Z1=(e,t)=>(e+Math.imul(t,97)>>>0)%107927,Q1=e=>Uint8Array.from({length:256},(t,n)=>Number(n===10||e.includes(String.fromCodePoint(n)))),OO=Q1(""),eC=Q1(",;={}");function Hh(e,t=OO){let n=!LO(e),r=new Map,o=(p,d)=>r.set(p,(r.get(p)??0)+d),s=0,i=0,a=0;for(let p=0;p<e.length;p++){let d=e[p];if(n&&d===13&&e[p+1]===10)continue;let f=s;s=(s<<7^i>>>25)+d>>>0,i=(i<<7^f>>>25)>>>0,!(++a<64&&t[d]===0)&&(o(Z1(s,i),a),a=0,s=0,i=0)}a>0&&o(Z1(s,i),a);let l=Uint32Array.from(r.keys()).sort();return{hashes:l,bytes:Float64Array.from(l,p=>r.get(p)),total:r.values().reduce((p,d)=>p+d,0)}}function NO(e,t){let n=0;for(let r=0,o=0;r<e.hashes.length&&o<t.hashes.length;)e.hashes[r]<t.hashes[o]?r++:e.hashes[r]>t.hashes[o]?o++:n+=Math.min(e.bytes[r++],t.bytes[o++]);return n}function BO(e,t,n){let r=0,o=e.total,s=t.total;for(let i=0,a=0;i<e.hashes.length&&a<t.hashes.length;)if(e.hashes[i]<t.hashes[a]?o-=e.bytes[i++]:(e.hashes[i]>t.hashes[a]||(r+=Math.min(e.bytes[i],t.bytes[a]),o-=e.bytes[i++]),s-=t.bytes[a++]),(r+Math.min(o,s))*6e4<n)return 0;return r}function Uh(e,t,n,r,o=!1){if(e===null||t===null||t.length===0)return 0;let s=Math.abs(e.length-t.length),i=Math.max(e.length,t.length);if(i*(6e4-n)<s*6e4)return 0;let a=r(e),l=r(t),p=o?BO(a,l,n*i):NO(a,l);return Math.trunc(p*6e4/i)}var tC=/^[\w-]{6,}$/u,nC=/[\dA-Z]/u;function PO(e){let t=e.lastIndexOf("/"),n=e.slice(t+1),r=n.lastIndexOf("."),o=r>0?n.slice(r):"";return{name:n,key:`${e.slice(0,t+1)}\0${o}\0${n.length}`}}function DO(e,t){let n=e.length,r=0;for(;r<e.length&&e[r]===t[r];)r++;for(;n>r&&e[n-1]===t[n-1];)n--;for(;r>0&&!"-._".includes(e[r-1]);)r--;for(;n<e.length&&e[n]!==".";)n++;let o=e.slice(r,n),s=t.slice(r,n);return r>0&&tC.test(o)&&tC.test(s)&&(nC.test(o)||nC.test(s))}function rC({sources:e,dests:t,pairs:n,used:r,record:o,punctuatedScoreOf:s},{remaining:i,open:a},l,p){let d=($,k)=>new Map(k.filter(S=>$[S].type==="file").map(S=>[S,PO($[S].path)])),f=d(t,a),m=d(e,i),h=Map.groupBy(m.keys(),$=>m.get($).key),b=Map.groupBy(f.keys(),$=>f.get($).key),y=[];for(let[$,k]of b){let S=h.get($)??[];for(let C of k)for(let _ of S){if(!DO(m.get(_).name,f.get(C).name))continue;let L=s(_,C,l);L>=l&&y.push({s:_,d:C,score:L})}}let w=[],v=new Set,x=new Set;for(let $ of y.sort((k,S)=>S.score-k.score))n.has($.d)||r.has($.s)||(x.has($.s)||v.has($.d)||p($)?(w.push($),x.add($.s),v.add($.d)):o($.d,$.s,$.score));return w}function oC(e,t){let n=e.length;if(n!==t.length)return!1;let r=0;if(n>=32&&(e.byteOffset&3)===(t.byteOffset&3)){for(let a=4-(e.byteOffset&3)&3;r<a;r++)if(e[r]!==t[r])return!1;let o=n-r>>>2,s=new Int32Array(e.buffer,e.byteOffset+r,o),i=new Int32Array(t.buffer,t.byteOffset+r,o);for(let a=0;a<o;a++)if(s[a]!==i[a])return!1;r+=o*4}for(;r<n;r++)if(e[r]!==t[r])return!1;return!0}var ht=class extends Error{constructor(t,n,r){let o=r===void 0?"":` in the ${r} tree`;super(n===void 0?t:`${t}: ${JSON.stringify(n)}${o}`),this.name="CompareError",this.path=n,this.tree=r}};var zO=new Set(["file","contiguous-file"]),WO=new Set(["fifo","character-device","block-device"]),HO=/(?:^|\/)\.{0,2}(?:\/|$)/u;function UO(e){if(!Number.isInteger(e)||e<0||e>4095)throw new RangeError(`a mode must be an integer from 0 to 0o7777, not ${e}`)}function VO(e,t,n,r){if(typeof e!="string")throw new TypeError(`an entry's name must be a string, not ${typeof e}`);if(!(e==="."&&t==="directory")){if(r?e==="":HO.test(e))throw new ht(r?"a name must not be empty":"a name must be a relative path with no empty, `.` or `..` segment",e,n);if(!e.isWellFormed())throw new ht("a name must be well-formed Unicode",e,n)}}function jO(e,t,n){if(typeof e!="string"||e==="")throw new ht("a link must name its target",t,n);if(!e.isWellFormed())throw new ht("a link target must be well-formed Unicode",t,n);return e}function GO(e){if(e===void 0)return new Uint8Array(0);if(e instanceof Uint8Array)return e;if(typeof e!="string")throw new TypeError(`a file's data must be a string or a Uint8Array, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a file's text must be well-formed Unicode");return e}var mu=e=>typeof e=="string"?p$(e):e;function KO(e,t,n){if(typeof e!="object"||e===null)throw new TypeError(`an entry must be an object, not ${e===null?"null":typeof e}`);let{name:r,type:o="file",mode:s,linkname:i,data:a}=e;if(VO(r,o,t,n),s!==void 0&&UO(s),zO.has(o))return{path:r,type:"file",mode:s??420,data:GO(a)};if(o==="symlink"||o==="hardlink")return{path:r,type:o,target:jO(i,r,t)};if(o==="directory")return{path:r,type:o};throw WO.has(o)?new ht(`a ${o} is neither a file nor a link`,r,t):new TypeError(`${JSON.stringify(o)} is not an entry type`)}function Fa(e,t){return e.type!==t.type?!1:e.type==="symlink"?e.target===t.target:e.data===t.data?!0:typeof e.data=="string"&&typeof t.data=="string"?!1:oC(mu(e.data),mu(t.data))}function qO(e,t,n){let r=new Set([e.path]),o=t.get(e.target);for(;o?.type==="hardlink";){if(r.has(o.path))throw new ht("a hard link leads back to itself",e.path,n);r.add(o.path),o=t.get(o.target)}if(o===void 0||o.type==="directory")throw new ht("a hard link must name a file or a link in the tree",e.path,n);return{...o,path:e.path}}function Vh(e,t,n){let r=new Map;for(let s of e){let i=KO(s,t,n);if(!(i.type==="directory"&&i.path===".")){if(r.has(i.path))throw new ht("a name is given twice",i.path,t);r.set(i.path,i)}}let o=new Map;for(let[s,i]of r){for(let a=n?-1:s.lastIndexOf("/");a>0;a=s.lastIndexOf("/",a-1)){let l=r.get(s.slice(0,a));if(l!==void 0&&l.type!=="directory")throw new ht(`a path lies under a ${l.type==="symlink"?"link":"file"}`,s,t)}i.type==="hardlink"?o.set(s,qO(i,r,t)):i.type!=="directory"&&o.set(s,i)}return o}var YO=100,XO=4,sC=e=>e.slice(e.lastIndexOf("/")+1);function iC(e,t){if(e.type==="symlink")return`l${e.target}`;let n=t(e);return`f${n.length}:${m$(n)}`}function JO({sources:e,dests:t,sourceNames:n,destNames:r,used:o,record:s,bytes:i}){let a=Map.groupBy(e.keys(),l=>iC(e[l],i));for(let l=0;l<t.length;l++){let p=-1,d=YO;for(let f of a.get(iC(t[l],i))??[])if(!(o.has(f)||!Fa(e[f],t[l]))&&((p===-1||n[f]===r[l])&&(p=f),n[f]===r[l]||--d===0))break;p!==-1&&s(l,p,6e4)}}var ZO=new Map([[".ts",".js"],[".mts",".mjs"],[".cts",".cjs"],[".tsx",".jsx"]]),QO=new Map([...[".js",".mjs",".cjs",".jsx",".ts",".mts",".cts",".tsx"].map(e=>[e,"script"]),...[".css",".scss",".sass",".less"].map(e=>[e,"style"])]);function dC(e){let t=e.split("/"),n=t.pop(),r=n.lastIndexOf(".");return r>0?{dirs:t,stem:n.slice(0,r),extension:n.slice(r)}:{dirs:t,stem:n,extension:""}}function aC(e){let{dirs:t,stem:n,extension:r}=dC(e);return JSON.stringify([t.map(o=>o==="lib"||o==="src"?null:o),n,ZO.get(r)??r])}function eN(e){let{dirs:t,stem:n,extension:r}=dC(e),o=[n,QO.get(r)??r],s=t.lastIndexOf("node_modules"),i=s===-1?0:s+(t[s+1]?.startsWith("@")?3:2),a=[JSON.stringify([...o,t])];for(let l=i;l<t.length;l++)a.push(JSON.stringify([...o,t.toSpliced(l,1,null)]));return a}var uC=(e,t)=>Math.max(t,e+Math.trunc((6e4-e)/2));function Gh({pairs:e,used:t,scoreOf:n},{remaining:r,open:o},{s,d:i,score:a},l){let p=uC(a,l);return o.some(d=>d!==i&&!e.has(d)&&n(s,d,p)>=p)||r.some(d=>d!==s&&!t.has(d)&&n(d,i,p)>=p)}function tN(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=Map.groupBy(t.remaining.filter(m=>o[m].type==="file"),m=>aC(o[m].path)),f=t.open.filter(m=>s[m].type==="file").flatMap(m=>(d.get(aC(s[m].path))??[]).map(h=>({s:h,d:m,score:p(h,m,0)})));for(let m of f.sort((h,b)=>b.score-h.score))!i.has(m.d)&&!a.has(m.s)&&!(n&&Gh(e,t,m,r))&&l(m.d,m.s,m.score)}function nN(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=new Map,f=(y,w,v)=>new Map(w.filter(x=>y[x].type==="file").map(x=>{let $=eN(y[x].path);for(let k of $)(d.get(k)??d.set(k,{sources:[],dests:[]}).get(k))[v].push(x);return[x,$]})),m=f(s,t.open.filter(y=>!i.has(y)),"dests"),h=f(o,t.remaining.filter(y=>!a.has(y)),"sources"),b=(y,w)=>{let v=new Set(y.flatMap(x=>d.get(x)[w]));return v.size===1?[...v][0]:-1};for(let[y,w]of h){let v=b(w,"dests");if(v===-1||b(m.get(v),"sources")!==y)continue;let x={s:y,d:v,score:p(y,v,0)};n&&Gh(e,t,x,r)||l(v,y,x.score)}}function rN(e,t,n){let r=gu(e),o=t<6e4&&r.remaining.length*r.open.length<=n*n;tN(e,r,o,t),nN(e,r,o,t)}function lC(e,t){let n=new Map;for(let r of t)n.set(e[r],n.has(e[r])?-1:r);return n}function oN({sourceNames:e,destNames:t,record:n,scoreOf:r},{remaining:o,open:s},i){let a=lC(t,s),l=lC(e,o);for(let p of o){let d=a.get(e[p]);if(d===void 0||d===-1||l.get(e[p])===-1)continue;let f=r(p,d,i);f>=i&&n(d,p,f)}}var jh=(e,t)=>t.score-e.score||t.nameScore-e.nameScore;function sN(e,t){if(e.length<XO){e.push(t);return}let n=0;for(let r=1;r<e.length;r++)jh(e[r],e[n])>0&&(n=r);jh(e[n],t)>0&&(e[n]=t)}function iN({sourceNames:e,destNames:t,pairs:n,used:r,record:o,scoreOf:s},{remaining:i,open:a},l,p){let d=[];for(let h of a){let b=[];for(let y of i)sN(b,{score:s(y,h,l),nameScore:e[y]===t[h]?1:0,dst:h,src:y});d.push(...b)}let f=0,m=h=>{for(;f<p.length&&uC(p[f].score,l)>h;f++){let{s:b,d:y,score:w}=p[f];!n.has(y)&&!r.has(b)&&o(y,b,w)}};for(let{dst:h,src:b,score:y}of d.sort(jh)){if(y<l)break;m(y),!n.has(h)&&!r.has(b)&&o(h,b,y)}m(-1/0)}var gu=({sources:e,dests:t,pairs:n,used:r})=>({remaining:e.keys().filter(o=>!r.has(o)).toArray(),open:t.keys().filter(o=>!n.has(o)).toArray()}),cC=e=>e+Math.trunc(.5*(6e4-e));function Kh(e,t,{minimum:n,limit:r,byPath:o}){let s=new Map,i=new Set;if(e.length===0||t.length===0)return s;let a=new Map,l=new Map,p=new Map,d=w=>w.type==="file"?l.get(w)??l.set(w,mu(w.data)).get(w):null,f=w=>a.get(w)??a.set(w,Hh(w)).get(w),m=w=>p.get(w)??p.set(w,Hh(w,eC)).get(w),h={sources:e,dests:t,pairs:s,used:i,sourceNames:e.map(w=>sC(w.path)),destNames:t.map(w=>sC(w.path)),record(w,v,x){s.set(w,{source:v,score:x}),i.add(v)},bytes:d,scoreOf:(w,v,x)=>Uh(d(e[w]),d(t[v]),x,f),punctuatedScoreOf:(w,v,x)=>Uh(d(e[w]),d(t[v]),x,m,!0)};if(JO(h),o&&rN(h,n,r),n>=6e4)return s;oN(h,gu(h),cC(n));let b=gu(h);if(b.remaining.length*b.open.length>r*r)return s;let y=o?rC(h,b,cC(n),w=>Gh(h,b,w,n)):[];return iN(h,gu(h),n,y),s}function La(e){if(e===null)return"";let t=e.type==="symlink"?e.target:e.data;if(typeof t=="string")return t.includes("\0")?void 0:t;if(!t.includes(0))try{return f$(t)}catch{return}}var aN=new Set(["none","all","change","trailing"]);function Oa({horizon:e=1/0,whitespace:t="none",ignoreCase:n=!1}={}){if(e!==1/0&&!(Number.isSafeInteger(e)&&e>=0))throw new RangeError(`horizon must be a whole number or Infinity, not ${e}`);if(!aN.has(t))throw new RangeError(`whitespace must be 'none', 'all', 'change' or 'trailing', not ${t}`);if(typeof n!="boolean")throw new TypeError(`ignoreCase must be a boolean, not ${typeof n}`);return{horizon:e,whitespace:t,ignoreCase:n}}var hu=e=>e.reduce((t,{a0:n,a1:r,b0:o,b1:s})=>t+r-n+s-o,0),pC=e=>e===""?[]:e.split(/(?<=\n)/u),lN=e=>({...e,ignoreCase:!1,whitespace:"none"}),cN=e=>(e.whitespace??"none")!=="none"||!!e.ignoreCase;function dN(e,t,n,r,o){let s=pC(e),i=pC(t),a=(f,m,h,b)=>({a0:f,a1:m,b0:h,b1:b,remove:s.slice(f,m),insert:i.slice(h,b)}),l=o.flatMap(({a0:f,a1:m,b0:h,b1:b})=>f===m||h===b?[a(f,m,h,b)]:tc(s.slice(f,m).join(""),i.slice(h,b).join(""),n).map(y=>a(f+y.a0,f+y.a1,h+y.b0,h+y.b1))),p=f=>{try{return _i(e,t,f,{format:"normal",ignoreCase:n.ignoreCase,whitespace:n.whitespace}),!0}catch(m){if(m instanceof ec)return!1;throw m}},d=hu(l)<hu(r)&&p(l)?l:r;return hu(d)<hu(o)?d:o}function fC(e,t,n){let r=tc(e,t,n);return cN(n)?dN(e,t,n,r,tc(e,t,lN(n))):r}function mC(e,t,n){let r=La(e),o=La(t);if(r===void 0||o===void 0)return{binary:!0,blocks:[],insertions:null,deletions:null};let s=r===o?[]:fC(r,o,n),i=(a,l)=>s.reduce((p,d)=>p+d[l]-d[a],0);return{binary:!1,blocks:s,insertions:i("b0","b1"),deletions:i("a0","a1")}}var uN=50,pN=1e3;function qh(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r++)if(e[r]!==t[r])return e.codePointAt(r)-t.codePointAt(r);return e.length-t.length}function fN(e){if(e===!1)return null;let t=e===!0?uN:e;if(typeof t!="number")throw new TypeError(`renames must be a boolean or a percentage, not ${typeof e}`);if(!(t>0&&t<=100))throw new RangeError(`renames must be a percentage above 0 and at most 100, not ${e}`);return Math.max(1,Math.trunc(6e4*t/100))}function mN({renamesByPath:e,renameLimit:t,renameGroup:n,paths:r,lines:o}){if(typeof e!="boolean")throw new TypeError(`renamesByPath must be a boolean, not ${typeof e}`);if(t!==1/0&&!(Number.isSafeInteger(t)&&t>=0))throw new RangeError(`renameLimit must be a whole number or Infinity, not ${t}`);if(n!==null&&typeof n!="function")throw new TypeError(`renameGroup must be a function, not ${typeof n}`);if(r!=="tree"&&r!=="keys")throw new RangeError(`paths must be 'tree' or 'keys', not ${r}`);if(typeof o!="boolean")throw new TypeError(`lines must be a boolean, not ${typeof o}`)}var gN=(e,t)=>Fa(e,t)&&(e.type!=="file"||e.mode===t.mode),Na=(e,t,n,r=null)=>({status:e,old:t,new:n,similarity:r}),hN=/\.d\.(?:[^./]+\.)?[cm]?ts$/u,gC=e=>e.endsWith(".mts")?"module":e.endsWith(".cts")?"commonjs":null,bN=/^export\s*\{\s*\}\s*;?$/u;function hC(e){if(e===null)return{proven:!0,runtime:"",loads:!1};let t=La(e);try{return t===void 0?{proven:!1}:Wh(t)}catch{return{proven:!1}}}function yN(e){if(![e.old,e.new].filter(o=>o!==null).every(o=>o.type==="file"&&hN.test(o.path))||e.old&&e.new&&e.old.mode!==e.new.mode)return e;let n=hC(e.new),r=hC(e.old);return!r.proven||!n.proven||r.runtime!==n.runtime&&!(e.old===null&&bN.test(n.runtime))||r.loads&&e.old&&e.new&&e.old.path!==e.new.path&&gC(e.old.path)!==gC(e.new.path)?e:{...e,typeOnly:!0}}function wN(e,t){let n=[],r=[],o=[];for(let[s,i]of e){let a=t.get(s);a===void 0?o.push(i):a.type!==i.type?r.push(Na("type-changed",i,a)):gN(i,a)||r.push(Na("modified",i,a))}for(let[s,i]of t)e.has(s)||n.push(i);return o.sort((s,i)=>qh(s.path,i.path)),n.sort((s,i)=>qh(s.path,i.path)),{changes:r,deleted:o,added:n}}function vN(e,t,{group:n,...r}){if(n===null)return Kh(e,t,r);let o=new Map,s=a=>Map.groupBy(a.keys(),l=>n(a[l].path)),i=s(e);for(let[a,l]of s(t)){let p=i.get(a);if(p!==void 0)for(let[d,{source:f,score:m}]of Kh(p.map(h=>e[h]),l.map(h=>t[h]),r))o.set(l[d],{source:p[f],score:m})}return o}function Yh(e,t,{renames:n=!0,renamesByPath:r=!0,renameLimit:o=pN,renameGroup:s=null,paths:i="tree",lines:a=!0,horizon:l,whitespace:p,ignoreCase:d}={}){let f=fN(n);mN({renamesByPath:r,renameLimit:o,renameGroup:s,paths:i,lines:a});let m=Oa({horizon:l,whitespace:p,ignoreCase:d}),h=i==="keys",{changes:b,deleted:y,added:w}=wN(Vh(e,"old",h),Vh(t,"new",h)),v=f===null?new Map:vN(y,w,{minimum:f,limit:o,byPath:r,group:s});for(let[$,k]of w.entries()){let S=v.get($);b.push(S===void 0?Na("added",null,k):Na("renamed",y[S.source],k,Math.trunc(S.score*100/6e4)))}let x=new Set(v.values().map(({source:$})=>$));for(let[$,k]of y.entries())x.has($)||b.push(Na("deleted",k,null));return b.sort(($,k)=>qh(($.new??$.old).path,(k.new??k.old).path)),(a?b.map($=>({...$,...mC($.old,$.new,m)})):b).map(yN)}var bu=(e,{lo:t,start:n},r)=>e[n+(r-t)/2];function bC(e,t,{low:n,high:r},o,s){return e===-t||e-1<n||e!==t&&e+1<=r&&bu(o,s,e-1)<bu(o,s,e+1)?e+1:e-1}function $N(e,t,n,{first:r,n:o,m:s,d:i,...a}){e.a.fill(1,0,r).fill(1,o),e.b.fill(1,0,r).fill(1,s);let l=o,p=s;for(let d=i;d>0;d--){let f=l-p,m=bC(f,d,a,t,n[d]),h=bu(t,n[d],m);for(let b=m>f?h:h+1;b<l;b++)e.a[b]=e.b[b-f]=1;l=h,p=l-m}for(let d=r;d<l;d++)e.a[d]=e.b[d]=1}function yC(e,t,n){let r=0,o=t.length,s=e.length,i=2*(s+o);for(;r<s&&r<o&&e[r]===t[r];)r++;for(;s>r&&o>r&&e[s-1]===t[o-1];)s--,o--;let a={high:s-r,low:r-o},l=[r],p=[{lo:1,start:0}];for(let d=0;d<=a.high-a.low;d++){let f=p[d],m=Math.min(d,a.high),h=Math.max(-d,a.low+(a.low+d&1));p.push({lo:h,start:l.length});for(let b=h;b<=m;b+=2){let y=bC(b,d,a,l,f),w=bu(l,f,y),v=y>b?w:w+1,x=v;for(;v<s&&v-b<o&&e[v]===t[v-b];)v++;if(i+=2+v-x,l.push(v),v>=s&&v-b>=o)return $N(n,l,p,{first:r,n:s,m:o,d,...a}),i}}throw new Error("no edit script between two lines")}var kN=/[\p{L}\p{N}_$]+|\s+|[^\p{L}\p{N}_$\s]/gu,xN=2e3,SN=800,wu=.6;function yu(e,t){if(e.length>xN)return null;let n=e.match(kN)??[];return n.length>SN?null:{line:e,tokens:n,words:n.map(r=>(t.has(r)||t.set(r,t.size),t.get(r)))}}function wC({tokens:e,line:t},n){let r=[];for(let o=0,s=0;s<e.length;o+=e[s++].length){if(n[s])continue;let i=r.at(-1);i&&/^\s*$/u.test(t.slice(i[1],o))?i[1]=o+e[s].length:r.push([o,o+e[s].length])}return r}var vC=(e,t)=>e.reduce((n,[r,o])=>n+o-r,0)/Math.max(1,t.length);function Xh(e,t){let n={a:e.words.map(()=>0),b:t.words.map(()=>0)},r=yC(e.words,t.words,n),o={a:wC(e,n.a),b:wC(t,n.b)};return{ranges:o,share:n.a.includes(1)?Math.min(vC(o.a,e.line),vC(o.b,t.line)):1,steps:r}}function CN(e,t){if(e===t)return{a:[],b:[]};let n=new Map,r=yu(e,n),o=yu(t,n);if(r===null||o===null)return null;let{ranges:s,share:i}=Xh(r,o);return i<=wu?s:null}var $C=200,_N=5e6,RN=6,MN=60,TN=3;function IN(e){let t=new Map;for(let n of e?.tokens??[])t.set(n,(t.get(n)??0)+1);return t}function AN(e,t){let n=new Map,r=[e,t].map(f=>f.map(m=>yu(m,n))),o=r.map(f=>f.map(IN)),s=0,i=(f,m,h)=>{let b=0;for(let[y,w]of f)if(s+=TN,(b+=y.length*Math.max(0,w-(m.get(y)??0)))>wu*h.length)return 1/0;return b/Math.max(1,h.length)},a=(f,m)=>r[0][f]===null||r[1][m]===null?1/0:Math.min(i(o[0][f],o[1][m],e[f]),i(o[1][m],o[0][f],t[m])),l=(f,m)=>{if(s+=MN,a(f,m)===1/0)return 1/0;let{share:h,steps:b}=Xh(r[0][f],r[1][m]);return s+=b,h<=wu?h:1/0},p=new Float64Array(e.length*t.length).fill(Number.NaN);return{share:(f,m)=>{let h=f*t.length+m;return Number.isNaN(p[h])&&(p[h]=e[f]===t[m]?0:l(f,m)),p[h]},floor:a,spent:()=>s}}function EN(e,t,{share:n,spent:r}){let o=Array.from({length:e+1},()=>new Float64Array(t+1)),s=(a,l)=>n(a,l)===1/0?-1/0:1e3-n(a,l)+o[a][l];for(let a=0;a<e;a++)for(let l=0;l<t;l++)if(o[a+1][l+1]=Math.max(o[a][l+1],o[a+1][l],s(a,l)),r()>_N)return null;let i=[];for(let a=e,l=t;a>0&&l>0;)o[a][l]===o[a][l-1]?l--:o[a][l]===o[a-1][l]?a--:i.push([--a,--l]);return i.toReversed()}function FN(e,t,{share:n,floor:r}){let o=[];for(let s=0,i=0;s<e&&i<t;s++){let a=null,l=1/0,p=Array.from({length:Math.min(t,i+RN)-i},(d,f)=>[i+f,r(s,i+f)]);for(let[d,f]of p.toSorted((m,h)=>m[1]-h[1]||m[0]-h[0])){if(f>l)break;(n(s,d)<l||n(s,d)===l&&d<a)&&([a,l]=[d,n(s,d)])}a!==null&&(o.push([s,a]),i=a+1)}return o}function LN(e,t){if(e.length>$C||t.length>$C)return[];let n=AN(e,t);return EN(e.length,t.length,n)??FN(e.length,t.length,n)}function kC(e,t,n,r){let{whitespace:o,ignoreCase:s}=Oa(r);try{return _i(e,t,n,{format:"normal",whitespace:o,ignoreCase:s}),!0}catch(i){if(i instanceof ec)return!1;throw i}}var xC=/[ \t\n\v\f\r]/u,SC=e=>{let t=e.split(`
|
|
145
|
+
`);return t.at(-1)===""&&t.pop(),t};function ON(e,t){for(let n=0,r=0;;n++,r++){let o="",s="";for(;n<e.length&&xC.test(e[n]);)o+=e[n++];for(;r<t.length&&xC.test(t[r]);)s+=t[r++];if(o!==s&&new Set(o+s).size>1)return!0;if(n>=e.length||r>=t.length)return!1}}function NN(e,t,n){try{if(!kC(e,t,n,{whitespace:"all"}))return!0}catch{return!0}let r=SC(e),o=SC(t),s=0,i=0;for(let a=0;a<=n.length;a++){let l=a<n.length?n[a].a0:r.length;for(;s<l;s++,i++)if(r[s]!==o[i]&&ON(r[s],o[i]))return!0;a<n.length&&({a1:s,b1:i}=n[a])}return!1}function BN(e,t,{extension:n=!0}={}){let r=e.split("/"),o=t.split("/"),s=0;for(;s<r.length-1&&s<o.length-1&&r[s]===o[s];)s++;let i=0;for(;i<r.length-s-1&&i<o.length-s-1&&r.at(-1-i)===o.at(-1-i);)i++;let a={head:s?`${r.slice(0,s).join("/")}/`:"",from:r.slice(s,r.length-i).join("/"),to:o.slice(s,o.length-i).join("/"),tail:i?`/${r.slice(-i).join("/")}`:""},l=a.from.lastIndexOf(".");return n&&!a.from.includes("/")&&!a.to.includes("/")&&l>0&&a.to.lastIndexOf(".")===l&&a.from.slice(0,l)===a.to.slice(0,l)?{...a,head:a.head+a.from.slice(0,l),from:a.from.slice(l),to:a.to.slice(l)}:a}function Jh(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}var CC=(e,t)=>`${"../".repeat(e.base.split("/").length-1)}${t}`;function Zh(e,t,n){let r=new Map,o=new Set,s=0;for(let a of e){let l=Jh(n,a);l===null||!t.has(l)||(r.set(a,l),o.add(l),l!==a&&s++)}for(let a of e)r.has(a)||!t.has(a)||o.has(a)||(r.set(a,a),o.add(a));let i=r.size;for(let a of e){if(r.has(a))continue;let l=Jh(n,a)??CC(n,a);for(;t.has(l)||o.has(l);)l=`../${l}`;r.set(a,l),o.add(l)}return{paths:r,paired:i,moved:s}}function PN(e,t){let n=new Set(e),r=new Set(t),o=(a,l)=>{let p=new Map;for(let m of a)for(let h=m.indexOf("/");h!==-1;h=m.indexOf("/",h+1))l.has(m.slice(h+1))&&p.set(m.slice(0,h+1),(p.get(m.slice(0,h+1))??0)+1);let d=null,f=!1;for(let[m,h]of p)h>(p.get(d)??0)?[d,f]=[m,!1]:h===p.get(d)&&(f=!0);return f?null:d},s=Zh(n,r,null).paired,i=[[{base:"",other:o(r,n)},n],[{base:o(n,r),other:""},r]].filter(([a])=>a.base!==null&&a.other!==null).map(([a,l])=>({root:a,side:l,...Zh(n,r,a)})).filter(({side:a,paired:l,moved:p})=>l>s&&p*2>=a.size);return i.length===2&&i[0].paired===i[1].paired?null:i.toSorted((a,l)=>l.paired-a.paired)[0]?.root??null}function Qh(e,t){let n=[...e],r=new Set(t),o=PN(n,r);return{root:o,paths:Zh(n,r,o).paths}}function _C({root:e,paths:t},n,r){if(!e||n===".")return n;for(let s of r){let i=t.get(`${n}/${s}`);if(i?.endsWith(`/${s}`))return i.slice(0,-s.length-1)}let o=Jh(e,`${n}/`);return o===null?CC(e,n):o.slice(0,-1)||"."}function DN(e,t,n){if(!e&&!t)return null;let r=Map.groupBy([...e??[]],([,s])=>s),o=new Map([...r].map(([s,i])=>[s,_C(n,s,i.map(([a])=>a.slice(s.length+1)))]));return new Map([...[...e??[]].map(([s,i])=>[n.paths.get(s)??s,o.get(i)]),...t??[]])}function zN(e,t){if(!e)return{prefix:t,from:null,to:null};let n=t.startsWith(e.other)?t:"";return{prefix:n,from:`./${e.base}${n.slice(e.other.length)}`,to:`./${n||e.other}`}}function j7(...e){let t=new Set;for(let r of e){let o=we(r);for(let[s,i]of Object.entries(r?.bundle?.reason??{}))Array.isArray(i)&&i.some(a=>o.has(a))&&t.add(s)}let n=r=>e.some(o=>{if(o?.kind!=="stasis")return!1;let s=we(o),i=o?.bundle?.reason?.[r];return new Set(Array.isArray(i)?i.filter(a=>s.has(a)):[]).size<s.size});return[...t].some(n)?[...t].toSorted().map(r=>({id:`reason:${r}`,label:r})):[]}function WN(e,t=""){let n=we(e);if(!t||e?.kind!=="stasis")return n;let r=e?.bundle?.reason?.[t.replace(/^reason:/u,"")],o=new Set(Array.isArray(r)?r:[]);return new Map([...n].filter(([s])=>o.has(s)))}function eb(e,t,n,r){return JSON.stringify([e,t,n,r])}function G7(e,t=""){let n=new Map;if(e?.kind!=="stasis"||!e.bundle)return n;let r=t?we(e):null,o=t?WN(e,t):null;for(let[s,i]of e.bundle.imports)for(let[a,l]of i)for(let[p,d]of l){let f=typeof d=="string"?[[null,d]]:d;for(let[m,h]of f){if(o&&!o.has(a)&&(r.has(a)||!o.has(h)))continue;let b=eb(a,p,s,m);n.set(b,{key:b,parent:a,specifier:p,conditions:s,platform:m,target:h})}}return n}function J7(e,t,n=new Map,r=new Map,o=null){let s=a=>{let l=n.get(a)??r.get(a);return l===void 0?[...new Set([a,GN(o,a)??a])]:[l]},i=[];for(let a of e.values()){let l=s(a.parent).map(p=>t.get(eb(p,a.specifier,a.conditions,a.platform))).find(Boolean);if(l&&!s(a.target).includes(l.target)){let{target:p,...d}=l;i.push({...d,baseTarget:r.get(a.target)??a.target,otherTarget:p})}}return i.sort((a,l)=>a.key.localeCompare(l.key)),{changed:i,totalChanges:i.length}}function Ks(e){return dv(e)??0}function RC(e,t){return e===t||e?.format==="base64"&&t?.format==="base64"&&e.data===t.data||e?.format==="digest"&&t?.format==="digest"&&e.digest===t.digest}function Z7(e){if(e?.kind!=="stasis"||!e.bundle)return null;let{formats:t,executable:n,entries:r}=e.bundle;return o=>({format:t?.get(o),executable:n?.has(o)??!1,entry:r?.has(o)??!1})}function HN(e,t){return!e||!t?[]:["format","executable","entry"].filter(n=>e[n]!==t[n]).map(n=>({field:n,from:e[n],to:t[n]}))}function MC(e){return(t,n)=>Math.abs(n.delta)-Math.abs(t.delta)||t[e].localeCompare(n[e])}function vu(e){return(t,n)=>n.bytes-t.bytes||t[e].localeCompare(n[e])}function UN(e,t){return typeof e=="string"?`\0text\0${e.toWellFormed()}`:e?.format==="base64"?`\0base64\0${e.data}`:e?.format==="digest"?`\0digest\0${e.digest}`:`\0none\0${t}`}var VN=250;function jN(e,t,n,r,o){let s=(l,p,d)=>l.filter(({path:f})=>f!==""&&f.isWellFormed()).map(({path:f},m)=>({name:f,data:UN(p.get(f),`${d}${m}`)})),i={paths:"keys",renameGroup:o,renameLimit:VN,lines:!1},a=Yh(s(e,n,"a"),s(t,r,"b"),i);return new Map(a.filter(({status:l})=>l==="renamed").map(l=>[l.old.path,l.new.path]))}function GN(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}function KN(){return{baseBytes:0,otherBytes:0,onlyBaseFiles:0,onlyOtherFiles:0,changedFiles:0}}function Q7(e,t,n,r=Qh(e.keys(),t.keys()),o=[]){let{root:s,paths:i}=r,a=new Map([...i].map(([T,I])=>[I,T]));e=new Map([...e].map(([T,I])=>[i.get(T),I]));let l=T=>a.get(T)===T?{}:{basePath:a.get(T)},p=(T,I)=>{let U=HN(o[0]?.(T),o[1]?.(I));return U.length>0?{meta:U}:{}},d=[],f=[],m=[],h=0,b=0,y=0,w=0,v=0,x=0,$=new Map,k=T=>{let I=n(T),U=$.get(I);return U||(U=KN(),$.set(I,U)),U},S=new Set([...e.keys(),...t.keys()]);for(let T of S){let I=e.has(T),U=t.has(T),K=k(T);if(I&&U){let Q=e.get(T),ze=t.get(T),We=RC(Q,ze),Ke=p(a.get(T),T),Ce=Ks(Q),bt=We?Ce:Ks(ze);if(h+=Ce,b+=bt,K.baseBytes+=Ce,K.otherBytes+=bt,We&&!Ke.meta)x++;else{let Br=bt-Ce;m.push({path:T,...l(T),baseBytes:Ce,otherBytes:bt,delta:Br,...Ke,...We?{modified:!1}:{}}),v+=Br,K.changedFiles++}}else if(I){let Q=Ks(e.get(T));h+=Q,y+=Q,K.baseBytes+=Q,K.onlyBaseFiles++,d.push({path:T,...l(T),bytes:Q})}else{let Q=Ks(t.get(T));b+=Q,w+=Q,K.otherBytes+=Q,K.onlyOtherFiles++,f.push({path:T,bytes:Q})}}let C=jN(d,f,e,t,n);if(C.size>0){let T=new Set(C.values());for(let[I,U]of C){let K=e.get(I),Q=t.get(U),ze=RC(K,Q),We=Ks(K),Ke=ze?We:Ks(Q);y-=We,w-=Ke,m.push({path:U,renamedFrom:I,basePath:a.get(I),baseBytes:We,otherBytes:Ke,delta:Ke-We,modified:!ze,...p(a.get(I),U)}),v+=Ke-We;let Ce=k(I);Ce.onlyBaseFiles--,Ce.onlyOtherFiles--,Ce.changedFiles++}d.splice(0,d.length,...d.filter(I=>!C.has(I.path))),f.splice(0,f.length,...f.filter(I=>!T.has(I.path)))}let _=[],L=[],A=[],E=[];for(let[T,I]of $){let U=I.baseBytes>0||I.onlyBaseFiles>0||I.changedFiles>0,K=I.otherBytes>0||I.onlyOtherFiles>0||I.changedFiles>0,Q=I.onlyBaseFiles+I.onlyOtherFiles+I.changedFiles;U&&!K?_.push({pkg:T,bytes:I.baseBytes}):K&&!U?L.push({pkg:T,bytes:I.otherBytes}):Q>0||I.baseBytes!==I.otherBytes?A.push({pkg:T,baseBytes:I.baseBytes,otherBytes:I.otherBytes,delta:I.otherBytes-I.baseBytes}):E.push({pkg:T,bytes:I.baseBytes})}return d.sort(vu("path")),f.sort(vu("path")),m.sort(MC("path")),_.sort(vu("pkg")),L.sort(vu("pkg")),A.sort(MC("pkg")),{totals:{baseFiles:e.size,baseBytes:h,otherFiles:t.size,otherBytes:b,onlyBaseFiles:d.length,onlyBaseBytes:y,onlyOtherFiles:f.length,onlyOtherBytes:w,changedFiles:m.length,renamedFiles:C.size,changedDelta:v,unchangedFiles:x,fileDelta:t.size-e.size,byteDelta:b-h,identical:d.length===0&&f.length===0&&m.length===0},files:{onlyBase:d,onlyOther:f,changed:m,root:s,basePaths:i},packages:{onlyBase:_,onlyOther:L,changed:A,unchanged:E}}}function eK(e,t,n){let r=new Map;for(let d of e.onlyBase)r.set(d.pkg,{base:d.bytes,other:null});for(let d of e.onlyOther)r.set(d.pkg,{base:null,other:d.bytes});for(let d of e.changed)r.set(d.pkg,{base:d.baseBytes,other:d.otherBytes});for(let d of e.unchanged??[])r.set(d.pkg,{base:d.bytes,other:d.bytes});let o=(d,f)=>[...d.get(f)??[]].toSorted(Vt),s=new Set([...e.onlyBase,...e.onlyOther,...e.changed].map(d=>d.pkg));for(let d of new Set([...t.keys(),...n.keys()]))tb(o(t,d),o(n,d))||s.add(d);let i=[],a=[],l=[];for(let d of s){let f=r.get(d)??{base:null,other:null},m=o(n,d),h=o(t,d),b=f.base!==null||h.length>0,y=f.other!==null||m.length>0;b&&!y?l.push({pkg:d,bytes:f.base,versions:h}):y&&!b?i.push({pkg:d,bytes:f.other,versions:m}):a.push({pkg:d,baseBytes:f.base,otherBytes:f.other,delta:f.base!==null&&f.other!==null?f.other-f.base:null,baseVersions:h,otherVersions:m,direction:h.length>0&&m.length>0&&!tb(h,m)?IC(h,m):null})}let p=(d,f)=>d.pkg.localeCompare(f.pkg);return{removed:l.toSorted(p),added:i.toSorted(p),changed:a.toSorted(p)}}function TC(e){let n=String(e).trim().split("+",1)[0],r=n.indexOf("-");return r===-1?{core:n,pre:""}:{core:n.slice(0,r),pre:n.slice(r+1)}}function Vt(e,t){if(e===t)return 0;let n=TC(e),r=TC(t),o=n.core.split("."),s=r.core.split(".");for(let l=0;l<Math.max(o.length,s.length);l++){let p=Number(o[l]??0),d=Number(s[l]??0);if(Number.isNaN(p)||Number.isNaN(d))return e<t?-1:1;if(p!==d)return p<d?-1:1}if(n.pre===r.pre)return 0;if(!n.pre)return 1;if(!r.pre)return-1;let i=n.pre.split("."),a=r.pre.split(".");for(let l=0;l<Math.max(i.length,a.length);l++){let p=i[l],d=a[l];if(p===void 0)return-1;if(d===void 0)return 1;if(p===d)continue;let f=/^\d+$/u.test(p),m=/^\d+$/u.test(d);return f&&m?Number(p)<Number(d)?-1:1:f!==m?f?-1:1:p<d?-1:1}return 0}function tb(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function IC(e,t){let n=e.filter(l=>!t.includes(l)).toSorted(Vt),r=t.filter(l=>!e.includes(l)).toSorted(Vt),o=e.filter(l=>t.includes(l)).toSorted(Vt),[s,i]=n.length>0&&r.length>0?[n,r]:n.length>0?[n,o]:[o,r];if(s.length===0||i.length===0)return"changed";let a=(l,p)=>Vt(l.at(-1),p[0])<0;return a(s,i)?"up":a(i,s)?"down":"changed"}function tK(e,t){let n=[],r=[],o=[],s=new Set([...e.keys(),...t.keys()]);for(let a of s){let l=e.get(a),p=t.get(a);if(l&&p){let d=[...l].toSorted(Vt),f=[...p].toSorted(Vt);if(tb(d,f))continue;n.push({pkg:a,baseVersions:d,otherVersions:f,direction:IC(d,f)})}else l?o.push({pkg:a,versions:[...l].toSorted(Vt)}):r.push({pkg:a,versions:[...p].toSorted(Vt)})}let i=(a,l)=>a.pkg.localeCompare(l.pkg);return n.sort(i),r.sort(i),o.sort(i),{updated:n,added:r,removed:o,totals:{baseDeps:e.size,otherDeps:t.size}}}var AC=`.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.code-block:not(.token){white-space:normal;margin:.4rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.4rem .55rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.95em;line-height:1.5;color:var(--text)}& code{font:inherit}}
|
|
146
|
+
`;var EC=`.token.comment,.token.prolog,.token.cdata{color:var(--code-comment);font-style:italic}.token.punctuation{color:var(--muted)}.token.string,.token.attr-value,.token.char,.token.regex{color:var(--code-string)}.token.number,.token.boolean,.token.constant,.token.symbol{color:var(--code-number)}.token.keyword,.token.builtin,.token.important,.token.atrule{color:var(--code-keyword)}.token.function,.token.class-name,.token.tag{color:var(--code-function)}.token.operator,.token.entity,.token.url,.token.attr-name,.token.selector{color:var(--code-operator)}.token.variable,.token.property,.token.parameter{color:var(--code-variable)}.token.annotation{color:var(--code-function)}.token.deleted{color:var(--code-deleted)}.token.inserted{color:var(--code-inserted)}.token.italic{font-style:italic}.token.bold{font-weight:700}.code-control{padding:0 .3em;margin:0 .1em;border-radius:3px;font-size:.8em;line-height:0;font-style:normal;font-weight:400;color:var(--warning);background:rgb(from var(--warning) r g b / .14);box-shadow:inset 0 0 0 1px rgb(from var(--warning) r g b / .45);white-space:nowrap;user-select:none}
|
|
147
|
+
`;var $u=`dialog{width:min(94vw,80rem);max-width:none;max-height:90dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:start;gap:1rem;flex-shrink:0;padding:.8rem 1rem;border-bottom:1px solid var(--border)}header h3{display:flex;align-items:baseline;gap:.6rem;flex:1;min-width:0;margin:0;overflow-wrap:anywhere}header h3>span:last-child{min-width:0}header button{flex-shrink:0;border:0;background:transparent;color:var(--muted);font-family:inherit;font-size:1.4rem;line-height:1;padding:0 .25rem}header button:hover{color:var(--text)}.advisory-description{min-height:0;padding:1rem;overflow:auto;overscroll-behavior:contain;white-space:pre-wrap;overflow-wrap:anywhere;font-size:.85rem;line-height:1.6}a{color:var(--accent)}button:focus-visible,.advisory-description:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
|
|
148
|
+
`;var nb=class extends N{static styles=[...N.styles,P(AC),P(EC),P(Jc),P($u)];static properties={heading:{attribute:!1},severity:{attribute:!1},_body:{state:!0}};connectedCallback(){super.connectedCallback(),this._dispose=Rn(()=>{if(!this.isCurrent()){this._body=g,queueMicrotask(this._onClose);return}this._body=it(er(this.markdown))})}disconnectedCallback(){this._dispose?.(),super.disconnectedCallback()}render(){return u`<dialog aria-labelledby="advisory-title" @close="${this._onClose}"><header><h3 id="advisory-title">${Zc(this.severity==="unknown"?"unrated":this.severity)}<span>${this.heading}</span></h3><button type="button" aria-label="Close advisory details" @click="${this._onClose}">×</button></header><div class="advisory-description" tabindex="0">${this._body}</div></dialog>`}};customElements.define("advisory-details-dialog",nb);function ku(e){return re("advisory-details-dialog",e)}var FC=`.bundle-advisories-rows{list-style:none;margin:0;padding:0;min-width:0;display:flex;flex-direction:column}.bundle-advisory-row{display:flex;align-items:flex-start;gap:.65rem;padding:.25rem 0;line-height:1.35}.bundle-advisory-row+.bundle-advisory-row{border-top:1px solid color-mix(in oklch,var(--border) 65%,transparent)}.bundle-advisory-rail{flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:.125rem;min-width:4.5rem;padding-top:.1rem}.bundle-advisory-severity{text-transform:uppercase;letter-spacing:.04em;font-size:.6rem;font-weight:700;padding:.15rem .4rem;border-radius:3px;color:#000;&.sev-critical{background:var(--critical);color:#fff}&.sev-high{background:var(--high)}&.sev-moderate{background:var(--medium)}&.sev-low{background:var(--low);color:var(--badge-low-text)}&.sev-info{background:var(--info);color:#fff}}.bundle-advisory-cvss-score{color:var(--muted);font-size:.62rem;letter-spacing:.02em}.bundle-advisory-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:.125rem}.bundle-advisory-header{display:flex;align-items:baseline;gap:.5rem}.bundle-advisory-title{flex:1;min-width:0;color:var(--text);font-size:.82rem;font-weight:500;overflow-wrap:anywhere}button.bundle-advisory-title{border:0;background:transparent;padding:0;font-family:inherit;line-height:inherit;text-align:left}button.bundle-advisory-title:hover{color:var(--accent)}button.bundle-advisory-title:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.bundle-advisory-reference{display:inline-flex;align-items:center;gap:.4rem;flex-shrink:0}.bundle-advisory-source{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;color:var(--muted);user-select:none}.bundle-advisory-source>svg{width:14px;height:14px}.bundle-advisory-subrow{display:flex;align-items:baseline;gap:.75rem}.bundle-advisory-meta{flex:1;min-width:0;color:var(--muted);font-size:.7rem;display:flex;flex-wrap:wrap;gap:.65rem;align-items:baseline}.bundle-advisory-meta .mono{font-size:.68rem}.bundle-advisory-cwes{margin-left:1.25rem}.bundle-advisory-ghsa{flex-shrink:0;display:inline-flex;align-items:center;gap:.2rem;color:var(--muted);text-decoration:none;font-size:.7rem;font-family:var(--font-mono, ui-monospace, monospace);cursor:default;user-select:text}a.bundle-advisory-ghsa:hover{color:var(--accent, #60a5fa)}.bundle-advisory-ghsa .external-link-icon{flex-shrink:0;opacity:.75;user-select:none}a.bundle-advisory-ghsa:hover .external-link-icon{opacity:1}.bundle-advisory-cwe{color:var(--muted);text-decoration:none;user-select:text;cursor:default}.bundle-advisory-cwe:hover{color:var(--accent, #60a5fa)}.bundle-advisory-cvss-vector{flex-shrink:1;min-width:0;text-align:right;color:var(--muted);font-size:.65rem;font-family:var(--font-mono, ui-monospace, monospace);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
149
|
+
`;var LC=`dialog{width:min(94vw,56rem)}.compare-advisories{min-height:0;padding:.75rem 1rem 1rem;overflow:auto;overscroll-behavior:contain}.compare-advisories:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.compare-advisory-group+.compare-advisory-group{margin-top:.9rem}.compare-advisory-group h4{display:flex;align-items:baseline;gap:.4rem;margin:0 0 .25rem;padding:0 .55rem;color:var(--muted);font-size:.68rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.compare-advisory-count{font-variant-numeric:tabular-nums}.compare-advisory-group>.bundle-advisories-rows{padding:.1rem .55rem;border:1px solid transparent;border-radius:var(--ui-radius, 4px)}.compare-advisory-group .bundle-advisory-rail{width:5rem;align-items:stretch;text-align:center}.compare-advisory-group.is-new{& h4{color:var(--critical)}>.bundle-advisories-rows{background:color-mix(in srgb,var(--critical) 6%,var(--bg));border-color:color-mix(in srgb,var(--critical) 55%,var(--border))}}.compare-advisory-group.is-fixed{.bundle-advisory-title{color:var(--muted);text-decoration:line-through}.bundle-advisory-severity{opacity:.55}}
|
|
150
|
+
`;var rb=class extends N{static styles=[...N.styles,P(FC),P($u),P(LC)];static properties={heading:{attribute:!1},groups:{attribute:!1},_current:{state:!0}};connectedCallback(){super.connectedCallback(),this._dispose=Rn(()=>{this._current=this.isCurrent(),this._current||queueMicrotask(this._onClose)})}disconnectedCallback(){this._dispose?.(),super.disconnectedCallback()}render(){return u`<dialog aria-labelledby="compare-advisories-title" @close="${this._onClose}"><header><h3 id="compare-advisories-title"><span>${this.heading}</span></h3><button type="button" aria-label="Close advisories" @click="${this._onClose}">×</button></header><div class="compare-advisories" tabindex="0">${this._current?this.groups.map(t=>u`<section class="${`compare-advisory-group is-${t.status}`}"><h4>${t.heading} <span class="compare-advisory-count">${t.rows.length}</span></h4><ul class="bundle-advisories-rows">${t.rows}</ul></section>`):g}</div></dialog>`}};customElements.define("npm-compare-advisories-dialog",rb);function OC(e){return re("npm-compare-advisories-dialog",e)}var NC=(e,t)=>Fn(e,t).runsCode,Ba=(e,t=e.length>=Tp)=>e.length===1?`line ${e[0]}`:`lines ${e.slice(0,5).join(", ")}${e.length>5?` and ${(e.length-5).toLocaleString("en")}${t?"+":""} more`:""}`,QN=/^[\w$.]+$/u,BC=(e,t=null)=>[...Map.groupBy([...e],([n])=>{let{name:r,tag:o}=Yr.get(n);return r&&QN.test(r)?r:o})].map(([n,r])=>{let o=[...new Set(r.flatMap(([,s])=>s))].toSorted((s,i)=>s-i);return`${n} (${Ba(o,r.some(([,s])=>s.length>=Tp))}${r.some(([s])=>t?.has(s))?", new":""})`}).join(", "),ob=e=>{let t=new Set(e.flat());return t.size===1?[...t][0]:void 0},sb=(e,t)=>t===void 0?{path:g,line:g}:{path:e,line:t},PC=(e,t=null)=>[...e].map(([n,r])=>`${Yr.get(n).name} (${Ba(r)}${t?.has(n)?", new":""})`).join(", ");function DC(e,t,n){return e?[...Map.groupBy(e,([r])=>Yr.get(r).tag)].map(([r,o])=>{let{note:s,mark:i}=Yr.get(o[0][0]),a=o.map(([f,m])=>[Yr.get(f).name,Ba(m)]),l=t===void 0?[]:o.filter(([f])=>!t?.has(f)).map(([f])=>Yr.get(f).name),p=l.length===0?null:l.length===o.length?"New in this version":`New in this version: ${l.join(", ")}`,d=sb(n,n===void 0?void 0:ob(o.map(([,f])=>f)));return u`<span data-bundle-view-source="${d.path}" data-bundle-view-line="${d.line}" class="${`npm-runs-code${i?` is-${i}`:""}`}" data-tooltip="${[`${s}: ${a.map(f=>f.join(", ")).join("; ")}`,p].filter(Boolean).join(" \xB7 ")}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">${s}</div><div class="compare-tip-rows is-files">${a.map(([f,m])=>u`<span class="compare-tip-path">${f}</span><span class="compare-tip-said">${m}</span>`)}</div>${p?u`<div class="compare-tip-notice">${p}</div>`:g}</div>`}">${r}</span>`}):g}var ib=(e,t)=>Fn(e,t).exfiltration,zC=e=>[...Ap].filter(([t])=>e.some(n=>n.has(t))).map(([,{name:t}])=>t).join(", "),ab=(e,t)=>[...e].map(([n,r])=>`${Ap.get(n).name} (${Ba(r)}${t!==void 0&&!t?.has(n)?", new":""})`).join(", "),eB=new Map([["Exfiltration","Names a host that catches what is sent to it, as malicious packages send what they take to"],["Remote","Names a service malicious packages send what they take to, or fetch what they run from, though code may well use it"],["IP lookup","Looks up the machine's public address, as malicious packages do before sending what they take"]]);function WC(e,t,n){return e?zl(e).map(([r,o])=>{let s=sb(n,n===void 0?void 0:ob([...o.values()]));return u`<span data-bundle-view-source="${s.path}" data-bundle-view-line="${s.line}" class="${`npm-exfiltration is-${Wl(r,o,t)}`}" data-tooltip="${`${eB.get(r)}: ${ab(o,t)}`}">${r}</span>`}):g}var lb=e=>e.toLowerCase().replaceAll(" ","-");var HC=({id:e,aliases:t,cwe:n,title:r})=>[e,...t??[]].some(o=>(o??"").startsWith("MAL-"))||(n??[]).includes("CWE-506")||/\bmalware\b/iu.test(r??"");var cb={accept:"Accept","accept-with-nits":"Accept with nits (non-blocking)","request-changes":"Request changes",reject:"Reject"};function QK(e,t){return[e,t].every(n=>n===void 0||typeof n=="string")&&[e,t].some(n=>typeof n=="string")}function VC(e,t,n=[]){let r=Object.keys(cb),o=new Set(n??[]),s=e.filter(p=>n!==null&&!o.has(p.file)&&r.includes(p.status)),i=r.findLast(p=>s.some(d=>d.status===p))??"accept";if(t===null)return{coverage:null,checkedFiles:null,totalFiles:null,verdictLimit:i};let a=new Set(s.map(p=>p.file)),l=t.filter(p=>a.has(p)).length;return{coverage:l===t.length?"full":"partial",checkedFiles:l,totalFiles:t.length,verdictLimit:i}}function e9(e,t="accept"){let n=Object.keys(cb);return n.slice(Math.max(n.indexOf(t),n.indexOf(VC(e,null).verdictLimit)))}function xu({npm:{version:e,manifest:t={}}}){return(t.description==="security holding package"||t.github?.github?.toLowerCase()==="npm/security-holder")&&(t.publisher==="npm"||/-security(?:\.\d+)?$/u.test(e))}function jC(e,t,n,r){if(!e)return"accept";let o=t?.versions?.indexOf(e.version)??-1,s=o<0?[]:t.advisories.filter(a=>a.affected.includes(o)),i=e.private?[]:n?.alerts??[];return r?.findings?.some(a=>a.id==="malware")||xu({npm:e})||i.some(a=>a.type==="malware")||s.some(a=>HC(a)||a.id?.startsWith("MAL-")||/^Malicious package\b/iu.test(a.title??""))?"reject":s.some(a=>a.severity==="critical")||i.some(a=>a.type==="criticalCVE")?"request-changes":"accept"}function t9(e,t,n=[]){return VC(e,t,n).coverage==="partial"&&(n===null||n.includes("package.json")||!e.some(r=>r.file==="package.json"&&Object.keys(cb).includes(r.status)))}var tB=e=>e.replaceAll(/[\\`*_{}[\]<>]/gu,"\\$&").replaceAll(/\r\n?/gu,`
|
|
151
151
|
`).replaceAll(`
|
|
152
152
|
`,`
|
|
153
|
-
`);function
|
|
154
|
-
`).split(/(?:^|\n)[\t ]*\*[\t ]+/u).map((t,n)=>({text:t.trim(),bullet:n>0})).filter(t=>t.text)}function
|
|
153
|
+
`);function nB(e){return e.replaceAll(/\r\n?/gu,`
|
|
154
|
+
`).split(/(?:^|\n)[\t ]*\*[\t ]+/u).map((t,n)=>({text:t.trim(),bullet:n>0})).filter(t=>t.text)}function UC(e,t=""){return nB(e).map(n=>`* ${t}${n.text.replaceAll(`
|
|
155
155
|
`,`
|
|
156
|
-
`)}`)}function
|
|
156
|
+
`)}`)}function n9(e){if(e.publishedAt===null||e.revokedAt!==null||e.coverage!=="full"||!["accept","accept-with-nits"].includes(e.status))return null;let t=`${e.package} ${e.version} ${e.integrity}`,n=e.basePackage===null?t:e.basePackage===e.package?`${e.package} ${e.baseVersion} -> ${e.version} ${e.integrity}`:`${e.basePackage} ${e.baseVersion} -> ${t}`,r=[...e.entries.filter(o=>o.status).flatMap(o=>UC(o.comment,`In ${tB(o.file)}: `)),...UC(e.comment)];return`Audited:
|
|
157
157
|
\`\`\`
|
|
158
158
|
${n}
|
|
159
159
|
\`\`\`${r.length>0?`
|
|
160
160
|
|
|
161
161
|
Notes:
|
|
162
162
|
${r.join(`
|
|
163
|
-
`)}`:""}`}var La=["critical","high","moderate","low","unknown"],sb=e=>La.includes(e.severity)?e.severity:"unknown",RN=[["affects",e=>`Affects ${e}`],["later",()=>"Later versions"],["fixed",e=>`Fixed in ${e}`]];function ib(e){return Nn("stats",e,()=>Tk(e),t=>({downloads:t.downloads??null,github:t.github??null}))}function ab(e){return Nn("advisories",e,()=>Ik(e),t=>({versions:t.versions??[],advisories:t.advisories??[],repository:t.repository!==!1,keptAt:t.keptAt??null}))}function lb(e){let{name:t,version:n}=e.npm,r=(o,s)=>u`<a class="npm-package-link" href="${o}" target="_blank" rel="noopener noreferrer">${s}${ru}</a>`;return u`<span class="npm-package-links">${r(`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`,"npmjs")} ${e.npm.private?g:r(bu(e),"socket.dev")}</span>`}var bu=e=>`https://socket.dev/npm/package/${e.npm.name}/overview/${encodeURIComponent(e.npm.version)}`;function Na(e){let{name:t,version:n}=e.npm;if(e.npm.private)return null;let r=Nn("socket",`${t}@${n}`,()=>Fk(t,n),o=>({socket:o.socket??null}));return r.status==="ready"?r.socket:null}var MC=[["supplyChain","Supply chain",85,85],["vulnerability","Vulnerability",85,85],["quality","Quality",70,80],["maintenance","Maintenance",70,80],["license","License",80,80]],MN=50,tb=(e,t)=>e===100?"is-good is-max":e>=t?"is-good":e>=50?"is-fair":"is-poor",mu=e=>u`<svg class="npm-socket-gauge" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="6" pathLength="100"></circle><circle class="npm-socket-gauge-fill" cx="8" cy="8" r="6" pathLength="100" stroke-dasharray="${`${e} 100`}"></circle></svg>`;function TN(e){let t=Na(e)?.scores;return t?u`<ul class="npm-extensions npm-socket-scores" aria-label="Socket scores">${MC.map(([n,r,,o])=>{let s=Math.round(t[n]*100);return u`<li><a class="${`npm-extension npm-socket-score ${tb(s,o)}`}" href="${bu(e)}" target="_blank" rel="noopener noreferrer">${mu(s)}<span>${r}</span><span class="npm-extension-count">${s}</span></a></li>`})}</ul>`:g}var cb=new Map([["critical","critical"],["high","high"],["middle","moderate"],["low","low"]]),gu=e=>e.replaceAll(/(?<=[a-z])(?=[A-Z])/gu," ").toLowerCase().replace(/^./u,t=>t.toUpperCase()),IN=new Map,Qh=new WeakMap;function db(e){let t=e?Na({npm:e}):null;return t?(Qh.has(t)||Qh.set(t,Map.groupBy(t.alerts.filter(n=>n.file),n=>n.file)),Qh.get(t)):IN}var ub=(e=[])=>e.map(t=>{let n=cb.get(t.severity)??"low";return u`<span class="${`npm-socket-file-alert sev-${n}`}" data-tooltip="${`Socket: ${gu(t.type)}, ${n}${t.note?` \xB7 ${t.note}`:""}`}">${gu(t.type)}</span>`});function TC(e,t){return kC(e.npm,ab(e.npm.name),Na(e),ln(e.npm,t?t.npm?.version??"(empty)":null))}function IC(e,t){let n=fu(e),o=n&&t!==null&&[...t].every(Oa)?[]:Na(e)?.alerts??[];if(!n&&o.length===0)return g;let s=[...t??[]].find(i=>/^readme(?:\.md)?$/iu.test(i));return u`<div class="npm-alerts">${n?u`<p class="npm-alert" role="note"><strong>Taken down by npm.</strong> npm's security team removed this package's versions, as it does for malicious code, and serves this placeholder in their place${s?u`: ${Hs(s,t,"its readme")}`:""}.</p>`:g} ${o.length>0?AN(e,o,t):g}</div>`}function AN(e,t,n){return u`<div class="npm-alert npm-socket-alerts" role="note"><span class="npm-socket-alerts-head"><strong>Socket raises ${t.length===1?"an alert":`${t.length} alerts`} on this version</strong> <a class="npm-package-link" href="${bu(e)}" target="_blank" rel="noopener noreferrer">socket.dev${ru}</a></span><ul>${t.map(r=>{let o=cb.get(r.severity)??"info";return u`<li><span class="${`bundle-advisory-severity sev-${o}`}">${o}</span> <span class="npm-socket-alert-type">${gu(r.type)}</span> ${r.file?u`<span class="npm-socket-alert-file">in ${Hs(r.file,n)}</span>`:g} ${r.note?u`<p class="npm-socket-alert-note">${r.note}</p>`:g}</li>`})}</ul></div>`}function AC(e,t,n=g){let r=ib(e.npm.name),o=t_(ln(e.npm)?.findings.find(({id:s})=>s==="popularity"));return u`<div class="npm-figures"><npm-downloads-chart role="region" aria-label="Downloads" .downloads="${r.downloads}" .status="${r.status}" .known="${o}"></npm-downloads-chart><div class="npm-figures-actions">${lb(e)}${t}</div>${n}</div>`}var EN=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round" aria-hidden="true"><path d="m8 1.75 1.9 3.9 4.3.6-3.1 3 .75 4.25L8 11.5l-3.85 2 .75-4.25-3.1-3 4.3-.6Z"/></svg>`,FN=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><circle cx="8" cy="8" r="1.25" fill="currentColor"/></svg>`,LN=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="4" cy="3.5" r="1.5"/><circle cx="4" cy="12.5" r="1.5"/><circle cx="12" cy="12.5" r="1.5"/><path d="M4 5v6M12 11V6a2 2 0 0 0-2-2H7m1.5-1.5L7 4l1.5 1.5"/></svg>`,ON=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><circle cx="4.5" cy="3.25" r="1.5"/><circle cx="11.5" cy="3.25" r="1.5"/><circle cx="8" cy="12.75" r="1.5"/><path d="M4.5 4.75v.75a2 2 0 0 0 2 2h3a2 2 0 0 0 2-2v-.75M8 7.5v3.75"/></svg>`;function pb(e){if(!e.npm.manifest.github?.github)return g;let t=ib(e.npm.name),n=t.status==="ready"?t.github:null;if(!n)return g;let r=(i,a,l,p)=>u`<a class="bundle-origin-link npm-github-figure" href="${`https://github.com/${Ld(n.repo)}/${p}`}" data-tooltip="${`${a.toLocaleString("en")} ${l}`}" target="_blank" rel="noopener noreferrer">${i}<span>${Sa.format(a)}</span></a>`,o=typeof n.openPulls=="number"?n.openPulls:null,s=o===null?n.openIssues:Math.max(n.openIssues-o,0);return u`${r(EN,n.stars,n.stars===1?"star":"stars","stargazers")} ${r(ON,n.forks,n.forks===1?"fork":"forks","forks")} ${r(FN,s,o===null?"open issues and pull requests":s===1?"open issue":"open issues","issues")} ${o===null?g:r(LN,o,o===1?"open pull request":"open pull requests","pulls")} ${n.archived?u`<span class="npm-github-archived">Archived</span>`:g}`}var EC=({name:e,version:t,private:n,manifest:r})=>n||!r.provenance?null:Nn("provenance",`${e}@${t}`,()=>Lk(e,t),o=>({provenance:o.provenance??null}));function fb(e){let t=EC(e);return t!==null&&(t.status==="loading"||!!t.provenance?.builder)}function NN(e,t){return e?/^https:\/\/github\.com\/actions\/runner(?:\/github-hosted)?$/u.test(e)?"GitHub Actions":e.startsWith("https://github.com/actions/runner/")?"GitHub Actions, self-hosted runner":e.startsWith("https://gitlab.com/")||e.includes("/-/runners/")?t==="self-hosted"?"GitLab CI, self-hosted runner":"GitLab CI":new URL(e).host:null}var BN=(e,t)=>t?t==="github-hosted"||t==="gitlab-hosted":e==="GitHub Actions";function mb(e){if(e.npm.private)return g;let t=EC(e.npm);if(!t)return u`<span class="npm-commit-missing">None</span>`;if(t.status==="loading")return u`<span class="npm-commit-missing">Checking…</span>`;if(t.status==="error")return u`<span class="npm-commit-missing">Couldn't be read</span>`;if(!t.provenance)return u`<span class="npm-provenance-warning" data-tooltip="npm lists provenance for this version, but no statement naming its tarball could be read">Listed, but none for this tarball</span>`;let{manifest:n}=e.npm,{repository:r,commit:o,workflow:s,ref:i,builder:a,run:l,logIndex:p,runner:d}=t.provenance,f=($,S,C=g)=>u`<a class="bundle-origin-link" href="${$}" data-tooltip="${C}" target="_blank" rel="noopener noreferrer"><span>${S}</span></a>`,m=/^https:\/\/github\.com\/([^/]+\/[^/]+)$/u.exec(r)?.[1]??null,h=NN(a,d),b=h?.startsWith("GitLab CI"),y=m??r.replace(/^https:\/\//u,""),w=n.github?.github??(n.gitlab?`gitlab.com/${n.gitlab}`:null),v=w&&w.toLowerCase()!==y.toLowerCase(),x=s?.split("/").at(-1),k=[s?m&&o?f(`${r}/blob/${o}/${s.split("/").map(encodeURIComponent).join("/")}`,x,s===x?g:s):u`<span class="mono" data-tooltip="${s===x?g:s}">${x}</span>`:g,l?f(l,"Run"):g,p===null?g:f(`https://search.sigstore.dev/?logIndex=${p}`,"Transparency log")].filter($=>$!==g);return u`<span class="npm-provenance"><span class="npm-provenance-line">${h?u`<span class="${BN(h,d)&&!v?"npm-provenance-builder is-hosted":"npm-provenance-builder"}">${h}</span>`:g} <span class="npm-provenance-sep">from</span> ${o?f(m?`${r}/commit/${o}`:b?`${r}/-/commit/${o}`:r,`${y}@${o.slice(0,7)}`,`${r} at ${o}${i?` (${i})`:""}`):f(r,y)} ${v?u`<span class="npm-provenance-warning" data-tooltip="${`The package names ${w}`}">Not the repository it names</span>`:g}</span> ${k.length>0?u`<span class="npm-provenance-line is-how">${k.map(($,S)=>S===0?$:u`<span class="npm-provenance-sep" aria-hidden="true">·</span>${$}`)}</span>`:g}</span>`}function PN(e,t,n){let r=e.affected.map(o=>t[o]).filter(Boolean);return r.includes(n)?"affects":r.length>0&&r.every(o=>Ht(o,n)<0)?"fixed":"later"}function FC(){let e=c.managedSession?.id;return()=>c.managedSession?.id===e}function LC(e,t){return ou({...e,title:e.title??e.id,severity:sb(e),cvss:{score:e.cvss},vulnerable_versions:e.range},({title:n,severity:r,details:o})=>uu({heading:n,severity:r,markdown:o,isCurrent:t}))}function OC(e){let{name:t,version:n}=e.npm,r=ab(t),o=FC(),s=r.status==="ready",i=s?r.advisories:[],a=i.map(m=>PN(m,r.versions,n)),l=RN.map(([m,h])=>({status:m,heading:h(n),advisories:i.filter((b,y)=>a[y]===m)})).filter(m=>m.advisories.length>0),p=a.filter(m=>m==="affects").length,d=s&&r.keptAt?u`<p class="npm-advisories-note">GitHub's repository advisories are as of ${r_(Date.now()-Date.parse(r.keptAt))} ago: they couldn't be checked now.</p>`:s&&!r.repository?u`<p class="npm-advisories-note">GitHub's repository advisories couldn't be checked; npm's are shown.</p>`:g,f=r.status==="loading"?u`<p class="bundles-overview-col-empty">Checking advisories…</p>`:r.status==="error"?u`<p class="bundles-overview-col-empty">Couldn't check advisories.</p>`:l.length===0?u`${d}<p class="bundles-overview-col-empty">No advisories for any version.</p>`:u`${d}${l.map(m=>u`<section class="${`npm-advisory-group is-${m.status}`}"><h4 class="npm-advisory-group-head">${m.heading} <span class="bundles-overview-col-count">${m.advisories.length}</span></h4><ul class="bundle-advisories-rows">${m.advisories.map(h=>LC(h,o))}</ul></section>`)}`;return Ln({title:"Advisories",count:s?i.length:"\u2026",body:f,className:"npm-advisories-col",extra:s?u`<span class="${`npm-advisories-active${p>0?" is-active":""}`}">${p} active</span>`:g})}var DN=[...Nt].filter(([,{mark:e}])=>e!==null).map(([e])=>e),zN=[...Nt].filter(([,{mark:e}])=>e===null).map(([e])=>e),xC=[null,"notice","warn"];function NC(e){let t=new Map,n=new Map,r=0;for(let o of e){let s=Vo(o);for(let i of s){t.set(i,(t.get(i)??0)+1);let a=jo(o,i);xC.indexOf(a)>xC.indexOf(n.get(i)??null)&&n.set(i,a)}s.some(i=>Nt.get(i).mark)&&r++}return{counts:t,marks:n,unreadable:r}}var SC=new WeakMap;function Cr(e){let t=e.npm?Gd(e):e,n=SC.get(e);if(n?.of!==t){let{sources:r,sourcesContent:o}=e.json,s=new Map(r.map((h,b)=>[h,DS(e,h,o[b])]).filter(([,h])=>h)),i=new Set(r.filter((h,b)=>typeof o[b]!="string")),{counts:a,marks:l,unreadable:p}=NC(s.values()),d=gi(e),f=xn(e),m={files:0,lines:0,unpacked:0};for(let h of r.filter(b=>!Oa(b)))i.has(h)||m.files++,m.lines+=d.get(h)??0,m.unpacked+=f.get(h)??0;n={of:t,paths:new Set(r),byPath:s,counts:a,marks:l,unreadable:p,sizes:f,extensions:new Map(r.map(h=>[h,wb(h)])),binaries:new Set([...i].toSorted((h,b)=>h.localeCompare(b))),types:fB(r,f,d),content:m},SC.set(e,n)}return n}var hu={key:null,chip:null},BC=e=>`${e.npm.name}@${e.npm.version}`,PC=e=>hu.key===BC(e)?hu.chip:null;function DC(e){let t=PC(e);return t&&{label:t.label,keeps:t.keeps,clear:()=>{hu={key:null,chip:null},O()}}}function nb(e,t,n,r,{classes:o="",tooltip:s=g}={}){let i=PC(e)?.id===t.id;return u`<li><button type="button" class="${`npm-extension npm-category${o}`}" aria-pressed="${String(i)}" data-tooltip="${s}" @click="${()=>{hu={key:BC(e),chip:i?null:t},O()}}">${n}<span class="npm-extension-count">${r.toLocaleString("en")}</span></button></li>`}function zC(e,t,n){let{name:r}=Nt.get(n),{byPath:o,counts:s,marks:i}=Cr(t),a=i.get(n);return nb(e,{id:`category:${n}`,label:r,keeps:l=>o.has(l)&&Vo(o.get(l)).includes(n)},u`<span>${r}</span>`,s.get(n),{classes:a?` is-${a}`:""})}function WC({counts:e,marks:t,unreadable:n},r,o,s){let i=DN.filter(l=>e.has(l));if(i.length===0)return g;let a=i.some(l=>t.get(l)==="warn");return u`<div class="${`npm-readability-warning${a?" is-warn":""}`}" role="note"><span class="npm-readability-warning-text"><strong>${n.toLocaleString("en")} of ${r.toLocaleString("en")} ${o}</strong> can be hard to review by reading them:</span><ul class="npm-extensions">${i.map(s)}</ul></div>`}function HC(e,t){return WC(Cr(t),t.json.sources.length,"files",n=>zC(e,t,n))}function gb(e,t,n=!1,r=void 0){let{byPath:o,sizes:s}=Cr(e),i=n?t:void 0;return u`${hC(mC(e,t),void 0,i)}${yC(Yh(e,t),UC(r),i)}${VS(e,t,s.get(t))}${US(o.get(t))}`}var UC=e=>e===void 0||e?.details.npm&&!Gd(e.details)?void 0:e&&Yh(e.details,e.path);function hb(e,t,n=[],r=void 0){let{stamps:o,exfiltration:s}=Fn(e,t),i=UC(r),a=i===void 0?null:new Map(Ll(s).map(([l,p])=>[l,Ol(l,p,i)]));return[...n.map(l=>({name:gu(l.type),severity:cb.get(l.severity)??"low"})),...o.map(l=>a?.has(l.name)?{...l,severity:a.get(l.name)}:l)]}var eb=new WeakMap;function WN(e,t){let n=e&&t?.npm?ln(t.npm,e.npm?.version??"(empty)"):null;if(!n)return null;if(!eb.has(n)){let r=new Map;for(let{host:o,places:s}of bb(n).get("new-hosts")?.hosts??[])for(let{path:i,line:a}of s)r.set(i,[...r.get(i)??[],{host:o,line:a,was:e.npm?.version??null}]);eb.set(n,r)}return eb.get(n)}function HN(e){if(!e?.length)return g;let t=e.length===1?"New host":"New hosts",{was:n}=e[0],r=`${n?`None of ${n}'s files`:"No file of the version compared with"} named ${e.length===1?"it":"them"}`;return u`<span class="npm-new-host" data-tooltip="${`${t}: ${e.map(({host:o,line:s})=>`${o}, line ${s}`).join("; ")} \xB7 ${r}`}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${e.map(({host:o,line:s})=>u`<span class="compare-tip-path">${o}</span><span class="compare-tip-said">line ${s}</span>`)}</div><div class="compare-tip-note">${r}</div></div>`}">${t}</span>`}var VC={icon:(e,t)=>kn(e,t.map(([n,r])=>Wo(n,r)).find(Gw)),alerts:e=>db(e?.npm),alertTags:ub,newHosts:WN,newHostTag:HN,tag:(e,t,n)=>gb(e,t,!1,n),flags:(e,t,n)=>hb(e,t,[],n),warning(e,t){let{byPath:n}=Cr(e),r=NC(t.filter(i=>n.has(i)).map(i=>n.get(i))),{counts:o,marks:s}=r;return WC(r,t.length,t.length===1?"file added or changed":"files added or changed",i=>{let{name:a}=Nt.get(i),l=s.get(i);return u`<li><span class="${`npm-extension is-${l}`}"><span>${a}</span><span class="npm-extension-count">${o.get(i).toLocaleString("en")}</span></span></li>`})}},UN=new Map([["malware","Malware"],["deprecated","Deprecated"],["publisher","Publisher"],["provenance-lost","Provenance lost"],["held-install-scripts","Install scripts"],["held-non-registry-deps","Non-registry deps"],["held-unused-deps","Unused deps"],["held-runs-code","Runs code"],["held-exfiltration","Exfiltration"],["held-remote","Remote"],["held-ip-lookup","IP lookup"],["held-obfuscated","Obfuscated"],["large-code","Large new code"],["now-unreadable","Now unreadable"],["binary-code","Binary code"],["new-hosts","New hosts"],["popularity","Few downloads"]]),VN={critical:"is-critical",high:"is-warn",moderate:"is-moderate",low:"is-low"},jN=e=>e>=730?`${Math.floor(e/365)} years`:e>=60?`${Math.floor(e/30)} months`:`${e} days`;function jC(e){let t=e?.score;if(!t)return g;let{score:n,level:r,raised:o,lowered:s}=t,i=o.map(({id:p,severity:d})=>[UN.get(p)??p,d]),a=s&&i.length>0?`Lowered by ${Math.round(s.by*100)}%: out ${jN(s.days)}${s.tier===null?"":`, its package npm's ${Zd(s.tier)} by downloads`}`:null,l=[`Risk ${n} of 100`,...i.length===0?["Nothing found that calls for a look"]:i.map(([p,d])=>`${p}, ${d}`),...a?[a]:[]].join(`
|
|
164
|
-
`);return u`<li><span class="${`npm-extension npm-risk-score ${
|
|
165
|
-
`)}">Malware</span></li>`}function YN(e){return e?u`<li><span class="npm-extension npm-compare-deprecated" data-tooltip="${Ih(e.message)}">Deprecated</span></li>`:g}var XN={critical:"is-from-known",high:"is-to-unknown"},JN={known:"is-known",maintainer:"is-maintainer"},CC={known:"one that publishes one of npm's most downloaded packages",maintainer:"one of the package's maintainers",new:"an unknown publisher, new to the package",unknown:"an unknown publisher"};function ZN([e,t],n){if(!n)return g;let{was:r,now:o,wasKnown:s,nowKnown:i,severity:a,major:l}=n,p=n.wasStanding??(s?"known":"unknown"),d=n.nowStanding??(i?"known":"unknown"),f=(b,y)=>u`<span class="${`npm-compare-account ${JN[y]??"is-unknown"}`}">~${b}</span>`,m=XN[a]??"is-to-known",h=u`A different npm account published the open version,<br>${CC[d]},<br>after ${CC[p]}${l?u`<br>in a major release`:g}`;return u`<li><a class="${`npm-extension npm-compare-publisher ${m}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(o)}`}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Published by ~${r} (${e.version}), then ~${o} (${t.version})`}" .tooltipContent="${wo("Published by",[e,t],[f(r,p),f(o,d)],h)}"><span>Publisher</span><span class="npm-extension-count">${f(r,p)} → ${f(o,d)}</span></a></li>`}function QN([e,t],n){return n?u`<li><span class="npm-extension npm-compare-provenance" data-tooltip="${`npm lists provenance for ${e.version}, none for ${t.version}`}" .tooltipContent="${wo("npm provenance",[e,t],["Listed by npm",u`<span class="compare-tip-none">None</span>`],"The open version was published without the provenance the one compared with has")}">Provenance lost</span></li>`:g}function eB(e,t){if(!t)return g;let{scripts:n,flagged:r=[],was:o}=t,s=new Map(o??[]),i=o?e:e.slice(-1),a=o?[o,n]:[n],l=(d,f)=>d.length===0?u`<span class="compare-tip-none">None</span>`:ob(d.map(([m,h])=>[m,h,f.includes(m)])),p=n.map(([d])=>r.includes(d)?`${d} ${s.has(d)?"changed":"added"}`:d).join(", ");return u`<li><span class="npm-extension is-warn npm-compare-install" data-tooltip="${i.map(({version:d},f)=>`${d}: ${a[f].map(([m,h])=>`${m}: ${h}`).join("; ")||"none"}`).join(" \xB7 ")}" .tooltipContent="${wo("Install scripts",i,a.map((d,f)=>l(d,f===a.length-1?r:[])))}"><span>${n.length===1?"Install script":"Install scripts"}</span><span class="npm-extension-count">${p}</span></span></li>`}var ZC=8;function tB(e,t){let n=o=>t.get(o)?.files??[],r=(o,s)=>`${yb[t.get(o)?.severity]} npm-held-file ${s}`;return[Vs(r("held-runs-code","npm-files-runs"),"Runs code",n("held-runs-code"),o=>gC(o.found,o.added),$p(n("held-runs-code").map(o=>o.found)),null,!1),...KN(t),rb("npm-compare-large","Large new code",n("large-code"),o=>ge(o.bytes)),GN(t.get("now-unreadable")),Vs(r("held-obfuscated","npm-files-obfuscated"),"Obfuscated",n("held-obfuscated"),o=>`${sh(o.found)}${o.added?`, new since ${e[0].version}`:""}`),rb("npm-compare-binary","Binary code",n("binary-code"),o=>`${ge(o.bytes)}, not UTF-8 or holding a NUL`)]}function nB(e){let t=e?.hosts??[],n=t.map(({host:s,places:i})=>{let a=i.slice(0,ZC).map(({path:l,line:p})=>`${l}, line ${p}`);return{path:s,at:i.length>a.length?[...a,`and ${(i.length-a.length).toLocaleString("en")} more files`]:a}}),[r]=t,o=t.length===1&&r.places.length===1?{path:r.path,line:r.line,query:r.host}:null;return Vs("is-warn npm-compare-hosts",n.length===1?"New host":"New hosts",n,s=>s.at,n.length===1?n[0].path:null,o&&(s=>s.currentTarget.dispatchEvent(new CustomEvent("compare-open-line",{detail:o,bubbles:!0,composed:!0}))))}function rb(e,...t){return Vs(`npm-compare-file ${e}`,...t)}function Vs(e,t,n,r,o=null,s=null,i=!0){if(n.length===0)return g;let a=n.slice(0,ZC),l=n.length>a.length?`and ${(n.length-a.length).toLocaleString("en")} more`:null,p=h=>[r(h)].flat(),d=`${t}: ${[...a.map(h=>`${h.path} (${p(h).join("; ")})`),...l?[l]:[]].join(", ")}`,f=u`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${a.map(h=>u`<span class="compare-tip-path">${h.path}</span><span class="compare-tip-said">${p(h).length>1?u`<span class="compare-tip-lines">${p(h).map(b=>u`<span>${b}</span>`)}</span>`:r(h)}</span>`)}</div>${l?u`<div class="compare-tip-note">${l}</div>`:g}</div>`,m=u`${i?u`<span>${t}</span>`:u`<span class="sr-only">${t}</span>`}${o!==null||n.length>1?u`<span class="npm-extension-count">${o??n.length.toLocaleString("en")}</span>`:g}`;return s?u`<li><button type="button" class="${`npm-extension is-open ${e}`}" data-tooltip="${d}" .tooltipContent="${f}" @click="${s}">${m}</button></li>`:u`<li><span class="${`npm-extension ${e}`}" data-tooltip="${d}" .tooltipContent="${f}">${m}</span></li>`}function rB(e,t){let{version:n}=e.at(-1),r=t.get("held-non-registry-deps")?.dependencies??[],o=t.get("held-unused-deps")?.dependencies??[],s=a=>a.some(l=>l.added)?`; new since ${e[0].version}: ${a.filter(l=>l.added).map(({name:l})=>l).join(", ")}`:"",i=[];if(r.length>0){let a=r.filter(l=>l.added).map(l=>`${l.name} was ${l.was??"none"}`);i.push(u`<li><span class="npm-extension is-warn npm-compare-registry" data-tooltip="${`From elsewhere than npm's registry: ${r.map(l=>`${l.name} ${l.now}`).join(", ")}${s(r)}`}" .tooltipContent="${wo("From elsewhere than npm's registry",[e.at(-1)],[ob(r.map(l=>[l.name,l.now,l.added]))],a.length>0?`New since ${e[0].version}: ${a.join(", ")}`:null)}"><span>Non-registry deps</span><span class="npm-extension-count">${r.length.toLocaleString("en")}</span></span></li>`)}if(o.length>0){let[a,l]=o.length===1?["it","its"]:["them","their"];i.push(u`<li><span class="npm-extension is-warn npm-compare-unimported" data-tooltip="${`Imported by nothing of ${n}: ${o.map(({name:p,range:d})=>`${p} ${d}`).join(", ")}${s(o)}`}" .tooltipContent="${wo(`Nothing imports ${a}`,[e.at(-1)],[ob(o.map(({name:p,range:d,kind:f,added:m})=>[f?`${p} (${f})`:p,d,m]))],`No code file of ${n} names ${a} as an import would, nor does an install script; npm installs ${a} all the same, running ${l} install scripts`)}"><span>Unused deps</span><span class="npm-extension-count">${o.length.toLocaleString("en")}</span></span></li>`)}return i}function oB(e){return e?u`<li><span class="npm-extension is-warn npm-compare-published" data-tooltip="${S1(e.published)}">${Rh(e.published)}</span></li>`:g}function QC(e,t){if(!t)return g;let n=t.at(-1),r=e.length>1?t[0]:n;if(r.length===0&&n.length===0)return g;let o=n.length===0?"is-cleared":`sev-${JC(n)}`,s=n.filter(d=>!r.includes(d)).length,i=r.filter(d=>!n.includes(d)).length,a=wo("Advisories affecting",e,t.map(d=>d.length===0?u`<span class="compare-tip-none">none</span>`:u`<span class="compare-tip-count">${d.length}</span><span class="compare-tip-severities">${La.map(f=>[f,d.filter(m=>sb(m)===f).length]).filter(([,f])=>f>0).map(([f,m])=>u`<span class="${`compare-tip-severity sev-${f}`}">${m} ${f}</span>`)}</span>`),e.length>1?`${s} new \xB7 ${i} fixed`:null),l=`Advisories affecting ${e.map(({version:d},f)=>`${d}: ${t[f].length}`).join(", ")}`,p=u`<span>Advisories</span><span class="npm-extension-count">${XC(r.length,n.length)}</span>`;return e.length>1?u`<li><button type="button" class="${`npm-extension npm-compare-advisories ${o}`}" aria-haspopup="dialog" data-tooltip="${l}" .tooltipContent="${a}" @click="${()=>sB(e,t)}">${p}</button></li>`:u`<li><span class="${`npm-extension npm-compare-advisories ${o}`}" data-tooltip="${l}" .tooltipContent="${a}">${p}</span></li>`}var ob=e=>u`<span class="compare-tip-lines">${e.map(([t,n,r])=>n==null?u`<span class="compare-tip-none">${t}: none</span>`:u`<span class="${r?"is-flagged":g}">${t}: <code>${n}</code></span>`)}</span>`,wo=(e,t,n,r=null)=>u`<div class="compare-tip"><div class="compare-tip-head">${e}</div><div class="compare-tip-rows">${t.map(({version:o},s)=>u`<span class="compare-tip-version">${o}</span><span class="compare-tip-said">${n[s]}</span>`)}</div>${r?u`<div class="compare-tip-note">${r}</div>`:g}</div>`;function sB([e,t],[n,r]){let o=FC(),s=[["new",`New in ${t.version}`,r.filter(i=>!n.includes(i))],["kept",`Still affecting ${t.version}`,r.filter(i=>n.includes(i))],["fixed",`Fixed in ${t.version}`,n.filter(i=>!r.includes(i))]].filter(([,,i])=>i.length>0).map(([i,a,l])=>({status:i,heading:a,rows:l.map(p=>LC(p,o))}));fC({heading:`Advisories \xB7 ${e.name} ${e.version} \u2192 ${t.version}`,groups:s,isCurrent:o})}function iB(e,t,n){if(e===null||e>=n)return!1;let r=JC(t);return r===void 0||La.indexOf(e<=25?"critical":"high")<La.indexOf(r)}function e_(e,t,n=null){let r=e.at(-1),o=e.map(s=>Na({npm:s})?.scores??null);return!o.at(-1)||n?[]:MC.flatMap(([s,i,a,l])=>{let p=o.map(m=>m?Math.round(m[s]*100):null),d=p.at(-1),f=e.length>1?p[0]:d;return d===null||d>=a?[]:s==="vulnerability"&&!(t&&iB(d,t.at(-1),a))?[]:s==="maintenance"&&r.manifest?.deprecated&&d>=MN?[]:[u`<li><a class="${`npm-extension npm-socket-score ${tb(d,l)}`}" href="${bu({npm:r})}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Socket's ${i.toLowerCase()} score: ${e.map(({version:m},h)=>`${p[h]??"none"} for ${m}`).join(", ")}`}" .tooltipContent="${wo(`Socket's ${i.toLowerCase()} score`,e,p.map(m=>m===null?u`<span class="compare-tip-none">none</span>`:u`<span class="${`compare-tip-score ${tb(m,l)}`}">${mu(m)}${m}</span>`),s==="vulnerability"?`Shown under ${a}, where worse than the advisories found`:`Shown under ${a}`)}">${mu(d)}<span>${i}</span><span class="npm-extension-count">${XC(f,d)}</span></a></li>`]})}var aB={critical:"is-unpopular",high:"is-low",moderate:"is-mid"};function t_({known:e,scope:t,account:n}={}){return e?n?`Published with provenance in ${t}, the scope of ~${n}, an account that publishes one of npm's most downloaded packages`:t?`Published with provenance in ${t}, the scope of one of npm's most downloaded packages, which only its owner publishes in`:"Published by an account that publishes one of npm's most downloaded packages":null}function n_(e,t=null,n=!1){let{tier:r,level:o,severity:s}=e,i=t?.total.toLocaleString("en"),a=n?`npm-extension npm-popularity npm-downloads-tier ${aB[s]??"is-low"}`:`npm-downloads-tier ${o}`,l=n?t_(e):null,p=[t&&`${i} downloads/month, ${t.month}`,l].filter(Boolean).join(" \xB7 ");return u`<span class="${a}" data-tooltip="${p||g}" .tooltipContent="${t||l?u`${t?u`<div><strong>${i}</strong> downloads/month</div><div class="compare-tip-note">${t.month}</div>`:g}${l?u`<div class="compare-tip-note">${l}</div>`:g}`:null}">${Zd(r??1/0)}</span>`}function lB(e,t){let n=ib(e);return t?u`<li>${n_(t,n.status==="ready"&&n.downloads?d1(n.downloads):null,!0)}</li>`:g}var cB=u`<span class="npm-downloads-tier is-unpopular" data-tooltip="No downloads counted by npm, which counts a package's from the day after it was first published">unpopular</span>`,Ea=e=>new Intl.NumberFormat("en",{style:"unit",unit:e,unitDisplay:"long"}),Fa={minute:Ea("minute"),hour:Ea("hour"),day:Ea("day"),month:Ea("month"),year:Ea("year")};function r_(e){let t=Math.max(0,Math.floor(e/6e4)),n=Math.floor(t/1440);return t<60?Fa.minute.format(t):t<1440?Fa.hour.format(Math.floor(t/60)):n<60?Fa.day.format(n):n<730?Fa.month.format(Math.floor(n/30.44)):Fa.year.format(Math.floor(n/365.25))}function dB({compared:e},{created:t,gap:n}){if(!t)return g;let[r,o]=e,s=r_(Math.abs(n)),i=[`First published on ${Mh(t)}`,`${s} ${n>=0?"before":"after"} ${o.version} was`],a=`npm had no package by its name when ${n>=0?r.version:"either version"} was published`;return u`<span class="npm-dependency-flag is-new" data-tooltip="${[...i,a].join(" \xB7 ")}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">New package</div>${i.map(l=>u`<div>${l}</div>`)}<div class="compare-tip-note">${a}</div></div>`}">${n>=0?`${s} old`:"published later"}</span>`}function o_(e,t){let n=eu(e.flags);if(t!=="added"||!e.level)return[n,g];let r=e.month?bh({total:e.month.total,from:new Date(e.month.from)}):null;return[n,e.uncounted?cB:n_(e,r),e.compared?dB(e,e):g]}function uB(e,t){let{counts:n}=Cr(t),r=zN.filter(o=>n.has(o));return r.length===0?g:u`<ul class="npm-extensions" aria-label="Readable files">${r.map(o=>zC(e,t,o))}</ul>`}function wb(e){let t=e.slice(e.lastIndexOf("/")+1),n=/\.d\.[cm]?ts$/iu.exec(t);if(n&&n.index>0)return n[0].toLowerCase();let r=t.lastIndexOf(".");return r>0?t.slice(r).toLowerCase():""}function _C(e,t,n=new Map){let r=new Map;for(let o of e){let s=wb(o),i=r.get(s)??{extension:s,files:0,bytes:0,lines:null};i.files++,i.bytes+=t.get(o)??0,n.has(o)&&(i.lines=(i.lines??0)+n.get(o)),r.set(s,i)}return[...r.values()].toSorted((o,s)=>s.files-o.files||o.extension.localeCompare(s.extension))}var pB=/^(?:package\.json|readme(?:\.md)?)$/iu,Oa=e=>pB.test(e)||Ca.test(e);function fB(e,t,n=new Map){let r=e.filter(Oa),o=new Set(e.filter(l=>!Oa(l)).map(wb)),{files:s,bytes:i,lines:a}=_C(r,t,n).reduce((l,p)=>({files:l.files+p.files,bytes:l.bytes+p.bytes,lines:p.lines===null?l.lines:(l.lines??0)+p.lines}),{files:0,bytes:0,lines:null});return{package:r.length>0?{files:s,bytes:i,lines:a}:null,extensions:_C(e,t,n).filter(l=>o.has(l.extension))}}var RC=({bytes:e,lines:t})=>t===null?ge(e):`${ge(e)} \xB7 ${t.toLocaleString("en")} LoC`;function mB(e,t){let{types:n,extensions:r}=Cr(t);return!n.package&&n.extensions.length===0?g:u`<ul class="npm-extensions" aria-label="File types">${n.package?nb(e,{id:"package",label:"Package",keeps:Oa},u`<span>Package</span>`,n.package.files,{tooltip:`package.json, readme and license: ${RC(n.package)}`}):g} ${n.extensions.map(o=>nb(e,{id:`extension:${o.extension}`,label:o.extension||"No extension",keeps:s=>r.get(s)===o.extension},u`<span class="npm-extension-name">${o.extension||"no extension"}</span>`,o.files,{tooltip:RC(o)}))}</ul>`}function s_(e,t,n){let r=[["languages","Languages",t],["readable","Readable",uB(e,n)],["types","File types",mB(e,n)],["socket","Socket",TN(e)]].filter(([,,o])=>o!==g);return r.length===0?g:u`<dl class="npm-contents" aria-label="Contents">${r.map(([o,s,i])=>u`<div class="${`npm-contents-${o}`}"><dt>${s}</dt><dd>${i}</dd></div>`)}</dl>`}function i_(e,t){return e.size===0?g:Ln({title:"Binary files",count:e.size,list:!0,body:u`<ul class="bundles-sources-list">${[...e].map(n=>u`<li><div class="bundles-source-row is-resource">${kn(n,"binary")}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${n}">${n}</span> ${t.has(n)?u`<span class="bundles-source-size">${ge(t.get(n))}</span>`:g}</div></li>`)}</ul>`})}var yu=({severity:e})=>$v.indexOf(e),gB=(e,t)=>e.reduce((n,r,o)=>n||r.name.localeCompare(t[o].name),0);function a_(e,t,n){return e.map(r=>({row:r,path:n(r),flags:t(r).toSorted((o,s)=>yu(o)-yu(s)||o.name.localeCompare(s.name))})).toSorted((r,o)=>(o.flags.length>0)-(r.flags.length>0)||r.flags.length>0&&(yu(r.flags[0])-yu(o.flags[0])||o.flags.length-r.flags.length||gB(r.flags,o.flags))||r.path.localeCompare(o.path)).map(({row:r})=>r)}function vb(e){return{...C1(e),files:VC,badges:KC,dependencyTags:o_,reviewVerdictLimit:TC}}var $b=class extends N{static styles=[...N.styles,P(ot)];static properties={reportName:{type:String},workspaceNames:{type:Array},existingNames:{type:Object},_choice:{state:!0},_newName:{state:!0}};constructor(){super(),this.reportName="",this.workspaceNames=[],this.existingNames=new Set,this._choice="replace",this._newName=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_onClose=()=>this._finish({action:"cancel"});_onCancel=()=>this._finish({action:"cancel"});_onChoiceChange=t=>{this._choice=t.target.value};_onNewNameInput=t=>{this._newName=t.target.value};_onNewNameKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onConfirm())};_onConfirm=()=>{if(this._choice==="rename"){let t=(this._newName??"").trim();if(this._renameError(t)!==null)return;this._finish({action:"rename",newName:t});return}this._finish({action:"replace"})};_replaceHint(){let t=this.workspaceNames.length;if(t===0)return u`<span class="lwd-option-hint">The local file will be overwritten.</span>`;let n=t===1?u`workspace <strong>"${this.workspaceNames[0]}"</strong>`:u`<strong>${t}</strong> workspaces (${this.workspaceNames.join(", ")})`;return u`<span class="lwd-option-hint">The local file will be overwritten. When sync is online, the new bytes are also uploaded to ${n} so the cloud copy matches.</span>`}_renameError(t){return t?t===this.reportName?"Pick a name different from the original.":t.includes("\0")?"The new name cannot contain a NUL byte.":t.includes("/")||t.includes("\\")?'The new name cannot contain "/" or "\\".':this.existingNames.has(t)?`A file named "${t}" already exists \u2014 pick something else.`:null:"Enter a new name."}render(){let t=this._choice==="rename",n=(this._newName??"").trim(),r=t?this._renameError(n):null,o=r!==null,s=t?"Rename":"Replace",i=t?"primary":"danger",a=this.workspaceNames.length>0?u`<span class="lwd-option-hint">Saved as an unfiled report — the renamed copy isn't added to any workspace.</span>`:g;return u`<dialog @close="${this._onClose}"><header><h3>Import conflict</h3></header><p class="lwd-body"><strong>"${this.reportName}"</strong> already exists with different content.</p><fieldset class="lwd-choice"><legend>What should happen?</legend><label class="lwd-option"><input type="radio" name="icd-choice" value="replace" ?checked="${this._choice==="replace"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Replace</span> ${this._replaceHint()}</span></label> <label class="lwd-option"><input type="radio" name="icd-choice" value="rename" ?checked="${this._choice==="rename"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Rename to</span> <input type="text" class="nwd-input lwd-rename-input" maxlength="200" .value="${this._newName}" ?disabled="${!t}" @input="${this._onNewNameInput}" @keydown="${this._onNewNameKeydown}" @focus="${()=>{this._choice="rename"}}"> ${a} ${r===null?g:u`<p class="lwd-rename-error">${r}</p>`}</span></label></fieldset><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="${i}" ?disabled="${o}" @click="${this._onConfirm}">${s}</button></footer></dialog>`}};customElements.define("import-conflict-dialog",$b);function l_({name:e,workspaceNames:t,existingNames:n}={}){let r=n instanceof Set?n:new Set(n??[]);return new Promise(o=>{let s=document.createElement("import-conflict-dialog");Object.assign(s,{reportName:e??"",workspaceNames:Array.isArray(t)?t:[],existingNames:r,_newName:hB(e??"",r)}),s.addEventListener("resolve",i=>{s.remove(),o(i.detail)}),s.addEventListener("modal-conflict",()=>{s.remove(),o({action:"cancel"})}),document.body.append(s)})}function hB(e,t){if(typeof e!="string"||e.length===0)return"";let n=e.lastIndexOf("."),r=n>0?e.slice(0,n):e,o=n>0?e.slice(n):"",s=r.replace(/-\d+$/u,"");for(let i=2;i<1e3;i++){let a=`${s}-${i}${o}`;if(!t.has(a))return a}return""}var cn=null,Ba=null,wu=0;function bB(){return cn||(cn=document.createElement("div"),cn.id="app-toast",cn.setAttribute("role","status"),cn.setAttribute("aria-live","polite"),document.body.append(cn),cn)}function Ge(e,{kind:t="info",duration:n=5200}={}){let r=bB(),o=++wu;clearTimeout(Ba),Ba=null,r.className=t,r.textContent=e,requestAnimationFrame(()=>{wu===o&&r.classList.add("visible")});let s=()=>{wu===o&&yB()};return n>0&&(Ba=setTimeout(s,n)),s}function yB(){wu++,cn&&(clearTimeout(Ba),Ba=null,cn.classList.remove("visible"))}function c_(e,t,n){if(e.currentView!=="findings"&&e.currentView!=="files"&&e.currentView!=="links"||!e.currentManagedTeam)return!1;let r=t.find(i=>i.id===e.currentManagedTeam);if(n.has(`team:${e.currentManagedTeam}`)||!r||e.managedReports.some(i=>n.has(i.id)))return!0;let o=new Set(r.reports.filter(i=>e.currentManagedReport!==null||i.visible!==!1).map(i=>i.id));if(e.currentManagedReport!==null)return!o.has(e.currentManagedReport);let s=new Set(e.managedReports.map(i=>i.id));return o.size!==s.size||[...o].some(i=>!s.has(i))}async function d_(e,t,{fetchCatalog:n,isCurrent:r,render:o,replaceRoute:s}){let i=yr(e);if(!i||!r())return!0;let a=["admin","manage"].includes(e.managedSession?.role),l,p=null;if(e.currentManagedTeam!=null||!a){let f=m=>m.bundles?.some(h=>h.id===i);p=t.find(m=>m.id===e.currentManagedTeam&&f(m))??t.find(f)}if(p)l=As(t);else if(a)try{l=(await n()).map(br)}catch(f){if(f.status!==401&&f.status!==403)throw f;l=[]}else l=[];if(!r())return!0;let d=l.find(f=>f.managedId===i);return d?(e.bundles=l,e.currentManagedTeam=p?.id??null,o(),s(wr(t,d,e.currentManagedTeam,e.bundleDetailsTab,vr(e),l)),!0):!1}async function u_({bundleId:e,teamId:t,bundleTab:n,file:r,line:o,endLine:s,compareId:i,compareMode:a},l,p,d){let f=l.find(k=>k.managedId===e);if(!f||!p()||!_())return!1;let m=Mg(f.integrity,k=>k.managedId===e),h=c.bundleDetails?.managedId===e&&c.bundleDetails.integrity===f.integrity&&!c.bundleDetails.error?c.bundleDetails:null;try{c.bundles=l,Bt(),gr(f.integrity,n),n==="code"&&r!=null&&(c.bundleCodeFileRequest={bundle:f.integrity,file:r,...o==null?{}:{line:o},...s==null?{}:{endLine:s}});let k=n==="compare"&&i!=null?Is(l,f.integrity).find($=>$.managedId===i):null;k&&(c.bundleCompare={bundle:f.integrity,target:k.integrity,mode:kl(a)}),c.bundleDetails=m??h,c.currentManagedTeam=t,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),d(),document.querySelector("#main-content")?.scrollTo({top:0})}catch(k){return p()&&k.name!=="AbortError"&&Ge(`Couldn't open bundle: ${k.message}`,{kind:"error"}),!1}let b=c.bundleDetails,y=()=>_()&&c.currentView==="bundles"&&c.selectedBundle===f.integrity&&c.bundles.some(k=>k.managedId===e&&k.integrity===f.integrity)&&c.bundleDetails===b,w=(k,$)=>(k?.name==="AbortError"||(p()?$&&Ge(`Couldn't open bundle: ${k.message}`,{kind:"error"}):y()&&(c.bundleDetails={integrity:f.integrity,kind:f.kind,size:f.size,managedId:e,error:k.message},O())),!1),v=me(),x;for(;;){let k=Le();try{x=await Pc(e,{signal:k});break}catch($){if($?.name==="AbortError"&&k.aborted&&y())continue;return w($,!1)}}try{if(x.integrity!==f.integrity)throw new Error("the metadata is for another version of this bundle");if(y()){let k=hi(x,x.integrity),$=m?.integrity===k.integrity?Object.assign(m,{fileHashes:k.fileHashes,fileSizes:k.fileSizes,lineCounts:k.lineCounts,codeStats:k.codeStats},k.edges?{edges:k.edges}:{}):k;$.managedId=e,c.bundleDetails=$,O({animate:!1})}return p()&&v===me()&&c.bundleDetails?.managedId===e&&c.selectedBundle===f.integrity}catch(k){return w(k,!0)}}function wB(e){let t=1/0,n=Date.now()+5e3;for(let r of e)for(let o of r.bundles??[])["stasis","sourcemap"].includes(o.kind)&&o.summary==null&&(t=Math.min(t,Math.max(n,o.summaryRetryAt??0)));return t}function p_(e){let t=null,n=null,r=null;return async({generation:o,session:s,signal:i,reuse:a=!1,revision:l=null})=>{if(i.aborted)return null;let p=JSON.stringify([o,s?.id,s?.role,s?.csrfToken]);if(r!==p&&(t?.controller.abort(),t=null,n=null,r=p),n&&Date.now()<n.expiresAt&&(a||l!==null&&l===n.revision))return n.teams;if(!t||t.signal.aborted||l!==null&&t.revision!==l){t?.controller.abort(),n=null;let m=new AbortController,h=AbortSignal.any([i,m.signal]),b={controller:m,signal:h,promise:null,revision:l};t=b;let y=null;b.promise=e({fallback:null,signal:h,onRevision:w=>{y=w}}).then(w=>h.aborted||r!==p?null:(w!==null&&(n={teams:w,revision:y,expiresAt:wB(w)}),w)).finally(()=>{t===b&&(t=null)})}let d=t,f=()=>d.controller.abort();i.addEventListener("abort",f,{once:!0});try{let m=await d.promise;return i.aborted||d.signal.aborted?null:m}finally{i.removeEventListener("abort",f)}}}function kb(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function f_(e){let t=e.summary,n=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&n.push(ge(e.byteSize)),t&&[t.files,t.lines].every(r=>Number.isSafeInteger(r)&&r>=0)&&n.push(`${t.files.toLocaleString()} files`,`${t.lines.toLocaleString()} LoC`),n.join(" \xB7 ")}function m_(e,t=""){let n=t.trim().toLowerCase(),r=o=>String(o??"").toLowerCase().includes(n);return(Array.isArray(e)?e:[]).flatMap(o=>{let s=(o.reports??[]).filter(a=>r(a.filename)||r(oe(a.filename??""))),i=(o.bundles??[]).filter(a=>r(a.filename));return r(o.name)||s.length>0||i.length>0?[{team:o,reports:s,bundles:i}]:[]})}var vu=class{constructor(){this.expanded=new Map}sync(t,n=!1){let r=JSON.stringify([t.managedSession?.id,t.managedSession?.role,t.managedSession?.csrfToken]);r!==this.owner&&(this.expanded.clear(),this.focus="",this.owner=r);let o=t.managedTeams??[];for(let d of this.expanded.keys())o.some(f=>f.id===d)||this.expanded.delete(d);let s=yr(t),i=["findings","files","links"].includes(t.currentView)?t.currentManagedReport:null,a=s?"bundles":"reports",l=o.find(d=>d.id===t.currentManagedTeam&&(s?d.bundles?.some(f=>f.id===s):d.reports?.some(f=>f.id===i))),p=JSON.stringify([a,s||i,l?.id]);if(!(!n&&p===this.focus)&&(this.focus=p,l)){let d=this.expanded.get(l.id)??new Set;d.add(a),this.expanded.set(l.id,d)}}toggle(t,n){let r=this.expanded.get(t)??new Set;r.has(n)?r.delete(n):r.add(n),this.expanded.set(t,r)}shown(t,n,r,o){return!r||o||this.expanded.get(t)?.has(n)===!0}};function g_(e){let t=String(e??"").split(/[\s\-_/.]+/u).filter(Boolean);if(t.length<2)return Array.from(t[0]??"").slice(0,2).join("");let n=t.slice(0,2).map(r=>Array.from(r)[0]).join("");return/^\p{Ll}/u.test(n)?n:n.toUpperCase()}var Pn=null,b_=()=>Promise.resolve(!0);function y_(e){b_=e}function vo(){Pn?.controller.abort(),Pn=null}function vB(e,t,n){let{promise:r,resolve:o}=Promise.withResolvers(),s=!1,i=d=>{clearTimeout(p),t.removeEventListener("abort",a),o(d)},a=()=>i(!1),l=()=>(!s&&!t.aborted&&(s=!0,clearTimeout(p),Promise.resolve().then(()=>n()&&e(t)).then(d=>i(!!d&&n()),()=>i(!1))),r),p=setTimeout(l,1e3);return t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),{promise:r,start:l}}function w_(e,t){return t.aborted?Promise.resolve(!1):new Promise(n=>{let r=s=>{t.removeEventListener("abort",o),n(s)},o=()=>r(!1);t.addEventListener("abort",o,{once:!0}),e.then(r,()=>r(!1))})}function _r({catalogOnly:e=!1,hydrate:t}={}){let n=c.managedSession,r=Le(),o=["findings","files","links"].includes(c.currentView),s=["workspace-reports","workspace-bundles"].includes(c.currentView),i=s||o&&(!e||Pn?.teamId===c.currentManagedTeam&&!Pn.signal.aborted)?c.currentManagedTeam:null;if(!_()||!n||n.role==="none"||n.publicShare&&!i)return vo(),t?Promise.resolve(!1):void 0;let a=c.managedTeams?.find(y=>y.id===i)?.reports.find(y=>y.id===c.currentManagedReport&&y.visible===!1)?.id??null,l=JSON.stringify([i,a,n.id,n.role,n.csrfToken,!!n.publicShare]);if(Pn?.key!==l||Pn.signal.aborted){vo();let y=new AbortController,w={key:l,controller:y,signal:y.signal,teamId:i,reportId:a,version:0,target:null};w.current=(v=w.signal)=>!v.aborted&&!w.signal.aborted&&Pn===w&&_()&&c.managedSession?.id===n.id&&c.managedSession?.role===n.role&&c.managedSession?.csrfToken===n.csrfToken&&!!c.managedSession?.publicShare==!!n.publicShare,Pn=w,$B(w)}let p=Pn;if(e||s||!i)return p.target?.ready;let d=rt(c.reports),f=p.target;if(f?.view===r&&f.reports===d&&!f.signal.aborted)return f.ready;f?.controller.abort();let m=new AbortController,h=AbortSignal.any([m.signal,p.signal,r]),b={controller:m,signal:h,view:r,reports:d,version:f?.reports===d?f.version:0};return p.target=b,b.current=()=>p.current()&&!h.aborted&&p.target===b&&c.currentManagedTeam===i&&rt(c.reports)===d,b.hydration=t?vB(async y=>{let w=p.version,v=await t(y);return v&&b.current()&&(b.version=w),v},h,b.current):null,b.ready=b.hydration?.promise,(p.version||p.finished)&&(b.hydration?b.hydration.start():b.version<p.version&&Sb(p,b,p.signal).then(y=>(!y&&b.current()&&(vo(),_r()),y))),b.ready}function $B(e){let{signal:t,controller:n,current:r}=e;Xk(e.teamId,{signal:t,reportId:e.reportId,onTeams:async(o,s)=>{let i=()=>r(o);return i()?await b_(i,o,s)&&i():!1},onUpdate:o=>r(o)?(e.version++,Sb(e,e.target,o)):!1,onClose:()=>{r()&&document.dispatchEvent(new Event("managed-feed-closed")),n.abort()}}).catch(o=>{r()&&console.warn("managed: team feed failed",o)}).finally(()=>{e.finished=!0,r()&&e.target?.hydration?.start()})}async function Sb(e,t,n){if(!e.current(n))return!1;if(!t?.current())return!0;if(!t.refresh||t.refresh.controller.signal.aborted){let a=new AbortController,l={controller:a,promise:null},p=AbortSignal.any([a.signal,t.signal]);t.refresh=l,l.promise=kB(e,t,p).catch(()=>!1).finally(()=>{t.refresh===l&&(t.refresh=null)})}let r=t.refresh,o=AbortSignal.any([n,t.signal,r.controller.signal]),s=()=>r.controller.abort();n.addEventListener("abort",s,{once:!0});let i;try{i=await w_(r.promise,o)}finally{n.removeEventListener("abort",s)}return e.current(n)?t.current()?i?t.version<e.version?Sb(e,t,n):!0:!1:!0:!1}async function kB(e,t,n){if(t.hydration&&!await w_(t.hydration.start(),n))return!1;for(;t.current()&&!n.aborted&&t.version<e.version;){let r=e.version,o=h_(e.teamId,n),s=c.managedReports.filter(a=>t.reports.some(l=>l._managedReportId===a.id));if(!(await Promise.all(s.flatMap(a=>[xb(a.id,{signal:n,readAnnotations:o}),xd(a.id,{signal:n,readAnnotations:o})]))).every(Boolean)||!t.current()||n.aborted)return!1;t.version=r}return!n.aborted&&t.current()}var v_=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{width:260px;flex-shrink:0;height:100%;background:var(--surface);backdrop-filter:var(--glass-blur);border-right:1px solid var(--border);display:flex;flex-direction:column;transition:width .15s ease-out;overflow:hidden}:host(.collapsed){width:32px}:host([inert]) .brand-tag,:host([inert]) .sidebar-search,:host([inert]) .sidebar-actions,:host([inert]) #file-list,:host([inert]) #sidebar-toggle,:host([inert]) #sidebar-home,:host([inert]) #sidebar-rail,:host([inert]) #encryption-toggle,:host([inert]) #storage-status{visibility:hidden}:host(.collapsed) .brand,:host(.collapsed) .sidebar-search,:host(.collapsed) #encryption-toggle,:host(.collapsed) #file-list{display:none}:host(.collapsed) .sidebar-header{padding:.5rem 0;justify-content:center}:host(.collapsed) .sidebar-actions{padding:.35rem 0;flex-direction:column;justify-content:center}:host(.collapsed) sidebar-delete-current,:host(.collapsed) #storage-status,:host(.collapsed) #sync-status .sync-label{display:none}:host(.collapsed) #sync-status{padding:.25rem;border:0}:host(.collapsed) #view-as-status,:host(.collapsed) #public-status,:host(.collapsed) .auth-login{display:none}:host(.collapsed) #auth-status[data-authed="1"]{padding:.2rem}:host(.collapsed[data-view-as]) #auth-status .user-avatar{box-shadow:0 0 0 1.5px var(--surface),0 0 0 3px var(--accent)}#sidebar-home,#sidebar-rail{display:none}:host(.collapsed) #sidebar-home{display:grid;margin:0 auto;padding:.3rem 0}:host(.collapsed) #sidebar-rail{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.35rem 0;list-style:none;overflow-y:auto;overscroll-behavior:none;scrollbar-width:none}.rail-item{width:26px;padding:.25rem 0 .2rem;display:grid;justify-items:center;gap:.15rem;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);font:inherit;font-size:.58rem;font-weight:600;line-height:1;white-space:nowrap;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.current{color:var(--accent);background:rgb(from var(--text) r g b / .1)}&:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}}:host([data-mode="managed"]:not([data-workspace-access])) .sidebar-search,:host([data-mode="managed"]:not([data-authenticated])) .sidebar-actions{display:none}.sidebar-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem .4rem;.brand{flex:1;min-width:0;display:flex;align-items:center;gap:.4rem;font-size:.95rem;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;user-select:none}.brand-button{display:inline-flex;align-items:center;gap:.5rem;background:transparent;border:0;padding:0;margin:0;font:inherit;color:inherit;border-radius:var(--ui-radius, 4px);&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}.brand-tag{padding:.08rem .25rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;font:inherit;font-size:.65rem;font-weight:500;color:var(--muted);text-transform:lowercase;letter-spacing:.02em;&[role=button]{cursor:default}&[role=button]:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}}@media(display-mode:window-controls-overlay){.sidebar-header{min-height:env(titlebar-area-height,0px);padding-left:max(.75rem,env(titlebar-area-x,0px));-webkit-app-region:drag;app-region:drag;.brand-button,.brand-tag,#encryption-toggle{-webkit-app-region:no-drag;app-region:no-drag}#sidebar-toggle{display:none}}}#sidebar-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}}#encryption-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.encrypted{color:var(--accent)}&.locked-pending{color:light-dark(#b25b00,#f0a060);outline:1px dashed currentcolor;outline-offset:-2px}}#encryption-toggle[hidden]{display:none!important}.sidebar-search{display:flex;align-items:center;margin:0 .55rem .25rem;padding:0 .25rem 0 .55rem;background:rgb(from var(--bg) r g b / .45);border:1px solid var(--border);border-radius:var(--ui-radius, 7px);transition:background .12s,border-color .12s;-webkit-app-region:no-drag;app-region:no-drag;&:has(input:focus){border-color:var(--accent);background:rgb(from var(--text) r g b / .06)}.sidebar-search-icon{flex-shrink:0;color:var(--muted);pointer-events:none;margin-right:.4rem}& input{flex:1;min-width:0;padding:.3rem 0;background:transparent;color:var(--text);border:0;outline:none;font:inherit;font-size:.78rem;&::placeholder{color:var(--muted)}&:focus::placeholder{color:transparent}&::-webkit-search-cancel-button{display:none}}}sidebar-view-button{display:contents}sidebar-view-button[hidden]{display:none!important}.sidebar-view-btn{position:relative;flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 3px);padding:0;margin-left:2px;transition:background .12s,color .12s;sidebar-view-button+sidebar-view-button>&{margin-left:.4rem}sidebar-view-button:last-of-type>&{margin-right:.1rem}& svg{width:14px;height:14px}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.active{color:var(--accent);background:rgb(from var(--text) r g b / .1)}.view-btn-count{position:absolute;top:-4px;right:-4px;background:var(--bg);color:color-mix(in srgb,var(--muted),var(--text) 15%);font-size:8.5px;font-weight:600;border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px;font-variant-numeric:tabular-nums;pointer-events:none}&.active .view-btn-count{color:var(--accent)}}#file-list{list-style:none;flex:1;overflow-y:auto;overscroll-behavior:none;scrollbar-gutter:stable;-webkit-app-region:no-drag;app-region:no-drag;padding:0 .35rem .25rem 0;margin:0;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:5px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.file-group-header{display:flex;align-items:center;justify-content:space-between;padding:.45rem .35rem .2rem .55rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);user-select:none;&:first-child{padding-top:.25rem}}.file-group-header.workspace-header .workspace-header-actions{display:flex;align-items:center;gap:.35rem}.workspace-add{width:18px;height:18px;display:grid;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);border-color:var(--accent)}}.file-item:is(.workspace-item,.team-item){display:block;border-radius:var(--ui-radius, 0 5px 5px 0)}.workspace-heading{display:flex;align-items:stretch;gap:.15rem}.workspace-meta{display:flex;align-items:center;justify-content:space-between;gap:.35rem;padding:0 .3rem .2rem calc(2rem - 3px);color:var(--muted);font-size:.68rem;line-height:1.3;white-space:nowrap;user-select:none}.workspace-findings{min-width:0;overflow:hidden;text-overflow:ellipsis}.workspace-sections{display:inline-flex;flex-shrink:0;margin-left:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.workspace-sections button{padding:.06rem .25rem;border:0;background:transparent;color:var(--muted);font:inherit;font-size:.64rem;line-height:1.4;font-variant-numeric:tabular-nums;+button{border-left:1px solid var(--border)}&:hover:not(:disabled){background:var(--surface-active);color:var(--text)}&[aria-expanded=true]{background:rgb(from var(--accent) r g b / .1);color:var(--accent)}&:disabled{background:var(--surface-active);color:var(--muted)}}.workspace-share,.workspace-export,.workspace-leave{flex-shrink:0;width:22px;align-self:center;height:22px;display:none;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06);border-color:var(--accent)}}.file-item.team-item:focus-within .workspace-share{display:grid}@media(hover:none){.file-item.team-item .workspace-share{display:grid}}.workspace-leave:hover:not(:disabled){color:var(--critical, #f87171);border-color:var(--critical, #f87171)}@media(hover:hover){.file-item.team-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-export,.file-item.workspace-item:hover .workspace-leave{display:grid}}.workspace-rename-input{width:100%;box-sizing:border-box;background:var(--surface);color:var(--text);border:1px solid var(--accent);border-radius:var(--ui-radius, 3px);padding:0 .25rem;margin:-1px 0;font:inherit;font-size:.76rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;outline:none}.file-item.team-item .team-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item>.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;background:none;border:0;padding:.2rem .3rem .2rem 1.3rem;font-family:inherit;font-size:.78rem;text-align:left}.file-item.team-bundle-item .file-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item .file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}.file-item{list-style:none;position:relative}.file-item.current:after{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;background:var(--accent);border-radius:var(--ui-radius, 0 2px 2px 0);pointer-events:none}.file-item button.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;padding:.2rem .3rem .2rem .55rem;background:transparent;color:var(--text);border:1px solid transparent;border-radius:var(--ui-radius, 0 5px 5px 0);font-family:inherit;font-size:.78rem;text-align:left;&:hover{background:rgb(from var(--text) r g b / .04)}.file-icon{flex-shrink:0;color:var(--muted)}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}.file-item:is(.workspace-item,.team-item) button.file-name{flex:1;min-width:0;padding-left:calc(.55rem - 3px)}.file-item .file-count{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);opacity:.65;font-size:.68rem;font-weight:500;font-variant-numeric:tabular-nums}.file-item.current button.file-name{background:rgb(from var(--accent) r g b / .09);border-color:rgb(from var(--accent) r g b / .16);.file-icon,.file-count{color:var(--text)}}.file-item.content-hidden button.file-name .file-label{color:var(--muted)}.file-item:is(.workspace-item,.team-item):hover{background:rgb(from var(--text) r g b / .04)}.file-item:is(.workspace-item,.team-item) button.file-name:hover{background:transparent}.file-item:is(.workspace-item,.team-item).current{background:rgb(from var(--accent) r g b / .09);border-radius:var(--ui-radius, 0 5px 5px 0);box-shadow:inset 0 0 0 1px rgb(from var(--accent) r g b / .16)}.file-item:is(.workspace-item,.team-item).current button.file-name{background:transparent;border-color:transparent}:host-context(body.theme-paper) .file-item.current{background:transparent;box-shadow:none;& button.file-name{background:transparent;border-color:transparent}.file-name:after{content:"";position:absolute;inset:0;border:1px dashed var(--border);border-left:0;pointer-events:none}}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(prefers-reduced-motion:reduce){:host,*,*:before,*:after{transition:none!important}}.file-item.indented button.file-name{padding-left:1.3rem}.file-item.indented:before{content:"";position:absolute;left:.85rem;top:0;bottom:0;width:1px;background:var(--border)}.file-item.bundle-missing>.file-name,.file-item.report-missing>.file-name{display:flex;align-items:center;gap:.5rem;padding:.2rem .3rem .2rem 1.4rem;color:var(--muted);font-size:.78rem;font-style:italic;cursor:default;.file-icon{flex-shrink:0;color:var(--muted);font-style:normal}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}:host-context(body.theme-pink) .workspace-rename-input,:host-context(body.theme-pink) .file-item button.file-name .file-label,:host-context(body.theme-pink) .file-item.bundle-missing .file-label,:host-context(body.theme-pink) .file-item.report-missing .file-label{font-family:inherit}.file-item.dragging button.file-name{opacity:.4}.file-item.workspace-item.drag-over button.file-name,.file-item.indented.drag-over button.file-name{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent)}.file-group-header.drag-over{background:rgb(from var(--accent) r g b / .12);border-radius:var(--ui-radius, 4px)}.sidebar-actions{padding:.35rem .55rem .45rem;border-top:1px solid var(--border);display:flex;gap:.35rem;align-items:center;justify-content:space-between;& button{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 4px);padding:.2rem .5rem;font-size:.72rem;font-family:inherit;-webkit-app-region:no-drag;app-region:no-drag;&:hover{color:var(--text);border-color:var(--accent)}&.danger:hover{color:var(--critical);border-color:var(--critical)}&[disabled]{opacity:.4;border-color:var(--border)!important;color:var(--muted)!important}}}sidebar-delete-current{display:contents}sidebar-delete-current[hidden]{display:none!important}sidebar-delete-current button{display:inline-flex;align-items:center;gap:.35rem;.trash-icon{flex-shrink:0}}#sync-status{display:inline-flex;align-items:center;gap:.35rem;border-color:transparent;&:hover{border-color:var(--accent)}.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .15)}&[data-status=online] .sync-dot{background:var(--green)}&[data-status=connecting] .sync-dot{background:var(--medium)}&[data-status=offline] .sync-dot{background:var(--critical)}}#sync-status[data-proxy-auth] .sync-dot{box-shadow:0 0 0 2px var(--accent)}#sync-status[data-degraded] .sync-dot{box-shadow:0 0 0 2px var(--medium)}#sync-status[hidden]{display:none}#storage-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .55rem;background:rgb(from var(--medium) r g b / .12);border:1px solid rgb(from var(--medium) r g b / .3);border-radius:var(--ui-radius, 5px);color:light-dark(#b25b00,#f0a060);font-size:.72rem;font-family:inherit;cursor:default;text-align:left;-webkit-app-region:no-drag;app-region:no-drag;&:hover{background:rgb(from var(--medium) r g b / .18);border-color:rgb(from var(--medium) r g b / .5)}.storage-dot{width:7px;height:7px;border-radius:50%;background:var(--medium);flex-shrink:0}}#storage-status[hidden]{display:none}#view-as-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .3rem .3rem .55rem;background:rgb(from var(--accent) r g b / .12);border:1px solid rgb(from var(--accent) r g b / .35);border-radius:var(--ui-radius, 5px);color:var(--text);font-size:.72rem;user-select:none;-webkit-app-region:no-drag;app-region:no-drag;.view-as-label{flex:1;display:grid;gap:.05rem;min-width:0}.view-as-label>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.view-as-note{color:var(--muted);font-size:.66rem}.view-as-stop{flex-shrink:0;padding:.15rem .5rem;font:inherit;font-weight:500}}#view-as-status[hidden]{display:none}#auth-status[hidden],#manage-status[hidden]{display:none!important}#auth-status{display:inline-flex;align-items:center}#auth-status[data-authed="1"]{display:inline-flex;align-items:center;gap:.4rem;max-width:12rem;padding:.2rem .35rem;border-color:transparent;border-radius:var(--ui-radius, 5px)}#auth-status[data-authed="1"]:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#manage-status[hidden]{display:none}#manage-status{display:inline-grid;place-items:center;width:1.8rem;height:1.8rem;padding:.25rem;border-color:transparent;color:var(--muted)}#manage-status:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#public-status{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:.2rem 0;color:var(--muted);font-size:.72rem;user-select:none}#public-status[hidden]{display:none}.auth-login{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font:inherit;font-size:.72rem;font-weight:400}.user-avatar{position:relative;flex-shrink:0;width:22px;height:22px;border-radius:50%;overflow:hidden;background:var(--accent);display:inline-grid;place-items:center;user-select:none}.user-avatar-lg{width:38px;height:38px}.user-avatar-fallback{font-size:.72rem;font-weight:600;line-height:1;color:var(--bg);text-transform:uppercase}.user-avatar-lg .user-avatar-fallback{font-size:1.05rem}.user-avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.user-avatar img.broken{display:none}.user-menu[popover]{position:fixed;inset:auto;margin:0;min-width:11rem;flex-direction:column;gap:.1rem;background:var(--surface, var(--bg));border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.3rem;box-shadow:0 4px 14px #00000047}.user-menu[popover]:not(:popover-open){display:none}.user-menu[popover]:popover-open{display:flex}.user-card{display:flex;align-items:center;gap:.5rem;padding:.3rem .35rem .45rem;border-bottom:1px solid var(--border);margin-bottom:.2rem}.user-id{display:flex;flex-direction:column;min-width:0}.user-login{font-weight:600;font-size:.82rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-name{font-size:.74rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-menu-row{display:block;width:100%;text-align:left;background:transparent;border:0;border-radius:var(--ui-radius, 4px);padding:.4rem .5rem;font:inherit;font-size:.82rem;color:var(--text)}.user-menu-row.logout-row{display:inline-flex;align-items:center;gap:.4rem;font-size:.76rem}.logout-row svg{flex:0 0 auto}.user-menu-row:hover{background:rgb(from var(--text) r g b / .08)}
|
|
166
|
-
`;var
|
|
167
|
-
`;var
|
|
163
|
+
`)}`:""}`}var za=["critical","high","moderate","low","unknown"],bb=e=>za.includes(e.severity)?e.severity:"unknown",rB=[["affects",e=>`Affects ${e}`],["later",()=>"Later versions"],["fixed",e=>`Fixed in ${e}`]];function yb(e){return Nn("stats",e,()=>jk(e),t=>({downloads:t.downloads??null,github:t.github??null}))}function wb(e){return Nn("advisories",e,()=>Gk(e),t=>({versions:t.versions??[],advisories:t.advisories??[],repository:t.repository!==!1,keptAt:t.keptAt??null}))}function vb(e){let{name:t,version:n}=e.npm,r=(o,s)=>u`<a class="npm-package-link" href="${o}" target="_blank" rel="noopener noreferrer">${s}${pu}</a>`;return u`<span class="npm-package-links">${r(`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`,"npmjs")} ${e.npm.private?g:r(Ru(e),"socket.dev")}</span>`}var Ru=e=>`https://socket.dev/npm/package/${e.npm.name}/overview/${encodeURIComponent(e.npm.version)}`;function Ha(e){let{name:t,version:n}=e.npm;if(e.npm.private)return null;let r=Nn("socket",`${t}@${n}`,()=>Yk(t,n),o=>({socket:o.socket??null}));return r.status==="ready"?r.socket:null}var JC=[["supplyChain","Supply chain",85,85],["vulnerability","Vulnerability",85,85],["quality","Quality",70,80],["maintenance","Maintenance",70,80],["license","License",80,80]],oB=50,fb=(e,t)=>e===100?"is-good is-max":e>=t?"is-good":e>=50?"is-fair":"is-poor",Su=e=>u`<svg class="npm-socket-gauge" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="6" pathLength="100"></circle><circle class="npm-socket-gauge-fill" cx="8" cy="8" r="6" pathLength="100" stroke-dasharray="${`${e} 100`}"></circle></svg>`;function sB(e){let t=Ha(e)?.scores;return t?u`<ul class="npm-extensions npm-socket-scores" aria-label="Socket scores">${JC.map(([n,r,,o])=>{let s=Math.round(t[n]*100);return u`<li><a class="${`npm-extension npm-socket-score ${fb(s,o)}`}" href="${Ru(e)}" target="_blank" rel="noopener noreferrer">${Su(s)}<span>${r}</span><span class="npm-extension-count">${s}</span></a></li>`})}</ul>`:g}var $b=new Map([["critical","critical"],["high","high"],["middle","moderate"],["low","low"]]),Cu=e=>e.replaceAll(/(?<=[a-z])(?=[A-Z])/gu," ").toLowerCase().replace(/^./u,t=>t.toUpperCase()),iB=new Map,db=new WeakMap;function kb(e){let t=e?Ha({npm:e}):null;return t?(db.has(t)||db.set(t,Map.groupBy(t.alerts.filter(n=>n.file),n=>n.file)),db.get(t)):iB}var xb=(e=[])=>e.map(t=>{let n=$b.get(t.severity)??"low";return u`<span class="${`npm-socket-file-alert sev-${n}`}" data-tooltip="${`Socket: ${Cu(t.type)}, ${n}${t.note?` \xB7 ${t.note}`:""}`}">${Cu(t.type)}</span>`});function ZC(e,t){return jC(e.npm,wb(e.npm.name),Ha(e),ln(e.npm,t?t.npm?.version??"(empty)":null))}function QC(e,t){let n=xu(e),o=n&&t!==null&&[...t].every(Wa)?[]:Ha(e)?.alerts??[];if(!n&&o.length===0)return g;let s=[...t??[]].find(i=>/^readme(?:\.md)?$/iu.test(i));return u`<div class="npm-alerts">${n?u`<p class="npm-alert" role="note"><strong>Taken down by npm.</strong> npm's security team removed this package's versions, as it does for malicious code, and serves this placeholder in their place${s?u`: ${Gs(s,t,"its readme")}`:""}.</p>`:g} ${o.length>0?aB(e,o,t):g}</div>`}function aB(e,t,n){return u`<div class="npm-alert npm-socket-alerts" role="note"><span class="npm-socket-alerts-head"><strong>Socket raises ${t.length===1?"an alert":`${t.length} alerts`} on this version</strong> <a class="npm-package-link" href="${Ru(e)}" target="_blank" rel="noopener noreferrer">socket.dev${pu}</a></span><ul>${t.map(r=>{let o=$b.get(r.severity)??"info";return u`<li><span class="${`bundle-advisory-severity sev-${o}`}">${o}</span> <span class="npm-socket-alert-type">${Cu(r.type)}</span> ${r.file?u`<span class="npm-socket-alert-file">in ${Gs(r.file,n)}</span>`:g} ${r.note?u`<p class="npm-socket-alert-note">${r.note}</p>`:g}</li>`})}</ul></div>`}function e_(e,t,n=g){let r=yb(e.npm.name),o=S_(ln(e.npm)?.findings.find(({id:s})=>s==="popularity"));return u`<div class="npm-figures"><npm-downloads-chart role="region" aria-label="Downloads" .downloads="${r.downloads}" .status="${r.status}" .known="${o}"></npm-downloads-chart><div class="npm-figures-actions">${vb(e)}${t}</div>${n}</div>`}var lB=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round" aria-hidden="true"><path d="m8 1.75 1.9 3.9 4.3.6-3.1 3 .75 4.25L8 11.5l-3.85 2 .75-4.25-3.1-3 4.3-.6Z"/></svg>`,cB=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><circle cx="8" cy="8" r="1.25" fill="currentColor"/></svg>`,dB=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="4" cy="3.5" r="1.5"/><circle cx="4" cy="12.5" r="1.5"/><circle cx="12" cy="12.5" r="1.5"/><path d="M4 5v6M12 11V6a2 2 0 0 0-2-2H7m1.5-1.5L7 4l1.5 1.5"/></svg>`,uB=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><circle cx="4.5" cy="3.25" r="1.5"/><circle cx="11.5" cy="3.25" r="1.5"/><circle cx="8" cy="12.75" r="1.5"/><path d="M4.5 4.75v.75a2 2 0 0 0 2 2h3a2 2 0 0 0 2-2v-.75M8 7.5v3.75"/></svg>`;function Sb(e){if(!e.npm.manifest.github?.github)return g;let t=yb(e.npm.name),n=t.status==="ready"?t.github:null;if(!n)return g;let r=(i,a,l,p)=>u`<a class="bundle-origin-link npm-github-figure" href="${`https://github.com/${Vd(n.repo)}/${p}`}" data-tooltip="${`${a.toLocaleString("en")} ${l}`}" target="_blank" rel="noopener noreferrer">${i}<span>${Ma.format(a)}</span></a>`,o=typeof n.openPulls=="number"?n.openPulls:null,s=o===null?n.openIssues:Math.max(n.openIssues-o,0);return u`${r(lB,n.stars,n.stars===1?"star":"stars","stargazers")} ${r(uB,n.forks,n.forks===1?"fork":"forks","forks")} ${r(cB,s,o===null?"open issues and pull requests":s===1?"open issue":"open issues","issues")} ${o===null?g:r(dB,o,o===1?"open pull request":"open pull requests","pulls")} ${n.archived?u`<span class="npm-github-archived">Archived</span>`:g}`}var t_=({name:e,version:t,private:n,manifest:r})=>n||!r.provenance?null:Nn("provenance",`${e}@${t}`,()=>Xk(e,t),o=>({provenance:o.provenance??null}));function Cb(e){let t=t_(e);return t!==null&&(t.status==="loading"||!!t.provenance?.builder)}function pB(e,t){return e?/^https:\/\/github\.com\/actions\/runner(?:\/github-hosted)?$/u.test(e)?"GitHub Actions":e.startsWith("https://github.com/actions/runner/")?"GitHub Actions, self-hosted runner":e.startsWith("https://gitlab.com/")||e.includes("/-/runners/")?t==="self-hosted"?"GitLab CI, self-hosted runner":"GitLab CI":new URL(e).host:null}var fB=(e,t)=>t?t==="github-hosted"||t==="gitlab-hosted":e==="GitHub Actions";function _b(e){if(e.npm.private)return g;let t=t_(e.npm);if(!t)return u`<span class="npm-commit-missing">None</span>`;if(t.status==="loading")return u`<span class="npm-commit-missing">Checking…</span>`;if(t.status==="error")return u`<span class="npm-commit-missing">Couldn't be read</span>`;if(!t.provenance)return u`<span class="npm-provenance-warning" data-tooltip="npm lists provenance for this version, but no statement naming its tarball could be read">Listed, but none for this tarball</span>`;let{manifest:n}=e.npm,{repository:r,commit:o,workflow:s,ref:i,builder:a,run:l,logIndex:p,runner:d}=t.provenance,f=(k,S,C=g)=>u`<a class="bundle-origin-link" href="${k}" data-tooltip="${C}" target="_blank" rel="noopener noreferrer"><span>${S}</span></a>`,m=/^https:\/\/github\.com\/([^/]+\/[^/]+)$/u.exec(r)?.[1]??null,h=pB(a,d),b=h?.startsWith("GitLab CI"),y=m??r.replace(/^https:\/\//u,""),w=n.github?.github??(n.gitlab?`gitlab.com/${n.gitlab}`:null),v=w&&w.toLowerCase()!==y.toLowerCase(),x=s?.split("/").at(-1),$=[s?m&&o?f(`${r}/blob/${o}/${s.split("/").map(encodeURIComponent).join("/")}`,x,s===x?g:s):u`<span class="mono" data-tooltip="${s===x?g:s}">${x}</span>`:g,l?f(l,"Run"):g,p===null?g:f(`https://search.sigstore.dev/?logIndex=${p}`,"Transparency log")].filter(k=>k!==g);return u`<span class="npm-provenance"><span class="npm-provenance-line">${h?u`<span class="${fB(h,d)&&!v?"npm-provenance-builder is-hosted":"npm-provenance-builder"}">${h}</span>`:g} <span class="npm-provenance-sep">from</span> ${o?f(m?`${r}/commit/${o}`:b?`${r}/-/commit/${o}`:r,`${y}@${o.slice(0,7)}`,`${r} at ${o}${i?` (${i})`:""}`):f(r,y)} ${v?u`<span class="npm-provenance-warning" data-tooltip="${`The package names ${w}`}">Not the repository it names</span>`:g}</span> ${$.length>0?u`<span class="npm-provenance-line is-how">${$.map((k,S)=>S===0?k:u`<span class="npm-provenance-sep" aria-hidden="true">·</span>${k}`)}</span>`:g}</span>`}function mB(e,t,n){let r=e.affected.map(o=>t[o]).filter(Boolean);return r.includes(n)?"affects":r.length>0&&r.every(o=>Vt(o,n)<0)?"fixed":"later"}function n_(){let e=c.managedSession?.id;return()=>c.managedSession?.id===e}function r_(e,t){return fu({...e,title:e.title??e.id,severity:bb(e),cvss:{score:e.cvss},vulnerable_versions:e.range},({title:n,severity:r,details:o})=>ku({heading:n,severity:r,markdown:o,isCurrent:t}))}function o_(e){let{name:t,version:n}=e.npm,r=wb(t),o=n_(),s=r.status==="ready",i=s?r.advisories:[],a=i.map(m=>mB(m,r.versions,n)),l=rB.map(([m,h])=>({status:m,heading:h(n),advisories:i.filter((b,y)=>a[y]===m)})).filter(m=>m.advisories.length>0),p=a.filter(m=>m==="affects").length,d=s&&r.keptAt?u`<p class="npm-advisories-note">GitHub's repository advisories are as of ${Ib(Date.now()-Date.parse(r.keptAt))} ago: they couldn't be checked now.</p>`:s&&!r.repository?u`<p class="npm-advisories-note">GitHub's repository advisories couldn't be checked; npm's are shown.</p>`:g,f=r.status==="loading"?u`<p class="bundles-overview-col-empty">Checking advisories…</p>`:r.status==="error"?u`<p class="bundles-overview-col-empty">Couldn't check advisories.</p>`:l.length===0?u`${d}<p class="bundles-overview-col-empty">No advisories for any version.</p>`:u`${d}${l.map(m=>u`<section class="${`npm-advisory-group is-${m.status}`}"><h4 class="npm-advisory-group-head">${m.heading} <span class="bundles-overview-col-count">${m.advisories.length}</span></h4><ul class="bundle-advisories-rows">${m.advisories.map(h=>r_(h,o))}</ul></section>`)}`;return Ln({title:"Advisories",count:s?i.length:"\u2026",body:f,className:"npm-advisories-col",extra:s?u`<span class="${`npm-advisories-active${p>0?" is-active":""}`}">${p} active</span>`:g})}var gB=[...Bt].filter(([,{mark:e}])=>e!==null).map(([e])=>e),hB=[...Bt].filter(([,{mark:e}])=>e===null).map(([e])=>e),GC=[null,"notice","warn"];function s_(e){let t=new Map,n=new Map,r=0;for(let o of e){let s=Ko(o);for(let i of s){t.set(i,(t.get(i)??0)+1);let a=qo(o,i);GC.indexOf(a)>GC.indexOf(n.get(i)??null)&&n.set(i,a)}s.some(i=>Bt.get(i).mark)&&r++}return{counts:t,marks:n,unreadable:r}}var KC=new WeakMap;function _r(e){let t=e.npm?nu(e):e,n=KC.get(e);if(n?.of!==t){let{sources:r,sourcesContent:o}=e.json,s=new Map(r.map((h,b)=>[h,t1(e,h,o[b])]).filter(([,h])=>h)),i=new Set(r.filter((h,b)=>typeof o[b]!="string")),{counts:a,marks:l,unreadable:p}=s_(s.values()),d=yi(e),f=xn(e),m={files:0,lines:0,unpacked:0};for(let h of r.filter(b=>!Wa(b)))i.has(h)||m.files++,m.lines+=d.get(h)??0,m.unpacked+=f.get(h)??0;n={of:t,paths:new Set(r),byPath:s,counts:a,marks:l,unreadable:p,sizes:f,extensions:new Map(r.map(h=>[h,Ab(h)])),binaries:new Set([...i].toSorted((h,b)=>h.localeCompare(b))),types:UB(r,f,d),content:m},KC.set(e,n)}return n}var _u={key:null,chip:null},i_=e=>`${e.npm.name}@${e.npm.version}`,a_=e=>_u.key===i_(e)?_u.chip:null;function l_(e){let t=a_(e);return t&&{label:t.label,keeps:t.keeps,clear:()=>{_u={key:null,chip:null},O()}}}function mb(e,t,n,r,{classes:o="",tooltip:s=g}={}){let i=a_(e)?.id===t.id;return u`<li><button type="button" class="${`npm-extension npm-category${o}`}" aria-pressed="${String(i)}" data-tooltip="${s}" @click="${()=>{_u={key:i_(e),chip:i?null:t},O()}}">${n}<span class="npm-extension-count">${r.toLocaleString("en")}</span></button></li>`}function c_(e,t,n){let{name:r}=Bt.get(n),{byPath:o,counts:s,marks:i}=_r(t),a=i.get(n);return mb(e,{id:`category:${n}`,label:r,keeps:l=>o.has(l)&&Ko(o.get(l)).includes(n)},u`<span>${r}</span>`,s.get(n),{classes:a?` is-${a}`:""})}function d_({counts:e,marks:t,unreadable:n},r,o,s){let i=gB.filter(l=>e.has(l));if(i.length===0)return g;let a=i.some(l=>t.get(l)==="warn");return u`<div class="${`npm-readability-warning${a?" is-warn":""}`}" role="note"><span class="npm-readability-warning-text"><strong>${n.toLocaleString("en")} of ${r.toLocaleString("en")} ${o}</strong> can be hard to review by reading them:</span><ul class="npm-extensions">${i.map(s)}</ul></div>`}function u_(e,t){return d_(_r(t),t.json.sources.length,"files",n=>c_(e,t,n))}function Rb(e,t,n=!1,r=void 0){let{byPath:o,sizes:s}=_r(e),i=n?t:void 0;return u`${DC(NC(e,t),void 0,i)}${WC(ib(e,t),p_(r),i)}${i1(e,t,s.get(t))}${s1(o.get(t))}`}var p_=e=>e===void 0||e?.details.npm&&!nu(e.details)?void 0:e&&ib(e.details,e.path);function Mb(e,t,n=[],r=void 0){let{stamps:o,exfiltration:s}=Fn(e,t),i=p_(r),a=i===void 0?null:new Map(zl(s).map(([l,p])=>[l,Wl(l,p,i)]));return[...n.map(l=>({name:Cu(l.type),severity:$b.get(l.severity)??"low"})),...o.map(l=>a?.has(l.name)?{...l,severity:a.get(l.name)}:l)]}var ub=new WeakMap;function bB(e,t){let n=e&&t?.npm?ln(t.npm,e.npm?.version??"(empty)"):null;if(!n)return null;if(!ub.has(n)){let r=new Map;for(let{host:o,places:s}of Tb(n).get("new-hosts")?.hosts??[])for(let{path:i,line:a}of s)r.set(i,[...r.get(i)??[],{host:o,line:a,was:e.npm?.version??null}]);ub.set(n,r)}return ub.get(n)}function yB(e){if(!e?.length)return g;let t=e.length===1?"New host":"New hosts",{was:n}=e[0],r=`${n?`None of ${n}'s files`:"No file of the version compared with"} named ${e.length===1?"it":"them"}`;return u`<span class="npm-new-host" data-tooltip="${`${t}: ${e.map(({host:o,line:s})=>`${o}, line ${s}`).join("; ")} \xB7 ${r}`}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${e.map(({host:o,line:s})=>u`<span class="compare-tip-path">${o}</span><span class="compare-tip-said">line ${s}</span>`)}</div><div class="compare-tip-note">${r}</div></div>`}">${t}</span>`}var f_={icon:(e,t)=>kn(e,t.map(([n,r])=>Vo(n,r)).find(ov)),alerts:e=>kb(e?.npm),alertTags:xb,newHosts:bB,newHostTag:yB,tag:(e,t,n)=>Rb(e,t,!1,n),flags:(e,t,n)=>Mb(e,t,[],n),warning(e,t){let{byPath:n}=_r(e),r=s_(t.filter(i=>n.has(i)).map(i=>n.get(i))),{counts:o,marks:s}=r;return d_(r,t.length,t.length===1?"file added or changed":"files added or changed",i=>{let{name:a}=Bt.get(i),l=s.get(i);return u`<li><span class="${`npm-extension is-${l}`}"><span>${a}</span><span class="npm-extension-count">${o.get(i).toLocaleString("en")}</span></span></li>`})}},wB=new Map([["malware","Malware"],["deprecated","Deprecated"],["publisher","Publisher"],["provenance-lost","Provenance lost"],["held-install-scripts","Install scripts"],["held-non-registry-deps","Non-registry deps"],["held-unused-deps","Unused deps"],["held-runs-code","Runs code"],["held-credentials","Credentials"],["held-exfiltration","Exfiltration"],["held-remote","Remote"],["held-ip-lookup","IP lookup"],["held-obfuscated","Obfuscated"],["large-code","Large new code"],["now-unreadable","Now unreadable"],["binary-code","Binary code"],["new-hosts","New hosts"],["popularity","Few downloads"]]),vB={critical:"is-critical",high:"is-warn",moderate:"is-moderate",low:"is-low"},$B=e=>e>=730?`${Math.floor(e/365)} years`:e>=60?`${Math.floor(e/30)} months`:`${e} days`;function m_(e){let t=e?.score;if(!t)return g;let{score:n,level:r,raised:o,lowered:s}=t,i=o.map(({id:p,severity:d})=>[wB.get(p)??p,d]),a=s&&i.length>0?`Lowered by ${Math.round(s.by*100)}%: out ${$B(s.days)}${s.tier===null?"":`, its package npm's ${Ta(s.tier)} by downloads`}`:null,l=[`Risk ${n} of 100`,...i.length===0?["Nothing found that calls for a look"]:i.map(([p,d])=>`${p}, ${d}`),...a?[a]:[]].join(`
|
|
164
|
+
`);return u`<li><span class="${`npm-extension npm-risk-score ${vB[r]}`}" data-tooltip="${l}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">Risk ${n} of 100</div>${i.length===0?u`<span class="compare-tip-none">Nothing found that calls for a look</span>`:u`<div class="compare-tip-rows">${i.map(([p,d])=>u`<span class="npm-risk-finding">${p}</span><span class="${`compare-tip-said npm-risk-severity sev-${d}`}">${d}</span>`)}</div>`} ${a?u`<div class="compare-tip-note">${a}</div>`:g}</div>`}">${Su(n)}<span>Risk</span><span class="npm-extension-count">${n}</span></span></li>`}var g_=(e,t)=>[SB(t.get("malware")),CB(t.get("deprecated")),MB(e,t.get("publisher")),TB(e,t.get("provenance-lost")),IB(e,t.get("held-install-scripts")),...FB(e,t),...AB(e,t),EB(t.get("new-hosts")),LB(t.get("too-new"))],Tb=e=>new Map((e?.findings??[]).map(t=>[t.id,t]));function h_(e,t){if(!e||!t?.npm)return g;let n=[e.npm??{name:t.npm.name,version:"Empty package",private:!0},t.npm],r=y_(n),o=ln(t.npm,e.npm?.version??"(empty)"),s=Tb(o),i=[m_(o),...g_(n,s),k_(n,r),...x_(n,r,s.get("malware")),PB(t.npm.name,s.get("popularity"))].filter(a=>a!==g);return i.length===0?g:u`<ul class="npm-extensions npm-compare-badges" aria-label="Versions at a glance">${i}</ul>`}function b_(e){let{npm:t}=e,n=y_([t]),r=ln(t),o=Tb(r),s=r?.oldVersion?[{name:t.name,version:r.oldVersion},t]:[t],i=[m_(r),...g_(s,o),k_([t],n),...x_([t],n,o.get("malware"))].filter(a=>a!==g);return i.length===0?g:u`<ul class="npm-extensions npm-overview-badges" aria-label="Version at a glance">${i}</ul>`}function kB(e){let t=e?.files??[],n=r=>[`${r.was.toLocaleString("en")} \u2192 ${r.now.toLocaleString("en")} characters`,...r.rebuilt?["its source map rebuilt with it"]:[],...e.major?["in a major release"]:[]];return e?.severity==="critical"||!e?gb("npm-compare-unreadable","Now unreadable",t,n):$o(`${Mu[e.severity]} npm-held-file npm-compare-unreadable`,"Now unreadable",t,n)}var Mu={critical:"is-critical",high:"is-warn",moderate:"is-moderate"},xB=e=>[...Ip.keys()].map(t=>{let n=e.get(`held-${lb(t)}`),r=n?.files??[],o=s=>s.added?new Map([...s.found].filter(([i])=>!s.added.has(i))):void 0;return $o(`${Mu[n?.severity]} npm-held-file npm-files-${lb(t)}`,t,r,s=>ab(s.found,o(s)),zC(r.map(s=>s.found)))});function y_(e){let t=wb(e.at(-1).name);return t.status==="loading"?null:e.map(({version:n})=>{let r=t.status==="ready"?t.versions.indexOf(n):-1;return r===-1?[]:t.advisories.filter(o=>o.affected.includes(r))})}var w_=(e,t)=>e===t?`${t??"\u2013"}`:`${e??"\u2013"} \u2192 ${t??"\u2013"}`,v_=e=>za.find(t=>e.some(n=>bb(n)===t));function SB(e){if(!e)return g;let t=[...e.takenDown?["Taken down by npm"]:[],...(e.advisories??[]).map(({id:n,title:r})=>r?`${n}: ${r}`:n)];return u`<li><span class="npm-extension npm-malware" data-tooltip="${t.join(`
|
|
165
|
+
`)}">Malware</span></li>`}function CB(e){return e?u`<li><span class="npm-extension npm-compare-deprecated" data-tooltip="${Dh(e.message)}">Deprecated</span></li>`:g}var _B={critical:"is-from-known",high:"is-to-unknown"},RB={known:"is-known",maintainer:"is-maintainer"},qC={known:"one that publishes one of npm's most downloaded packages",maintainer:"one of the package's maintainers",new:"an unknown publisher, new to the package",unknown:"an unknown publisher"};function MB([e,t],n){if(!n)return g;let{was:r,now:o,wasKnown:s,nowKnown:i,severity:a,major:l}=n,p=n.wasStanding??(s?"known":"unknown"),d=n.nowStanding??(i?"known":"unknown"),f=(b,y)=>u`<span class="${`npm-compare-account ${RB[y]??"is-unknown"}`}">~${b}</span>`,m=_B[a]??"is-to-known",h=u`A different npm account published the open version,<br>${qC[d]},<br>after ${qC[p]}${l?u`<br>in a major release`:g}`;return u`<li><a class="${`npm-extension npm-compare-publisher ${m}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(o)}`}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Published by ~${r} (${e.version}), then ~${o} (${t.version})`}" .tooltipContent="${ko("Published by",[e,t],[f(r,p),f(o,d)],h)}"><span>Publisher</span><span class="npm-extension-count">${f(r,p)} → ${f(o,d)}</span></a></li>`}function TB([e,t],n){return n?u`<li><span class="npm-extension npm-compare-provenance" data-tooltip="${`npm lists provenance for ${e.version}, none for ${t.version}`}" .tooltipContent="${ko("npm provenance",[e,t],["Listed by npm",u`<span class="compare-tip-none">None</span>`],"The open version was published without the provenance the one compared with has")}">Provenance lost</span></li>`:g}function IB(e,t){if(!t)return g;let{scripts:n,flagged:r=[],was:o}=t,s=new Map(o??[]),i=o?e:e.slice(-1),a=o?[o,n]:[n],l=(d,f)=>d.length===0?u`<span class="compare-tip-none">None</span>`:hb(d.map(([m,h])=>[m,h,f.includes(m)])),p=n.map(([d])=>r.includes(d)?`${d} ${s.has(d)?"changed":"added"}`:d).join(", ");return u`<li><span class="npm-extension is-warn npm-compare-install" data-tooltip="${i.map(({version:d},f)=>`${d}: ${a[f].map(([m,h])=>`${m}: ${h}`).join("; ")||"none"}`).join(" \xB7 ")}" .tooltipContent="${ko("Install scripts",i,a.map((d,f)=>l(d,f===a.length-1?r:[])))}"><span>${n.length===1?"Install script":"Install scripts"}</span><span class="npm-extension-count">${p}</span></span></li>`}var $_=8;function AB(e,t){let n=o=>t.get(o)?.files??[],r=(o,s)=>`${Mu[t.get(o)?.severity]} npm-held-file ${s}`;return[$o(r("held-runs-code","npm-files-runs"),"Runs code",n("held-runs-code"),o=>BC(o.found,o.added),Ep(n("held-runs-code").map(o=>o.found)),null,!1),$o(r("held-credentials","npm-files-credentials"),"Credentials",n("held-credentials"),o=>PC(o.found,o.added)),...xB(t),gb("npm-compare-large","Large new code",n("large-code"),o=>ge(o.bytes)),kB(t.get("now-unreadable")),$o(r("held-obfuscated","npm-files-obfuscated"),"Obfuscated",n("held-obfuscated"),o=>`${mh(o.found)}${o.added?`, new since ${e[0].version}`:""}`),gb("npm-compare-binary","Binary code",n("binary-code"),o=>`${ge(o.bytes)}, not UTF-8 or holding a NUL`)]}function EB(e){let t=e?.hosts??[],n=t.map(({host:s,places:i})=>{let a=i.slice(0,$_).map(({path:l,line:p})=>`${l}, line ${p}`);return{path:s,at:i.length>a.length?[...a,`and ${(i.length-a.length).toLocaleString("en")} more files`]:a}}),[r]=t,o=t.length===1&&r.places.length===1?{path:r.path,line:r.line,query:r.host}:null;return $o("is-warn npm-compare-hosts",n.length===1?"New host":"New hosts",n,s=>s.at,n.length===1?n[0].path:null,o&&(s=>s.currentTarget.dispatchEvent(new CustomEvent("compare-open-line",{detail:o,bubbles:!0,composed:!0}))))}function gb(e,...t){return $o(`npm-compare-file ${e}`,...t)}function $o(e,t,n,r,o=null,s=null,i=!0){if(n.length===0)return g;let a=n.slice(0,$_),l=n.length>a.length?`and ${(n.length-a.length).toLocaleString("en")} more`:null,p=h=>[r(h)].flat(),d=`${t}: ${[...a.map(h=>`${h.path} (${p(h).join("; ")})`),...l?[l]:[]].join(", ")}`,f=u`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${a.map(h=>u`<span class="compare-tip-path">${h.path}</span><span class="compare-tip-said">${p(h).length>1?u`<span class="compare-tip-lines">${p(h).map(b=>u`<span>${b}</span>`)}</span>`:r(h)}</span>`)}</div>${l?u`<div class="compare-tip-note">${l}</div>`:g}</div>`,m=u`${i?u`<span>${t}</span>`:u`<span class="sr-only">${t}</span>`}${o!==null||n.length>1?u`<span class="npm-extension-count">${o??n.length.toLocaleString("en")}</span>`:g}`;return s?u`<li><button type="button" class="${`npm-extension is-open ${e}`}" data-tooltip="${d}" .tooltipContent="${f}" @click="${s}">${m}</button></li>`:u`<li><span class="${`npm-extension ${e}`}" data-tooltip="${d}" .tooltipContent="${f}">${m}</span></li>`}var pb=(e,{created:t,gap:n,level:r,tier:o,installs:s,missing:i,was:a})=>[a===void 0?null:`was ${a}`,t?`new package, ${n>=0?`${Ib(n)} old`:"published later"}`:i?"no package npm has":r?`npm's ${Ta(o??1/0)}`:null,s?.scripts?`installs ${s.version}${s.latest&&s.latest!==s.version?` (its latest ${s.latest})`:""}${s.new?`, published since ${e[0].version}`:""}, running its install scripts`:null].filter(Boolean).join("; ")||null;function FB(e,t){let{version:n}=e.at(-1),r=t.get("held-non-registry-deps")?.dependencies??[],o=t.get("held-unused-deps"),s=o?.dependencies??[],i=l=>l.some(p=>p.added)?`; new since ${e[0].version}: ${l.filter(p=>p.added).map(({name:p})=>p).join(", ")}`:"",a=[];if(r.length>0){let l=r.filter(p=>p.added).map(p=>`${p.name} was ${p.was??"none"}`);a.push(u`<li><span class="npm-extension is-warn npm-compare-registry" data-tooltip="${`From elsewhere than npm's registry: ${r.map(p=>`${p.name} ${p.now}`).join(", ")}${i(r)}`}" .tooltipContent="${ko("From elsewhere than npm's registry",[e.at(-1)],[hb(r.map(p=>[p.name,p.now,p.added]))],l.length>0?`New since ${e[0].version}: ${l.join(", ")}`:null)}"><span>Non-registry deps</span><span class="npm-extension-count">${r.length.toLocaleString("en")}</span></span></li>`)}if(s.length>0){let[l,p]=s.length===1?["it","its"]:["them","their"],d=f=>f.kind?`${f.name} (${f.kind})`:f.name;a.push(u`<li><span class="${`npm-extension ${Mu[o.severity]??"is-warn"} npm-compare-unimported`}" data-tooltip="${`Imported by nothing of ${n}: ${s.map(f=>`${f.name} ${f.range}${pb(e,f)?` (${pb(e,f)})`:""}`).join(", ")}${i(s)}`}" .tooltipContent="${ko(`Nothing imports ${l}`,[e.at(-1)],[hb(s.map(f=>[[d(f),pb(e,f)].filter(Boolean).join(", "),f.range,f.added]))],`No code file of ${n} names ${l} as an import would, nor does an install script; npm installs ${l} all the same, running ${p} install scripts`)}"><span>Unused deps</span><span class="npm-extension-count">${s.length.toLocaleString("en")}</span></span></li>`)}return a}function LB(e){return e?u`<li><span class="npm-extension is-warn npm-compare-published" data-tooltip="${z1(e.published)}">${Nh(e.published)}</span></li>`:g}function k_(e,t){if(!t)return g;let n=t.at(-1),r=e.length>1?t[0]:n;if(r.length===0&&n.length===0)return g;let o=n.length===0?"is-cleared":`sev-${v_(n)}`,s=n.filter(d=>!r.includes(d)).length,i=r.filter(d=>!n.includes(d)).length,a=ko("Advisories affecting",e,t.map(d=>d.length===0?u`<span class="compare-tip-none">none</span>`:u`<span class="compare-tip-count">${d.length}</span><span class="compare-tip-severities">${za.map(f=>[f,d.filter(m=>bb(m)===f).length]).filter(([,f])=>f>0).map(([f,m])=>u`<span class="${`compare-tip-severity sev-${f}`}">${m} ${f}</span>`)}</span>`),e.length>1?`${s} new \xB7 ${i} fixed`:null),l=`Advisories affecting ${e.map(({version:d},f)=>`${d}: ${t[f].length}`).join(", ")}`,p=u`<span>Advisories</span><span class="npm-extension-count">${w_(r.length,n.length)}</span>`;return e.length>1?u`<li><button type="button" class="${`npm-extension npm-compare-advisories ${o}`}" aria-haspopup="dialog" data-tooltip="${l}" .tooltipContent="${a}" @click="${()=>OB(e,t)}">${p}</button></li>`:u`<li><span class="${`npm-extension npm-compare-advisories ${o}`}" data-tooltip="${l}" .tooltipContent="${a}">${p}</span></li>`}var hb=e=>u`<span class="compare-tip-lines">${e.map(([t,n,r])=>n==null?u`<span class="compare-tip-none">${t}: none</span>`:u`<span class="${r?"is-flagged":g}">${t}: <code>${n}</code></span>`)}</span>`,ko=(e,t,n,r=null)=>u`<div class="compare-tip"><div class="compare-tip-head">${e}</div><div class="compare-tip-rows">${t.map(({version:o},s)=>u`<span class="compare-tip-version">${o}</span><span class="compare-tip-said">${n[s]}</span>`)}</div>${r?u`<div class="compare-tip-note">${r}</div>`:g}</div>`;function OB([e,t],[n,r]){let o=n_(),s=[["new",`New in ${t.version}`,r.filter(i=>!n.includes(i))],["kept",`Still affecting ${t.version}`,r.filter(i=>n.includes(i))],["fixed",`Fixed in ${t.version}`,n.filter(i=>!r.includes(i))]].filter(([,,i])=>i.length>0).map(([i,a,l])=>({status:i,heading:a,rows:l.map(p=>r_(p,o))}));OC({heading:`Advisories \xB7 ${e.name} ${e.version} \u2192 ${t.version}`,groups:s,isCurrent:o})}function NB(e,t,n){if(e===null||e>=n)return!1;let r=v_(t);return r===void 0||za.indexOf(e<=25?"critical":"high")<za.indexOf(r)}function x_(e,t,n=null){let r=e.at(-1),o=e.map(s=>Ha({npm:s})?.scores??null);return!o.at(-1)||n?[]:JC.flatMap(([s,i,a,l])=>{let p=o.map(m=>m?Math.round(m[s]*100):null),d=p.at(-1),f=e.length>1?p[0]:d;return d===null||d>=a?[]:s==="vulnerability"&&!(t&&NB(d,t.at(-1),a))?[]:s==="maintenance"&&r.manifest?.deprecated&&d>=oB?[]:[u`<li><a class="${`npm-extension npm-socket-score ${fb(d,l)}`}" href="${Ru({npm:r})}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Socket's ${i.toLowerCase()} score: ${e.map(({version:m},h)=>`${p[h]??"none"} for ${m}`).join(", ")}`}" .tooltipContent="${ko(`Socket's ${i.toLowerCase()} score`,e,p.map(m=>m===null?u`<span class="compare-tip-none">none</span>`:u`<span class="${`compare-tip-score ${fb(m,l)}`}">${Su(m)}${m}</span>`),s==="vulnerability"?`Shown under ${a}, where worse than the advisories found`:`Shown under ${a}`)}">${Su(d)}<span>${i}</span><span class="npm-extension-count">${w_(f,d)}</span></a></li>`]})}var BB={critical:"is-unpopular",high:"is-low",moderate:"is-mid"};function S_({known:e,scope:t,account:n}={}){return e?n?`Published with provenance in ${t}, the scope of ~${n}, an account that publishes one of npm's most downloaded packages`:t?`Published with provenance in ${t}, the scope of one of npm's most downloaded packages, which only its owner publishes in`:"Published by an account that publishes one of npm's most downloaded packages":null}function C_(e,t=null,n=!1){let{tier:r,level:o,severity:s}=e,i=t?.total.toLocaleString("en"),a=n?`npm-extension npm-popularity npm-downloads-tier ${BB[s]??"is-low"}`:`npm-downloads-tier ${o}`,l=n?S_(e):null,p=[t&&`${i} downloads/month, ${t.month}`,l].filter(Boolean).join(" \xB7 ");return u`<span class="${a}" data-tooltip="${p||g}" .tooltipContent="${t||l?u`${t?u`<div><strong>${i}</strong> downloads/month</div><div class="compare-tip-note">${t.month}</div>`:g}${l?u`<div class="compare-tip-note">${l}</div>`:g}`:null}">${Ta(r??1/0)}</span>`}function PB(e,t){let n=yb(e);return t?u`<li>${C_(t,n.status==="ready"&&n.downloads?_1(n.downloads):null,!0)}</li>`:g}var DB=u`<span class="npm-downloads-tier is-unpopular" data-tooltip="No downloads counted by npm, which counts a package's from the day after it was first published">unpopular</span>`,Pa=e=>new Intl.NumberFormat("en",{style:"unit",unit:e,unitDisplay:"long"}),Da={minute:Pa("minute"),hour:Pa("hour"),day:Pa("day"),month:Pa("month"),year:Pa("year")};function Ib(e){let t=Math.max(0,Math.floor(e/6e4)),n=Math.floor(t/1440);return t<60?Da.minute.format(t):t<1440?Da.hour.format(Math.floor(t/60)):n<60?Da.day.format(n):n<730?Da.month.format(Math.floor(n/30.44)):Da.year.format(Math.floor(n/365.25))}function zB({compared:e},{created:t,gap:n}){if(!t)return g;let[r,o]=e,s=Ib(Math.abs(n)),i=[`First published on ${Bh(t)}`,`${s} ${n>=0?"before":"after"} ${o.version} was`],a=`npm had no package by its name when ${n>=0?r.version:"either version"} was published`;return u`<span class="npm-dependency-flag is-new" data-tooltip="${[...i,a].join(" \xB7 ")}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">New package</div>${i.map(l=>u`<div>${l}</div>`)}<div class="compare-tip-note">${a}</div></div>`}">${n>=0?`${s} old`:"published later"}</span>`}function __(e,t){let n=cu(e.flags);if(t!=="added"||!e.level)return[n,g];let r=e.month?_h({total:e.month.total,from:new Date(e.month.from)}):null;return[n,e.uncounted?DB:C_(e,r),e.compared?zB(e,e):g]}function WB(e,t){let{counts:n}=_r(t),r=hB.filter(o=>n.has(o));return r.length===0?g:u`<ul class="npm-extensions" aria-label="Readable files">${r.map(o=>c_(e,t,o))}</ul>`}function Ab(e){let t=e.slice(e.lastIndexOf("/")+1),n=/\.d\.[cm]?ts$/iu.exec(t);if(n&&n.index>0)return n[0].toLowerCase();let r=t.lastIndexOf(".");return r>0?t.slice(r).toLowerCase():""}function YC(e,t,n=new Map){let r=new Map;for(let o of e){let s=Ab(o),i=r.get(s)??{extension:s,files:0,bytes:0,lines:null};i.files++,i.bytes+=t.get(o)??0,n.has(o)&&(i.lines=(i.lines??0)+n.get(o)),r.set(s,i)}return[...r.values()].toSorted((o,s)=>s.files-o.files||o.extension.localeCompare(s.extension))}var HB=/^(?:package\.json|readme(?:\.md)?)$/iu,Wa=e=>HB.test(e)||Ia.test(e);function UB(e,t,n=new Map){let r=e.filter(Wa),o=new Set(e.filter(l=>!Wa(l)).map(Ab)),{files:s,bytes:i,lines:a}=YC(r,t,n).reduce((l,p)=>({files:l.files+p.files,bytes:l.bytes+p.bytes,lines:p.lines===null?l.lines:(l.lines??0)+p.lines}),{files:0,bytes:0,lines:null});return{package:r.length>0?{files:s,bytes:i,lines:a}:null,extensions:YC(e,t,n).filter(l=>o.has(l.extension))}}var XC=({bytes:e,lines:t})=>t===null?ge(e):`${ge(e)} \xB7 ${t.toLocaleString("en")} LoC`;function VB(e,t){let{types:n,extensions:r}=_r(t);return!n.package&&n.extensions.length===0?g:u`<ul class="npm-extensions" aria-label="File types">${n.package?mb(e,{id:"package",label:"Package",keeps:Wa},u`<span>Package</span>`,n.package.files,{tooltip:`package.json, readme and license: ${XC(n.package)}`}):g} ${n.extensions.map(o=>mb(e,{id:`extension:${o.extension}`,label:o.extension||"No extension",keeps:s=>r.get(s)===o.extension},u`<span class="npm-extension-name">${o.extension||"no extension"}</span>`,o.files,{tooltip:XC(o)}))}</ul>`}function R_(e,t,n){let r=[["languages","Languages",t],["readable","Readable",WB(e,n)],["types","File types",VB(e,n)],["socket","Socket",sB(e)]].filter(([,,o])=>o!==g);return r.length===0?g:u`<dl class="npm-contents" aria-label="Contents">${r.map(([o,s,i])=>u`<div class="${`npm-contents-${o}`}"><dt>${s}</dt><dd>${i}</dd></div>`)}</dl>`}function M_(e,t){return e.size===0?g:Ln({title:"Binary files",count:e.size,list:!0,body:u`<ul class="bundles-sources-list">${[...e].map(n=>u`<li><div class="bundles-source-row is-resource">${kn(n,"binary")}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${n}">${n}</span> ${t.has(n)?u`<span class="bundles-source-size">${ge(t.get(n))}</span>`:g}</div></li>`)}</ul>`})}var Tu=({severity:e})=>Fv.indexOf(e),jB=(e,t)=>e.reduce((n,r,o)=>n||r.name.localeCompare(t[o].name),0);function T_(e,t,n){return e.map(r=>({row:r,path:n(r),flags:t(r).toSorted((o,s)=>Tu(o)-Tu(s)||o.name.localeCompare(s.name))})).toSorted((r,o)=>(o.flags.length>0)-(r.flags.length>0)||r.flags.length>0&&(Tu(r.flags[0])-Tu(o.flags[0])||o.flags.length-r.flags.length||jB(r.flags,o.flags))||r.path.localeCompare(o.path)).map(({row:r})=>r)}function Eb(e){return{...W1(e),files:f_,badges:h_,dependencyTags:__,reviewVerdictLimit:ZC}}var Fb=class extends N{static styles=[...N.styles,P(ot)];static properties={reportName:{type:String},workspaceNames:{type:Array},existingNames:{type:Object},_choice:{state:!0},_newName:{state:!0}};constructor(){super(),this.reportName="",this.workspaceNames=[],this.existingNames=new Set,this._choice="replace",this._newName=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_onClose=()=>this._finish({action:"cancel"});_onCancel=()=>this._finish({action:"cancel"});_onChoiceChange=t=>{this._choice=t.target.value};_onNewNameInput=t=>{this._newName=t.target.value};_onNewNameKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onConfirm())};_onConfirm=()=>{if(this._choice==="rename"){let t=(this._newName??"").trim();if(this._renameError(t)!==null)return;this._finish({action:"rename",newName:t});return}this._finish({action:"replace"})};_replaceHint(){let t=this.workspaceNames.length;if(t===0)return u`<span class="lwd-option-hint">The local file will be overwritten.</span>`;let n=t===1?u`workspace <strong>"${this.workspaceNames[0]}"</strong>`:u`<strong>${t}</strong> workspaces (${this.workspaceNames.join(", ")})`;return u`<span class="lwd-option-hint">The local file will be overwritten. When sync is online, the new bytes are also uploaded to ${n} so the cloud copy matches.</span>`}_renameError(t){return t?t===this.reportName?"Pick a name different from the original.":t.includes("\0")?"The new name cannot contain a NUL byte.":t.includes("/")||t.includes("\\")?'The new name cannot contain "/" or "\\".':this.existingNames.has(t)?`A file named "${t}" already exists \u2014 pick something else.`:null:"Enter a new name."}render(){let t=this._choice==="rename",n=(this._newName??"").trim(),r=t?this._renameError(n):null,o=r!==null,s=t?"Rename":"Replace",i=t?"primary":"danger",a=this.workspaceNames.length>0?u`<span class="lwd-option-hint">Saved as an unfiled report — the renamed copy isn't added to any workspace.</span>`:g;return u`<dialog @close="${this._onClose}"><header><h3>Import conflict</h3></header><p class="lwd-body"><strong>"${this.reportName}"</strong> already exists with different content.</p><fieldset class="lwd-choice"><legend>What should happen?</legend><label class="lwd-option"><input type="radio" name="icd-choice" value="replace" ?checked="${this._choice==="replace"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Replace</span> ${this._replaceHint()}</span></label> <label class="lwd-option"><input type="radio" name="icd-choice" value="rename" ?checked="${this._choice==="rename"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Rename to</span> <input type="text" class="nwd-input lwd-rename-input" maxlength="200" .value="${this._newName}" ?disabled="${!t}" @input="${this._onNewNameInput}" @keydown="${this._onNewNameKeydown}" @focus="${()=>{this._choice="rename"}}"> ${a} ${r===null?g:u`<p class="lwd-rename-error">${r}</p>`}</span></label></fieldset><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="${i}" ?disabled="${o}" @click="${this._onConfirm}">${s}</button></footer></dialog>`}};customElements.define("import-conflict-dialog",Fb);function I_({name:e,workspaceNames:t,existingNames:n}={}){let r=n instanceof Set?n:new Set(n??[]);return new Promise(o=>{let s=document.createElement("import-conflict-dialog");Object.assign(s,{reportName:e??"",workspaceNames:Array.isArray(t)?t:[],existingNames:r,_newName:GB(e??"",r)}),s.addEventListener("resolve",i=>{s.remove(),o(i.detail)}),s.addEventListener("modal-conflict",()=>{s.remove(),o({action:"cancel"})}),document.body.append(s)})}function GB(e,t){if(typeof e!="string"||e.length===0)return"";let n=e.lastIndexOf("."),r=n>0?e.slice(0,n):e,o=n>0?e.slice(n):"",s=r.replace(/-\d+$/u,"");for(let i=2;i<1e3;i++){let a=`${s}-${i}${o}`;if(!t.has(a))return a}return""}var cn=null,Ua=null,Iu=0;function KB(){return cn||(cn=document.createElement("div"),cn.id="app-toast",cn.setAttribute("role","status"),cn.setAttribute("aria-live","polite"),document.body.append(cn),cn)}function Ge(e,{kind:t="info",duration:n=5200}={}){let r=KB(),o=++Iu;clearTimeout(Ua),Ua=null,r.className=t,r.textContent=e,requestAnimationFrame(()=>{Iu===o&&r.classList.add("visible")});let s=()=>{Iu===o&&qB()};return n>0&&(Ua=setTimeout(s,n)),s}function qB(){Iu++,cn&&(clearTimeout(Ua),Ua=null,cn.classList.remove("visible"))}function A_(e,t,n){if(e.currentView!=="findings"&&e.currentView!=="files"&&e.currentView!=="links"||!e.currentManagedTeam)return!1;let r=t.find(i=>i.id===e.currentManagedTeam);if(n.has(`team:${e.currentManagedTeam}`)||!r||e.managedReports.some(i=>n.has(i.id)))return!0;let o=new Set(r.reports.filter(i=>e.currentManagedReport!==null||i.visible!==!1).map(i=>i.id));if(e.currentManagedReport!==null)return!o.has(e.currentManagedReport);let s=new Set(e.managedReports.map(i=>i.id));return o.size!==s.size||[...o].some(i=>!s.has(i))}async function E_(e,t,{fetchCatalog:n,isCurrent:r,render:o,replaceRoute:s}){let i=wr(e);if(!i||!r())return!0;let a=["admin","manage"].includes(e.managedSession?.role),l,p=null;if(e.currentManagedTeam!=null||!a){let f=m=>m.bundles?.some(h=>h.id===i);p=t.find(m=>m.id===e.currentManagedTeam&&f(m))??t.find(f)}if(p)l=Os(t);else if(a)try{l=(await n()).map(yr)}catch(f){if(f.status!==401&&f.status!==403)throw f;l=[]}else l=[];if(!r())return!0;let d=l.find(f=>f.managedId===i);return d?(e.bundles=l,e.currentManagedTeam=p?.id??null,o(),s(vr(t,d,e.currentManagedTeam,e.bundleDetailsTab,$r(e),l)),!0):!1}async function F_({bundleId:e,teamId:t,bundleTab:n,file:r,line:o,endLine:s,compareId:i,compareMode:a},l,p,d){let f=l.find($=>$.managedId===e);if(!f||!p()||!R())return!1;let m=Bg(f.integrity,$=>$.managedId===e),h=c.bundleDetails?.managedId===e&&c.bundleDetails.integrity===f.integrity&&!c.bundleDetails.error?c.bundleDetails:null;try{c.bundles=l,Pt(),hr(f.integrity,n),n==="code"&&r!=null&&(c.bundleCodeFileRequest={bundle:f.integrity,file:r,...o==null?{}:{line:o},...s==null?{}:{endLine:s}});let $=n==="compare"&&i!=null?Ls(l,f.integrity).find(k=>k.managedId===i):null;$&&(c.bundleCompare={bundle:f.integrity,target:$.integrity,mode:Ml(a)}),c.bundleDetails=m??h,c.currentManagedTeam=t,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),d(),document.querySelector("#main-content")?.scrollTo({top:0})}catch($){return p()&&$.name!=="AbortError"&&Ge(`Couldn't open bundle: ${$.message}`,{kind:"error"}),!1}let b=c.bundleDetails,y=()=>R()&&c.currentView==="bundles"&&c.selectedBundle===f.integrity&&c.bundles.some($=>$.managedId===e&&$.integrity===f.integrity)&&c.bundleDetails===b,w=($,k)=>($?.name==="AbortError"||(p()?k&&Ge(`Couldn't open bundle: ${$.message}`,{kind:"error"}):y()&&(c.bundleDetails={integrity:f.integrity,kind:f.kind,size:f.size,managedId:e,error:$.message},O())),!1),v=me(),x;for(;;){let $=Le();try{x=await Kc(e,{signal:$});break}catch(k){if(k?.name==="AbortError"&&$.aborted&&y())continue;return w(k,!1)}}try{if(x.integrity!==f.integrity)throw new Error("the metadata is for another version of this bundle");if(y()){let $=wi(x,x.integrity),k=m?.integrity===$.integrity?Object.assign(m,{fileHashes:$.fileHashes,fileSizes:$.fileSizes,lineCounts:$.lineCounts,codeStats:$.codeStats},$.edges?{edges:$.edges}:{}):$;k.managedId=e,c.bundleDetails=k,O({animate:!1})}return p()&&v===me()&&c.bundleDetails?.managedId===e&&c.selectedBundle===f.integrity}catch($){return w($,!0)}}function YB(e){let t=1/0,n=Date.now()+5e3;for(let r of e)for(let o of r.bundles??[])["stasis","sourcemap"].includes(o.kind)&&o.summary==null&&(t=Math.min(t,Math.max(n,o.summaryRetryAt??0)));return t}function L_(e){let t=null,n=null,r=null;return async({generation:o,session:s,signal:i,reuse:a=!1,revision:l=null})=>{if(i.aborted)return null;let p=JSON.stringify([o,s?.id,s?.role,s?.csrfToken]);if(r!==p&&(t?.controller.abort(),t=null,n=null,r=p),n&&Date.now()<n.expiresAt&&(a||l!==null&&l===n.revision))return n.teams;if(!t||t.signal.aborted||l!==null&&t.revision!==l){t?.controller.abort(),n=null;let m=new AbortController,h=AbortSignal.any([i,m.signal]),b={controller:m,signal:h,promise:null,revision:l};t=b;let y=null;b.promise=e({fallback:null,signal:h,onRevision:w=>{y=w}}).then(w=>h.aborted||r!==p?null:(w!==null&&(n={teams:w,revision:y,expiresAt:YB(w)}),w)).finally(()=>{t===b&&(t=null)})}let d=t,f=()=>d.controller.abort();i.addEventListener("abort",f,{once:!0});try{let m=await d.promise;return i.aborted||d.signal.aborted?null:m}finally{i.removeEventListener("abort",f)}}}function Lb(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function O_(e){let t=e.summary,n=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&n.push(ge(e.byteSize)),t&&[t.files,t.lines].every(r=>Number.isSafeInteger(r)&&r>=0)&&n.push(`${t.files.toLocaleString()} files`,`${t.lines.toLocaleString()} LoC`),n.join(" \xB7 ")}function N_(e,t=""){let n=t.trim().toLowerCase(),r=o=>String(o??"").toLowerCase().includes(n);return(Array.isArray(e)?e:[]).flatMap(o=>{let s=(o.reports??[]).filter(a=>r(a.filename)||r(oe(a.filename??""))),i=(o.bundles??[]).filter(a=>r(a.filename));return r(o.name)||s.length>0||i.length>0?[{team:o,reports:s,bundles:i}]:[]})}var Au=class{constructor(){this.expanded=new Map}sync(t,n=!1){let r=JSON.stringify([t.managedSession?.id,t.managedSession?.role,t.managedSession?.csrfToken]);r!==this.owner&&(this.expanded.clear(),this.focus="",this.owner=r);let o=t.managedTeams??[];for(let d of this.expanded.keys())o.some(f=>f.id===d)||this.expanded.delete(d);let s=wr(t),i=["findings","files","links"].includes(t.currentView)?t.currentManagedReport:null,a=s?"bundles":"reports",l=o.find(d=>d.id===t.currentManagedTeam&&(s?d.bundles?.some(f=>f.id===s):d.reports?.some(f=>f.id===i))),p=JSON.stringify([a,s||i,l?.id]);if(!(!n&&p===this.focus)&&(this.focus=p,l)){let d=this.expanded.get(l.id)??new Set;d.add(a),this.expanded.set(l.id,d)}}toggle(t,n){let r=this.expanded.get(t)??new Set;r.has(n)?r.delete(n):r.add(n),this.expanded.set(t,r)}shown(t,n,r,o){return!r||o||this.expanded.get(t)?.has(n)===!0}};function B_(e){let t=String(e??"").split(/[\s\-_/.]+/u).filter(Boolean);if(t.length<2)return Array.from(t[0]??"").slice(0,2).join("");let n=t.slice(0,2).map(r=>Array.from(r)[0]).join("");return/^\p{Ll}/u.test(n)?n:n.toUpperCase()}var Pn=null,D_=()=>Promise.resolve(!0);function z_(e){D_=e}function xo(){Pn?.controller.abort(),Pn=null}function XB(e,t,n){let{promise:r,resolve:o}=Promise.withResolvers(),s=!1,i=d=>{clearTimeout(p),t.removeEventListener("abort",a),o(d)},a=()=>i(!1),l=()=>(!s&&!t.aborted&&(s=!0,clearTimeout(p),Promise.resolve().then(()=>n()&&e(t)).then(d=>i(!!d&&n()),()=>i(!1))),r),p=setTimeout(l,1e3);return t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),{promise:r,start:l}}function W_(e,t){return t.aborted?Promise.resolve(!1):new Promise(n=>{let r=s=>{t.removeEventListener("abort",o),n(s)},o=()=>r(!1);t.addEventListener("abort",o,{once:!0}),e.then(r,()=>r(!1))})}function Rr({catalogOnly:e=!1,hydrate:t}={}){let n=c.managedSession,r=Le(),o=["findings","files","links"].includes(c.currentView),s=["workspace-reports","workspace-bundles"].includes(c.currentView),i=s||o&&(!e||Pn?.teamId===c.currentManagedTeam&&!Pn.signal.aborted)?c.currentManagedTeam:null;if(!R()||!n||n.role==="none"||n.publicShare&&!i)return xo(),t?Promise.resolve(!1):void 0;let a=c.managedTeams?.find(y=>y.id===i)?.reports.find(y=>y.id===c.currentManagedReport&&y.visible===!1)?.id??null,l=JSON.stringify([i,a,n.id,n.role,n.csrfToken,!!n.publicShare]);if(Pn?.key!==l||Pn.signal.aborted){xo();let y=new AbortController,w={key:l,controller:y,signal:y.signal,teamId:i,reportId:a,version:0,target:null};w.current=(v=w.signal)=>!v.aborted&&!w.signal.aborted&&Pn===w&&R()&&c.managedSession?.id===n.id&&c.managedSession?.role===n.role&&c.managedSession?.csrfToken===n.csrfToken&&!!c.managedSession?.publicShare==!!n.publicShare,Pn=w,JB(w)}let p=Pn;if(e||s||!i)return p.target?.ready;let d=rt(c.reports),f=p.target;if(f?.view===r&&f.reports===d&&!f.signal.aborted)return f.ready;f?.controller.abort();let m=new AbortController,h=AbortSignal.any([m.signal,p.signal,r]),b={controller:m,signal:h,view:r,reports:d,version:f?.reports===d?f.version:0};return p.target=b,b.current=()=>p.current()&&!h.aborted&&p.target===b&&c.currentManagedTeam===i&&rt(c.reports)===d,b.hydration=t?XB(async y=>{let w=p.version,v=await t(y);return v&&b.current()&&(b.version=w),v},h,b.current):null,b.ready=b.hydration?.promise,(p.version||p.finished)&&(b.hydration?b.hydration.start():b.version<p.version&&Nb(p,b,p.signal).then(y=>(!y&&b.current()&&(xo(),Rr()),y))),b.ready}function JB(e){let{signal:t,controller:n,current:r}=e;p0(e.teamId,{signal:t,reportId:e.reportId,onTeams:async(o,s)=>{let i=()=>r(o);return i()?await D_(i,o,s)&&i():!1},onUpdate:o=>r(o)?(e.version++,Nb(e,e.target,o)):!1,onClose:()=>{r()&&document.dispatchEvent(new Event("managed-feed-closed")),n.abort()}}).catch(o=>{r()&&console.warn("managed: team feed failed",o)}).finally(()=>{e.finished=!0,r()&&e.target?.hydration?.start()})}async function Nb(e,t,n){if(!e.current(n))return!1;if(!t?.current())return!0;if(!t.refresh||t.refresh.controller.signal.aborted){let a=new AbortController,l={controller:a,promise:null},p=AbortSignal.any([a.signal,t.signal]);t.refresh=l,l.promise=ZB(e,t,p).catch(()=>!1).finally(()=>{t.refresh===l&&(t.refresh=null)})}let r=t.refresh,o=AbortSignal.any([n,t.signal,r.controller.signal]),s=()=>r.controller.abort();n.addEventListener("abort",s,{once:!0});let i;try{i=await W_(r.promise,o)}finally{n.removeEventListener("abort",s)}return e.current(n)?t.current()?i?t.version<e.version?Nb(e,t,n):!0:!1:!0:!1}async function ZB(e,t,n){if(t.hydration&&!await W_(t.hydration.start(),n))return!1;for(;t.current()&&!n.aborted&&t.version<e.version;){let r=e.version,o=P_(e.teamId,n),s=c.managedReports.filter(a=>t.reports.some(l=>l._managedReportId===a.id));if(!(await Promise.all(s.flatMap(a=>[Ob(a.id,{signal:n,readAnnotations:o}),Fd(a.id,{signal:n,readAnnotations:o})]))).every(Boolean)||!t.current()||n.aborted)return!1;t.version=r}return!n.aborted&&t.current()}var H_=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{width:260px;flex-shrink:0;height:100%;background:var(--surface);backdrop-filter:var(--glass-blur);border-right:1px solid var(--border);display:flex;flex-direction:column;transition:width .15s ease-out;overflow:hidden}:host(.collapsed){width:32px}:host([inert]) .brand-tag,:host([inert]) .sidebar-search,:host([inert]) .sidebar-actions,:host([inert]) #file-list,:host([inert]) #sidebar-toggle,:host([inert]) #sidebar-home,:host([inert]) #sidebar-rail,:host([inert]) #encryption-toggle,:host([inert]) #storage-status{visibility:hidden}:host(.collapsed) .brand,:host(.collapsed) .sidebar-search,:host(.collapsed) #encryption-toggle,:host(.collapsed) #file-list{display:none}:host(.collapsed) .sidebar-header{padding:.5rem 0;justify-content:center}:host(.collapsed) .sidebar-actions{padding:.35rem 0;flex-direction:column;justify-content:center}:host(.collapsed) sidebar-delete-current,:host(.collapsed) #storage-status,:host(.collapsed) #sync-status .sync-label{display:none}:host(.collapsed) #sync-status{padding:.25rem;border:0}:host(.collapsed) #view-as-status,:host(.collapsed) #public-status,:host(.collapsed) .auth-login{display:none}:host(.collapsed) #auth-status[data-authed="1"]{padding:.2rem}:host(.collapsed[data-view-as]) #auth-status .user-avatar{box-shadow:0 0 0 1.5px var(--surface),0 0 0 3px var(--accent)}#sidebar-home,#sidebar-rail{display:none}:host(.collapsed) #sidebar-home{display:grid;margin:0 auto;padding:.3rem 0}:host(.collapsed) #sidebar-rail{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.35rem 0;list-style:none;overflow-y:auto;overscroll-behavior:none;scrollbar-width:none}.rail-item{width:26px;padding:.25rem 0 .2rem;display:grid;justify-items:center;gap:.15rem;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);font:inherit;font-size:.58rem;font-weight:600;line-height:1;white-space:nowrap;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.current{color:var(--accent);background:rgb(from var(--text) r g b / .1)}&:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}}:host([data-mode="managed"]:not([data-workspace-access])) .sidebar-search,:host([data-mode="managed"]:not([data-authenticated])) .sidebar-actions{display:none}.sidebar-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem .4rem;.brand{flex:1;min-width:0;display:flex;align-items:center;gap:.4rem;font-size:.95rem;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;user-select:none}.brand-button{display:inline-flex;align-items:center;gap:.5rem;background:transparent;border:0;padding:0;margin:0;font:inherit;color:inherit;border-radius:var(--ui-radius, 4px);&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}.brand-tag{padding:.08rem .25rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;font:inherit;font-size:.65rem;font-weight:500;color:var(--muted);text-transform:lowercase;letter-spacing:.02em;&[role=button]{cursor:default}&[role=button]:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}}@media(display-mode:window-controls-overlay){.sidebar-header{min-height:env(titlebar-area-height,0px);padding-left:max(.75rem,env(titlebar-area-x,0px));-webkit-app-region:drag;app-region:drag;.brand-button,.brand-tag,#encryption-toggle{-webkit-app-region:no-drag;app-region:no-drag}#sidebar-toggle{display:none}}}#sidebar-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}}#encryption-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.encrypted{color:var(--accent)}&.locked-pending{color:light-dark(#b25b00,#f0a060);outline:1px dashed currentcolor;outline-offset:-2px}}#encryption-toggle[hidden]{display:none!important}.sidebar-search{display:flex;align-items:center;margin:0 .55rem .25rem;padding:0 .25rem 0 .55rem;background:rgb(from var(--bg) r g b / .45);border:1px solid var(--border);border-radius:var(--ui-radius, 7px);transition:background .12s,border-color .12s;-webkit-app-region:no-drag;app-region:no-drag;&:has(input:focus){border-color:var(--accent);background:rgb(from var(--text) r g b / .06)}.sidebar-search-icon{flex-shrink:0;color:var(--muted);pointer-events:none;margin-right:.4rem}& input{flex:1;min-width:0;padding:.3rem 0;background:transparent;color:var(--text);border:0;outline:none;font:inherit;font-size:.78rem;&::placeholder{color:var(--muted)}&:focus::placeholder{color:transparent}&::-webkit-search-cancel-button{display:none}}}sidebar-view-button{display:contents}sidebar-view-button[hidden]{display:none!important}.sidebar-view-btn{position:relative;flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 3px);padding:0;margin-left:2px;transition:background .12s,color .12s;sidebar-view-button+sidebar-view-button>&{margin-left:.4rem}sidebar-view-button:last-of-type>&{margin-right:.1rem}& svg{width:14px;height:14px}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.active{color:var(--accent);background:rgb(from var(--text) r g b / .1)}.view-btn-count{position:absolute;top:-4px;right:-4px;background:var(--bg);color:color-mix(in srgb,var(--muted),var(--text) 15%);font-size:8.5px;font-weight:600;border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px;font-variant-numeric:tabular-nums;pointer-events:none}&.active .view-btn-count{color:var(--accent)}}#file-list{list-style:none;flex:1;overflow-y:auto;overscroll-behavior:none;scrollbar-gutter:stable;-webkit-app-region:no-drag;app-region:no-drag;padding:0 .35rem .25rem 0;margin:0;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:5px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.file-group-header{display:flex;align-items:center;justify-content:space-between;padding:.45rem .35rem .2rem .55rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);user-select:none;&:first-child{padding-top:.25rem}}.file-group-header.workspace-header .workspace-header-actions{display:flex;align-items:center;gap:.35rem}.workspace-add{width:18px;height:18px;display:grid;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);border-color:var(--accent)}}.file-item:is(.workspace-item,.team-item){display:block;border-radius:var(--ui-radius, 0 5px 5px 0)}.workspace-heading{display:flex;align-items:stretch;gap:.15rem}.workspace-meta{display:flex;align-items:center;justify-content:space-between;gap:.35rem;padding:0 .3rem .2rem calc(2rem - 3px);color:var(--muted);font-size:.68rem;line-height:1.3;white-space:nowrap;user-select:none}.workspace-findings{min-width:0;overflow:hidden;text-overflow:ellipsis}.workspace-sections{display:inline-flex;flex-shrink:0;margin-left:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.workspace-sections button{padding:.06rem .25rem;border:0;background:transparent;color:var(--muted);font:inherit;font-size:.64rem;line-height:1.4;font-variant-numeric:tabular-nums;+button{border-left:1px solid var(--border)}&:hover:not(:disabled){background:var(--surface-active);color:var(--text)}&[aria-expanded=true]{background:rgb(from var(--accent) r g b / .1);color:var(--accent)}&:disabled{background:var(--surface-active);color:var(--muted)}}.workspace-share,.workspace-export,.workspace-leave{flex-shrink:0;width:22px;align-self:center;height:22px;display:none;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06);border-color:var(--accent)}}.file-item.team-item:focus-within .workspace-share{display:grid}@media(hover:none){.file-item.team-item .workspace-share{display:grid}}.workspace-leave:hover:not(:disabled){color:var(--critical, #f87171);border-color:var(--critical, #f87171)}@media(hover:hover){.file-item.team-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-export,.file-item.workspace-item:hover .workspace-leave{display:grid}}.workspace-rename-input{width:100%;box-sizing:border-box;background:var(--surface);color:var(--text);border:1px solid var(--accent);border-radius:var(--ui-radius, 3px);padding:0 .25rem;margin:-1px 0;font:inherit;font-size:.76rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;outline:none}.file-item.team-item .team-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item>.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;background:none;border:0;padding:.2rem .3rem .2rem 1.3rem;font-family:inherit;font-size:.78rem;text-align:left}.file-item.team-bundle-item .file-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item .file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}.file-item{list-style:none;position:relative}.file-item.current:after{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;background:var(--accent);border-radius:var(--ui-radius, 0 2px 2px 0);pointer-events:none}.file-item button.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;padding:.2rem .3rem .2rem .55rem;background:transparent;color:var(--text);border:1px solid transparent;border-radius:var(--ui-radius, 0 5px 5px 0);font-family:inherit;font-size:.78rem;text-align:left;&:hover{background:rgb(from var(--text) r g b / .04)}.file-icon{flex-shrink:0;color:var(--muted)}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}.file-item:is(.workspace-item,.team-item) button.file-name{flex:1;min-width:0;padding-left:calc(.55rem - 3px)}.file-item .file-count{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);opacity:.65;font-size:.68rem;font-weight:500;font-variant-numeric:tabular-nums}.file-item.current button.file-name{background:rgb(from var(--accent) r g b / .09);border-color:rgb(from var(--accent) r g b / .16);.file-icon,.file-count{color:var(--text)}}.file-item.content-hidden button.file-name .file-label{color:var(--muted)}.file-item:is(.workspace-item,.team-item):hover{background:rgb(from var(--text) r g b / .04)}.file-item:is(.workspace-item,.team-item) button.file-name:hover{background:transparent}.file-item:is(.workspace-item,.team-item).current{background:rgb(from var(--accent) r g b / .09);border-radius:var(--ui-radius, 0 5px 5px 0);box-shadow:inset 0 0 0 1px rgb(from var(--accent) r g b / .16)}.file-item:is(.workspace-item,.team-item).current button.file-name{background:transparent;border-color:transparent}:host-context(body.theme-paper) .file-item.current{background:transparent;box-shadow:none;& button.file-name{background:transparent;border-color:transparent}.file-name:after{content:"";position:absolute;inset:0;border:1px dashed var(--border);border-left:0;pointer-events:none}}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(prefers-reduced-motion:reduce){:host,*,*:before,*:after{transition:none!important}}.file-item.indented button.file-name{padding-left:1.3rem}.file-item.indented:before{content:"";position:absolute;left:.85rem;top:0;bottom:0;width:1px;background:var(--border)}.file-item.bundle-missing>.file-name,.file-item.report-missing>.file-name{display:flex;align-items:center;gap:.5rem;padding:.2rem .3rem .2rem 1.4rem;color:var(--muted);font-size:.78rem;font-style:italic;cursor:default;.file-icon{flex-shrink:0;color:var(--muted);font-style:normal}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}:host-context(body.theme-pink) .workspace-rename-input,:host-context(body.theme-pink) .file-item button.file-name .file-label,:host-context(body.theme-pink) .file-item.bundle-missing .file-label,:host-context(body.theme-pink) .file-item.report-missing .file-label{font-family:inherit}.file-item.dragging button.file-name{opacity:.4}.file-item.workspace-item.drag-over button.file-name,.file-item.indented.drag-over button.file-name{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent)}.file-group-header.drag-over{background:rgb(from var(--accent) r g b / .12);border-radius:var(--ui-radius, 4px)}.sidebar-actions{padding:.35rem .55rem .45rem;border-top:1px solid var(--border);display:flex;gap:.35rem;align-items:center;justify-content:space-between;& button{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 4px);padding:.2rem .5rem;font-size:.72rem;font-family:inherit;-webkit-app-region:no-drag;app-region:no-drag;&:hover{color:var(--text);border-color:var(--accent)}&.danger:hover{color:var(--critical);border-color:var(--critical)}&[disabled]{opacity:.4;border-color:var(--border)!important;color:var(--muted)!important}}}sidebar-delete-current{display:contents}sidebar-delete-current[hidden]{display:none!important}sidebar-delete-current button{display:inline-flex;align-items:center;gap:.35rem;.trash-icon{flex-shrink:0}}#sync-status{display:inline-flex;align-items:center;gap:.35rem;border-color:transparent;&:hover{border-color:var(--accent)}.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .15)}&[data-status=online] .sync-dot{background:var(--green)}&[data-status=connecting] .sync-dot{background:var(--medium)}&[data-status=offline] .sync-dot{background:var(--critical)}}#sync-status[data-proxy-auth] .sync-dot{box-shadow:0 0 0 2px var(--accent)}#sync-status[data-degraded] .sync-dot{box-shadow:0 0 0 2px var(--medium)}#sync-status[hidden]{display:none}#storage-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .55rem;background:rgb(from var(--medium) r g b / .12);border:1px solid rgb(from var(--medium) r g b / .3);border-radius:var(--ui-radius, 5px);color:light-dark(#b25b00,#f0a060);font-size:.72rem;font-family:inherit;cursor:default;text-align:left;-webkit-app-region:no-drag;app-region:no-drag;&:hover{background:rgb(from var(--medium) r g b / .18);border-color:rgb(from var(--medium) r g b / .5)}.storage-dot{width:7px;height:7px;border-radius:50%;background:var(--medium);flex-shrink:0}}#storage-status[hidden]{display:none}#view-as-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .3rem .3rem .55rem;background:rgb(from var(--accent) r g b / .12);border:1px solid rgb(from var(--accent) r g b / .35);border-radius:var(--ui-radius, 5px);color:var(--text);font-size:.72rem;user-select:none;-webkit-app-region:no-drag;app-region:no-drag;.view-as-label{flex:1;display:grid;gap:.05rem;min-width:0}.view-as-label>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.view-as-note{color:var(--muted);font-size:.66rem}.view-as-stop{flex-shrink:0;padding:.15rem .5rem;font:inherit;font-weight:500}}#view-as-status[hidden]{display:none}#auth-status[hidden],#manage-status[hidden]{display:none!important}#auth-status{display:inline-flex;align-items:center}#auth-status[data-authed="1"]{display:inline-flex;align-items:center;gap:.4rem;max-width:12rem;padding:.2rem .35rem;border-color:transparent;border-radius:var(--ui-radius, 5px)}#auth-status[data-authed="1"]:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#manage-status[hidden]{display:none}#manage-status{display:inline-grid;place-items:center;width:1.8rem;height:1.8rem;padding:.25rem;border-color:transparent;color:var(--muted)}#manage-status:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#public-status{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:.2rem 0;color:var(--muted);font-size:.72rem;user-select:none}#public-status[hidden]{display:none}.auth-login{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font:inherit;font-size:.72rem;font-weight:400}.user-avatar{position:relative;flex-shrink:0;width:22px;height:22px;border-radius:50%;overflow:hidden;background:var(--accent);display:inline-grid;place-items:center;user-select:none}.user-avatar-lg{width:38px;height:38px}.user-avatar-fallback{font-size:.72rem;font-weight:600;line-height:1;color:var(--bg);text-transform:uppercase}.user-avatar-lg .user-avatar-fallback{font-size:1.05rem}.user-avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.user-avatar img.broken{display:none}.user-menu[popover]{position:fixed;inset:auto;margin:0;min-width:11rem;flex-direction:column;gap:.1rem;background:var(--surface, var(--bg));border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.3rem;box-shadow:0 4px 14px #00000047}.user-menu[popover]:not(:popover-open){display:none}.user-menu[popover]:popover-open{display:flex}.user-card{display:flex;align-items:center;gap:.5rem;padding:.3rem .35rem .45rem;border-bottom:1px solid var(--border);margin-bottom:.2rem}.user-id{display:flex;flex-direction:column;min-width:0}.user-login{font-weight:600;font-size:.82rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-name{font-size:.74rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-menu-row{display:block;width:100%;text-align:left;background:transparent;border:0;border-radius:var(--ui-radius, 4px);padding:.4rem .5rem;font:inherit;font-size:.82rem;color:var(--text)}.user-menu-row.logout-row{display:inline-flex;align-items:center;gap:.4rem;font-size:.76rem}.logout-row svg{flex:0 0 auto}.user-menu-row:hover{background:rgb(from var(--text) r g b / .08)}
|
|
166
|
+
`;var U_=`:is(.file-icon,.report-logo){&.brand-deepview{--brand-bg: #2563eb;--brand-fg: #fff}&.brand-claude{--brand-bg: #d97757;--brand-fg: #fff}&.brand-codex{--brand-bg: #fff;--brand-fg: #000}&.brand-vercel{--brand-bg: #000;--brand-fg: #fff}&.brand-markdown{--brand-bg: #374151;--brand-fg: #fff}&.brand-piolium{--brand-bg: #fbb829;--brand-fg: #1c1b19}.bg{fill:var(--brand-bg)}.fg{fill:var(--brand-fg)}}.file-icon:is(.brand-codex,.brand-vercel) .bg{stroke:var(--brand-fg);stroke-width:.5}.report-logo{display:grid;place-items:center;align-self:stretch;flex:0 0 20px;background:var(--brand-bg);border-right:1px solid var(--border)}
|
|
167
|
+
`;var Bb=class extends N{static styles=[...N.styles,P(rn)];static properties={_userName:{state:!0},_busy:{state:!0},_error:{state:!0},_phase:{state:!0},_success:{state:!0},_orphan:{state:!0},_orphanAck:{state:!0},_canCancel:{state:!0}};constructor(){super(),this._userName="",this._busy=!1,this._error="",this._phase="",this._success=!1,this._orphan=!1,this._orphanAck=!1,this._canCancel=!0,this._abortController=null}updated(t){if(t.has("_success")&&this._success){let n=this.renderRoot.querySelector("footer button.primary");n&&n.focus()}}beforeOpen(){typeof location<"u"&&(this._userName=location.hostname||"DeepView"),this._orphan=rc(),this._vaultStateUnsub=$t(()=>{if(this._settled)return;let t=rc();this._orphan&&!t&&ft()?(this._error="Encryption was just enabled in another tab. Close this dialog and reload to unlock.",this._busy=!1,this._canCancel=!0):this._orphan!==t&&(this._orphan=t)})}async focusInitial(){await this.updateComplete;let t=this._orphan?'input[data-role="orphan-ack"]':'input[data-role="name"]';this.renderRoot.querySelector(t)?.focus()}disconnectedCallback(){if(super.disconnectedCallback(),this._vaultStateUnsub){try{this._vaultStateUnsub()}catch{}this._vaultStateUnsub=null}}_finish(t){if(!this._settled){if(this._abortController)try{this._abortController.abort()}catch{}super._finish(!!t)}}_onClose=()=>this._finish(this._success);_onCancel=()=>{this._busy&&!this._canCancel||this._finish(!1)};_onDialogCancel=t=>{if(this._busy&&!this._canCancel){t.preventDefault();return}this._finish(!1)};_onNameInput=t=>{this._userName=t.target.value};_onOrphanAckInput=t=>{this._orphanAck=t.target.checked};_onWipeOrphan=async()=>{if(!this._busy&&this._orphanAck){if(ft()){this._error="Encryption was just enabled in another tab. Reload this page to unlock.";return}this._busy=!0,this._canCancel=!1,this._error="",this._phase="Clearing previous vault state\u2026";try{await ef({refuseIfEnabled:!0}),location.reload()}catch(t){this._error=`Could not clear previous vault state: ${t?.message??t}`,this._phase=""}finally{this._busy=!1,this._canCancel=!0}}};_onEnable=async()=>{if(!this._busy){if(!tr()){this._error="Passkeys are not supported in this browser.";return}this._busy=!0,this._canCancel=!0,this._error="",this._phase="Registering passkey\u2026",this._abortController=new AbortController;try{await Zp({userName:this._userName.trim()||"DeepView user",rpName:"DeepView",signal:this._abortController.signal,migrate:async({seal:n})=>{this._canCancel=!1,this._phase="Encrypting workspaces and metadata\u2026",await tf({seal:n}),this._phase="Encrypting triage data\u2026",await mm({seal:n}),this._phase="Encrypting report files\u2026",await df({seal:n}),this._phase="Encrypting bundles\u2026",await pf({seal:n})}})&&(this._success=!0,this._phase="")}catch(t){t?.name==="AbortError"?this._error="":this._error=t?.message??String(t),this._phase=""}finally{this._busy=!1,this._canCancel=!0,this._abortController=null}}};_body(){if(this._orphan)return u`<p class="wsl-error">DeepView found an abandoned passkey setup on this device. The original passkey can no longer be accessed, so any local data still encrypted under it is <strong>unreadable</strong> and cannot be recovered.</p><p class="nwd-note ui-hint">To enable encryption, DeepView will <strong>permanently delete ALL local DeepView data on this device</strong> — including any plaintext workspaces or reports you may have added after the previous passkey was lost — and then register a fresh passkey. This is irreversible. There is no backup.</p><label class="wsl-ack"><input type="checkbox" data-role="orphan-ack" .checked="${this._orphanAck}" ?disabled="${this._busy}" @change="${this._onOrphanAckInput}"> <span>I understand all local DeepView data on this device will be deleted.</span></label> ${this._phase?u`<p class="nwd-note">${this._phase}</p>`:g} ${this._error?u`<p class="wsl-error">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" ?disabled="${this._busy&&!this._canCancel}" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${this._busy||!this._orphanAck}" @click="${this._onWipeOrphan}">${this._busy?"Working\u2026":"Wipe and continue"}</button></footer>`;if(this._success)return u`<p class="nwd-note ui-hint"><strong>Encryption is on.</strong> Your triage data and report files are now sealed under your passkey. You'll be asked to unlock with the passkey on every fresh load.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${()=>this._finish(!0)}">Close</button></footer>`;let t=tr();return u`<p class="nwd-note ui-hint">Passkey encryption protects your local triage and report data with a hardware-backed key (TouchID, Windows Hello, security key). Without the passkey, the data on disk is unreadable — even to scripts running on this origin.</p><p class="wsl-error"><strong>If you lose access to this passkey, your data CANNOT be recovered.</strong> DeepView has no backup key, no recovery code, and no escrow. Make sure your passkey is backed up (iCloud Keychain / Google Password Manager sync, or a second registered device) before relying on encryption for important data.</p><p class="nwd-note ui-hint"><strong>Opt-in.</strong> You can disable encryption later from the lock icon in the sidebar header — the data is rewritten as plaintext and DeepView signals your authenticator to remove the passkey (where supported).</p>${t?g:u`<p class="wsl-error">Your browser doesn't expose the WebAuthn passkey API. Try Chrome, Safari, Edge, or Firefox in a recent version on a device with a platform authenticator.</p>`} <label class="wsl-field"><span>Passkey label</span> <input type="text" class="nwd-input" data-role="name" placeholder="DeepView" maxlength="200" .value="${this._userName}" @input="${this._onNameInput}"></label> ${this._phase?u`<p class="nwd-note">${this._phase}</p>`:g} ${this._error?u`<p class="wsl-error">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" ?disabled="${this._busy&&!this._canCancel}" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t||this._busy}" @click="${this._onEnable}">${this._busy?"Working\u2026":"Enable encryption"}</button></footer>`}render(){return u`<dialog @close="${this._onClose}" @cancel="${this._onDialogCancel}"><header><h3>${this._success?"Encryption enabled":this._orphan?"Previous passkey setup detected":"Enable passkey encryption"}</h3></header>${this._body()}</dialog>`}};customElements.define("passkey-setup-dialog",Bb);function Eu(){return re("passkey-setup-dialog")}var Pb=class extends N{static styles=[...N.styles,P(rn)];static properties={_busy:{state:!0},_error:{state:!0}};constructor(){super(),this._busy=!1,this._error="",this._abortController=null}_finish(t){if(!this._settled){if(this._abortController)try{this._abortController.abort()}catch{}super._finish(!!t)}}_onCancel=()=>this._finish(!1);_onUnlock=async()=>{if(!this._busy){this._busy=!0,this._error="",this._abortController=new AbortController;try{if(await Mi({signal:this._abortController.signal})){this._finish(!0);return}this._error=""}catch(t){this._error=t?.message??String(t)}finally{this._busy=!1,this._abortController=null}}};render(){return u`<dialog @close="${this._onClose}"><header><h3>Unlock your data</h3></header><p class="nwd-note ui-hint">Your triage data and report files are encrypted with a passkey on this device. Unlock to load them.</p>${this._error?u`<p class="wsl-error">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">${this._busy?"Cancel":"Later"}</button> <button type="button" class="primary" ?disabled="${this._busy}" @click="${this._onUnlock}">${this._busy?"Waiting\u2026":"Unlock with passkey"}</button></footer></dialog>`}};customElements.define("passkey-unlock-dialog",Pb);function Fu(){return re("passkey-unlock-dialog")}var V_=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="8" width="10" height="6" rx="1"/><path d="M5 8V5.5a3 3 0 0 1 6 0V8"/></svg>`,t2=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="8" width="10" height="6" rx="1"/><path d="M5 8V5a3 3 0 0 1 6 -0.5"/></svg>`,Ne=null;async function Db(){if(!Ne)return;if(await Mt(),R()){Ne.hidden=!0;return}if(!tr()){Ne.hidden=!0;return}let e=ft();Ne.hidden=!1;let t=Jo();Ne.classList.toggle("encrypted",e&&t),Ne.classList.toggle("locked-pending",e&&!t),e&&t?(Ne.dataset.tooltip="Encryption on \u2014 click to disable",Ne.setAttribute("aria-label","Disable encryption"),J(V_,Ne)):e?(Ne.dataset.tooltip="Encryption on, locked \u2014 click to unlock",Ne.setAttribute("aria-label","Unlock encrypted data"),J(V_,Ne)):(Ne.dataset.tooltip="Encryption off \u2014 click to enable",Ne.setAttribute("aria-label","Enable encryption"),J(t2,Ne))}async function n2(){if(confirm(`Disable encryption?
|
|
168
168
|
|
|
169
169
|
Your local triage and report data will be rewritten as plaintext.
|
|
170
170
|
|
|
171
|
-
IMPORTANT: DeepView cannot directly delete your passkey. Most browsers / password managers require you to remove the entry manually after disabling. You can re-enable encryption later.`))try{(await
|
|
171
|
+
IMPORTANT: DeepView cannot directly delete your passkey. Most browsers / password managers require you to remove the entry manually after disabling. You can re-enable encryption later.`))try{(await Qp({migrate:async({open:t})=>{await nf({open:t}),await gm({open:t}),await uf({open:t}),await ff({open:t})}}))?.disabled&&alert(`Encryption disabled. Your data is now plaintext.
|
|
172
172
|
|
|
173
173
|
To complete cleanup, remove the DeepView passkey from your password manager / OS settings:
|
|
174
174
|
\u2022 macOS / iOS: Settings \u2192 Passwords
|
|
175
175
|
\u2022 Windows: Settings \u2192 Accounts \u2192 Sign-in options \u2192 Passkeys
|
|
176
176
|
\u2022 Chrome: chrome://settings/passkeys
|
|
177
|
-
\u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function
|
|
178
|
-
`;function Tb(){let e=navigator.userAgent;return/AppleWebKit/u.test(e)&&!/Chrome\/|Chromium|Edg\/|OPR\/|Android/u.test(e)?"webkit":/Firefox\//u.test(e)?"firefox":"chromium"}var Mb=class extends N{static styles=[...N.styles,P(C_)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await cs()){this._finish("granted");return}this._retryDenied=!0};_chromiumBody(){let t=location.hostname==="localhost"?u`Plain <code>localhost</code> can never qualify — for local testing open the app via <code>127.0.0.1</code> instead.`:g;return u`<p class="nwd-intro">Chromium-based browsers (Chrome, Edge, Brave, …) never show a prompt — persistence is granted silently, and only to sites the browser considers important. Any of these qualifies it:</p><ul class="spd-list"><li><strong>Install the app</strong> — the install icon at the right end of the address bar, or the browser menu's Install entry.</li><li><strong>Bookmark</strong> this page.</li><li>Keep using the site — regular visits raise its engagement score.</li></ul><p class="nwd-note ui-hint">The browser re-evaluates on every request, so after any of the above press <strong>Try again</strong>.${t}</p>`}_firefoxBody(){return u`<p class="nwd-intro">Firefox asks with a permission prompt. A dismissed or blocked prompt is remembered, and the site can't re-ask until the old answer is cleared:</p><ol class="spd-list"><li>Click the permissions icon next to the address bar.</li><li>Clear the <strong>Store Data in Persistent Storage</strong> entry if it's blocked.</li><li>Press <strong>Try again</strong> below and choose <strong>Allow</strong>.</li></ol>`}_webkitBody(){return u`<p class="nwd-intro">Safari — and every iOS browser — additionally deletes a site's storage after <strong>7 days</strong> of browser use without interacting with the site, and no permission exempts a normal tab. Installing the app is what does:</p><ul class="spd-list"><li>On iPhone / iPad: open the <strong>Share</strong> menu, choose <strong>Add to Home Screen</strong>, and use the app from that icon.</li><li>In Safari on macOS: choose <strong>File → Add to Dock…</strong> and use the app from the Dock.</li><li>Installed web apps are exempt from the 7-day cleanup. Otherwise, use the site at least once a week.</li></ul>`}render(){let t=Tb(),n=t==="webkit"?this._webkitBody():t==="firefox"?this._firefoxBody():this._chromiumBody();return u`<dialog @close="${this._onClose}"><header><h3>Protect stored data</h3></header><p class="nwd-intro">Reports, bundles and triage live in the browser's <strong>best-effort storage</strong> — the browser is allowed to delete all of it at once under disk pressure or after long inactivity, without asking. The persistent-storage request that would prevent this was just declined.</p>${n}<footer class="nwd-actions">${this._retryDenied?u`<span class="spd-denied" role="status">Still not granted.</span>`:g} <span class="nwd-spacer"></span> ${t==="webkit"?g:u`<button type="button" @click="${this._onRetry}">Try again</button>`} <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("storage-persist-dialog",Mb);function __(){return new Promise(e=>{let t=document.createElement("storage-persist-dialog"),n=r=>{t.remove(),e(r)};t.addEventListener("resolve",r=>n(r.detail)),t.addEventListener("modal-conflict",()=>n(null)),document.body.append(t)})}var un=null,dn=null,Eb=!1,xu=!1,Ib=0;function Ab(){return Tb()==="webkit"}function R_(e){return e>=1e9?`${(e/1e9).toFixed(1)} GB`:e>=1e6?`${(e/1e6).toFixed(1)} MB`:e>=1e3?`${(e/1e3).toFixed(1)} kB`:`${e} B`}function M_(){if(!un)return;if(_()||!dn||dn.persisted!==!1||!Eb){un.hidden=!0;return}un.hidden=!1;let e=dn.usage===null||dn.quota===null?"":` Using ${R_(dn.usage)} of ${R_(dn.quota)}.`;un.querySelector(".storage-label").textContent="Storage at risk",un.dataset.tooltip="Reports, bundles and triage are in best-effort storage \u2014 the browser may delete them all under disk pressure or after long inactivity. "+(Ab()?"Click for how to protect them (on Safari and iOS browsers this needs the app installed to the Home Screen or Dock).":"Click to request persistent storage \u2014 if the browser declines, instructions for enabling it follow.")+e}function I_(e,t){let n=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!Ab()&&location.hostname==="localhost"?" Note: plain localhost can NEVER pass \u2014 Chromium keys site importance by registerable domain (IP literals excepted) and localhost has none; for local testing use 127.0.0.1 instead.":"";console.info(`storage: persistent-storage request not granted${n} \u2014 `+(Ab()?"Safari ties persistence to install state; add the app to the Home Screen / Dock.":"Chromium-based browsers never prompt and silently deny origins they don't consider important; installing the app, bookmarking it, allowing notifications, or regular use flips the heuristic (re-evaluated on every request). Firefox shows a prompt instead.")+r)}async function Su(){if(await Mt(),!un||_()){M_();return}let[e,t]=await Promise.all([dm(),(async()=>{try{return(await ce()).length>0||await Xp()}catch{return!1}})()]);dn=e,Eb=t,M_()}function Fb(){!un||Ib||(Ib=setTimeout(()=>{Ib=0,Su()},1e3))}async function T_(){if(xu||(await Su(),_()||dn?.persisted!==!1||!Eb||xu))return;xu=!0;let e=await cs();I_(e,!1),await Su()}async function MB(){if(dn&&dn.persisted===!1){xu=!0;let e=await cs();I_(e,!0),e||await __()}await Su()}function A_(e){un=e,un&&(un.addEventListener("click",()=>{MB()}),mt((t,n)=>{Fb(),n==="save"&&T_()}),T_())}function Lb(e){let t=document.querySelector("#landing-workspaces");if(!t)return;let n=e.filter(r=>r.reports.length>0||r.bundles?.length>0).toSorted((r,o)=>o.reports.length-r.reports.length||r.name.localeCompare(o.name)).slice(0,5);J(n.length>0?u`<nav class="landing-workspaces" aria-label="Workspaces"><div class="landing-workspace-row">${Z(n,r=>r.id,r=>{let o=ao(r),s=r.reports.filter(i=>Ie(i)!==ke).length;return u`<button type="button" class="landing-workspace" data-landing-workspace="${r.id}">${W(Oo)} <span class="landing-workspace-text"><span class="landing-workspace-name">${r.name}</span> <span class="landing-workspace-count">${o?.appMode?`${o.appFindings.toLocaleString()} finding${o.appFindings===1?"":"s"} \xB7 `:""}${s.toLocaleString()} report${s===1?"":"s"}</span></span></button>`})}</div></nav>`:g,t)}function Ob(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(n=>Be(n)==="revalidation");return t.length>0?t:e}function Nb(e,t=()=>[]){let{groups:n,conflicts:r}=od(e,{hideRuledOut:!0});if(r.size>0)return{appMode:!1};let o=sd(n,t,Ob);return Dl(o,{tabs:Ob,kindOf:Be,severityMode:"corrected"})?{appMode:!0,appFindings:o.filter(s=>Ob(s).some(i=>i.isApp)).length}:{appMode:!1}}var Tt=null,Bb=0;Yi(()=>{Bb++});function E_(e,t,n,{complete:r,isCurrent:o}){Tt={id:e.id,membership:JSON.stringify(e.reports.toSorted()),reports:t,token:n,complete:r,isCurrent:o}}function F_(e){return!Tt||Tt.id!==e.id||!Tt.isCurrent()||Tt.membership!==JSON.stringify(e.reports.toSorted())||!Em(e,Tt.token)?null:(Tt.linksRevision!==Bb&&(Tt.metadata=Tt.complete?Nb(Tt.reports,gt):{appMode:!1},Tt.linksRevision=Bb),Tt.metadata)}async function L_(e,t,n,{complete:r,isCurrent:o,onReady:s}){if(!o()||(await Xi(),!o()))return;let i=await Qi(e,n);if(!i||!o())return;let a=r?Nb(t,gt):{appMode:!1};await Lm(e,a,i)&&o()&&await s(a)}var Rr=null;function Pb(e){let{serverMode:t,session:n,sessionPending:r=!1,teamsPending:o=!1,teams:s=[],alternateMode:i="local",onSwitchMode:a}=e,l=document.querySelector("#drop-zone"),p=l?.querySelector(".managed-landing");if(!p)return;let d=t==="managed",f=t==="local",m=d&&(n?n.role!=="none"&&o:r);m?Rr?Rr.options=e:Rr={options:e,elapsed:!1,timer:setTimeout(()=>{Rr.elapsed=!0,Pb(Rr.options)},1e3)}:(clearTimeout(Rr?.timer),Rr=null);let h=m&&!Rr.elapsed;l.dataset.serverMode=d?"managed":"local",l.setAttribute("aria-label",d?h?n?"Loading teams":"Loading session":n?.role==="none"?"No workspace access":n?"Team findings":"Log in":"Drop reports here");let b=l.querySelector(".drop-local-copy");if(b&&(b.textContent=f?"Review locally in your browser.":"Review locally in your browser. Sync across devices when you need it."),!d||h){J(g,p);return}let y=n?.role==="admin"||n?.role==="manage",w=s.filter(v=>v.reports.length>0||v.bundles?.length>0);if(vn()&&!n){J(u`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,p);return}J(n==null?u`<section class="managed-login"><button type="button" class="managed-login-button" data-managed-login><svg viewBox="0 0 16 16" width="20" height="20" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> <span>Continue with GitHub</span></button><div class="managed-login-alternative"><span>or continue to</span> <button type="button" @click="${a}">${i} mode</button></div></section>`:n.role==="none"?u`<section class="managed-login" aria-labelledby="managed-no-access-title"><h1 id="managed-no-access-title">No workspace access</h1><p>Ask an administrator to grant access to this workspace.</p></section>`:u`<div class="managed-landing-hero"><p class="drop-eyebrow">Your security workspace</p><h1>Your team's findings, in focus.</h1><p class="drop-prompt-intro">${w.length>0?"Review the security findings shared with your account and turn them into clear next steps.":"Reports shared with your teams will appear here."}</p></div>${w.length>0?u`<nav class="managed-team-list" aria-label="Teams">${Z(w,v=>v.id,v=>u`<button type="button" class="managed-team-button" data-managed-team="${v.id}"><span class="managed-team-icon" aria-hidden="true">${W(Oo)}</span> <span class="managed-team-copy"><strong>${v.name}</strong> <span>${v.app?.appMode?`${v.app.appFindings.toLocaleString()} ${v.app.appFindings===1?"finding":"findings"} \xB7 `:""}${v.reports.length} ${v.reports.length===1?"report":"reports"} · Open findings</span> </span><svg class="managed-team-arrow" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m6 4 4 4-4 4"/></svg></button>`)}</nav>`:u`<p class="managed-landing-empty">No team reports are available yet.</p>`}<nav class="managed-content-links" aria-label="Content and activity">${[...y?[["manage-bundles","Bundles",Fo],["manage-scans","Scans",Vn],["manage-reports","Reports",yw]]:[],["npm","npm packages",Lo]].map(([v,x,k])=>u`<button type="button" class="managed-content-card" data-managed-page="${v}"><span class="managed-content-icon" aria-hidden="true">${W(k)}</span> <span>${x}</span></button>`)}</nav>${y?u`<div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${W(il)}</span><span>Manage</span></button></div>`:g}`,p)}var O_=`.dlg-tabs{display:flex;gap:.1rem;margin:0 0 .55rem;border-bottom:1px solid var(--border)}.dlg-tab{display:inline-flex;align-items:center;gap:.35rem;background:transparent;border:none;color:var(--muted);padding:.1rem .6rem .4rem;font:inherit;font-size:.85rem;font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s,border-color .12s;&:first-child{padding-left:0}&:hover:not(:disabled){color:var(--text)}&[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}&:disabled{opacity:.5}& svg{display:block}}
|
|
179
|
-
`;var
|
|
177
|
+
\u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function j_(){Db()}function G_(e){if(!e||e===Ne)return;Ne=e;let t=!1;Ne.addEventListener("click",async()=>{if(await Mt(),!R()&&!t){t=!0;try{if(!ft()){await Eu();return}if(!Jo()){await Fu();return}await n2()}finally{t=!1}}}),$t(Db),Db()}var K_=`.spd-list{margin:0 0 .8rem 1.15rem;color:var(--muted);font-size:.82rem;line-height:1.5;& li{margin:.3rem 0}& strong{color:var(--text);font-weight:600}}.spd-denied{color:light-dark(#b25b00,#f0a060);font-size:.78rem}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em}
|
|
178
|
+
`;function Wb(){let e=navigator.userAgent;return/AppleWebKit/u.test(e)&&!/Chrome\/|Chromium|Edg\/|OPR\/|Android/u.test(e)?"webkit":/Firefox\//u.test(e)?"firefox":"chromium"}var zb=class extends N{static styles=[...N.styles,P(K_)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await fs()){this._finish("granted");return}this._retryDenied=!0};_chromiumBody(){let t=location.hostname==="localhost"?u`Plain <code>localhost</code> can never qualify — for local testing open the app via <code>127.0.0.1</code> instead.`:g;return u`<p class="nwd-intro">Chromium-based browsers (Chrome, Edge, Brave, …) never show a prompt — persistence is granted silently, and only to sites the browser considers important. Any of these qualifies it:</p><ul class="spd-list"><li><strong>Install the app</strong> — the install icon at the right end of the address bar, or the browser menu's Install entry.</li><li><strong>Bookmark</strong> this page.</li><li>Keep using the site — regular visits raise its engagement score.</li></ul><p class="nwd-note ui-hint">The browser re-evaluates on every request, so after any of the above press <strong>Try again</strong>.${t}</p>`}_firefoxBody(){return u`<p class="nwd-intro">Firefox asks with a permission prompt. A dismissed or blocked prompt is remembered, and the site can't re-ask until the old answer is cleared:</p><ol class="spd-list"><li>Click the permissions icon next to the address bar.</li><li>Clear the <strong>Store Data in Persistent Storage</strong> entry if it's blocked.</li><li>Press <strong>Try again</strong> below and choose <strong>Allow</strong>.</li></ol>`}_webkitBody(){return u`<p class="nwd-intro">Safari — and every iOS browser — additionally deletes a site's storage after <strong>7 days</strong> of browser use without interacting with the site, and no permission exempts a normal tab. Installing the app is what does:</p><ul class="spd-list"><li>On iPhone / iPad: open the <strong>Share</strong> menu, choose <strong>Add to Home Screen</strong>, and use the app from that icon.</li><li>In Safari on macOS: choose <strong>File → Add to Dock…</strong> and use the app from the Dock.</li><li>Installed web apps are exempt from the 7-day cleanup. Otherwise, use the site at least once a week.</li></ul>`}render(){let t=Wb(),n=t==="webkit"?this._webkitBody():t==="firefox"?this._firefoxBody():this._chromiumBody();return u`<dialog @close="${this._onClose}"><header><h3>Protect stored data</h3></header><p class="nwd-intro">Reports, bundles and triage live in the browser's <strong>best-effort storage</strong> — the browser is allowed to delete all of it at once under disk pressure or after long inactivity, without asking. The persistent-storage request that would prevent this was just declined.</p>${n}<footer class="nwd-actions">${this._retryDenied?u`<span class="spd-denied" role="status">Still not granted.</span>`:g} <span class="nwd-spacer"></span> ${t==="webkit"?g:u`<button type="button" @click="${this._onRetry}">Try again</button>`} <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("storage-persist-dialog",zb);function q_(){return new Promise(e=>{let t=document.createElement("storage-persist-dialog"),n=r=>{t.remove(),e(r)};t.addEventListener("resolve",r=>n(r.detail)),t.addEventListener("modal-conflict",()=>n(null)),document.body.append(t)})}var un=null,dn=null,Vb=!1,Lu=!1,Hb=0;function Ub(){return Wb()==="webkit"}function Y_(e){return e>=1e9?`${(e/1e9).toFixed(1)} GB`:e>=1e6?`${(e/1e6).toFixed(1)} MB`:e>=1e3?`${(e/1e3).toFixed(1)} kB`:`${e} B`}function X_(){if(!un)return;if(R()||!dn||dn.persisted!==!1||!Vb){un.hidden=!0;return}un.hidden=!1;let e=dn.usage===null||dn.quota===null?"":` Using ${Y_(dn.usage)} of ${Y_(dn.quota)}.`;un.querySelector(".storage-label").textContent="Storage at risk",un.dataset.tooltip="Reports, bundles and triage are in best-effort storage \u2014 the browser may delete them all under disk pressure or after long inactivity. "+(Ub()?"Click for how to protect them (on Safari and iOS browsers this needs the app installed to the Home Screen or Dock).":"Click to request persistent storage \u2014 if the browser declines, instructions for enabling it follow.")+e}function Z_(e,t){let n=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!Ub()&&location.hostname==="localhost"?" Note: plain localhost can NEVER pass \u2014 Chromium keys site importance by registerable domain (IP literals excepted) and localhost has none; for local testing use 127.0.0.1 instead.":"";console.info(`storage: persistent-storage request not granted${n} \u2014 `+(Ub()?"Safari ties persistence to install state; add the app to the Home Screen / Dock.":"Chromium-based browsers never prompt and silently deny origins they don't consider important; installing the app, bookmarking it, allowing notifications, or regular use flips the heuristic (re-evaluated on every request). Firefox shows a prompt instead.")+r)}async function Ou(){if(await Mt(),!un||R()){X_();return}let[e,t]=await Promise.all([wm(),(async()=>{try{return(await ce()).length>0||await sf()}catch{return!1}})()]);dn=e,Vb=t,X_()}function jb(){!un||Hb||(Hb=setTimeout(()=>{Hb=0,Ou()},1e3))}async function J_(){if(Lu||(await Ou(),R()||dn?.persisted!==!1||!Vb||Lu))return;Lu=!0;let e=await fs();Z_(e,!1),await Ou()}async function o2(){if(dn&&dn.persisted===!1){Lu=!0;let e=await fs();Z_(e,!0),e||await q_()}await Ou()}function Q_(e){un=e,un&&(un.addEventListener("click",()=>{o2()}),mt((t,n)=>{jb(),n==="save"&&J_()}),J_())}function Gb(e){let t=document.querySelector("#landing-workspaces");if(!t)return;let n=e.filter(r=>r.reports.length>0||r.bundles?.length>0).toSorted((r,o)=>o.reports.length-r.reports.length||r.name.localeCompare(o.name)).slice(0,5);J(n.length>0?u`<nav class="landing-workspaces" aria-label="Workspaces"><div class="landing-workspace-row">${Z(n,r=>r.id,r=>{let o=co(r),s=r.reports.filter(i=>Ie(i)!==ke).length;return u`<button type="button" class="landing-workspace" data-landing-workspace="${r.id}">${W(Po)} <span class="landing-workspace-text"><span class="landing-workspace-name">${r.name}</span> <span class="landing-workspace-count">${o?.appMode?`${o.appFindings.toLocaleString()} finding${o.appFindings===1?"":"s"} \xB7 `:""}${s.toLocaleString()} report${s===1?"":"s"}</span></span></button>`})}</div></nav>`:g,t)}function Kb(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(n=>Be(n)==="revalidation");return t.length>0?t:e}function qb(e,t=()=>[]){let{groups:n,conflicts:r}=fd(e,{hideRuledOut:!0});if(r.size>0)return{appMode:!1};let o=gd(n,t,Kb);return jl(o,{tabs:Kb,kindOf:Be,severityMode:"corrected"})?{appMode:!0,appFindings:o.filter(s=>Kb(s).some(i=>i.isApp)).length}:{appMode:!1}}var Tt=null,Yb=0;Qi(()=>{Yb++});function eR(e,t,n,{complete:r,isCurrent:o}){Tt={id:e.id,membership:JSON.stringify(e.reports.toSorted()),reports:t,token:n,complete:r,isCurrent:o}}function tR(e){return!Tt||Tt.id!==e.id||!Tt.isCurrent()||Tt.membership!==JSON.stringify(e.reports.toSorted())||!Wm(e,Tt.token)?null:(Tt.linksRevision!==Yb&&(Tt.metadata=Tt.complete?qb(Tt.reports,xt):{appMode:!1},Tt.linksRevision=Yb),Tt.metadata)}async function nR(e,t,n,{complete:r,isCurrent:o,onReady:s}){if(!o()||(await ea(),!o()))return;let i=await ra(e,n);if(!i||!o())return;let a=r?qb(t,xt):{appMode:!1};await Um(e,a,i)&&o()&&await s(a)}var Mr=null;function Xb(e){let{serverMode:t,session:n,sessionPending:r=!1,teamsPending:o=!1,teams:s=[],alternateMode:i="local",onSwitchMode:a}=e,l=document.querySelector("#drop-zone"),p=l?.querySelector(".managed-landing");if(!p)return;let d=t==="managed",f=t==="local",m=d&&(n?n.role!=="none"&&o:r);m?Mr?Mr.options=e:Mr={options:e,elapsed:!1,timer:setTimeout(()=>{Mr.elapsed=!0,Xb(Mr.options)},1e3)}:(clearTimeout(Mr?.timer),Mr=null);let h=m&&!Mr.elapsed;l.dataset.serverMode=d?"managed":"local",l.setAttribute("aria-label",d?h?n?"Loading teams":"Loading session":n?.role==="none"?"No workspace access":n?"Team findings":"Log in":"Drop reports here");let b=l.querySelector(".drop-local-copy");if(b&&(b.textContent=f?"Review locally in your browser.":"Review locally in your browser. Sync across devices when you need it."),!d||h){J(g,p);return}let y=n?.role==="admin"||n?.role==="manage",w=s.filter(v=>v.reports.length>0||v.bundles?.length>0);if(vn()&&!n){J(u`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,p);return}J(n==null?u`<section class="managed-login"><button type="button" class="managed-login-button" data-managed-login><svg viewBox="0 0 16 16" width="20" height="20" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> <span>Continue with GitHub</span></button><div class="managed-login-alternative"><span>or continue to</span> <button type="button" @click="${a}">${i} mode</button></div></section>`:n.role==="none"?u`<section class="managed-login" aria-labelledby="managed-no-access-title"><h1 id="managed-no-access-title">No workspace access</h1><p>Ask an administrator to grant access to this workspace.</p></section>`:u`<div class="managed-landing-hero"><p class="drop-eyebrow">Your security workspace</p><h1>Your team's findings, in focus.</h1><p class="drop-prompt-intro">${w.length>0?"Review the security findings shared with your account and turn them into clear next steps.":"Reports shared with your teams will appear here."}</p></div>${w.length>0?u`<nav class="managed-team-list" aria-label="Teams">${Z(w,v=>v.id,v=>u`<button type="button" class="managed-team-button" data-managed-team="${v.id}"><span class="managed-team-icon" aria-hidden="true">${W(Po)}</span> <span class="managed-team-copy"><strong>${v.name}</strong> <span>${v.app?.appMode?`${v.app.appFindings.toLocaleString()} ${v.app.appFindings===1?"finding":"findings"} \xB7 `:""}${v.reports.length} ${v.reports.length===1?"report":"reports"} · Open findings</span> </span><svg class="managed-team-arrow" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m6 4 4 4-4 4"/></svg></button>`)}</nav>`:u`<p class="managed-landing-empty">No team reports are available yet.</p>`}<nav class="managed-content-links" aria-label="Content and activity">${[...y?[["manage-bundles","Bundles",No],["manage-scans","Scans",Vn],["manage-reports","Reports",Iw]]:[],["npm","npm packages",Bo]].map(([v,x,$])=>u`<button type="button" class="managed-content-card" data-managed-page="${v}"><span class="managed-content-icon" aria-hidden="true">${W($)}</span> <span>${x}</span></button>`)}</nav>${y?u`<div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${W(pl)}</span><span>Manage</span></button></div>`:g}`,p)}var rR=`.dlg-tabs{display:flex;gap:.1rem;margin:0 0 .55rem;border-bottom:1px solid var(--border)}.dlg-tab{display:inline-flex;align-items:center;gap:.35rem;background:transparent;border:none;color:var(--muted);padding:.1rem .6rem .4rem;font:inherit;font-size:.85rem;font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s,border-color .12s;&:first-child{padding-left:0}&:hover:not(:disabled){color:var(--text)}&[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}&:disabled{opacity:.5}& svg{display:block}}
|
|
179
|
+
`;var i2=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],Jb=class extends N{static styles=[...N.styles,P(rn),P(rR)];static properties={workspace:{attribute:!1},_tab:{state:!0},_password:{state:!0},_confirm:{state:!0},_noPassword:{state:!0},_includeBundleBytes:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspace=null,this._tab="workspace",this._password="",this._confirm="",this._noPassword=!1,this._includeBundleBytes=!1,this._busy=!1,this._error="",this._settled=!1}_finish(t){this._settled||(this._password="",this._confirm="",this.workspace=null,super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_reportCount(){return Array.isArray(this.workspace?.reports)?this.workspace.reports.length:0}_bundleCount(){return Array.isArray(this.workspace?.bundles)?this.workspace.bundles.length:0}_selectTab(t){this._busy||this._tab===t||(this._tab=t,this._error="",t!=="workspace"&&(this._password="",this._confirm=""))}_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_onNoPasswordToggle=t=>{this._noPassword=t.target.checked,this._error="",this._noPassword&&(this._password="",this._confirm="")};_onIncludeBundleBytesToggle=t=>{this._includeBundleBytes=t.target.checked,this._error=""};_canExport(){return this._busy?!1:this._tab==="raw"?this._reportCount()>0:this._noPassword?!0:(this._password??"").length>0&&this._password===this._confirm}_onExport=async()=>{if(!this._canExport())return;if(!this.workspace){this._error="No workspace selected.";return}let t=this._tab;this._busy=!0,this._error="";try{let{blob:n,filename:r}=t==="raw"?await Tm(this.workspace):await Mm(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;xv(n,r),this._finish({ok:!0,tab:t})}catch(n){if(this._settled)return;this._error=n?.message??String(n)}finally{this._busy=!1}};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onExport())};_tabsTemplate(){return g0({tabs:i2,current:this._tab,prefix:"wsl",disabled:this._busy,select:t=>this._selectTab(t)})}_workspacePanel(){let t=!this._password||!this._confirm||this._password===this._confirm,n=this._bundleCount();return u`<p class="nwd-note ui-hint">The export file carries this workspace's reports, triage state, comments, fixes, references to attached bundles (integrities only by default), and its private key. Encrypting the file with a password ensures only those with the password can attach the workspace after download.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-export-pw" maxlength="1024" ?disabled="${this._noPassword}" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-export-pw-confirm" maxlength="1024" ?disabled="${this._noPassword}" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-optout"><input type="checkbox" .checked="${this._noPassword}" @change="${this._onNoPasswordToggle}"> <span>Export without password (not recommended)</span></label> ${n>0?u`<label class="wsl-optout"><input type="checkbox" .checked="${this._includeBundleBytes}" @change="${this._onIncludeBundleBytesToggle}"> <span>Include bundle bytes (${n} bundle${n===1?"":"s"}; significantly larger file)</span></label>`:g} ${this._noPassword?u`<p class="wsl-error wsl-warning">Anyone who obtains this file can attach the workspace and read every report, triage decision, comment, and fix. Only opt out when you control where the file goes.</p>`:g} ${!this._noPassword&&!t?u`<p class="wsl-error" role="alert">Passwords don't match.</p>`:g}`}_rawPanel(){let t=this._reportCount(),n=this._bundleCount();return u`<div class="wsl-error wsl-warning"><p>This is the raw form of the reports.</p><p>It carries no triage data — no markers, triage states, comments, fixes, or per-report ignores${n>0?u`— and none of this workspace's ${n} attached bundle${n===1?"":"s"}`:g}.</p><p>This file is written unencrypted: anyone who obtains it can read every report in it.</p></div>${t===0?u`<p class="wsl-error" role="alert">This workspace has no reports to export.</p>`:g}`}_primaryLabel(){return this._busy?"Exporting\u2026":this._tab==="raw"?"Download reports":this._noPassword?"Export without password":"Export"}_primaryDanger(){return this._tab==="raw"||this._noPassword}_body(){return u`<div role="tabpanel" id="${`wsl-panel-${this._tab}`}" aria-labelledby="${`wsl-tab-${this._tab}`}">${this._tab==="raw"?this._rawPanel():this._workspacePanel()}</div>${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="${this._primaryDanger()?"primary danger":"primary"}" ?disabled="${!this._canExport()}" @click="${this._onExport}">${this._primaryLabel()}</button></footer>`}render(){return u`<dialog @close="${this._onClose}"><header>${this._tabsTemplate()}</header>${this._body()}</dialog>`}};customElements.define("workspace-export-dialog",Jb);function oR({workspace:e}={}){return Pl("workspace-export-dialog",{workspace:e??null},t=>{t.workspace=null})}async function sR(e){await oR({workspace:e})}var aR="deepview.passkey.firstImportPrompted";function a2(){try{return localStorage.getItem(aR)==="1"}catch{return!1}}function iR(){try{localStorage.setItem(aR,"1")}catch{}}async function Nu(){if(ft()||!tr()||a2())return;if(!confirm(`Encrypt your DeepView data with a passkey?
|
|
180
180
|
|
|
181
181
|
Your triage notes, workspaces, and report files are stored on this device. Encryption locks them under a passkey (TouchID, Windows Hello, security key) so scripts running here can't read them without the passkey.
|
|
182
182
|
|
|
183
|
-
You can change this anytime from the lock icon in the sidebar header.`)){P_();return}await $u(),ft()&&P_()}var zb=class extends N{static properties={_value:{state:!0}};constructor(){super(),this._value=""}_onInput=t=>{this._value=t.target.value};_onCreate=()=>{let t=(this._value??"").trim();t&&this._finish(t)};_onCancel=()=>this._finish(null);_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onCreate())};render(){let t=(this._value??"").trim().length>0;return u`<dialog @close="${this._onClose}"><header><h3>New workspace</h3></header><input type="text" class="nwd-input" placeholder="Workspace name" maxlength="200" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><p class="nwd-note ui-hint">Workspace triage is synchronized by default over an end-to-end encrypted channel. Triage on unattached reports stays local to this browser.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onCreate}">Create</button></footer></dialog>`}};customElements.define("new-workspace-dialog",zb);function z_(){return re("new-workspace-dialog")}var Wb=class extends N{static styles=[...N.styles,P(ot)];static properties={workspaceName:{type:String},reportCount:{type:Number},bundleCount:{type:Number},orphanedTriage:{type:Number},sharedTriage:{type:Number},_mode:{state:!0},_triage:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceName="",this.reportCount=0,this.bundleCount=0,this.orphanedTriage=0,this.sharedTriage=0,this._mode="detach",this._triage="keep",this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){if(this._settled)return;let n=this.reportCount>0?this._mode:"detach",r=n==="delete"&&this.orphanedTriage>0?this._triage:"keep";super._finish({confirmed:!!t,mode:n,triage:r})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_onModeChange=t=>{this._mode=t.target.value};_onTriageChange=t=>{this._triage=t.target.value};_triageSection(){if(this._mode!=="delete"||this.reportCount===0)return"";let t=this.orphanedTriage,n=this.sharedTriage;return t===0&&n===0?u`<p class="lwd-note">No local triage is attached to ${this.reportCount===1?"this report":"these reports"}.</p>`:t===0?u`<p class="lwd-note">Local triage on ${this.reportCount===1?"this report":"these reports"} is also attached to ${n===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:u`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="lwd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){let t=this.reportCount,n=this.bundleCount,r=t>0,o=t===1?"report":"reports",s=t===1?"it":"them",i=t===1?"stays":"stay",a=t===1?"is removed":"are removed",l=n>0?u`<p class="lwd-note">${n===1?"One bundle is":`${n} bundles are`} also attached. ${n===1?"It":"They"} will become unfiled — the bundle bytes stay on this device either way (delete bundles manually from the Bundles list if you want them gone).</p>`:"",p=r?u`<fieldset class="lwd-choice"><legend>What should happen to the <strong>${t}</strong> attached ${o}?</legend><label class="lwd-option"><input type="radio" name="lwd-mode" value="detach" ?checked="${this._mode==="detach"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Move ${s} out of the workspace</span> <span class="lwd-option-hint">The ${o} ${i} in this browser as unattached ${o}.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-mode" value="delete" ?checked="${this._mode==="delete"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Delete ${s} along with the workspace</span> <span class="lwd-option-hint">The ${o} ${a} from this browser.</span></span></label></fieldset>`:n>0?u`<p class="lwd-empty">No reports are attached to this workspace (only bundles, see below).</p>`:u`<p class="lwd-empty">No reports are attached to this workspace.</p>`;return u`<dialog @close="${this._onClose}"><header><h3>Leave workspace</h3></header><p class="lwd-body">Leave workspace <strong>"${this.workspaceName}"</strong> on this device?</p>${p} ${l} ${this._triageSection()}<ul class="lwd-list"><li>Workspace synchronization data stays on the sync server — peers (and your other devices) keep their copy.</li></ul><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Leave</button></footer></dialog>`}};customElements.define("leave-workspace-dialog",Wb);function W_({name:e,reportCount:t,bundleCount:n,triageImpact:r}={}){return re("leave-workspace-dialog",{workspaceName:e??"",reportCount:t??0,bundleCount:n??0,orphanedTriage:r?.orphanedCount??0,sharedTriage:r?.sharedCount??0})}var Hb=class extends N{static styles=[...N.styles,P(rn)];static properties={workspaceId:{type:String},initialName:{type:String},privateKeyBase64:{type:String},_name:{state:!0},_password:{state:!0},_confirm:{state:!0},_url:{state:!0},_busy:{state:!0},_error:{state:!0},_copied:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.initialName="",this.privateKeyBase64="",this._name="",this._password="",this._confirm="",this._url="",this._busy=!1,this._error="",this._copied=!1,this._settled=!1}beforeOpen(){this._name=this.initialName}focusInitial(){this.renderRoot.querySelector('input[data-role="name"]')?.focus()}_finish(){this._settled||(this._copiedTimer&&(clearTimeout(this._copiedTimer),this._copiedTimer=null),this._password="",this._confirm="",this._url="",this.privateKeyBase64="",super._finish(null))}_onClose=()=>this._finish();_onCancel=()=>this._finish();_onNameInput=t=>{this._name=t.target.value};_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_canGenerate(){return(this._name??"").trim().length>0&&(this._password??"").length>0&&this._password===this._confirm&&!this._busy}_onGenerate=async()=>{if(this._canGenerate()){this._busy=!0,this._error="";try{let t=await xm({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=Sm(t),this._password="",this._confirm=""}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onCopy=async()=>{if(this._url){this._error="";try{if(await navigator.clipboard.writeText(this._url),this._settled)return;this._copied=!0,this._copiedTimer&&clearTimeout(this._copiedTimer),this._copiedTimer=setTimeout(()=>{this._copied=!1,this._copiedTimer=null},1500)}catch{if(this._settled)return;this._error="Copy failed \u2014 select the link and copy it manually."}}};_onKeydown=t=>{t.key==="Enter"&&!this._url&&(t.preventDefault(),this._onGenerate())};_body(){return this._url?u`<p class="nwd-note ui-hint">Anyone with the link <strong>and</strong> the password can attach this workspace. Share them through separate channels.</p><label class="wsl-field"><span>Share link</span> <textarea class="wsl-link" readonly="readonly" rows="3" @focus="${t=>t.target.select()}">${this._url}</textarea></label> ${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Close</button> <button type="button" class="primary" @click="${this._onCopy}">${this._copied?"Copied":"Copy link"}</button></footer>`:u`<label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-pw" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-pw-confirm" maxlength="1024" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label><p class="nwd-note ui-hint">The link carries the workspace's identity (id, name, and private key) so the recipient joins the same sync chain. Triage, reports, and comments aren't in the link itself — they sync over once the recipient joins. The link decrypts with the password above; without it the link is useless.</p>${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g} ${this._password&&this._confirm&&this._password!==this._confirm?u`<p class="wsl-error" role="alert">Passwords don't match.</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._canGenerate()}" @click="${this._onGenerate}">${this._busy?"Generating\u2026":"Generate link"}</button></footer>`}render(){return u`<dialog @close="${this._onClose}"><header><h3>${this._url?"Workspace share link":"Share workspace by link"}</h3></header>${this._body()}</dialog>`}};customElements.define("workspace-share-link-dialog",Hb);function H_({id:e,name:t,privateKeyBase64:n}={}){return new Promise((r,o)=>{let s=document.createElement("workspace-share-link-dialog");s.workspaceId=e??"",s.initialName=t??"",s.privateKeyBase64=n??"",s.addEventListener("resolve",()=>{s.remove(),r()}),s.addEventListener("modal-conflict",i=>{s.privateKeyBase64="",s.remove(),o(Al(i.detail?.cause))}),document.body.append(s)})}var Ub=class extends Ee{static properties={reportName:{type:String},kindLabel:{type:String},orphanedTriage:{type:Number},sharedTriage:{type:Number},inRemote:{type:Boolean},_triage:{state:!0}};constructor(){super(),this.reportName="",this.kindLabel="report",this.orphanedTriage=0,this.sharedTriage=0,this.inRemote=!1,this._triage="keep"}confirmationResult(t){let n=this.orphanedTriage>0?this._triage:"keep";return{confirmed:t,triage:n}}_onTriageChange=t=>{this._triage=t.target.value};_remoteNotice(){return this.inRemote?u`<p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:g}_triageSection(){let t=this.orphanedTriage,n=this.sharedTriage;return t===0&&n===0?u`<p class="lwd-note">No local triage is attached to this ${this.kindLabel}.</p>`:t===0?u`<p class="lwd-note">Local triage on this report is also attached to ${n===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:u`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="drd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="drd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){return u`<dialog @close="${this._onClose}"><header><h3>Delete ${this.kindLabel}</h3></header><p class="lwd-body">Delete <strong>"${this.reportName}"</strong>?</p>${this._remoteNotice()} ${this._triageSection()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Delete</button></footer></dialog>`}};customElements.define("delete-report-dialog",Ub);function U_({name:e,kindLabel:t,triageImpact:n,inRemote:r}={}){return re("delete-report-dialog",{reportName:e??"",kindLabel:t||"report",orphanedTriage:n?.orphanedCount??0,sharedTriage:n?.sharedCount??0,inRemote:!!r})}var Vb=class extends Ee{static properties={bundleName:{type:String},inRemote:{type:Boolean}};constructor(){super(),this.bundleName="",this.inRemote=!1}_remoteNotice(){return this.inRemote?u`<p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:g}render(){return u`<dialog @close="${this._onClose}"><header><h3>Delete bundle</h3></header><p class="lwd-body">Delete <strong>"${this.bundleName}"</strong>?</p>${this._remoteNotice()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Delete</button></footer></dialog>`}};customElements.define("delete-bundle-dialog",Vb);function V_({name:e,inRemote:t}={}){return re("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var jb=class extends Ee{static properties={bundleName:{type:String},workspaceName:{type:String}};constructor(){super(),this.bundleName="",this.workspaceName=""}render(){return u`<dialog @close="${this._onClose}"><header><h3>Detach bundle</h3></header><p class="lwd-body">Detach <strong>"${this.bundleName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The bundle bytes stay on this device — drop it onto another workspace to attach it there.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Detach</button></footer></dialog>`}};customElements.define("detach-bundle-dialog",jb);function j_({name:e,workspaceName:t}={}){return re("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var Gb=class extends Ee{static properties={reportName:{type:String},workspaceName:{type:String}};constructor(){super(),this.reportName="",this.workspaceName=""}render(){return u`<dialog @close="${this._onClose}"><header><h3>Detach report</h3></header><p class="lwd-body">Detach <strong>"${this.reportName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The report bytes stay on this device — drop it onto another workspace to attach it there.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Detach</button></footer></dialog>`}};customElements.define("detach-report-dialog",Gb);function G_({name:e,workspaceName:t}={}){return re("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var Kb=class extends N{_onConfirm=()=>this._finish(!0);render(){return u`<dialog @close="${this._onClose}"><header><h3>Changes might not be saved</h3></header><p class="nwd-intro">Triage works in this tab, but this browser <strong>can't save its sync state right now</strong> — so changes that haven't reached the server could be lost if you reload the page.</p><p class="nwd-intro">This usually means the browser's storage is full, or another tab is running a newer version of the app (to avoid overwriting that newer version's data, this tab has paused saving).</p><p class="nwd-note ui-hint">Free up space if storage is full, and close or reload other tabs of this app to the same version. This notice clears on its own once saving works again.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("persistence-degraded-dialog",Kb);function K_(){return new Promise(e=>{let t=document.createElement("persistence-degraded-dialog");t.exclusive=!0;let n=r=>{t.remove(),e({shown:r})};t.addEventListener("resolve",()=>n(!0)),t.addEventListener("modal-conflict",()=>n(!1)),document.body.append(t)})}var qb=class extends N{focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}_onReload=()=>this._finish("reload");render(){return u`<dialog @close="${this._onClose}"><header><h3>Sign in to keep syncing</h3></header><p class="nwd-intro ui-hint">Triage can't reach the sync server — the connection is being redirected to an <strong>authentication proxy</strong> (for example Cloudflare Access). This usually means your access session has expired.</p><p class="nwd-note ui-hint">Reload the page to sign in again. Your triage is saved on this device, so reloading won't lose anything — or keep working offline and reload later.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onClose}">Not now</button> <button type="button" class="primary" @click="${this._onReload}">Reload page</button></footer></dialog>`}};customElements.define("proxy-auth-dialog",qb);function q_(){return new Promise(e=>{let t=document.createElement("proxy-auth-dialog");t.exclusive=!0;let n=(r,o)=>{t.remove(),e({shown:r,reload:o})};t.addEventListener("resolve",r=>n(!0,r.detail==="reload")),t.addEventListener("modal-conflict",()=>n(!1,!1)),document.body.append(t)})}var Ar=null,B=null,ey=null;function _u(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}gv();function EB(){return Zt().size}function FB(){return to().size}var Da=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,cy="application/x-deepview-report",ty="application/x-deepview-source-ws",za="application/x-deepview-bundle",Ru=!1,Mu=!1,LB={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[ke]:"Links"},Y_=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",ke],Mr="",Ut=!1,Wa=new Map,X_="",Ha=new vu;function OB(e,t){let n=c.currentView==="bundles"?c.selectedBundle:null,r=["findings","files","links"].includes(c.currentView)?c.currentFile:null,o=n?"bundles":"reports",s=r?Ss(r):null,i=e.filter(l=>n?l.bundles.includes(n):l.id===s),a=JSON.stringify([o,n||r,i.map(l=>l.id)]);if(!(!t&&a===X_)){X_=a;for(let l of i){let p=Wa.get(l.id)??new Set;p.add(o),Wa.set(l.id,p)}}}function J_(e,t={}){let r=`file-item${cR(e,t.workspaceId??null)?" current":""}${t.indented?" indented":""}`,o=oe(e),s=Ni(e),i=ye[Ae(e)]??ye.default;return u`<li class="${r}" data-file="${e}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${o}">${W(i)}<span class="file-label">${o}</span>${s===void 0?g:u`<span class="file-count">${s}</span>`}</button></li>`}function cR(e,t){return e===c.currentFile&&t===Ss(e)&&(c.currentView==="findings"||c.currentView==="files"||c.currentView==="links")}function dR(e,t={}){let n=`file-group-header${t.dropTarget?" default-reports":""}`;return u`<li class="${n}" data-default-reports="${t.dropTarget?"true":g}"><span class="group-label">${e}</span></li>`}var NB=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8h9"/></svg>`,BB=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2.5H3.5v11H8M10 5l3 3-3 3M13 8H6"/></svg>`;function PB(){return u`<li class="file-group-header workspace-header"><span class="group-label">Workspaces</span><span class="workspace-header-actions"><button type="button" class="workspace-add" data-action="new-workspace" aria-label="Create a new workspace">${NB}</button></span></li>`}function DB(){let e=m_(c.managedTeams,Mr);return e.length===0?g:u`${dR("Teams")} ${Z(e,({team:t})=>t.id,({team:t,reports:n,bundles:r})=>{let o=t.app,s=o?.appMode===!0,i=Ha.shown(t.id,"reports",s,Ut),a=Ha.shown(t.id,"bundles",s,Ut),l=n.filter(p=>p.analyzer!==ke).length;return u`<li class="${`file-item team-item${pR(t)?" current":""}`}" data-team-id="${t.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{Ir(t)}}">${yR}<span class="file-label">${t.name}</span></button> ${c.managed?.allowShare&&["admin","manage"].includes(c.managedSession?.role)?u`<button type="button" class="workspace-share" aria-label="${`Share ${t.name} publicly`}" @click="${()=>{zk(t)}}">${wR}</button>`:g}</div>${s?u`<div class="workspace-meta"><span class="workspace-findings">${o.appFindings.toLocaleString()} finding${o.appFindings===1?"":"s"}</span> <span class="workspace-sections" role="group" aria-label="Team files"><button type="button" data-team-section="reports" aria-expanded="${String(i)}" ?disabled="${Ut}">${l.toLocaleString()} report${l===1?"":"s"}</button> ${r.length>0?u`<button type="button" data-team-section="bundles" aria-expanded="${String(a)}" ?disabled="${Ut}">${r.length.toLocaleString()} bundle${r.length===1?"":"s"}</button>`:g}</span></div>`:g}</li>${i?Z(n,p=>p.id,p=>HB(t,p)):g} ${a?Z(r,p=>p.id,p=>VB(t,p)):g}`})}`}function uR(e,t,n,r){return u`<li><button type="button" class="${n?"rail-item current":"rail-item"}" aria-label="${e}" aria-current="${n?"true":g}" data-tooltip="${e}" @click="${r}">${t}<span aria-hidden="true">${g_(e)}</span></button></li>`}function zB(){return Z(c.managedTeams??[],e=>e.id,e=>uR(e.name,yR,pR(e)||(e.reports??[]).some(t=>fR(e,t))||(e.bundles??[]).some(t=>mR(e,t)),()=>{Ir(e)}))}function WB(e){return Z(e,t=>t.id,t=>uR(t.name,bR,vR(t)||t.reports.some(n=>cR(n,t.id))||t.bundles.some(n=>hR(n,t.id)),()=>xR(t.id)))}function pR(e){return c.currentManagedTeam===e.id&&!!c.currentWorkspace&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function fR(e,t){return c.currentManagedTeam===e.id&&c.currentManagedReport===t.id&&["findings","links"].includes(c.currentView)}function mR(e,t){return c.currentManagedTeam===e.id&&yr(c)===t.id}function HB(e,t){let n=oe(t.filename),r=fR(e,t);return u`<li class="${`file-item indented team-report-item${t.visible===!1?" content-hidden":""}${r?" current":""}`}"><button type="button" class="file-name" aria-label="${t.visible===!1?`${n} (hidden from teams)`:g}" data-tooltip="${n}" data-tooltip-repo="${kb(t)||g}" data-tooltip-placement="right-start" @click="${()=>{UB(e,t)}}">${W(ye[qm(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function UB(e,t){return Ir(e,t.id)}function VB(e,t){let n=mR(e,t);return u`<li class="${`file-item indented team-bundle-item${t.visible===!1?" content-hidden":""}${n?" current":""}`}"><button type="button" class="file-name" aria-label="${t.visible===!1?`${t.filename} (hidden from teams)`:g}" data-managed-bundle="${t.id}" data-managed-team="${e.id}" data-tooltip="${t.filename}" data-tooltip-repo="${kb(t)||g}" data-tooltip-bundle="${t.kind||g}" data-tooltip-built="${t.provenance==="build"?"true":g}" data-tooltip-stats="${f_(t)||g}" data-tooltip-commit="${t.summary?.commit||g}" data-tooltip-commit-info="${Es(t.commitInfo,t.summary?.commit,t.repoFullName)??g}" data-tooltip-placement="right-start">${gR}<span class="file-label">${t.filename}</span></button></li>`}function jB(){return u`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var gR=u`${W(Fo)}`;function hR(e,t){return c.selectedBundle===e&&c.currentView==="bundles"&&t===c.selectedBundleWorkspace}function Z_(e,t={}){let{integrity:n,name:r}=e,o=hR(n,t.workspaceId??null),i=`file-item bundle-item${t.workspaceId!=null?" indented":""}${o?" current":""}`;return u`<li class="${i}" data-bundle-integrity="${n}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${`${r}
|
|
184
|
-
${n}`}">${gR}<span class="file-label">${r}</span></button></li>`}function GB(e,t){let n=e.slice(0,15);return u`<li class="file-item indented bundle-item bundle-missing" data-bundle-integrity="${e}" data-workspace-id="${t}" data-tooltip="Bundle bytes not on this device — drop the matching bundle to attach."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${n}…</em></span></span></li>`}function KB(e,t){return u`<li class="file-item indented report-missing" data-workspace-id="${t}" data-tooltip="Report not on this device — it re-downloads automatically if a workspace member has uploaded it."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${oe(e)}</em></span></span></li>`}var bR=u`${W(Oo)}`,yR=u`<svg class="team-icon" viewBox="0 0 16 16" width="13" height="13" fill="currentColor" aria-hidden="true"><path d="M5.5 8a2.25 2.25 0 1 0 0-4.5 2.25 2.25 0 0 0 0 4.5Zm0 1C3.2 9 1.75 10.2 1.75 11.6V13h7.5v-1.4C9.25 10.2 7.8 9 5.5 9Zm5.25-1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm.25 1c-.43 0-.83.05-1.2.15.86.62 1.45 1.5 1.45 2.45V13h3.25v-1.3C14.5 10.1 13.15 9 11 9Z"/></svg>`,qB=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v8M5 7l3 3 3-3M3 13h10"/></svg>`,YB=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3H4v10h5"/><path d="M7 8h7M11 5l3 3-3 3"/></svg>`,wR=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 9.5L9 7.5"/><path d="M9.5 5.5L10.5 4.5a2.1 2.1 0 1 1 3 3l-1 1"/><path d="M6.5 11.5L5.5 12.5a2.1 2.1 0 1 1-3-3l1-1"/></svg>`;function vR(e){return c.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function XB(e,{app:t,compact:n,reports:r,bundles:o,showReports:s,showBundles:i}){let l=`file-item workspace-item${vR(e)?" current":""}`;return u`<li class="${l}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${bR}<span class="file-label" .textContent="${e.name}"></span></button> <button type="button" class="workspace-share" data-action="share-workspace" aria-label="Share workspace by link">${wR}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${qB}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${YB}</button></div>${n?u`<div class="workspace-meta">${t?.appMode?u`<span class="workspace-findings">${t.appFindings.toLocaleString()} finding${t.appFindings===1?"":"s"}</span>`:g} <span class="workspace-sections" role="group" aria-label="Workspace files"><button type="button" data-workspace-section="reports" aria-expanded="${String(s)}" ?disabled="${Ut}">${r.toLocaleString()} report${r===1?"":"s"}</button> ${o>0?u`<button type="button" data-workspace-section="bundles" aria-expanded="${String(i)}" ?disabled="${Ut}">${o.toLocaleString()} bundle${o===1?"":"s"}</button>`:g}</span></div>`:g}</li>`}function js(e){return Mr?oe(e).toLowerCase().includes(Mr):!0}var Yb=(e,t)=>oe(e).localeCompare(oe(t));async function H({revealSelection:e=!1}={}){await Mt();let t=Jt();if(Pb({serverMode:t,session:c.managedSession,teams:c.managedTeams,sessionPending:xo,teamsPending:So,alternateMode:Jn(c.serverModeConfig)?"e2e":"local",onSwitchMode:kR}),Iu(),_()){if(Ha.sync(c,e),!xo&&!So&&!Gs&&!pn&&_r({catalogOnly:!0}),c.bundles=(c.bundles??[]).filter(w=>w.managedId||w.npm),c.storedFiles=[],Lb([]),!B)return;J(u`${DB()}`,ey);let y=B.querySelector("#sidebar-rail");y?.setAttribute("aria-label","Teams"),y&&J(zB(),y),B.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),B.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),B.querySelector("#storage-status")?.setAttribute("hidden",""),fn();return}if(Ha.sync({managedTeams:[]}),B?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),B?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await am(),t!==Jt()){await H();return}xt().catch(()=>{}),Xi().catch(()=>{});let n=await ce();if(t!==Jt()){await H();return}let r=Y();OB(r,e),Lb(r);let[o]=await Promise.all([Je(),...r.map(y=>dt("workspace",y.id))]);if(t!==Jt()){await H();return}if(c.bundles=o,c.storedFiles=n,Fb(),!B)return;let s=new Set(n),i=new Set;for(let y of r)for(let w of y.reports)s.has(w)&&i.add(w);let a=new Map(o.map(y=>[y.integrity,y])),l=new Set;for(let y of r)for(let w of y.bundles)a.has(w)&&l.add(w);let p=new Map;for(let y of Y_)p.set(y,[]);for(let y of n){if(i.has(y)||!js(y))continue;let w=Ae(y);p.has(w)||p.set(w,[]),p.get(w).push(y)}let d=r.filter(y=>!Mr||y.name.toLowerCase().includes(Mr)||y.reports.some(w=>js(w))?!0:y.bundles.some(w=>{let v=a.get(w);return v&&js(v.name)})),f=o.filter(y=>!l.has(y.integrity)&&js(y.name));J(u`${PB()} ${Z(d,y=>y.id,y=>{let w=[],v=[];for(let T of y.reports)js(T)&&(s.has(T)?w.push(T):v.push(T));w.sort(Yb),v.sort(Yb);let x=[],k=[];for(let T of y.bundles){let I=a.get(T);I?(!Mr||js(I.name))&&x.push(I):Mr||k.push(T)}let $=F_(y)??ao(y),S=$?.appMode??Fm(y)===!0,C=Wa.get(y.id),R=!S||Ut||C?.has("reports")===!0,L=!S||Ut||C?.has("bundles")===!0,A=[...w,...v].filter(T=>Ie(T)!==ke).length,E=x.length+k.length;return u`${XB(y,{app:$,compact:S,reports:A,bundles:E,showReports:R,showBundles:L})} ${R?u`${w.map(T=>J_(T,{indented:!0,workspaceId:y.id}))}${v.map(T=>KB(T,y.id))}`:g} ${L?u`${x.map(T=>Z_(T,{workspaceId:y.id}))}${k.map(T=>GB(T,y.id))}`:g}`})} ${Y_.map(y=>{let w=(p.get(y)??[]).toSorted(Yb),v=y==="default";return w.length===0&&!(v&&Ru)?null:u`${dR(LB[y]??y,{dropTarget:v})} ${w.map(x=>J_(x))}`})} ${f.length>0||Mu?jB():null} ${Z(f,y=>y.integrity,y=>Z_(y))}`,ey);let m=B.querySelector("#sidebar-rail");m?.setAttribute("aria-label","Workspaces"),m&&J(WB(r),m);let h=B.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=EB());let b=B.querySelector('sidebar-view-button[kind="repositories"]');b&&(b.count=FB()),fn(),Af(n,$R)}var Xb=!1;function $R(){Xb||(Xb=!0,requestAnimationFrame(()=>{Xb=!1,H().catch(e=>console.warn("counts repaint:",e))}))}kt(()=>{H()});Om($R);async function kR(){B?.querySelector("#user-menu")?.hidePopover?.(),It?await c2():ff()&&await Eu()}function xR(e){let t=c.currentView==="findings"||c.currentView==="files";(e!==c.currentWorkspace||!t)&&Ks(e)}async function Q_(e){let t=e.target.closest("[data-team-section]");if(t){if(Ut||t.disabled)return;let f=t.closest("[data-team-id]")?.dataset.teamId;f&&Ha.toggle(f,t.dataset.teamSection),await H();return}let n=e.target.closest("[data-workspace-section]");if(n){if(Ut||n.disabled)return;let f=n.closest("[data-workspace-id]")?.dataset.workspaceId;if(!f)return;let m=n.dataset.workspaceSection,h=Wa.get(f)??new Set;h.has(m)?h.delete(m):h.add(m),Wa.set(f,h),await H();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await kR();return}if(e.target.closest('[data-action="go-home"]')){await At();return}let r=e.target.closest("[data-managed-bundle]");if(r){te.navigate(Xe({view:"bundles",teamId:r.dataset.managedTeam,bundleId:r.dataset.managedBundle,bundleTab:c.currentView==="bundles"?c.bundleDetailsTab:"overview"},c.managedTeams));return}let o=e.target.closest(".file-item[data-bundle-integrity]");if(o){if(o.classList.contains("bundle-missing"))return;let f=o.dataset.bundleIntegrity,m=o.dataset.workspaceId??null;if(c.selectedBundle===f&&c.currentView==="bundles"&&c.selectedBundleWorkspace===m)return;gr(f,void 0,{workspaceId:m}),ay(f,c.bundleDetailsTab),O(),H(),gd(f);return}let s=e.target.closest("sidebar-view-button");if(s){let f=s.getAttribute("kind");(f==="packages"||f==="repositories")&&(c.currentView=f,O(),H());return}if(e.target.closest('[data-action="new-workspace"]')){if(_())return;let f=await z_();f&&(await Cu(),await zf(f),H());return}let i=e.target.closest('[data-action="share-workspace"]');if(i){let f=i.closest("[data-workspace-id]"),m=f?Y().find(h=>h.id===f.dataset.workspaceId):null;m&&H_({id:m.id,name:m.name,privateKeyBase64:m.privateKey}).catch(h=>alert(`Failed to open share dialog: ${h.message}`));return}let a=e.target.closest('[data-action="export-workspace"]');if(a){let f=a.closest("[data-workspace-id]"),m=f?Y().find(h=>h.id===f.dataset.workspaceId):null;m&&B_(m).catch(h=>alert(`Failed to open export dialog: ${h.message}`));return}let l=e.target.closest('[data-action="leave-workspace"]');if(l){let f=l.closest("[data-workspace-id]"),m=f?Y().find(x=>x.id===f.dataset.workspaceId):null;if(!m)return;let h=Array.isArray(m.reports)?m.reports:[],b;try{b=await _c(h)}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let{confirmed:y,mode:w,triage:v}=await W_({name:m.name,reportCount:h.length,bundleCount:m.bundles.length,triageImpact:b});if(!y)return;if(!Y().some(x=>x.id===m.id)){alert(`Workspace "${m.name}" was removed elsewhere; nothing to leave.`);return}try{await lR(m.id,w,{triage:v})}catch(x){alert(`Failed to leave workspace: ${x.message}`)}return}let p=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(p){let f=p.dataset.workspaceId;f&&xR(f);return}let d=e.target.closest(".file-item[data-file]");if(d){let f=d.dataset.file,m=c.currentView==="findings"||c.currentView==="links",h=d.dataset.workspaceId??null;f&&(f!==c.currentFile||h!==c.currentReportWorkspace||!m)&&Ua(f,void 0,{workspaceId:h});return}if(e.target.closest("sidebar-delete-current")){if(c.currentView==="bundles"&&c.selectedBundle){let x=c.selectedBundle,k=(c.bundles??[]).find(C=>C.integrity===x)?.name??x,$=Y().filter(C=>Array.isArray(C.bundles)&&C.bundles.includes(x)).filter(C=>tg(C.id,x)).map(C=>C.id),{confirmed:S}=await V_({name:k,inRemote:$.length>0});if(!S)return;if(c.selectedBundle!==x){alert(`Active bundle changed during confirmation; aborting delete of "${k}".`);return}try{await aR({deleteFromRemoteWorkspaceIds:$})}catch(C){alert(`Failed to delete bundle: ${C.message}`)}return}if(!c.currentFile)return;let f=c.currentFile,m;try{m=await _c([f])}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let h=Y().filter(x=>Array.isArray(x.reports)&&x.reports.includes(f)).filter(x=>gs(x.id,f)).map(x=>x.id),b=h.length>0,y=zc(f)?"links file":"report",{confirmed:w,triage:v}=await U_({name:f,kindLabel:y,triageImpact:m,inRemote:b});if(!w)return;if(c.currentFile!==f){alert(`Active file changed during confirmation; aborting delete of "${f}".`);return}try{await sR({triage:v,deleteFromRemoteWorkspaceIds:h})}catch(x){alert(`Failed to delete ${y}: ${x.message}`)}return}if(e.target.closest("#sync-status")){G.status==="error"?G.dismissError():G.status==="off"?(!G.getServerUrl()&&Da&&G.setServerUrl(Da),G.setEnabled(!0)):G.setEnabled(!1);return}if(e.target.closest('[data-action="manage"]')){B?.querySelector("#user-menu")?.hidePopover?.(),_o("manage");return}if(e.target.closest('[data-action="view-as-stop"]')){B?.querySelector("#user-menu")?.hidePopover?.(),qk(c.managedSession?.csrfToken);return}if(e.target.closest('[data-action="my-reviews"]')){B?.querySelector("#user-menu")?.hidePopover?.(),te.navigate({view:"reviews"});return}if(e.target.closest('[data-action="managed-logout"]')){Kk(c.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){Ar.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",Ar.classList.contains("collapsed")?"1":"0")}catch{}}}var JB={placement:"right",gate:e=>{if(e.dataset.tooltipRepo||e.dataset.tooltipBundle)return!0;let t=e.querySelector(".file-label");return!t||(e.dataset.tooltip??"")!==t.textContent?!0:t.scrollWidth>t.clientWidth}};function ZB(e){Ut=e.target.value.length>0,Mr=e.target.value.trim().toLowerCase(),H()}var QB={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};function SR(){return G.getServerUrl()||Da?Y().length>0:!1}function CR(){let e=B?.querySelector("#auth-status");if(!e)return;let t=B?.querySelector("#manage-status"),n=B?.querySelector("#user-menu"),r=c.managedSession;Ar?.toggleAttribute("data-authenticated",r!=null),Ar?.toggleAttribute("data-workspace-access",r!=null&&r.role!=="none"),e2(r);let o=B?.querySelector("#public-status");if(o&&(o.hidden=!r?.publicShare),e.hidden=r==null||r.publicShare===!0,r==null){t&&(t.hidden=!0),e.dataset.authed="0",e.removeAttribute("popovertarget"),e.removeAttribute("aria-label"),J(g,e),n&&J(g,n);return}if(r.publicShare){t&&(t.hidden=!0),e.removeAttribute("popovertarget"),n&&J(g,n);return}let s=(r.login[0]??"?").toUpperCase(),i=typeof r.name=="string"&&/\s/u.test(r.name.trim())?r.name.trim():`@${r.login}`;if(e.dataset.authed="1",e.setAttribute("popovertarget","user-menu"),e.setAttribute("aria-label",`Account: ${r.login}`),J(u`${eR(s,r.id)}<span class="auth-login">${i}</span>`,e),t){let a=_()&&(r.role==="admin"||r.role==="manage");t.hidden=!a}n&&J(u`<div class="user-card">${eR(s,r.id,!0)} <span class="user-id"><span class="user-login">${r.login}</span> ${r.name?u`<span class="user-name">${r.name}</span>`:g}</span></div>${r.viewer?u`<button type="button" class="user-menu-row" data-action="view-as-stop">Return to @${r.viewer.login}</button>`:g} ${r.role==="none"?g:u`<button type="button" class="user-menu-row" data-action="my-reviews">My reviews</button>`} <button type="button" class="user-menu-row" data-action="toggle-client-mode">${Jn(c.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${BB}<span>Log out</span></button>`,n)}function e2(e){let t=B?.querySelector("#view-as-status");t&&(t.hidden=!e?.viewer,Ar?.toggleAttribute("data-view-as",e?.viewer!=null),J(e?.viewer?u`<span class="view-as-label"><span>Viewing as <strong>@${e.login}</strong></span> <span class="view-as-note">Read only · changes are not saved</span></span> <button type="button" class="view-as-stop" data-action="view-as-stop" aria-label="${`Stop viewing as ${e.login}`}">Stop</button>`:g,t))}document.addEventListener("managed-view-only",()=>{let e=c.managedSession;e?.viewer&&Ge(`Viewing as @${e.login} is read only: changes are not saved.`,{kind:"error"})});function eR(e,t,n=!1){let r=`/api/avatar/${encodeURIComponent(t)}`;return u`<span class="${n?"user-avatar user-avatar-lg":"user-avatar"}"><span class="user-avatar-fallback">${e}</span> ${Vm()||c.managedSession?.role==="none"?g:u`<img alt="" src="${r}" @error="${t2}">`}</span>`}function t2(e){e.currentTarget.classList.add("broken")}function _R(){let e=B?.querySelector(".brand-tag");if(e){let t=c.serverMode==="managed"||Jn(c.serverModeConfig);e.textContent=Jt(),t?(e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Switch from ${Jt()} mode`)):(e.removeAttribute("role"),e.removeAttribute("tabindex"),e.removeAttribute("aria-label"))}}function n2(){Ar&&(Ar.dataset.mode=Jt()),_()?(B?.querySelector("sidebar-delete-current")?.setAttribute("hidden",""),B?.querySelector("#encryption-toggle")?.setAttribute("hidden",""),B?.querySelector("#auth-status")?.removeAttribute("hidden")):(B?.querySelector("sidebar-delete-current")?.removeAttribute("hidden"),B?.querySelector("#encryption-toggle")?.removeAttribute("hidden"),B?.querySelector("#manage-status")?.setAttribute("hidden",""),B?.querySelector("#auth-status")?.setAttribute("hidden",""),B?.querySelector("#public-status")?.setAttribute("hidden",""),B?.querySelector("#view-as-status")?.setAttribute("hidden","")),x_()}function fn(e){let t=B?.querySelector("#sync-status");if(!t)return;if(_R(),n2(),c.serverMode==="managed"&&c.localMode){t.hidden=!0,G.setForcedOff(!0);let d=B?.querySelector("#auth-status");d&&(d.hidden=!0),B?.querySelector("#public-status")?.setAttribute("hidden","");return}if(_()){t.hidden=!0,G.setForcedOff(!0),CR();return}if(c.serverMode==="standalone"){t.hidden=!0;let d=B?.querySelector("#auth-status");d&&(d.hidden=!0);return}let n=B?.querySelector("#auth-status");n&&(n.hidden=!0);let r=SR(),o=pt()!=null;if(r&&o&&G.isEnabled()&&ra().catch(d=>{console.warn("sync: load failed",d)}),r&&o&&!G.getServerUrl()&&Da&&G.isEnabled()&&G.setServerUrl(Da),G.setForcedOff(!r),!r){t.hidden=!0;return}t.hidden=!1;let s=e??G.status;t.dataset.status=s;let i=G.persistenceDegraded;t.toggleAttribute("data-degraded",i);let a=G.proxyAuthRequired;t.toggleAttribute("data-proxy-auth",a);let l=i?"Not saving to this browser right now (storage may be full, or another tab is on a newer version). Changes that haven\u2019t synced could be lost on reload.":a?"Can\u2019t reach the sync server \u2014 the connection is being redirected to a sign-in proxy (e.g. Cloudflare Access). Reload the page to sign in again.":"";l?t.dataset.tooltip=l:delete t.dataset.tooltip;let p=t.querySelector(".sync-label");p&&(p.textContent=QB[s]??"")}G.onStatusChange(fn);var Jb=!1,ny=!1;async function RR(){if(!G.persistenceDegraded||ny||Jb)return;Jb=!0;let{shown:e}=await K_();if(Jb=!1,e){ny=!0;return}G.persistenceDegraded&&setTimeout(RR,1500)}G.onPersistenceDegraded(e=>{fn(),e?RR():ny=!1});var Zb=!1,ry=!1;async function MR(){if(!G.proxyAuthRequired||ry||Zb)return;Zb=!0;let{shown:e,reload:t}=await q_();if(Zb=!1,!e){G.proxyAuthRequired&&setTimeout(MR,1500);return}ry=!0,t&&location.reload()}G.onProxyAuthRequired(e=>{fn(),e?MR():ry=!1});function r2(e){if(e.target.closest("[data-workspace-section], [data-action]"))return;let t=e.target.closest(".file-item.workspace-item");if(!t)return;let n=t.querySelector(".file-label");if(!n||n.querySelector("input"))return;let r=t.dataset.workspaceId,o=Y().find(l=>l.id===r);if(!o)return;e.preventDefault();let s=document.createElement("input");s.type="text",s.value=o.name,s.className="workspace-rename-input",n.textContent="",n.append(s),s.focus(),s.select();let i=!1,a=async l=>{if(!i){i=!0;try{l&&await Hf(r,s.value)}catch(p){alert(`Failed to rename workspace: ${p.message}`)}finally{n.contains(s)&&(n.textContent=Y().find(p=>p.id===r)?.name??o.name),H()}}};s.addEventListener("keydown",l=>{l.key==="Enter"?(l.preventDefault(),a(!0)):l.key==="Escape"&&(l.preventDefault(),a(!1))}),s.addEventListener("blur",()=>a(!0)),s.addEventListener("click",l=>l.stopPropagation()),s.addEventListener("dblclick",l=>l.stopPropagation())}function Au(){for(let e of B.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function TR(e){return e.dataTransfer.types.includes(cy)||e.dataTransfer.types.includes(za)}function o2(e){let t=e.target.closest(".file-item[data-bundle-integrity]");if(t){if(t.classList.contains("bundle-missing")){e.preventDefault();return}let r=t.dataset.bundleIntegrity;e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(za,r),e.dataTransfer.setData(ty,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r),t.classList.add("dragging"),Mu=!0,H();return}let n=e.target.closest(".file-item[data-file]");n&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(cy,n.dataset.file),e.dataTransfer.setData(ty,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),Ru=!0,H())}function s2(){for(let e of B.querySelectorAll(".dragging"))e.classList.remove("dragging");Au(),(Ru||Mu)&&(Ru=!1,Mu=!1,H())}function i2(e){if(!TR(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),n=B.querySelector(".dragging")?.closest("[data-workspace-id]")?.dataset.workspaceId??null,s=t&&n&&t.dataset.workspaceId===n||!t&&!n;if(e.dataTransfer.dropEffect=s?"none":"move",Au(),!s)if(t){let i=t.dataset.workspaceId;for(let a of B.querySelectorAll(`[data-workspace-id="${CSS.escape(i)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(za)?"[data-default-bundles]":"[data-default-reports]",l=B.querySelector(a);l&&l.classList.add("drag-over")}}function a2(e){B.contains(e.relatedTarget)||Au()}async function l2(e){if(!TR(e))return;e.preventDefault(),e.stopPropagation(),Au();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(ty)||null;if(e.dataTransfer.types.includes(za)){let i=e.dataTransfer.getData(za);if(!i)return;if(r&&r!==n&&tg(r,i)){let a=(c.bundles??[]).find(d=>d.integrity===i)?.name??i,l=Y().find(d=>d.id===r),{confirmed:p}=await j_({name:a,workspaceName:l?.name??""});if(!p)return;try{await Qc(r,i)}catch(d){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,d)}}n&&await so(i,n),r&&r!==n&&await Gf(i,r),H();return}let o=e.dataTransfer.getData(cy);if(!o)return;if(r&&r!==n&&gs(r,o)){let i=Y().find(l=>l.id===r),{confirmed:a}=await G_({name:o,workspaceName:i?.name??""});if(!a)return;try{await Zc(r,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,l)}}n&&await oo(o,n),r&&r!==n&&await Vi(o,r),c.currentWorkspace&&(c.currentWorkspace===n||c.currentWorkspace===r)?await Ks(c.currentWorkspace):H()}var It=null,oy=null,Se=0,tR=0,Gs=null,xo=!0,So=!0,pn=!1,Pa=null;async function Eu({forgetLastView:e=!0,resetNavigation:t=!0}={}){te.reset({force:t}),Pa?.remove(),Pa=null;let n=++Se;if(So=!0,pn=!1,vk(),Hm(),vo(),Tu(),Xc(c.serverMode!=="e2e"),G.setForcedOff(!0),G.setProtocolLocked(c.serverMode!=="e2e"||!!It),iR({forgetLastView:e}),c.triage.clear(),_()){let r=Co();if(Vm()&&(await r,n!==Se))return}else{if(c.managedSession=null,c.managedTeams=[],await Ci(),n!==Se||(await Ji(),n!==Se))return;Pf()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),Iu(),_R(),fn(G.status),O(),await H()}async function aX(e){if(e!==void 0&&!Pw(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${Bw.join(", ")}.`);if(await Mt(),e===void 0&&(It||_()))return;let t=Se,n=e===void 0?null:await D();t===Se&&(It??={serverMode:c.serverMode,serverModeConfig:c.serverModeConfig,serverModeSelection:c.serverModeSelection,localMode:c.localMode,managed:c.managed},n&&n.setPreviewRole(e),c.serverMode="managed",Mn(!1),c.managedSession=null,c.managedTeams=[],await Eu({forgetLastView:!1}))}async function c2(){let e=It,t=oy;It=null,oy=null,wk(),Object.assign(c,e),await Eu({forgetLastView:!1}),t&&$o(t)}function $o(e,{runtime:t=!0}={}){if(It){oy=e;return}_u(!1);let n=pt()!=null,r=_(),o=c.serverMode;vn()&&e.managed&&(c.serverModeSelection="managed"),ic(e.mode),vn()&&e.managed&&Mn(!1);let s=o!==c.serverMode;c.managed=e.managed;let i=t&&c.githubNewIssueLabels!==(e.githubNewIssueLabels??"");if(t&&(c.githubNewIssueLabels=e.githubNewIssueLabels??""),t&&(c.deepviewScanServer=e.mode==="managed"?null:e.deepviewScanServer??null),Iu(),Xc(c.serverMode!=="e2e"),G.setProtocolLocked(c.serverMode!=="e2e"),Ip(e),r!==_()){Eu({forgetLastView:!1,resetNavigation:n&&!vn()&&!Ko(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}fn(G.status),s&&c.serverMode==="e2e"&&SR()&&G.isEnabled()&&ra().then(a=>{if(!(!a||c.serverMode!=="e2e"))for(let l of a.triageSync.openSessions)a.openWorkspace(l.workspaceId)}).catch(a=>console.warn("sync: resume failed",a)),s&&H(),i&&O({animate:!1}),_()&&Co()}function Co(){if(Gs?.generation===Se)return Gs.promise;xo=!0;let e={generation:Se,promise:null};return Gs=e,e.promise=d2().finally(()=>{Gs===e&&(Gs=null,H())}),e.promise}async function d2(){let e=Se,t=++tR,n=()=>e===Se&&t===tR&&_();try{let r=c.managedSession,o=await Ck({fallback:r});if(!n()||(c.managedSession=o,xo=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&(So=!0),H(),$k(o),r&&(r.id!==o?.id||r.role!==o?.role)?(c.managedTeams=[],c.bundles=[],vo(),Tu(),te.reset(),At({history:!1})):Object.hasOwn(di,c.currentView)&&Tr(c.currentView)&&O({animate:!1}),CR(),nR(),!await Fu(n)))return;document.querySelector("base")||(Pa=document.createElement("base"),Pa.href="/",document.head.prepend(Pa)),te.active&&Object.hasOwn(di,c.currentView)&&!Tr(c.currentView)?await te.navigate({view:Tr("manage")?"manage":"home"},{replace:!0}):o&&await te.start(m2,{onCancel:f2})}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(xo||So)&&(xo=!1,So=!1,H())}}y_((e,t,n)=>Fu(e,{strict:!0,signal:t,revision:n}));var u2=p_(_k),Qb=0;async function Fu(e,{strict:t=!1,signal:n=Le(),reuse:r=!1,revision:o=null}={}){let s=Se,i=c.managedSession,a=await u2({generation:s,session:i,signal:n,reuse:r,revision:o}),l=a??(t?null:c.managedTeams);if(n.aborted||l===null||!e()||s!==Se||!_())return!1;let p=c.managedTeams.find(h=>h.id===c.currentManagedTeam)?.name,d=kk(l);c.managedTeams=l;let f=a===null?Qb:++Qb;So=!1;let m=yr(c);if(a!==null&&m&&!pn){let h=me(),b=()=>e()&&!n.aborted&&!pn&&f===Qb&&h===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&_()&&yr(c)===m,y;try{y=await d_(c,l,{fetchCatalog:()=>jm({signal:AbortSignal.any([n,Le()])}),isCurrent:b,render:()=>O({animate:!1}),replaceRoute:w=>te.replaceRoute(w)})}catch(w){return b()?(w.name!=="AbortError"&&Ge(`Couldn't refresh bundle access: ${w.message}`,{kind:"error"}),H(),!1):e()}if(!b())return e();if(!y){ko=null;let w=At({history:!1}),v=me();return await w,v===me()&&s===Se&&e()&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&te.replaceRoute({view:"home"}),e()}}if(c_(c,l,d)){let h=l.find(x=>x.id===c.currentManagedTeam),y=h&&(c.currentManagedReport===null||h.reports.some(x=>x.id===c.currentManagedReport))?Xe({view:c.currentView==="links"?"findings":c.currentView,teamId:h.id,reportId:c.currentManagedReport},l):null;ko=null;let w=At({history:!1}),v=me();if(await w,t)return v===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&_()&&await te.navigate(y??{view:"home"},{replace:!0}),e();if(!e())return!1}if(!pn&&["workspace-reports","workspace-bundles"].includes(c.currentView)&&!l.some(h=>h.id===c.currentManagedTeam)){let h=At({history:!1}),b=me();return await h,b===me()&&s===Se&&e()&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&te.replaceRoute({view:"home"}),e()}return!pn&&(c.currentWorkspace||c.bundleDetails?.npm||p!==l.find(h=>h.id===c.currentManagedTeam)?.name)&&O({animate:!1}),H(),!(a!==null&&!pn&&!await ly(n))}var p2=new Set(["admin-users","manage-repos","manage-repo-risk","manage-teams","manage-import","manage-deduplication"]),ko=null;function Tr(e){let t=c.managedSession?.role;return e==="manage-links"&&!c.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!p2.has(e)||t==="admin")}var sy=0;function f2(){++sy,pn=!1,Oe();let e=Se;Fu(()=>e===Se&&_(),{reuse:!0})}async function m2(e,t){let n=++sy;pn=!0;try{return await g2(e,t)}finally{n===sy&&(pn=!1,H())}}async function g2(e,t){let n=ko===me()?ko:null;if(Oe(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&!await Fu(t,{reuse:!0}))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!Tr("manage-bundles")||(r=await jm(),!t()||!_()))||(e=Ow(e,c.managedTeams,r),!e))return!1;let o=n!==null&&ko===n&&c.currentManagedTeam===e.teamId&&c.currentManagedReport===e.reportId;if(!t()||!_()||e.view!=="home"&&(!c.managedSession||c.managedSession.role==="none"))return!1;if(e.finding){let{revealFinding:i}=await import("./chunk-U6OPEXIA.js");if(!t())return!1;let a=await i({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(l,p)=>Ir(l,p,{history:!1}),isCurrent:t});return t()?a.ok?(ko=me(),_r(),Xe({view:"findings",teamId:c.currentManagedTeam,reportId:c.currentManagedReport,finding:{id:e.finding.id}},c.managedTeams)):(a.reason&&Ge(a.reason),!1):!1}if(e.view==="workspace-reports"||e.view==="workspace-bundles")return oR(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let i=e.teamId==null?r.map(br):As(c.managedTeams);if(!await u_(e,i,t,H))return!1;let{compareId:a,compareMode:l,...p}=e;return Xe({...p,bundleTab:c.bundleDetailsTab,...Wg(c)},c.managedTeams,r)}if(e.view==="home")return At({history:!1});if(e.view==="npm")return _1(e,t,H);if(e.view==="reviews")return c.managedSession.publicShare?!1:(Bt(),c.currentView="reviews",c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1}),H(),e);if(e.view==="manage-deduplication"&&e.linkId)return Tr(e.view)&&await rR(e.linkId);if(Object.hasOwn(di,e.view))return _o(e.view,{...e,history:!1});let s=c.managedTeams.find(i=>i.id===e.teamId);return!s||!o&&!await Ir(s,e.reportId,{history:!1})||!t()?!1:(c.currentView!==e.view&&Bt(),c.currentView=c.currentLinks?"links":e.view,document.body.classList.remove("report-fullscreen"),O({animate:!1}),ko=me(),_r(),H(),document.querySelector("#main-content")?.scrollTo({top:0}),Xe({...e,view:c.currentView==="links"?"findings":c.currentView},c.managedTeams))}document.addEventListener("managed-bundle-open",e=>{if(_()&&typeof e.detail?.id=="string"){let t=br(e.detail),n=c.managedTeams,r=n.find(o=>o.id===c.currentManagedTeam&&o.bundles?.some(s=>s.id===t.managedId))??n.find(o=>o.bundles?.some(s=>s.id===t.managedId));te.navigate(wr(n,t,r?.id,c.currentView==="bundles"?c.bundleDetailsTab:"overview"))}});document.addEventListener("managed-import-complete",()=>{Co()});document.addEventListener("managed-feed-closed",()=>{xo=!0,vo(),Tu(),At({history:!1}).then(()=>Co()),Ge("Workspace access changed. Refreshing your session.")});async function _o(e,t={}){if(t.history!==!1&&_()&&(te.active||await Co(),te.active))return te.navigate({view:e,...t.actor?{actor:t.actor}:{},...t.bundleId?{bundleId:t.bundleId}:{},...["link","dependencies"].includes(t.scanMode)?{scanMode:t.scanMode}:{},...t.linkId?{linkId:t.linkId}:{}});if(!Object.hasOwn(di,e)||!_()||!Tr(e))return!1;let n=Oe(),r=Se;try{let o=await D();e==="manage-import"&&Tr(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(`${e}: managed bundle load failed:`,o),!1}return r!==Se||n!==me()||!_()||!Tr(e)?!1:(c.currentView=e,c.scanSelection=e==="manage-scans"?t.scanMode==="link"?{mode:"report",reportMode:"link"}:t.bundleId?{bundleId:t.bundleId,...t.scanMode==="dependencies"?{mode:"dependencies"}:{}}:null:null,c.bundleCreationRepoId=e==="manage-bundles"?t.createRepoId??null:null,O({animate:!1}),H(),Co(),document.querySelector("#main-content")?.scrollTo({top:0}),e==="manage-history"&&document.dispatchEvent(new CustomEvent("managed-history-filter",{detail:{actor:t.actor??""},bubbles:!0,composed:!0})),!0)}document.addEventListener("managed-notice",e=>Ge(e.detail.message,{kind:"error"}));document.addEventListener("managed-admin-navigate",e=>{let t=e.detail?.view,n=e.detail?.actor;typeof t=="string"&&_o(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})});var h2;function Mt(){return h2??=b2().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function b2(){let e=pt();if(e){ic(e.mode),c.managed=e.managed,Pl().then(o=>{if(o&&o!=="standalone")return $o(o)}).catch(o=>console.warn("server mode revalidation:",o));return}_u(!wi());let t=Pl(),n=await Tp(t,wi()?0:3e3),r=pt();if(r)return n&&n!=="standalone"?$o(n):$o(r,{runtime:!1});if(n&&n!=="standalone")return $o(n);n==="standalone"&&Bl(),c.serverMode="standalone",c.serverModeConfig=null,c.serverModeSelection=null,Mn(n===null),Xc(!0),_u(!1),fn(G.status),H(),n===null&&t.then(o=>{let s=pt(),i=o&&o!=="standalone"?o:s??o;if(i==="standalone"){if(Bl(),It){It.serverMode="standalone",It.serverModeConfig=null,It.serverModeSelection=null,It.localMode=!1;return}return Mn(!1),fn(G.status),H()}if(i)return $o(i,{runtime:i!==s})}).catch(o=>console.warn("server mode probe:",o))}function y2(){let e=B?.querySelector("#user-menu"),t=B?.querySelector("#auth-status");!e||!t||e.addEventListener("beforetoggle",n=>{if(n.newState!=="open")return;let r=t.getBoundingClientRect();e.style.left=`${Math.round(r.left)}px`,e.style.bottom=`${Math.round(window.innerHeight-r.top+6)}px`,e.style.top="auto",e.style.right="auto"})}function w2(e){Ar=e,B=e.renderRoot,ey=B.querySelector("#file-list"),S_(B.querySelector("#encryption-toggle")),A_(B.querySelector("#storage-status")),B.addEventListener("click",Q_),B.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),Q_(t))}),B.addEventListener("dblclick",r2),B.addEventListener("dragstart",o2),B.addEventListener("dragend",s2),B.addEventListener("dragover",i2),B.addEventListener("dragleave",a2),B.addEventListener("drop",l2),bi(B,JB),B.querySelector("#sidebar-search-input")?.addEventListener("input",ZB),y2(),fn(G.status),pt()||_u(!wi()),H(),G.onServerInfo(t=>{if(c.serverMode!=="e2e")return;let n=pt(),r=n&&{...n,...c.deepviewScanServer?{deepviewScanServer:c.deepviewScanServer}:{}};return $o(Mp(r,t))}),Mt(),c.serverMode==="managed"&&Co()}var iy=class extends Et{static styles=[P($_),P(v_)];render(){return u`<div class="sidebar-header"><h2 class="brand"><button class="brand-button" type="button" data-action="go-home"><span class="brand-name">Triage</span></button> <span class="brand-tag" data-action="toggle-client-mode">${Jt()}</span></h2><button id="encryption-toggle" type="button" hidden></button> <button id="sidebar-toggle" type="button" aria-label="toggle sidebar"><svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M2 4h12v1.5H2zM2 7.25h12v1.5H2zM2 10.5h12V12H2z"/></svg></button></div><button id="sidebar-home" class="rail-item" type="button" data-action="go-home" aria-label="Home" data-tooltip="Home"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2.5 7.5 8 3l5.5 4.5M4 6.5V13h3V9.5h2V13h3V6.5"/></svg></button><div class="sidebar-search"><svg class="sidebar-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg> <input id="sidebar-search-input" type="search" placeholder="Search reports…" aria-label="Search reports" autocomplete="off"><sidebar-view-button kind="packages"></sidebar-view-button><sidebar-view-button kind="repositories"></sidebar-view-button></div><ul id="file-list"></ul><ul id="sidebar-rail"></ul><button id="storage-status" type="button" hidden><span class="storage-dot" aria-hidden="true"></span> <span class="storage-label"></span></button><div id="view-as-status" role="status" hidden></div><div class="sidebar-actions"><sidebar-delete-current></sidebar-delete-current><button id="sync-status" type="button" data-status="off"><span class="sync-dot" aria-hidden="true"></span> <span class="sync-label">Sync off</span></button> <button id="auth-status" type="button" hidden></button> <span id="public-status" hidden>Public access link · Read only</span> <button id="manage-status" type="button" hidden data-action="manage" aria-label="Manage">${W(il)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){w2(this)}};customElements.define("app-sidebar",iy);async function IR(e){let t=await yl(e),n=await km(t);if(n.kind==="reports")return{kind:"reports",reports:n.reports};let r;if(n.kind==="encrypted"){if(r=await Wc({tryPassword:s=>wl(t,s)}),!r)return null}else r=vl(n.text);let o=await $m(r,{conflictResolver:async(s,i)=>{try{return await Kc(s,i,{title:"Triage conflicts on import",intro:"disagree with your local triage on",trailingNote:"Reports and non-conflicting triage were already merged; pick which side to keep for these disagreements.",importedSideLabel:"Apply imported"})}catch{let a=s.length;return alert(`Imported ${e.name}. Kept your local triage on ${a} conflicting entr${a===1?"y":"ies"} because another dialog is open \u2014 re-drop the file to pick again.`),null}}});return(c.currentFile||c.currentWorkspace)&&O(),{kind:"workspace",workspace:o}}var dy=class extends N{static styles=[...N.styles,P(ot)];static properties={workspaceId:{type:String},items:{type:Array},_running:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._running=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="download"]')?.focus()}_onClose=()=>this._finish({downloaded:[],failed:[]});_onCancel=()=>this._finish({downloaded:[],failed:[]});_fail(t,n,r,o){t.push({kind:r,identifier:n.identifier,reason:o}),this._errors=[...this._errors,{label:lr(n),reason:o}]}_onDownload=async()=>{if(this._running)return;this._running=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{if(r.kind==="bundle"){let s=await k0(this.workspaceId,r.identifier);if(!s.ok){this._fail(n,r,"bundle",s.reason??"unknown");continue}await so(r.identifier,this.workspaceId),t.push({kind:"bundle",identifier:r.identifier});continue}let o=await $0(this.workspaceId,r.identifier);if(!o||!o.ok){this._fail(n,r,"report",o?.reason??"sync is not available");continue}t.push({kind:"report",identifier:r.identifier})}catch(o){this._fail(n,r,r.kind,o?.message??String(o))}if(this._running=!1,this._done=!0,t.some(r=>r.kind==="report"))try{c.currentWorkspace===this.workspaceId&&await Ks(this.workspaceId)}catch{}n.length===0&&this._finish({downloaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Vc(this.items),o=n?u`Download <strong>"${lr(this.items[0])}"</strong> from the workspace's remote inventory?`:u`Download <strong>${t}</strong> remote ${r} into this workspace?`,s=n?g:jc(this.items),i=this._running?n?"Downloading\u2026":`Downloading ${t} ${r}\u2026`:n?"Download":`Download ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Download from remote</h3></header><p class="lwd-body">${o}</p>${s} ${Gc(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-download-dialog",dy);function Lu({workspaceId:e,items:t}={}){return re("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}function Ou(e,t,n=()=>null){if(!e.currentWorkspace)return null;if(e.currentManagedTeam){let i=e.managedTeams.find(a=>a.id===e.currentManagedTeam);return i?{id:i.id,scope:"team",title:`Team: ${i.name}`,reports:(i.reports??[]).filter(a=>a.analyzer!=="links").map(a=>({...a,managedId:a.id,name:a.filename,hidden:a.visible===!1,available:!0})),bundles:(i.bundles??[]).map(a=>({...br(a),hidden:a.visible===!1,available:!0}))}:null}let r=t.find(i=>i.id===e.currentWorkspace);if(!r)return null;let o=new Map(e.bundles.map(i=>[i.integrity,i])),s=new Set(e.storedFiles??[]);return{id:r.id,scope:"workspace",title:`Workspace: ${r.name}`,reports:[...new Set(r.reports??[])].filter(i=>n(i)!=="links").map(i=>({name:i,available:s.has(i)})),bundles:[...new Set(r.bundles??[])].map(i=>{let a=o.get(i);return a?{...a,available:!0}:{integrity:i,name:`${i.slice(0,24)}\u2026`,available:!1}})}}function uy(e,t){return t==="findings"?e.title:u`<button type="button" class="workspace-title-link" data-action="workspace-findings">${e.title}</button>`}function Va(e,t,n){if(!e)return g;let r=e[t].length;if(t==="bundles"&&r===0)return g;let o=n===`workspace-${t}`;return u`<button type="button" class="${`files-toggle-btn${o?" active":""}`}" data-action="${`workspace-${t}`}" aria-pressed="${String(o)}">${`${r} ${r===1?t.slice(0,-1):t}`}</button>`}function ja(e){return new Set(e.flatMap(t=>t?.source==="links"?[]:Object.keys(t?.tree??{}))).size}function py(e,t){if(!(e>1))return g;let n=t==="files";return u`<button type="button" class="${`files-toggle-btn${n?" active":""}`}" data-action="toggle-files" aria-pressed="${String(n)}">${`${e} files`}</button>`}function AR(e,t,n=0){if(!e)return u`<p class="workspace-content-empty">This workspace is no longer available.</p>`;let r=`workspace-${t}`,o=e[t];return u`<section class="workspace-content-view"><header class="page-head"><div class="page-title"><h1>${uy(e,r)}${Va(e,"reports",r)}${Va(e,"bundles",r)}${py(n,r)}</h1></div></header>${o.length>0?u`<ul class="workspace-content-list">${o.map(s=>{let i=[s.kind==="stasis"?"Stasis":s.kind==="sourcemap"?"Sourcemap":null,Number.isFinite(s.size)?ge(s.size):null,Number.isFinite(s.summary?.files)?`${s.summary.files.toLocaleString()} files`:null,Number.isFinite(s.summary?.lines)?`${s.summary.lines.toLocaleString()} LoC`:null].filter(Boolean).join(" \xB7 "),a=s.repoFullName?`${s.repoFullName}${s.repoDirectory?`/${s.repoDirectory}`:""}`:null;return u`<li class="${s.hidden?"workspace-content-hidden":""}"><button type="button" class="workspace-content-row" data-workspace-report="${t==="reports"?s.managedId??s.name:g}" data-workspace-bundle="${t==="bundles"?s.managedId??s.integrity:g}" ?disabled="${!s.available}"><svg class="workspace-content-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="${t==="bundles"?"m12 3 9 5v8l-9 5-9-5V8zM3 8l9 5 9-5M12 13v8M7.5 5.5l9 5":"M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9zM14 3v6h6M8 13h8M8 17h5"}/"></path></svg> <span class="workspace-content-label"><span class="workspace-content-name">${s.name}${s.hidden?u`<span class="workspace-content-visibility">Hidden</span>`:g}</span> ${a?u`<span class="workspace-content-repo">${a}</span>`:g} </span><span class="workspace-content-stats">${s.available?i:"Not available locally"}</span> ${s.available?u`<span class="workspace-content-arrow" aria-hidden="true">→</span>`:g}</button></li>`})}</ul>`:u`<p class="workspace-content-empty">No ${t} in this ${e.scope}.</p>`}</section>`}async function ER(e,{fetchReports:t,signal:n,isCurrent:r,render:o}){let s=e.currentView;if(!["workspace-reports","workspace-bundles"].includes(s)||!r()||n.aborted)return!0;let i=e.managedTeams.find(d=>d.id===e.currentManagedTeam);if(!i)return!0;let a=e.managedSession,l=()=>!n.aborted&&r()&&e.currentView===s&&e.managedSession===a&&e.currentManagedTeam===i.id&&e.managedTeams.find(d=>d.id===i.id)===i,p=await new Promise(d=>{let f=h=>{n.removeEventListener("abort",m),d(h)},m=()=>f(null);n.addEventListener("abort",m,{once:!0}),Promise.resolve().then(()=>n.aborted?null:t(i.id,{signal:n})).then(f,()=>f(null))});return l()?(e.workspaceContentFileCount=p?ja(p.map(d=>d.data)):0,o(),p!==null):!0}var Ro="deepview.lastFile";function ay(e,t="overview",{push:n=!1}={}){if(_()){let o=c.bundles.find(i=>i.integrity===e),s=o?.npm?Ra(o,t,vr(c,t)):wr(c.managedTeams,o,c.currentManagedTeam,t,vr(c,t),c.bundles);n?te.pushRoute(s):te.replaceRoute(s);return}let r=t&&t!=="overview"&&pp.has(t)?` ${t}`:"";Te(Ro,`b:${e}${r}`).catch(()=>{})}var ne=e=>e!==me();function v2(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Ga(e){return await v2(),e!==null&&ne(e)?!1:(O(),Tg(c.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!ne(e)).catch(()=>{}),!0)}function Bu(){ee.selected=null,ee.focusedPkg=null,ee.layoutCache=null,ee.solo=null,ee.hidden.clear(),ee.pathFilter="",Bt()}function qs(e){for(let t of G.openSessions)t&&!e.has(t.workspaceId)&&(G.closeSession(t.workspaceId),rg(t.workspaceId))}function fy(){be.classList.remove("active"),be.replaceChildren(),ut.classList.remove("hidden"),document.title="DeepView"}function FR(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function my(e){let t=LR(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function LR(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function Nu({name:e,content:t,existingNames:n}){if(!n.has(e))return await Xt(e,t),n.add(e),{name:e,content:t};let r;try{r=await fe(e)}catch(l){if(!FR(l))throw l;return await Xt(e,t),n.add(e),{name:e,content:t}}if(r===t)return{name:e,content:t};let s=Y().filter(l=>Array.isArray(l.reports)&&l.reports.includes(e)).filter(l=>gs(l.id,e)),i=await l_({name:e,workspaceNames:s.map(l=>l.name),existingNames:n});if(i.action==="cancel")return null;if(i.action==="rename"){let l=i.newName;return await Xt(l,t),n.add(l),{name:l,content:t}}let a;if(s.length>0)try{a=await x0(e)}catch(l){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,l)}try{await Xt(e,t),s.length>0&&await k2(e,s)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function $2(e,t){let n=typeof t?.github=="string"?t.github:"";if(n)try{await pf(e,n)}catch(r){console.warn(`Import: failed to adopt the repository "${n}" for "${e}":`,r)}}async function k2(e,t){let n;try{n=await Cn(e)}catch(r){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,r);return}for(let r of t)try{await sa(r.id);let o=await Jc(r.id,e,n);o&&o.ok===!1&&console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}): ${o.reason??"unknown"}`)}catch(o){console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}):`,o)}}async function gy(e){if(e=[...e],e.length===0||(await Mt(),_())||(await Cu(),_()))return;let t=null,n=null,r=new Set,o=new Set(await ce()),s=[];for(let i of e)try{let a=LR(i.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let f=await IR(i);if(f?.kind==="reports")for(let m of f.reports){if(typeof m?.name!="string"||!m.name||typeof m?.content!="string")continue;let h=Ve(m.content);if(!h.recognized){s.push(m.name);continue}let b=await Nu({name:m.name,content:m.content,existingNames:o});b&&(Ue(b.name,h.count,h.source),await $2(b.name,m.repo),t={name:b.name,content:b.content})}try{let m=await ce();o.clear();for(let h of m)o.add(h)}catch(m){console.warn("Import: failed to refresh existingNames after workspace import:",m)}continue}if(my(i.name)){let f=new Uint8Array(await i.arrayBuffer()),{integrity:m}=await Jr(i.name,f);n=m,r.add(m);continue}let p=await i.text(),d=Uw(p,i.name);if(d)for(let f of d){let{count:m,source:h}=Ve(f.content),b=await Nu({...f,existingNames:o});b&&(Ue(b.name,m,h),t={name:b.name,content:b.content})}else if(_w(p,a)==="codex"){let f=Cw(p);for(let{displayName:m,data:h}of f){let b=m.replaceAll("/","__")+".codex",y=JSON.stringify(h),{count:w,source:v}=Ve(y),x=await Nu({name:b,content:y,existingNames:o});x&&(Ue(x.name,w,v),t={name:x.name,content:x.content})}}else{let f=Ve(p);if(!f.recognized)throw new Error("not a recognized DeepView, DeepSec, Piolium, Claude Security, Codex, or Markdown (generic) report, and not a links file");let m=await Nu({name:i.name,content:p,existingNames:o});if(!m)continue;Ue(m.name,f.count,f.source),t={name:m.name,content:m.content}}}catch(a){alert(`Failed to load ${i.name}: ${a.message}`)}if(s.length>0){let i=s.length;alert(`Skipped ${i} report${i===1?"":"s"} no parser recognised: ${s.join(", ")}`)}await H(),t?await Ua(t.name,t.content):n&&(gr(n),ay(n,c.bundleDetailsTab),O(),await H(),gd(n)),Tg(r).catch(()=>{})}async function Ua(e,t,{workspaceId:n}={}){if(_())return;let r=Oe();c.currentManagedTeam=null,c.currentManagedReport=null,c.currentReportWorkspace=Ss(e,n);let o=new Set(Y().filter(i=>Array.isArray(i.reports)&&i.reports.includes(e)).map(i=>i.id));if(qs(o),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=e,c.currentWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),c.repoUrl=Ze(e),c.repoEditing=!1,Bu(),Te(Ro,Sc(e,c.currentReportWorkspace)).catch(()=>{}),t===void 0){try{t=await fe(e)}catch(i){if(ne(r))return;if(i&&i.message?.includes("vault locked")){if(await ku()&&!ne(r)){await Ua(e);return}ne(r)||(c.currentFile=null,await H());return}if(FR(i)){let a=Y().find(l=>Array.isArray(l.reports)&&l.reports.includes(e)&&gs(l.id,e));if(a)try{if(await sa(a.id),ne(r))return;let l=await Lu({workspaceId:a.id,items:[{kind:"report",identifier:e}]});if(ne(r))return;if(l?.downloaded?.some(p=>p.kind==="report"&&p.identifier===e)){await Ua(e);return}}catch(l){if(console.warn(`Re-download prompt for missing "${e}" failed:`,l),ne(r))return}ne(r)||(c.currentFile=null,await H());return}alert(`Failed to read ${e}: ${i.message}`),c.currentFile=null,await H();return}if(ne(r))return}let s=qn(t);if(s?(c.currentLinks={name:e,...s},c.currentView="links",O()):await Pu(e,t,r),!ne(r)){for(let i of o)G.openSession(i),G.refreshSession(i),sa(i);return await H(),!0}}function rR(e){return c.managedSession?.role!=="admin"?!1:Ir({id:null,reports:[{id:e}]},e,{history:!1,deduplication:!0})}function ly(e=Le()){let t=Le();return ER(c,{fetchReports:Km,signal:AbortSignal.any([e,t]),isCurrent:()=>_()&&Le()===t,render:()=>O({animate:!1})})}async function oR(e,t,{history:n=!0}={}){if(t!=="reports"&&t!=="bundles")return!1;let r=`workspace-${t}`,o=_(),s=o?c.managedTeams.find(p=>p.id===e):Y().find(p=>p.id===e);if(!s)return!1;if(o&&n&&te.active)return te.navigate(Xe({view:r,teamId:e},c.managedTeams));let i=o?`managed-team:${e}`:e,a=c.currentWorkspace===i?["workspace-reports","workspace-bundles"].includes(c.currentView)?c.workspaceContentFileCount:ja(c.reports):0,l=Oe();if(qs(new Set),qa({forgetLastView:!1}),c.currentWorkspace=i,c.workspaceContentFileCount=a,c.currentManagedTeam=o?e:null,c.currentView=r,o&&(c.bundles=As(c.managedTeams)),be.classList.add("active"),ut.classList.add("hidden"),document.body.classList.remove("report-fullscreen"),O({animate:!1}),document.querySelector("#main-content")?.scrollTo({top:0}),o||Te(Ro,`${t==="reports"?"wrs":"wbs"}:${e}`).catch(()=>{}),await H(),ne(l))return!1;if(O({animate:!1}),o)await ly();else{let p=await Promise.all((s.reports??[]).map(async d=>{try{return lp(await fe(d)).data}catch{return null}}));if(ne(l))return!1;c.workspaceContentFileCount=ja(p),O({animate:!1})}return!ne(l)}async function Ir(e,t=null,{history:n=!0,deduplication:r=!1}={}){if(!_()||!e||!Array.isArray(e.reports))return!1;if(n&&te.active)return te.navigate(Xe({view:"findings",teamId:e.id,reportId:t},c.managedTeams));if(t!==null&&!e.reports.some(m=>m.id===t))return!1;let o=Oe(),s=e.reports.find(m=>m.id===t&&m.visible===!1),i=Le(),a;try{a=r?await(await D()).fetchManagedLinkWorkspace(t,{signal:i}):await Km(e.id,{reportId:s?.id??null})}catch(m){return ne(o)||Ge(m.message||"Could not load link report."),!1}if(ne(o))return!1;if(xk(),a===null||t!==null&&!a.some(m=>m.id===t))return Ge("Could not load all team reports. Please try again."),!1;let l=a.find(m=>m.id===t&&m.data.source==="links"&&Array.isArray(m.data.links)),p=a.filter(m=>t===null||l||m.id===t),d=p.filter(m=>m.data.source!=="links"||!Array.isArray(m.data.links));qs(new Set);let f=document.createElement("p");f.setAttribute("role","status"),f.textContent="Loading report triage\u2026",be.replaceChildren(f),be.classList.add("active"),ut.classList.add("hidden"),c.currentView="findings",c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=t===null?null:a.find(m=>m.id===t).filename,c.currentWorkspace=t===null?`managed-team:${e.id}`:null,c.currentManagedTeam=e.id,c.currentManagedReport=t,A$(e.id,a),c.managedReports=p.map(m=>({id:m.id,filename:m.filename})),c.managedComments.clear(),c.managedIssues.clear(),c.managedReport=t===null?null:c.managedReports[0]??null,c.currentReportWorkspace=null,c.currentLinks=null,c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.repoUrl="",c.repoEditing=!1,Bu();for(let m of d)if(await Pu(m.filename,m.data,o,{renderView:!1,managedReportId:m.id,managedRepo:m.repo}),ne(o))return!1;if(d.length>0){let{createManagedAnnotationRead:m,hydrateManagedReportTriage:h}=await import("./chunk-QZ3A376W.js");if(ne(o))return!1;let b=async w=>{let v=m(c.currentManagedTeam,w);return(await Promise.all(d.flatMap(k=>[h(k.id,{renderView:!1,signal:w,readAnnotations:v}),xd(k.id,{signal:w,readAnnotations:v})]))).every(Boolean)&&!w.aborted&&!ne(o)},y=r?await b(Le()):await _r({hydrate:b});if(ne(o))return!1;if(!y)return await At({history:!1}),Ge("Could not load report annotations. Open the team or report again to retry."),!1}if(l){if(c.currentView="links",c.currentLinks={name:l.filename,groups:l.data.links,skipped:0,...r?{managedId:t}:{}},!await Ga(o))return!1}else if(d.length===0)Du();else if(aa(fo()),!await Ga(o))return!1;return _r(),await H(),!0}async function Ks(e){if(_())return;c.currentManagedTeam=null,c.currentManagedReport=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear();let t=Y().find(f=>f.id===e);if(!t)return;let n=Oe();qs(new Set([e])),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),dt("workspace",e),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=null,c.currentWorkspace=e,c.currentReportWorkspace=null,c.currentLinks=null,c.repoUrl="",c.repoEditing=!1,Bu(),Te(Ro,`ws:${e}`).catch(()=>{}),t.reports.length===0&&fy();let r=await Qi(t);if(ne(n))return;let o=!0,s=t.reports.map(f=>fe(f).catch(()=>null)),i=0;for(let f=0;f<t.reports.length;f++){let m=await s[f];if(ne(n))return;if(m===null){o=!1;continue}if(!qn(m)&&(await Pu(t.reports[f],m,n,{renderView:!1})?i++:o=!1,ne(n)))return}i===0&&t.reports.length>0&&fy(),o&&ao(t)?.appMode&&(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Ka());let a=c.reports.slice();E_(t,a,r,{complete:o,isCurrent:()=>!ne(n)&&c.currentWorkspace===e&&["findings","files"].includes(c.currentView)});let l=H().catch(f=>console.warn("workspace sidebar:",f));if(i>0){if(aa(fo()),!await Ga(n))return}else Du();let p=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],d=p.map(f=>c[f]);L_(t,a,r,{complete:o,isCurrent:()=>!ne(n),onReady:async f=>{!f.appMode||c.currentWorkspace!==e||!["findings","files"].includes(c.currentView)||p.some((m,h)=>c[m]!==d[h])||(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Ka(),aa(fo()),await Ga(n))}}).catch(f=>console.warn("workspace App metadata:",f)),G.openSession(e),G.refreshSession(e),sa(e),await l}async function sR({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!c.currentFile)return;let n=Oe(),r=c.currentFile;os(r),Zr(r,"");for(let o of t)try{let s=await Zc(o,r);if(ne(n))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete '${r}' from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete '${r}' from workspace ${o} remote:`,s)}if(await Jo(r),!ne(n)&&(await Ui(r,null),!ne(n))){if(e==="wipe"){try{await Rc()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(ne(n))return}ne(n)||(qa(),await H())}}function qa({forgetLastView:e=!0}={}){Ux(),c.currentManagedTeam=null,c.currentManagedReport=null,c.currentFile=null,c.currentWorkspace=null,c.workspaceContentFileCount=0,c.currentReportWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.bundleDetails=null,c.bundleDetailsTab="overview",c.bundleSourceFile=null,c.bundleSourceFindingIdx=null,c.selectedPackage=null,c.selectedPackageVersion=null,c.packageDetailsTab="overview",c.packageSlideTriage=null,c.packageSlideTransient=!1,c.expandedPackages.clear(),c.selectedRepository=null,c.repositoryDetailsTab="overview",c.repositorySlideTriage=null,c.repositorySlideTransient=!1,c.filesSelectedFile=null,c.tableSelectedGid=null,c.kanbanPopoverGid=null,c.kanbanExpandedColumn=null,c.focusGid=null,c.activeTabByGroup.clear(),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.repoUrl="",c.repoEditing=!1,c.shownTriage=null,c.currentView="findings",Bu(),e&&nr(Ro),fy()}function iR(e){Oe(),qs(new Set),qa(e)}async function At({history:e=!0}={}){return e&&_()&&te.active?te.navigate({view:"home"}):(Oe(),qs(new Set),qa({forgetLastView:!_()}),await H(),!0)}async function aR({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!c.selectedBundle)return;let t=Oe(),n=c.selectedBundle;for(let o of e)try{let s=await Qc(o,n);if(ne(t))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete bundle from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete bundle from workspace ${o} remote:`,s)}if(await Jp(n),ne(t)||(await jf(n,null),ne(t)))return;c.selectedBundle=null,c.selectedBundleWorkspace=null,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleSourceFindingIdx=null;let r=ve(Ro);typeof r=="string"&&(r===`b:${n}`||r.startsWith(`b:${n} `))&&nr(Ro),_f(n),c.bundles=await Je(),!ne(t)&&(O(),await H())}async function lR(e,t="detach",{triage:n="keep"}={}){let r=Y().find(a=>a.id===e);if(!r)return;Oe();let o=Array.isArray(r.reports)?[...r.reports]:[];if(G.closeSession(e),rg(e),t==="delete"){for(let a of o){try{await Jo(a)}catch{}os(a),Zr(a,"")}if(n==="wipe")try{await Rc()}catch(a){console.warn("Skipped orphan-triage GC:",a)}}let s=c.currentWorkspace===e,i=t==="delete"&&c.currentFile!=null&&o.includes(c.currentFile);(s||i)&&qa(),await Wf(e),await H()}async function Pu(e,t,n=null,{renderView:r=!0,managedReportId:o=null,managedRepo:s=null}={}){let i=()=>n!==null&&ne(n);try{if(await Promise.all([dt("report",e),dt("workspace",c.currentWorkspace||c.currentReportWorkspace)]),i()||(await io(),i()))return;let{data:a,reason:l}=o===null?_()?Nw(t,e):lp(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(l);let p=c.reports.length===0,d=yn(a)??[],f=d.flatMap(id);if(await Mw(f),i())return;let m=new Set(f.filter(Tv).map(k=>k.source??a.source??null)),h=s??a?.repo,b=Pe({repo:h}),y=b??(o==null?Ze(e):""),w=Ft(h),v=pl([{groups:d.map(id),tree:a.tree}]),x=[];for(let k of d){let $=id(k);if($.length===0)continue;let S=[];for(let C of $){let R={...C,_id:c.nextFindingId++,_repoFallback:y,_repoDirectory:w,_reportName:e,_depsDirectory:v,_managedReportId:o,_bundleHashes:a.bundleHashes??[]};Po(R,a),R._source=R.source??a.source??null,"isApp"in R||(R.isApp=jn(R,R._source)),R._sourcePass=m.has(R._source),R._analyzer=R._source??R.type??null,S.push(R)}x.push(S)}return Gn(x),c.reports.push({type:a.type||"analysis",source:a.source??null,fileName:e,_managedReportId:o,groups:x,repo:b,tree:a.tree??null,bundleHashes:a.bundleHashes??[]}),Wl(c.reports),Hl(c.reports)&&pr(),c.revalidateConflicts=J0(),Ka(),p&&(td(),aa(fo())),r&&await Ga(n),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}window.__loadFile=(e,t)=>Pu(e,t);window.__setFilters=({severities:e,confMin:t}={})=>{e!=null&&(c.filterSeverities=new Set(e)),t!==void 0&&(c.filterConfMin=t),O()};document.addEventListener("keydown",e=>{e.key==="Escape"&&document.body.classList.contains("report-fullscreen")&&document.body.classList.remove("report-fullscreen")});document.addEventListener("dragover",e=>e.preventDefault());document.addEventListener("drop",e=>{e.preventDefault(),!e.target.closest("#drop-zone")&&gy(e.dataTransfer.files)});ut.addEventListener("dragover",e=>{e.preventDefault(),_()||ut.classList.add("hover")});ut.addEventListener("dragleave",()=>ut.classList.remove("hover"));ut.addEventListener("drop",e=>{e.preventDefault(),ut.classList.remove("hover"),gy(e.dataTransfer.files)});var mn=null;function x2(){_()||(mn||(mn=document.createElement("input"),mn.type="file",mn.multiple=!0,mn.hidden=!0,mn.addEventListener("change",()=>{let e=[...mn.files];e.length>0&&gy(e),mn.value=""}),document.body.append(mn)),mn.click())}ut.addEventListener("click",e=>{let t=e.target.closest("[data-managed-page]");if(t){_o(t.dataset.managedPage);return}if(e.target.closest("[data-managed-login]")){Gk(c.managed?.loginPath);return}let n=e.target.closest("[data-managed-team]");if(n){let o=c.managedTeams.find(s=>s.id===n.dataset.managedTeam);o&&Ir(o);return}let r=e.target.closest("[data-landing-workspace]");if(r){Ks(r.dataset.landingWorkspace);return}e.target.closest(".drop-prompt-action")&&x2()});function OR(e,t=fetch,n=""){let r=new URL(e);return(o,s={})=>{let i=new URL(o.replace(/^\/+/u,""),r);if(i.origin!==r.origin)throw new Error("Scan requests must use the configured server");let a=new Headers(s.headers);return n&&a.set("authorization",`Bearer ${n}`),t(i,{...s,headers:a,credentials:"omit",redirect:"error"})}}var zu=class{constructor(t,n=()=>{},r=fetch){this.onChange=n,this.request=r,this.reset(t)}reset(t=this.server){this.server=t,this.apiKey="",this.provider=null,this._remoteModels=!1,this._disconnect()}_previewModels(){let t=mp(this.provider);this.loadModels=()=>Promise.resolve(t)}_disconnect(){this._controller?.abort(),this.connected=!1,this.managed=!1,this.loading=!1,this.error=null,this.catalogue=null,this._remoteModels||this._previewModels(),this.onChange()}get ready(){return this.connected&&!this.loading&&this.catalogue!=null}setKey(t){this.apiKey!==t&&(this.apiKey=t,this._disconnect())}setProvider(t){if(!(this.provider===t||this.managed)){if(this.provider=t,this.connected&&t)return this._load(t);this.connected&&(this._controller?.abort(),this.loading=!1,this.error=null,this.catalogue=null),this._remoteModels||this._previewModels(),this.onChange()}}connect(){if(this._disconnect(),!(!this.server||!this.apiKey.trim()))return this._load(null)}async _fetch(t,n){let r=OR(this.server,this.request,this.apiKey.trim()),o=t?`?${new URLSearchParams({provider:t})}`:"",s=await r(`api/models${o}`,{headers:{accept:"application/json"},cache:"no-store",signal:n});if(s.status===401)throw Object.assign(new Error("DeepView API key not recognized."),{status:401});if(!s.ok)throw new Error(`Scan server returned HTTP ${s.status}.`);let i=await s.json();if(i?.valid!==!0||typeof i.managed!="boolean")throw new Error("Invalid response from scan server.");return{managed:i.managed,catalogue:i.managed||t?Vw(i):null}}async _load(t){this._controller?.abort();let n=this._controller=new AbortController;this.loading=!0,this.error=null,this.catalogue=null;let r=this._fetch(t,n.signal);this.onChange();try{let o=await r;if(n.signal.aborted)return;if(this.connected=!0,this.managed=o.managed,this.catalogue=o.catalogue,!o.managed&&!t&&this.provider)return this._load(this.provider);if(o.catalogue){let s=o.catalogue;this._remoteModels=!0,this.loadModels=()=>Promise.resolve(s)}else this._remoteModels||this._previewModels();this.loading=!1,this.onChange()}catch(o){if(n.signal.aborted)return;(!t||o.status===401)&&this._disconnect(),this.loading=!1,this.error=o instanceof TypeError?"Couldn\u2019t reach the scan server. Check your connection and try again.":String(o?.message??o),this.onChange()}}};function NR(e){let t=e.trim();return/^sk-ant-[A-Za-z0-9_-]*$/u.test(t)?"anthropic":/^sk-or-v1-[A-Za-z0-9_-]*$/u.test(t)?"openrouter":/^sk-kimi-[A-Za-z0-9_-]*$/u.test(t)?"moonshot":/^sk-(?:proj|svcacct)-[A-Za-z0-9_-]*$/u.test(t)?"openai":null}function Er(e){if(e?.throwIfAborted(),_())throw new DOMException("Local scan closed","AbortError")}async function BR(e){Er(e);let t=await Je();return Er(e),lv(t,Y())}async function PR(e,t){Er(t);let n=await mo(e.integrity,{name:e.filename},{sources:!1});return Er(t),cv(e,n)}async function DR(e){Er(e);let t=await ce(),n=[];for(let r of t){Er(e);let o=await fe(r);Er(e),n.push({name:r,content:o,fallbackRepo:Ze(r)})}return Er(e),dv(n,Y())}function zR({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?_p(o):_p(t)??(e==="127.0.0.1"?Rv:null)}async function WR(e,t,n){let r=Ge(e,{duration:0});t.addEventListener("abort",r,{once:!0});try{return await n()}finally{t.removeEventListener("abort",r),r()}}function Ya(){return zR({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:c.serverMode,localMode:c.localMode,deepviewScanServer:c.deepviewScanServer})}function Xa(e){return _()?!!e.managedId&&["admin","manage"].includes(c.managedSession?.role):!e.managedId&&!!Ya()}async function Wu(e=null,{mode:t}={}){let n=c.selectedBundleWorkspace,r=me();if(await Mt(),r!==me()||e&&!Xa(e))return;if(_()){e&&await _o("manage-scans",{bundleId:e.managedId,...t?{scanMode:t}:{}});return}if(!Ya())return;let o=At(),s=me();await o,!(!Ya()||s!==me())&&(c.scanSelection=e?{bundleId:e.integrity,...n?{repoId:n}:{},...t?{mode:t}:{}}:null,c.currentView="scan",O(),H())}var hy=class extends Et{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=Ya(),this._access=new zu(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>WR("Loading bundle\u2026",n,()=>PR(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=gm(()=>{this._savedAccess=ds()}),this._loadSource()}disconnectedCallback(){super.disconnectedCallback(),this._unsubscribeSavedAccess?.(),this._controller?.abort(),this._resetAccess()}async _loadSource(){this._controller?.abort();let t=this._controller=new AbortController;this._error=null;try{this._source=await WR("Loading bundles\u2026",t.signal,()=>BR(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=ds();let t=pm(this._server);t&&(this._access.setKey(t.deepview),this._access.setProvider(t.provider),this._providerToken=t.token,this._access.connect())}async _saveOrForgetAccess(){if(this._savingAccess)return;let t=ds();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await mm(),this._resetAccess()):await fm({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=ds()}catch{Ge(t?"Couldn\u2019t forget scan credentials. Try again.":"Couldn\u2019t save scan credentials. Try again.",{kind:"warning"})}finally{this._savingAccess=!1}}}_connect(t){t.preventDefault(),this._access.connect()}_setProvider(t){this._access.provider!==t&&(this._access.setProvider(t),this._providerToken="")}_setProviderToken(t){this._providerToken=t;let n=NR(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=ip`:host{display:block}*{box-sizing:border-box}button{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .5rem;color:var(--muted);background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);font:inherit;font-size:.8rem;cursor:default}button:hover:not(:disabled){color:var(--text);background:var(--surface)}button:disabled{opacity:.5}.access{min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface);container:scan-access / inline-size}.access-heading{display:flex;align-items:center;justify-content:space-between;min-height:2.5rem;padding:.45rem .9rem;border-bottom:1px solid var(--border)}.access h2{margin:0;color:var(--text);font-size:.86rem;font-weight:600}.save-access{min-height:1.6rem;margin-left:auto;flex-shrink:0}.access-fields{display:grid;gap:.8rem;padding:.85rem .9rem}.connection-row,.provider-row{display:grid;align-items:end;gap:.65rem;margin:0}.connection-row{grid-template-columns:minmax(0,1fr) auto;width:min(42rem,100%)}.provider-row{grid-template-columns:max-content minmax(0,1fr);width:100%}.access label{display:grid;gap:.3rem;min-width:0;color:var(--muted);font-size:.72rem}input{min-width:0;width:100%;height:2rem;padding:.35rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.8rem}.provider-field{min-width:0;margin:0;padding:0;border:0}.provider-field legend{margin-bottom:.3rem;padding:0;color:var(--muted);font-size:.72rem}.provider-options{display:flex;width:fit-content;max-width:100%;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);overflow:hidden}.access .provider-choice{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;height:calc(2rem - 2px);padding:.3rem .6rem;color:var(--muted);font-size:.74rem;white-space:nowrap;user-select:none}.provider-choice+.provider-choice{border-left:1px solid var(--border)}.provider-choice:hover{color:var(--text);background:var(--surface)}.provider-choice:has(:checked){color:var(--text);background:var(--surface-active)}.provider-choice:has(:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}.provider-choice input{position:absolute;inset:0;margin:0;width:100%;height:100%;opacity:0;cursor:default}.provider-icon{display:block;width:1rem;height:1rem;flex:0 0 1rem}.provider-icon svg{display:block;width:100%;height:100%}.provider-icon.anthropic{color:#d97757}.provider-icon.openai{color:#10a37f}.provider-icon.moonshot{color:#8068d9}.provider-icon.moonshot svg{transform:scale(.8)}.provider-icon.openrouter{color:var(--text)}.connect{justify-content:center;height:2rem;padding:.35rem .8rem;color:var(--text);background:var(--surface-active)}.connection-status{flex:1;min-width:0;margin:0 .7rem;line-height:1rem;color:var(--muted);font-size:.7rem}.connection-status.error{color:var(--critical, #e5534b)}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@container scan-access (max-width: 38rem){.provider-row{grid-template-columns:minmax(0,1fr)}}@container scan-access (max-width: 28rem){.provider-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.provider-choice:nth-child(odd){border-left:0}.provider-choice:nth-child(n+3){border-top:1px solid var(--border)}}@container scan-access (max-width: 23rem){.access .provider-choice{gap:.25rem;padding-inline:.4rem;font-size:.7rem}}`;_accessPanel(){let t=this._access,n=t.catalogue?.models.length??0,r=t.error??(t.loading?t.connected?"Loading provider models\u2026":"Connecting\u2026":t.connected?t.catalogue?`Connected \xB7 ${n} ${n===1?"model":"models"}`:"Connected. Choose a provider.":"");return u`<section slot="access" class="access" aria-labelledby="scan-access-heading"><div class="access-heading"><h2 id="scan-access-heading">Access</h2><p class="${`connection-status ${t.error?"error":""}`}" role="${t.error?"alert":"status"}">${r}</p>${this._savedAccess||t.connected?u`<button class="save-access" type="button" ?disabled="${this._savingAccess}" @click="${this._saveOrForgetAccess}">${this._savedAccess?"Forget":"Save"}</button>`:g}</div><div class="access-fields"><form class="connection-row" @submit="${this._connect}"><label>DeepView API Key<input type="password" name="deepview-api-key" placeholder="Enter API key" autocomplete="off" spellcheck="false" .value="${t.apiKey}" @input="${o=>t.setKey(o.target.value)}"></label> <button type="submit" class="connect" ?disabled="${!t.apiKey.trim()||t.loading||t.connected&&!t.error}">${t.connected&&!t.error?"Connected":"Connect"}</button></form>${t.managed?g:u`<div class="provider-row"><fieldset class="provider-field"><legend>Provider</legend><div class="provider-options">${[["anthropic","Anthropic"],["openai","OpenAI"],["moonshot","Moonshot"],["openrouter","OpenRouter"]].map(([o,s])=>u`<label class="provider-choice"><input type="radio" name="scan-provider" value="${o}" .checked="${t.provider===o}" @change="${()=>this._setProvider(o)}"><span class="${`provider-icon ${o}`}" aria-hidden="true">${jw(o)}</span><span>${s}</span></label>`)}</div></fieldset><label>Token<input type="password" name="provider-token" placeholder="Enter provider token" autocomplete="off" spellcheck="false" .value="${this._providerToken}" @input="${o=>this._setProviderToken(o.target.value)}"></label></div>`}</div></section>`}render(){return u`${this._error?u`<p role="alert">Couldn’t load saved bundles: ${this._error} <button @click="${()=>{this._loadSource()}}">Retry</button></p>`:g}<deepview-scan-page .selection="${this.selection}" scope-label="Workspace" .source="${this._source}" .sourceLoading="${this._source==null&&!this._error}" .loadBundle="${this._loadBundle}" .loadModels="${this._access.loadModels}" .canRun="${this._access.ready}" .loadReportSources="${DR}"><button slot="navigation" type="button" @click="${()=>{At()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",hy);function Iu(){let e=document.querySelector("#drop-zone");if(!e)return;let t=e.querySelector(".local-scan-button");t||(t=document.createElement("button"),t.type="button",t.className="local-scan-button",t.innerHTML=`${Vn}<span>Scan</span>`,t.addEventListener("click",()=>{Wu()}),e.append(t));let n=Ya();t.hidden=!n,document.querySelector("local-scan-page")?.setScanServer(n);let r=document.querySelector(".bundles-scan-button"),o=c.bundles?.find(s=>s.integrity===c.selectedBundle);r&&(r.hidden=!o||!Xa(o))}var HR="@preventive/triage";function by(e,t){let n=e.toLowerCase(),r="",o=n;if(n.startsWith("@")){let i=n.indexOf("/");i>0&&(r=n.slice(0,i),o=n.slice(i+1))}return`pkg:npm/${r?`${encodeURIComponent(r)}/`:""}${encodeURIComponent(o)}@${encodeURIComponent(t)}`}function UR(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function VR(e){let t=[];if(e?.kind!=="stasis"||!e.bundle?.modules)return t;let n=new Map;for(let[r,o]of e.bundle.modules){if(!o?.name||typeof o.version!="string"||!o.version)continue;let s=`${o.name}@${o.version}`,i=n.get(s);if(i!==void 0){r==="."&&(t[i].dir=".");continue}n.set(s,t.length),t.push({name:o.name,version:o.version,dir:r})}return t}function jR(e){if(e?.kind!=="stasis"||!e.bundle?.modules)return!1;for(let[,t]of e.bundle.modules)if(t?.name&&typeof t.version=="string"&&t.version)return!0;return!1}function GR(e,t){let n=e.find(s=>s.dir===".")??null,r=n?e.filter(s=>s!==n):e;return{root:n?{name:n.name,version:n.version,purl:by(n.name,n.version)}:{name:UR(t?.name??"bundle"),version:null,purl:null},rest:r}}function KR(e){return e??globalThis.crypto.randomUUID()}function HJ(e,t,{now:n=new Date,uuid:r}={}){let o=VR(e),{root:s,rest:i}=GR(o,t),a={type:"application","bom-ref":s.purl??`application:${s.name}`,name:s.name};s.version&&(a.version=s.version),s.purl&&(a.purl=s.purl);let l={bomFormat:"CycloneDX",specVersion:"1.5",serialNumber:`urn:uuid:${KR(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:HR}]},component:a},components:i.map(p=>{let d=by(p.name,p.version);return{type:"library","bom-ref":d,name:p.name,version:p.version,purl:d}})};return`${JSON.stringify(l,null,2)}
|
|
185
|
-
`}function
|
|
186
|
-
`}function
|
|
187
|
-
`),p=[];for(let d=0;d<l.length;d++){let f=t.ranges(l[d]);if(f.length!==0&&(p.push({ln:d+1,ranges:f}),o++,o>=5e3)){s=!0;break}}if(p.length>0&&r.push({path:i,lines:l,hits:p}),s)break;if(r.length>=500){s=!0;break}}return{fileResults:r,totalHits:o,truncated:s}}function R2(e,t){let n=[],r=0;for(let{path:o,lines:s,hits:i}of e.fileResults){let a=[];for(let{ln:l}of i){let p=t.ranges(s[l-1]);p.length!==0&&(a.push({ln:l,ranges:p}),r++)}a.length>0&&n.push({path:o,lines:s,hits:a})}return{fileResults:n,totalHits:r,truncated:!1}}var lt={tag:null,useRegex:!1,caseSensitive:!1,entries:[]};function qR(e,t,n,r,o,s=null){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let i=Hu(n,r,o);if(i.error)return{error:i.error};(lt.tag!==e||lt.useRegex!==r||lt.caseSensitive!==o)&&(lt.tag=e,lt.useRegex=r,lt.caseSensitive=o,lt.entries.length=0);let a=r||o?m=>m:m=>m.toLowerCase(),l=a(n),p=null,d=-1;for(let m=0;m<lt.entries.length;m++){let h=lt.entries[m],b=a(h.query);if(b===l)return lt.entries.splice(m,1),lt.entries.unshift(h),h.result;r||h.result.truncated||b.length<=d||!l.includes(b)||(p=h.result,d=b.length)}let f=p?R2(p,i):_2(t,i,s??[...t.keys()].toSorted());return lt.entries.unshift({query:n,result:f}),lt.entries.length>8&<.entries.pop(),f}var M2=200,T2=28,I2=12;function A2(e,t){let n=t.length>0?t[0][0]:0,r=e.length-e.trimStart().length,o=n-r>T2?n-I2:0;return yy(e,t,o,M2)}function YR(e,t){let n=A2(e,t);return u`${n.clipped?u`<span class="bundle-search-clip">…</span>`:g}${wy(n.text,n.ranges)}`}function yy(e,t,n,r){let o=e.slice(n,n+r);if(n===0)return{text:o,ranges:t,clipped:!1};let s=[];for(let[i,a]of t){let l=i-n,p=a-n;p<=0||l>=o.length||s.push([Math.max(0,l),Math.min(o.length,p)])}return{text:o,ranges:s,clipped:!0}}function wy(e,t){if(t.length===0)return e;let n=[],r=0;for(let[o,s]of t){let i=Math.max(r,Math.min(o,e.length)),a=Math.max(i,Math.min(s,e.length));a<=i||(i>r&&n.push(e.slice(r,i)),n.push(u`<mark class="bundle-search-mark">${e.slice(i,a)}</mark>`),r=a)}return r<e.length&&n.push(e.slice(r)),n}function E2(e,t){let n=new Map(e.map(s=>[s,[...t.get(s)].map(([i,a])=>{let l=t.get(s),p=t.get(i),d=l.size<p.size?l:p,f=0,m=0;for(let h of d.keys())if(l.has(h)&&p.has(h)&&f++,++m===32)break;return{to:i,score:a*2+f}}).toSorted((i,a)=>a.score-i.score||t.get(i.to).size-t.get(a.to).size||i.to.localeCompare(a.to))])),r=[],o=new Set;for(let s of e){let i=[s];for(;i.length>0;){let a=i.pop();if(!o.has(a)){o.add(a),r.push(a);for(let{to:l}of n.get(a).toReversed())o.has(l)||i.push(l)}}}return r}function XR(e,t,n){let r=e.toSorted(),o=new Set(r),s=new Map,i=new Map(r.map(v=>[v,new Map]));for(let v of r){s.set(v,new Map);for(let x of t.get(v)??[])v===x||!o.has(x)||(s.get(v).set(x,{to:x,count:1}),i.get(v).set(x,(i.get(v).get(x)??0)+1),i.get(x).set(v,(i.get(x).get(v)??0)+1))}let a=Zv(r,s),l=r.map((v,x)=>({col:x%n,row:Math.floor(x/n)})),p=l.map(({col:v,row:x})=>({col:x%2?n-v-1:v,row:x})),d=(v,x)=>Math.abs(v.col-x.col)+Math.abs(v.row-x.row),f=v=>r.reduce((x,k)=>x+[...i.get(k)].reduce(($,[S,C])=>$+C*d(v.get(k),v.get(S)),0),0),m=new Map(r.map((v,x)=>[v,l[x]])),h=f(m);for(let v of[a,E2(r,i)])for(let x of[l,p]){let k=new Map(v.map((S,C)=>[S,x[C]])),$=f(k);$<h&&(m=k,h=$)}let b=({col:v,row:x})=>`${v},${x}`,y=new Map([...m].map(([v,x])=>[b(x),v])),w=(v,x,k,$)=>{let S=0;for(let[C,R]of i.get(v))S+=R*d(x,C===k?$:m.get(C));return S};for(let v=0;v<8;v++){let x=!1;for(let k of r){let $=m.get(k),S=i.get(k),C=0,R=0,L=0;for(let[I,U]of S)C+=m.get(I).col*U,R+=m.get(I).row*U,L+=U;if(!L)continue;let A=new Set;for(let I of[$,{col:Math.round(C/L),row:Math.round(R/L)}])for(let U=-1;U<=1;U++)for(let K=-1;K<=1;K++){let Q=y.get(`${I.col+U},${I.row+K}`);Q!==void 0&&Q!==k&&A.add(Q)}let E=0,T=null;for(let I of A){let U=m.get(I),K=w(k,U,I,$)+w(I,$,k,U)-w(k,$,I,U)-w(I,U,k,$);K<E&&(E=K,T=I)}if(T!==null){let I=m.get(T);m.set(k,I),m.set(T,$),y.set(b(I),k),y.set(b($),T),x=!0}}if(!x)break}return r.map(v=>({id:v,...m.get(v)})).toSorted((v,x)=>v.row-x.row||v.col-x.col)}var gn=216,Fr=48,Uu=32,Dn=20,ky=24,F2=20,vy=10;function JR(e,t){let n=d=>d&&(d.collapsed||d.members.length===1),r=e.map((d,f)=>e.length>5&&n(d)&&n(e[f+1])),o=0,s=0;e.forEach((d,f)=>{r[f]?s+=d.width:o+=d.width+(f===e.length-1?0:Dn)});let i=Math.min(t,gn*5+Dn*4),a=s?Math.max(.3,Math.min(.9,(i-o)/s)):1,l=0;return{groups:e.map((d,f)=>{let m=d.width*(r[f]?a:1),h={...d,x:l,visibleWidth:m,stacked:!!(r[f]||r[f-1])};return l+=m+(r[f]||f===e.length-1?0:Dn),h}),width:l,height:Math.max(...e.map(d=>d.height))}}function ZR(e){let t=`M${e[0].join(",")}`;for(let n=1;n<e.length-1;n++){let[r,o]=e[n],[s,i]=e[n-1],[a,l]=e[n+1],p=Math.hypot(a-r,l-o),d=Math.hypot(r-s,o-i);if(!d||!p)continue;let f=Math.min(6,d/2,p/2);t+=` L${r-(r-s)/d*f},${o-(o-i)/d*f} Q${r},${o} ${r+(a-r)/p*f},${o+(l-o)/p*f}`}return`${t} L${e.at(-1).join(",")}`}var xy=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1));function $y(e,t,n,r){let o=e.packages.find(d=>d.id===t),s=xy(r),i=n?e.y-12:e.rowBottom;if(e.members.length===1||e.collapsed){let d=e.x+e.visibleWidth/2+s;return[[d,n?e.y-5:e.y+e.height],[d,i]]}let a=e.x+o.x+(n?0:gn),l=e.y+o.y+Fr/2+s/2,p=a+(n?-7-r.lane*6:3+r.lane*6);return[[a+(n?-4:0),l],[p,l],[p,i]]}function QR(e,t){let n=(a,l)=>{let p=e.get(a[l]),d=p.packages.find(f=>f.id===a[`${l}Package`]);return p.members.length===1||p.collapsed?[p.x+p.visibleWidth/2,p.y+p.height/2]:d?[p.x+d.x+gn/2,p.y+d.y+Fr/2]:[p.x+p.width/2,p.y+p.height/2]},r=(a,l,p=d=>n(d,l))=>{let d=new Map,f=Map.groupBy(t,m=>{let h=e.get(m[a]);return h.collapsed?h:m[`${a}Package`]});for(let m of f.values())m.toSorted((b,y)=>{let[w,v]=p(b),[x,k]=p(y);return(b.bypassLane??w)-(y.bypassLane??x)||v-k||b[`${l}Package`].localeCompare(y[`${l}Package`])||b[`${a}Package`].localeCompare(y[`${a}Package`])}).forEach((b,y)=>d.set(b,{count:m.length,index:y}));for(let m of Map.groupBy(t,h=>h[a]).values())m.toSorted((b,y)=>{let[w,v]=n(b,a),[x,k]=n(y,a);return w-x||v-k||xy(d.get(b))-xy(d.get(y))}).forEach((b,y)=>{let w=y/Math.max(1,m.length-1);d.get(b).lane=a==="from"?1-w:w});return d},o=r("from","to"),s=r("to","from",a=>{let l=$y(e.get(a.from),a.fromPackage,!1,o.get(a));return[l.at(-1)[0],l[0][1]]}),i=t.map(a=>{let l=e.get(a.from),p=e.get(a.to),d=$y(l,a.fromPackage,!1,o.get(a)),f=$y(p,a.toPackage,!0,s.get(a));return{edge:a,end:f,start:d,rowBottom:l.rowBottom,x1:d.at(-1)[0],x2:a.bypassLane??f.at(-1)[0]}});for(let a of Map.groupBy(i,l=>l.rowBottom).values())for(let l of[!0,!1]){let p=a.filter(d=>d.x2<d.x1===l).toSorted((d,f)=>(l?1:-1)*(d.x1-f.x1||d.x2-f.x2));p.forEach((d,f)=>{d.bendY=d.rowBottom+9+12*f/Math.max(1,p.length-1)})}return i.map(({edge:a,end:l,start:p,x1:d,x2:f,bendY:m})=>{let h=[[d,m],[f,m]],{bypassLane:b,...y}=a;return b!==null&&h.push([f,l.at(-1)[1]]),{...y,path:ZR([...p,...h,...l.toReversed()])}})}function L2(e,t){let n=Math.sign(t.x-e.x),r=Math.sign(t.y-e.y),o=Fr,s=gn;if(r===0&&Math.abs(t.x-e.x)===s+Dn){let b=e.y+o/2-n*6;return`M${e.x+(n>0?s:0)},${b} L${t.x+(n>0?-4:s+4)},${b}`}if(n===0&&Math.abs(t.y-e.y)===o+ky){let b=e.x+s/2+r*8;return`M${b},${e.y+(r>0?o:0)} L${b},${t.y+(r>0?-4:o+4)}`}let i=n||r,a=e.x+(i>0?s:0),l=e.y+o/2,p=a+i*(Dn/2-3),d=t.x+s/2+i*8,f=r>0||r===0&&n>0,m=t.y+(f?-10:o+10),h=t.y+(f?-4:o+4);return ZR([[a,l],[p,l],[p,m],[d,m],[d,h]])}function eM(e,t,n,r=1184,o=!1){if(o)return{id:e,members:t,collapsed:o,packages:[],internalEdges:[],width:gn+vy*2,height:Fr};let s=t.length>1,i=Math.max(1,Math.floor((r-vy*2+Dn)/(gn+Dn))),a=s?Math.min(i,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,l=s?vy:0,p=Math.ceil(t.length/a),d=s?F2:0,m=(s?XR(t,n,a):[{id:t[0],col:0,row:0}]).map(y=>({id:y.id,x:l+y.col*(gn+Dn),y:l+d+y.row*(Fr+ky)})),h=new Map(m.map(y=>[y.id,y])),b=[];if(s)for(let y of t)for(let w of n.get(y)??[])y!==w&&h.has(w)&&b.push({from:y,to:w,path:L2(h.get(y),h.get(w))});return{id:e,members:t,collapsed:o,packages:m,internalEdges:b,width:a*gn+(a-1)*Dn+l*2,height:p*Fr+(p-1)*ky+l*2+d}}function Sy(e,t={}){let n=t.ecosystem??(/(?:^|\/)node_modules\//u.test(e)?"npm":""),r=t.name||(e==="."?"App":e);return{id:e,name:r,ecosystem:n,version:t.version??"",own:e===".",root:!1,target:!1}}var tM=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function nM(e,t){let n=e?.bundle?.modules.get(t);if(!t||t==="."||!n)return null;let r=Sy(t,n);return{packageKey:r.ecosystem?tM(r):r.name,packageGroup:Kr("",{packageDir:t})}}function rM(e,{packageKey:t,packageGroup:n,version:r,reason:o=""}){let s=new Map,i=new Map,a=new Map,l=Ot(e)??new Map,p=new Map([...l.keys()].map(k=>[k,k])),d=Uo(e).get(o),f=new Map([...p].filter(([k])=>!d||d.has(k)));for(let k of new Set([...f.keys()].map($=>l.get($))))a.set(k,Sy(k,e.bundle.modules.get(k)));let m=(k,$)=>{k!==$&&(i.has(k)||i.set(k,new Set),s.has($)||s.set($,new Set),i.get(k).add($),s.get($).add(k))};for(let[k,$]of Tl(e))if(f.has(k))for(let S of $){if(!f.has(S))continue;let C=l.get(k),R=l.get(S);if(Jv(k,S,R===".",C==="."))m(C,R);else if(C!==R){let L=a.get(R);L.excludedImporters??=new Set,L.excludedImporters.add(C)}}let{roots:h,appImports:b}=Il(e,f,k=>l.get(k),l,p);b.length>0&&!a.has(".")&&a.set(".",Sy("."));for(let k of b)m(".",k);for(let[k,$]of a){if(!($.own||$.ecosystem==="npm"&&($.name==="@babel/core"||$.name==="react-native"&&i.get(".")?.has(k))))continue;$.traceBoundary=!0;let C=s.get(k);for(let R of C??[])R!=="."&&(C.delete(R),i.get(R).delete(k))}for(let k of h){let $=a.get(k==="__own__"?".":k);$&&($.root=!0)}let y=[];for(let k of a.values()){let $=tM(k),S=n===void 0?k.ecosystem==="github"?$.toLowerCase()===t.toLowerCase():$===t:Kr("",{packageDir:k.id})===n,C=k.ecosystem==="github"&&k.version==="."?"0.0.0":k.version;!k.own&&S&&(r===void 0||C===r)&&(k.target=!0,y.push(k.id))}let w=new Set(y),v=[...y];for(let k=0;k<v.length;k++)for(let $ of s.get(v[k])??[])w.has($)||(w.add($),v.push($));let x=k=>new Map([...w].map($=>[$,new Set([...k.get($)??[]].filter(S=>w.has(S)))]));return{nodes:new Map([...a].filter(([k])=>w.has(k))),imports:x(i),importedBy:x(s),targets:y}}function oM(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:o,componentOf:s}=Qv(r,e.imports),i=o.map(()=>new Set),a=[];for(let[$,S]of e.imports){let C=s.get($);for(let R of S){let L=s.get(R);C!==L&&(i[C].add(L),a.push({from:C,to:L,fromPackage:$,toPackage:R}))}}let l=o.map(()=>0),p=o.map(()=>0);for(let $ of i)for(let S of $)p[S]++;let d=o.flatMap(($,S)=>p[S]===0?[S]:[]);for(let $=0;$<d.length;$++){let S=d[$];for(let C of i[S])l[C]=Math.max(l[C],l[S]+1),--p[C]===0&&d.push(C)}let f=i.some(($,S)=>[...$].some(C=>l[C]!==l[S]+1)),m=t-Uu-24-(f?56:0),b=[...Map.groupBy(o.map(($,S)=>{let C=$.length>10;return{...eM(S,$,e.imports,m,C&&!n.has(S)),collapsible:C}}),$=>l[$.id])].toSorted(([$],[S])=>$-S).map(([,$])=>JR($,m)),y=b.reduce(($,S)=>Math.max($,S.width+24),240),w=new Map,v=12;for(let{groups:$,width:S,height:C}of b){for(let R of $)w.set(R.id,{...R,x:R.x+(y-S)/2,y:v,rowBottom:v+C});v+=C+36}let x=0,k=QR(w,a.map($=>{let S=l[$.to]===l[$.from]+1?null:y+8+x++%4*10;return{...$,bypassLane:S}}));return{boxes:[...w.values()],componentOf:s,edges:k,width:y+(x?56:0),height:Math.max(0,v-24)}}function sM(e,t){if(t===null)return null;let n=new Set,r=new Set([t]);for(let o of[!1,!0]){let s=new Map,i=[t],a=new Set([t]);for(let l of e.edges){let p=o?l.to:l.from,d=o?l.from:l.to;s.has(p)||s.set(p,[]),s.get(p).push(d)}for(let l=0;l<i.length;l++)for(let p of s.get(i[l])??[])a.has(p)||(a.add(p),r.add(p),i.push(p));for(let l of e.edges)a.has(l.from)&&a.has(l.to)&&n.add(l)}return{groups:r,edges:n}}var iM=`dialog{width:min(94vw,var(--graph-dialog-width));max-width:80rem;max-height:90dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:start;justify-content:space-between;gap:1rem;flex-shrink:0;padding:.7rem .9rem;border-bottom:1px solid var(--border)}header h3{display:flex;flex-wrap:wrap;gap:.35rem .7rem;min-width:0;margin:0;font-size:.92rem;overflow-wrap:anywhere}.heading-version{color:var(--accent);font-family:var(--font-mono, monospace)}header button{flex-shrink:0;border:0;background:transparent;color:var(--muted);font-family:inherit;font-size:1.4rem;line-height:1;padding:0 .25rem}header button:hover{color:var(--text)}.graph-caption{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem;padding:.45rem .9rem;font-size:.68rem;color:var(--muted);flex-shrink:0;user-select:none}.graph-scroll{min-height:0;overflow:auto;overscroll-behavior:contain;background:var(--bg, var(--surface));padding:.4rem}.graph{position:relative;margin-inline:auto}.connections{position:absolute;inset:0;overflow:visible;pointer-events:none}.connections>path{fill:none;stroke:var(--connection-color, var(--muted));stroke-width:1.5;opacity:.65}.package-group{position:absolute;cursor:default}.package-group.stacked{background:var(--bg);border-radius:var(--ui-radius, 6px)}.stacked.collapsed{background:linear-gradient(var(--surface),var(--surface)),var(--bg)}.stacked.selected-cycle{background:color-mix(in srgb,var(--accent) 9%,var(--bg))}.stacked:hover,.stacked:focus-within{z-index:1;box-shadow:0 2px 8px #0005}.stacked.dimmed{opacity:1}.stacked.dimmed:after{content:"";position:absolute;inset:0;background:var(--surface);opacity:.8;border-radius:inherit;pointer-events:none}.package{position:absolute;width:var(--package-width);height:var(--package-height);display:flex;flex-direction:column;gap:4px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--package-color);border-radius:var(--ui-radius, 6px);font-size:.75rem;overflow:hidden}.package.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--surface))}.name,.location,.version{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.package-main,.package-meta{display:flex;align-items:baseline;gap:.4rem;min-width:0}.name{flex:1;font-weight:600;line-height:17px}.version{max-width:45%;flex-shrink:0;font-family:var(--font-mono, monospace);font-size:.65rem}.badge{flex-shrink:0;font-size:.6rem;color:var(--muted);user-select:none}.selected-badge{color:var(--accent)}.location{flex:1;color:var(--muted);font-family:var(--font-mono, monospace);font-size:.61rem;line-height:14px}.cycle{border-radius:var(--ui-radius, 8px);outline:1px solid var(--border);background:color-mix(in srgb,var(--muted) 4%,transparent)}.cycle-label{position:absolute;top:7px;left:14px;color:var(--muted);font-size:.63rem;user-select:none}.cycle-toggle{display:flex;align-items:center;gap:.4rem;padding:0;border:0;background:transparent;font-family:inherit;line-height:16px}.cycle-toggle:hover{color:var(--text)}.cycle-chevron{font-size:.85rem}.cycle-summary{display:flex;gap:.4rem;text-align:left}.cycle-count{color:var(--muted)}.cycle-count:before{content:"\\b7 "}.collapsed .cycle-toggle{inset:0;width:100%;padding:5px 7px;border-radius:inherit;font-size:.75rem}.collapsed .cycle-summary{flex:1;flex-direction:column;gap:2px}.collapsed .cycle-count{font-size:.65rem}.collapsed .cycle-count:before{content:none}.selected-cycle{outline-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--surface))}.cycle-connections>path{stroke:var(--connection-color);stroke-width:1.25;opacity:.8}.large-cycle .cycle-connections>path{stroke:var(--muted);opacity:.18}.cycle-connections>path.subdued{opacity:.04}.connections>path.traced{stroke:var(--connection-color);stroke-width:1.75;opacity:1}.package-subdued{opacity:.35}.dimmed,.connections>path.dimmed{opacity:.18}.note,.empty{padding:1rem;color:var(--muted);font-size:.78rem;line-height:1.5}.note{position:sticky;left:0;max-width:65rem;margin:auto}button:focus-visible,.graph-scroll:focus-visible,.package:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
|
|
188
|
-
`;var
|
|
189
|
-
style=${le({"--connection-color":
|
|
183
|
+
You can change this anytime from the lock icon in the sidebar header.`)){iR();return}await Eu(),ft()&&iR()}var Zb=class extends N{static properties={_value:{state:!0}};constructor(){super(),this._value=""}_onInput=t=>{this._value=t.target.value};_onCreate=()=>{let t=(this._value??"").trim();t&&this._finish(t)};_onCancel=()=>this._finish(null);_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onCreate())};render(){let t=(this._value??"").trim().length>0;return u`<dialog @close="${this._onClose}"><header><h3>New workspace</h3></header><input type="text" class="nwd-input" placeholder="Workspace name" maxlength="200" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><p class="nwd-note ui-hint">Workspace triage is synchronized by default over an end-to-end encrypted channel. Triage on unattached reports stays local to this browser.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onCreate}">Create</button></footer></dialog>`}};customElements.define("new-workspace-dialog",Zb);function lR(){return re("new-workspace-dialog")}var Qb=class extends N{static styles=[...N.styles,P(ot)];static properties={workspaceName:{type:String},reportCount:{type:Number},bundleCount:{type:Number},orphanedTriage:{type:Number},sharedTriage:{type:Number},_mode:{state:!0},_triage:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceName="",this.reportCount=0,this.bundleCount=0,this.orphanedTriage=0,this.sharedTriage=0,this._mode="detach",this._triage="keep",this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){if(this._settled)return;let n=this.reportCount>0?this._mode:"detach",r=n==="delete"&&this.orphanedTriage>0?this._triage:"keep";super._finish({confirmed:!!t,mode:n,triage:r})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_onModeChange=t=>{this._mode=t.target.value};_onTriageChange=t=>{this._triage=t.target.value};_triageSection(){if(this._mode!=="delete"||this.reportCount===0)return"";let t=this.orphanedTriage,n=this.sharedTriage;return t===0&&n===0?u`<p class="lwd-note">No local triage is attached to ${this.reportCount===1?"this report":"these reports"}.</p>`:t===0?u`<p class="lwd-note">Local triage on ${this.reportCount===1?"this report":"these reports"} is also attached to ${n===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:u`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="lwd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){let t=this.reportCount,n=this.bundleCount,r=t>0,o=t===1?"report":"reports",s=t===1?"it":"them",i=t===1?"stays":"stay",a=t===1?"is removed":"are removed",l=n>0?u`<p class="lwd-note">${n===1?"One bundle is":`${n} bundles are`} also attached. ${n===1?"It":"They"} will become unfiled — the bundle bytes stay on this device either way (delete bundles manually from the Bundles list if you want them gone).</p>`:"",p=r?u`<fieldset class="lwd-choice"><legend>What should happen to the <strong>${t}</strong> attached ${o}?</legend><label class="lwd-option"><input type="radio" name="lwd-mode" value="detach" ?checked="${this._mode==="detach"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Move ${s} out of the workspace</span> <span class="lwd-option-hint">The ${o} ${i} in this browser as unattached ${o}.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-mode" value="delete" ?checked="${this._mode==="delete"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Delete ${s} along with the workspace</span> <span class="lwd-option-hint">The ${o} ${a} from this browser.</span></span></label></fieldset>`:n>0?u`<p class="lwd-empty">No reports are attached to this workspace (only bundles, see below).</p>`:u`<p class="lwd-empty">No reports are attached to this workspace.</p>`;return u`<dialog @close="${this._onClose}"><header><h3>Leave workspace</h3></header><p class="lwd-body">Leave workspace <strong>"${this.workspaceName}"</strong> on this device?</p>${p} ${l} ${this._triageSection()}<ul class="lwd-list"><li>Workspace synchronization data stays on the sync server — peers (and your other devices) keep their copy.</li></ul><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Leave</button></footer></dialog>`}};customElements.define("leave-workspace-dialog",Qb);function cR({name:e,reportCount:t,bundleCount:n,triageImpact:r}={}){return re("leave-workspace-dialog",{workspaceName:e??"",reportCount:t??0,bundleCount:n??0,orphanedTriage:r?.orphanedCount??0,sharedTriage:r?.sharedCount??0})}var ey=class extends N{static styles=[...N.styles,P(rn)];static properties={workspaceId:{type:String},initialName:{type:String},privateKeyBase64:{type:String},_name:{state:!0},_password:{state:!0},_confirm:{state:!0},_url:{state:!0},_busy:{state:!0},_error:{state:!0},_copied:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.initialName="",this.privateKeyBase64="",this._name="",this._password="",this._confirm="",this._url="",this._busy=!1,this._error="",this._copied=!1,this._settled=!1}beforeOpen(){this._name=this.initialName}focusInitial(){this.renderRoot.querySelector('input[data-role="name"]')?.focus()}_finish(){this._settled||(this._copiedTimer&&(clearTimeout(this._copiedTimer),this._copiedTimer=null),this._password="",this._confirm="",this._url="",this.privateKeyBase64="",super._finish(null))}_onClose=()=>this._finish();_onCancel=()=>this._finish();_onNameInput=t=>{this._name=t.target.value};_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_canGenerate(){return(this._name??"").trim().length>0&&(this._password??"").length>0&&this._password===this._confirm&&!this._busy}_onGenerate=async()=>{if(this._canGenerate()){this._busy=!0,this._error="";try{let t=await Em({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=Fm(t),this._password="",this._confirm=""}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onCopy=async()=>{if(this._url){this._error="";try{if(await navigator.clipboard.writeText(this._url),this._settled)return;this._copied=!0,this._copiedTimer&&clearTimeout(this._copiedTimer),this._copiedTimer=setTimeout(()=>{this._copied=!1,this._copiedTimer=null},1500)}catch{if(this._settled)return;this._error="Copy failed \u2014 select the link and copy it manually."}}};_onKeydown=t=>{t.key==="Enter"&&!this._url&&(t.preventDefault(),this._onGenerate())};_body(){return this._url?u`<p class="nwd-note ui-hint">Anyone with the link <strong>and</strong> the password can attach this workspace. Share them through separate channels.</p><label class="wsl-field"><span>Share link</span> <textarea class="wsl-link" readonly="readonly" rows="3" @focus="${t=>t.target.select()}">${this._url}</textarea></label> ${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Close</button> <button type="button" class="primary" @click="${this._onCopy}">${this._copied?"Copied":"Copy link"}</button></footer>`:u`<label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-pw" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-pw-confirm" maxlength="1024" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label><p class="nwd-note ui-hint">The link carries the workspace's identity (id, name, and private key) so the recipient joins the same sync chain. Triage, reports, and comments aren't in the link itself — they sync over once the recipient joins. The link decrypts with the password above; without it the link is useless.</p>${this._error?u`<p class="wsl-error" role="alert">${this._error}</p>`:g} ${this._password&&this._confirm&&this._password!==this._confirm?u`<p class="wsl-error" role="alert">Passwords don't match.</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._canGenerate()}" @click="${this._onGenerate}">${this._busy?"Generating\u2026":"Generate link"}</button></footer>`}render(){return u`<dialog @close="${this._onClose}"><header><h3>${this._url?"Workspace share link":"Share workspace by link"}</h3></header>${this._body()}</dialog>`}};customElements.define("workspace-share-link-dialog",ey);function dR({id:e,name:t,privateKeyBase64:n}={}){return new Promise((r,o)=>{let s=document.createElement("workspace-share-link-dialog");s.workspaceId=e??"",s.initialName=t??"",s.privateKeyBase64=n??"",s.addEventListener("resolve",()=>{s.remove(),r()}),s.addEventListener("modal-conflict",i=>{s.privateKeyBase64="",s.remove(),o(Bl(i.detail?.cause))}),document.body.append(s)})}var ty=class extends Ee{static properties={reportName:{type:String},kindLabel:{type:String},orphanedTriage:{type:Number},sharedTriage:{type:Number},inRemote:{type:Boolean},_triage:{state:!0}};constructor(){super(),this.reportName="",this.kindLabel="report",this.orphanedTriage=0,this.sharedTriage=0,this.inRemote=!1,this._triage="keep"}confirmationResult(t){let n=this.orphanedTriage>0?this._triage:"keep";return{confirmed:t,triage:n}}_onTriageChange=t=>{this._triage=t.target.value};_remoteNotice(){return this.inRemote?u`<p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:g}_triageSection(){let t=this.orphanedTriage,n=this.sharedTriage;return t===0&&n===0?u`<p class="lwd-note">No local triage is attached to this ${this.kindLabel}.</p>`:t===0?u`<p class="lwd-note">Local triage on this report is also attached to ${n===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:u`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="drd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="drd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){return u`<dialog @close="${this._onClose}"><header><h3>Delete ${this.kindLabel}</h3></header><p class="lwd-body">Delete <strong>"${this.reportName}"</strong>?</p>${this._remoteNotice()} ${this._triageSection()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Delete</button></footer></dialog>`}};customElements.define("delete-report-dialog",ty);function uR({name:e,kindLabel:t,triageImpact:n,inRemote:r}={}){return re("delete-report-dialog",{reportName:e??"",kindLabel:t||"report",orphanedTriage:n?.orphanedCount??0,sharedTriage:n?.sharedCount??0,inRemote:!!r})}var ny=class extends Ee{static properties={bundleName:{type:String},inRemote:{type:Boolean}};constructor(){super(),this.bundleName="",this.inRemote=!1}_remoteNotice(){return this.inRemote?u`<p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:g}render(){return u`<dialog @close="${this._onClose}"><header><h3>Delete bundle</h3></header><p class="lwd-body">Delete <strong>"${this.bundleName}"</strong>?</p>${this._remoteNotice()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Delete</button></footer></dialog>`}};customElements.define("delete-bundle-dialog",ny);function pR({name:e,inRemote:t}={}){return re("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var ry=class extends Ee{static properties={bundleName:{type:String},workspaceName:{type:String}};constructor(){super(),this.bundleName="",this.workspaceName=""}render(){return u`<dialog @close="${this._onClose}"><header><h3>Detach bundle</h3></header><p class="lwd-body">Detach <strong>"${this.bundleName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The bundle bytes stay on this device — drop it onto another workspace to attach it there.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Detach</button></footer></dialog>`}};customElements.define("detach-bundle-dialog",ry);function fR({name:e,workspaceName:t}={}){return re("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var oy=class extends Ee{static properties={reportName:{type:String},workspaceName:{type:String}};constructor(){super(),this.reportName="",this.workspaceName=""}render(){return u`<dialog @close="${this._onClose}"><header><h3>Detach report</h3></header><p class="lwd-body">Detach <strong>"${this.reportName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The report bytes stay on this device — drop it onto another workspace to attach it there.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Detach</button></footer></dialog>`}};customElements.define("detach-report-dialog",oy);function mR({name:e,workspaceName:t}={}){return re("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var sy=class extends N{_onConfirm=()=>this._finish(!0);render(){return u`<dialog @close="${this._onClose}"><header><h3>Changes might not be saved</h3></header><p class="nwd-intro">Triage works in this tab, but this browser <strong>can't save its sync state right now</strong> — so changes that haven't reached the server could be lost if you reload the page.</p><p class="nwd-intro">This usually means the browser's storage is full, or another tab is running a newer version of the app (to avoid overwriting that newer version's data, this tab has paused saving).</p><p class="nwd-note ui-hint">Free up space if storage is full, and close or reload other tabs of this app to the same version. This notice clears on its own once saving works again.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("persistence-degraded-dialog",sy);function gR(){return new Promise(e=>{let t=document.createElement("persistence-degraded-dialog");t.exclusive=!0;let n=r=>{t.remove(),e({shown:r})};t.addEventListener("resolve",()=>n(!0)),t.addEventListener("modal-conflict",()=>n(!1)),document.body.append(t)})}var iy=class extends N{focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}_onReload=()=>this._finish("reload");render(){return u`<dialog @close="${this._onClose}"><header><h3>Sign in to keep syncing</h3></header><p class="nwd-intro ui-hint">Triage can't reach the sync server — the connection is being redirected to an <strong>authentication proxy</strong> (for example Cloudflare Access). This usually means your access session has expired.</p><p class="nwd-note ui-hint">Reload the page to sign in again. Your triage is saved on this device, so reloading won't lose anything — or keep working offline and reload later.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onClose}">Not now</button> <button type="button" class="primary" @click="${this._onReload}">Reload page</button></footer></dialog>`}};customElements.define("proxy-auth-dialog",iy);function hR(){return new Promise(e=>{let t=document.createElement("proxy-auth-dialog");t.exclusive=!0;let n=(r,o)=>{t.remove(),e({shown:r,reload:o})};t.addEventListener("resolve",r=>n(!0,r.detail==="reload")),t.addEventListener("modal-conflict",()=>n(!1,!1)),document.body.append(t)})}var Er=null,B=null,py=null;function Bu(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}Rv();function l2(){return Qt().size}function c2(){return oo().size}var ja=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,$y="application/x-deepview-report",fy="application/x-deepview-source-ws",Ga="application/x-deepview-bundle",Pu=!1,Du=!1,d2={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[ke]:"Links"},bR=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",ke],Tr="",jt=!1,Ka=new Map,yR="",qa=new Au;function u2(e,t){let n=c.currentView==="bundles"?c.selectedBundle:null,r=["findings","files","links"].includes(c.currentView)?c.currentFile:null,o=n?"bundles":"reports",s=r?Ms(r):null,i=e.filter(l=>n?l.bundles.includes(n):l.id===s),a=JSON.stringify([o,n||r,i.map(l=>l.id)]);if(!(!t&&a===yR)){yR=a;for(let l of i){let p=Ka.get(l.id)??new Set;p.add(o),Ka.set(l.id,p)}}}function wR(e,t={}){let r=`file-item${AR(e,t.workspaceId??null)?" current":""}${t.indented?" indented":""}`,o=oe(e),s=zi(e),i=ye[Ae(e)]??ye.default;return u`<li class="${r}" data-file="${e}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${o}">${W(i)}<span class="file-label">${o}</span>${s===void 0?g:u`<span class="file-count">${s}</span>`}</button></li>`}function AR(e,t){return e===c.currentFile&&t===Ms(e)&&(c.currentView==="findings"||c.currentView==="files"||c.currentView==="links")}function ER(e,t={}){let n=`file-group-header${t.dropTarget?" default-reports":""}`;return u`<li class="${n}" data-default-reports="${t.dropTarget?"true":g}"><span class="group-label">${e}</span></li>`}var p2=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8h9"/></svg>`,f2=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2.5H3.5v11H8M10 5l3 3-3 3M13 8H6"/></svg>`;function m2(){return u`<li class="file-group-header workspace-header"><span class="group-label">Workspaces</span><span class="workspace-header-actions"><button type="button" class="workspace-add" data-action="new-workspace" aria-label="Create a new workspace">${p2}</button></span></li>`}function g2(){let e=N_(c.managedTeams,Tr);return e.length===0?g:u`${ER("Teams")} ${Z(e,({team:t})=>t.id,({team:t,reports:n,bundles:r})=>{let o=t.app,s=o?.appMode===!0,i=qa.shown(t.id,"reports",s,jt),a=qa.shown(t.id,"bundles",s,jt),l=n.filter(p=>p.analyzer!==ke).length;return u`<li class="${`file-item team-item${LR(t)?" current":""}`}" data-team-id="${t.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{Ar(t)}}">${zR}<span class="file-label">${t.name}</span></button> ${c.managed?.allowShare&&["admin","manage"].includes(c.managedSession?.role)?u`<button type="button" class="workspace-share" aria-label="${`Share ${t.name} publicly`}" @click="${()=>{n0(t)}}">${WR}</button>`:g}</div>${s?u`<div class="workspace-meta"><span class="workspace-findings">${o.appFindings.toLocaleString()} finding${o.appFindings===1?"":"s"}</span> <span class="workspace-sections" role="group" aria-label="Team files"><button type="button" data-team-section="reports" aria-expanded="${String(i)}" ?disabled="${jt}">${l.toLocaleString()} report${l===1?"":"s"}</button> ${r.length>0?u`<button type="button" data-team-section="bundles" aria-expanded="${String(a)}" ?disabled="${jt}">${r.length.toLocaleString()} bundle${r.length===1?"":"s"}</button>`:g}</span></div>`:g}</li>${i?Z(n,p=>p.id,p=>y2(t,p)):g} ${a?Z(r,p=>p.id,p=>v2(t,p)):g}`})}`}function FR(e,t,n,r){return u`<li><button type="button" class="${n?"rail-item current":"rail-item"}" aria-label="${e}" aria-current="${n?"true":g}" data-tooltip="${e}" @click="${r}">${t}<span aria-hidden="true">${B_(e)}</span></button></li>`}function h2(){return Z(c.managedTeams??[],e=>e.id,e=>FR(e.name,zR,LR(e)||(e.reports??[]).some(t=>OR(e,t))||(e.bundles??[]).some(t=>NR(e,t)),()=>{Ar(e)}))}function b2(e){return Z(e,t=>t.id,t=>FR(t.name,DR,HR(t)||t.reports.some(n=>AR(n,t.id))||t.bundles.some(n=>PR(n,t.id)),()=>jR(t.id)))}function LR(e){return c.currentManagedTeam===e.id&&!!c.currentWorkspace&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function OR(e,t){return c.currentManagedTeam===e.id&&c.currentManagedReport===t.id&&["findings","links"].includes(c.currentView)}function NR(e,t){return c.currentManagedTeam===e.id&&wr(c)===t.id}function y2(e,t){let n=oe(t.filename),r=OR(e,t);return u`<li class="${`file-item indented team-report-item${t.visible===!1?" content-hidden":""}${r?" current":""}`}"><button type="button" class="file-name" aria-label="${t.visible===!1?`${n} (hidden from teams)`:g}" data-tooltip="${n}" data-tooltip-repo="${Lb(t)||g}" data-tooltip-placement="right-start" @click="${()=>{w2(e,t)}}">${W(ye[rg(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function w2(e,t){return Ar(e,t.id)}function v2(e,t){let n=NR(e,t);return u`<li class="${`file-item indented team-bundle-item${t.visible===!1?" content-hidden":""}${n?" current":""}`}"><button type="button" class="file-name" aria-label="${t.visible===!1?`${t.filename} (hidden from teams)`:g}" data-managed-bundle="${t.id}" data-managed-team="${e.id}" data-tooltip="${t.filename}" data-tooltip-repo="${Lb(t)||g}" data-tooltip-bundle="${t.kind||g}" data-tooltip-built="${t.provenance==="build"?"true":g}" data-tooltip-stats="${O_(t)||g}" data-tooltip-commit="${t.summary?.commit||g}" data-tooltip-commit-info="${Ns(t.commitInfo,t.summary?.commit,t.repoFullName)??g}" data-tooltip-placement="right-start">${BR}<span class="file-label">${t.filename}</span></button></li>`}function $2(){return u`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var BR=u`${W(No)}`;function PR(e,t){return c.selectedBundle===e&&c.currentView==="bundles"&&t===c.selectedBundleWorkspace}function vR(e,t={}){let{integrity:n,name:r}=e,o=PR(n,t.workspaceId??null),i=`file-item bundle-item${t.workspaceId!=null?" indented":""}${o?" current":""}`;return u`<li class="${i}" data-bundle-integrity="${n}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${`${r}
|
|
184
|
+
${n}`}">${BR}<span class="file-label">${r}</span></button></li>`}function k2(e,t){let n=e.slice(0,15);return u`<li class="file-item indented bundle-item bundle-missing" data-bundle-integrity="${e}" data-workspace-id="${t}" data-tooltip="Bundle bytes not on this device — drop the matching bundle to attach."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${n}…</em></span></span></li>`}function x2(e,t){return u`<li class="file-item indented report-missing" data-workspace-id="${t}" data-tooltip="Report not on this device — it re-downloads automatically if a workspace member has uploaded it."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${oe(e)}</em></span></span></li>`}var DR=u`${W(Po)}`,zR=u`<svg class="team-icon" viewBox="0 0 16 16" width="13" height="13" fill="currentColor" aria-hidden="true"><path d="M5.5 8a2.25 2.25 0 1 0 0-4.5 2.25 2.25 0 0 0 0 4.5Zm0 1C3.2 9 1.75 10.2 1.75 11.6V13h7.5v-1.4C9.25 10.2 7.8 9 5.5 9Zm5.25-1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm.25 1c-.43 0-.83.05-1.2.15.86.62 1.45 1.5 1.45 2.45V13h3.25v-1.3C14.5 10.1 13.15 9 11 9Z"/></svg>`,S2=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v8M5 7l3 3 3-3M3 13h10"/></svg>`,C2=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3H4v10h5"/><path d="M7 8h7M11 5l3 3-3 3"/></svg>`,WR=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 9.5L9 7.5"/><path d="M9.5 5.5L10.5 4.5a2.1 2.1 0 1 1 3 3l-1 1"/><path d="M6.5 11.5L5.5 12.5a2.1 2.1 0 1 1-3-3l1-1"/></svg>`;function HR(e){return c.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function _2(e,{app:t,compact:n,reports:r,bundles:o,showReports:s,showBundles:i}){let l=`file-item workspace-item${HR(e)?" current":""}`;return u`<li class="${l}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${DR}<span class="file-label" .textContent="${e.name}"></span></button> <button type="button" class="workspace-share" data-action="share-workspace" aria-label="Share workspace by link">${WR}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${S2}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${C2}</button></div>${n?u`<div class="workspace-meta">${t?.appMode?u`<span class="workspace-findings">${t.appFindings.toLocaleString()} finding${t.appFindings===1?"":"s"}</span>`:g} <span class="workspace-sections" role="group" aria-label="Workspace files"><button type="button" data-workspace-section="reports" aria-expanded="${String(s)}" ?disabled="${jt}">${r.toLocaleString()} report${r===1?"":"s"}</button> ${o>0?u`<button type="button" data-workspace-section="bundles" aria-expanded="${String(i)}" ?disabled="${jt}">${o.toLocaleString()} bundle${o===1?"":"s"}</button>`:g}</span></div>`:g}</li>`}function qs(e){return Tr?oe(e).toLowerCase().includes(Tr):!0}var ay=(e,t)=>oe(e).localeCompare(oe(t));async function H({revealSelection:e=!1}={}){await Mt();let t=Zt();if(Xb({serverMode:t,session:c.managedSession,teams:c.managedTeams,sessionPending:_o,teamsPending:Ro,alternateMode:Jn(c.serverModeConfig)?"e2e":"local",onSwitchMode:VR}),Wu(),R()){if(qa.sync(c,e),!_o&&!Ro&&!Ys&&!pn&&Rr({catalogOnly:!0}),c.bundles=(c.bundles??[]).filter(w=>w.managedId||w.npm),c.storedFiles=[],Gb([]),!B)return;J(u`${g2()}`,py);let y=B.querySelector("#sidebar-rail");y?.setAttribute("aria-label","Teams"),y&&J(h2(),y),B.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),B.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),B.querySelector("#storage-status")?.setAttribute("hidden",""),fn();return}if(qa.sync({managedTeams:[]}),B?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),B?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await hm(),t!==Zt()){await H();return}kt().catch(()=>{}),ea().catch(()=>{});let n=await ce();if(t!==Zt()){await H();return}let r=Y();u2(r,e),Gb(r);let[o]=await Promise.all([Je(),...r.map(y=>dt("workspace",y.id))]);if(t!==Zt()){await H();return}if(c.bundles=o,c.storedFiles=n,jb(),!B)return;let s=new Set(n),i=new Set;for(let y of r)for(let w of y.reports)s.has(w)&&i.add(w);let a=new Map(o.map(y=>[y.integrity,y])),l=new Set;for(let y of r)for(let w of y.bundles)a.has(w)&&l.add(w);let p=new Map;for(let y of bR)p.set(y,[]);for(let y of n){if(i.has(y)||!qs(y))continue;let w=Ae(y);p.has(w)||p.set(w,[]),p.get(w).push(y)}let d=r.filter(y=>!Tr||y.name.toLowerCase().includes(Tr)||y.reports.some(w=>qs(w))?!0:y.bundles.some(w=>{let v=a.get(w);return v&&qs(v.name)})),f=o.filter(y=>!l.has(y.integrity)&&qs(y.name));J(u`${m2()} ${Z(d,y=>y.id,y=>{let w=[],v=[];for(let T of y.reports)qs(T)&&(s.has(T)?w.push(T):v.push(T));w.sort(ay),v.sort(ay);let x=[],$=[];for(let T of y.bundles){let I=a.get(T);I?(!Tr||qs(I.name))&&x.push(I):Tr||$.push(T)}let k=tR(y)??co(y),S=k?.appMode??Hm(y)===!0,C=Ka.get(y.id),_=!S||jt||C?.has("reports")===!0,L=!S||jt||C?.has("bundles")===!0,A=[...w,...v].filter(T=>Ie(T)!==ke).length,E=x.length+$.length;return u`${_2(y,{app:k,compact:S,reports:A,bundles:E,showReports:_,showBundles:L})} ${_?u`${w.map(T=>wR(T,{indented:!0,workspaceId:y.id}))}${v.map(T=>x2(T,y.id))}`:g} ${L?u`${x.map(T=>vR(T,{workspaceId:y.id}))}${$.map(T=>k2(T,y.id))}`:g}`})} ${bR.map(y=>{let w=(p.get(y)??[]).toSorted(ay),v=y==="default";return w.length===0&&!(v&&Pu)?null:u`${ER(d2[y]??y,{dropTarget:v})} ${w.map(x=>wR(x))}`})} ${f.length>0||Du?$2():null} ${Z(f,y=>y.integrity,y=>vR(y))}`,py);let m=B.querySelector("#sidebar-rail");m?.setAttribute("aria-label","Workspaces"),m&&J(b2(r),m);let h=B.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=l2());let b=B.querySelector('sidebar-view-button[kind="repositories"]');b&&(b.count=c2()),fn(),zf(n,UR)}var ly=!1;function UR(){ly||(ly=!0,requestAnimationFrame(()=>{ly=!1,H().catch(e=>console.warn("counts repaint:",e))}))}$t(()=>{H()});Vm(UR);async function VR(){B?.querySelector("#user-menu")?.hidePopover?.(),It?await D2():kf()&&await Uu()}function jR(e){let t=c.currentView==="findings"||c.currentView==="files";(e!==c.currentWorkspace||!t)&&Xs(e)}async function $R(e){let t=e.target.closest("[data-team-section]");if(t){if(jt||t.disabled)return;let f=t.closest("[data-team-id]")?.dataset.teamId;f&&qa.toggle(f,t.dataset.teamSection),await H();return}let n=e.target.closest("[data-workspace-section]");if(n){if(jt||n.disabled)return;let f=n.closest("[data-workspace-id]")?.dataset.workspaceId;if(!f)return;let m=n.dataset.workspaceSection,h=Ka.get(f)??new Set;h.has(m)?h.delete(m):h.add(m),Ka.set(f,h),await H();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await VR();return}if(e.target.closest('[data-action="go-home"]')){await At();return}let r=e.target.closest("[data-managed-bundle]");if(r){te.navigate(Xe({view:"bundles",teamId:r.dataset.managedTeam,bundleId:r.dataset.managedBundle,bundleTab:c.currentView==="bundles"?c.bundleDetailsTab:"overview"},c.managedTeams));return}let o=e.target.closest(".file-item[data-bundle-integrity]");if(o){if(o.classList.contains("bundle-missing"))return;let f=o.dataset.bundleIntegrity,m=o.dataset.workspaceId??null;if(c.selectedBundle===f&&c.currentView==="bundles"&&c.selectedBundleWorkspace===m)return;hr(f,void 0,{workspaceId:m}),wy(f,c.bundleDetailsTab),O(),H(),Cd(f);return}let s=e.target.closest("sidebar-view-button");if(s){let f=s.getAttribute("kind");(f==="packages"||f==="repositories")&&(c.currentView=f,O(),H());return}if(e.target.closest('[data-action="new-workspace"]')){if(R())return;let f=await lR();f&&(await Nu(),await Yf(f),H());return}let i=e.target.closest('[data-action="share-workspace"]');if(i){let f=i.closest("[data-workspace-id]"),m=f?Y().find(h=>h.id===f.dataset.workspaceId):null;m&&dR({id:m.id,name:m.name,privateKeyBase64:m.privateKey}).catch(h=>alert(`Failed to open share dialog: ${h.message}`));return}let a=e.target.closest('[data-action="export-workspace"]');if(a){let f=a.closest("[data-workspace-id]"),m=f?Y().find(h=>h.id===f.dataset.workspaceId):null;m&&sR(m).catch(h=>alert(`Failed to open export dialog: ${h.message}`));return}let l=e.target.closest('[data-action="leave-workspace"]');if(l){let f=l.closest("[data-workspace-id]"),m=f?Y().find(x=>x.id===f.dataset.workspaceId):null;if(!m)return;let h=Array.isArray(m.reports)?m.reports:[],b;try{b=await Oc(h)}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let{confirmed:y,mode:w,triage:v}=await cR({name:m.name,reportCount:h.length,bundleCount:m.bundles.length,triageImpact:b});if(!y)return;if(!Y().some(x=>x.id===m.id)){alert(`Workspace "${m.name}" was removed elsewhere; nothing to leave.`);return}try{await IR(m.id,w,{triage:v})}catch(x){alert(`Failed to leave workspace: ${x.message}`)}return}let p=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(p){let f=p.dataset.workspaceId;f&&jR(f);return}let d=e.target.closest(".file-item[data-file]");if(d){let f=d.dataset.file,m=c.currentView==="findings"||c.currentView==="links",h=d.dataset.workspaceId??null;f&&(f!==c.currentFile||h!==c.currentReportWorkspace||!m)&&Ya(f,void 0,{workspaceId:h});return}if(e.target.closest("sidebar-delete-current")){if(c.currentView==="bundles"&&c.selectedBundle){let x=c.selectedBundle,$=(c.bundles??[]).find(C=>C.integrity===x)?.name??x,k=Y().filter(C=>Array.isArray(C.bundles)&&C.bundles.includes(x)).filter(C=>dg(C.id,x)).map(C=>C.id),{confirmed:S}=await pR({name:$,inRemote:k.length>0});if(!S)return;if(c.selectedBundle!==x){alert(`Active bundle changed during confirmation; aborting delete of "${$}".`);return}try{await TR({deleteFromRemoteWorkspaceIds:k})}catch(C){alert(`Failed to delete bundle: ${C.message}`)}return}if(!c.currentFile)return;let f=c.currentFile,m;try{m=await Oc([f])}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let h=Y().filter(x=>Array.isArray(x.reports)&&x.reports.includes(f)).filter(x=>ws(x.id,f)).map(x=>x.id),b=h.length>0,y=Yc(f)?"links file":"report",{confirmed:w,triage:v}=await uR({name:f,kindLabel:y,triageImpact:m,inRemote:b});if(!w)return;if(c.currentFile!==f){alert(`Active file changed during confirmation; aborting delete of "${f}".`);return}try{await RR({triage:v,deleteFromRemoteWorkspaceIds:h})}catch(x){alert(`Failed to delete ${y}: ${x.message}`)}return}if(e.target.closest("#sync-status")){G.status==="error"?G.dismissError():G.status==="off"?(!G.getServerUrl()&&ja&&G.setServerUrl(ja),G.setEnabled(!0)):G.setEnabled(!1);return}if(e.target.closest('[data-action="manage"]')){B?.querySelector("#user-menu")?.hidePopover?.(),To("manage");return}if(e.target.closest('[data-action="view-as-stop"]')){B?.querySelector("#user-menu")?.hidePopover?.(),d0(c.managedSession?.csrfToken);return}if(e.target.closest('[data-action="my-reviews"]')){B?.querySelector("#user-menu")?.hidePopover?.(),te.navigate({view:"reviews"});return}if(e.target.closest('[data-action="managed-logout"]')){c0(c.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){Er.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",Er.classList.contains("collapsed")?"1":"0")}catch{}}}var R2={placement:"right",gate:e=>{if(e.dataset.tooltipRepo||e.dataset.tooltipBundle)return!0;let t=e.querySelector(".file-label");return!t||(e.dataset.tooltip??"")!==t.textContent?!0:t.scrollWidth>t.clientWidth}};function M2(e){jt=e.target.value.length>0,Tr=e.target.value.trim().toLowerCase(),H()}var T2={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};function GR(){return G.getServerUrl()||ja?Y().length>0:!1}function KR(){let e=B?.querySelector("#auth-status");if(!e)return;let t=B?.querySelector("#manage-status"),n=B?.querySelector("#user-menu"),r=c.managedSession;Er?.toggleAttribute("data-authenticated",r!=null),Er?.toggleAttribute("data-workspace-access",r!=null&&r.role!=="none"),I2(r);let o=B?.querySelector("#public-status");if(o&&(o.hidden=!r?.publicShare),e.hidden=r==null||r.publicShare===!0,r==null){t&&(t.hidden=!0),e.dataset.authed="0",e.removeAttribute("popovertarget"),e.removeAttribute("aria-label"),J(g,e),n&&J(g,n);return}if(r.publicShare){t&&(t.hidden=!0),e.removeAttribute("popovertarget"),n&&J(g,n);return}let s=(r.login[0]??"?").toUpperCase(),i=typeof r.name=="string"&&/\s/u.test(r.name.trim())?r.name.trim():`@${r.login}`;if(e.dataset.authed="1",e.setAttribute("popovertarget","user-menu"),e.setAttribute("aria-label",`Account: ${r.login}`),J(u`${kR(s,r.id)}<span class="auth-login">${i}</span>`,e),t){let a=R()&&(r.role==="admin"||r.role==="manage");t.hidden=!a}n&&J(u`<div class="user-card">${kR(s,r.id,!0)} <span class="user-id"><span class="user-login">${r.login}</span> ${r.name?u`<span class="user-name">${r.name}</span>`:g}</span></div>${r.viewer?u`<button type="button" class="user-menu-row" data-action="view-as-stop">Return to @${r.viewer.login}</button>`:g} ${r.role==="none"?g:u`<button type="button" class="user-menu-row" data-action="my-reviews">My reviews</button>`} <button type="button" class="user-menu-row" data-action="toggle-client-mode">${Jn(c.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${f2}<span>Log out</span></button>`,n)}function I2(e){let t=B?.querySelector("#view-as-status");t&&(t.hidden=!e?.viewer,Er?.toggleAttribute("data-view-as",e?.viewer!=null),J(e?.viewer?u`<span class="view-as-label"><span>Viewing as <strong>@${e.login}</strong></span> <span class="view-as-note">Read only · changes are not saved</span></span> <button type="button" class="view-as-stop" data-action="view-as-stop" aria-label="${`Stop viewing as ${e.login}`}">Stop</button>`:g,t))}document.addEventListener("managed-view-only",()=>{let e=c.managedSession;e?.viewer&&Ge(`Viewing as @${e.login} is read only: changes are not saved.`,{kind:"error"})});function kR(e,t,n=!1){let r=`/api/avatar/${encodeURIComponent(t)}`;return u`<span class="${n?"user-avatar user-avatar-lg":"user-avatar"}"><span class="user-avatar-fallback">${e}</span> ${Qm()||c.managedSession?.role==="none"?g:u`<img alt="" src="${r}" @error="${A2}">`}</span>`}function A2(e){e.currentTarget.classList.add("broken")}function qR(){let e=B?.querySelector(".brand-tag");if(e){let t=c.serverMode==="managed"||Jn(c.serverModeConfig);e.textContent=Zt(),t?(e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Switch from ${Zt()} mode`)):(e.removeAttribute("role"),e.removeAttribute("tabindex"),e.removeAttribute("aria-label"))}}function E2(){Er&&(Er.dataset.mode=Zt()),R()?(B?.querySelector("sidebar-delete-current")?.setAttribute("hidden",""),B?.querySelector("#encryption-toggle")?.setAttribute("hidden",""),B?.querySelector("#auth-status")?.removeAttribute("hidden")):(B?.querySelector("sidebar-delete-current")?.removeAttribute("hidden"),B?.querySelector("#encryption-toggle")?.removeAttribute("hidden"),B?.querySelector("#manage-status")?.setAttribute("hidden",""),B?.querySelector("#auth-status")?.setAttribute("hidden",""),B?.querySelector("#public-status")?.setAttribute("hidden",""),B?.querySelector("#view-as-status")?.setAttribute("hidden","")),j_()}function fn(e){let t=B?.querySelector("#sync-status");if(!t)return;if(qR(),E2(),c.serverMode==="managed"&&c.localMode){t.hidden=!0,G.setForcedOff(!0);let d=B?.querySelector("#auth-status");d&&(d.hidden=!0),B?.querySelector("#public-status")?.setAttribute("hidden","");return}if(R()){t.hidden=!0,G.setForcedOff(!0),KR();return}if(c.serverMode==="standalone"){t.hidden=!0;let d=B?.querySelector("#auth-status");d&&(d.hidden=!0);return}let n=B?.querySelector("#auth-status");n&&(n.hidden=!0);let r=GR(),o=pt()!=null;if(r&&o&&G.isEnabled()&&aa().catch(d=>{console.warn("sync: load failed",d)}),r&&o&&!G.getServerUrl()&&ja&&G.isEnabled()&&G.setServerUrl(ja),G.setForcedOff(!r),!r){t.hidden=!0;return}t.hidden=!1;let s=e??G.status;t.dataset.status=s;let i=G.persistenceDegraded;t.toggleAttribute("data-degraded",i);let a=G.proxyAuthRequired;t.toggleAttribute("data-proxy-auth",a);let l=i?"Not saving to this browser right now (storage may be full, or another tab is on a newer version). Changes that haven\u2019t synced could be lost on reload.":a?"Can\u2019t reach the sync server \u2014 the connection is being redirected to a sign-in proxy (e.g. Cloudflare Access). Reload the page to sign in again.":"";l?t.dataset.tooltip=l:delete t.dataset.tooltip;let p=t.querySelector(".sync-label");p&&(p.textContent=T2[s]??"")}G.onStatusChange(fn);var cy=!1,my=!1;async function YR(){if(!G.persistenceDegraded||my||cy)return;cy=!0;let{shown:e}=await gR();if(cy=!1,e){my=!0;return}G.persistenceDegraded&&setTimeout(YR,1500)}G.onPersistenceDegraded(e=>{fn(),e?YR():my=!1});var dy=!1,gy=!1;async function XR(){if(!G.proxyAuthRequired||gy||dy)return;dy=!0;let{shown:e,reload:t}=await hR();if(dy=!1,!e){G.proxyAuthRequired&&setTimeout(XR,1500);return}gy=!0,t&&location.reload()}G.onProxyAuthRequired(e=>{fn(),e?XR():gy=!1});function F2(e){if(e.target.closest("[data-workspace-section], [data-action]"))return;let t=e.target.closest(".file-item.workspace-item");if(!t)return;let n=t.querySelector(".file-label");if(!n||n.querySelector("input"))return;let r=t.dataset.workspaceId,o=Y().find(l=>l.id===r);if(!o)return;e.preventDefault();let s=document.createElement("input");s.type="text",s.value=o.name,s.className="workspace-rename-input",n.textContent="",n.append(s),s.focus(),s.select();let i=!1,a=async l=>{if(!i){i=!0;try{l&&await Jf(r,s.value)}catch(p){alert(`Failed to rename workspace: ${p.message}`)}finally{n.contains(s)&&(n.textContent=Y().find(p=>p.id===r)?.name??o.name),H()}}};s.addEventListener("keydown",l=>{l.key==="Enter"?(l.preventDefault(),a(!0)):l.key==="Escape"&&(l.preventDefault(),a(!1))}),s.addEventListener("blur",()=>a(!0)),s.addEventListener("click",l=>l.stopPropagation()),s.addEventListener("dblclick",l=>l.stopPropagation())}function Hu(){for(let e of B.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function JR(e){return e.dataTransfer.types.includes($y)||e.dataTransfer.types.includes(Ga)}function L2(e){let t=e.target.closest(".file-item[data-bundle-integrity]");if(t){if(t.classList.contains("bundle-missing")){e.preventDefault();return}let r=t.dataset.bundleIntegrity;e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(Ga,r),e.dataTransfer.setData(fy,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r),t.classList.add("dragging"),Du=!0,H();return}let n=e.target.closest(".file-item[data-file]");n&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData($y,n.dataset.file),e.dataTransfer.setData(fy,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),Pu=!0,H())}function O2(){for(let e of B.querySelectorAll(".dragging"))e.classList.remove("dragging");Hu(),(Pu||Du)&&(Pu=!1,Du=!1,H())}function N2(e){if(!JR(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),n=B.querySelector(".dragging")?.closest("[data-workspace-id]")?.dataset.workspaceId??null,s=t&&n&&t.dataset.workspaceId===n||!t&&!n;if(e.dataTransfer.dropEffect=s?"none":"move",Hu(),!s)if(t){let i=t.dataset.workspaceId;for(let a of B.querySelectorAll(`[data-workspace-id="${CSS.escape(i)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(Ga)?"[data-default-bundles]":"[data-default-reports]",l=B.querySelector(a);l&&l.classList.add("drag-over")}}function B2(e){B.contains(e.relatedTarget)||Hu()}async function P2(e){if(!JR(e))return;e.preventDefault(),e.stopPropagation(),Hu();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(fy)||null;if(e.dataTransfer.types.includes(Ga)){let i=e.dataTransfer.getData(Ga);if(!i)return;if(r&&r!==n&&dg(r,i)){let a=(c.bundles??[]).find(d=>d.integrity===i)?.name??i,l=Y().find(d=>d.id===r),{confirmed:p}=await fR({name:a,workspaceName:l?.name??""});if(!p)return;try{await ld(r,i)}catch(d){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,d)}}n&&await ao(i,n),r&&r!==n&&await tm(i,r),H();return}let o=e.dataTransfer.getData($y);if(!o)return;if(r&&r!==n&&ws(r,o)){let i=Y().find(l=>l.id===r),{confirmed:a}=await mR({name:o,workspaceName:i?.name??""});if(!a)return;try{await ad(r,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,l)}}n&&await io(o,n),r&&r!==n&&await qi(o,r),c.currentWorkspace&&(c.currentWorkspace===n||c.currentWorkspace===r)?await Xs(c.currentWorkspace):H()}var It=null,hy=null,Se=0,xR=0,Ys=null,_o=!0,Ro=!0,pn=!1,Va=null;async function Uu({forgetLastView:e=!0,resetNavigation:t=!0}={}){te.reset({force:t}),Va?.remove(),Va=null;let n=++Se;if(Ro=!0,pn=!1,Nk(),Jm(),xo(),zu(),sd(c.serverMode!=="e2e"),G.setForcedOff(!0),G.setProtocolLocked(c.serverMode!=="e2e"||!!It),MR({forgetLastView:e}),c.triage.clear(),R()){let r=Mo();if(Qm()&&(await r,n!==Se))return}else{if(c.managedSession=null,c.managedTeams=[],await Ti(),n!==Se||(await ta(),n!==Se))return;Kf()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),Wu(),qR(),fn(G.status),O(),await H()}async function nJ(e){if(e!==void 0&&!Xw(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${Yw.join(", ")}.`);if(await Mt(),e===void 0&&(It||R()))return;let t=Se,n=e===void 0?null:await D();t===Se&&(It??={serverMode:c.serverMode,serverModeConfig:c.serverModeConfig,serverModeSelection:c.serverModeSelection,localMode:c.localMode,managed:c.managed},n&&n.setPreviewRole(e),c.serverMode="managed",Mn(!1),c.managedSession=null,c.managedTeams=[],await Uu({forgetLastView:!1}))}async function D2(){let e=It,t=hy;It=null,hy=null,Ok(),Object.assign(c,e),await Uu({forgetLastView:!1}),t&&So(t)}function So(e,{runtime:t=!0}={}){if(It){hy=e;return}Bu(!1);let n=pt()!=null,r=R(),o=c.serverMode;vn()&&e.managed&&(c.serverModeSelection="managed"),mc(e.mode),vn()&&e.managed&&Mn(!1);let s=o!==c.serverMode;c.managed=e.managed;let i=t&&c.githubNewIssueLabels!==(e.githubNewIssueLabels??"");if(t&&(c.githubNewIssueLabels=e.githubNewIssueLabels??""),t&&(c.deepviewScanServer=e.mode==="managed"?null:e.deepviewScanServer??null),Wu(),sd(c.serverMode!=="e2e"),G.setProtocolLocked(c.serverMode!=="e2e"),Wp(e),r!==R()){Uu({forgetLastView:!1,resetNavigation:n&&!vn()&&!Yo(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}fn(G.status),s&&c.serverMode==="e2e"&&GR()&&G.isEnabled()&&aa().then(a=>{if(!(!a||c.serverMode!=="e2e"))for(let l of a.triageSync.openSessions)a.openWorkspace(l.workspaceId)}).catch(a=>console.warn("sync: resume failed",a)),s&&H(),i&&O({animate:!1}),R()&&Mo()}function Mo(){if(Ys?.generation===Se)return Ys.promise;_o=!0;let e={generation:Se,promise:null};return Ys=e,e.promise=z2().finally(()=>{Ys===e&&(Ys=null,H())}),e.promise}async function z2(){let e=Se,t=++xR,n=()=>e===Se&&t===xR&&R();try{let r=c.managedSession,o=await Wk({fallback:r});if(!n()||(c.managedSession=o,_o=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&(Ro=!0),H(),Bk(o),r&&(r.id!==o?.id||r.role!==o?.role)?(c.managedTeams=[],c.bundles=[],xo(),zu(),te.reset(),At({history:!1})):Object.hasOwn(fi,c.currentView)&&Ir(c.currentView)&&O({animate:!1}),KR(),SR(),!await Vu(n)))return;document.querySelector("base")||(Va=document.createElement("base"),Va.href="/",document.head.prepend(Va)),te.active&&Object.hasOwn(fi,c.currentView)&&!Ir(c.currentView)?await te.navigate({view:Ir("manage")?"manage":"home"},{replace:!0}):o&&await te.start(V2,{onCancel:U2})}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(_o||Ro)&&(_o=!1,Ro=!1,H())}}z_((e,t,n)=>Vu(e,{strict:!0,signal:t,revision:n}));var W2=L_(Hk),uy=0;async function Vu(e,{strict:t=!1,signal:n=Le(),reuse:r=!1,revision:o=null}={}){let s=Se,i=c.managedSession,a=await W2({generation:s,session:i,signal:n,reuse:r,revision:o}),l=a??(t?null:c.managedTeams);if(n.aborted||l===null||!e()||s!==Se||!R())return!1;let p=c.managedTeams.find(h=>h.id===c.currentManagedTeam)?.name,d=Pk(l);c.managedTeams=l;let f=a===null?uy:++uy;Ro=!1;let m=wr(c);if(a!==null&&m&&!pn){let h=me(),b=()=>e()&&!n.aborted&&!pn&&f===uy&&h===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&R()&&wr(c)===m,y;try{y=await E_(c,l,{fetchCatalog:()=>eg({signal:AbortSignal.any([n,Le()])}),isCurrent:b,render:()=>O({animate:!1}),replaceRoute:w=>te.replaceRoute(w)})}catch(w){return b()?(w.name!=="AbortError"&&Ge(`Couldn't refresh bundle access: ${w.message}`,{kind:"error"}),H(),!1):e()}if(!b())return e();if(!y){Co=null;let w=At({history:!1}),v=me();return await w,v===me()&&s===Se&&e()&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&te.replaceRoute({view:"home"}),e()}}if(A_(c,l,d)){let h=l.find(x=>x.id===c.currentManagedTeam),y=h&&(c.currentManagedReport===null||h.reports.some(x=>x.id===c.currentManagedReport))?Xe({view:c.currentView==="links"?"findings":c.currentView,teamId:h.id,reportId:c.currentManagedReport},l):null;Co=null;let w=At({history:!1}),v=me();if(await w,t)return v===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&R()&&await te.navigate(y??{view:"home"},{replace:!0}),e();if(!e())return!1}if(!pn&&["workspace-reports","workspace-bundles"].includes(c.currentView)&&!l.some(h=>h.id===c.currentManagedTeam)){let h=At({history:!1}),b=me();return await h,b===me()&&s===Se&&e()&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&te.replaceRoute({view:"home"}),e()}return!pn&&(c.currentWorkspace||c.bundleDetails?.npm||p!==l.find(h=>h.id===c.currentManagedTeam)?.name)&&O({animate:!1}),H(),!(a!==null&&!pn&&!await vy(n))}var H2=new Set(["admin-users","manage-repos","manage-repo-risk","manage-teams","manage-import","manage-deduplication"]),Co=null;function Ir(e){let t=c.managedSession?.role;return e==="manage-links"&&!c.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!H2.has(e)||t==="admin")}var by=0;function U2(){++by,pn=!1,Oe();let e=Se;Vu(()=>e===Se&&R(),{reuse:!0})}async function V2(e,t){let n=++by;pn=!0;try{return await j2(e,t)}finally{n===by&&(pn=!1,H())}}async function j2(e,t){let n=Co===me()?Co:null;if(Oe(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&!await Vu(t,{reuse:!0}))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!Ir("manage-bundles")||(r=await eg(),!t()||!R()))||(e=Kw(e,c.managedTeams,r),!e))return!1;let o=n!==null&&Co===n&&c.currentManagedTeam===e.teamId&&c.currentManagedReport===e.reportId;if(!t()||!R()||e.view!=="home"&&(!c.managedSession||c.managedSession.role==="none"))return!1;if(e.finding){let{revealFinding:i}=await import("./chunk-XOCAPDCM.js");if(!t())return!1;let a=await i({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(l,p)=>Ar(l,p,{history:!1}),isCurrent:t});return t()?a.ok?(Co=me(),Rr(),Xe({view:"findings",teamId:c.currentManagedTeam,reportId:c.currentManagedReport,finding:{id:e.finding.id}},c.managedTeams)):(a.reason&&Ge(a.reason),!1):!1}if(e.view==="workspace-reports"||e.view==="workspace-bundles")return _R(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let i=e.teamId==null?r.map(yr):Os(c.managedTeams);if(!await F_(e,i,t,H))return!1;let{compareId:a,compareMode:l,...p}=e;return Xe({...p,bundleTab:c.bundleDetailsTab,...Xg(c)},c.managedTeams,r)}if(e.view==="home")return At({history:!1});if(e.view==="npm")return H1(e,t,H);if(e.view==="reviews")return c.managedSession.publicShare?!1:(Pt(),c.currentView="reviews",c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1}),H(),e);if(e.view==="manage-deduplication"&&e.linkId)return Ir(e.view)&&await CR(e.linkId);if(Object.hasOwn(fi,e.view))return To(e.view,{...e,history:!1});let s=c.managedTeams.find(i=>i.id===e.teamId);return!s||!o&&!await Ar(s,e.reportId,{history:!1})||!t()?!1:(c.currentView!==e.view&&Pt(),c.currentView=c.currentLinks?"links":e.view,document.body.classList.remove("report-fullscreen"),O({animate:!1}),Co=me(),Rr(),H(),document.querySelector("#main-content")?.scrollTo({top:0}),Xe({...e,view:c.currentView==="links"?"findings":c.currentView},c.managedTeams))}document.addEventListener("managed-bundle-open",e=>{if(R()&&typeof e.detail?.id=="string"){let t=yr(e.detail),n=c.managedTeams,r=n.find(o=>o.id===c.currentManagedTeam&&o.bundles?.some(s=>s.id===t.managedId))??n.find(o=>o.bundles?.some(s=>s.id===t.managedId));te.navigate(vr(n,t,r?.id,c.currentView==="bundles"?c.bundleDetailsTab:"overview"))}});document.addEventListener("managed-import-complete",()=>{Mo()});document.addEventListener("managed-feed-closed",()=>{_o=!0,xo(),zu(),At({history:!1}).then(()=>Mo()),Ge("Workspace access changed. Refreshing your session.")});async function To(e,t={}){if(t.history!==!1&&R()&&(te.active||await Mo(),te.active))return te.navigate({view:e,...t.actor?{actor:t.actor}:{},...t.bundleId?{bundleId:t.bundleId}:{},...["link","dependencies"].includes(t.scanMode)?{scanMode:t.scanMode}:{},...t.linkId?{linkId:t.linkId}:{}});if(!Object.hasOwn(fi,e)||!R()||!Ir(e))return!1;let n=Oe(),r=Se;try{let o=await D();e==="manage-import"&&Ir(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(`${e}: managed bundle load failed:`,o),!1}return r!==Se||n!==me()||!R()||!Ir(e)?!1:(c.currentView=e,c.scanSelection=e==="manage-scans"?t.scanMode==="link"?{mode:"report",reportMode:"link"}:t.bundleId?{bundleId:t.bundleId,...t.scanMode==="dependencies"?{mode:"dependencies"}:{}}:null:null,c.bundleCreationRepoId=e==="manage-bundles"?t.createRepoId??null:null,O({animate:!1}),H(),Mo(),document.querySelector("#main-content")?.scrollTo({top:0}),e==="manage-history"&&document.dispatchEvent(new CustomEvent("managed-history-filter",{detail:{actor:t.actor??""},bubbles:!0,composed:!0})),!0)}document.addEventListener("managed-notice",e=>Ge(e.detail.message,{kind:"error"}));document.addEventListener("managed-admin-navigate",e=>{let t=e.detail?.view,n=e.detail?.actor;typeof t=="string"&&To(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})});var G2;function Mt(){return G2??=K2().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function K2(){let e=pt();if(e){mc(e.mode),c.managed=e.managed,Vl().then(o=>{if(o&&o!=="standalone")return So(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Bu(!ki());let t=Vl(),n=await zp(t,ki()?0:3e3),r=pt();if(r)return n&&n!=="standalone"?So(n):So(r,{runtime:!1});if(n&&n!=="standalone")return So(n);n==="standalone"&&Ul(),c.serverMode="standalone",c.serverModeConfig=null,c.serverModeSelection=null,Mn(n===null),sd(!0),Bu(!1),fn(G.status),H(),n===null&&t.then(o=>{let s=pt(),i=o&&o!=="standalone"?o:s??o;if(i==="standalone"){if(Ul(),It){It.serverMode="standalone",It.serverModeConfig=null,It.serverModeSelection=null,It.localMode=!1;return}return Mn(!1),fn(G.status),H()}if(i)return So(i,{runtime:i!==s})}).catch(o=>console.warn("server mode probe:",o))}function q2(){let e=B?.querySelector("#user-menu"),t=B?.querySelector("#auth-status");!e||!t||e.addEventListener("beforetoggle",n=>{if(n.newState!=="open")return;let r=t.getBoundingClientRect();e.style.left=`${Math.round(r.left)}px`,e.style.bottom=`${Math.round(window.innerHeight-r.top+6)}px`,e.style.top="auto",e.style.right="auto"})}function Y2(e){Er=e,B=e.renderRoot,py=B.querySelector("#file-list"),G_(B.querySelector("#encryption-toggle")),Q_(B.querySelector("#storage-status")),B.addEventListener("click",$R),B.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),$R(t))}),B.addEventListener("dblclick",F2),B.addEventListener("dragstart",L2),B.addEventListener("dragend",O2),B.addEventListener("dragover",N2),B.addEventListener("dragleave",B2),B.addEventListener("drop",P2),vi(B,R2),B.querySelector("#sidebar-search-input")?.addEventListener("input",M2),q2(),fn(G.status),pt()||Bu(!ki()),H(),G.onServerInfo(t=>{if(c.serverMode!=="e2e")return;let n=pt(),r=n&&{...n,...c.deepviewScanServer?{deepviewScanServer:c.deepviewScanServer}:{}};return So(Dp(r,t))}),Mt(),c.serverMode==="managed"&&Mo()}var yy=class extends Et{static styles=[P(U_),P(H_)];render(){return u`<div class="sidebar-header"><h2 class="brand"><button class="brand-button" type="button" data-action="go-home"><span class="brand-name">Triage</span></button> <span class="brand-tag" data-action="toggle-client-mode">${Zt()}</span></h2><button id="encryption-toggle" type="button" hidden></button> <button id="sidebar-toggle" type="button" aria-label="toggle sidebar"><svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M2 4h12v1.5H2zM2 7.25h12v1.5H2zM2 10.5h12V12H2z"/></svg></button></div><button id="sidebar-home" class="rail-item" type="button" data-action="go-home" aria-label="Home" data-tooltip="Home"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2.5 7.5 8 3l5.5 4.5M4 6.5V13h3V9.5h2V13h3V6.5"/></svg></button><div class="sidebar-search"><svg class="sidebar-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg> <input id="sidebar-search-input" type="search" placeholder="Search reports…" aria-label="Search reports" autocomplete="off"><sidebar-view-button kind="packages"></sidebar-view-button><sidebar-view-button kind="repositories"></sidebar-view-button></div><ul id="file-list"></ul><ul id="sidebar-rail"></ul><button id="storage-status" type="button" hidden><span class="storage-dot" aria-hidden="true"></span> <span class="storage-label"></span></button><div id="view-as-status" role="status" hidden></div><div class="sidebar-actions"><sidebar-delete-current></sidebar-delete-current><button id="sync-status" type="button" data-status="off"><span class="sync-dot" aria-hidden="true"></span> <span class="sync-label">Sync off</span></button> <button id="auth-status" type="button" hidden></button> <span id="public-status" hidden>Public access link · Read only</span> <button id="manage-status" type="button" hidden data-action="manage" aria-label="Manage">${W(pl)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){Y2(this)}};customElements.define("app-sidebar",yy);async function ZR(e){let t=await Sl(e),n=await Am(t);if(n.kind==="reports")return{kind:"reports",reports:n.reports};let r;if(n.kind==="encrypted"){if(r=await Xc({tryPassword:s=>Cl(t,s)}),!r)return null}else r=_l(n.text);let o=await Im(r,{conflictResolver:async(s,i)=>{try{return await nd(s,i,{title:"Triage conflicts on import",intro:"disagree with your local triage on",trailingNote:"Reports and non-conflicting triage were already merged; pick which side to keep for these disagreements.",importedSideLabel:"Apply imported"})}catch{let a=s.length;return alert(`Imported ${e.name}. Kept your local triage on ${a} conflicting entr${a===1?"y":"ies"} because another dialog is open \u2014 re-drop the file to pick again.`),null}}});return(c.currentFile||c.currentWorkspace)&&O(),{kind:"workspace",workspace:o}}var ky=class extends N{static styles=[...N.styles,P(ot)];static properties={workspaceId:{type:String},items:{type:Array},_running:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._running=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="download"]')?.focus()}_onClose=()=>this._finish({downloaded:[],failed:[]});_onCancel=()=>this._finish({downloaded:[],failed:[]});_fail(t,n,r,o){t.push({kind:r,identifier:n.identifier,reason:o}),this._errors=[...this._errors,{label:cr(n),reason:o}]}_onDownload=async()=>{if(this._running)return;this._running=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{if(r.kind==="bundle"){let s=await P0(this.workspaceId,r.identifier);if(!s.ok){this._fail(n,r,"bundle",s.reason??"unknown");continue}await ao(r.identifier,this.workspaceId),t.push({kind:"bundle",identifier:r.identifier});continue}let o=await B0(this.workspaceId,r.identifier);if(!o||!o.ok){this._fail(n,r,"report",o?.reason??"sync is not available");continue}t.push({kind:"report",identifier:r.identifier})}catch(o){this._fail(n,r,r.kind,o?.message??String(o))}if(this._running=!1,this._done=!0,t.some(r=>r.kind==="report"))try{c.currentWorkspace===this.workspaceId&&await Xs(this.workspaceId)}catch{}n.length===0&&this._finish({downloaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Qc(this.items),o=n?u`Download <strong>"${cr(this.items[0])}"</strong> from the workspace's remote inventory?`:u`Download <strong>${t}</strong> remote ${r} into this workspace?`,s=n?g:ed(this.items),i=this._running?n?"Downloading\u2026":`Downloading ${t} ${r}\u2026`:n?"Download":`Download ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Download from remote</h3></header><p class="lwd-body">${o}</p>${s} ${td(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-download-dialog",ky);function ju({workspaceId:e,items:t}={}){return re("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}function Gu(e,t,n=()=>null){if(!e.currentWorkspace)return null;if(e.currentManagedTeam){let i=e.managedTeams.find(a=>a.id===e.currentManagedTeam);return i?{id:i.id,scope:"team",title:`Team: ${i.name}`,reports:(i.reports??[]).filter(a=>a.analyzer!=="links").map(a=>({...a,managedId:a.id,name:a.filename,hidden:a.visible===!1,available:!0})),bundles:(i.bundles??[]).map(a=>({...yr(a),hidden:a.visible===!1,available:!0}))}:null}let r=t.find(i=>i.id===e.currentWorkspace);if(!r)return null;let o=new Map(e.bundles.map(i=>[i.integrity,i])),s=new Set(e.storedFiles??[]);return{id:r.id,scope:"workspace",title:`Workspace: ${r.name}`,reports:[...new Set(r.reports??[])].filter(i=>n(i)!=="links").map(i=>({name:i,available:s.has(i)})),bundles:[...new Set(r.bundles??[])].map(i=>{let a=o.get(i);return a?{...a,available:!0}:{integrity:i,name:`${i.slice(0,24)}\u2026`,available:!1}})}}function xy(e,t){return t==="findings"?e.title:u`<button type="button" class="workspace-title-link" data-action="workspace-findings">${e.title}</button>`}function Xa(e,t,n){if(!e)return g;let r=e[t].length;if(t==="bundles"&&r===0)return g;let o=n===`workspace-${t}`;return u`<button type="button" class="${`files-toggle-btn${o?" active":""}`}" data-action="${`workspace-${t}`}" aria-pressed="${String(o)}">${`${r} ${r===1?t.slice(0,-1):t}`}</button>`}function Ja(e){return new Set(e.flatMap(t=>t?.source==="links"?[]:Object.keys(t?.tree??{}))).size}function Sy(e,t){if(!(e>1))return g;let n=t==="files";return u`<button type="button" class="${`files-toggle-btn${n?" active":""}`}" data-action="toggle-files" aria-pressed="${String(n)}">${`${e} files`}</button>`}function QR(e,t,n=0){if(!e)return u`<p class="workspace-content-empty">This workspace is no longer available.</p>`;let r=`workspace-${t}`,o=e[t];return u`<section class="workspace-content-view"><header class="page-head"><div class="page-title"><h1>${xy(e,r)}${Xa(e,"reports",r)}${Xa(e,"bundles",r)}${Sy(n,r)}</h1></div></header>${o.length>0?u`<ul class="workspace-content-list">${o.map(s=>{let i=[s.kind==="stasis"?"Stasis":s.kind==="sourcemap"?"Sourcemap":null,Number.isFinite(s.size)?ge(s.size):null,Number.isFinite(s.summary?.files)?`${s.summary.files.toLocaleString()} files`:null,Number.isFinite(s.summary?.lines)?`${s.summary.lines.toLocaleString()} LoC`:null].filter(Boolean).join(" \xB7 "),a=s.repoFullName?`${s.repoFullName}${s.repoDirectory?`/${s.repoDirectory}`:""}`:null;return u`<li class="${s.hidden?"workspace-content-hidden":""}"><button type="button" class="workspace-content-row" data-workspace-report="${t==="reports"?s.managedId??s.name:g}" data-workspace-bundle="${t==="bundles"?s.managedId??s.integrity:g}" ?disabled="${!s.available}"><svg class="workspace-content-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="${t==="bundles"?"m12 3 9 5v8l-9 5-9-5V8zM3 8l9 5 9-5M12 13v8M7.5 5.5l9 5":"M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9zM14 3v6h6M8 13h8M8 17h5"}/"></path></svg> <span class="workspace-content-label"><span class="workspace-content-name">${s.name}${s.hidden?u`<span class="workspace-content-visibility">Hidden</span>`:g}</span> ${a?u`<span class="workspace-content-repo">${a}</span>`:g} </span><span class="workspace-content-stats">${s.available?i:"Not available locally"}</span> ${s.available?u`<span class="workspace-content-arrow" aria-hidden="true">→</span>`:g}</button></li>`})}</ul>`:u`<p class="workspace-content-empty">No ${t} in this ${e.scope}.</p>`}</section>`}async function eM(e,{fetchReports:t,signal:n,isCurrent:r,render:o}){let s=e.currentView;if(!["workspace-reports","workspace-bundles"].includes(s)||!r()||n.aborted)return!0;let i=e.managedTeams.find(d=>d.id===e.currentManagedTeam);if(!i)return!0;let a=e.managedSession,l=()=>!n.aborted&&r()&&e.currentView===s&&e.managedSession===a&&e.currentManagedTeam===i.id&&e.managedTeams.find(d=>d.id===i.id)===i,p=await new Promise(d=>{let f=h=>{n.removeEventListener("abort",m),d(h)},m=()=>f(null);n.addEventListener("abort",m,{once:!0}),Promise.resolve().then(()=>n.aborted?null:t(i.id,{signal:n})).then(f,()=>f(null))});return l()?(e.workspaceContentFileCount=p?Ja(p.map(d=>d.data)):0,o(),p!==null):!0}var Io="deepview.lastFile";function wy(e,t="overview",{push:n=!1}={}){if(R()){let o=c.bundles.find(i=>i.integrity===e),s=o?.npm?Ea(o,t,$r(c,t)):vr(c.managedTeams,o,c.currentManagedTeam,t,$r(c,t),c.bundles);n?te.pushRoute(s):te.replaceRoute(s);return}let r=t&&t!=="overview"&&xp.has(t)?` ${t}`:"";Te(Io,`b:${e}${r}`).catch(()=>{})}var ne=e=>e!==me();function X2(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Za(e){return await X2(),e!==null&&ne(e)?!1:(O(),Pg(c.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!ne(e)).catch(()=>{}),!0)}function qu(){ee.selected=null,ee.focusedPkg=null,ee.layoutCache=null,ee.solo=null,ee.hidden.clear(),ee.pathFilter="",Pt()}function Js(e){for(let t of G.openSessions)t&&!e.has(t.workspaceId)&&(G.closeSession(t.workspaceId),pg(t.workspaceId))}function Cy(){be.classList.remove("active"),be.replaceChildren(),ut.classList.remove("hidden"),document.title="DeepView"}function tM(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function _y(e){let t=nM(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function nM(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function Ku({name:e,content:t,existingNames:n}){if(!n.has(e))return await Jt(e,t),n.add(e),{name:e,content:t};let r;try{r=await fe(e)}catch(l){if(!tM(l))throw l;return await Jt(e,t),n.add(e),{name:e,content:t}}if(r===t)return{name:e,content:t};let s=Y().filter(l=>Array.isArray(l.reports)&&l.reports.includes(e)).filter(l=>ws(l.id,e)),i=await I_({name:e,workspaceNames:s.map(l=>l.name),existingNames:n});if(i.action==="cancel")return null;if(i.action==="rename"){let l=i.newName;return await Jt(l,t),n.add(l),{name:l,content:t}}let a;if(s.length>0)try{a=await D0(e)}catch(l){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,l)}try{await Jt(e,t),s.length>0&&await Z2(e,s)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function J2(e,t){let n=typeof t?.github=="string"?t.github:"";if(n)try{await $f(e,n)}catch(r){console.warn(`Import: failed to adopt the repository "${n}" for "${e}":`,r)}}async function Z2(e,t){let n;try{n=await Cn(e)}catch(r){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,r);return}for(let r of t)try{await ca(r.id);let o=await id(r.id,e,n);o&&o.ok===!1&&console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}): ${o.reason??"unknown"}`)}catch(o){console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}):`,o)}}async function Ry(e){if(e=[...e],e.length===0||(await Mt(),R())||(await Nu(),R()))return;let t=null,n=null,r=new Set,o=new Set(await ce()),s=[];for(let i of e)try{let a=nM(i.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let f=await ZR(i);if(f?.kind==="reports")for(let m of f.reports){if(typeof m?.name!="string"||!m.name||typeof m?.content!="string")continue;let h=Ve(m.content);if(!h.recognized){s.push(m.name);continue}let b=await Ku({name:m.name,content:m.content,existingNames:o});b&&(Ue(b.name,h.count,h.source),await J2(b.name,m.repo),t={name:b.name,content:b.content})}try{let m=await ce();o.clear();for(let h of m)o.add(h)}catch(m){console.warn("Import: failed to refresh existingNames after workspace import:",m)}continue}if(_y(i.name)){let f=new Uint8Array(await i.arrayBuffer()),{integrity:m}=await Qr(i.name,f);n=m,r.add(m);continue}let p=await i.text(),d=tv(p,i.name);if(d)for(let f of d){let{count:m,source:h}=Ve(f.content),b=await Ku({...f,existingNames:o});b&&(Ue(b.name,m,h),t={name:b.name,content:b.content})}else if(Pw(p,a)==="codex"){let f=Bw(p);for(let{displayName:m,data:h}of f){let b=m.replaceAll("/","__")+".codex",y=JSON.stringify(h),{count:w,source:v}=Ve(y),x=await Ku({name:b,content:y,existingNames:o});x&&(Ue(x.name,w,v),t={name:x.name,content:x.content})}}else{let f=Ve(p);if(!f.recognized)throw new Error("not a recognized DeepView, DeepSec, Piolium, Claude Security, Codex, or Markdown (generic) report, and not a links file");let m=await Ku({name:i.name,content:p,existingNames:o});if(!m)continue;Ue(m.name,f.count,f.source),t={name:m.name,content:m.content}}}catch(a){alert(`Failed to load ${i.name}: ${a.message}`)}if(s.length>0){let i=s.length;alert(`Skipped ${i} report${i===1?"":"s"} no parser recognised: ${s.join(", ")}`)}await H(),t?await Ya(t.name,t.content):n&&(hr(n),wy(n,c.bundleDetailsTab),O(),await H(),Cd(n)),Pg(r).catch(()=>{})}async function Ya(e,t,{workspaceId:n}={}){if(R())return;let r=Oe();c.currentManagedTeam=null,c.currentManagedReport=null,c.currentReportWorkspace=Ms(e,n);let o=new Set(Y().filter(i=>Array.isArray(i.reports)&&i.reports.includes(e)).map(i=>i.id));if(Js(o),c.reports=[],fr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=e,c.currentWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),c.repoUrl=Ze(e),c.repoEditing=!1,qu(),Te(Io,Fc(e,c.currentReportWorkspace)).catch(()=>{}),t===void 0){try{t=await fe(e)}catch(i){if(ne(r))return;if(i&&i.message?.includes("vault locked")){if(await Fu()&&!ne(r)){await Ya(e);return}ne(r)||(c.currentFile=null,await H());return}if(tM(i)){let a=Y().find(l=>Array.isArray(l.reports)&&l.reports.includes(e)&&ws(l.id,e));if(a)try{if(await ca(a.id),ne(r))return;let l=await ju({workspaceId:a.id,items:[{kind:"report",identifier:e}]});if(ne(r))return;if(l?.downloaded?.some(p=>p.kind==="report"&&p.identifier===e)){await Ya(e);return}}catch(l){if(console.warn(`Re-download prompt for missing "${e}" failed:`,l),ne(r))return}ne(r)||(c.currentFile=null,await H());return}alert(`Failed to read ${e}: ${i.message}`),c.currentFile=null,await H();return}if(ne(r))return}let s=qn(t);if(s?(c.currentLinks={name:e,...s},c.currentView="links",O()):await Yu(e,t,r),!ne(r)){for(let i of o)G.openSession(i),G.refreshSession(i),ca(i);return await H(),!0}}function CR(e){return c.managedSession?.role!=="admin"?!1:Ar({id:null,reports:[{id:e}]},e,{history:!1,deduplication:!0})}function vy(e=Le()){let t=Le();return eM(c,{fetchReports:ng,signal:AbortSignal.any([e,t]),isCurrent:()=>R()&&Le()===t,render:()=>O({animate:!1})})}async function _R(e,t,{history:n=!0}={}){if(t!=="reports"&&t!=="bundles")return!1;let r=`workspace-${t}`,o=R(),s=o?c.managedTeams.find(p=>p.id===e):Y().find(p=>p.id===e);if(!s)return!1;if(o&&n&&te.active)return te.navigate(Xe({view:r,teamId:e},c.managedTeams));let i=o?`managed-team:${e}`:e,a=c.currentWorkspace===i?["workspace-reports","workspace-bundles"].includes(c.currentView)?c.workspaceContentFileCount:Ja(c.reports):0,l=Oe();if(Js(new Set),el({forgetLastView:!1}),c.currentWorkspace=i,c.workspaceContentFileCount=a,c.currentManagedTeam=o?e:null,c.currentView=r,o&&(c.bundles=Os(c.managedTeams)),be.classList.add("active"),ut.classList.add("hidden"),document.body.classList.remove("report-fullscreen"),O({animate:!1}),document.querySelector("#main-content")?.scrollTo({top:0}),o||Te(Io,`${t==="reports"?"wrs":"wbs"}:${e}`).catch(()=>{}),await H(),ne(l))return!1;if(O({animate:!1}),o)await vy();else{let p=await Promise.all((s.reports??[]).map(async d=>{try{return wp(await fe(d)).data}catch{return null}}));if(ne(l))return!1;c.workspaceContentFileCount=Ja(p),O({animate:!1})}return!ne(l)}async function Ar(e,t=null,{history:n=!0,deduplication:r=!1}={}){if(!R()||!e||!Array.isArray(e.reports))return!1;if(n&&te.active)return te.navigate(Xe({view:"findings",teamId:e.id,reportId:t},c.managedTeams));if(t!==null&&!e.reports.some(m=>m.id===t))return!1;let o=Oe(),s=e.reports.find(m=>m.id===t&&m.visible===!1),i=Le(),a;try{a=r?await(await D()).fetchManagedLinkWorkspace(t,{signal:i}):await ng(e.id,{reportId:s?.id??null})}catch(m){return ne(o)||Ge(m.message||"Could not load link report."),!1}if(ne(o))return!1;if(Dk(),a===null||t!==null&&!a.some(m=>m.id===t))return Ge("Could not load all team reports. Please try again."),!1;let l=a.find(m=>m.id===t&&m.data.source==="links"&&Array.isArray(m.data.links)),p=a.filter(m=>t===null||l||m.id===t),d=p.filter(m=>m.data.source!=="links"||!Array.isArray(m.data.links));Js(new Set);let f=document.createElement("p");f.setAttribute("role","status"),f.textContent="Loading report triage\u2026",be.replaceChildren(f),be.classList.add("active"),ut.classList.add("hidden"),c.currentView="findings",c.reports=[],fr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=t===null?null:a.find(m=>m.id===t).filename,c.currentWorkspace=t===null?`managed-team:${e.id}`:null,c.currentManagedTeam=e.id,c.currentManagedReport=t,U$(e.id,a),c.managedReports=p.map(m=>({id:m.id,filename:m.filename})),c.managedComments.clear(),c.managedIssues.clear(),c.managedReport=t===null?null:c.managedReports[0]??null,c.currentReportWorkspace=null,c.currentLinks=null,c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.repoUrl="",c.repoEditing=!1,qu();for(let m of d)if(await Yu(m.filename,m.data,o,{renderView:!1,managedReportId:m.id,managedRepo:m.repo}),ne(o))return!1;if(d.length>0){let{createManagedAnnotationRead:m,hydrateManagedReportTriage:h}=await import("./chunk-OSIMGFUF.js");if(ne(o))return!1;let b=async w=>{let v=m(c.currentManagedTeam,w);return(await Promise.all(d.flatMap($=>[h($.id,{renderView:!1,signal:w,readAnnotations:v}),Fd($.id,{signal:w,readAnnotations:v})]))).every(Boolean)&&!w.aborted&&!ne(o)},y=r?await b(Le()):await Rr({hydrate:b});if(ne(o))return!1;if(!y)return await At({history:!1}),Ge("Could not load report annotations. Open the team or report again to retry."),!1}if(l){if(c.currentView="links",c.currentLinks={name:l.filename,groups:l.data.links,skipped:0,...r?{managedId:t}:{}},!await Za(o))return!1}else if(d.length===0)Xu();else if(ua(go()),!await Za(o))return!1;return Rr(),await H(),!0}async function Xs(e){if(R())return;c.currentManagedTeam=null,c.currentManagedReport=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear();let t=Y().find(f=>f.id===e);if(!t)return;let n=Oe();Js(new Set([e])),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),dt("workspace",e),c.reports=[],fr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=null,c.currentWorkspace=e,c.currentReportWorkspace=null,c.currentLinks=null,c.repoUrl="",c.repoEditing=!1,qu(),Te(Io,`ws:${e}`).catch(()=>{}),t.reports.length===0&&Cy();let r=await ra(t);if(ne(n))return;let o=!0,s=t.reports.map(f=>fe(f).catch(()=>null)),i=0;for(let f=0;f<t.reports.length;f++){let m=await s[f];if(ne(n))return;if(m===null){o=!1;continue}if(!qn(m)&&(await Yu(t.reports[f],m,n,{renderView:!1})?i++:o=!1,ne(n)))return}i===0&&t.reports.length>0&&Cy(),o&&co(t)?.appMode&&(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Qa());let a=c.reports.slice();eR(t,a,r,{complete:o,isCurrent:()=>!ne(n)&&c.currentWorkspace===e&&["findings","files"].includes(c.currentView)});let l=H().catch(f=>console.warn("workspace sidebar:",f));if(i>0){if(ua(go()),!await Za(n))return}else Xu();let p=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],d=p.map(f=>c[f]);nR(t,a,r,{complete:o,isCurrent:()=>!ne(n),onReady:async f=>{!f.appMode||c.currentWorkspace!==e||!["findings","files"].includes(c.currentView)||p.some((m,h)=>c[m]!==d[h])||(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Qa(),ua(go()),await Za(n))}}).catch(f=>console.warn("workspace App metadata:",f)),G.openSession(e),G.refreshSession(e),ca(e),await l}async function RR({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!c.currentFile)return;let n=Oe(),r=c.currentFile;ls(r),eo(r,"");for(let o of t)try{let s=await ad(o,r);if(ne(n))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete '${r}' from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete '${r}' from workspace ${o} remote:`,s)}if(await Qo(r),!ne(n)&&(await Ki(r,null),!ne(n))){if(e==="wipe"){try{await Nc()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(ne(n))return}ne(n)||(el(),await H())}}function el({forgetLastView:e=!0}={}){sS(),c.currentManagedTeam=null,c.currentManagedReport=null,c.currentFile=null,c.currentWorkspace=null,c.workspaceContentFileCount=0,c.currentReportWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.bundleDetails=null,c.bundleDetailsTab="overview",c.bundleSourceFile=null,c.bundleSourceFindingIdx=null,c.selectedPackage=null,c.selectedPackageVersion=null,c.packageDetailsTab="overview",c.packageSlideTriage=null,c.packageSlideTransient=!1,c.expandedPackages.clear(),c.selectedRepository=null,c.repositoryDetailsTab="overview",c.repositorySlideTriage=null,c.repositorySlideTransient=!1,c.filesSelectedFile=null,c.tableSelectedGid=null,c.kanbanPopoverGid=null,c.kanbanExpandedColumn=null,c.focusGid=null,c.activeTabByGroup.clear(),c.reports=[],fr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.repoUrl="",c.repoEditing=!1,c.shownTriage=null,c.currentView="findings",qu(),e&&nr(Io),Cy()}function MR(e){Oe(),Js(new Set),el(e)}async function At({history:e=!0}={}){return e&&R()&&te.active?te.navigate({view:"home"}):(Oe(),Js(new Set),el({forgetLastView:!R()}),await H(),!0)}async function TR({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!c.selectedBundle)return;let t=Oe(),n=c.selectedBundle;for(let o of e)try{let s=await ld(o,n);if(ne(t))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete bundle from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete bundle from workspace ${o} remote:`,s)}if(await af(n),ne(t)||(await em(n,null),ne(t)))return;c.selectedBundle=null,c.selectedBundleWorkspace=null,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleSourceFindingIdx=null;let r=ve(Io);typeof r=="string"&&(r===`b:${n}`||r.startsWith(`b:${n} `))&&nr(Io),Of(n),c.bundles=await Je(),!ne(t)&&(O(),await H())}async function IR(e,t="detach",{triage:n="keep"}={}){let r=Y().find(a=>a.id===e);if(!r)return;Oe();let o=Array.isArray(r.reports)?[...r.reports]:[];if(G.closeSession(e),pg(e),t==="delete"){for(let a of o){try{await Qo(a)}catch{}ls(a),eo(a,"")}if(n==="wipe")try{await Nc()}catch(a){console.warn("Skipped orphan-triage GC:",a)}}let s=c.currentWorkspace===e,i=t==="delete"&&c.currentFile!=null&&o.includes(c.currentFile);(s||i)&&el(),await Xf(e),await H()}async function Yu(e,t,n=null,{renderView:r=!0,managedReportId:o=null,managedRepo:s=null}={}){let i=()=>n!==null&&ne(n);try{if(await Promise.all([dt("report",e),dt("workspace",c.currentWorkspace||c.currentReportWorkspace)]),i()||(await lo(),i()))return;let{data:a,reason:l}=o===null?R()?qw(t,e):wp(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(l);let p=c.reports.length===0,d=yn(a)??[],f=d.flatMap(hd);if(await zw(f),i())return;let m=new Set(f.filter(Wv).map($=>$.source??a.source??null)),h=s??a?.repo,b=Pe({repo:h}),y=b??(o==null?Ze(e):""),w=Lt(h),v=yl([{groups:d.map(hd),tree:a.tree}]),x=[];for(let $ of d){let k=hd($);if(k.length===0)continue;let S=[];for(let C of k){let _={...C,_id:c.nextFindingId++,_repoFallback:y,_repoDirectory:w,_reportName:e,_depsDirectory:v,_managedReportId:o,_bundleHashes:a.bundleHashes??[]};Wo(_,a),_._source=_.source??a.source??null,"isApp"in _||(_.isApp=jn(_,_._source)),_._sourcePass=m.has(_._source),_._analyzer=_._source??_.type??null,S.push(_)}x.push(S)}return Gn(x),c.reports.push({type:a.type||"analysis",source:a.source??null,fileName:e,_managedReportId:o,groups:x,repo:b,tree:a.tree??null,bundleHashes:a.bundleHashes??[]}),Kl(c.reports),ql(c.reports)&&fr(),c.revalidateConflicts=fx(),Qa(),p&&(dd(),ua(go())),r&&await Za(n),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}window.__loadFile=(e,t)=>Yu(e,t);window.__setFilters=({severities:e,confMin:t}={})=>{e!=null&&(c.filterSeverities=new Set(e)),t!==void 0&&(c.filterConfMin=t),O()};document.addEventListener("keydown",e=>{e.key==="Escape"&&document.body.classList.contains("report-fullscreen")&&document.body.classList.remove("report-fullscreen")});document.addEventListener("dragover",e=>e.preventDefault());document.addEventListener("drop",e=>{e.preventDefault(),!e.target.closest("#drop-zone")&&Ry(e.dataTransfer.files)});ut.addEventListener("dragover",e=>{e.preventDefault(),R()||ut.classList.add("hover")});ut.addEventListener("dragleave",()=>ut.classList.remove("hover"));ut.addEventListener("drop",e=>{e.preventDefault(),ut.classList.remove("hover"),Ry(e.dataTransfer.files)});var mn=null;function Q2(){R()||(mn||(mn=document.createElement("input"),mn.type="file",mn.multiple=!0,mn.hidden=!0,mn.addEventListener("change",()=>{let e=[...mn.files];e.length>0&&Ry(e),mn.value=""}),document.body.append(mn)),mn.click())}ut.addEventListener("click",e=>{let t=e.target.closest("[data-managed-page]");if(t){To(t.dataset.managedPage);return}if(e.target.closest("[data-managed-login]")){l0(c.managed?.loginPath);return}let n=e.target.closest("[data-managed-team]");if(n){let o=c.managedTeams.find(s=>s.id===n.dataset.managedTeam);o&&Ar(o);return}let r=e.target.closest("[data-landing-workspace]");if(r){Xs(r.dataset.landingWorkspace);return}e.target.closest(".drop-prompt-action")&&Q2()});function rM(e,t=fetch,n=""){let r=new URL(e);return(o,s={})=>{let i=new URL(o.replace(/^\/+/u,""),r);if(i.origin!==r.origin)throw new Error("Scan requests must use the configured server");let a=new Headers(s.headers);return n&&a.set("authorization",`Bearer ${n}`),t(i,{...s,headers:a,credentials:"omit",redirect:"error"})}}var Ju=class{constructor(t,n=()=>{},r=fetch){this.onChange=n,this.request=r,this.reset(t)}reset(t=this.server){this.server=t,this.apiKey="",this.provider=null,this._remoteModels=!1,this._disconnect()}_previewModels(){let t=Cp(this.provider);this.loadModels=()=>Promise.resolve(t)}_disconnect(){this._controller?.abort(),this.connected=!1,this.managed=!1,this.loading=!1,this.error=null,this.catalogue=null,this._remoteModels||this._previewModels(),this.onChange()}get ready(){return this.connected&&!this.loading&&this.catalogue!=null}setKey(t){this.apiKey!==t&&(this.apiKey=t,this._disconnect())}setProvider(t){if(!(this.provider===t||this.managed)){if(this.provider=t,this.connected&&t)return this._load(t);this.connected&&(this._controller?.abort(),this.loading=!1,this.error=null,this.catalogue=null),this._remoteModels||this._previewModels(),this.onChange()}}connect(){if(this._disconnect(),!(!this.server||!this.apiKey.trim()))return this._load(null)}async _fetch(t,n){let r=rM(this.server,this.request,this.apiKey.trim()),o=t?`?${new URLSearchParams({provider:t})}`:"",s=await r(`api/models${o}`,{headers:{accept:"application/json"},cache:"no-store",signal:n});if(s.status===401)throw Object.assign(new Error("DeepView API key not recognized."),{status:401});if(!s.ok)throw new Error(`Scan server returned HTTP ${s.status}.`);let i=await s.json();if(i?.valid!==!0||typeof i.managed!="boolean")throw new Error("Invalid response from scan server.");return{managed:i.managed,catalogue:i.managed||t?nv(i):null}}async _load(t){this._controller?.abort();let n=this._controller=new AbortController;this.loading=!0,this.error=null,this.catalogue=null;let r=this._fetch(t,n.signal);this.onChange();try{let o=await r;if(n.signal.aborted)return;if(this.connected=!0,this.managed=o.managed,this.catalogue=o.catalogue,!o.managed&&!t&&this.provider)return this._load(this.provider);if(o.catalogue){let s=o.catalogue;this._remoteModels=!0,this.loadModels=()=>Promise.resolve(s)}else this._remoteModels||this._previewModels();this.loading=!1,this.onChange()}catch(o){if(n.signal.aborted)return;(!t||o.status===401)&&this._disconnect(),this.loading=!1,this.error=o instanceof TypeError?"Couldn\u2019t reach the scan server. Check your connection and try again.":String(o?.message??o),this.onChange()}}};function oM(e){let t=e.trim();return/^sk-ant-[A-Za-z0-9_-]*$/u.test(t)?"anthropic":/^sk-or-v1-[A-Za-z0-9_-]*$/u.test(t)?"openrouter":/^sk-kimi-[A-Za-z0-9_-]*$/u.test(t)?"moonshot":/^sk-(?:proj|svcacct)-[A-Za-z0-9_-]*$/u.test(t)?"openai":null}function Fr(e){if(e?.throwIfAborted(),R())throw new DOMException("Local scan closed","AbortError")}async function sM(e){Fr(e);let t=await Je();return Fr(e),vv(t,Y())}async function iM(e,t){Fr(t);let n=await ho(e.integrity,{name:e.filename},{sources:!1});return Fr(t),$v(e,n)}async function aM(e){Fr(e);let t=await ce(),n=[];for(let r of t){Fr(e);let o=await fe(r);Fr(e),n.push({name:r,content:o,fallbackRepo:Ze(r)})}return Fr(e),kv(n,Y())}function lM({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?Bp(o):Bp(t)??(e==="127.0.0.1"?Dv:null)}async function cM(e,t,n){let r=Ge(e,{duration:0});t.addEventListener("abort",r,{once:!0});try{return await n()}finally{t.removeEventListener("abort",r),r()}}function tl(){return lM({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:c.serverMode,localMode:c.localMode,deepviewScanServer:c.deepviewScanServer})}function nl(e){return R()?!!e.managedId&&["admin","manage"].includes(c.managedSession?.role):!e.managedId&&!!tl()}async function Zu(e=null,{mode:t}={}){let n=c.selectedBundleWorkspace,r=me();if(await Mt(),r!==me()||e&&!nl(e))return;if(R()){e&&await To("manage-scans",{bundleId:e.managedId,...t?{scanMode:t}:{}});return}if(!tl())return;let o=At(),s=me();await o,!(!tl()||s!==me())&&(c.scanSelection=e?{bundleId:e.integrity,...n?{repoId:n}:{},...t?{mode:t}:{}}:null,c.currentView="scan",O(),H())}var My=class extends Et{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=tl(),this._access=new Ju(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>cM("Loading bundle\u2026",n,()=>iM(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=Sm(()=>{this._savedAccess=ms()}),this._loadSource()}disconnectedCallback(){super.disconnectedCallback(),this._unsubscribeSavedAccess?.(),this._controller?.abort(),this._resetAccess()}async _loadSource(){this._controller?.abort();let t=this._controller=new AbortController;this._error=null;try{this._source=await cM("Loading bundles\u2026",t.signal,()=>sM(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=ms();let t=$m(this._server);t&&(this._access.setKey(t.deepview),this._access.setProvider(t.provider),this._providerToken=t.token,this._access.connect())}async _saveOrForgetAccess(){if(this._savingAccess)return;let t=ms();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await xm(),this._resetAccess()):await km({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=ms()}catch{Ge(t?"Couldn\u2019t forget scan credentials. Try again.":"Couldn\u2019t save scan credentials. Try again.",{kind:"warning"})}finally{this._savingAccess=!1}}}_connect(t){t.preventDefault(),this._access.connect()}_setProvider(t){this._access.provider!==t&&(this._access.setProvider(t),this._providerToken="")}_setProviderToken(t){this._providerToken=t;let n=oM(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=bp`:host{display:block}*{box-sizing:border-box}button{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .5rem;color:var(--muted);background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);font:inherit;font-size:.8rem;cursor:default}button:hover:not(:disabled){color:var(--text);background:var(--surface)}button:disabled{opacity:.5}.access{min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface);container:scan-access / inline-size}.access-heading{display:flex;align-items:center;justify-content:space-between;min-height:2.5rem;padding:.45rem .9rem;border-bottom:1px solid var(--border)}.access h2{margin:0;color:var(--text);font-size:.86rem;font-weight:600}.save-access{min-height:1.6rem;margin-left:auto;flex-shrink:0}.access-fields{display:grid;gap:.8rem;padding:.85rem .9rem}.connection-row,.provider-row{display:grid;align-items:end;gap:.65rem;margin:0}.connection-row{grid-template-columns:minmax(0,1fr) auto;width:min(42rem,100%)}.provider-row{grid-template-columns:max-content minmax(0,1fr);width:100%}.access label{display:grid;gap:.3rem;min-width:0;color:var(--muted);font-size:.72rem}input{min-width:0;width:100%;height:2rem;padding:.35rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.8rem}.provider-field{min-width:0;margin:0;padding:0;border:0}.provider-field legend{margin-bottom:.3rem;padding:0;color:var(--muted);font-size:.72rem}.provider-options{display:flex;width:fit-content;max-width:100%;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);overflow:hidden}.access .provider-choice{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;height:calc(2rem - 2px);padding:.3rem .6rem;color:var(--muted);font-size:.74rem;white-space:nowrap;user-select:none}.provider-choice+.provider-choice{border-left:1px solid var(--border)}.provider-choice:hover{color:var(--text);background:var(--surface)}.provider-choice:has(:checked){color:var(--text);background:var(--surface-active)}.provider-choice:has(:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}.provider-choice input{position:absolute;inset:0;margin:0;width:100%;height:100%;opacity:0;cursor:default}.provider-icon{display:block;width:1rem;height:1rem;flex:0 0 1rem}.provider-icon svg{display:block;width:100%;height:100%}.provider-icon.anthropic{color:#d97757}.provider-icon.openai{color:#10a37f}.provider-icon.moonshot{color:#8068d9}.provider-icon.moonshot svg{transform:scale(.8)}.provider-icon.openrouter{color:var(--text)}.connect{justify-content:center;height:2rem;padding:.35rem .8rem;color:var(--text);background:var(--surface-active)}.connection-status{flex:1;min-width:0;margin:0 .7rem;line-height:1rem;color:var(--muted);font-size:.7rem}.connection-status.error{color:var(--critical, #e5534b)}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@container scan-access (max-width: 38rem){.provider-row{grid-template-columns:minmax(0,1fr)}}@container scan-access (max-width: 28rem){.provider-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.provider-choice:nth-child(odd){border-left:0}.provider-choice:nth-child(n+3){border-top:1px solid var(--border)}}@container scan-access (max-width: 23rem){.access .provider-choice{gap:.25rem;padding-inline:.4rem;font-size:.7rem}}`;_accessPanel(){let t=this._access,n=t.catalogue?.models.length??0,r=t.error??(t.loading?t.connected?"Loading provider models\u2026":"Connecting\u2026":t.connected?t.catalogue?`Connected \xB7 ${n} ${n===1?"model":"models"}`:"Connected. Choose a provider.":"");return u`<section slot="access" class="access" aria-labelledby="scan-access-heading"><div class="access-heading"><h2 id="scan-access-heading">Access</h2><p class="${`connection-status ${t.error?"error":""}`}" role="${t.error?"alert":"status"}">${r}</p>${this._savedAccess||t.connected?u`<button class="save-access" type="button" ?disabled="${this._savingAccess}" @click="${this._saveOrForgetAccess}">${this._savedAccess?"Forget":"Save"}</button>`:g}</div><div class="access-fields"><form class="connection-row" @submit="${this._connect}"><label>DeepView API Key<input type="password" name="deepview-api-key" placeholder="Enter API key" autocomplete="off" spellcheck="false" .value="${t.apiKey}" @input="${o=>t.setKey(o.target.value)}"></label> <button type="submit" class="connect" ?disabled="${!t.apiKey.trim()||t.loading||t.connected&&!t.error}">${t.connected&&!t.error?"Connected":"Connect"}</button></form>${t.managed?g:u`<div class="provider-row"><fieldset class="provider-field"><legend>Provider</legend><div class="provider-options">${[["anthropic","Anthropic"],["openai","OpenAI"],["moonshot","Moonshot"],["openrouter","OpenRouter"]].map(([o,s])=>u`<label class="provider-choice"><input type="radio" name="scan-provider" value="${o}" .checked="${t.provider===o}" @change="${()=>this._setProvider(o)}"><span class="${`provider-icon ${o}`}" aria-hidden="true">${rv(o)}</span><span>${s}</span></label>`)}</div></fieldset><label>Token<input type="password" name="provider-token" placeholder="Enter provider token" autocomplete="off" spellcheck="false" .value="${this._providerToken}" @input="${o=>this._setProviderToken(o.target.value)}"></label></div>`}</div></section>`}render(){return u`${this._error?u`<p role="alert">Couldn’t load saved bundles: ${this._error} <button @click="${()=>{this._loadSource()}}">Retry</button></p>`:g}<deepview-scan-page .selection="${this.selection}" scope-label="Workspace" .source="${this._source}" .sourceLoading="${this._source==null&&!this._error}" .loadBundle="${this._loadBundle}" .loadModels="${this._access.loadModels}" .canRun="${this._access.ready}" .loadReportSources="${aM}"><button slot="navigation" type="button" @click="${()=>{At()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",My);function Wu(){let e=document.querySelector("#drop-zone");if(!e)return;let t=e.querySelector(".local-scan-button");t||(t=document.createElement("button"),t.type="button",t.className="local-scan-button",t.innerHTML=`${Vn}<span>Scan</span>`,t.addEventListener("click",()=>{Zu()}),e.append(t));let n=tl();t.hidden=!n,document.querySelector("local-scan-page")?.setScanServer(n);let r=document.querySelector(".bundles-scan-button"),o=c.bundles?.find(s=>s.integrity===c.selectedBundle);r&&(r.hidden=!o||!nl(o))}var dM="@preventive/triage";function Ty(e,t){let n=e.toLowerCase(),r="",o=n;if(n.startsWith("@")){let i=n.indexOf("/");i>0&&(r=n.slice(0,i),o=n.slice(i+1))}return`pkg:npm/${r?`${encodeURIComponent(r)}/`:""}${encodeURIComponent(o)}@${encodeURIComponent(t)}`}function uM(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function pM(e){let t=[];if(e?.kind!=="stasis"||!e.bundle?.modules)return t;let n=new Map;for(let[r,o]of e.bundle.modules){if(!o?.name||typeof o.version!="string"||!o.version)continue;let s=`${o.name}@${o.version}`,i=n.get(s);if(i!==void 0){r==="."&&(t[i].dir=".");continue}n.set(s,t.length),t.push({name:o.name,version:o.version,dir:r})}return t}function fM(e){if(e?.kind!=="stasis"||!e.bundle?.modules)return!1;for(let[,t]of e.bundle.modules)if(t?.name&&typeof t.version=="string"&&t.version)return!0;return!1}function mM(e,t){let n=e.find(s=>s.dir===".")??null,r=n?e.filter(s=>s!==n):e;return{root:n?{name:n.name,version:n.version,purl:Ty(n.name,n.version)}:{name:uM(t?.name??"bundle"),version:null,purl:null},rest:r}}function gM(e){return e??globalThis.crypto.randomUUID()}function BZ(e,t,{now:n=new Date,uuid:r}={}){let o=pM(e),{root:s,rest:i}=mM(o,t),a={type:"application","bom-ref":s.purl??`application:${s.name}`,name:s.name};s.version&&(a.version=s.version),s.purl&&(a.purl=s.purl);let l={bomFormat:"CycloneDX",specVersion:"1.5",serialNumber:`urn:uuid:${gM(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:dM}]},component:a},components:i.map(p=>{let d=Ty(p.name,p.version);return{type:"library","bom-ref":d,name:p.name,version:p.version,purl:d}})};return`${JSON.stringify(l,null,2)}
|
|
185
|
+
`}function eP(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function PZ(e,t,{now:n=new Date,uuid:r}={}){let o=pM(e),{root:s,rest:i}=mM(o,t),a=uM(t?.name??"bundle"),l=n.toISOString().replace(/\.\d{3}Z$/u,"Z"),p=(b,y,w,v)=>{let x={SPDXID:b,name:y,downloadLocation:"NOASSERTION",filesAnalyzed:!1,licenseConcluded:"NOASSERTION",licenseDeclared:"NOASSERTION",copyrightText:"NOASSERTION"};return w&&(x.versionInfo=w),v&&(x.externalRefs=[eP(v)]),x},d="SPDXRef-Package-root",f=[p(d,s.name,s.version,s.purl)],m=[{spdxElementId:"SPDXRef-DOCUMENT",relationshipType:"DESCRIBES",relatedSpdxElement:d}];i.forEach((b,y)=>{let w=`SPDXRef-Package-${y+1}`;f.push(p(w,b.name,b.version,Ty(b.name,b.version))),m.push({spdxElementId:d,relationshipType:"DEPENDS_ON",relatedSpdxElement:w})});let h={spdxVersion:"SPDX-2.3",dataLicense:"CC0-1.0",SPDXID:"SPDXRef-DOCUMENT",name:a,documentNamespace:`https://spdx.org/spdxdocs/${encodeURIComponent(a)}-${gM(r)}`,creationInfo:{created:l,creators:[`Tool: ${dM}`]},packages:f,relationships:m};return`${JSON.stringify(h,null,2)}
|
|
186
|
+
`}function tP(e,t){let n=t?"gu":"giu",r=t?"g":"gi";try{return{re:new RegExp(e,n)}}catch{try{return{re:new RegExp(e,r)}}catch(o){return{error:o.message}}}}function Qu(e,t,n){if(t){let s=tP(e,n);if(s.error)return{error:s.error};let{re:i}=s;return{ranges(a){i.lastIndex=0;let l=[],p;for(;(p=i.exec(a))!==null;){if(p[0].length===0){i.lastIndex++;continue}if(l.push([p.index,p.index+p[0].length]),l.length>=50)break}return l}}}let r=n?e:e.toLowerCase(),o=r.length;return{ranges(s){let i=n?s:s.toLowerCase(),a=[],l=0,p;for(;(p=i.indexOf(r,l))!==-1&&(a.push([p,p+o]),l=p+o,!(a.length>=50)););return a}}}function nP(e,t,n){let r=[],o=0,s=!1;for(let i of n){let a=e.get(i);if(typeof a!="string")continue;let l=a.split(`
|
|
187
|
+
`),p=[];for(let d=0;d<l.length;d++){let f=t.ranges(l[d]);if(f.length!==0&&(p.push({ln:d+1,ranges:f}),o++,o>=5e3)){s=!0;break}}if(p.length>0&&r.push({path:i,lines:l,hits:p}),s)break;if(r.length>=500){s=!0;break}}return{fileResults:r,totalHits:o,truncated:s}}function rP(e,t){let n=[],r=0;for(let{path:o,lines:s,hits:i}of e.fileResults){let a=[];for(let{ln:l}of i){let p=t.ranges(s[l-1]);p.length!==0&&(a.push({ln:l,ranges:p}),r++)}a.length>0&&n.push({path:o,lines:s,hits:a})}return{fileResults:n,totalHits:r,truncated:!1}}var lt={tag:null,useRegex:!1,caseSensitive:!1,entries:[]};function hM(e,t,n,r,o,s=null){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let i=Qu(n,r,o);if(i.error)return{error:i.error};(lt.tag!==e||lt.useRegex!==r||lt.caseSensitive!==o)&&(lt.tag=e,lt.useRegex=r,lt.caseSensitive=o,lt.entries.length=0);let a=r||o?m=>m:m=>m.toLowerCase(),l=a(n),p=null,d=-1;for(let m=0;m<lt.entries.length;m++){let h=lt.entries[m],b=a(h.query);if(b===l)return lt.entries.splice(m,1),lt.entries.unshift(h),h.result;r||h.result.truncated||b.length<=d||!l.includes(b)||(p=h.result,d=b.length)}let f=p?rP(p,i):nP(t,i,s??[...t.keys()].toSorted());return lt.entries.unshift({query:n,result:f}),lt.entries.length>8&<.entries.pop(),f}var oP=200,sP=28,iP=12;function aP(e,t){let n=t.length>0?t[0][0]:0,r=e.length-e.trimStart().length,o=n-r>sP?n-iP:0;return Iy(e,t,o,oP)}function bM(e,t){let n=aP(e,t);return u`${n.clipped?u`<span class="bundle-search-clip">…</span>`:g}${Ay(n.text,n.ranges)}`}function Iy(e,t,n,r){let o=e.slice(n,n+r);if(n===0)return{text:o,ranges:t,clipped:!1};let s=[];for(let[i,a]of t){let l=i-n,p=a-n;p<=0||l>=o.length||s.push([Math.max(0,l),Math.min(o.length,p)])}return{text:o,ranges:s,clipped:!0}}function Ay(e,t){if(t.length===0)return e;let n=[],r=0;for(let[o,s]of t){let i=Math.max(r,Math.min(o,e.length)),a=Math.max(i,Math.min(s,e.length));a<=i||(i>r&&n.push(e.slice(r,i)),n.push(u`<mark class="bundle-search-mark">${e.slice(i,a)}</mark>`),r=a)}return r<e.length&&n.push(e.slice(r)),n}function lP(e,t){let n=new Map(e.map(s=>[s,[...t.get(s)].map(([i,a])=>{let l=t.get(s),p=t.get(i),d=l.size<p.size?l:p,f=0,m=0;for(let h of d.keys())if(l.has(h)&&p.has(h)&&f++,++m===32)break;return{to:i,score:a*2+f}}).toSorted((i,a)=>a.score-i.score||t.get(i.to).size-t.get(a.to).size||i.to.localeCompare(a.to))])),r=[],o=new Set;for(let s of e){let i=[s];for(;i.length>0;){let a=i.pop();if(!o.has(a)){o.add(a),r.push(a);for(let{to:l}of n.get(a).toReversed())o.has(l)||i.push(l)}}}return r}function yM(e,t,n){let r=e.toSorted(),o=new Set(r),s=new Map,i=new Map(r.map(v=>[v,new Map]));for(let v of r){s.set(v,new Map);for(let x of t.get(v)??[])v===x||!o.has(x)||(s.get(v).set(x,{to:x,count:1}),i.get(v).set(x,(i.get(v).get(x)??0)+1),i.get(x).set(v,(i.get(x).get(v)??0)+1))}let a=d$(r,s),l=r.map((v,x)=>({col:x%n,row:Math.floor(x/n)})),p=l.map(({col:v,row:x})=>({col:x%2?n-v-1:v,row:x})),d=(v,x)=>Math.abs(v.col-x.col)+Math.abs(v.row-x.row),f=v=>r.reduce((x,$)=>x+[...i.get($)].reduce((k,[S,C])=>k+C*d(v.get($),v.get(S)),0),0),m=new Map(r.map((v,x)=>[v,l[x]])),h=f(m);for(let v of[a,lP(r,i)])for(let x of[l,p]){let $=new Map(v.map((S,C)=>[S,x[C]])),k=f($);k<h&&(m=$,h=k)}let b=({col:v,row:x})=>`${v},${x}`,y=new Map([...m].map(([v,x])=>[b(x),v])),w=(v,x,$,k)=>{let S=0;for(let[C,_]of i.get(v))S+=_*d(x,C===$?k:m.get(C));return S};for(let v=0;v<8;v++){let x=!1;for(let $ of r){let k=m.get($),S=i.get($),C=0,_=0,L=0;for(let[I,U]of S)C+=m.get(I).col*U,_+=m.get(I).row*U,L+=U;if(!L)continue;let A=new Set;for(let I of[k,{col:Math.round(C/L),row:Math.round(_/L)}])for(let U=-1;U<=1;U++)for(let K=-1;K<=1;K++){let Q=y.get(`${I.col+U},${I.row+K}`);Q!==void 0&&Q!==$&&A.add(Q)}let E=0,T=null;for(let I of A){let U=m.get(I),K=w($,U,I,k)+w(I,k,$,U)-w($,k,I,U)-w(I,U,$,k);K<E&&(E=K,T=I)}if(T!==null){let I=m.get(T);m.set($,I),m.set(T,k),y.set(b(I),$),y.set(b(k),T),x=!0}}if(!x)break}return r.map(v=>({id:v,...m.get(v)})).toSorted((v,x)=>v.row-x.row||v.col-x.col)}var gn=216,Lr=48,ep=32,Dn=20,Ly=24,cP=20,Ey=10;function wM(e,t){let n=d=>d&&(d.collapsed||d.members.length===1),r=e.map((d,f)=>e.length>5&&n(d)&&n(e[f+1])),o=0,s=0;e.forEach((d,f)=>{r[f]?s+=d.width:o+=d.width+(f===e.length-1?0:Dn)});let i=Math.min(t,gn*5+Dn*4),a=s?Math.max(.3,Math.min(.9,(i-o)/s)):1,l=0;return{groups:e.map((d,f)=>{let m=d.width*(r[f]?a:1),h={...d,x:l,visibleWidth:m,stacked:!!(r[f]||r[f-1])};return l+=m+(r[f]||f===e.length-1?0:Dn),h}),width:l,height:Math.max(...e.map(d=>d.height))}}function vM(e){let t=`M${e[0].join(",")}`;for(let n=1;n<e.length-1;n++){let[r,o]=e[n],[s,i]=e[n-1],[a,l]=e[n+1],p=Math.hypot(a-r,l-o),d=Math.hypot(r-s,o-i);if(!d||!p)continue;let f=Math.min(6,d/2,p/2);t+=` L${r-(r-s)/d*f},${o-(o-i)/d*f} Q${r},${o} ${r+(a-r)/p*f},${o+(l-o)/p*f}`}return`${t} L${e.at(-1).join(",")}`}var Oy=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1));function Fy(e,t,n,r){let o=e.packages.find(d=>d.id===t),s=Oy(r),i=n?e.y-12:e.rowBottom;if(e.members.length===1||e.collapsed){let d=e.x+e.visibleWidth/2+s;return[[d,n?e.y-5:e.y+e.height],[d,i]]}let a=e.x+o.x+(n?0:gn),l=e.y+o.y+Lr/2+s/2,p=a+(n?-7-r.lane*6:3+r.lane*6);return[[a+(n?-4:0),l],[p,l],[p,i]]}function $M(e,t){let n=(a,l)=>{let p=e.get(a[l]),d=p.packages.find(f=>f.id===a[`${l}Package`]);return p.members.length===1||p.collapsed?[p.x+p.visibleWidth/2,p.y+p.height/2]:d?[p.x+d.x+gn/2,p.y+d.y+Lr/2]:[p.x+p.width/2,p.y+p.height/2]},r=(a,l,p=d=>n(d,l))=>{let d=new Map,f=Map.groupBy(t,m=>{let h=e.get(m[a]);return h.collapsed?h:m[`${a}Package`]});for(let m of f.values())m.toSorted((b,y)=>{let[w,v]=p(b),[x,$]=p(y);return(b.bypassLane??w)-(y.bypassLane??x)||v-$||b[`${l}Package`].localeCompare(y[`${l}Package`])||b[`${a}Package`].localeCompare(y[`${a}Package`])}).forEach((b,y)=>d.set(b,{count:m.length,index:y}));for(let m of Map.groupBy(t,h=>h[a]).values())m.toSorted((b,y)=>{let[w,v]=n(b,a),[x,$]=n(y,a);return w-x||v-$||Oy(d.get(b))-Oy(d.get(y))}).forEach((b,y)=>{let w=y/Math.max(1,m.length-1);d.get(b).lane=a==="from"?1-w:w});return d},o=r("from","to"),s=r("to","from",a=>{let l=Fy(e.get(a.from),a.fromPackage,!1,o.get(a));return[l.at(-1)[0],l[0][1]]}),i=t.map(a=>{let l=e.get(a.from),p=e.get(a.to),d=Fy(l,a.fromPackage,!1,o.get(a)),f=Fy(p,a.toPackage,!0,s.get(a));return{edge:a,end:f,start:d,rowBottom:l.rowBottom,x1:d.at(-1)[0],x2:a.bypassLane??f.at(-1)[0]}});for(let a of Map.groupBy(i,l=>l.rowBottom).values())for(let l of[!0,!1]){let p=a.filter(d=>d.x2<d.x1===l).toSorted((d,f)=>(l?1:-1)*(d.x1-f.x1||d.x2-f.x2));p.forEach((d,f)=>{d.bendY=d.rowBottom+9+12*f/Math.max(1,p.length-1)})}return i.map(({edge:a,end:l,start:p,x1:d,x2:f,bendY:m})=>{let h=[[d,m],[f,m]],{bypassLane:b,...y}=a;return b!==null&&h.push([f,l.at(-1)[1]]),{...y,path:vM([...p,...h,...l.toReversed()])}})}function dP(e,t){let n=Math.sign(t.x-e.x),r=Math.sign(t.y-e.y),o=Lr,s=gn;if(r===0&&Math.abs(t.x-e.x)===s+Dn){let b=e.y+o/2-n*6;return`M${e.x+(n>0?s:0)},${b} L${t.x+(n>0?-4:s+4)},${b}`}if(n===0&&Math.abs(t.y-e.y)===o+Ly){let b=e.x+s/2+r*8;return`M${b},${e.y+(r>0?o:0)} L${b},${t.y+(r>0?-4:o+4)}`}let i=n||r,a=e.x+(i>0?s:0),l=e.y+o/2,p=a+i*(Dn/2-3),d=t.x+s/2+i*8,f=r>0||r===0&&n>0,m=t.y+(f?-10:o+10),h=t.y+(f?-4:o+4);return vM([[a,l],[p,l],[p,m],[d,m],[d,h]])}function kM(e,t,n,r=1184,o=!1){if(o)return{id:e,members:t,collapsed:o,packages:[],internalEdges:[],width:gn+Ey*2,height:Lr};let s=t.length>1,i=Math.max(1,Math.floor((r-Ey*2+Dn)/(gn+Dn))),a=s?Math.min(i,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,l=s?Ey:0,p=Math.ceil(t.length/a),d=s?cP:0,m=(s?yM(t,n,a):[{id:t[0],col:0,row:0}]).map(y=>({id:y.id,x:l+y.col*(gn+Dn),y:l+d+y.row*(Lr+Ly)})),h=new Map(m.map(y=>[y.id,y])),b=[];if(s)for(let y of t)for(let w of n.get(y)??[])y!==w&&h.has(w)&&b.push({from:y,to:w,path:dP(h.get(y),h.get(w))});return{id:e,members:t,collapsed:o,packages:m,internalEdges:b,width:a*gn+(a-1)*Dn+l*2,height:p*Lr+(p-1)*Ly+l*2+d}}function Ny(e,t={}){let n=t.ecosystem??(/(?:^|\/)node_modules\//u.test(e)?"npm":""),r=t.name||(e==="."?"App":e);return{id:e,name:r,ecosystem:n,version:t.version??"",own:e===".",root:!1,target:!1}}var xM=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function SM(e,t){let n=e?.bundle?.modules.get(t);if(!t||t==="."||!n)return null;let r=Ny(t,n);return{packageKey:r.ecosystem?xM(r):r.name,packageGroup:qr("",{packageDir:t})}}function CM(e,{packageKey:t,packageGroup:n,version:r,reason:o=""}){let s=new Map,i=new Map,a=new Map,l=Nt(e)??new Map,p=new Map([...l.keys()].map($=>[$,$])),d=Go(e).get(o),f=new Map([...p].filter(([$])=>!d||d.has($)));for(let $ of new Set([...f.keys()].map(k=>l.get(k))))a.set($,Ny($,e.bundle.modules.get($)));let m=($,k)=>{$!==k&&(i.has($)||i.set($,new Set),s.has(k)||s.set(k,new Set),i.get($).add(k),s.get(k).add($))};for(let[$,k]of Ol(e))if(f.has($))for(let S of k){if(!f.has(S))continue;let C=l.get($),_=l.get(S);if(c$($,S,_===".",C==="."))m(C,_);else if(C!==_){let L=a.get(_);L.excludedImporters??=new Set,L.excludedImporters.add(C)}}let{roots:h,appImports:b}=Nl(e,f,$=>l.get($),l,p);b.length>0&&!a.has(".")&&a.set(".",Ny("."));for(let $ of b)m(".",$);for(let[$,k]of a){if(!(k.own||k.ecosystem==="npm"&&(k.name==="@babel/core"||k.name==="react-native"&&i.get(".")?.has($))))continue;k.traceBoundary=!0;let C=s.get($);for(let _ of C??[])_!=="."&&(C.delete(_),i.get(_).delete($))}for(let $ of h){let k=a.get($==="__own__"?".":$);k&&(k.root=!0)}let y=[];for(let $ of a.values()){let k=xM($),S=n===void 0?$.ecosystem==="github"?k.toLowerCase()===t.toLowerCase():k===t:qr("",{packageDir:$.id})===n,C=$.ecosystem==="github"&&$.version==="."?"0.0.0":$.version;!$.own&&S&&(r===void 0||C===r)&&($.target=!0,y.push($.id))}let w=new Set(y),v=[...y];for(let $=0;$<v.length;$++)for(let k of s.get(v[$])??[])w.has(k)||(w.add(k),v.push(k));let x=$=>new Map([...w].map(k=>[k,new Set([...$.get(k)??[]].filter(S=>w.has(S)))]));return{nodes:new Map([...a].filter(([$])=>w.has($))),imports:x(i),importedBy:x(s),targets:y}}function _M(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:o,componentOf:s}=u$(r,e.imports),i=o.map(()=>new Set),a=[];for(let[k,S]of e.imports){let C=s.get(k);for(let _ of S){let L=s.get(_);C!==L&&(i[C].add(L),a.push({from:C,to:L,fromPackage:k,toPackage:_}))}}let l=o.map(()=>0),p=o.map(()=>0);for(let k of i)for(let S of k)p[S]++;let d=o.flatMap((k,S)=>p[S]===0?[S]:[]);for(let k=0;k<d.length;k++){let S=d[k];for(let C of i[S])l[C]=Math.max(l[C],l[S]+1),--p[C]===0&&d.push(C)}let f=i.some((k,S)=>[...k].some(C=>l[C]!==l[S]+1)),m=t-ep-24-(f?56:0),b=[...Map.groupBy(o.map((k,S)=>{let C=k.length>10;return{...kM(S,k,e.imports,m,C&&!n.has(S)),collapsible:C}}),k=>l[k.id])].toSorted(([k],[S])=>k-S).map(([,k])=>wM(k,m)),y=b.reduce((k,S)=>Math.max(k,S.width+24),240),w=new Map,v=12;for(let{groups:k,width:S,height:C}of b){for(let _ of k)w.set(_.id,{..._,x:_.x+(y-S)/2,y:v,rowBottom:v+C});v+=C+36}let x=0,$=$M(w,a.map(k=>{let S=l[k.to]===l[k.from]+1?null:y+8+x++%4*10;return{...k,bypassLane:S}}));return{boxes:[...w.values()],componentOf:s,edges:$,width:y+(x?56:0),height:Math.max(0,v-24)}}function RM(e,t){if(t===null)return null;let n=new Set,r=new Set([t]);for(let o of[!1,!0]){let s=new Map,i=[t],a=new Set([t]);for(let l of e.edges){let p=o?l.to:l.from,d=o?l.from:l.to;s.has(p)||s.set(p,[]),s.get(p).push(d)}for(let l=0;l<i.length;l++)for(let p of s.get(i[l])??[])a.has(p)||(a.add(p),r.add(p),i.push(p));for(let l of e.edges)a.has(l.from)&&a.has(l.to)&&n.add(l)}return{groups:r,edges:n}}var MM=`dialog{width:min(94vw,var(--graph-dialog-width));max-width:80rem;max-height:90dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:start;justify-content:space-between;gap:1rem;flex-shrink:0;padding:.7rem .9rem;border-bottom:1px solid var(--border)}header h3{display:flex;flex-wrap:wrap;gap:.35rem .7rem;min-width:0;margin:0;font-size:.92rem;overflow-wrap:anywhere}.heading-version{color:var(--accent);font-family:var(--font-mono, monospace)}header button{flex-shrink:0;border:0;background:transparent;color:var(--muted);font-family:inherit;font-size:1.4rem;line-height:1;padding:0 .25rem}header button:hover{color:var(--text)}.graph-caption{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem;padding:.45rem .9rem;font-size:.68rem;color:var(--muted);flex-shrink:0;user-select:none}.graph-scroll{min-height:0;overflow:auto;overscroll-behavior:contain;background:var(--bg, var(--surface));padding:.4rem}.graph{position:relative;margin-inline:auto}.connections{position:absolute;inset:0;overflow:visible;pointer-events:none}.connections>path{fill:none;stroke:var(--connection-color, var(--muted));stroke-width:1.5;opacity:.65}.package-group{position:absolute;cursor:default}.package-group.stacked{background:var(--bg);border-radius:var(--ui-radius, 6px)}.stacked.collapsed{background:linear-gradient(var(--surface),var(--surface)),var(--bg)}.stacked.selected-cycle{background:color-mix(in srgb,var(--accent) 9%,var(--bg))}.stacked:hover,.stacked:focus-within{z-index:1;box-shadow:0 2px 8px #0005}.stacked.dimmed{opacity:1}.stacked.dimmed:after{content:"";position:absolute;inset:0;background:var(--surface);opacity:.8;border-radius:inherit;pointer-events:none}.package{position:absolute;width:var(--package-width);height:var(--package-height);display:flex;flex-direction:column;gap:4px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--package-color);border-radius:var(--ui-radius, 6px);font-size:.75rem;overflow:hidden}.package.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--surface))}.name,.location,.version{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.package-main,.package-meta{display:flex;align-items:baseline;gap:.4rem;min-width:0}.name{flex:1;font-weight:600;line-height:17px}.version{max-width:45%;flex-shrink:0;font-family:var(--font-mono, monospace);font-size:.65rem}.badge{flex-shrink:0;font-size:.6rem;color:var(--muted);user-select:none}.selected-badge{color:var(--accent)}.location{flex:1;color:var(--muted);font-family:var(--font-mono, monospace);font-size:.61rem;line-height:14px}.cycle{border-radius:var(--ui-radius, 8px);outline:1px solid var(--border);background:color-mix(in srgb,var(--muted) 4%,transparent)}.cycle-label{position:absolute;top:7px;left:14px;color:var(--muted);font-size:.63rem;user-select:none}.cycle-toggle{display:flex;align-items:center;gap:.4rem;padding:0;border:0;background:transparent;font-family:inherit;line-height:16px}.cycle-toggle:hover{color:var(--text)}.cycle-chevron{font-size:.85rem}.cycle-summary{display:flex;gap:.4rem;text-align:left}.cycle-count{color:var(--muted)}.cycle-count:before{content:"\\b7 "}.collapsed .cycle-toggle{inset:0;width:100%;padding:5px 7px;border-radius:inherit;font-size:.75rem}.collapsed .cycle-summary{flex:1;flex-direction:column;gap:2px}.collapsed .cycle-count{font-size:.65rem}.collapsed .cycle-count:before{content:none}.selected-cycle{outline-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--surface))}.cycle-connections>path{stroke:var(--connection-color);stroke-width:1.25;opacity:.8}.large-cycle .cycle-connections>path{stroke:var(--muted);opacity:.18}.cycle-connections>path.subdued{opacity:.04}.connections>path.traced{stroke:var(--connection-color);stroke-width:1.75;opacity:1}.package-subdued{opacity:.35}.dimmed,.connections>path.dimmed{opacity:.18}.note,.empty{padding:1rem;color:var(--muted);font-size:.78rem;line-height:1.5}.note{position:sticky;left:0;max-width:65rem;margin:auto}button:focus-visible,.graph-scroll:focus-visible,.package:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
|
|
188
|
+
`;var By=e=>Sn(e.own?"__own__":e.name),TM=()=>Math.floor(Math.min(document.documentElement.clientWidth*.94,80*Number.parseFloat(getComputedStyle(document.documentElement).fontSize))),Py=class extends N{static styles=[...N.styles,P(MM)];static properties={_active:{state:!0},_current:{state:!0},_hovered:{state:!0},_focused:{state:!0},layout:{state:!0}};constructor(){super(),this._active=null,this._hovered=null,this._focused=null}_expandedCycles=new Set;layoutForViewport(){let t=this.renderRoot?.activeElement;this._hovered=null,this._maxWidth=TM(),this.layout=_M(this.graph,{maxWidth:this._maxWidth,expandedCycles:this._expandedCycles}),t?.matches(".package, .cycle-toggle")&&this.updateComplete.then(()=>{this._current&&t.isConnected&&(t.focus({preventScroll:!0}),t.scrollIntoView({block:"nearest",inline:"nearest"}))})}toggleCycle(t){this._expandedCycles.has(t)?this._expandedCycles.delete(t):this._expandedCycles.add(t),this._focused=null,this.layoutForViewport()}connectedCallback(){super.connectedCallback(),this.graph=CM(this.details,this),this.layoutForViewport(),this._dispose=Rn(()=>{this._current=this.isCurrent(),this._current||queueMicrotask(this._onClose)})}firstUpdated(){super.firstUpdated();let t=this.renderRoot.querySelector(".graph-scroll");t&&(this._resize=new ResizeObserver(()=>{if(TM()!==this._maxWidth){this.layoutForViewport();return}this.renderRoot.activeElement?.matches(".package, .cycle-toggle")||(t.scrollLeft=(this.layout.width-t.clientWidth)/2)}),this._resize.observe(t),this._resize.observe(document.documentElement))}disconnectedCallback(){this._dispose?.(),this._resize?.disconnect(),super.disconnectedCallback()}renderNode({id:t,x:n,y:r},o){let s=this.graph.nodes.get(t),i=[...this.graph.importedBy.get(t)].map(p=>this.graph.nodes.get(p)),a=`${s.version||"Source"}${s.ecosystem&&s.ecosystem!=="npm"?` \xB7 ${s.ecosystem}`:""}`,l=i.length>0?`Imported by ${i.map(p=>`${p.name}${p.version?`@${p.version}`:""}`).join(", ")}.`:s.root?"Bundle entry point or app source.":s.traceBoundary||s.excludedImporters?.size?"Dependency tracing stops here.":"No importer is recorded in this scope.";return u`<div class="${`package${s.target?" selected":""}${o&&!o.has(t)?" package-subdued":""}`}" tabindex="0" role="group" @pointerenter="${()=>{this._hovered=t}}" @pointerleave="${()=>{this._hovered=null}}" @focus="${()=>{this._focused=t}}" @blur="${()=>{this._focused=null}}" aria-label="${`${s.ecosystem?`${s.ecosystem}:`:""}${s.name}${s.version?`@${s.version}`:""}. ${l} Location: ${t}.`}" style="${le({left:`${n}px`,top:`${r}px`,"--package-color":By(s)})}"><div class="package-main"><span class="name" data-tooltip="${s.name}" data-tooltip-truncated>${s.name}</span> <span class="version" data-tooltip="${a}" data-tooltip-truncated>${a}</span></div><div class="package-meta"><span class="location" data-tooltip="${t}" data-tooltip-truncated>${s.own?"App source":t}</span> ${s.target?u`<span class="badge selected-badge">Selected</span>`:g} ${s.root?u`<span class="badge">${s.own?"App":"Entry point"}</span>`:g}</div></div>`}renderGraph(){let{boxes:t,edges:n,width:r,height:o}=this.layout,s=this._hovered??this._focused,i=s===null?this._active:this.layout.componentOf.get(s),a=RM(this.layout,i),l=s===null?null:new Set([s,...this.graph.imports.get(s),...this.graph.importedBy.get(s)]),p=new Set(n.map(f=>f.to)),d=t.filter(f=>!p.has(f.id)&&!f.members.some(m=>{let h=this.graph.nodes.get(m);return h.root||h.traceBoundary||[...h.excludedImporters??[]].some(b=>this.layout.componentOf.get(b)!==f.id)}));return u`<div class="graph-scroll" tabindex="0" aria-label="Package dependency chains. Arrows point from importer to dependency."><div class="graph" style="${le({width:`${r}px`,height:`${o}px`,"--package-width":`${gn}px`,"--package-height":`${Lr}px`})}"><svg class="connections" width="${r}" height="${o}" aria-hidden="true"><defs><marker id="dependency-arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10z" fill="context-stroke"/></marker></defs>${n.map(f=>{let m=f.fromPackage===s||f.toPackage===s,h=a&&!a.edges.has(f)||s!==null&&(f.from===i||f.to===i)&&!m;return Un`<path d=${f.path} class=${h?"dimmed":m?"traced":""}
|
|
189
|
+
style=${le({"--connection-color":By(this.graph.nodes.get(f.fromPackage))})} marker-end="url(#dependency-arrow)"/>`})}</svg> ${t.map(f=>this.renderGroup(f,a,s,l))}</div>${d.length>0?u`<p class="note">Some chains have no recorded app or entry point. These packages are bundled, but their origin is not captured in this scope.</p>`:g}</div>`}renderGroup(t,n,r,o){let s=t.members.some(a=>this.graph.nodes.get(a).target),i=o&&t.members.some(a=>o.has(a));return u`<div class="${`package-group${t.stacked?" stacked":""}${t.members.length>1?" cycle":""}${t.members.length>8?" large-cycle":""}${t.collapsed?" collapsed":""}${t.collapsed&&s?" selected-cycle":""}${n&&!n.groups.has(t.id)?" dimmed":""}`}" style="${le({left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,height:`${t.height}px`})}" @pointerenter="${()=>{this._active=t.id}}" @pointerleave="${()=>{this._active=null}}">${t.collapsible?u`<button type="button" class="cycle-label cycle-toggle" aria-expanded="${!t.collapsed}" aria-controls="${`cycle-content-${t.id}`}" @click="${()=>this.toggleCycle(t.id)}"><span class="cycle-chevron" aria-hidden="true">${t.collapsed?"\u25B8":"\u25BE"}</span> <span class="cycle-summary"><span>Circular imports</span><span class="cycle-count">${t.members.length} packages</span></span> ${t.collapsed&&s?u`<span class="badge selected-badge">Selected</span>`:g}</button>`:t.members.length>1?u`<div class="cycle-label">Circular imports${t.members.length>8?` \xB7 ${t.members.length} packages`:""}</div>`:g}<div id="${`cycle-content-${t.id}`}" ?hidden="${t.collapsed}">${t.internalEdges.length>0?u`<svg class="connections cycle-connections" width="${t.width}" height="${t.height}" aria-hidden="true">${t.internalEdges.map(a=>Un`<path d=${a.path}
|
|
190
190
|
class=${i?a.from===r||a.to===r?"traced":"subdued":""}
|
|
191
|
-
style=${le({"--connection-color":Cy(this.graph.nodes.get(a.from))})} marker-end="url(#dependency-arrow)"/>`)}</svg>`:g} ${Z(t.packages,a=>a.id,a=>this.renderNode(a,i?o:null))}</div></div>`}render(){if(!this._current)return g;let{nodes:t,targets:n}=this.graph,r=this.packageGroup===void 0?this.packageKey:Ho(this.packageGroup);return u`<dialog aria-labelledby="why-title" style="${le({"--graph-dialog-width":`${Math.max(480,this.layout.width+Uu)}px`})}" @close="${this._onClose}" @click="${this._onBackdrop}"><header><h3 id="why-title">${r}${this.version===void 0?g:u`<span class="heading-version">${this.version}</span>`}</h3><button type="button" aria-label="Close dependency chains" @click="${this._onClose}">×</button></header><div class="graph-caption"><span>${t.size} ${t.size===1?"package":"packages"}${n.length>1?` \xB7 ${n.length} installations${this.version===void 0?"":" of this version"}`:""}${this.reason?` \xB7 Scope: ${this.reason}`:""}</span> <span>↓ imports</span></div>${n.length>0?this.renderGraph():u`<p class="empty">Dependency metadata for this ${this.version===void 0?"package":"version"} is not available in this bundle scope.</p>`}</dialog>`}};customElements.define("why-dialog",_y);function Vu(e){return re("why-dialog",e)}var N2=new Map,lM=new Map,cM=[];function Mo(e){if(!e?.managedId)return N2;let t=c.managedSession,n=c.managedTeams&&rt(c.managedTeams),r=[t?.id,t?.role,t?.csrfToken,c.currentManagedTeam,n];return r.some((o,s)=>o!==cM[s])&&(cM=r,lM=new Map),lM}var Ry=new WeakMap;function Ja(e){return Ry.has(e)||Ry.set(e,{reasons:Uo(e),selected:""}),Ry.get(e)}function To(e,t=Ja(e).selected){return JSON.stringify([e.managedId??e.integrity,t])}var dM="deepview.advisories.proxyConsent";function My(){try{return localStorage.getItem(dM)==="1"}catch{return!1}}function AZ(){try{localStorage.setItem(dM,"1")}catch{}}function B2(e){if(!e||e.kind!=="stasis"||!e.bundle)return!1;for(let[t,n]of e.bundle.modules)if(t.includes("node_modules")&&n?.name&&typeof n.version=="string"&&n.version)return!0;return!1}function uM(e){if(!e||e.kind!=="stasis"||!e.bundle)return!1;for(let[t,n]of e.bundle.modules)if(!(t==="."||typeof n?.name!="string"||!n.name||typeof n.version!="string"||!n.version)&&(n.ecosystem||/(?:^|\/)node_modules\//u.test(t)))return!0;return!1}function P2(e){if(e.bundle&&!uM(e))return!0;let t=Mo(e).get(To(e,""));return t?.state==="ok"&&t.query.size===0&&t.skipped.length===0}function pM(e,t,n=!1){return!e||e.managedId&&!z2(e)||D2(e,t)<1||e.summary?.versionedPackages===0?!1:n?!0:my(e.name)!=="stasis"?!1:!t||t.integrity!==e.integrity?!0:e.managedId?!t.bundle||uM(t):B2(t)}function D2(e,t){let n=t?.integrity===e.integrity&&t.bundle?t.bundle.version:e.summary?.stasisVersion;return Number.isSafeInteger(n)?n:1/0}function z2(e){let t=c.managedSession?.role;return["admin","manage"].includes(t)?!0:["view","triage"].includes(t)?c.managedTeams.some(n=>(c.currentManagedTeam==null||n.id===c.currentManagedTeam)&&n.permissions?.security===!0&&n.bundles?.some(r=>r.id===e.managedId)):!1}function W2(e){return Object.fromEntries([...e].map(([t,n])=>[t,[...n].toSorted()]))}var Ty=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function H2(e){return{...e,title:e.title||e.id,severity:e.severity??"unknown",cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function U2(e){let t=Array.isArray(e),n=t?Map.groupBy(e.map(H2),Ty):new Map(Object.entries(e??{}));for(let[r,o]of n){let s=Array.isArray(o)?o.filter(i=>i&&typeof i.title=="string"&&typeof i.severity=="string"):[];s.length>0?n.set(r,t?s:s.map(i=>({...i,source:"registry"}))):n.delete(r)}return n}function fM(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function V2(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W2(e))});if(!t.ok){let n=`HTTP ${t.status}`;try{let r=await t.json();typeof r?.error=="string"&&r.error&&(n=`${r.error} (HTTP ${t.status})`)}catch{}throw new Error(n)}return t.json()}function Gu(e,t){return mM(e,t)}function j2(e,t){return mM(e,t,!0)}async function mM(e,t,n=!1){if(!e?.integrity||!e.managedId&&!My())return;let r=Mo(e),o=To(e),s=r.get(o);if(n){if(!fM(e,s))return;r.set(o,{...s,recheckingRepositories:!0,repositoryError:null}),t()}else if(s)return;let{reasons:i,selected:a}=Ja(e),l=e.managedId?new Map:ev(e,i.get(a)??null);n||r.set(o,{state:"loading",query:l});try{let p,d=[];if(e.managedId){let f=await Jk(e.managedId,void 0,a,n,n);l=Array.isArray(f.packages)?new Map(f.packages.map(m=>[Ty(m),new Set(m.versions)])):new Map(Object.entries(f.packages).map(([m,h])=>[m,new Set(h)])),p=f.advisories,d=Array.isArray(f.skipped)?f.skipped:[]}else p=l.size>0?await V2(l):{};r.set(o,{state:"ok",byPackage:U2(p),query:l,skipped:d})}catch(p){let d=p?.message??"fetch-failed";r.set(o,n&&![401,403,404].includes(p?.status)?{...s,recheckingRepositories:!1,repositoryError:d}:{state:"error",reason:d,query:l})}t()}async function EZ(e,t){if(!e?.integrity)return;let n=Mo(e),r=To(e);n.get(r)?.state==="error"&&(n.delete(r),await Gu(e,t))}var G2={critical:0,high:1,moderate:2,low:3,info:4};function ju(e){return G2[e]??999}function K2(){let e=typeof window>"u"?"":window.location.host;return u`<div class="bundle-advisories-consent"><div class="bundle-advisories-consent-card"><p class="bundle-advisories-consent-text">This bundle's dependency names and versions will be sent to the npm registry through a same-origin proxy (<span class="mono">${e}</span> → <span class="mono">registry.npmjs.org</span>) to look up published security advisories.</p><button type="button" class="bundle-advisories-consent-btn" data-advisories-consent>Confirm</button><p class="bundle-advisories-consent-note">This preference will be saved and reused for other bundles.</p></div></div>`}function gM(e,t=()=>{},n=null){let r=e?Ja(e):null,o=[...r?.reasons.keys()??[]].map(a=>({id:`reason:${a}`,label:a})),s=Y2(e),i=!!e?.managedId&&!P2(e);return u`<div class="bundle-advisories-panel">${s!==g||o.length>0||i?u`<div class="bundle-advisories-toolbar">${s} ${o.length>0||i?u`<div class="bundle-advisories-scopes">${o.length>0?u`<bundle-scope-selector .reasons="${o}" .value="${r.selected?`reason:${r.selected}`:""}" label="Choose advisory scope" @scope-change="${a=>{let l=a.detail.value.replace(/^reason:/u,"");r.selected=r.reasons.has(l)?l:"";let p=Gu(e,t);return t(),p}}"></bundle-scope-selector>`:g} ${i?q2(e,t):g} ${i&&n?u`<button type="button" class="bundle-advisories-retry bundle-advisories-scan" @click="${n}">${W(Vn)}<span>Validate</span></button>`:g}</div>`:g}</div>`:g} ${J2(e)}</div>`}function q2(e,t){if(!e?.managedId)return g;let n=Mo(e).get(To(e)),r=!!n?.recheckingRepositories;return u`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!fM(e,n)}" aria-busy="${String(r)}" @click="${()=>j2(e,t)}">${r?"Rechecking\u2026":"Recheck against repositories"}</button>`}function Y2(e){if(!e||!e.managedId&&!My())return g;let t=Mo(e).get(To(e));if(t?.state!=="ok")return g;let n=t.query.size,r=t.byPackage.size;if(r===0)return g;let o=[...t.byPackage.values()].reduce((s,i)=>s+i.length,0);return u`<div class="bundle-advisories-summary">${o} ${o===1?"advisory":"advisories"} across ${r} of ${n} ${n===1?"package":"packages"}</div>`}function X2(e,t){let n=t.query.size;return n===0&&t.skipped.length>0?u`No packages could be audited.`:u`No advisories for the ${n} ${t.skipped.length>0?"audited ":""}${n===1?"package":"packages"} in ${Ja(e).selected?"this scope":"this bundle"}.`}function J2(e){if(!e)return u`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!=="stasis"||!e.managedId&&!e.bundle)return u`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!e.managedId&&!My())return K2();let t=Mo(e).get(To(e));if(!t||t.state==="loading")return u`<div class="bundle-advisories-empty">Loading advisories…</div>`;if(t.state==="error")return u`<div class="bundle-advisories-empty is-error"><span>Failed to fetch advisories: ${t.reason}</span> <button type="button" class="bundle-advisories-retry" data-advisories-retry>Retry</button></div>`;let n=t.byPackage.size===0?u`<div class="bundle-advisories-empty"><span>${X2(e,t)}</span></div>`:g;if(t.byPackage.size===0&&t.skipped.length===0&&!t.repositoryError)return n;let r=[...t.byPackage.entries()].toSorted(([o,s],[i,a])=>{let l=Math.min(...s.map(d=>ju(d.severity))),p=Math.min(...a.map(d=>ju(d.severity)));return l!==p?l-p:o.localeCompare(i)});return u`${n}<div class="bundle-advisories">${t.repositoryError?u`<div class="bundle-advisories-empty is-error" role="alert">Repository recheck failed: ${t.repositoryError}. Previous results are shown.</div>`:g} ${t.skipped.length>0?u`<section class="bundle-advisories-skipped" aria-label="Dependencies not audited"><h3>Not audited</h3><ul>${t.skipped.map(o=>u`<li><span class="mono">${Ty(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:g}<ul class="bundle-advisories-list">${r.map(([o,s])=>Z2(e,o,s,t.query.get(o),()=>Mo(e).get(To(e))?.byPackage===t.byPackage))}</ul></div>`}function Z2(e,t,n,r,o){let s=[...n].toSorted((a,l)=>{let p=ju(a.severity)-ju(l.severity);return p!==0?p:(a.title??"").localeCompare(l.title??"")}),i=r?[...r].toSorted():[];return u`<li class="bundle-advisories-section"><div class="bundle-advisories-package"><span class="bundle-advisories-section-name">${t}</span> ${i.length>0?u`<span class="bundle-advisories-section-versions">${i.map(a=>u`<button type="button" class="bundle-advisories-version" aria-haspopup="dialog" aria-label="${`Why is ${t}@${a} here?`}" @click="${()=>Vu({details:e,packageKey:t,version:a,reason:Ja(e).selected,isCurrent:o})}">${a}</button>`)}</span>`:g}</div><ul class="bundle-advisories-rows">${s.map(a=>ou(a,({title:l,severity:p,details:d})=>uu({heading:l,severity:p,markdown:d,isCurrent:o})))}</ul></li>`}var Xu=e=>_()?[]:wf(e),Q2=()=>_()?0:vf(),Za=null,Iy=new WeakMap;function eP(e){if(Iy.has(e))return Iy.get(e);let t=hp(e),n=Tl(e),r=[...t.keys()],{stripped:o}=Qn(r),s=new Map(r.map((l,p)=>[l,o[p]])),i={};for(let l of r){let p=s.get(l),d=n.get(l);i[p]={imports:d?[...d].map(f=>s.get(f)).filter(Boolean):[],size:t.get(l)}}let a={tree:i,origToStripped:s};return Iy.set(e,a),a}function CM(e,t=null){let n={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0};if(!e?.fileHashes)return n;let r=new Set;for(let[o,s]of e.fileHashes)if(!(t&&!t.has(o))&&!r.has(s)){r.add(s);for(let i of Xu(s)){let a=Me(i,c.triage.get(j(i)));a&&n[a]!==void 0&&n[a]++}}return n}function Js(e,t="graph"){if(!e||e.size===0)return new Map;let n=new Map;for(let[r,o]of e){let s=Xu(o);if(s.length===0)continue;let i=s.filter(a=>{let l=Me(a,c.triage.get(j(a)))??null;return t==="issues"?l!=="invalid"&&l!=="deleted":l===c.shownTriage});i.length!==0&&n.set(r,i)}return n}function _M(e){let t=eP(e),n=Uo(e,t.origToStripped.keys());ee.bundleReasonFor!==e.integrity&&(ee.bundleReasonFor=e.integrity,ee.dependencyPackagesView=!1,ee.bundleReason=null);let{tree:r,origToStripped:o,selected:s}=iv(t.tree,t.origToStripped,n,ee.bundleReason);ee.bundleReason=s;let i=Object.keys(r);if(i.length===0)return null;let a=null;if(e.fileHashes&&e.fileHashes.size>0){a=new Map;for(let[A,E]of e.fileHashes){let T=o.get(A);T!==void 0&&a.set(T,E)}}let l=Js(a),p=l.size>0||[...e.fileHashes??[]].some(([A,E])=>t.origToStripped.has(A)&&Xu(E).length>0),d=p&&ee.bundleIssues,f=new Map,m=new Map,h=new Map,b=new Map;for(let[A,E]of d?l:[]){let T={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},I=new Set,U=new Set,K=[];for(let Q of E){T[Q.severity]=(T[Q.severity]||0)+1,I.add(Q.severity);let ze=c.triage.get(j(Q))?.color??"none";U.add(ze),K.push({severity:Q.severity,color:ze})}f.set(A,T),m.set(A,I),h.set(A,U),b.set(A,K)}let y=["matrix","flow"].includes(ee.bundleLayout)||f.size===0?null:Kl(r,f),w=new Map;for(let[A,E]of o)w.set(E,A);let v=Ot(e),x=new Map(v?[...e.bundle.modules].map(([A,E])=>[A,{directory:A,version:typeof E.version=="string"?E.version:void 0}]):[]),k=A=>{let E=w.get(A)??A;return Kr(E,{packageDir:v?.get(E)})},$=i.filter(A=>k(A)==="__own__"),S=Il(e,o,k,v,t.origToStripped),C=new Set;for(let A of i)if(C.add(k(A)),C.size>=3)break;let R=C.size>=3,L=i;if(ee.focusedPkg){let A=i.filter(E=>k(E)===ee.focusedPkg);A.length>0?L=A:ee.focusedPkg=null}return ee.selected&&!Object.hasOwn(r,ee.selected)&&(ee.selected=null),{treeData:r,files:L,ownCounts:f,transitiveCounts:y,severitySets:m,colorSets:h,fileFindings:b,options:{pkgOf:k,packageInfoOf:A=>x.get(v?.get(w.get(A)??A))},strippedToOrig:w,canPackagesView:R,hasIssues:p,issuesShown:d,viewId:e.integrity??null,supportsLayers:!0,layerRoots:S,flowEntries:ee.bundleLayout==="flow"?av(e,o,t.origToStripped,v):void 0,ownSourcePackages:ov(o,k,v),entryPackages:sv(e,o,k),ownSourceFiles:new Set($),reasons:[...n.keys()]}}function RM(){if(!Za)return;let e=Ts();e&&e.refreshSidebar(Za,{isBundleContext:!0,findingsJump:!_()})}function MM(){if(!Za)return;let e=Ts();e&&e.refreshTopPkgs(Za)}function TM(e){Za=e}function tP(e,t,n){let r=new Map,o=new Map,s=0;for(let{path:a,size:l,pkgDir:p}of e){if(typeof l!="number"||l<=0)continue;let d=Kr(a,{packageDir:p});r.set(d,(r.get(d)??0)+l),o.has(d)||o.set(d,nM(n,p)),s+=l}if(s===0)return g;let i=[...r.entries()].toSorted((a,l)=>+(l[0]==="__own__")-+(a[0]==="__own__")||(t==="size"?l[1]-a[1]:0)||Ho(a[0]).localeCompare(Ho(l[0]))||a[0].localeCompare(l[0]));return u`<div class="bundles-dist"><div class="bundles-dist-bar" aria-hidden="true">${Z(i,([a])=>a,([a,l])=>u`<span class="bundles-dist-seg" style="${le({flexGrow:l,background:Sn(a)})}" data-tooltip="${a==="__own__"?g:`${a}: ${ge(l)}`}"></span>`)}</div><ul class="bundles-dist-list">${Z(i,([a])=>a,([a,l])=>{let p=(l/s*100).toFixed(1),d=Ho(a),f=Sn(a),m=o.get(a);return u`<li><span class="bundles-dist-dot" style="${le({background:f})}"></span> ${m?u`<button type="button" class="bundles-dist-pkg" aria-haspopup="dialog" aria-label="${`Show dependency chains for ${d}`}" @click="${()=>nP(n,m)}" data-tooltip-truncated data-tooltip="${a}">${d}</button>`:u`<span class="bundles-dist-pkg" data-tooltip-truncated data-tooltip="${a==="__own__"?g:a}">${d}</span>`} <span class="bundles-dist-bar-row" aria-hidden="true"><span class="bundles-dist-bar-fill" style="${le({width:`${p}%`,background:f})}"></span> </span><span class="bundles-dist-size">${ge(l)}</span> <span class="bundles-dist-percent">${p}%</span></li>`})}</ul></div>`}function nP(e,t){let n=c.currentManagedTeam,r=c.currentWorkspace,o=c.managedSession&&rt(c.managedSession);return Vu({details:e,...t,isCurrent:()=>c.currentView==="bundles"&&c.selectedBundle===e.integrity&&(c.bundleDetails&&rt(c.bundleDetails))===rt(e)&&c.currentWorkspace===r&&c.currentManagedTeam===n&&(c.managedSession&&rt(c.managedSession))===o})}function Oy(e,t,n,r,o,s,{bundleSize:i=null,unpackedSize:a=null,resources:l=null,details:p=null,leadColumn:d=null,trailColumns:f=g,summaryExtra:m=g,fileTag:h=null,fileIcon:b=null,fileFlags:y=null,overviewClass:w="",fileFilter:v=null,lines:x=null,sized:k=($,S,C)=>C}={}){let{prefix:$,stripped:S}=Qn(n),C=V=>o?.get(n[V]),R=new Set;for(let V=0;V<S.length;V++)R.add(Kr(n[V],{packageDir:C(V)}));let L=S.map((V,ue)=>ue).filter(V=>!v||v.keeps(n[V])),A=V=>y?.(n[V])??[],E=L.some(V=>A(V).length>0),T=c.bundleOverviewFilesSort==="flags"&&!E?"name":c.bundleOverviewFilesSort,I=T==="flags"?a_(L,A,V=>S[V]):L.toSorted((V,ue)=>(T==="size"?(r[ue]??-1)-(r[V]??-1):0)||S[V].localeCompare(S[ue])),U=n.map((V,ue)=>({path:V,size:r[ue],pkgDir:C(ue)})),K=c.bundleOverviewPackagesSort,Q=tP(U,K,p),ze=Q===g?u`<p class="bundles-overview-col-empty">No size information for this bundle's sources.</p>`:Q,We={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Ke=0,Ce=new Map;if(c.bundleDetails?.fileHashes){let V=Js(c.bundleDetails.fileHashes,"issues");for(let ue of V.values())for(let wt of ue){We[wt.severity]!==void 0&&We[wt.severity]++,Ke++;for(let Eo of Ai(wt.fileHash,wt))Ce.set(Eo,(Ce.get(Eo)??0)+1)}}let yt=[...Ce.keys()].toSorted(),Nr=et.filter(V=>We[V]>0).map(V=>u`<span class="${`tree-count-chip ${V}`}">${We[V]} ${V.replaceAll("_"," ")}</span>`),np=n.length>0?u`<ul class="bundles-sources-list">${I.map(V=>{let ue=n[V],wt=r[V],Eo=u`${b?b(ue):g}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${ue}">${S[V]}</span> ${h?h(ue):g} ${wt==null?g:u`<span class="bundles-source-size">${ge(wt)}</span>`}`;return u`<li>${l?.has(ue)?u`<div class="bundles-source-row is-resource">${Eo}</div>`:u`<button type="button" class="bundles-source-row" data-bundle-view-source="${ue}">${Eo}</button>`}</li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,rp=yt.length>0?u`<ul class="bundles-reports-list">${yt.map(V=>{let ue=ye[Ae(V)]??ye.default,wt=Ce.get(V)??0;return u`<li><button type="button" class="report-chip bundles-report-chip" data-bundle-issue-report="${V}">${W(ue)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${V}">${oe(V)}</span> <span class="bundles-report-count">${wt} ${wt===1?"issue":"issues"}</span></button></li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No matching reports indexed yet.</p>`,Hn=n.length-(l?.size??0);return u`<div class="bundles-overview ${w}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e($)}<dl class="bundles-detail-meta is-build">${t}<dt>Sources</dt><dd>${x==null?k("files",Hn,Hn):u`${k("files",Hn,`${Hn} ${Hn===1?"file":"files"}`)} · ${k("lines",x,`${x.toLocaleString("en")} LoC`)}`}</dd>${i==null?g:u`<dt>Size</dt><dd>${ge(i)}</dd>`} ${a==null?g:u`<dt>Unpacked</dt><dd>${k("unpacked",a,ge(a))}</dd>`} ${l?.size?u`<dt>Resources</dt><dd>${l.size}</dd>`:g}</dl>${s??g}</div>${Ke>0?u`<div class="bundles-issue-summary tree-count-chips">${Nr}</div>`:g} ${m}</div><div class="bundles-overview-columns">${d??Ln({title:"Packages",count:R.size,body:ze,tools:u`<span class="bundles-overview-sort" role="group" aria-label="Package order">${[["name","Name"],["size","Size"]].map(([V,ue])=>u`<button type="button" aria-pressed="${String(K===V)}" @click="${()=>{c.bundleOverviewPackagesSort=V,O()}}">${ue}</button>`)}</span>`})} ${Ln({title:"Files",count:v?`${I.length} of ${n.length}`:n.length,body:np,list:!0,extra:v?u`<button type="button" class="bundles-overview-filter" aria-label="${`Show every file, not only ${v.label}`}" @click="${v.clear}">${v.label}<span aria-hidden="true">×</span></button>`:g,tools:u`<span class="bundles-overview-sort" role="group" aria-label="File order">${[["name","Name"],["size","Size"],...E?[["flags","Flags"]]:[]].map(([V,ue])=>u`<button type="button" aria-pressed="${String(T===V)}" @click="${()=>{c.bundleOverviewFilesSort=V,O()}}">${ue}</button>`)}</span>`})} ${yt.length>0?Ln({title:"Reports",count:yt.length,body:rp,list:!0}):g} ${f}</div></div>`}var Ay=new Map,Ey=new Set,IM=()=>u`<button type="button" class="bundle-source-wrap-toggle" data-bundle-source-wrap hidden aria-pressed="${c.bundleSourceWrap?"true":"false"}" aria-label="Wrap lines" data-tooltip="Wrap lines">${Ax}</button>`;function rP(e){let t=e?.status;return u`<button type="button" class="${q({"bundle-source-pretty-toggle":!0,"is-loading":t==="loading","is-error":t==="error"})}" data-bundle-source-pretty aria-pressed="${c.bundleSourcePretty?"true":"false"}" aria-busy="${t==="loading"?"true":g}" aria-label="Pretty-print" data-tooltip="${XS(e)}">${YS}</button>`}function Py(e,t,n,r,o,s){let i=ZS(e,t,n,r),a=i?n1(e,t,n,r,()=>{c.bundleSourceFile===n&&O()}):null,l=a?.status==="ready";return{pretty:l,toggle:i?rP(a):g,content:l?a.text:r,fileFindings:l?[]:o,lineFindings:l?new Map:s}}var zn=null;function Ku(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function oP(e){requestAnimationFrame(()=>requestAnimationFrame(()=>{document.querySelector(`.bundle-code-main .bundle-source-lineno-row[data-line="${e}"]`)?.scrollIntoView({block:"center"})}))}function Io(e){for(let t of et)for(let n of e)if(n.severity===t)return t;return e[0]?.severity??null}var Fy={content:"",parts:""};function sP(e){if(Fy.content===e)return Fy.parts;let t=e;if(e.length>Ed||xs(e)){let n=o=>[Fd(o)].flat();t=[];let r=0;for(let o=0;o<e.length;){let s=e.indexOf(`
|
|
192
|
-
`,o),i=s===-1?e.length:s+1;(s===-1?i:s)-o>
|
|
193
|
-
`).length,l=c.bundleSourceTargetLine,p=!i&&l&&l.path===t&&l.bundle===(n?.integrity??null)?l.line:null,d=p==null?null:Math.max(l.end??p,p),f=String(a).length,m=
|
|
194
|
-
Variant ${w.variant}`:y.node.sourcePath
|
|
195
|
-
`);for(let b=0;b<h.length;b++){let y=s.ranges(h[b]);if(y.length!==0&&(m.push({ln:b+1,text:h[b],ranges:y}),p++,m.length>=i))break}if(m.length>0&&l.push({path:d,hits:m}),l.length>=a)break}return l.length===0?u`<div class="bundle-code-search-empty">No matches.</div>`:u`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${p} ${p===1?"hit":"hits"} in ${l.length} ${l.length===1?"file":"files"}</div>${l.map(({path:d,hits:f})=>{let m=
|
|
196
|
-
`).length;return`${t.toLocaleString()} ${t===1?"line":"lines"} \xB7 ${ge(wn(e))}`}function
|
|
197
|
-
`);for(let a=0;a<i.length;a++)o.ranges(i[a]).length>0&&s.add(a+1);return s}function RP(e,t,n,r){let o=c.bundleSourceFile;if(!o)return g;let s=t.get(o),{fileFindings:i,lineFindings:a}=Dy(e,o,s),l=Py(e,r,o,s,i,a);return u`<aside class="bundle-search-side">${AM(o,null,l.toggle)}<div class="bundle-source-body">${zy(o,l.content,e,l.fileFindings,l.lineFindings,l.pretty?null:n,!1,l.pretty)}</div></aside>`}function MP(e,t=null){let n=Lt(e);if(n.size===0)return u`<div class="bundle-search-view"><div class="bundle-code-empty">This bundle doesn't carry any source content.</div></div>`;let r=c.bundleSearchQuery,o=c.bundleSearchRegex,s=c.bundleSearchCase,i=null;if(c.bundleSourceFile){let l=_P(n.get(c.bundleSourceFile),r,o,s);l&&l.size===0?(c.bundleSourceFile=null,c.bundleSourceFindingIdx=null):i=l}let a=c.bundleSearchContext;return u`<div class="bundle-search-view"><div class="bundle-search-bar-row"><bundle-search></bundle-search><mode-switch data-bundle-search-context label="Context" .checked="${a}" accessible-label="Toggle context lines"></mode-switch></div><div class="bundle-search-main">${CP(e,n,r,o,s,a)} ${RP(e,n,i,t)}</div></div>`}var hn=(e,t,n)=>u`<button type="button" class="${q({"bundles-tab":!0,active:n===e})}" data-bundle-tab="${e}" aria-selected="${String(n===e)}" role="tab">${t}</button>`;function TP(e){let t=!!e.npm;t&&!xl.has(c.bundleDetailsTab)&&(c.bundleDetailsTab="overview");let n=!t&&pM(e,c.bundleDetails,c.bundleDetailsTab==="advisories");c.bundleDetailsTab==="advisories"&&!n&&(c.bundleDetailsTab="overview");let r=t||c.bundleDetailsTab==="compare"||Is(c.bundles??[],c.selectedBundle).length>0,o=!_();c.bundleDetailsTab==="issues"&&!o&&(c.bundleDetailsTab="overview");let s=c.bundleDetailsTab,i=s==="overview",a=c.bundleDetails,l=!!(a&&a.integrity===e.integrity),p=l&&!a.error&&!!(a.json||a.bundle)&&!(a.metadataOnly&&Xn(s));return s==="advisories"&&n&&p&&a.kind==="stasis"&&Gu(a,O).catch(()=>{}),u`<div class="bundles-view bundles-slide-view"><bundle-slide-header class="bundles-slide-header"><header class="bundles-slide-bar">${_()&&e.managedId&&e.repoId==null?u`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-bundles"},bubbles:!0,composed:!0}))}">Bundles</button> <span aria-hidden="true">></span></span>`:g} ${t?u`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>xr()}">npm</button> <span aria-hidden="true">></span></span>`:g} <span class="bundles-slide-icon" aria-hidden="true">${W(t?Lo:Fo)}</span><div class="bundles-slide-title">${t?u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.npm.name}">${e.npm.name}</div><npm-version-select .name="${e.npm.name}" .version="${e.npm.version}" .tab="${s}" .list="${nu(e.npm.name)}"></npm-version-select>`:u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.name}">${e.name}</div>`}</div><button type="button" class="bundles-download-btn bundles-scan-button" ?hidden="${!Xa(e)}" @click="${()=>{Wu(e)}}">${W(Vn)}<span>Scan</span></button><div class="bundles-slide-tabs" role="tablist">${n?hn("advisories","Advisories",s):g} ${o?hn("issues","Issues",s):g} ${t?g:hn("terminal","Terminal",s)} ${hn("treemap","Treemap",s)} ${t?g:hn("graph","Graph",s)} ${hn("code","Code",s)} ${t?g:hn("search","Search",s)} ${r?hn("compare","Compare",s):g} ${t&&c.managedSession&&!c.managedSession.publicShare&&c.managedTeams?.some(d=>d.dependencyReview===!0)?hn("review","Review",s):g} ${hn("overview","Overview",s)}</div></header></bundle-slide-header><div class="${q({"bundles-slide-body":!0,"bundles-slide-body-overview":i})}">${i?BP(e,a):p?Hg(s,[["terminal",()=>u`<div id="bundle-terminal-slot" class="bundle-terminal-slot"></div>`],["graph",()=>u`<div id="bundle-graph-slot" class="bundle-graph-slot"></div>`],["treemap",()=>u`<bundle-treemap .details="${a}"></bundle-treemap>`],["code",()=>hP(a,e)],["search",()=>MP(a,e)],["review",()=>u`<npm-review .entry="${e}" .details="${a}" .request="${c.npmReview}" .session="${c.managedSession}" .source="${vb(e)}"></npm-review>`],["compare",()=>u`<bundle-compare .details="${a}" .integrity="${e.integrity}" .request="${c.bundleCompare}" .source="${t?vb(e):null}"></bundle-compare>`],["issues",()=>AP(a)],["advisories",()=>gM(a,O,Xa(e)?()=>{Wu(e,{mode:"dependencies"})}:null)]]):l&&a.sourceError?u`<div class="bundles-slide-placeholder is-error">${a.sourceError} <button type="button" data-bundle-retry-sources>Retry</button></div>`:l&&!a.metadataOnly?u`<div class="${q({"bundles-slide-placeholder":!0,"is-error":!!a.error})}">${a.error?`Failed to parse: ${a.error}`:"Bundle contents not parsed."}</div>`:u`<div class="bundles-slide-placeholder">Loading bundle…</div>`}</div></div>`}function IP(e,t={}){if(!e)return g;let n=[];if(e.fileHash&&(n=Ai(e.fileHash,e)),n.length===0&&t.bucketKey&&(t.kind==="package"?n=$f(t.bucketKey,e):t.kind==="repository"&&(n=kf(t.bucketKey,e))),n.length===0)return g;let r=n.slice(0,2),o=n.length-r.length;return u`<div class="bundle-issue-reports">${r.map(s=>{let i=De[Ae(s)]??De.default;return u`<button type="button" class="report-chip" data-bundle-issue-report="${s}">${W(i)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${s}">${oe(s)}</span></button>`})} ${o>0?u`<span class="bundle-issue-reports-more">, and ${o} more…</span>`:g}</div>`}function NM(e){if(e==null||e==="")return"";let t=String(e),n=t.indexOf("-");if(n>0){let o=parseInt(t.slice(0,n),10),s=parseInt(t.slice(n+1),10);return Number.isFinite(o)&&Number.isFinite(s)&&s>o?`Lines ${o}-${s}`:Number.isFinite(o)?`Line ${o}`:""}let r=parseInt(t,10);return Number.isFinite(r)?`Line ${r}`:""}function Ys(e,t){return u`<div class="bundle-issues-empty"><p class="bundle-issues-empty-primary">${e}</p>${t?u`<p class="bundle-issues-empty-hint">${t}</p>`:g}</div>`}function AP(e){if(e.managedId)return Ys("Open a report to review its findings.","Bundle metadata includes source hashes; reports are available through your teams.");if(!e.fileHashes)return Ys("Computing file hashes\u2026","Hashing this bundle's sources so findings from your reports can be matched against them.");if(e.fileHashes.size===0)return Ys("This bundle doesn't carry any source content.","Issues are matched by source-file hash, so a bundle without inline sources has nothing to match findings against.");let t=Js(e.fileHashes,"issues");if(t.size===0){let n=Q2();if(n===0)return Ys("No issues match this bundle's files.","Issues are analyzer findings matched to this bundle by source-file hash. No hash-carrying findings are indexed yet \u2014 hash matching needs the analyzer's native JSON reports; drop one and any matches will appear here automatically.");let r=0;for(let o of e.fileHashes.values())r+=Xu(o).length;return r>0?Ys("All matching issues are dismissed.",`${r} ${r===1?"finding matches":"findings match"} this bundle's files, but every one is triaged invalid or deleted.`):Ys("No issues match this bundle's files.",`None of the ${n.toLocaleString()} indexed ${n===1?"finding":"findings"} reference a source file in this bundle \u2014 matching compares exact file hashes, so findings from a different build of the same project won't line up.`)}return Qa(t,{kind:"bundle"})}function Qa(e,{kind:t,bucketKey:n}={}){let r=[...e.keys()],{prefix:o,stripped:s}=Qn(r),i=new Map(r.map((p,d)=>[p,s[d]])),a=[...e.entries()].toSorted(([p,d],[f,m])=>{let h=_e[Io(d)]??0,b=_e[Io(m)]??0;return b!==h?b-h:(i.get(p)??p).localeCompare(i.get(f)??f)}),l=[...e.values()].reduce((p,d)=>p+d.length,0);return u`<div class="bundle-issues"><div class="bundle-issues-summary">${l} ${l===1?"issue":"issues"} across ${e.size} ${e.size===1?"file":"files"} ${o?u`<span class="mono">${o}</span>`:g}</div><ul class="bundle-issues-list">${Z(a,([p])=>p,([p,d])=>{let f=i.get(p)??p,m=[...d].toSorted((b,y)=>{let w=_e[b.severity]??0,v=_e[y.severity]??0;if(v!==w)return v-w;let x=parseInt(b.line,10)||0,k=parseInt(y.line,10)||0;return x-k}),h=t==="repository"&&n?`${/^https?:/iu.test(n)?n.replace(/\/$/u,""):`https://github.com/${n}`}/blob/HEAD/${p}`:null;return u`<li class="bundle-issues-file-group"><header class="bundle-issues-file-header">${t==="bundle"?u`<button type="button" class="bundle-issues-file-name mono" data-bundle-view-source="${p}" data-tooltip-truncated data-tooltip="${p}">${f}</button>`:h?u`<a class="bundle-issues-file-name bundle-issues-file-name-link mono" href="${h}" target="_blank" rel="noopener" data-tooltip-truncated data-tooltip="${p}">${f}</a>`:u`<span class="bundle-issues-file-name bundle-issues-file-name-static mono" data-tooltip-truncated data-tooltip="${p}">${f}</span>`} <span class="bundle-issues-file-count">${d.length} ${d.length===1?"issue":"issues"}</span></header><ul class="bundle-issues-findings">${Z(m,b=>JSON.stringify([b.id??`${p}\0${b.line??""}\0${b.severity??""}\0${b.description??""}`,ct(b)]),b=>{let y=d.indexOf(b),w=b.severity,v=NM(b.line),x=Me(b,c.triage.get(j(b))),k=x==="fixed"||x==="invalid"||x==="deleted"?x.toUpperCase():x==="inprogress"?"In progress":x==="ignored"?"Ignored":null,$=u`<div class="bundle-issues-finding-head"><span class="${`bundle-issue-sev sev-${w}`}">${w.replaceAll("_"," ")}</span> ${v?u`<span class="bundle-issues-finding-line">${v}</span>`:g} ${k?u`<span class="${`bundle-issues-finding-triage triage-${x}`}">${k}</span>`:g} <span class="bundle-issues-finding-spacer"></span> ${IP(b,{kind:t,bucketKey:n})}</div><div class="bundle-issues-finding-desc">${it(dl(b),{paragraphs:!1})}</div>`;return u`<li class="bundle-issues-finding">${t==="bundle"?u`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${p}" data-bundle-view-finding-idx="${y}" data-bundle-view-line="${b.line??""}">${$}</button>`:u`<div class="bundle-issues-finding-link bundle-issues-finding-static">${$}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function BM(e){let t=c.selectedBundle,n=t?e.find(r=>r.integrity===t):null;return n?TP(n):u`<div class="bundles-view bundles-view-empty"><p class="bundles-empty-hint">Pick a bundle from the sidebar to open it.</p></div>`}var qu=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v8"/><path d="m4.5 7 3.5 3.5L11.5 7"/><path d="M2.5 13h11"/></svg>`,EP=u`<svg viewBox="0 0 24 24" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M0 0v24H8.222l2.089-2.373 2.09-2.374V13.2H18.978l2.51-2.488L24 8.223V0H12zm5.2 5.2h13.791L12.2 12c-3.735 3.74-6.838 6.8-6.896 6.8-.057 0-.104-3.06-.104-6.8zm8.4 8.8v10H24V14h-5.2z"/></svg>`,kM=Object.freeze({javascript:"#f1e05a",jsx:"#f1e05a",typescript:"#3178c6",tsx:"#3178c6",json:"#f1e05a",css:"#663399",markup:"#e34c26",yaml:"#cb171e",bash:"#89e051",markdown:"#083fa1",solidity:"#AA6746",php:"#4F5D95",rust:"#dea584",ruby:"#701516",java:"#b07219",cpp:"#f34b7d",c:"#555555",objectivec:"#438eff",python:"#3572A5",go:"#00ADD8",kotlin:"#A97BFF",swift:"#F05138",dart:"#00B4AB",sql:"#e38c00",lua:"#000080",csharp:"#178600",scala:"#DC322F",vue:"#41B883",svelte:"#FF3E00"}),xM=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"]);function SM(e){if(kM[e])return kM[e];let t=0;for(let n of e)t=Math.imul(t,31)+n.codePointAt(0)|0;return xM[(t>>>0)%xM.length]}function FP(e){let t=e.currentTarget,n=e.target.closest?.(".bundles-languages-segment");!n||!t.contains(n)||(t.dataset.tooltip=n.dataset.languageTooltip??"",fv(t))}function LP(e){delete e.currentTarget.dataset.tooltip,mv()}var PM=e=>e.codeStats??=qw(e.npm?new Map([...gi(e)].filter(([t])=>!Ca.test(t.slice(t.lastIndexOf("/")+1)))):gi(e),xn(e));function DM(e,{legend:t=!1}={}){if(!(e?.kind==="stasis"&&e.bundle)&&!(e?.npm&&e.json))return g;let n=PM(e),r=n.lines,o=n.languages.filter(a=>a.lines>0);if(r<=0||o.length===0)return g;let s=a=>{let l=a/r*100;return l<.1?"<0.1":l<1?l.toFixed(1):l.toFixed(0)},i=t?u`<ul class="bundles-languages-legend">${o.slice(0,4).map(({key:a,label:l,lines:p})=>u`<li><span class="bundles-languages-swatch" style="${le({background:SM(a)})}"></span>${l}<span class="bundles-languages-share">${s(p)}%</span></li>`)}</ul>`:g;return u`<div class="bundles-languages-bar" data-tooltip-managed aria-label="Languages in this bundle" @pointerover="${FP}" @pointerleave="${LP}">${o.map(({key:a,label:l,lines:p})=>u`<span class="bundles-languages-segment" style="${le({flexGrow:p,background:SM(a)})}" data-language-tooltip="${`${l} \xB7 ${s(p)}% \xB7 ${p.toLocaleString()} LoC`}"></span>`)}</div>${i}`}async function OP(e){try{await(await D()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function NP(e,t){let n=jR(t),r=DM(t);return u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${e.managedId?vn()?u`<button type="button" class="bundles-download-btn" @click="${()=>{OP(e)}}">${qu}<span>Download bundle</span></button>`:u`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${qu}<span>Download bundle</span></a>`:u`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${qu}<span>Download bundle</span></button>`} ${n?u`<div class="bundles-export-pair"><button type="button" class="bundles-download-btn" data-bundle-export-sbom="cyclonedx" data-tooltip="Export a CycloneDX SBOM (.cdx.json)">CycloneDX</button> <button type="button" class="bundles-download-btn" data-bundle-export-sbom="spdx" data-tooltip="Export an SPDX SBOM (.spdx.json)">${EP}<span>SPDX</span></button></div>`:g}</div>${r}</div>`}function Yu(e,t,{placeholder:n=g,overviewClass:r=""}={}){return u`<div class="bundles-overview ${r}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e}${t}</div></div>${n}</div>`}function By(e){let t=e.filter(n=>typeof n=="number");return t.length>0?t.reduce((n,r)=>n+r,0):null}function BP(e,t){if(e.npm)return PP(e,t);let n=t?.integrity===e.integrity,r=e.summary?.commit,o=n?!t.error&&t.kind==="stasis"?t.bundle:null:e.managedId&&e.repoFullName&&r?{repo:{github:e.repoFullName,directory:e.repoDirectory??"",commit:r}}:null,s=n?t.size:e.managedId?e.size:null,i=(l="",p=!1)=>u`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd>${e.managedId?u`<dt>Repository</dt><dd>${e.repoFullName||"Unattached"}</dd>${e.repoId==null?g:u`<dt>Directory</dt><dd class="mono">/${e.repoDirectory??""}</dd>`}`:g} ${Od(o,l,e.commitInfo).map(d=>u`<dt>${d.label}</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${d.href}" target="_blank" rel="noopener noreferrer">${d.label==="GitHub"?W(Kt):g}<span>${d.text}</span></a> ${d.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${d.commit.href}" data-tooltip="${d.commit.hash}" data-tooltip-icon="commit" data-tooltip-commit-info="${Es(e.commitInfo,d.commit.hash)??g}" target="_blank" rel="noopener noreferrer">${W(al)}<span>${d.commit.text}</span></a>`:g} ${d.commit?.tags?u`<span class="bundle-origin-tags">${d.commit.tags.map(f=>u`<a class="bundle-origin-link bundle-tag-link" href="${f.href}" target="_blank" rel="noopener noreferrer">${W(ll)}<span>${f.name}</span></a>`)}</span>`:g}</dd>`)}<dt>Integrity</dt><dd class="mono bundle-integrity">${e.integrity}</dd>${l?u`<dt>Prefix</dt><dd class="mono">${l}</dd>`:g} ${o?.entries?.size>0?u`<dt>${o.entries.size===1?"Entry":"Entries"}</dt><dd class="mono"><ul class="bundles-entry-points">${[...o.entries].map(d=>u`<li><button type="button" class="bundle-entry-point" data-bundle-view-source="${d}">${Lr(d,l)}</button></li>`)}</ul></dd>`:g} ${p&&Number.isSafeInteger(s)?u`<dt>Size</dt><dd>${ge(s)}</dd>`:g}</dl>`,a=NP(e,t);if(!n)return Yu(i("",!0),a);if(t.error)return Yu(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder is-error">Failed to parse: ${t.error}</div>`});if(t.kind==="sourcemap"&&t.json){let l=t.json,p=xn(t),d=l.sources??[...p.keys()],f=t.sourceSizes??(p.size===d.length?d.map(h=>p.get(h)??null):d.map((h,b)=>typeof l.sourcesContent?.[b]=="string"?wn(l.sourcesContent[b]):null)),m=u`<dt>Version</dt><dd>${String(l.version??"?")}</dd>${l.file?u`<dt>Output</dt><dd class="mono">${l.file}</dd>`:g} ${l.sourceRoot?u`<dt>Source root</dt><dd class="mono">${l.sourceRoot}</dd>`:g} ${l.names||t.namesCount!=null?u`<dt>Names</dt><dd>${l.names?.length??t.namesCount}</dd>`:g}`;return Oy(i,m,d,f,null,a,{bundleSize:t.size,unpackedSize:By(f)})}if(t.kind==="stasis"&&t.bundle){let l=t.bundle,p=xn(t),d=Qw(t),f=[...d.keys()],m=new Set(f.filter(v=>d.get(v)==="resource")),h=new Set;for(let v of l.imports.keys()){let x=v.replace(/\s*\(with: .*\)\s*$/u,"");for(let k of x.split(", "))h.add(k)}let b=[...h].toSorted(),y=f.map(v=>p.get(v)),w=u`<dt>Version</dt><dd>${String(l.version)}</dd>${b.length>0?u`<dt>Resolution kinds</dt><dd>${b.join(", ")}</dd>`:g}`;return Oy(i,w,f,y,Ot(t),a,{bundleSize:t.size,unpackedSize:By(y),resources:m,details:t})}return Yu(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`})}function PP(e,t){let n=`/api/npm/download?${new URLSearchParams({name:e.npm.name,version:e.npm.version})}`,r=u`<a class="bundles-download-btn" href="${n}">${qu}<span>Tarball</span></a>`,o=u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${lb(e)}${r}</div></div>`;if(t?.integrity!==e.integrity||!t.json)return Yu(Ah(e,{githubFigures:pb(e),provenance:mb(e),provenanceNamesBuilder:fb(e.npm)}),o,{overviewClass:"npm-overview"});let{sources:s}=t.json,i=xn(t),a=s.map(m=>i.get(m)??null),{paths:l,binaries:p,content:d}=Cr(t),f=db(e.npm);return Oy(m=>Ah(e,{prefix:m,githubFigures:pb(e),provenance:mb(e),provenanceNamesBuilder:fb(e.npm),files:l}),L1(e,l,t),s,a,null,g,{bundleSize:t.size,unpackedSize:By(a),resources:p,leadColumn:u`${F1(e)}${OC(e)}`,trailColumns:i_(p,i),summaryExtra:u`${IC(e,l)}${HC(e,t)}${s_(e,DM(t,{legend:!0}),t)}${AC(e,r,qC(e))}`,overviewClass:"npm-overview",lines:PM(t).lines,sized:(m,h,b)=>Yd(m,d[m],b),fileTag:m=>u`${ub(f.get(m))}${gb(t,m,!0)}`,fileFlags:m=>hb(t,m,f.get(m)),fileIcon:m=>kn(m,p.has(m)?"binary":void 0),fileFilter:DC(e)})}function zM(){xt().catch(()=>{});let e=Zt(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[m,h]of e){let b=[],y=[],w=new Map,v=new Set;for(let[x,k]of h.byVersion){let $=[],S=new Map;for(let C of k.findings){let R=Me(C,c.triage.get(j(C)))??null;R==="inprogress"?t.inprogress++:R==="fixed"?t.fixed++:R==="invalid"?t.invalid++:R==="deleted"?t.deleted++:R==="ignored"&&t.ignored++,R===c.shownTriage&&($.push(C),S.has(C.file)||S.set(C.file,[]),S.get(C.file).push(C))}if($.length!==0){b.push([x,{findings:$,files:S,reports:k.reports}]);for(let C of $)y.push(C),w.has(C.file)||w.set(C.file,[]),w.get(C.file).push(C);for(let C of k.reports)v.add(C)}}b.length!==0&&(b.sort(([x],[k])=>gf(x,k)),n.push([m,{findings:y,files:w,reports:v,versions:b}]))}let r=c.selectedPackage,o=r?n.find(([m])=>m===r)??null:null,s=null;if(o){let m=o[1].versions,h=c.selectedPackageVersion;s=m.find(([b])=>b===h)??null,!s&&m.length===1&&(s=m[0])}let i=s?s[1]:o?o[1]:null;if(o&&c.packageDetailsTab==="issues")return jP(o[0],i,s?s[0]:void 0);let a=c.packagesSearchQuery.trim().toLowerCase(),l=a?n.filter(([m])=>m.toLowerCase().includes(a)):n.slice();UP(l,c.packagesSortBy);let p=n.reduce((m,[,h])=>m+h.findings.length,0),d=new Set;for(let[,m]of n)for(let h of m.reports)d.add(h);let f=o?"packages-layout open":"packages-layout";return u`<div class="${q({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${l.length===n.length?u`${n.length} ${n.length===1?"package":"packages"}`:u`${l.length} of ${n.length} ${n.length===1?"package":"packages"}`}</span> ${p>0?u`<span>${p} ${p===1?"finding":"findings"} across ${d.size} ${d.size===1?"report":"reports"}</span>`:g}</div></div>${WP(t)}</header>${n.length===0?u`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":c.shownTriage?`No ${c.shownTriage} findings in any package.`:"No untriaged findings in any package."}</p>`:l.length===0?u`<p style="color:var(--muted)">No packages match "${c.packagesSearchQuery}".</p>`:u`<div class="${f}"><ul class="packages-list">${Z(DP(l),zP,m=>GP(m,r,c.selectedPackageVersion))}</ul>${o?u`<aside class="packages-details" id="packages-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-package aria-label="Close details">×</button></header><div class="packages-details-body">${YP(o[0],i,s?s[0]:void 0)}</div></aside>`:g}</div>`}</div>`}function DP(e){let t=[];for(let[n,r]of e){let o=r.versions;if(o.length<=1){let[l,p]=o[0];t.push({kind:"single",pkg:n,version:l,bucket:p,totalVersions:1});continue}let[s,i]=o[0],a=c.expandedPackages.has(n);if(t.push({kind:"latest",pkg:n,version:s,bucket:i,totalVersions:o.length,expanded:a}),a)for(let l=1;l<o.length;l++){let[p,d]=o[l];t.push({kind:"other",pkg:n,version:p,bucket:d,totalVersions:o.length})}}return t}function zP(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function WP(e){return u`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${HP}"></triage-selector></div>`}var HP=["inprogress","fixed","invalid","deleted","ignored"];function UP(e,t){let n=t==="name-asc"?(r,o)=>r[0].localeCompare(o[0]):t==="files-desc"?(r,o)=>o[1].files.size-r[1].files.size||r[0].localeCompare(o[0]):t==="reports-desc"?(r,o)=>o[1].reports.size-r[1].reports.size||r[0].localeCompare(o[0]):(r,o)=>o[1].findings.length-r[1].findings.length||r[0].localeCompare(o[0]);e.sort(n)}function VP(e,t){let n={live:0,invalid:0,deleted:0};if(!e)return n;let r=t===void 0?e.files.values():e.byVersion.get(t)?.files.values()??[].values();for(let o of r)for(let s of o){let i=Me(s,c.triage.get(j(s)))??null;i==="invalid"?n.invalid++:i==="deleted"?n.deleted++:n.live++}return n}function jP(e,t,n){let r=Zt().get(e),o=VP(r,n),s=c.packageSlideTriage??"live",i=r?WM(r,e,s,n):new Map,a=[...i.values()].reduce((f,m)=>f+m.length,0),l=s==="live"?a===1?"issue":"issues":a===1?`${s} issue`:`${s} issues`,p=s==="live"?"No live issues for this package.":`No ${s} issues for this package.`,d=typeof n=="string"?` @ ${n}`:"";return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="package-slide-back" aria-label="Back to packages">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${`${e}${d}`}">${e}${d}</div><div class="bundles-slide-integrity">${a} ${l} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="package" .counts="${o}"></slide-triage-tabs></header><div class="bundles-slide-body">${i.size===0?u`<div class="bundle-issues-empty">${p}</div>`:Qa(i,{kind:"package",bucketKey:e})}</div></div>`}function GP(e,t,n){let{kind:r,pkg:o,version:s,bucket:i}=e,a={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let b of i.findings){let y=de(b,c.severityMode);a[y]!==void 0&&a[y]++}let l=et.filter(b=>a[b]>0),p=Sn(o),f={selected:o===t&&KP(e,n),"packages-row-latest":r==="latest","packages-row-other":r==="other"},m=s===null?"":s,h=s===null?`Open issues for ${o}`:`Open issues for ${o}@${s}`;return u`<li class="${q(f)}" data-select-package="${o}" data-select-package-version="${m}"><span class="packages-dot" style="${le({background:p})}"></span><div class="packages-row-text"><div class="packages-name-line"><span class="packages-name" data-tooltip-truncated data-tooltip="${s===null?o:`${o}@${s}`}">${o}${s===null?g:u`<span class="packages-version">@${s}</span>`} </span>${r==="latest"?qP(o,e.expanded,e.totalVersions-1):g}</div><span class="packages-row-meta">${i.findings.length} ${i.findings.length===1?"finding":"findings"} · ${i.files.size} ${i.files.size===1?"file":"files"} · ${i.reports.size} ${i.reports.size===1?"report":"reports"}</span></div>${l.length>0?u`<div class="packages-row-chips">${l.map(b=>u`<span class="${`tree-count-chip ${b}`}" data-tooltip="${b.replaceAll("_"," ")}">${a[b]}</span>`)}</div>`:g} <button type="button" class="packages-row-issues" data-package-row-issues="${o}" data-package-row-issues-version="${m}" aria-label="${h}">Issues →</button></li>`}function KP(e,t){return e.kind==="single"?!0:e.version===t}function qP(e,t,n){let r=t?"Hide":`+${n} ${n===1?"version":"versions"}`;return u`<button type="button" class="${q({"packages-row-expand":!0,expanded:t})}" data-package-expand="${e}" aria-expanded="${String(t)}" aria-label="${t?`Hide older versions of ${e}`:`Show older versions of ${e}`}" data-tooltip="${t?"Hide older versions":`Show older versions (${n})`}"><span class="packages-row-expand-chevron" aria-hidden="true"></span> <span class="packages-row-expand-label">${r}</span></button>`}function YP(e,t,n){let r=Zt().get(e),s=[...(r?WM(r,e,"live",n):new Map).values()].reduce((i,a)=>i+a.length,0);return u`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-package-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${s>0?u`<button type="button" class="bundles-tab bundles-tab-action" data-package-tab="issues">Issues (${s}) →</button>`:g}</div>${XP(e,t,n)}`}function WM(e,t,n="live",r){let o=new Map,s=r===void 0?e.files:e.byVersion.get(r)?.files??new Map;for(let[i,a]of s){let l=a.filter(f=>{let m=Me(f,c.triage.get(j(f)))??null;return n==="invalid"?m==="invalid":n==="deleted"?m==="deleted":m!=="invalid"&&m!=="deleted"});if(l.length===0)continue;let p=HM(t,i);o.has(p)||o.set(p,[]);let d=o.get(p);for(let f of l)d.push(f)}return o}function XP(e,t,n){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let f of t.findings){let m=de(f,c.severityMode);r[m]!==void 0&&r[m]++}let o=et.filter(f=>r[f]>0),s=[...t.files.entries()].toSorted(([f,m],[h,b])=>b.length!==m.length?b.length-m.length:f.localeCompare(h)),i=[...t.reports].toSorted((f,m)=>f.localeCompare(m)),l=Zt().get(e)?.repos,p=l&&l.size===1?[...l][0]:null,d=p?/^https?:/iu.test(p)?p:`https://github.com/${p}`:null;return u`<dl class="packages-detail-meta"><dt>Package</dt><dd class="mono">${e}</dd>${n?u`<dt>Version</dt><dd class="mono">${n}</dd>`:g} ${d?u`<dt>Repository</dt><dd class="mono"><a href="${d}" target="_blank" rel="noopener">${p}</a></dd>`:g}<dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${o.length>0?u`<div class="packages-detail-chips">${o.map(f=>u`<span class="${`tree-count-chip ${f}`}">${r[f]} ${f.replaceAll("_"," ")}</span>`)}</div>`:g}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${i.map(f=>{let m=ye[Ae(f)]??ye.default;return u`<li><button type="button" class="packages-detail-report" data-package-report="${f}">${W(m)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${f}">${oe(f)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${s.map(([f,m])=>{let h=HM(e,f);return u`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${f}">${h}</span> <span class="packages-detail-file-count">${m.length}</span></li>`})}</ul>`}function HM(e,t){for(let n of["node_modules","dependencies"]){let r=`${n}/${e}/`,o=t.indexOf(r);if(o>=0)return t.slice(o+r.length)}return t.startsWith(`${e}/`)?t.slice(e.length+1):t}function UM(){xt().catch(()=>{});let e=to(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[d,f]of e){let m=[],h=new Map;for(let b of f.findings){let y=Me(b,c.triage.get(j(b)))??null;y==="inprogress"?t.inprogress++:y==="fixed"?t.fixed++:y==="invalid"?t.invalid++:y==="deleted"?t.deleted++:y==="ignored"&&t.ignored++,y===c.shownTriage&&(m.push(b),h.has(b.file)||h.set(b.file,[]),h.get(b.file).push(b))}m.length>0&&n.push([d,{findings:m,files:h,reports:f.reports}])}let r=c.selectedRepository,o=r?n.find(([d])=>d===r)??null:null;if(o&&c.repositoryDetailsTab==="issues")return tD(o[0],o[1]);let s=c.repositoriesSearchQuery.trim().toLowerCase(),i=s?n.filter(([d])=>d.toLowerCase().includes(s)||nt(d).toLowerCase().includes(s)):n.slice();QP(i,c.repositoriesSortBy);let a=n.reduce((d,[,f])=>d+f.findings.length,0),l=new Set;for(let[,d]of n)for(let f of d.reports)l.add(f);let p=o?"packages-layout open":"packages-layout";return u`<div class="${q({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Repositories</h1><div class="meta-row"><span>${i.length===n.length?u`${n.length} ${n.length===1?"repository":"repositories"}`:u`${i.length} of ${n.length} ${n.length===1?"repository":"repositories"}`}</span> ${a>0?u`<span>${a} ${a===1?"finding":"findings"} across ${l.size} ${l.size===1?"report":"reports"}</span>`:g}</div></div>${JP(t)}</header>${n.length===0?u`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":c.shownTriage?`No ${c.shownTriage} findings in any repository.`:"No untriaged findings in any repository."}</p>`:i.length===0?u`<p style="color:var(--muted)">No repositories match "${c.repositoriesSearchQuery}".</p>`:u`<div class="${p}"><ul class="packages-list">${Z(i,([d])=>d,([d,f])=>nD(d,f,d===r))}</ul>${o?u`<aside class="packages-details" id="repositories-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-repository aria-label="Close details">×</button></header><div class="packages-details-body">${rD(o[0],o[1])}</div></aside>`:g}</div>`}</div>`}function JP(e){return u`<div class="packages-toolbar"><entity-search kind="repositories"></entity-search><entity-sort kind="repositories"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${ZP}"></triage-selector></div>`}var ZP=["inprogress","fixed","invalid","deleted","ignored"];function QP(e,t){let n=t==="name-asc"?(r,o)=>nt(r[0]).localeCompare(nt(o[0])):t==="files-desc"?(r,o)=>o[1].files.size-r[1].files.size||nt(r[0]).localeCompare(nt(o[0])):t==="reports-desc"?(r,o)=>o[1].reports.size-r[1].reports.size||nt(r[0]).localeCompare(nt(o[0])):(r,o)=>o[1].findings.length-r[1].findings.length||nt(r[0]).localeCompare(nt(o[0]));e.sort(n)}function eD(e){let t={live:0,invalid:0,deleted:0};if(!e)return t;for(let n of e.files.values())for(let r of n){let o=Me(r,c.triage.get(j(r)))??null;o==="invalid"?t.invalid++:o==="deleted"?t.deleted++:t.live++}return t}function tD(e,t){let n=to().get(e),r=eD(n),o=c.repositorySlideTriage??"live",s=n?VM(n,o):new Map,i=[...s.values()].reduce((p,d)=>p+d.length,0),a=o==="live"?i===1?"issue":"issues":i===1?`${o} issue`:`${o} issues`,l=o==="live"?"No live issues for this repository.":`No ${o} issues for this repository.`;return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="repository-slide-back" aria-label="Back to repositories">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${nt(e)}">${nt(e)}</div><div class="bundles-slide-integrity">${i} ${a} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="repository" .counts="${r}"></slide-triage-tabs></header><div class="bundles-slide-body">${s.size===0?u`<div class="bundle-issues-empty">${l}</div>`:Qa(s,{kind:"repository",bucketKey:e})}</div></div>`}function nD(e,t,n){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let a of t.findings){let l=de(a,c.severityMode);r[l]!==void 0&&r[l]++}let o=et.filter(a=>r[a]>0),s=Sn(e),i=nt(e);return u`<li class="${n?"selected":""}" data-select-repository="${e}"><span class="packages-dot" style="${le({background:s})}"></span><div class="packages-row-text"><span class="packages-name" data-tooltip-truncated data-tooltip="${i}">${i}</span> <span class="packages-row-meta">${t.findings.length} ${t.findings.length===1?"finding":"findings"} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</span></div>${o.length>0?u`<div class="packages-row-chips">${o.map(a=>u`<span class="${`tree-count-chip ${a}`}" data-tooltip="${a.replaceAll("_"," ")}">${r[a]}</span>`)}</div>`:g} <button type="button" class="packages-row-issues" data-repository-row-issues="${e}" aria-label="${`Open issues for ${i}`}">Issues →</button></li>`}function rD(e,t){let n=to().get(e),o=[...(n?VM(n):new Map).values()].reduce((s,i)=>s+i.length,0);return u`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-repository-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${o>0?u`<button type="button" class="bundles-tab bundles-tab-action" data-repository-tab="issues">Issues (${o}) →</button>`:g}</div>${oD(e,t)}`}function VM(e,t="live"){let n=new Map;for(let[r,o]of e.files){let s=o.filter(i=>{let a=Me(i,c.triage.get(j(i)))??null;return t==="invalid"?a==="invalid":t==="deleted"?a==="deleted":a!=="invalid"&&a!=="deleted"});s.length>0&&n.set(r,s)}return n}function oD(e,t){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let a of t.findings){let l=de(a,c.severityMode);n[l]!==void 0&&n[l]++}let r=et.filter(a=>n[a]>0),o=[...t.files.entries()].toSorted(([a,l],[p,d])=>d.length!==l.length?d.length-l.length:a.localeCompare(p)),s=[...t.reports].toSorted((a,l)=>a.localeCompare(l)),i=/^https?:/iu.test(e)?e:`https://github.com/${e}`;return u`<dl class="packages-detail-meta"><dt>Repository</dt><dd class="mono"><a href="${i}" target="_blank" rel="noopener">${nt(e)}</a></dd><dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${r.length>0?u`<div class="packages-detail-chips">${r.map(a=>u`<span class="${`tree-count-chip ${a}`}">${n[a]} ${a.replaceAll("_"," ")}</span>`)}</div>`:g}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${s.map(a=>{let l=ye[Ae(a)]??ye.default;return u`<li><button type="button" class="packages-detail-report" data-package-report="${a}">${W(l)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${a}">${oe(a)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${o.map(([a,l])=>u`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${a}">${a}</span> <span class="packages-detail-file-count">${l.length}</span></li>`)}</ul>`}function jM(e,t){let n=new Set(e),r=new Set,o=new Map,s=new Map(e.map((i,a)=>[i,a]));for(let i of t){let a=[...new Map(i.members.map(m=>[JSON.stringify([m.id,ct(m)]),m])).values()],l=a.filter(m=>n.has(m.id));if(l.length===0)continue;for(let m of l)r.add(m.id);let p=a.filter(m=>n.has(m.id)||m.isApp),d=JSON.stringify([a.map(m=>m.id).toSorted(),p.map(m=>[m.id,ct(m),m.title??"",m.source??null,m.revalidate??""]).toSorted(([m,h],[b,y])=>m.localeCompare(b)||Number(h)-Number(y))]),f=o.get(d);f||(f={key:d,members:p,reports:[],first:Math.min(...l.map(m=>s.get(m.id)))},o.set(d,f)),f.reports.some(m=>m.name===i.report&&m.managedReportId===i.managedReportId)||f.reports.push({name:i.report,...i.managedReportId?{managedReportId:i.managedReportId}:{},findingId:l[0].id,rowIndex:i.index})}return{rows:[...o.values()].toSorted((i,a)=>i.first-a.first),missing:e.filter(i=>!r.has(i))}}function Ao(e,t,n){return`${e} ${e===1?t:n}`}function sD(e,t){let n=Me(e,c.triage.get(e.id)),r=ct(e)?t.filter(({name:a})=>Hr(c.triage,e.id,a)):[],o=n??(r.length>0?"ignored":null);if(!o)return g;let s=n!=="ignored"&&o==="ignored"&&r.length<t.length,i=s?`Ignored in ${r.length}/${t.length} reports`:ww[o];return u`<span class="${`links-finding-status triage-${o}`}" data-tooltip="${s?r.map(({name:a})=>oe(a)).join(", "):g}">${i}</span>`}function Wy(e,t=[],n=!0,r=g){let{id:o,title:s}=e,i=t[0]?.name,a=Gl(o),l=jl(o)??a;return u`<li class="${n?"links-finding":"links-finding links-finding-context"}">${i?u`<button type="button" class="links-finding-id mono" data-links-preview="${o}" data-preview-report="${i}" data-preview-row="${t[0].rowIndex??g}" data-preview-managed-report="${t[0].managedReportId??g}" data-tooltip="${a}" aria-haspopup="dialog">${l}</button>`:Vr(o)?u`<a class="links-finding-id mono" href="${`#${jr({id:o})}`}" data-tooltip="${a}">${l}</a>`:u`<span class="links-finding-id mono">${l}</span>`} ${s?u`<span class="links-finding-title">${s}</span>`:g} ${sD(e,t)} ${n?g:u`<span class="links-member-context">not in this link</span>`} ${r}</li>`}function GM(e){let t=!!c.currentLinks?.managedId;return u`<div class="links-finding-reports">${e.map(({name:n,findingId:r,managedReportId:o,rowIndex:s})=>u`<button type="button" class="links-finding-report report-button" data-links-report="${t?g:n}" data-links-finding="${r}" data-managed-report="${o??g}" data-links-preview="${t?r:g}" data-preview-report="${t?n:g}" data-preview-row="${t?s:g}" data-preview-managed-report="${t?o:g}">${W(De[Ae(n)]??De.default)}<span class="links-finding-report-label report-button-label" data-tooltip-truncated data-tooltip="${oe(n)}">${oe(n)}</span></button>`)}</div>`}function iD(e,t){let n=e.reports.toSorted((r,o)=>oe(r.name).localeCompare(oe(o.name)));if(e.members.length===1){let r=e.members[0];return u`<li class="links-report-row links-report-row-single"><ul class="links-row-members">${Wy(r,n,t.has(r.id),GM(n))}</ul></li>`}return u`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${Ao(e.members.length,"finding","findings")} in row</span> ${GM(n)}</div><ul class="links-row-members">${e.members.map(r=>Wy(r,n,t.has(r.id)))}</ul></li>`}function aD(e,t){let{rows:n,missing:r}=jM(e,Qt(e)),o=new Set(e);return u`<li class="links-group"><div class="links-group-head"><span class="links-group-index">Link ${t+1}</span> <span class="links-group-count">${Ao(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${Z(n,s=>s.key,s=>iD(s,o))}</ul>${r.length>0?u`<div class="links-unlocated"><div class="links-finding-missing">Not in your reports</div><ul class="links-row-members">${r.map(s=>Wy({id:s,title:xf(s)}))}</ul></div>`:g}</li>`}function KM(e=g){let t=c.currentLinks;if(!t)return g;xt().catch(()=>{});let{name:n,groups:r,skipped:o}=t,s=new Set,i=new Set,a=0;for(let l of r)for(let p of l){if(s.has(p))continue;s.add(p);let d=no(p);if(d.length!==0){a++;for(let f of d)i.add(f)}}return u`<div class="links-view">${t.managedId?u`<div class="meta-row"><button type="button" class="report-button" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-deduplication"}}))}">‹ Deduplication</button></div>`:g}<header class="page-head"><div class="page-title"><h1>Links${e}</h1><div class="meta-row"><span class="links-file-name" data-tooltip-truncated data-tooltip="${n}">${W(ye[Ae(n)]??ye.default)}${oe(n)}</span> <span>${Ao(r.length,"link","links")}</span> <span>${Ao(s.size,"finding","findings")}</span> ${i.size>0?u`<span>found in ${Ao(i.size,"report","reports")}</span>`:g}</div></div></header>${a<s.size?u`<p class="links-note">${Ao(s.size-a,"linked finding is","linked findings are")} not in any report you hold. Import the reports they came from and this page fills in.</p>`:g} ${o>0?u`<p class="links-note">${Ao(o,"entry","entries")} in this file could not be linked — an id the app can't follow (a session-local number, or something that isn't an id at all).</p>`:g} ${r.length===0?u`<p class="links-empty">This file declares no links: every entry in it named fewer than two findings this app can reach.</p>`:u`<ol class="links-list">${Z(r,(l,p)=>`${p}:${l.join(" ")}`,(l,p)=>aD(l,p))}</ol>`}</div>`}function Hy(e,t,n){let r=new Set(t);for(let o of n)r.add(o);return e.filter(o=>r.has(o))}function qM(){if(c.currentWorkspace){let e=Y().find(n=>n.id===c.currentWorkspace),t=c.reports.map(n=>n.fileName).filter(n=>typeof n=="string");return{mode:"workspace",workspaceId:c.currentWorkspace,fileNames:e?Hy(e.reports??[],c.storedFiles??[],t):t}}if(c.currentFile){let e=Y().find(t=>Array.isArray(t.reports)&&t.reports.includes(c.currentFile));return e?{mode:"single",workspaceId:e.id,fileNames:[c.currentFile]}:null}return null}var Uy=class extends N{static styles=[...N.styles,P(ot)];static properties={workspaceId:{type:String},items:{type:Array},_uploading:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._uploading=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="upload"]')?.focus()}_onClose=()=>this._finish({uploaded:[],failed:[]});_onCancel=()=>this._finish({uploaded:[],failed:[]});_onUpload=async()=>{if(this._uploading)return;this._uploading=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{let o;if(r.kind==="bundle")o=await S0(this.workspaceId,r.identifier);else{let s=await Cn(r.identifier);o=await Jc(this.workspaceId,r.identifier,s)}if(o.ok)t.push({kind:r.kind,identifier:r.identifier});else{let s=o.reason??"unknown";n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:lr(r),reason:s}]}}catch(o){let s=o?.message??String(o);n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:lr(r),reason:s}]}this._uploading=!1,this._done=!0,n.length===0&&this._finish({uploaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Vc(this.items),o=n?u`Upload <strong>"${lr(this.items[0])}"</strong> to the workspace's remote inventory?`:u`Upload <strong>${t}</strong> local ${r} to the workspace's remote inventory?`,s=n?g:jc(this.items),i=this._uploading?n?"Uploading\u2026":`Uploading ${t} ${r}\u2026`:n?"Upload":`Upload ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Upload to remote</h3></header><p class="lwd-body">${o}</p>${s}<p class="nwd-note ui-hint">End-to-end encrypted with the workspace key — only workspace members can decrypt the uploaded content.</p>${Gc(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._uploading}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="upload" @click="${this._onUpload}" ?disabled="${this._uploading||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-upload-dialog",Uy);function YM({workspaceId:e,items:t}={}){return re("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var XM=`.rec-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.rec-list{margin:.2rem 0 .55rem;padding:0;list-style:none;max-height:320px;overflow-y:auto}.rec-row{display:flex;align-items:center;gap:.5rem;padding:.28rem .15rem;font-size:.8rem;line-height:1.4;border-bottom:1px solid rgb(from var(--text) r g b / .06)}.rec-row:last-child{border-bottom:none}.rec-label{flex:1 1 auto;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rec-status{flex:0 0 auto;padding:0 .4rem;border-radius:4px;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.rec-status-checking{color:var(--muted)}.rec-status-good{color:var(--ok, #16a34a)}.rec-status-uploaded,.rec-status-reuploaded{color:var(--accent, #2563eb)}.rec-status-updated{color:var(--high, #d57422)}.rec-status-differs{color:var(--warning, #d97706)}.rec-choice{flex:0 0 auto;display:flex;gap:.3rem;& button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 4px);padding:.1rem .45rem;font:inherit;font-size:.72rem;cursor:default;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&:disabled{opacity:.5;cursor:default}}}.rec-status-failed,.rec-status-check-failed{color:var(--warning, #d97706)}.rec-status-differs,.rec-status-failed,.rec-status-check-failed{background:rgb(from var(--warning, #d97706) r g b / .14)}.rec-status-missing{color:var(--critical, #dc2626)}.rec-summary{margin:.1rem 0 .2rem;color:var(--muted);font-size:.76rem;line-height:1.45}.rec-error{margin:.3rem 0 .2rem;color:var(--critical, #f87171);font-size:.76rem;line-height:1.4}
|
|
198
|
-
`;var
|
|
199
|
-
${t.detail}`:n}_heldLocally(t){return t.identifier?t.kind==="bundle"?this.localBundles.includes(t.identifier):this.localFileNames.includes(t.identifier):!1}_choice(t){if(t.status!=="differs")return g;let n=this._running||this._bulk||this._resolving.has(t.resourceTag);return u`<span class="rec-choice"><button type="button" data-role="keep-cloud" data-tooltip="Replace your copy with the cloud copy" @click="${()=>this._onResolve(t,"cloud")}" ?disabled="${n}">Use cloud copy</button> <button type="button" data-role="keep-local" data-tooltip="Upload your copy, replacing the cloud copy" @click="${()=>this._onResolve(t,"local")}" ?disabled="${n}">Upload mine</button></span>`}_rowsSection(){return this._rows.length===0?this._running?u`<p class="lwd-body">Fetching remote listing…</p>`:g:u`<ul class="rec-list">${this._rows.map(t=>u`<li class="rec-row"><span class="rec-label">${t.label}${t.kind==="bundle"?u`<span class="lwd-kind-tag">bundle</span>`:g}</span> ${this._choice(t)} <span class="${`rec-status rec-status-${t.status}`}" data-tooltip="${this._statusHint(t)}">${
|
|
200
|
-
`;var
|
|
201
|
-
`)}">${b}<span>${t.length} reports</span></button>`);let w=c.reports.flatMap(E=>E.groups.flat()),x=`${s} ${`finding${s===1?"":"s"}`}`,k=c.currentWorkspace?[]:nx(w,a?cd.filter(E=>E!=="type"):cd),$=g;if(s>0){let E={};for(let I of e){let U=de(An(I),c.severityMode);U&&(E[U]=(E[U]||0)+1)}let T=et.filter(I=>E[I]>0);T.length>0&&($=u`<span class="status-bar" aria-hidden="true">${T.map(I=>{let U=`${E[I]} ${I.replaceAll("_"," ")}`;return u`<span class="${`status-seg sev-${I}`}" style="${le({flexGrow:E[I]})}" data-tooltip="${U}"></span>`})}</span>`)}let S=new Set(c.reports.map(E=>E.repo??null)),C=S.size===1?[...S][0]:null,R=hD(n,r,C),L=u`<span class="sep" aria-hidden="true"></span>`,A=py(o,c.currentView);return u`<header class="page-head"><div class="page-title"><h1>${d?uy(d,c.currentView):f}${y}${Va(d,"bundles",c.currentView)}${R}${A}${dT()}</h1><div class="meta-row"><span>${x}</span> ${$} ${k.length>0?u`${L}${k.map(E=>u`<span class="tag">${E}</span>`)}`:g}</div></div></header>`}var{suggestSync:bD}=tT({open:e=>eT({names:e})}),yD=new Set(["findings","files","links"]);function dT(){if(G.status!=="online")return g;if(!yD.has(c.currentView))return g;let e=qM();if(!e)return g;let{workspaceId:t,fileNames:n,mode:r}=e,o=v0(t);if(o.length>0&&bD(t,o,{onSync:()=>Ky(t,r,n),retry:O}),r==="single"){let x=n[0];if(o.includes(x))return sT({status:"differ",label:"differs",title:`Your copy of "${x}" doesn't match its cloud copy. Click to re-check and bring them in line.`,onClick:()=>Ky(t,r,n)});let k=eg(t,x)?"cloud":"local";return sT({status:k,label:k,title:k==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:k==="local"?()=>iT({workspaceId:t,items:[{kind:"report",identifier:x}]}):null})}let s=Y().find(x=>x.id===t),i=s&&Array.isArray(s.bundles)?s.bundles:[],a=ng(t),l=n.filter(x=>!eg(t,x)),p=i.filter(x=>!y0(t,x)),d=[...l.map(x=>({kind:"report",identifier:x})),...p.map(x=>({kind:"bundle",identifier:x}))];if(a===0&&d.length===0)return g;let f=[a>0?`${a} in cloud`:null,d.length>0?`${d.length} local-only`:null,o.length>0?`${o.length} differ from the cloud`:null,a>0?'click "cloud" to re-check storage':null,d.length>0?`click "local" to upload ${d.length}`:null].filter(Boolean).join(" \u2014 "),m=o.length===1?`Your copy of "${o[0]}" doesn't match its cloud copy. Click to re-check and bring them in line.`:`${o.length} reports don't match their cloud copies. Click to re-check and bring them in line.`,h=o.length===0?g:u`<button type="button" class="sync-badge-chunk differ" data-tooltip="${m}" aria-label="${`${o.length} report${o.length===1?"":"s"} differ from the cloud \u2014 re-check`}" @click="${x=>{x.stopPropagation(),Ky(t,r,n)}}">${pT()}<span>${o.length} differ</span></button>`,b=a===0?g:u`<button type="button" class="sync-badge-chunk cloud" aria-label="${`re-check ${a} cloud object${a===1?"":"s"}`}" @click="${x=>{x.stopPropagation(),jy({workspaceId:t,cloudCount:a,localFileNames:n,localBundles:i})}}">${fT()}<span>${a} cloud</span></button>`,y=d.length===0?g:u`<button type="button" class="sync-badge-chunk local" aria-label="${`${d.length} items not yet uploaded \u2014 open upload dialog`}" @click="${x=>{x.stopPropagation(),iT({workspaceId:t,items:d})}}">${uT()}<span>${d.length} local</span></button>`,w=u`<span class="sync-badge-divider" aria-hidden="true"></span>`,v=[b,h,y].filter(x=>x!==g);return u`<div class="report-sync-badge report-sync-badge-clickable" data-status="mixed" data-tooltip="${f}">${v.map((x,k)=>k===0?x:u`${w}${x}`)}</div>`}function Ky(e,t,n){let r=Y().find(i=>i.id===e),o=t==="single"?Hy(r?.reports??[],c.storedFiles??[],n):n,s=r&&Array.isArray(r.bundles)?r.bundles:[];return jy({workspaceId:e,cloudCount:ng(e),localFileNames:o,localBundles:s,autoRun:!0})}function sT({status:e,label:t,title:n,onClick:r}){let o=e==="cloud"?fT():e==="differ"?pT():uT(),s=u`<span class="sync-badge-label">${t}</span>`;return typeof r!="function"?u`<span class="report-sync-badge" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}">${o}${s}</span>`:u`<button type="button" class="report-sync-badge report-sync-badge-clickable" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}" @click="${r}">${o}${s}</button>`}function uT(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="14" width="20" height="8" rx="2" ry="2"/><line x1="6" y1="18" x2="6.01" y2="18"/><line x1="10" y1="18" x2="10.01" y2="18"/><path d="M6 14V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v10"/></svg>`}function pT(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 4v14"/><path d="M3 14l4 4 4-4"/><path d="M17 20V6"/><path d="M13 10l4-4 4 4"/></svg>`}function fT(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1-8.9A6 6 0 0 0 5.07 13.5 4 4 0 0 0 6 21h11.5z"/></svg>`}async function iT({workspaceId:e,items:t}){let n=t.filter(r=>r.kind==="bundle");if(n.length>0){let r=await Je(),o=new Map(r.map(s=>[s.integrity,s.name]));for(let s of n){let i=o.get(s.identifier);i&&(s.label=i)}}await YM({workspaceId:e,items:t})}function wD(e){return Object.values(e).some(n=>n>0)||c.filterSeverities.size>0?u`<severity-chips .counts="${e}"></severity-chips>`:g}function vD(e){return Object.values(e).some(n=>n>0)||c.filterColors.size>0?u`<triage-filter .counts="${e}"></triage-filter>`:g}function $D(e,t,n,r,o,s,i,a){let{showSource:l,showConfidence:p,showPriority:d,showGraphMode:f,showFileSort:m,kanbanMode:h,showRepo:b,hasComment:y,hasFix:w,hasFlagged:v,hasDuplicates:x,hasCrossContext:k,hasAppStacked:$,showSecurity:S,showSeverityMode:C,revalidateOptions:R,showPartial:L,canDropLayer:A,canDetailLayer:E,canUpstreamLens:T,confirmedLocked:I}=s;return u`<div class="toolbar"><div class="toolbar-row"><view-mode-buttons modes="${f?"kanban,focus,table,list,grouped,graph":"kanban,focus,table,list,grouped"}"></view-mode-buttons><findings-sort ?show-file="${m}" ?show-confidence="${p}" ?show-priority="${d}"></findings-sort>${l?u`<source-filter></source-filter>`:g} ${!I&&(p||R.length>0)?u`<conf-filter ?range-disabled="${!p}" .revalidateOptions="${R}" ?has-partial="${L}"></conf-filter>`:g} ${y||w||v||c.filterComment||c.filterFix||c.filterFlagged?u`<annotation-filter .hasComment="${y}" .hasFix="${w}" .hasFlagged="${v}"></annotation-filter>`:g} ${h?g:u`<triage-selector .counts="${n}"></triage-selector>`}<div class="toolbar-end"><download-button></download-button>${!c.currentWorkspace&&(x||c.filterDuplicates)||k||$||S||c.filterCrossContext||c.filterAppStacked?u`<annotation-filter group="context" .hasDuplicates="${x}" .hasCrossContext="${k}" .hasAppStacked="${$}" .hasSecurityContrast="${S}"></annotation-filter>`:g} ${A||c.revalidateConflicts.size>0?u`<revalidation-switch ?can-drop="${A}" ?can-detail="${E}" ?can-upstream="${T&&A}" .upstreamDisabled="${c.showRevalidation===!1&&A}"></revalidation-switch>`:g}</div></div><div class="toolbar-row sev-row">${C?u`<severity-mode-switch></severity-mode-switch>`:g} ${wD(r)} ${i.analyzers.length>1||i.models.length>1?u`<analyzer-select .analyzers="${i.analyzers}" .models="${i.models}" .groups="${i.groups}"></analyzer-select>`:g} ${b&&a.length>1?u`<repo-filter .options="${a}"></repo-filter>`:g} ${vD(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function qy(e,t){return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}var aT=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),Qu=null,mT=0,Zs=null;function el(e,t=!1,n=null,r=!1,o=!1){return u`<finding-card data-gid="${ie(e)}" .group="${e}" ?in-group="${t}" context="${n??g}" ?lazy="${r}" ?popup="${o}"></finding-card>`}var gT=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2H2v4M10 2h4v4M14 10v4h-4M6 14H2v-4"/></svg>`,hT=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2v4H2M10 2v4h4M10 14v-4h4M6 14v-4H2"/></svg>`,kD={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};function Jy(e,t={}){let{variant:n="kanban",active:r=!1,expandedTrackLast:o=!1}=t,s=Fe(e),i=je(e),a=qt(i)||"(untitled finding)",l=n==="kanban",p=n==="kanban-side",d=l&&c.currentWorkspace?Dc(i):null,f={"kanban-card":!0,"has-conflict":s.hasConflict,"focus-side-card":!l,"kanban-expanded-track-last":o,active:r};!s.hasConflict&&s.commonColor&&(f[`mark-${s.commonColor}`]=!0);let m=parseInt(i.line,10),h=Number.isFinite(m)?`:${m}`:"",b=de(i,c.severityMode),y=kD[b]??"?",w=No(i)&&c.severityMode!=="original",v=he(i),x=v?.flagged===!0,k=v?.fix||tn(i),$=v?.comment??"",S=g;l&&k?S=Bo(k)?u`<managed-fix-link class="kanban-action kanban-fix-link" compact="compact" .url="${k}">${Ms}</managed-fix-link>`:_t(i)?u`<button type="button" class="kanban-action mark-fix" data-tooltip="${`Edit fix link: ${k}`}" aria-label="${`Edit fix link: ${k}`}">${Ms}</button>`:u`<span class="kanban-action kanban-fix-note" role="img" data-tooltip="${`Fix: ${k}`}" aria-label="${`Fix: ${k}`}">${Ms}</span>`:l&&($||_()&&dr(i))&&(S=u`<comment-preview class="kanban-action" .finding="${i}" .comment="${$}">${Rd}</comment-preview>`);let C=u`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${b}`}" data-tooltip="${w?`${st(b)} \u2014 corrected from ${st(i.severity)}`:g}" aria-label="${w?`Severity ${st(b)}, corrected from ${st(i.severity)}`:`Severity ${st(b)}`}">${y}${w?"*":""}</span> ${x?u`<span class="kanban-flag" aria-label="Flagged">${Md}</span>`:g} ${S}</div><span class="kanban-title">${a}</span><div class="kanban-meta"><span class="kanban-loc">${i.file}${h}</span> ${i.confidence===void 0||i.confidence===null?g:u`<span class="kanban-conf" data-tooltip="${`Confidence ${i.confidence}/10`}">${i.confidence}</span>`} ${d?u`<span class="kanban-analyzer" role="img" data-tooltip="${ms[d]}" aria-label="${ms[d]}">${W(De[d])}</span>`:g}</div>`;return l?u`<div class="${q(f)}" data-gid="${ie(e)}" data-kanban-source draggable="${da(e,s).length>0?"true":"false"}" role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Open details for ${a}`}">${C}</div>`:p?u`<div class="${q(f)}" data-gid="${ie(e)}" data-kanban-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Show details for ${a}`}">${C}</div>`:u`<div class="${q(f)}" data-gid="${ie(e)}" data-focus-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Focus on ${a}`}">${C}</div>`}var Yy={content:"",parts:""};function xD(e){return Yy.content!==e&&(Yy={content:e,parts:Fd(e)}),Yy.parts}function SD(e){let{content:t,range:n,highlighted:r}=e,o=t.split(`
|
|
202
|
-
`).length,s=String(o).length;return u`<div class="focus-code-lines" style="${le({"--lineno-width":`${s}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:o},(i,a)=>{let l=a+1,d={"focus-code-lineno":!0,"focus-code-line-active":!!n&&l>=n.start&&l<=n.end};return u`<div class="${q(d)}" data-focus-code-line="${l}">${l}</div>`})}</aside><pre class="focus-code-source" tabindex="-1" aria-label="${e.file}"><code>${typeof r=="string"?W(r):xD(t)}</code></pre></div>`}function bT(e){return!e||!ea(je(e))?g:u`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${ie(e)}" aria-label="View issue history"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 5a6.25 6.25 0 1 1-.25 5M1.5 1.5V5H5M8 4.5V8l3 1.5"/></svg></button>`}function yT(e,t=g,n=!1){c.focusCodeTick;let r=_x(e),o=$d(e),s=r?"focus-main with-code":"focus-main",i=le({"--focus-split":String(c.focusSplit)});return u`<div class="${s}" style="${i}" data-gid="${ie(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?g:bT(e)} ${el(e,!1,"focus",!1,n)}</div></div>${t} ${r?u`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${tc}" aria-valuemax="${nc}" aria-valuenow="${Math.round(c.focusSplit)}" data-tooltip="Drag to resize · double-click to reset"></div><div class="focus-pane focus-pane-code" data-focus-code-file="${r.file??g}" data-focus-code-integrity="${r.integrity??g}">${r.loading?u`<div class="focus-code-empty">Loading source…</div>`:u`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?u`<span class="focus-code-line">:${zv(r.range)}</span>`:g} ${(o?.stack.length??0)>1?u`<div class="focus-code-nav"><button type="button" class="focus-code-nav-btn" data-code-history="back" ?disabled="${o.at===0}" aria-label="Back to the previously shown file">${Cs}</button> <button type="button" class="focus-code-nav-btn" data-code-history="forward" ?disabled="${o.at===o.stack.length-1}" aria-label="Forward to the next shown file">${_s}</button></div>`:g}</header><div class="focus-code-body">${SD(r)}</div>`}</div>`:g}</div>`}function wT(e,t,n=[],r=null){if(!e&&!r)return g;let o=e?Fe(e):{},s=c.kanbanDetailFullscreen,i={"kanban-detail-modal":!0,fullscreen:s,"has-conflict":o.hasConflict},a=e?ie(e):null,l=t?.items??[],p=l.findIndex(f=>ie(f)===a),d=u`<div class="kanban-detail-actions">${bT(e)} <button type="button" class="kanban-detail-expand detail-action" data-kanban-detail-fullscreen aria-pressed="${s?"true":"false"}" aria-label="${s?"Back to the readable width":"Fill the available space"}">${s?hT:gT}</button> <button type="button" class="kanban-detail-close detail-action" aria-label="Close details">×</button></div>`;return u`<div class="${q({"kanban-detail-backdrop":!0,"links-preview-backdrop":!!r})}"><div class="kanban-detail-dim"></div><div class="${q(i)}" role="dialog" aria-modal="true" aria-label="${r?"Finding preview":"Finding details"}">${s&&e?g:d}<div class="kanban-detail-body">${e?s?yT(e,d,!0):el(e,!1,"kanban-detail",!1,!0):u`<div class="links-preview-message" role="status">${r.error||"Loading finding\u2026"}</div>`}</div></div>${l.length===0?g:u`<aside class="kanban-detail-side" aria-label="${`${t.label} findings`}"><div class="kanban-detail-side-header"><span class="kanban-detail-side-pick"><select class="kanban-detail-side-select" data-kanban-column aria-label="Column to show">${n.map(f=>{let m=f.key===t.key,h=m?f.label:`${f.label} (${f.count})`;return u`<option value="${f.key}" data-gid="${f.firstGid}" .selected="${m}" ?disabled="${f.count===0}">${h}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${p===0}" aria-label="Previous finding">${Cs}</button> <span class="count">${p<0?l.length:`${p+1} / ${l.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${p===l.length-1}" aria-label="Next finding">${_s}</button></div></div><div class="kanban-detail-side-body">${Z(l,f=>ie(f),f=>Jy(f,{variant:"kanban-side",active:ie(f)===a}))}</div></aside>`}</div>`}function CD(e,t){if(c.viewMode==="table"){let r=c.sortBy==="file"?qy(e,aT):e;return r.length===0?g:(Qu=r,u`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?u`<aside class="findings-table-details" id="findings-table-details" aria-label="Finding details"><button type="button" class="findings-table-details-close" data-table-deselect aria-label="Close details">×</button><div class="findings-table-details-body">${el(t)}</div></aside>`:g}</div>`)}if(c.viewMode==="focus"){if(e.length===0)return g;let r=e.indexOf(t);mT=r;let o=t,s=r===0,i=r===e.length-1;return u`<div class="focus-view">${yT(o)}<aside class="focus-sidebar" aria-label="Up next"><div class="focus-sidebar-header"><span class="label">Up next</span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-focus-nav="prev" ?disabled="${s}" aria-label="Previous finding">${Cs}</button> <span class="count">${r+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${i}" aria-label="Next finding">${_s}</button></div></div><div class="focus-sidebar-body">${Z(e,a=>ie(a),a=>Jy(a,{variant:"focus",active:ie(a)===ie(o)}))}</div></aside></div>`}if(c.viewMode==="kanban"){let r=[{key:"untriaged",label:"Untriaged"},{key:"inprogress",label:"In progress"},{key:"fixed",label:"Fixed"},{key:"invalid",label:"Invalid"},{key:"deleted",label:"Deleted"},{key:"ignored",label:"Ignored"}],o=new Map(r.map(d=>[d.key,[]]));for(let d of e){let m=Fe(d).commonTriage??"untriaged",h=o.get(m);h&&h.push(d)}let s=r.some(d=>d.key===c.kanbanExpandedColumn)?c.kanbanExpandedColumn:null,i=s?r.filter(d=>d.key===s):r,a={"--kanban-cols":String(r.length)},l=t,p=l?r.find(d=>d.key===(Fe(l).commonTriage??"untriaged")):null;return u`<div class="kanban-board" style="${le(a)}">${Z(i,d=>d.key,d=>{let f=o.get(d.key),m=d.key===s;return u`<div class="${`kanban-column kanban-column-${d.key}${m?" expanded":""}`}" data-kanban-target="${d.key}"><div class="kanban-column-header"><span class="label">${d.label}</span> <span class="count">${f.length}</span> <button type="button" class="kanban-expand" data-kanban-expand="${d.key}" aria-pressed="${m}" aria-label="${m?"Show all columns":`Show only ${d.label}`}">${m?hT:gT}</button></div><div class="kanban-column-body">${f.length===0?u`<div class="kanban-empty">No ${d.label.toLowerCase()} findings.</div>`:Z(f,h=>ie(h),(h,b)=>Jy(h,{active:ie(h)===c.kanbanPopoverGid,expandedTrackLast:(b+1)%r.length===0}))}</div></div>`})}</div>${wT(l,p&&{key:p.key,label:p.label,items:o.get(p.key)},r.map(d=>{let f=o.get(d.key);return{key:d.key,label:d.label,count:f.length,firstGid:f.length>0?ie(f[0]):""}}))}`}if(c.viewMode==="grouped"){let r=new Map;for(let s of e){let i=An(s).file;r.has(i)||r.set(i,[]),r.get(i).push(s)}let o=c.sortBy==="file"?[...r.keys()].toSorted():[...r.keys()];return u`${Z(o,s=>s,s=>{let i=c.sortBy==="file"?qy(r.get(s),(l,p)=>parseInt(l.line,10)-parseInt(p.line,10)):r.get(s),a=An(i[0]);return u`<div class="file-group"><div class="file-header"><span>${Op(a,En(a))}</span> <span class="count">${i.length}</span></div><div class="file-body">${Z(i,l=>ie(l),l=>el(l,!1,null,!0))}</div></div>`})}`}let n=c.sortBy==="file"?qy(e,aT):e;return u`${Z(n,r=>ie(r),r=>{let o=je(r),s=jv(o,En(o)),i=Xr(o),a=li(o),l=r.length>1;return u`<div class="${q({"flat-group":!0,"multi-case":l})}"><div class="flat-group-loc"><span class="file">${Op(o,En(o))}</span> ${s===g?g:u`<span class="line-num">${s}</span>`} ${a?u`<span class="meta">${a}</span>`:g} ${i?u`<span class="run-meta">${i}</span>`:g}</div>${el(r,!0,null,!0)}</div>`})}`}function _D(){c.bundleSourceFile&&Ig().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&J(EM(),e)}var RD=oT(TD);function O(){RD(c.currentView)}function bn(e){let t=document.querySelector(`#${e}`);return(!t||!be.contains(t)||be.firstElementChild!==t)&&(be.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function Du(){let e=Ou(c,Y(),Ie);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=bn("empty-workspace-slot");t&&J(u`${cT([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),Vt()}var MD={"manage-deduplication":{slot:"manage-deduplication-slot",tag:"managed-admin-deduplication",title:"DeepView \u2014 deduplication"},manage:{slot:"manage-slot",tag:"managed-admin-home",title:"DeepView \u2014 manage"},"admin-users":{slot:"admin-users-slot",tag:"managed-admin-users",title:"DeepView \u2014 users"},"manage-repos":{slot:"manage-repos-slot",tag:"managed-admin-repos",title:"DeepView \u2014 repositories"},"manage-repo-risk":{slot:"manage-repo-risk-slot",tag:"managed-admin-repo-risk",title:"DeepView \u2014 repository risk"},"manage-reports":{slot:"manage-reports-slot",tag:"managed-admin-reports",title:"DeepView \u2014 reports"},"manage-bundles":{slot:"manage-bundles-slot",tag:"managed-admin-bundles",title:"DeepView \u2014 bundles"},"manage-history":{slot:"manage-history-slot",tag:"managed-admin-history",title:"DeepView \u2014 history"},"manage-teams":{slot:"manage-teams-slot",tag:"managed-admin-teams",title:"DeepView \u2014 teams"},"manage-import":{slot:"manage-import-slot",tag:"managed-admin-import",title:"DeepView \u2014 import"},"manage-links":{slot:"manage-links-slot",tag:"managed-admin-links",title:"DeepView \u2014 links"},"manage-scans":{slot:"manage-scans-slot",tag:"managed-admin-scans",title:"DeepView \u2014 scans"}},lT=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),Zu=null;function Ka(){let e=c.revalidateConflicts.size>0,t=!e&&zl(c.reports);return e?c.showRevalidation!==!1&&(Zu=c.showRevalidation,c.showRevalidation=!1):(Zu!==null&&(c.showRevalidation=Zu,Zu=null),!t&&c.showRevalidation===!1&&(c.showRevalidation=!0)),c.upstreamOnly&&(!t||c.showRevalidation===!1||!c.reports.some(n=>(n.groups??[]).some(r=>r.some(o=>o.isUpstream))))&&(c.upstreamOnly=!1),vi(c.showRevalidation,c.upstreamOnly),t}var Xy=null;function TD(){ys()||U0(),_D(),Wl(c.reports),kc()&&queueMicrotask(()=>{xe()}),Hl(c.reports)&&pr();let e=Ka(),t=c.reports.some(M=>(M.groups??[]).some(F=>F.some(z=>z.isUpstream)));if(c.currentView==="workspace-reports"||c.currentView==="workspace-bundles"){let M=c.currentView.slice(10),F=Ou(c,Y(),Ie),z=bn("workspace-content-slot");z&&J(AR(F,M,c.workspaceContentFileCount),z),document.title=F?`${F.title} \u2014 ${M}`:`DeepView \u2014 ${M}`;return}if(c.currentView==="bundles")if((c.bundles??[]).length===0)c.currentView="findings";else{Xn(c.bundleDetailsTab,c.bundleSourceFile)&&Ig().catch(()=>{});let M=bn("bundles-slot");M&&J(BM(c.bundles),M);let F=c.bundleDetails,z=c.selectedBundle&&F&&(F.json||F.bundle);if(z&&c.bundleDetailsTab==="graph"){let Re=document.querySelector("#bundle-graph-slot");if(Re){let vt=_M(c.bundleDetails);if(vt){TM(vt);let pw={hideAllFiles:!0,triageCounts:CM(c.bundleDetails,new Set(vt.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:vt.canPackagesView,showBundleLayouts:!0,hasIssues:vt.hasIssues},ii=Xy,fw=Re.querySelector("graph-layout");!vt.issuesShown&&ii&&!ii.issuesShown&&fw&&ii.state===ee.graphState&&ii.details===F&&ii.reason===ee.bundleReason?fw.options=pw:(Xy=null,zg(Re,vt,pw,RM,MM).then(TT=>(TT&&ee.graphState&&(Xy={state:ee.graphState,details:F,reason:ee.bundleReason,issuesShown:vt.issuesShown}),null)))}}}if(z&&!F.metadataOnly&&c.bundleDetailsTab==="terminal"){let Re=document.querySelector("#bundle-terminal-slot");Re&&Vx(Re,c.bundleDetails)}Vt();let pe=c.bundles.find(Re=>Re.integrity===c.selectedBundle)?.npm;document.title=pe?`DeepView \u2014 ${pe.name}@${pe.version}`:"DeepView \u2014 bundles";return}if(c.currentView==="reviews"){let M=bn("dependency-reviews-slot");M&&J(u`<dependency-review-list .session="${c.managedSession}"></dependency-review-list>`,M),Vt(),document.title="DeepView \u2014 my reviews";return}if(c.currentView==="npm"){let M=bn("npm-slot");M&&J(I1(),M),Vt(),document.title="DeepView \u2014 npm packages";return}if(c.currentView==="packages"){let M=bn("packages-slot");M&&J(zM(),M),Vt(),document.title="DeepView \u2014 packages";return}if(c.currentView==="repositories"){let M=bn("repositories-slot");M&&J(UM(),M),Vt(),document.title="DeepView \u2014 repositories";return}if(c.currentView==="links"){if(c.currentLinks){let M=bn("links-slot"),F=ys();M&&J(u`${KM(dT())}${F?wT(F.group,null,[],F):g}`,M),Vt(),document.title=`DeepView \u2014 ${c.currentLinks.name}`;return}c.currentView="findings"}if(c.currentView==="scan"&&customElements.get("local-scan-page")){let M=bn("scan-slot");if(M&&!M.firstElementChild){let F=document.createElement("local-scan-page");F.selection=c.scanSelection,M.append(F),F.updateComplete.then(()=>bi(F.renderRoot,{gate:z=>!Object.hasOwn(z.dataset,"tooltipTruncated")||z.scrollWidth>z.clientWidth}))}Vt(),document.title="DeepView \u2014 scans";return}let n=MD[c.currentView];if(n){let M=bn(n.slot);M?.classList.add("managed-page-slot");let F=M?.firstElementChild?.session;if((F?.id!==c.managedSession?.id||F?.role!==c.managedSession?.role)&&M?.replaceChildren(),M&&!M.firstElementChild){let z=document.createElement(n.tag),pe=Re=>bi(Re,{gate:vt=>!Object.hasOwn(vt.dataset,"tooltipTruncated")||vt.scrollWidth>vt.clientWidth});z.localImportSource=cm(),c.currentView==="manage-import"&&(z.localDeps=lm(),z.promptPassword=Wc,z.resolveConflicts=Kc,z.confirmTriageImport=o0,z.confirmContentImport=i0,z.showTriageComparison=d0),z.session=c.managedSession,z.allowShare=c.managed?.allowShare===!0,c.currentView==="manage-scans"&&(z.selection=c.scanSelection),c.currentView==="manage-bundles"&&(z.createRepoId=c.bundleCreationRepoId,z.installTooltips=pe),M.append(z),(async()=>{await customElements.whenDefined(n.tag),await z.updateComplete,pe(z.renderRoot)})().catch(()=>{})}M?.firstElementChild&&(M.firstElementChild.session=c.managedSession,M.firstElementChild.allowShare=c.managed?.allowShare===!0),c.currentView==="manage-scans"&&M?.firstElementChild&&(M.firstElementChild.selection=c.scanSelection),c.currentView==="manage-bundles"&&M?.firstElementChild&&(M.firstElementChild.createRepoId=c.bundleCreationRepoId),Vt(),document.title=n.title;return}if(c.reports.length===0){c.currentWorkspace&&document.querySelector("#empty-workspace-slot")&&Du();return}let r=fr(),o=c.viewMode==="kanban",s={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},i=[];for(let M of r){let F=Fe(M).commonTriage;F&&s[F]++,(o||F===c.shownTriage)&&i.push(M)}Object.defineProperty(i,"ruledOutIds",{value:r.ruledOutIds});let a=!1,l=!1,p=!1,d=!1;for(let M of r)for(let F of M){No(F)&&(d=!0);let z=he(F);tn(F)&&(l=!0),z&&(z.comment&&(a=!0),z.fix&&(l=!0),z.flagged===!0&&(p=!0))}let f=ed(),m=r.some(M=>M.some(F=>f.has(F.id)));m||(c.filterDuplicates="");let h=i.some(dg),b=i.some(ug);h||(c.filterCrossContext=""),b||(c.filterAppStacked="");let y=O0(i);y||(c.filterSecurity="");let w=new Set,v=!1,x=!1,k=!1;for(let M of i)for(let F of M){let z=qr(F);z&&w.add(z)}for(let M of hg()){let F=!1,z=!1;for(let pe of M){let Re=Be(pe);Re==="partial"&&(x=!0),!((Re==="unreachable"||Re==="refuted")&&(k=!0,c.currentWorkspace))&&(Re==="revalidation"?F=!0:z=!0)}F&&z&&(v=!0)}let S=[...new Set(c.reports.map(M=>M.type))].join(", "),C=c.reports.map(M=>M.fileName),R=i.map(Ct).filter(M=>M.length>0),L=R.length>0&&Fp(R),A=cg(r),E=r.some(M=>M.some(F=>Zn(F.file))),T=r.some(M=>M.some(F=>!Zn(F.file))),I=!1,U=!1,K;e:for(let M of r)for(let F of M)if(!U)U=!0,K=F.file;else if(F.file!==K){I=!0;break e}let Q=r.some(M=>M.some(F=>!F.repo?.github&&!Zn(F.file))),ze=new Set;for(let M of r)for(let F of M)!Zn(F.file)&&F.repo?.github&&ze.add(F.repo.github);let We=ze.size===1?[...ze][0]:null,Ke=new Set,Ce=new Set;for(let M of r)for(let F of M)Ke.add(F._analyzer??null),Ce.add(ia(F));let yt=Object.keys(yg),Nr=M=>{if(M==null)return 1/0;let F=yt.indexOf(M);return F===-1?yt.length:F},np=[...Ke].toSorted((M,F)=>{let z=Nr(M),pe=Nr(F);return z!==pe?z-pe:String(M??"").localeCompare(String(F??""))}),rp=[...Ce].toSorted(lT);if(c.filterAnalyzer){let M=c.filterAnalyzer===hs?null:c.filterAnalyzer;(!Ke.has(M)||Ke.size<2)&&(c.filterAnalyzer="")}if(c.filterModel){let M=c.filterModel===bs?null:c.filterModel;(!Ce.has(M)||Ce.size<2)&&(c.filterModel="")}let Hn=Ov(w);c.filterRevalidate&&!Hn.some(M=>M.value===c.filterRevalidate)&&(c.filterRevalidate="");let V=nd(i);V&&(c.filterRevalidate="confirmed");let ue=w.has("partial")&&uo();ue||(c.filterPartial="");let wt=e&&(v||x||!c.currentWorkspace&&k),nw=!(e&&c.showRevalidation!==!1)&&!c.upstreamOnly&&E&&T;!nw&&c.filterSources.size>0&&c.filterSources.clear(),L||(c.filterConfMin=0,c.filterConfMax=10,(c.sortBy==="confidence-desc"||c.sortBy==="confidence-asc")&&(c.sortBy="severity")),!A&&(c.sortBy==="priority-desc"||c.sortBy==="priority-asc")&&(c.sortBy="severity"),!I&&c.sortBy==="file"&&(c.sortBy="severity");let op=N0(i),ti={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},ni={red:0,blue:0,green:0,gray:0,none:0};for(let M of op){if(M.length===1){let pe=de(M[0],c.severityMode);ti[pe]=(ti[pe]||0)+1;let Re=he(M[0])?.color??"none";ni[Re]=(ni[Re]||0)+1;continue}let F=new Set(M.map(pe=>de(pe,c.severityMode)));for(let pe of F)ti[pe]=(ti[pe]||0)+1;let z=new Set(M.map(pe=>he(pe)?.color??"none"));for(let pe of z)ni[pe]=(ni[pe]||0)+1}let rw=T0(op),ST=[...rw].toSorted(lT);if(c.filterRepo){let M=c.filterRepo===sg?null:c.filterRepo;rw.has(M)||(c.filterRepo="")}let ri=P0(rd(i)),rl=Pp(c.reports),ow=rl?Object.keys(rl).length:0,sp=ow>1;!sp&&c.currentView==="files"&&(c.currentView="findings"),!sp&&c.viewMode==="graph"&&(c.viewMode="kanban");let sw=cT(r,C,Q,We,ow);if(c.currentView==="files"){let M=Bp(r,c.severityMode),F=document.querySelector("#header-slot"),z=document.querySelector("#tree-view-slot");(!F||!z||!be.contains(F)||!be.contains(z))&&(be.innerHTML='<div id="header-slot"></div><div id="tree-view-slot"></div>',F=document.querySelector("#header-slot"),z=document.querySelector("#tree-view-slot")),F&&J(sw,F),z&&J(zx(rl,M),z),Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let CT=c.viewMode==="table"&&c.tableSelectedGid&&ri.some(M=>ie(M)===c.tableSelectedGid),oi=null;c.viewMode==="graph"&&rl&&(oi=Zy(),oi||(c.viewMode="kanban"));let ol=!!oi,Br="findings-content";CT&&(Br+=" with-details"),ol&&(Br+=" with-graph"),o&&(Br+=" with-kanban"),c.viewMode==="focus"&&(Br+=" with-focus");let iw=g,sl=g,aw=g,lw=nT(ri,c,mT);Qu=null,ol||(iw=$D(ri.length,i.length,s,ti,ni,{showSource:nw,showConfidence:L,showPriority:A,showGraphMode:sp,showFileSort:I,kanbanMode:o,showRepo:!!c.currentWorkspace,hasComment:a,revalidateOptions:Hn,showPartial:ue,canDropLayer:e,canDetailLayer:wt,canUpstreamLens:t,confirmedLocked:V,hasFix:l,hasFlagged:p,hasDuplicates:m,hasCrossContext:h,hasAppStacked:b,showSecurity:y,showSeverityMode:d||c.severityMode==="original"},{analyzers:np,models:rp,groups:op},ST),c.shownTriage&&i.length===0?sl=u`<p style="color:var(--muted); margin: 1rem 0;">No ${c.shownTriage} findings.</p>`:ri.length===0&&i.length>0&&!o?sl=u`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:i.length===0&&(sl=r.length>0?u`<p style="color:var(--green)">All ${S} issues triaged.</p>`:u`<p style="color:var(--green)">No ${S} issues found.</p>`),aw=CD(ri,lw));let si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content"),_T=Gt&&Gt.querySelector(":scope > #findings-graph-slot"),RT=Gt&&Gt.querySelector(":scope > #findings-body-slot"),MT=Gt&&(_T?"graph":RT?"body":null)===(ol?"graph":"body");if(!si||!Gt||!be.contains(si)||!be.contains(Gt)||!MT){let M=ol?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';be.innerHTML=`<div id="header-slot"></div><div class="${Br}">${M}</div>`,si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content")}else Gt.className!==Br&&(Gt.className=Br);si&&J(sw,si);let cw=document.querySelector("#toolbar-slot");cw&&J(iw,cw);let dw=document.querySelector("#empty-state-slot");dw&&J(sl,dw);let uw=document.querySelector("#findings-body-slot");if(uw&&J(aw,uw),oi){let M=document.querySelector("#findings-graph-slot");if(M){let z={extraTopRow:u`<view-mode-buttons modes="kanban,focus,table,list,grouped,graph"></view-mode-buttons>`,triageCounts:s,triageStates:["inprogress","fixed","invalid","deleted","ignored"]};zg(M,oi,z,fD,mD)}}if(Qu){let M=be.querySelector(".finding-table-slot");M&&(Zs||(Zs=document.createElement("finding-table")),Zs.items=Qu,Zs.selectedGid=c.tableSelectedGid,Zs.parentNode!==M&&M.append(Zs))}Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`,_()&&te?.replaceFindingRoute(rT(lw,c))}var OD=500,ND=14;function ep(e){if(!e)return null;let t={};e.color&&(t.color=e.color);let n=qe(e);return n&&(t.triage=n),typeof e.fix=="string"&&e.fix&&(t.fix=e.fix),typeof e.flagged=="boolean"&&(t.flagged=e.flagged),Object.keys(t).length>0?t:null}function tl(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function BD(e,t){return e.length>100?!1:t==null?!0:(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}var PD=e=>new TextEncoder().encode(e).length,jt=new Map,ei=new Set,nl=(e,t=c.currentManagedTeam)=>JSON.stringify([t,e]),Or=new Map,Wn=null,Qs=Promise.resolve();function $T(){let e=new Set;for(let t of c.reports)for(let n of t.groups)for(let r of n)typeof r.id=="string"&&r.id&&e.add(r.id);return e}function Qy(){return Array.isArray(c.managedReports)&&c.managedReports.length>0?c.managedReports:c.managedReport==null?[]:[c.managedReport]}function kT(e){let t=new Set,n=!1;for(let r of c.reports)if(r._managedReportId===e){n=!0;for(let o of r.groups??[])for(let s of o)typeof s.id=="string"&&s.id&&t.add(s.id)}return n||c.reports.length===0?t:new Set($T())}function DD(e){let t=Qy();for(let n of c.reports)if(n._managedReportId!=null&&(n.groups??[]).some(r=>r.some(o=>o.id===e))){let r=t.find(o=>o.id===n._managedReportId);if(r)return r}return t[0]??null}function ew(){let e=c.managedSession;return c.serverMode==="managed"&&c.localMode!==!0&&e!=null&&Yn(e.role,"triage")}function zD(e){return e===403&&c.managedSession?.viewer?!0:e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function WD(e,t){let n=Or.get(e.key);n==null&&(n={report:e.report,key:e.key,teamId:e.teamId,changes:new Map},Or.set(e.key,n));for(let r of t)n.changes.has(r)||n.changes.set(r,e.changes.get(r))}async function HD(e,t,n){if(!ew())return;let r=[...e.changes.keys()],o=0;for(;o<r.length;){let s=o,i={},a=0,l=ND;for(;o<r.length&&a<200;){let f=r[o],m=PD(`${JSON.stringify(f)}:${JSON.stringify(e.changes.get(f))},`);if(a>0&&l+m>262144)break;i[f]=e.changes.get(f),l+=m,a++,o++}let p=await jk(e.report.id,i,c.managedSession?.csrfToken,e.teamId),d=p>=200&&p<300;if(!d&&!zD(p)){WD(e,r.slice(s));return}d||console.warn("managed: the server refused a triage batch",e.report.id,p,Object.keys(i)),!d&&p===403&&c.managedSession?.viewer&&n.add(e.report.id);for(let[f,m]of Object.entries(i)){let h=jt.get(f)?.fix??"",b=d?m?.fix??"":h;b!==h&&t.add(e.teamId),jt.set(f,{key:tl(m),fix:b})}}}function tp(){Wn!=null&&(clearTimeout(Wn),Wn=null);let e=[...Or.values()];if(Or.clear(),e.length===0)return;let t=new Set,n=new Set;for(let r of e)Qs=Qs.then(()=>HD(r,t,n)).catch(o=>{console.warn("managed: triage push failed",o)});Qs=Qs.finally(()=>{for(let r of t)fs(r);for(let r of n)xb(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function xT(){if(!(Qy().length===0||!ew()||ei.size===0)){for(let t of $T()){let n=ep(c.triage.get(t)),r=tl(n);if((jt.get(t)?.key??"")===r)continue;if(!BD(t,n)){console.warn("managed: triage entry exceeds the server caps, kept local only",t),jt.set(t,{key:r,fix:jt.get(t)?.fix??""});continue}let o=DD(t);if(o==null||!ei.has(nl(o.id)))continue;let s=c.currentManagedTeam,i=nl(o.id,s),a=Or.get(i);a==null&&(a={report:o,key:i,teamId:s,changes:new Map},Or.set(i,a)),a.changes.set(t,n)}Or.size!==0&&(Wn!=null&&clearTimeout(Wn),Wn=setTimeout(tp,OD))}}var vT=!1;function nR(){vT||!ew()||(vT=!0,rm(xT))}function Tu(){I$(),c.managedComments?.clear(),c.managedIssues.clear(),globalThis.document?.dispatchEvent(new Event("managed-comments-reset")),Wn!=null&&(clearTimeout(Wn),Wn=null),Or.clear(),ei.clear(),jt.clear()}async function une(e,{renderView:t=!0,signal:n,readAnnotations:r}={}){let o=c.reports,s=c.currentManagedTeam,i=c.managedSession?.role,a=c.managedSession?.id,l=()=>!n?.aborted&&c.serverMode==="managed"&&c.localMode!==!0&&c.managedSession!=null&&c.managedSession.id===a&&c.managedSession.role===i&&c.reports===o&&c.currentManagedTeam===s&&Qy().some(y=>y.id===e);if(!l()||(ei.delete(nl(e)),tp(),!await tw(n)||!l()))return!1;let p=new Map(c.managedIssues),d=r?await r(e):null,f=r?d?.entries:await Gm(e,s,{signal:n});if(f==null||!l())return!1;let m=!1,h=kT(e),b=d&&ta(h,d.issues,p);for(let y of h){if(!Object.hasOwn(f,y)){jt.delete(y);continue}let w=ep(f[y]);jt.set(y,{key:tl(w),fix:w?.fix??""});let v=w?.triage==null||w.triage==="ignored"?c.triage.get(y)?.ignoredReports:void 0;ml(c.triage,y,{...w,ignoredReports:v,scopedIgnoredReports:c.triage.get(y)?.scopedIgnoredReports})&&(m=!0)}if(ei.add(nl(e)),d&&Um(s,h,p),b&&!m&&t&&O(),m){if(await xe(),!l())return!1;t&&O()}return xT(),!0}function tw(e){return e?e.aborted?Promise.resolve(!1):new Promise(t=>{let n=o=>{e.removeEventListener("abort",r),t(o)},r=()=>n(!1);e.addEventListener("abort",r,{once:!0}),Qs.then(()=>n(!0),()=>n(!1))}):Qs.then(()=>!0)}async function xb(e,{signal:t,readAnnotations:n}={}){let r=c.reports,o=c.currentManagedTeam,s=c.managedSession?.role,i=c.managedSession?.id,a=()=>!t?.aborted&&c.serverMode==="managed"&&!c.localMode&&c.reports===r&&c.currentManagedTeam===o&&c.managedSession?.id===i&&c.managedSession?.role===s&&ei.has(nl(e,o));if(!a()||(tp(),!await tw(t)||!a()))return!1;let l=kT(e),p=new Map([...l].map(w=>[w,jt.get(w)])),d=new Map(c.managedIssues),f=n?await n(e):null,m=n?f?.entries:await Gm(e,o,{signal:t});if(m==null||!a())return!1;let h=f&&ta(l,f.issues,d),b=!1,y=!1;for(let w of l){let v=p.get(w),x=ep(c.triage.get(w));if(jt.get(w)!==v||tl(x)!==(v?.key??""))continue;let k=ep(m[w]);(v?.fix??"")!==(k?.fix??"")&&(y=!0),jt.set(w,{key:tl(k),fix:k?.fix??""});let $=k?.triage==null||k.triage==="ignored"?c.triage.get(w)?.ignoredReports:void 0;ml(c.triage,w,{...k,ignoredReports:$,scopedIgnoredReports:c.triage.get(w)?.scopedIgnoredReports})&&(b=!0)}if(y&&fs(o),f&&Um(o,l,d),h&&!b&&O(),b){if(await xe(),!a())return!1;O()}return!0}function h_(e,t){if(!e)return;let n=c.currentManagedReport;if(n!=null&&(c.managedReports.length!==1||c.managedReports[0].id!==n))return;let r;return async o=>(r??=(async()=>(tp(),!await tw(t)||t?.aborted?null:Wk(e,{signal:t,reportId:n})))(),(await r)?.(o)??null)}export{k$ as a,x$ as b,S$ as c,C$ as d,uf as e,_$ as f,Zr as g,c as h,_ as i,rI as j,cI as k,Ie as l,Pf as m,Y as n,ss as o,$I as p,xI as q,SI as r,_I as s,RI as t,Yi as u,Y$ as v,MI as w,xe as x,ek as y,BI as z,PI as A,DI as B,nA as C,oA as D,yW as E,wW as F,vW as G,$W as H,kW as I,xW as J,G as K,te as L,ea as M,Bm as N,Pm as O,Wm as P,J4 as Q,ye as R,Ae as S,rn as T,Hc as U,Qk as V,Uc as W,Kc as X,ot as Y,Ee as Z,hs as _,sg as $,bs as aa,td as ba,FW as ca,LW as da,OW as ea,cr as fa,TA as ga,IA as ha,aa as ia,rd as ja,P0 as ka,DW as la,ys as ma,U0 as na,ZW as oa,ie as pa,uo as qa,dr as ra,DA as sa,_t as ta,he as ua,zA as va,ur as wa,je as xa,En as ya,Y0 as za,Fe as Aa,f6 as Ba,HA as Ca,m6 as Da,da as Ea,g6 as Fa,fr as Ga,fo as Ha,h6 as Ia,b6 as Ja,ld as Ka,vs as La,W6 as Ma,me as Na,sH as Oa,iH as Pa,Mg as Qa,mo as Ra,gr as Sa,aH as Ta,uE as Ua,gd as Va,Ig as Wa,wd as Xa,gH as Ya,hH as Za,wx as _a,kx as $a,$d as ab,EH as bb,kd as cb,Ss as db,zH as eb,_E as fb,KH as gb,Tx as hb,Ix as ib,RE as jb,Bg as kb,xd as lb,qH as mb,YH as nb,Sd as ob,Cd as pb,Cs as qb,_s as rb,Ex as sb,nU as tb,rU as ub,it as vb,_U as wb,RU as xb,rF as yb,MU as zb,Is as Ab,wr as Bb,Td as Cb,jU as Db,Kx as Eb,Fd as Fb,xS as Gb,SS as Hb,_S as Ib,Qg as Jb,RS as Kb,JF as Lb,ZF as Mb,MS as Nb,TS as Ob,mV as Pb,tL as Qb,nL as Rb,DS as Sb,ih as Tb,WS as Ub,TV as Vb,HS as Wb,VS as Xb,YS as Yb,XS as Zb,DV as _b,ZS as $b,zV as ac,WV as bc,dh as cc,UV as dc,VV as ec,XV as fc,yh as gc,Ca as hc,u1 as ic,ln as jc,v1 as kc,Ra as lc,$1 as mc,YO as nc,oN as oc,iN as pc,aN as qc,Hh as rc,oC as sc,cN as tc,dN as uc,e7 as vc,uN as wc,t7 as xc,i7 as yc,a7 as zc,l7 as Ac,c7 as Bc,d7 as Cc,dC as Dc,mC as Ec,hC as Fc,Yh as Gc,yC as Hc,Zh as Ic,oK as Jc,$C as Kc,sK as Lc,iK as Mc,_N as Nc,aK as Oc,a_ as Pc,vb as Qc,Ge as Rc,yB as Sc,nR as Tc,Tu as Uc,une as Vc,xb as Wc,h_ as Xc,Ro as Yc,ay as Zc,Ua as _c,oR as $c,Ir as ad,Ks as bd,UR as cd,HJ as dd,UJ as ed,Hu as fd,YR as gd,AZ as hd,EZ as id,RM as jd,MM as kd,Ku as ld,rte as md,fD as nd,mD as od,O as pd,Du as qd,Ka as rd,Bc as sd,Sk as td,oz as ud,sz as vd,iz as wd,az as xd,lz as yd,cz as zd,dz as Ad,uz as Bd,Km as Cd,pz as Dd,fz as Ed,mz as Fd,gz as Gd,$_ as Hd,O_ as Id,H as Jd,aX as Kd,Mt as Ld};
|
|
191
|
+
style=${le({"--connection-color":By(this.graph.nodes.get(a.from))})} marker-end="url(#dependency-arrow)"/>`)}</svg>`:g} ${Z(t.packages,a=>a.id,a=>this.renderNode(a,i?o:null))}</div></div>`}render(){if(!this._current)return g;let{nodes:t,targets:n}=this.graph,r=this.packageGroup===void 0?this.packageKey:jo(this.packageGroup);return u`<dialog aria-labelledby="why-title" style="${le({"--graph-dialog-width":`${Math.max(480,this.layout.width+ep)}px`})}" @close="${this._onClose}" @click="${this._onBackdrop}"><header><h3 id="why-title">${r}${this.version===void 0?g:u`<span class="heading-version">${this.version}</span>`}</h3><button type="button" aria-label="Close dependency chains" @click="${this._onClose}">×</button></header><div class="graph-caption"><span>${t.size} ${t.size===1?"package":"packages"}${n.length>1?` \xB7 ${n.length} installations${this.version===void 0?"":" of this version"}`:""}${this.reason?` \xB7 Scope: ${this.reason}`:""}</span> <span>↓ imports</span></div>${n.length>0?this.renderGraph():u`<p class="empty">Dependency metadata for this ${this.version===void 0?"package":"version"} is not available in this bundle scope.</p>`}</dialog>`}};customElements.define("why-dialog",Py);function tp(e){return re("why-dialog",e)}var pP=new Map,IM=new Map,AM=[];function Ao(e){if(!e?.managedId)return pP;let t=c.managedSession,n=c.managedTeams&&rt(c.managedTeams),r=[t?.id,t?.role,t?.csrfToken,c.currentManagedTeam,n];return r.some((o,s)=>o!==AM[s])&&(AM=r,IM=new Map),IM}var Dy=new WeakMap;function rl(e){return Dy.has(e)||Dy.set(e,{reasons:Go(e),selected:""}),Dy.get(e)}function Eo(e,t=rl(e).selected){return JSON.stringify([e.managedId??e.integrity,t])}var EM="deepview.advisories.proxyConsent";function zy(){try{return localStorage.getItem(EM)==="1"}catch{return!1}}function _Q(){try{localStorage.setItem(EM,"1")}catch{}}function fP(e){if(!e||e.kind!=="stasis"||!e.bundle)return!1;for(let[t,n]of e.bundle.modules)if(t.includes("node_modules")&&n?.name&&typeof n.version=="string"&&n.version)return!0;return!1}function FM(e){if(!e||e.kind!=="stasis"||!e.bundle)return!1;for(let[t,n]of e.bundle.modules)if(!(t==="."||typeof n?.name!="string"||!n.name||typeof n.version!="string"||!n.version)&&(n.ecosystem||/(?:^|\/)node_modules\//u.test(t)))return!0;return!1}function mP(e){if(e.bundle&&!FM(e))return!0;let t=Ao(e).get(Eo(e,""));return t?.state==="ok"&&t.query.size===0&&t.skipped.length===0}function LM(e,t,n=!1){return!e||e.managedId&&!hP(e)||gP(e,t)<1||e.summary?.versionedPackages===0?!1:n?!0:_y(e.name)!=="stasis"?!1:!t||t.integrity!==e.integrity?!0:e.managedId?!t.bundle||FM(t):fP(t)}function gP(e,t){let n=t?.integrity===e.integrity&&t.bundle?t.bundle.version:e.summary?.stasisVersion;return Number.isSafeInteger(n)?n:1/0}function hP(e){let t=c.managedSession?.role;return["admin","manage"].includes(t)?!0:["view","triage"].includes(t)?c.managedTeams.some(n=>(c.currentManagedTeam==null||n.id===c.currentManagedTeam)&&n.permissions?.security===!0&&n.bundles?.some(r=>r.id===e.managedId)):!1}function bP(e){return Object.fromEntries([...e].map(([t,n])=>[t,[...n].toSorted()]))}var Wy=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function yP(e){return{...e,title:e.title||e.id,severity:e.severity??"unknown",cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function wP(e){let t=Array.isArray(e),n=t?Map.groupBy(e.map(yP),Wy):new Map(Object.entries(e??{}));for(let[r,o]of n){let s=Array.isArray(o)?o.filter(i=>i&&typeof i.title=="string"&&typeof i.severity=="string"):[];s.length>0?n.set(r,t?s:s.map(i=>({...i,source:"registry"}))):n.delete(r)}return n}function OM(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function vP(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(bP(e))});if(!t.ok){let n=`HTTP ${t.status}`;try{let r=await t.json();typeof r?.error=="string"&&r.error&&(n=`${r.error} (HTTP ${t.status})`)}catch{}throw new Error(n)}return t.json()}function rp(e,t){return NM(e,t)}function $P(e,t){return NM(e,t,!0)}async function NM(e,t,n=!1){if(!e?.integrity||!e.managedId&&!zy())return;let r=Ao(e),o=Eo(e),s=r.get(o);if(n){if(!OM(e,s))return;r.set(o,{...s,recheckingRepositories:!0,repositoryError:null}),t()}else if(s)return;let{reasons:i,selected:a}=rl(e),l=e.managedId?new Map:pv(e,i.get(a)??null);n||r.set(o,{state:"loading",query:l});try{let p,d=[];if(e.managedId){let f=await f0(e.managedId,void 0,a,n,n);l=Array.isArray(f.packages)?new Map(f.packages.map(m=>[Wy(m),new Set(m.versions)])):new Map(Object.entries(f.packages).map(([m,h])=>[m,new Set(h)])),p=f.advisories,d=Array.isArray(f.skipped)?f.skipped:[]}else p=l.size>0?await vP(l):{};r.set(o,{state:"ok",byPackage:wP(p),query:l,skipped:d})}catch(p){let d=p?.message??"fetch-failed";r.set(o,n&&![401,403,404].includes(p?.status)?{...s,recheckingRepositories:!1,repositoryError:d}:{state:"error",reason:d,query:l})}t()}async function RQ(e,t){if(!e?.integrity)return;let n=Ao(e),r=Eo(e);n.get(r)?.state==="error"&&(n.delete(r),await rp(e,t))}var kP={critical:0,high:1,moderate:2,low:3,info:4};function np(e){return kP[e]??999}function xP(){let e=typeof window>"u"?"":window.location.host;return u`<div class="bundle-advisories-consent"><div class="bundle-advisories-consent-card"><p class="bundle-advisories-consent-text">This bundle's dependency names and versions will be sent to the npm registry through a same-origin proxy (<span class="mono">${e}</span> → <span class="mono">registry.npmjs.org</span>) to look up published security advisories.</p><button type="button" class="bundle-advisories-consent-btn" data-advisories-consent>Confirm</button><p class="bundle-advisories-consent-note">This preference will be saved and reused for other bundles.</p></div></div>`}function BM(e,t=()=>{},n=null){let r=e?rl(e):null,o=[...r?.reasons.keys()??[]].map(a=>({id:`reason:${a}`,label:a})),s=CP(e),i=!!e?.managedId&&!mP(e);return u`<div class="bundle-advisories-panel">${s!==g||o.length>0||i?u`<div class="bundle-advisories-toolbar">${s} ${o.length>0||i?u`<div class="bundle-advisories-scopes">${o.length>0?u`<bundle-scope-selector .reasons="${o}" .value="${r.selected?`reason:${r.selected}`:""}" label="Choose advisory scope" @scope-change="${a=>{let l=a.detail.value.replace(/^reason:/u,"");r.selected=r.reasons.has(l)?l:"";let p=rp(e,t);return t(),p}}"></bundle-scope-selector>`:g} ${i?SP(e,t):g} ${i&&n?u`<button type="button" class="bundle-advisories-retry bundle-advisories-scan" @click="${n}">${W(Vn)}<span>Validate</span></button>`:g}</div>`:g}</div>`:g} ${RP(e)}</div>`}function SP(e,t){if(!e?.managedId)return g;let n=Ao(e).get(Eo(e)),r=!!n?.recheckingRepositories;return u`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!OM(e,n)}" aria-busy="${String(r)}" @click="${()=>$P(e,t)}">${r?"Rechecking\u2026":"Recheck against repositories"}</button>`}function CP(e){if(!e||!e.managedId&&!zy())return g;let t=Ao(e).get(Eo(e));if(t?.state!=="ok")return g;let n=t.query.size,r=t.byPackage.size;if(r===0)return g;let o=[...t.byPackage.values()].reduce((s,i)=>s+i.length,0);return u`<div class="bundle-advisories-summary">${o} ${o===1?"advisory":"advisories"} across ${r} of ${n} ${n===1?"package":"packages"}</div>`}function _P(e,t){let n=t.query.size;return n===0&&t.skipped.length>0?u`No packages could be audited.`:u`No advisories for the ${n} ${t.skipped.length>0?"audited ":""}${n===1?"package":"packages"} in ${rl(e).selected?"this scope":"this bundle"}.`}function RP(e){if(!e)return u`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!=="stasis"||!e.managedId&&!e.bundle)return u`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!e.managedId&&!zy())return xP();let t=Ao(e).get(Eo(e));if(!t||t.state==="loading")return u`<div class="bundle-advisories-empty">Loading advisories…</div>`;if(t.state==="error")return u`<div class="bundle-advisories-empty is-error"><span>Failed to fetch advisories: ${t.reason}</span> <button type="button" class="bundle-advisories-retry" data-advisories-retry>Retry</button></div>`;let n=t.byPackage.size===0?u`<div class="bundle-advisories-empty"><span>${_P(e,t)}</span></div>`:g;if(t.byPackage.size===0&&t.skipped.length===0&&!t.repositoryError)return n;let r=[...t.byPackage.entries()].toSorted(([o,s],[i,a])=>{let l=Math.min(...s.map(d=>np(d.severity))),p=Math.min(...a.map(d=>np(d.severity)));return l!==p?l-p:o.localeCompare(i)});return u`${n}<div class="bundle-advisories">${t.repositoryError?u`<div class="bundle-advisories-empty is-error" role="alert">Repository recheck failed: ${t.repositoryError}. Previous results are shown.</div>`:g} ${t.skipped.length>0?u`<section class="bundle-advisories-skipped" aria-label="Dependencies not audited"><h3>Not audited</h3><ul>${t.skipped.map(o=>u`<li><span class="mono">${Wy(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:g}<ul class="bundle-advisories-list">${r.map(([o,s])=>MP(e,o,s,t.query.get(o),()=>Ao(e).get(Eo(e))?.byPackage===t.byPackage))}</ul></div>`}function MP(e,t,n,r,o){let s=[...n].toSorted((a,l)=>{let p=np(a.severity)-np(l.severity);return p!==0?p:(a.title??"").localeCompare(l.title??"")}),i=r?[...r].toSorted():[];return u`<li class="bundle-advisories-section"><div class="bundle-advisories-package"><span class="bundle-advisories-section-name">${t}</span> ${i.length>0?u`<span class="bundle-advisories-section-versions">${i.map(a=>u`<button type="button" class="bundle-advisories-version" aria-haspopup="dialog" aria-label="${`Why is ${t}@${a} here?`}" @click="${()=>tp({details:e,packageKey:t,version:a,reason:rl(e).selected,isCurrent:o})}">${a}</button>`)}</span>`:g}</div><ul class="bundle-advisories-rows">${s.map(a=>fu(a,({title:l,severity:p,details:d})=>ku({heading:l,severity:p,markdown:d,isCurrent:o})))}</ul></li>`}var ap=e=>R()?[]:Mf(e),TP=()=>R()?0:Tf(),ol=null,Hy=new WeakMap;function IP(e){if(Hy.has(e))return Hy.get(e);let t=Rp(e),n=Ol(e),r=[...t.keys()],{stripped:o}=Qn(r),s=new Map(r.map((l,p)=>[l,o[p]])),i={};for(let l of r){let p=s.get(l),d=n.get(l);i[p]={imports:d?[...d].map(f=>s.get(f)).filter(Boolean):[],size:t.get(l)}}let a={tree:i,origToStripped:s};return Hy.set(e,a),a}function KM(e,t=null){let n={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0};if(!e?.fileHashes)return n;let r=new Set;for(let[o,s]of e.fileHashes)if(!(t&&!t.has(o))&&!r.has(s)){r.add(s);for(let i of ap(s)){let a=Me(i,c.triage.get(j(i)));a&&n[a]!==void 0&&n[a]++}}return n}function ei(e,t="graph"){if(!e||e.size===0)return new Map;let n=new Map;for(let[r,o]of e){let s=ap(o);if(s.length===0)continue;let i=s.filter(a=>{let l=Me(a,c.triage.get(j(a)))??null;return t==="issues"?l!=="invalid"&&l!=="deleted":l===c.shownTriage});i.length!==0&&n.set(r,i)}return n}function qM(e){let t=IP(e),n=Go(e,t.origToStripped.keys());ee.bundleReasonFor!==e.integrity&&(ee.bundleReasonFor=e.integrity,ee.dependencyPackagesView=!1,ee.bundleReason=null);let{tree:r,origToStripped:o,selected:s}=yv(t.tree,t.origToStripped,n,ee.bundleReason);ee.bundleReason=s;let i=Object.keys(r);if(i.length===0)return null;let a=null;if(e.fileHashes&&e.fileHashes.size>0){a=new Map;for(let[A,E]of e.fileHashes){let T=o.get(A);T!==void 0&&a.set(T,E)}}let l=ei(a),p=l.size>0||[...e.fileHashes??[]].some(([A,E])=>t.origToStripped.has(A)&&ap(E).length>0),d=p&&ee.bundleIssues,f=new Map,m=new Map,h=new Map,b=new Map;for(let[A,E]of d?l:[]){let T={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},I=new Set,U=new Set,K=[];for(let Q of E){T[Q.severity]=(T[Q.severity]||0)+1,I.add(Q.severity);let ze=c.triage.get(j(Q))?.color??"none";U.add(ze),K.push({severity:Q.severity,color:ze})}f.set(A,T),m.set(A,I),h.set(A,U),b.set(A,K)}let y=["matrix","flow"].includes(ee.bundleLayout)||f.size===0?null:Ql(r,f),w=new Map;for(let[A,E]of o)w.set(E,A);let v=Nt(e),x=new Map(v?[...e.bundle.modules].map(([A,E])=>[A,{directory:A,version:typeof E.version=="string"?E.version:void 0}]):[]),$=A=>{let E=w.get(A)??A;return qr(E,{packageDir:v?.get(E)})},k=i.filter(A=>$(A)==="__own__"),S=Nl(e,o,$,v,t.origToStripped),C=new Set;for(let A of i)if(C.add($(A)),C.size>=3)break;let _=C.size>=3,L=i;if(ee.focusedPkg){let A=i.filter(E=>$(E)===ee.focusedPkg);A.length>0?L=A:ee.focusedPkg=null}return ee.selected&&!Object.hasOwn(r,ee.selected)&&(ee.selected=null),{treeData:r,files:L,ownCounts:f,transitiveCounts:y,severitySets:m,colorSets:h,fileFindings:b,options:{pkgOf:$,packageInfoOf:A=>x.get(v?.get(w.get(A)??A))},strippedToOrig:w,canPackagesView:_,hasIssues:p,issuesShown:d,viewId:e.integrity??null,supportsLayers:!0,layerRoots:S,flowEntries:ee.bundleLayout==="flow"?wv(e,o,t.origToStripped,v):void 0,ownSourcePackages:hv(o,$,v),entryPackages:bv(e,o,$),ownSourceFiles:new Set(k),reasons:[...n.keys()]}}function YM(){if(!ol)return;let e=Fs();e&&e.refreshSidebar(ol,{isBundleContext:!0,findingsJump:!R()})}function XM(){if(!ol)return;let e=Fs();e&&e.refreshTopPkgs(ol)}function JM(e){ol=e}function AP(e,t,n){let r=new Map,o=new Map,s=0;for(let{path:a,size:l,pkgDir:p}of e){if(typeof l!="number"||l<=0)continue;let d=qr(a,{packageDir:p});r.set(d,(r.get(d)??0)+l),o.has(d)||o.set(d,SM(n,p)),s+=l}if(s===0)return g;let i=[...r.entries()].toSorted((a,l)=>+(l[0]==="__own__")-+(a[0]==="__own__")||(t==="size"?l[1]-a[1]:0)||jo(a[0]).localeCompare(jo(l[0]))||a[0].localeCompare(l[0]));return u`<div class="bundles-dist"><div class="bundles-dist-bar" aria-hidden="true">${Z(i,([a])=>a,([a,l])=>u`<span class="bundles-dist-seg" style="${le({flexGrow:l,background:Sn(a)})}" data-tooltip="${a==="__own__"?g:`${a}: ${ge(l)}`}"></span>`)}</div><ul class="bundles-dist-list">${Z(i,([a])=>a,([a,l])=>{let p=(l/s*100).toFixed(1),d=jo(a),f=Sn(a),m=o.get(a);return u`<li><span class="bundles-dist-dot" style="${le({background:f})}"></span> ${m?u`<button type="button" class="bundles-dist-pkg" aria-haspopup="dialog" aria-label="${`Show dependency chains for ${d}`}" @click="${()=>EP(n,m)}" data-tooltip-truncated data-tooltip="${a}">${d}</button>`:u`<span class="bundles-dist-pkg" data-tooltip-truncated data-tooltip="${a==="__own__"?g:a}">${d}</span>`} <span class="bundles-dist-bar-row" aria-hidden="true"><span class="bundles-dist-bar-fill" style="${le({width:`${p}%`,background:f})}"></span> </span><span class="bundles-dist-size">${ge(l)}</span> <span class="bundles-dist-percent">${p}%</span></li>`})}</ul></div>`}function EP(e,t){let n=c.currentManagedTeam,r=c.currentWorkspace,o=c.managedSession&&rt(c.managedSession);return tp({details:e,...t,isCurrent:()=>c.currentView==="bundles"&&c.selectedBundle===e.integrity&&(c.bundleDetails&&rt(c.bundleDetails))===rt(e)&&c.currentWorkspace===r&&c.currentManagedTeam===n&&(c.managedSession&&rt(c.managedSession))===o})}function Ky(e,t,n,r,o,s,{bundleSize:i=null,unpackedSize:a=null,resources:l=null,details:p=null,leadColumn:d=null,trailColumns:f=g,summaryExtra:m=g,fileTag:h=null,fileIcon:b=null,fileFlags:y=null,overviewClass:w="",fileFilter:v=null,lines:x=null,sized:$=(k,S,C)=>C}={}){let{prefix:k,stripped:S}=Qn(n),C=V=>o?.get(n[V]),_=new Set;for(let V=0;V<S.length;V++)_.add(qr(n[V],{packageDir:C(V)}));let L=S.map((V,ue)=>ue).filter(V=>!v||v.keeps(n[V])),A=V=>y?.(n[V])??[],E=L.some(V=>A(V).length>0),T=c.bundleOverviewFilesSort==="flags"&&!E?"name":c.bundleOverviewFilesSort,I=T==="flags"?T_(L,A,V=>S[V]):L.toSorted((V,ue)=>(T==="size"?(r[ue]??-1)-(r[V]??-1):0)||S[V].localeCompare(S[ue])),U=n.map((V,ue)=>({path:V,size:r[ue],pkgDir:C(ue)})),K=c.bundleOverviewPackagesSort,Q=AP(U,K,p),ze=Q===g?u`<p class="bundles-overview-col-empty">No size information for this bundle's sources.</p>`:Q,We={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Ke=0,Ce=new Map;if(c.bundleDetails?.fileHashes){let V=ei(c.bundleDetails.fileHashes,"issues");for(let ue of V.values())for(let yt of ue){We[yt.severity]!==void 0&&We[yt.severity]++,Ke++;for(let Oo of Oi(yt.fileHash,yt))Ce.set(Oo,(Ce.get(Oo)??0)+1)}}let bt=[...Ce.keys()].toSorted(),Br=et.filter(V=>We[V]>0).map(V=>u`<span class="${`tree-count-chip ${V}`}">${We[V]} ${V.replaceAll("_"," ")}</span>`),fp=n.length>0?u`<ul class="bundles-sources-list">${I.map(V=>{let ue=n[V],yt=r[V],Oo=u`${b?b(ue):g}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${ue}">${S[V]}</span> ${h?h(ue):g} ${yt==null?g:u`<span class="bundles-source-size">${ge(yt)}</span>`}`;return u`<li>${l?.has(ue)?u`<div class="bundles-source-row is-resource">${Oo}</div>`:u`<button type="button" class="bundles-source-row" data-bundle-view-source="${ue}">${Oo}</button>`}</li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,mp=bt.length>0?u`<ul class="bundles-reports-list">${bt.map(V=>{let ue=ye[Ae(V)]??ye.default,yt=Ce.get(V)??0;return u`<li><button type="button" class="report-chip bundles-report-chip" data-bundle-issue-report="${V}">${W(ue)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${V}">${oe(V)}</span> <span class="bundles-report-count">${yt} ${yt===1?"issue":"issues"}</span></button></li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No matching reports indexed yet.</p>`,Hn=n.length-(l?.size??0);return u`<div class="bundles-overview ${w}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e(k)}<dl class="bundles-detail-meta is-build">${t}<dt>Sources</dt><dd>${x==null?$("files",Hn,Hn):u`${$("files",Hn,`${Hn} ${Hn===1?"file":"files"}`)} · ${$("lines",x,`${x.toLocaleString("en")} LoC`)}`}</dd>${i==null?g:u`<dt>Size</dt><dd>${ge(i)}</dd>`} ${a==null?g:u`<dt>Unpacked</dt><dd>${$("unpacked",a,ge(a))}</dd>`} ${l?.size?u`<dt>Resources</dt><dd>${l.size}</dd>`:g}</dl>${s??g}</div>${Ke>0?u`<div class="bundles-issue-summary tree-count-chips">${Br}</div>`:g} ${m}</div><div class="bundles-overview-columns">${d??Ln({title:"Packages",count:_.size,body:ze,tools:u`<span class="bundles-overview-sort" role="group" aria-label="Package order">${[["name","Name"],["size","Size"]].map(([V,ue])=>u`<button type="button" aria-pressed="${String(K===V)}" @click="${()=>{c.bundleOverviewPackagesSort=V,O()}}">${ue}</button>`)}</span>`})} ${Ln({title:"Files",count:v?`${I.length} of ${n.length}`:n.length,body:fp,list:!0,extra:v?u`<button type="button" class="bundles-overview-filter" aria-label="${`Show every file, not only ${v.label}`}" @click="${v.clear}">${v.label}<span aria-hidden="true">×</span></button>`:g,tools:u`<span class="bundles-overview-sort" role="group" aria-label="File order">${[["name","Name"],["size","Size"],...E?[["flags","Flags"]]:[]].map(([V,ue])=>u`<button type="button" aria-pressed="${String(T===V)}" @click="${()=>{c.bundleOverviewFilesSort=V,O()}}">${ue}</button>`)}</span>`})} ${bt.length>0?Ln({title:"Reports",count:bt.length,body:mp,list:!0}):g} ${f}</div></div>`}var Uy=new Map,Vy=new Set,ZM=()=>u`<button type="button" class="bundle-source-wrap-toggle" data-bundle-source-wrap hidden aria-pressed="${c.bundleSourceWrap?"true":"false"}" aria-label="Wrap lines" data-tooltip="Wrap lines">${Kx}</button>`;function FP(e){let t=e?.status;return u`<button type="button" class="${q({"bundle-source-pretty-toggle":!0,"is-loading":t==="loading","is-error":t==="error"})}" data-bundle-source-pretty aria-pressed="${c.bundleSourcePretty?"true":"false"}" aria-busy="${t==="loading"?"true":g}" aria-label="Pretty-print" data-tooltip="${p1(e)}">${u1}</button>`}function Xy(e,t,n,r,o,s){let i=m1(e,t,n,r),a=i?y1(e,t,n,r,()=>{c.bundleSourceFile===n&&O()}):null,l=a?.status==="ready";return{pretty:l,toggle:i?FP(a):g,content:l?a.text:r,fileFindings:l?[]:o,lineFindings:l?new Map:s}}var zn=null;function op(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function LP(e){requestAnimationFrame(()=>requestAnimationFrame(()=>{document.querySelector(`.bundle-code-main .bundle-source-lineno-row[data-line="${e}"]`)?.scrollIntoView({block:"center"})}))}function Fo(e){for(let t of et)for(let n of e)if(n.severity===t)return t;return e[0]?.severity??null}var jy={content:"",parts:""};function OP(e){if(jy.content===e)return jy.parts;let t=e;if(e.length>Hd||Rs(e)){let n=o=>[Ud(o)].flat();t=[];let r=0;for(let o=0;o<e.length;){let s=e.indexOf(`
|
|
192
|
+
`,o),i=s===-1?e.length:s+1;(s===-1?i:s)-o>cS&&(t.push(...n(e.slice(r,o)),u`<span class="bundle-source-long-line">${n(e.slice(o,i))}</span>`),r=i),o=i}t.push(...n(e.slice(r)))}return jy={content:e,parts:t},t}function NP(e,t,n,r,o=null,s=!1,i=!1){let a=e.split(`
|
|
193
|
+
`).length,l=c.bundleSourceTargetLine,p=!i&&l&&l.path===t&&l.bundle===(n?.integrity??null)?l.line:null,d=p==null?null:Math.max(l.end??p,p),f=String(a).length,m=bi(t,n?.kind==="stasis"?n.bundle?.formats?.get(t):void 0,e),h=`${n?.integrity??""}\0${t}${i?"\0pretty":""}`;m&&!Uy.has(h)&&!Vy.has(h)&&(Vy.add(h),(async()=>{let y=await Ss(e,m,Wg(n,t));Uy.set(h,typeof y=="string"?Td(y):null),Vy.delete(h),c.bundleSourceFile===t&&O()})());let b=Uy.get(h);return u`<div class="${q({"bundle-source-lines":!0,"is-wrapped":c.bundleSourceWrap})}" style="${le({"--lineno-width":`${f}ch`})}" ${lS(ph)}><aside class="bundle-source-lineno-col" aria-hidden="true">${Array.from({length:a},(y,w)=>{let v=w+1,x=r.get(v),$=x?Fo(x.map(S=>S.f)):null,k=x&&c.bundleSourceFindingIdx!=null&&x.some(S=>S.idx===c.bundleSourceFindingIdx);return u`<div class="${q({"bundle-source-lineno-row":!0,"is-match":o?.has(v)??!1,"is-target":p!=null&&v>=p&&v<=d})}" data-line="${v}">${x?u`<button type="button" class="${q({"bundle-source-dot":!0,[`sev-${$}`]:!0,active:k})}" data-bundle-source-finding="${x[0].idx}" data-tooltip="${`${x.length} ${x.length===1?"issue":"issues"} on line ${v}`}" aria-label="${`${x.length} issues on line ${v}`}"></button>`:u`<span class="bundle-source-dot-placeholder"></span>`} <span class="bundle-source-lineno-num" data-bundle-source-line="${s?v:g}">${v}</span></div>`})}</aside><pre class="bundle-source-code" tabindex="-1" aria-label="${t}"><code class="${m?`language-${m}`:""}">${typeof b=="string"?W(b):OP(e)}</code></pre></div>`}function BP(e){let t=c.bundleSourceFindingIdx;if(t==null)return g;let n=e[t];if(!n)return g;let r=n.fileHash?Oi(n.fileHash,n):[],o=Me(n,c.triage.get(j(n))),s=o==="fixed"?"Fixed":o==="inprogress"?"In progress":o==="ignored"?"Ignored":null,i=Zr(n),a=oT(n.line);return u`<aside class="bundle-source-panel"><header class="bundle-source-panel-bar"><span class="${`bundle-source-panel-sev sev-${n.severity}`}">${n.severity.replaceAll("_"," ")}</span> ${s?u`<span class="${`bundle-source-panel-triage triage-${o}`}">${s}</span>`:g} <button type="button" class="bundle-source-panel-close" data-action="bundle-source-panel-close" aria-label="Close finding details">×</button></header><div class="bundle-source-panel-body">${a||i?u`<div class="bundle-source-panel-line-row">${a?u`<span class="bundle-source-panel-line">${a}</span>`:g} ${i?u`<span class="bundle-source-panel-meta" data-tooltip-truncated data-tooltip="${i}">${i}</span>`:g}</div>`:g}<div class="bundle-source-panel-desc">${it(hl(n),{paragraphs:!1})}</div>${r.length>0?u`<div class="bundle-source-panel-reports"><div class="bundle-source-panel-reports-label">Reported by</div>${r.map(l=>{let p=De[Ae(l)]??De.default;return u`<button type="button" class="report-chip bundle-source-panel-report" data-bundle-issue-report="${l}">${W(p)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${l}">${oe(l)}</span></button>`})}</div>`:g}</div></aside>`}function Jy(e,t,n){let r=[],o=new Map;if(typeof n=="string"&&e?.fileHashes){let i=ei(e.fileHashes,"issues").get(t)??[];for(let a=0;a<i.length;a++){let l=i[a];r.push(l);let p=parseInt(l.line,10);Number.isFinite(p)&&p>0&&(o.has(p)||o.set(p,[]),o.get(p).push({f:l,idx:a}))}}return{fileFindings:r,lineFindings:o}}function QM(e,t=null,n=g){return u`<header class="bundle-source-bar"><div class="bundle-source-title mono" data-tooltip-truncated data-tooltip="${e}">${e}</div>${t?.files.length>1?rT(t):g} ${ZM()} ${n} <button type="button" class="bundle-source-close" data-action="bundle-source-close" aria-label="Close source viewer">×</button></header>`}function Zy(e,t,n,r,o,s=null,i=!1,a=!1){return u`<div class="bundle-source-code-wrap">${typeof t=="string"?NP(t,e,n,o,s,i,a):u`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${BP(r)}`}function eT(){let e=c.bundleSourceFile;if(!e)return g;if(c.bundleDetailsTab==="code"||c.bundleDetailsTab==="search")return g;let t=c.bundleDetails,n=t?.sourceError||t?.error,r=!n&&(!t||t.metadataOnly===!0),o=Ot(t),{fileFindings:s,lineFindings:i}=Jy(t,e,o.get(e)),a=c.bundles?.find(p=>p.integrity===t?.integrity)??(t?.npm?{npm:t.npm}:null),l=r||n?null:Xy(t,a,e,o.get(e),s,i);return u`<div class="bundle-source-overlay"><div class="${q({"bundle-source-modal":!0,"with-panel":c.bundleSourceFindingIdx!=null})}">${QM(e,wh(c.bundleCodeHistory,t?.integrity??null,e),l?.toggle)}<div class="bundle-source-body" aria-busy="${String(r)}">${n?u`<div class="bundles-slide-placeholder is-error" role="status">Failed to load source: ${n}</div>`:r?u`<div class="bundles-slide-placeholder" role="status">Loading source…</div>`:Zy(e,l.content,t,l.fileFindings,l.lineFindings,null,!1,l.pretty)}</div></div></div>`}var Qs=new Map,PM=null,Gy=null;function tT(e,t){let n=Or(e??"",t).split("/");for(let r=1;r<n.length;r++)Qs.set(n.slice(0,r).join("/"),!0)}function PP(e,t){c.bundleCodeSearchMode="files",c.bundleCodeSearchQuery="",tT(e,t),O(),op()}function DP(e){let t=n=>{for(let r of n.dirs.values())Qs.set(r.path,!1),t(r)};t(e),O()}function zP(e,t){let n=0,r=null;if(!t||t.size===0)return{count:n,worst:r};let o=s=>{for(let i of s.files.values()){let a=t.get(i);if(!a||a.length===0)continue;n+=a.length;let l=Fo(a);(r===null||(_e[l]??0)>(_e[r]??0))&&(r=l)}for(let i of s.dirs.values())o(i)};return o(e),{count:n,worst:r}}function qy(e,t,n=0,r=null,o=!1,s=null,i=null){let a=[...e.dirs.entries()].toSorted(([m,h],[b,y])=>wo(m,h).localeCompare(wo(b,y))||h.path.localeCompare(y.path)),l=[...e.files.entries()].toSorted(([m],[h])=>m.localeCompare(h)),p=m=>{if(!t)return!1;for(let h of m.files.values())if(h===t)return!0;for(let h of m.dirs.values())if(p(h))return!0;return!1},d=(m,h)=>o?!0:Qs.has(m)?Qs.get(m):n===0||p(h),f=m=>h=>{Qs.set(m,!h.currentTarget.parentElement.open)};return u`<ul class="${q({"bundle-code-tree":!0,root:n===0})}" aria-label="${n===0?"Source files":g}" @keydown="${n===0?US:g}">${Z(a,([,m])=>m.path,([m,h])=>{let b=h.path,y=lh(m,h,n),w=h.package,v=w?.ecosystem==="cargo"||w?.ecosystem==="composer"||w?.ecosystem==="soldeer",x=El(w?.ecosystem),$=w?.variant?`${y.node.sourcePath}
|
|
194
|
+
Variant ${w.variant}`:y.node.sourcePath,k=h.packageInfo,S=!!k||!!w?.variant,C=k&&i?L=>{let{bytes:A,loc:E}=PS(i,h.sourcePath);Object.assign(L.dataset,{tooltipLoc:String(E),tooltipSize:ge(A)})}:void 0,_=zP(h,r);return u`<li class="bundle-code-tree-dir"><details .open="${ev(d(b,h))}"><summary @click="${f(b)}" .prepareTooltip="${C}" data-tooltip-package="${k?.name??g}" data-tooltip-ecosystem="${k?.ecosystem??g}" data-tooltip-version="${k?.version??g}" data-tooltip-files="${k?.fileCount??g}" data-tooltip-repo="${k?.github?k.github+(k.directory?`/${k.directory}`:""):g}" data-tooltip-commit="${k?.commit??g}" data-tooltip="${S?$:g}" data-tooltip-placement="${S?"right-start":g}"><span class="bundle-code-tree-chevron" aria-hidden="true"></span> ${w?x:g} <span class="${q({"bundle-code-tree-dirname":!0,"bundle-code-tree-package":!!w,"bundle-code-tree-package-vendored":v})}" data-tooltip-truncated data-tooltip="${S?g:$}">${w?u`<span class="bundle-code-tree-package-name">${w.name}</span>${w.version?u`<span class="bundle-code-tree-package-version">${v?"- ":"@"}${w.version}</span>`:g}`:y.names.map((L,A)=>u`${A>0?u`<span class="bundle-code-tree-separator">/</span>`:g}${L}`)} </span>${w?.variant?u`<span class="bundle-code-tree-variant">variant ${w.variant}</span>`:g} ${_.count>0?u`<span class="${`bundle-code-tree-count sev-${_.worst}`}" data-tooltip="${`${_.count} ${_.count===1?"issue":"issues"} inside`}">${_.count}</span>`:g}</summary>${qy(y.node,t,n+1,r,o,s,i)}</details></li>`})} ${Z(l,([,m])=>m,([m,h])=>{let b=r?.get(h),y=b&&b.length>0?Fo(b):null,w=b?.length??0;return u`<li class="bundle-code-tree-file"><button type="button" class="${q({"bundle-code-tree-link":!0,current:h===t})}" data-bundle-view-source="${h}" aria-current="${h===t?"true":g}">${kn(h,s?.get(h))}<span class="bundle-code-tree-name" data-tooltip-truncated data-tooltip="${h}">${m}</span> ${w>0?u`<span class="${`bundle-code-tree-count sev-${y}`}" data-tooltip="${`${w} ${w===1?"issue":"issues"}`}">${w}</span>`:g}</button></li>`})}</ul>`}function Or(e,t){return t&&e.startsWith(t)?e.slice(t.length):e}function WP(e,t,n,r,o="",s=null,i=null){if(!n)return qy(e,t,0,r,!1,s,i);let a=HS(e,n,o);return a?qy(a,t,0,r,!0,s,i):u`<div class="bundle-code-search-empty">No files match.</div>`}var DM=new WeakMap;function nT(e,t){let n=DM.get(t);return n||(n=gv([...t.keys()].toSorted(),Nt(e)),DM.set(t,n)),n}var zM=1e3,WM=new WeakMap;function HP(e,t,n,r,o=""){let s=Rp(e),i=WM.get(t);i||(i=[...t.keys()].filter(d=>s.get(d)!=null).toSorted((d,f)=>s.get(f)-s.get(d)||d.localeCompare(f)),WM.set(t,i));let a=n.toLowerCase(),l=a?i.filter(d=>Or(d,o).toLowerCase().includes(a)):i;if(l.length===0)return u`<div class="bundle-code-search-empty">No files match.</div>`;let p=l.length>zM?l.slice(0,zM):l;return u`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${p.length<l.length?`${p.length.toLocaleString()} largest of ${l.length.toLocaleString()} files`:`${l.length.toLocaleString()} ${l.length===1?"file":"files"} by size`}</div><ul class="bundle-code-largest">${Z(p,d=>d,d=>u`<li><button type="button" class="${q({"bundle-code-largest-file":!0,current:d===r})}" data-bundle-view-source="${d}" aria-current="${d===r?"true":g}"><span class="bundle-code-largest-path" data-tooltip-truncated data-tooltip="${d}">${Or(d,o)}</span><span class="bundle-code-largest-size">${ge(s.get(d))}</span></button></li>`)}</ul></div>`}function UP(e,t,n,r,o=""){if(!n)return u`<div class="bundle-code-search-hint">Type to search across every source in this bundle.</div>`;let s=Qu(n,!1,!1),i=20,a=100,l=[],p=0;for(let d of nT(e,t)){let f=t.get(d);if(typeof f!="string")continue;let m=[],h=f.split(`
|
|
195
|
+
`);for(let b=0;b<h.length;b++){let y=s.ranges(h[b]);if(y.length!==0&&(m.push({ln:b+1,text:h[b],ranges:y}),p++,m.length>=i))break}if(m.length>0&&l.push({path:d,hits:m}),l.length>=a)break}return l.length===0?u`<div class="bundle-code-search-empty">No matches.</div>`:u`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${p} ${p===1?"hit":"hits"} in ${l.length} ${l.length===1?"file":"files"}</div>${l.map(({path:d,hits:f})=>{let m=Or(d,o);return u`<div class="${q({"bundle-code-search-file":!0,current:d===r})}"><button type="button" class="bundle-code-search-file-name" data-bundle-view-source="${d}" data-tooltip-truncated data-tooltip="${d}">${m}</button><ul class="bundle-code-search-hits">${f.map(h=>u`<li class="bundle-code-search-hit"><button type="button" class="bundle-code-search-hit-link" data-bundle-view-source="${d}" data-bundle-view-line="${h.ln}" data-bundle-view-scroll-block="start"><span class="bundle-code-search-hit-ln">${h.ln}</span> <span class="bundle-code-search-hit-text mono">${bM(h.text,h.ranges)}</span></button></li>`)}</ul></div>`})}</div>`}function VP(e,t,n,r=""){if(!e.fileHashes)return u`<div class="bundle-code-search-empty">Computing file hashes…</div>`;let o=ei(e.fileHashes,"issues");if(o.size===0)return u`<div class="bundle-code-search-empty">No issues match this bundle's files.</div>`;let s=t.toLowerCase(),i=[];for(let[a,l]of o)for(let p=0;p<l.length;p++){let d=l[p],f=d.description??"";s&&!a.toLowerCase().includes(s)&&!d.severity.includes(s)&&!d.severity.replaceAll("_"," ").includes(s)&&!f.toLowerCase().includes(s)||i.push({file:a,finding:d,fileIdx:p})}return i.sort((a,l)=>{let p=_e[a.finding.severity]??0,d=_e[l.finding.severity]??0;return d!==p?d-p:a.file.localeCompare(l.file)}),i.length===0?u`<div class="bundle-code-search-empty">No matches.</div>`:u`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${i.length} ${i.length===1?"issue":"issues"}</div><ul class="bundle-code-search-issues">${i.map(({file:a,finding:l,fileIdx:p})=>{let d=l.severity,f=Or(a,r),m=a===n&&c.bundleSourceFindingIdx===p;return u`<li class="${q({"bundle-code-search-issue":!0,current:m})}"><button type="button" class="bundle-code-search-issue-link" data-bundle-view-source="${a}" data-bundle-view-finding-idx="${p}" data-bundle-view-line="${l.line??""}"><div class="bundle-code-search-issue-row"><span class="${`bundle-code-search-issue-sev sev-${d}`}">${d.replaceAll("_"," ")}</span> <span class="bundle-code-search-issue-path mono" data-tooltip-truncated data-tooltip="${a}">${f}${l.line?`:${l.line}`:""}</span></div><div class="bundle-code-search-issue-desc">${it(hl(l),{paragraphs:!1})}</div></button></li>`})}</ul></div>`}function jP(e,t){if(e.kind!=="stasis")return t;let n=Nt(e),r=new Map([...t].filter(([o])=>!/(?:^|\/)node_modules(?:\/|$)/u.test(o)&&!/(?:^|\/)(?:node_modules|dependencies|vendor)(?:\/|$)/u.test(n?.get(o)??o)));return r.size>0?r:t}function HM(e,t,n){let r=null,o=-1,s=0;for(let[l,p]of n){if(typeof t.get(l)!="string")continue;let d=_e[Fo(p)]??0;(d>o||d===o&&p.length>s||d===o&&p.length===s&&(r===null||l.localeCompare(r)<0))&&(r=l,o=d,s=p.length)}if(r)return r;if(e.kind==="stasis"&&e.bundle){for(let l of e.bundle.entries)if(typeof t.get(l)=="string")return l}for(let l of e.npmEntries??[])if(typeof t.get(l)=="string")return l;let i=null,a=-1;for(let[l,p]of t)typeof p=="string"&&p.length>a&&(i=l,a=p.length);return i}function GP(e,t=null){let n=Ot(e);if(n.size===0)return u`<div class="bundle-code-empty">This bundle doesn't carry any source content.</div>`;PM!==c.selectedBundle&&(Qs.clear(),PM=c.selectedBundle,Gy=null);let o=Fl(n).paths,s=e.kind==="stasis"?e.bundle.modules:null,i=zS(Qn(o).prefix,s,o),a=o.map(S=>Or(S,i)),l=DS(a,o,s),p=e.fileHashes?ei(e.fileHashes,"issues"):new Map,d=jP(e,n),f=e.kind==="stasis"?new Map([...p].filter(([S])=>d.has(S))):p,m=c.bundleSourceFile,h=c.bundleCodeFileRequest;if(h?.bundle===c.selectedBundle){c.bundleCodeFileRequest=null;let S=h.path==null?o[h.file-1]:n.has(h.path)?h.path:null;if(S){m=S,c.bundleSourceFile=S,op();let C=h.endLine??h.line;c.bundleSourceTargetLine=h.line&&C<=cv(n.get(S))?{bundle:e.integrity,path:S,line:h.line,...C>h.line?{end:C}:{}}:null,c.bundleSourceTargetLine&&LP(h.line)}}if(zn&&(zn.bundle!==c.selectedBundle||m&&m!==zn.path)&&(zn=null),!m)m=HM(e,d,f),m&&(c.bundleSourceFile=m,zn={bundle:c.selectedBundle,path:m,hadIssues:f.size>0},op());else if(zn&&!zn.hadIssues&&f.size>0){zn.hadIssues=!0;let S=HM(e,d,f);S&&S!==m&&(m=S,c.bundleSourceFile=S,c.bundleSourceFindingIdx=null,zn.path=S,op())}m!==Gy&&(tT(m,i),Gy=m),m&&t?.managedId&&R()?te?.replaceCodeRoute(vr(c.managedTeams,t,c.currentManagedTeam,"code",Dd(c))):m&&t?.npm&&R()&&te?.replaceCodeRoute(Ea(t,"code",Dd(c)));let b=m?n.get(m):null,{fileFindings:y,lineFindings:w}=Jy(e,m,b),x=p.size>0?["files","code","issues","largest"]:["files","code","largest"],$=x.includes(c.bundleCodeSearchMode)?c.bundleCodeSearchMode:"files",k=c.bundleCodeSearchQuery;return u`<div class="bundle-code-view"><aside class="bundle-code-rail"><div class="bundle-code-rail-head"><span class="bundle-code-rail-label">Files</span> <span class="bundle-code-rail-count">${o.length}</span> <span class="bundle-code-rail-actions"><button type="button" class="bundle-code-rail-action" aria-label="Reveal current file" data-tooltip="Reveal current file" ?disabled="${!m}" @click="${()=>PP(m,i)}"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="4.5"/><circle cx="8" cy="8" r="1.5"/><path d="M8 0v3m0 10v3M0 8h3m10 0h3"/></svg></button> <button type="button" class="bundle-code-rail-action" aria-label="Collapse directories" data-tooltip="Collapse directories" ?disabled="${$!=="files"||!!k||l.dirs.size===0}" @click="${()=>DP(l)}">${qx}</button></span></div>${i?u`<div class="bundle-code-rail-prefix mono" data-tooltip-truncated data-tooltip="${i}">${i}</div>`:g}<bundle-code-search .modes="${x}"></bundle-code-search><div class="bundle-code-rail-body">${Jg($,[["files",()=>WP(l,m,k,p,i,e.kind==="stasis"?e.bundle.formats:null,n)],["code",()=>UP(e,n,k,m,i)],["issues",()=>VP(e,k,m,i)],["largest",()=>HP(e,n,k,m,i)]])}</div></aside><bundle-code-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize file tree" data-tooltip="Drag to resize · double-click to reset"></bundle-code-splitter><div class="${q({"bundle-code-main":!0,"with-panel":c.bundleSourceFindingIdx!=null})}">${m?KP(e,m,b,y,w,t):u`<div class="bundle-code-placeholder">Pick a file from the tree to view its source.</div>`}</div></div>`}function rT(e){return u`<span class="bundle-code-file-nav"><button type="button" class="focus-code-nav-btn" data-bundle-code-history="back" aria-label="Back to the previously shown file" ?disabled="${e.at===0}">${Ts}</button> <button type="button" class="focus-code-nav-btn" data-bundle-code-history="forward" aria-label="Forward to the next shown file" ?disabled="${e.at>=e.files.length-1}">${Is}</button></span>`}function UM(e){let t=e.split(`
|
|
196
|
+
`).length;return`${t.toLocaleString()} ${t===1?"line":"lines"} \xB7 ${ge(wn(e))}`}function KP(e,t,n,r,o,s=null){let i=wh(c.bundleCodeHistory,e.integrity,t),{pretty:a,toggle:l,content:p,fileFindings:d,lineFindings:f}=Xy(e,s,t,n,r,o),m=d.map((b,y)=>({idx:y,line:parseInt(b.line,10)||0})).toSorted((b,y)=>b.line-y.line||b.idx-y.idx),h=VS(e,t,s?.managedId&&s.repoId!=null?{github:s.repoFullName,directory:s.repoDirectory}:null);return u`<header class="bundle-code-main-bar">${rT(i)} ${kn(t,Vo(e,t))} <span class="bundle-code-main-path mono" data-tooltip-truncated data-tooltip="${t}">${t}</span> <button type="button" class="bundle-code-copy-path" data-copy-path="${t}" aria-label="Copy file path">${Od}</button> ${h?jS(h,s?.commitInfo):g} <span class="bundle-code-main-spacer"></span> ${d.length>0?u`<span class="bundle-code-main-issues" data-bundle-code-issue-order="${JSON.stringify(m)}"><span class="${`bundle-code-tree-count sev-${Fo(d)}`}" data-tooltip="${`${d.length} ${d.length===1?"issue":"issues"} in this file`}">${d.length}</span> <button type="button" class="bundle-code-issue-step" data-bundle-code-issue-step="-1" aria-label="Previous issue">‹</button> <button type="button" class="bundle-code-issue-step" data-bundle-code-issue-step="1" aria-label="Next issue">›</button></span>`:g} ${ZM()} ${l} ${typeof p=="string"?u`<span class="bundle-code-main-stats">${l===g?g:u`<span class="bundle-code-main-stats-room" aria-hidden="true">${UM(n)}</span>`}<span>${UM(p)}</span></span>`:g}</header><div class="bundle-code-main-body">${Zy(t,p,e,d,f,null,!a&&!!(s?.managedId||s?.npm)&&R()&&!vn(),a)}</div>`}var qP=400;function YP(e){return e<=5?8:e<=15?6:e<=40?4:e<=120?3:2}function XP(e,t,n){let r=[];for(let o of e){let s=Math.max(1,o.ln-n),i=Math.min(t,o.ln+n),a=r.at(-1);a&&s<=a.end+1?a.end=Math.max(a.end,i):r.push({start:s,end:i})}return r}function JP(e,t,n){if(e.length<=n)return{text:e,ranges:t,clipped:!1};let r=t.length>0?t[0][0]:0,o=r>n-60?Math.max(0,r-60):0;return Iy(e,t,o,n)}function ZP(e,t,n){let r=JP(e,n??[],qP);return u`<div class="${q({"bundle-search-line":!0,"is-match":n!=null})}"><span class="bundle-search-lineno">${t}</span> <span class="bundle-search-code">${r.clipped?u`<span class="bundle-search-clip">…</span>`:g}${Ay(r.text,r.ranges)}</span></div>`}function QP(e,t,n,r,o){let{start:s,end:i}=n,a=s;for(let d=s;d<=i;d++)if(r.has(d)){a=d;break}let l=String(i).length,p=[];for(let d=s;d<=i;d++)p.push(ZP(t[d-1]??"",d,r.get(d)??null));return u`${o?u`<div class="bundle-search-gap" aria-hidden="true"></div>`:g} <button type="button" class="bundle-search-snippet" style="${le({"--bundle-search-lineno-w":`${l}ch`})}" data-bundle-view-source="${e}" data-bundle-view-line="${a}" data-bundle-view-scroll-block="center">${p}</button>`}function eD(e,t,n){let{path:r,lines:o,hits:s}=e,i=Or(r,t),a=XP(s,o.length,n),l=new Map(s.map(f=>[f.ln,f.ranges])),p=s[0].ln,d=r===c.bundleSourceFile;return u`<section class="${q({"bundle-search-file":!0,current:d})}"><header class="bundle-search-file-head"><button type="button" class="bundle-search-file-name mono" data-bundle-view-source="${r}" data-bundle-view-line="${p}" data-bundle-view-scroll-block="center" data-tooltip-truncated data-tooltip="${r}">${i}</button> <span class="bundle-search-file-count">${s.length} ${s.length===1?"match":"matches"}</span></header><div class="bundle-search-snippets">${a.map((f,m)=>QP(r,o,f,l,m>0))}</div></section>`}function tD(e,t,n,r,o,s){if(!n)return u`<div class="bundle-search-results"><div class="bundle-search-hint">Search across every source in this bundle. Each match shows the surrounding lines for context — fewer matches get more context. Toggle <span class="bundle-search-hint-kbd">Aa</span> for case-sensitive and <span class="bundle-search-hint-kbd">.*</span> for regular-expression matching.</div></div>`;let i=hM(e.integrity??"",t,n,r,o,nT(e,t));if(i.error)return u`<div class="bundle-search-results"><div class="bundle-search-error"><span class="bundle-search-error-label">Invalid regular expression</span> <span class="bundle-search-error-msg mono">${i.error}</span></div></div>`;let{fileResults:a,totalHits:l,truncated:p}=i,d=[...t.keys()].toSorted(),{prefix:f}=Qn(d);if(a.length===0)return u`<div class="bundle-search-results"><div class="bundle-search-empty">No matches.</div></div>`;let m=s?YP(l):0,h=a.length;return u`<div class="bundle-search-results"><div class="bundle-search-summary"><span>${l}${p?"+":""} ${l===1?"match":"matches"} in ${h}${p?"+":""} ${h===1?"file":"files"}</span> ${f?u`<span class="bundle-search-summary-prefix mono" data-tooltip-truncated data-tooltip="${f}">${f}</span>`:g} ${p?u`<span class="bundle-search-summary-more">results capped — refine to narrow</span>`:g}</div>${Z(a,b=>b.path,b=>eD(b,f,m))}</div>`}function nD(e,t,n,r){if(!t||typeof e!="string")return null;let o=Qu(t,n,r);if(o.error)return null;let s=new Set,i=e.split(`
|
|
197
|
+
`);for(let a=0;a<i.length;a++)o.ranges(i[a]).length>0&&s.add(a+1);return s}function rD(e,t,n,r){let o=c.bundleSourceFile;if(!o)return g;let s=t.get(o),{fileFindings:i,lineFindings:a}=Jy(e,o,s),l=Xy(e,r,o,s,i,a);return u`<aside class="bundle-search-side">${QM(o,null,l.toggle)}<div class="bundle-source-body">${Zy(o,l.content,e,l.fileFindings,l.lineFindings,l.pretty?null:n,!1,l.pretty)}</div></aside>`}function oD(e,t=null){let n=Ot(e);if(n.size===0)return u`<div class="bundle-search-view"><div class="bundle-code-empty">This bundle doesn't carry any source content.</div></div>`;let r=c.bundleSearchQuery,o=c.bundleSearchRegex,s=c.bundleSearchCase,i=null;if(c.bundleSourceFile){let l=nD(n.get(c.bundleSourceFile),r,o,s);l&&l.size===0?(c.bundleSourceFile=null,c.bundleSourceFindingIdx=null):i=l}let a=c.bundleSearchContext;return u`<div class="bundle-search-view"><div class="bundle-search-bar-row"><bundle-search></bundle-search><mode-switch data-bundle-search-context label="Context" .checked="${a}" accessible-label="Toggle context lines"></mode-switch></div><div class="bundle-search-main">${tD(e,n,r,o,s,a)} ${rD(e,n,i,t)}</div></div>`}var hn=(e,t,n)=>u`<button type="button" class="${q({"bundles-tab":!0,active:n===e})}" data-bundle-tab="${e}" aria-selected="${String(n===e)}" role="tab">${t}</button>`;function sD(e){let t=!!e.npm;t&&!Tl.has(c.bundleDetailsTab)&&(c.bundleDetailsTab="overview");let n=!t&&LM(e,c.bundleDetails,c.bundleDetailsTab==="advisories");c.bundleDetailsTab==="advisories"&&!n&&(c.bundleDetailsTab="overview");let r=t||c.bundleDetailsTab==="compare"||Ls(c.bundles??[],c.selectedBundle).length>0,o=!R();c.bundleDetailsTab==="issues"&&!o&&(c.bundleDetailsTab="overview");let s=c.bundleDetailsTab,i=s==="overview",a=c.bundleDetails,l=!!(a&&a.integrity===e.integrity),p=l&&!a.error&&!!(a.json||a.bundle)&&!(a.metadataOnly&&Xn(s));return s==="advisories"&&n&&p&&a.kind==="stasis"&&rp(a,O).catch(()=>{}),u`<div class="bundles-view bundles-slide-view"><bundle-slide-header class="bundles-slide-header"><header class="bundles-slide-bar">${R()&&e.managedId&&e.repoId==null?u`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-bundles"},bubbles:!0,composed:!0}))}">Bundles</button> <span aria-hidden="true">></span></span>`:g} ${t?u`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>Sr()}">npm</button> <span aria-hidden="true">></span></span>`:g} <span class="bundles-slide-icon" aria-hidden="true">${W(t?Bo:No)}</span><div class="bundles-slide-title">${t?u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.npm.name}">${e.npm.name}</div><npm-version-select .name="${e.npm.name}" .version="${e.npm.version}" .tab="${s}" .list="${uu(e.npm.name)}"></npm-version-select>`:u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.name}">${e.name}</div>`}</div><button type="button" class="bundles-download-btn bundles-scan-button" ?hidden="${!nl(e)}" @click="${()=>{Zu(e)}}">${W(Vn)}<span>Scan</span></button><div class="bundles-slide-tabs" role="tablist">${n?hn("advisories","Advisories",s):g} ${o?hn("issues","Issues",s):g} ${t?g:hn("terminal","Terminal",s)} ${hn("treemap","Treemap",s)} ${t?g:hn("graph","Graph",s)} ${hn("code","Code",s)} ${t?g:hn("search","Search",s)} ${r?hn("compare","Compare",s):g} ${t&&c.managedSession&&!c.managedSession.publicShare&&c.managedTeams?.some(d=>d.dependencyReview===!0)?hn("review","Review",s):g} ${hn("overview","Overview",s)}</div></header></bundle-slide-header><div class="${q({"bundles-slide-body":!0,"bundles-slide-body-overview":i})}">${i?fD(e,a):p?Jg(s,[["terminal",()=>u`<div id="bundle-terminal-slot" class="bundle-terminal-slot"></div>`],["graph",()=>u`<div id="bundle-graph-slot" class="bundle-graph-slot"></div>`],["treemap",()=>u`<bundle-treemap .details="${a}"></bundle-treemap>`],["code",()=>GP(a,e)],["search",()=>oD(a,e)],["review",()=>u`<npm-review .entry="${e}" .details="${a}" .request="${c.npmReview}" .session="${c.managedSession}" .source="${Eb(e)}"></npm-review>`],["compare",()=>u`<bundle-compare .details="${a}" .integrity="${e.integrity}" .request="${c.bundleCompare}" .source="${t?Eb(e):null}"></bundle-compare>`],["issues",()=>aD(a)],["advisories",()=>BM(a,O,nl(e)?()=>{Zu(e,{mode:"dependencies"})}:null)]]):l&&a.sourceError?u`<div class="bundles-slide-placeholder is-error">${a.sourceError} <button type="button" data-bundle-retry-sources>Retry</button></div>`:l&&!a.metadataOnly?u`<div class="${q({"bundles-slide-placeholder":!0,"is-error":!!a.error})}">${a.error?`Failed to parse: ${a.error}`:"Bundle contents not parsed."}</div>`:u`<div class="bundles-slide-placeholder">Loading bundle…</div>`}</div></div>`}function iD(e,t={}){if(!e)return g;let n=[];if(e.fileHash&&(n=Oi(e.fileHash,e)),n.length===0&&t.bucketKey&&(t.kind==="package"?n=If(t.bucketKey,e):t.kind==="repository"&&(n=Af(t.bucketKey,e))),n.length===0)return g;let r=n.slice(0,2),o=n.length-r.length;return u`<div class="bundle-issue-reports">${r.map(s=>{let i=De[Ae(s)]??De.default;return u`<button type="button" class="report-chip" data-bundle-issue-report="${s}">${W(i)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${s}">${oe(s)}</span></button>`})} ${o>0?u`<span class="bundle-issue-reports-more">, and ${o} more…</span>`:g}</div>`}function oT(e){if(e==null||e==="")return"";let t=String(e),n=t.indexOf("-");if(n>0){let o=parseInt(t.slice(0,n),10),s=parseInt(t.slice(n+1),10);return Number.isFinite(o)&&Number.isFinite(s)&&s>o?`Lines ${o}-${s}`:Number.isFinite(o)?`Line ${o}`:""}let r=parseInt(t,10);return Number.isFinite(r)?`Line ${r}`:""}function Zs(e,t){return u`<div class="bundle-issues-empty"><p class="bundle-issues-empty-primary">${e}</p>${t?u`<p class="bundle-issues-empty-hint">${t}</p>`:g}</div>`}function aD(e){if(e.managedId)return Zs("Open a report to review its findings.","Bundle metadata includes source hashes; reports are available through your teams.");if(!e.fileHashes)return Zs("Computing file hashes\u2026","Hashing this bundle's sources so findings from your reports can be matched against them.");if(e.fileHashes.size===0)return Zs("This bundle doesn't carry any source content.","Issues are matched by source-file hash, so a bundle without inline sources has nothing to match findings against.");let t=ei(e.fileHashes,"issues");if(t.size===0){let n=TP();if(n===0)return Zs("No issues match this bundle's files.","Issues are analyzer findings matched to this bundle by source-file hash. No hash-carrying findings are indexed yet \u2014 hash matching needs the analyzer's native JSON reports; drop one and any matches will appear here automatically.");let r=0;for(let o of e.fileHashes.values())r+=ap(o).length;return r>0?Zs("All matching issues are dismissed.",`${r} ${r===1?"finding matches":"findings match"} this bundle's files, but every one is triaged invalid or deleted.`):Zs("No issues match this bundle's files.",`None of the ${n.toLocaleString()} indexed ${n===1?"finding":"findings"} reference a source file in this bundle \u2014 matching compares exact file hashes, so findings from a different build of the same project won't line up.`)}return sl(t,{kind:"bundle"})}function sl(e,{kind:t,bucketKey:n}={}){let r=[...e.keys()],{prefix:o,stripped:s}=Qn(r),i=new Map(r.map((p,d)=>[p,s[d]])),a=[...e.entries()].toSorted(([p,d],[f,m])=>{let h=_e[Fo(d)]??0,b=_e[Fo(m)]??0;return b!==h?b-h:(i.get(p)??p).localeCompare(i.get(f)??f)}),l=[...e.values()].reduce((p,d)=>p+d.length,0);return u`<div class="bundle-issues"><div class="bundle-issues-summary">${l} ${l===1?"issue":"issues"} across ${e.size} ${e.size===1?"file":"files"} ${o?u`<span class="mono">${o}</span>`:g}</div><ul class="bundle-issues-list">${Z(a,([p])=>p,([p,d])=>{let f=i.get(p)??p,m=[...d].toSorted((b,y)=>{let w=_e[b.severity]??0,v=_e[y.severity]??0;if(v!==w)return v-w;let x=parseInt(b.line,10)||0,$=parseInt(y.line,10)||0;return x-$}),h=t==="repository"&&n?`${/^https?:/iu.test(n)?n.replace(/\/$/u,""):`https://github.com/${n}`}/blob/HEAD/${p}`:null;return u`<li class="bundle-issues-file-group"><header class="bundle-issues-file-header">${t==="bundle"?u`<button type="button" class="bundle-issues-file-name mono" data-bundle-view-source="${p}" data-tooltip-truncated data-tooltip="${p}">${f}</button>`:h?u`<a class="bundle-issues-file-name bundle-issues-file-name-link mono" href="${h}" target="_blank" rel="noopener" data-tooltip-truncated data-tooltip="${p}">${f}</a>`:u`<span class="bundle-issues-file-name bundle-issues-file-name-static mono" data-tooltip-truncated data-tooltip="${p}">${f}</span>`} <span class="bundle-issues-file-count">${d.length} ${d.length===1?"issue":"issues"}</span></header><ul class="bundle-issues-findings">${Z(m,b=>JSON.stringify([b.id??`${p}\0${b.line??""}\0${b.severity??""}\0${b.description??""}`,ct(b)]),b=>{let y=d.indexOf(b),w=b.severity,v=oT(b.line),x=Me(b,c.triage.get(j(b))),$=x==="fixed"||x==="invalid"||x==="deleted"?x.toUpperCase():x==="inprogress"?"In progress":x==="ignored"?"Ignored":null,k=u`<div class="bundle-issues-finding-head"><span class="${`bundle-issue-sev sev-${w}`}">${w.replaceAll("_"," ")}</span> ${v?u`<span class="bundle-issues-finding-line">${v}</span>`:g} ${$?u`<span class="${`bundle-issues-finding-triage triage-${x}`}">${$}</span>`:g} <span class="bundle-issues-finding-spacer"></span> ${iD(b,{kind:t,bucketKey:n})}</div><div class="bundle-issues-finding-desc">${it(hl(b),{paragraphs:!1})}</div>`;return u`<li class="bundle-issues-finding">${t==="bundle"?u`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${p}" data-bundle-view-finding-idx="${y}" data-bundle-view-line="${b.line??""}">${k}</button>`:u`<div class="bundle-issues-finding-link bundle-issues-finding-static">${k}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function sT(e){let t=c.selectedBundle,n=t?e.find(r=>r.integrity===t):null;return n?sD(n):u`<div class="bundles-view bundles-view-empty"><p class="bundles-empty-hint">Pick a bundle from the sidebar to open it.</p></div>`}var sp=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v8"/><path d="m4.5 7 3.5 3.5L11.5 7"/><path d="M2.5 13h11"/></svg>`,lD=u`<svg viewBox="0 0 24 24" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M0 0v24H8.222l2.089-2.373 2.09-2.374V13.2H18.978l2.51-2.488L24 8.223V0H12zm5.2 5.2h13.791L12.2 12c-3.735 3.74-6.838 6.8-6.896 6.8-.057 0-.104-3.06-.104-6.8zm8.4 8.8v10H24V14h-5.2z"/></svg>`,VM=Object.freeze({javascript:"#f1e05a",jsx:"#f1e05a",typescript:"#3178c6",tsx:"#3178c6",json:"#f1e05a",css:"#663399",markup:"#e34c26",yaml:"#cb171e",bash:"#89e051",markdown:"#083fa1",solidity:"#AA6746",php:"#4F5D95",rust:"#dea584",ruby:"#701516",java:"#b07219",cpp:"#f34b7d",c:"#555555",objectivec:"#438eff",python:"#3572A5",go:"#00ADD8",kotlin:"#A97BFF",swift:"#F05138",dart:"#00B4AB",sql:"#e38c00",lua:"#000080",csharp:"#178600",scala:"#DC322F",vue:"#41B883",svelte:"#FF3E00"}),jM=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"]);function GM(e){if(VM[e])return VM[e];let t=0;for(let n of e)t=Math.imul(t,31)+n.codePointAt(0)|0;return jM[(t>>>0)%jM.length]}function cD(e){let t=e.currentTarget,n=e.target.closest?.(".bundles-languages-segment");!n||!t.contains(n)||(t.dataset.tooltip=n.dataset.languageTooltip??"",Cv(t))}function dD(e){delete e.currentTarget.dataset.tooltip,_v()}var iT=e=>e.codeStats??=iv(e.npm?new Map([...yi(e)].filter(([t])=>!Ia.test(t.slice(t.lastIndexOf("/")+1)))):yi(e),xn(e));function aT(e,{legend:t=!1}={}){if(!(e?.kind==="stasis"&&e.bundle)&&!(e?.npm&&e.json))return g;let n=iT(e),r=n.lines,o=n.languages.filter(a=>a.lines>0);if(r<=0||o.length===0)return g;let s=a=>{let l=a/r*100;return l<.1?"<0.1":l<1?l.toFixed(1):l.toFixed(0)},i=t?u`<ul class="bundles-languages-legend">${o.slice(0,4).map(({key:a,label:l,lines:p})=>u`<li><span class="bundles-languages-swatch" style="${le({background:GM(a)})}"></span>${l}<span class="bundles-languages-share">${s(p)}%</span></li>`)}</ul>`:g;return u`<div class="bundles-languages-bar" data-tooltip-managed aria-label="Languages in this bundle" @pointerover="${cD}" @pointerleave="${dD}">${o.map(({key:a,label:l,lines:p})=>u`<span class="bundles-languages-segment" style="${le({flexGrow:p,background:GM(a)})}" data-language-tooltip="${`${l} \xB7 ${s(p)}% \xB7 ${p.toLocaleString()} LoC`}"></span>`)}</div>${i}`}async function uD(e){try{await(await D()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function pD(e,t){let n=fM(t),r=aT(t);return u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${e.managedId?vn()?u`<button type="button" class="bundles-download-btn" @click="${()=>{uD(e)}}">${sp}<span>Download bundle</span></button>`:u`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${sp}<span>Download bundle</span></a>`:u`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${sp}<span>Download bundle</span></button>`} ${n?u`<div class="bundles-export-pair"><button type="button" class="bundles-download-btn" data-bundle-export-sbom="cyclonedx" data-tooltip="Export a CycloneDX SBOM (.cdx.json)">CycloneDX</button> <button type="button" class="bundles-download-btn" data-bundle-export-sbom="spdx" data-tooltip="Export an SPDX SBOM (.spdx.json)">${lD}<span>SPDX</span></button></div>`:g}</div>${r}</div>`}function ip(e,t,{placeholder:n=g,overviewClass:r=""}={}){return u`<div class="bundles-overview ${r}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e}${t}</div></div>${n}</div>`}function Yy(e){let t=e.filter(n=>typeof n=="number");return t.length>0?t.reduce((n,r)=>n+r,0):null}function fD(e,t){if(e.npm)return mD(e,t);let n=t?.integrity===e.integrity,r=e.summary?.commit,o=n?!t.error&&t.kind==="stasis"?t.bundle:null:e.managedId&&e.repoFullName&&r?{repo:{github:e.repoFullName,directory:e.repoDirectory??"",commit:r}}:null,s=n?t.size:e.managedId?e.size:null,i=(l="",p=!1)=>u`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd>${e.managedId?u`<dt>Repository</dt><dd>${e.repoFullName||"Unattached"}</dd>${e.repoId==null?g:u`<dt>Directory</dt><dd class="mono">/${e.repoDirectory??""}</dd>`}`:g} ${jd(o,l,e.commitInfo).map(d=>u`<dt>${d.label}</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${d.href}" target="_blank" rel="noopener noreferrer">${d.label==="GitHub"?W(Yt):g}<span>${d.text}</span></a> ${d.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${d.commit.href}" data-tooltip="${d.commit.hash}" data-tooltip-icon="commit" data-tooltip-commit-info="${Ns(e.commitInfo,d.commit.hash)??g}" target="_blank" rel="noopener noreferrer">${W(fl)}<span>${d.commit.text}</span></a>`:g} ${d.commit?.tags?u`<span class="bundle-origin-tags">${d.commit.tags.map(f=>u`<a class="bundle-origin-link bundle-tag-link" href="${f.href}" target="_blank" rel="noopener noreferrer">${W(ml)}<span>${f.name}</span></a>`)}</span>`:g}</dd>`)}<dt>Integrity</dt><dd class="mono bundle-integrity">${e.integrity}</dd>${l?u`<dt>Prefix</dt><dd class="mono">${l}</dd>`:g} ${o?.entries?.size>0?u`<dt>${o.entries.size===1?"Entry":"Entries"}</dt><dd class="mono"><ul class="bundles-entry-points">${[...o.entries].map(d=>u`<li><button type="button" class="bundle-entry-point" data-bundle-view-source="${d}">${Or(d,l)}</button></li>`)}</ul></dd>`:g} ${p&&Number.isSafeInteger(s)?u`<dt>Size</dt><dd>${ge(s)}</dd>`:g}</dl>`,a=pD(e,t);if(!n)return ip(i("",!0),a);if(t.error)return ip(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder is-error">Failed to parse: ${t.error}</div>`});if(t.kind==="sourcemap"&&t.json){let l=t.json,p=xn(t),d=l.sources??[...p.keys()],f=t.sourceSizes??(p.size===d.length?d.map(h=>p.get(h)??null):d.map((h,b)=>typeof l.sourcesContent?.[b]=="string"?wn(l.sourcesContent[b]):null)),m=u`<dt>Version</dt><dd>${String(l.version??"?")}</dd>${l.file?u`<dt>Output</dt><dd class="mono">${l.file}</dd>`:g} ${l.sourceRoot?u`<dt>Source root</dt><dd class="mono">${l.sourceRoot}</dd>`:g} ${l.names||t.namesCount!=null?u`<dt>Names</dt><dd>${l.names?.length??t.namesCount}</dd>`:g}`;return Ky(i,m,d,f,null,a,{bundleSize:t.size,unpackedSize:Yy(f)})}if(t.kind==="stasis"&&t.bundle){let l=t.bundle,p=xn(t),d=uv(t),f=[...d.keys()],m=new Set(f.filter(v=>d.get(v)==="resource")),h=new Set;for(let v of l.imports.keys()){let x=v.replace(/\s*\(with: .*\)\s*$/u,"");for(let $ of x.split(", "))h.add($)}let b=[...h].toSorted(),y=f.map(v=>p.get(v)),w=u`<dt>Version</dt><dd>${String(l.version)}</dd>${b.length>0?u`<dt>Resolution kinds</dt><dd>${b.join(", ")}</dd>`:g}`;return Ky(i,w,f,y,Nt(t),a,{bundleSize:t.size,unpackedSize:Yy(y),resources:m,details:t})}return ip(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`})}function mD(e,t){let n=`/api/npm/download?${new URLSearchParams({name:e.npm.name,version:e.npm.version})}`,r=u`<a class="bundles-download-btn" href="${n}">${sp}<span>Tarball</span></a>`,o=u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${vb(e)}${r}</div></div>`;if(t?.integrity!==e.integrity||!t.json)return ip(zh(e,{githubFigures:Sb(e),provenance:_b(e),provenanceNamesBuilder:Cb(e.npm)}),o,{overviewClass:"npm-overview"});let{sources:s}=t.json,i=xn(t),a=s.map(m=>i.get(m)??null),{paths:l,binaries:p,content:d}=_r(t),f=kb(e.npm);return Ky(m=>zh(e,{prefix:m,githubFigures:Sb(e),provenance:_b(e),provenanceNamesBuilder:Cb(e.npm),files:l}),X1(e,l,t),s,a,null,g,{bundleSize:t.size,unpackedSize:Yy(a),resources:p,leadColumn:u`${Y1(e)}${o_(e)}`,trailColumns:M_(p,i),summaryExtra:u`${QC(e,l)}${u_(e,t)}${R_(e,aT(t,{legend:!0}),t)}${e_(e,r,b_(e))}`,overviewClass:"npm-overview",lines:iT(t).lines,sized:(m,h,b)=>su(m,d[m],b),fileTag:m=>u`${xb(f.get(m))}${Rb(t,m,!0)}`,fileFlags:m=>Mb(t,m,f.get(m)),fileIcon:m=>kn(m,p.has(m)?"binary":void 0),fileFilter:l_(e)})}function lT(){kt().catch(()=>{});let e=Qt(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[m,h]of e){let b=[],y=[],w=new Map,v=new Set;for(let[x,$]of h.byVersion){let k=[],S=new Map;for(let C of $.findings){let _=Me(C,c.triage.get(j(C)))??null;_==="inprogress"?t.inprogress++:_==="fixed"?t.fixed++:_==="invalid"?t.invalid++:_==="deleted"?t.deleted++:_==="ignored"&&t.ignored++,_===c.shownTriage&&(k.push(C),S.has(C.file)||S.set(C.file,[]),S.get(C.file).push(C))}if(k.length!==0){b.push([x,{findings:k,files:S,reports:$.reports}]);for(let C of k)y.push(C),w.has(C.file)||w.set(C.file,[]),w.get(C.file).push(C);for(let C of $.reports)v.add(C)}}b.length!==0&&(b.sort(([x],[$])=>Sf(x,$)),n.push([m,{findings:y,files:w,reports:v,versions:b}]))}let r=c.selectedPackage,o=r?n.find(([m])=>m===r)??null:null,s=null;if(o){let m=o[1].versions,h=c.selectedPackageVersion;s=m.find(([b])=>b===h)??null,!s&&m.length===1&&(s=m[0])}let i=s?s[1]:o?o[1]:null;if(o&&c.packageDetailsTab==="issues")return $D(o[0],i,s?s[0]:void 0);let a=c.packagesSearchQuery.trim().toLowerCase(),l=a?n.filter(([m])=>m.toLowerCase().includes(a)):n.slice();wD(l,c.packagesSortBy);let p=n.reduce((m,[,h])=>m+h.findings.length,0),d=new Set;for(let[,m]of n)for(let h of m.reports)d.add(h);let f=o?"packages-layout open":"packages-layout";return u`<div class="${q({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${l.length===n.length?u`${n.length} ${n.length===1?"package":"packages"}`:u`${l.length} of ${n.length} ${n.length===1?"package":"packages"}`}</span> ${p>0?u`<span>${p} ${p===1?"finding":"findings"} across ${d.size} ${d.size===1?"report":"reports"}</span>`:g}</div></div>${bD(t)}</header>${n.length===0?u`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":c.shownTriage?`No ${c.shownTriage} findings in any package.`:"No untriaged findings in any package."}</p>`:l.length===0?u`<p style="color:var(--muted)">No packages match "${c.packagesSearchQuery}".</p>`:u`<div class="${f}"><ul class="packages-list">${Z(gD(l),hD,m=>kD(m,r,c.selectedPackageVersion))}</ul>${o?u`<aside class="packages-details" id="packages-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-package aria-label="Close details">×</button></header><div class="packages-details-body">${CD(o[0],i,s?s[0]:void 0)}</div></aside>`:g}</div>`}</div>`}function gD(e){let t=[];for(let[n,r]of e){let o=r.versions;if(o.length<=1){let[l,p]=o[0];t.push({kind:"single",pkg:n,version:l,bucket:p,totalVersions:1});continue}let[s,i]=o[0],a=c.expandedPackages.has(n);if(t.push({kind:"latest",pkg:n,version:s,bucket:i,totalVersions:o.length,expanded:a}),a)for(let l=1;l<o.length;l++){let[p,d]=o[l];t.push({kind:"other",pkg:n,version:p,bucket:d,totalVersions:o.length})}}return t}function hD(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function bD(e){return u`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${yD}"></triage-selector></div>`}var yD=["inprogress","fixed","invalid","deleted","ignored"];function wD(e,t){let n=t==="name-asc"?(r,o)=>r[0].localeCompare(o[0]):t==="files-desc"?(r,o)=>o[1].files.size-r[1].files.size||r[0].localeCompare(o[0]):t==="reports-desc"?(r,o)=>o[1].reports.size-r[1].reports.size||r[0].localeCompare(o[0]):(r,o)=>o[1].findings.length-r[1].findings.length||r[0].localeCompare(o[0]);e.sort(n)}function vD(e,t){let n={live:0,invalid:0,deleted:0};if(!e)return n;let r=t===void 0?e.files.values():e.byVersion.get(t)?.files.values()??[].values();for(let o of r)for(let s of o){let i=Me(s,c.triage.get(j(s)))??null;i==="invalid"?n.invalid++:i==="deleted"?n.deleted++:n.live++}return n}function $D(e,t,n){let r=Qt().get(e),o=vD(r,n),s=c.packageSlideTriage??"live",i=r?cT(r,e,s,n):new Map,a=[...i.values()].reduce((f,m)=>f+m.length,0),l=s==="live"?a===1?"issue":"issues":a===1?`${s} issue`:`${s} issues`,p=s==="live"?"No live issues for this package.":`No ${s} issues for this package.`,d=typeof n=="string"?` @ ${n}`:"";return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="package-slide-back" aria-label="Back to packages">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${`${e}${d}`}">${e}${d}</div><div class="bundles-slide-integrity">${a} ${l} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="package" .counts="${o}"></slide-triage-tabs></header><div class="bundles-slide-body">${i.size===0?u`<div class="bundle-issues-empty">${p}</div>`:sl(i,{kind:"package",bucketKey:e})}</div></div>`}function kD(e,t,n){let{kind:r,pkg:o,version:s,bucket:i}=e,a={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let b of i.findings){let y=de(b,c.severityMode);a[y]!==void 0&&a[y]++}let l=et.filter(b=>a[b]>0),p=Sn(o),f={selected:o===t&&xD(e,n),"packages-row-latest":r==="latest","packages-row-other":r==="other"},m=s===null?"":s,h=s===null?`Open issues for ${o}`:`Open issues for ${o}@${s}`;return u`<li class="${q(f)}" data-select-package="${o}" data-select-package-version="${m}"><span class="packages-dot" style="${le({background:p})}"></span><div class="packages-row-text"><div class="packages-name-line"><span class="packages-name" data-tooltip-truncated data-tooltip="${s===null?o:`${o}@${s}`}">${o}${s===null?g:u`<span class="packages-version">@${s}</span>`} </span>${r==="latest"?SD(o,e.expanded,e.totalVersions-1):g}</div><span class="packages-row-meta">${i.findings.length} ${i.findings.length===1?"finding":"findings"} · ${i.files.size} ${i.files.size===1?"file":"files"} · ${i.reports.size} ${i.reports.size===1?"report":"reports"}</span></div>${l.length>0?u`<div class="packages-row-chips">${l.map(b=>u`<span class="${`tree-count-chip ${b}`}" data-tooltip="${b.replaceAll("_"," ")}">${a[b]}</span>`)}</div>`:g} <button type="button" class="packages-row-issues" data-package-row-issues="${o}" data-package-row-issues-version="${m}" aria-label="${h}">Issues →</button></li>`}function xD(e,t){return e.kind==="single"?!0:e.version===t}function SD(e,t,n){let r=t?"Hide":`+${n} ${n===1?"version":"versions"}`;return u`<button type="button" class="${q({"packages-row-expand":!0,expanded:t})}" data-package-expand="${e}" aria-expanded="${String(t)}" aria-label="${t?`Hide older versions of ${e}`:`Show older versions of ${e}`}" data-tooltip="${t?"Hide older versions":`Show older versions (${n})`}"><span class="packages-row-expand-chevron" aria-hidden="true"></span> <span class="packages-row-expand-label">${r}</span></button>`}function CD(e,t,n){let r=Qt().get(e),s=[...(r?cT(r,e,"live",n):new Map).values()].reduce((i,a)=>i+a.length,0);return u`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-package-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${s>0?u`<button type="button" class="bundles-tab bundles-tab-action" data-package-tab="issues">Issues (${s}) →</button>`:g}</div>${_D(e,t,n)}`}function cT(e,t,n="live",r){let o=new Map,s=r===void 0?e.files:e.byVersion.get(r)?.files??new Map;for(let[i,a]of s){let l=a.filter(f=>{let m=Me(f,c.triage.get(j(f)))??null;return n==="invalid"?m==="invalid":n==="deleted"?m==="deleted":m!=="invalid"&&m!=="deleted"});if(l.length===0)continue;let p=dT(t,i);o.has(p)||o.set(p,[]);let d=o.get(p);for(let f of l)d.push(f)}return o}function _D(e,t,n){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let f of t.findings){let m=de(f,c.severityMode);r[m]!==void 0&&r[m]++}let o=et.filter(f=>r[f]>0),s=[...t.files.entries()].toSorted(([f,m],[h,b])=>b.length!==m.length?b.length-m.length:f.localeCompare(h)),i=[...t.reports].toSorted((f,m)=>f.localeCompare(m)),l=Qt().get(e)?.repos,p=l&&l.size===1?[...l][0]:null,d=p?/^https?:/iu.test(p)?p:`https://github.com/${p}`:null;return u`<dl class="packages-detail-meta"><dt>Package</dt><dd class="mono">${e}</dd>${n?u`<dt>Version</dt><dd class="mono">${n}</dd>`:g} ${d?u`<dt>Repository</dt><dd class="mono"><a href="${d}" target="_blank" rel="noopener">${p}</a></dd>`:g}<dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${o.length>0?u`<div class="packages-detail-chips">${o.map(f=>u`<span class="${`tree-count-chip ${f}`}">${r[f]} ${f.replaceAll("_"," ")}</span>`)}</div>`:g}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${i.map(f=>{let m=ye[Ae(f)]??ye.default;return u`<li><button type="button" class="packages-detail-report" data-package-report="${f}">${W(m)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${f}">${oe(f)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${s.map(([f,m])=>{let h=dT(e,f);return u`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${f}">${h}</span> <span class="packages-detail-file-count">${m.length}</span></li>`})}</ul>`}function dT(e,t){for(let n of["node_modules","dependencies"]){let r=`${n}/${e}/`,o=t.indexOf(r);if(o>=0)return t.slice(o+r.length)}return t.startsWith(`${e}/`)?t.slice(e.length+1):t}function uT(){kt().catch(()=>{});let e=oo(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[d,f]of e){let m=[],h=new Map;for(let b of f.findings){let y=Me(b,c.triage.get(j(b)))??null;y==="inprogress"?t.inprogress++:y==="fixed"?t.fixed++:y==="invalid"?t.invalid++:y==="deleted"?t.deleted++:y==="ignored"&&t.ignored++,y===c.shownTriage&&(m.push(b),h.has(b.file)||h.set(b.file,[]),h.get(b.file).push(b))}m.length>0&&n.push([d,{findings:m,files:h,reports:f.reports}])}let r=c.selectedRepository,o=r?n.find(([d])=>d===r)??null:null;if(o&&c.repositoryDetailsTab==="issues")return AD(o[0],o[1]);let s=c.repositoriesSearchQuery.trim().toLowerCase(),i=s?n.filter(([d])=>d.toLowerCase().includes(s)||nt(d).toLowerCase().includes(s)):n.slice();TD(i,c.repositoriesSortBy);let a=n.reduce((d,[,f])=>d+f.findings.length,0),l=new Set;for(let[,d]of n)for(let f of d.reports)l.add(f);let p=o?"packages-layout open":"packages-layout";return u`<div class="${q({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Repositories</h1><div class="meta-row"><span>${i.length===n.length?u`${n.length} ${n.length===1?"repository":"repositories"}`:u`${i.length} of ${n.length} ${n.length===1?"repository":"repositories"}`}</span> ${a>0?u`<span>${a} ${a===1?"finding":"findings"} across ${l.size} ${l.size===1?"report":"reports"}</span>`:g}</div></div>${RD(t)}</header>${n.length===0?u`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":c.shownTriage?`No ${c.shownTriage} findings in any repository.`:"No untriaged findings in any repository."}</p>`:i.length===0?u`<p style="color:var(--muted)">No repositories match "${c.repositoriesSearchQuery}".</p>`:u`<div class="${p}"><ul class="packages-list">${Z(i,([d])=>d,([d,f])=>ED(d,f,d===r))}</ul>${o?u`<aside class="packages-details" id="repositories-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-repository aria-label="Close details">×</button></header><div class="packages-details-body">${FD(o[0],o[1])}</div></aside>`:g}</div>`}</div>`}function RD(e){return u`<div class="packages-toolbar"><entity-search kind="repositories"></entity-search><entity-sort kind="repositories"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${MD}"></triage-selector></div>`}var MD=["inprogress","fixed","invalid","deleted","ignored"];function TD(e,t){let n=t==="name-asc"?(r,o)=>nt(r[0]).localeCompare(nt(o[0])):t==="files-desc"?(r,o)=>o[1].files.size-r[1].files.size||nt(r[0]).localeCompare(nt(o[0])):t==="reports-desc"?(r,o)=>o[1].reports.size-r[1].reports.size||nt(r[0]).localeCompare(nt(o[0])):(r,o)=>o[1].findings.length-r[1].findings.length||nt(r[0]).localeCompare(nt(o[0]));e.sort(n)}function ID(e){let t={live:0,invalid:0,deleted:0};if(!e)return t;for(let n of e.files.values())for(let r of n){let o=Me(r,c.triage.get(j(r)))??null;o==="invalid"?t.invalid++:o==="deleted"?t.deleted++:t.live++}return t}function AD(e,t){let n=oo().get(e),r=ID(n),o=c.repositorySlideTriage??"live",s=n?pT(n,o):new Map,i=[...s.values()].reduce((p,d)=>p+d.length,0),a=o==="live"?i===1?"issue":"issues":i===1?`${o} issue`:`${o} issues`,l=o==="live"?"No live issues for this repository.":`No ${o} issues for this repository.`;return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="repository-slide-back" aria-label="Back to repositories">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${nt(e)}">${nt(e)}</div><div class="bundles-slide-integrity">${i} ${a} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="repository" .counts="${r}"></slide-triage-tabs></header><div class="bundles-slide-body">${s.size===0?u`<div class="bundle-issues-empty">${l}</div>`:sl(s,{kind:"repository",bucketKey:e})}</div></div>`}function ED(e,t,n){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let a of t.findings){let l=de(a,c.severityMode);r[l]!==void 0&&r[l]++}let o=et.filter(a=>r[a]>0),s=Sn(e),i=nt(e);return u`<li class="${n?"selected":""}" data-select-repository="${e}"><span class="packages-dot" style="${le({background:s})}"></span><div class="packages-row-text"><span class="packages-name" data-tooltip-truncated data-tooltip="${i}">${i}</span> <span class="packages-row-meta">${t.findings.length} ${t.findings.length===1?"finding":"findings"} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</span></div>${o.length>0?u`<div class="packages-row-chips">${o.map(a=>u`<span class="${`tree-count-chip ${a}`}" data-tooltip="${a.replaceAll("_"," ")}">${r[a]}</span>`)}</div>`:g} <button type="button" class="packages-row-issues" data-repository-row-issues="${e}" aria-label="${`Open issues for ${i}`}">Issues →</button></li>`}function FD(e,t){let n=oo().get(e),o=[...(n?pT(n):new Map).values()].reduce((s,i)=>s+i.length,0);return u`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-repository-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${o>0?u`<button type="button" class="bundles-tab bundles-tab-action" data-repository-tab="issues">Issues (${o}) →</button>`:g}</div>${LD(e,t)}`}function pT(e,t="live"){let n=new Map;for(let[r,o]of e.files){let s=o.filter(i=>{let a=Me(i,c.triage.get(j(i)))??null;return t==="invalid"?a==="invalid":t==="deleted"?a==="deleted":a!=="invalid"&&a!=="deleted"});s.length>0&&n.set(r,s)}return n}function LD(e,t){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let a of t.findings){let l=de(a,c.severityMode);n[l]!==void 0&&n[l]++}let r=et.filter(a=>n[a]>0),o=[...t.files.entries()].toSorted(([a,l],[p,d])=>d.length!==l.length?d.length-l.length:a.localeCompare(p)),s=[...t.reports].toSorted((a,l)=>a.localeCompare(l)),i=/^https?:/iu.test(e)?e:`https://github.com/${e}`;return u`<dl class="packages-detail-meta"><dt>Repository</dt><dd class="mono"><a href="${i}" target="_blank" rel="noopener">${nt(e)}</a></dd><dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${r.length>0?u`<div class="packages-detail-chips">${r.map(a=>u`<span class="${`tree-count-chip ${a}`}">${n[a]} ${a.replaceAll("_"," ")}</span>`)}</div>`:g}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${s.map(a=>{let l=ye[Ae(a)]??ye.default;return u`<li><button type="button" class="packages-detail-report" data-package-report="${a}">${W(l)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${a}">${oe(a)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${o.map(([a,l])=>u`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${a}">${a}</span> <span class="packages-detail-file-count">${l.length}</span></li>`)}</ul>`}function fT(e,t){let n=new Set(e),r=new Set,o=new Map,s=new Map(e.map((i,a)=>[i,a]));for(let i of t){let a=[...new Map(i.members.map(m=>[JSON.stringify([m.id,ct(m)]),m])).values()],l=a.filter(m=>n.has(m.id));if(l.length===0)continue;for(let m of l)r.add(m.id);let p=a.filter(m=>n.has(m.id)||m.isApp),d=JSON.stringify([a.map(m=>m.id).toSorted(),p.map(m=>[m.id,ct(m),m.title??"",m.source??null,m.revalidate??""]).toSorted(([m,h],[b,y])=>m.localeCompare(b)||Number(h)-Number(y))]),f=o.get(d);f||(f={key:d,members:p,reports:[],first:Math.min(...l.map(m=>s.get(m.id)))},o.set(d,f)),f.reports.some(m=>m.name===i.report&&m.managedReportId===i.managedReportId)||f.reports.push({name:i.report,...i.managedReportId?{managedReportId:i.managedReportId}:{},findingId:l[0].id,rowIndex:i.index})}return{rows:[...o.values()].toSorted((i,a)=>i.first-a.first),missing:e.filter(i=>!r.has(i))}}function Lo(e,t,n){return`${e} ${e===1?t:n}`}function OD(e,t){let n=Me(e,c.triage.get(e.id)),r=ct(e)?t.filter(({name:a})=>Ur(c.triage,e.id,a)):[],o=n??(r.length>0?"ignored":null);if(!o)return g;let s=n!=="ignored"&&o==="ignored"&&r.length<t.length,i=s?`Ignored in ${r.length}/${t.length} reports`:Aw[o];return u`<span class="${`links-finding-status triage-${o}`}" data-tooltip="${s?r.map(({name:a})=>oe(a)).join(", "):g}">${i}</span>`}function Qy(e,t=[],n=!0,r=g){let{id:o,title:s}=e,i=t[0]?.name,a=Zl(o),l=Jl(o)??a;return u`<li class="${n?"links-finding":"links-finding links-finding-context"}">${i?u`<button type="button" class="links-finding-id mono" data-links-preview="${o}" data-preview-report="${i}" data-preview-row="${t[0].rowIndex??g}" data-preview-managed-report="${t[0].managedReportId??g}" data-tooltip="${a}" aria-haspopup="dialog">${l}</button>`:jr(o)?u`<a class="links-finding-id mono" href="${`#${Gr({id:o})}`}" data-tooltip="${a}">${l}</a>`:u`<span class="links-finding-id mono">${l}</span>`} ${s?u`<span class="links-finding-title">${s}</span>`:g} ${OD(e,t)} ${n?g:u`<span class="links-member-context">not in this link</span>`} ${r}</li>`}function mT(e){let t=!!c.currentLinks?.managedId;return u`<div class="links-finding-reports">${e.map(({name:n,findingId:r,managedReportId:o,rowIndex:s})=>u`<button type="button" class="links-finding-report report-button" data-links-report="${t?g:n}" data-links-finding="${r}" data-managed-report="${o??g}" data-links-preview="${t?r:g}" data-preview-report="${t?n:g}" data-preview-row="${t?s:g}" data-preview-managed-report="${t?o:g}">${W(De[Ae(n)]??De.default)}<span class="links-finding-report-label report-button-label" data-tooltip-truncated data-tooltip="${oe(n)}">${oe(n)}</span></button>`)}</div>`}function ND(e,t){let n=e.reports.toSorted((r,o)=>oe(r.name).localeCompare(oe(o.name)));if(e.members.length===1){let r=e.members[0];return u`<li class="links-report-row links-report-row-single"><ul class="links-row-members">${Qy(r,n,t.has(r.id),mT(n))}</ul></li>`}return u`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${Lo(e.members.length,"finding","findings")} in row</span> ${mT(n)}</div><ul class="links-row-members">${e.members.map(r=>Qy(r,n,t.has(r.id)))}</ul></li>`}function BD(e,t){let{rows:n,missing:r}=fT(e,zt(e)),o=new Set(e);return u`<li class="links-group"><div class="links-group-head"><span class="links-group-index">Link ${t+1}</span> <span class="links-group-count">${Lo(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${Z(n,s=>s.key,s=>ND(s,o))}</ul>${r.length>0?u`<div class="links-unlocated"><div class="links-finding-missing">Not in your reports</div><ul class="links-row-members">${r.map(s=>Qy({id:s,title:hc(s)}))}</ul></div>`:g}</li>`}function gT(e=g){let t=c.currentLinks;if(!t)return g;kt().catch(()=>{});let{name:n,groups:r,skipped:o}=t,s=new Set,i=new Set,a=0;for(let l of r)for(let p of l){if(s.has(p))continue;s.add(p);let d=or(p);if(d.length!==0){a++;for(let f of d)i.add(f)}}return u`<div class="links-view">${t.managedId?u`<div class="meta-row"><button type="button" class="report-button" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-deduplication"}}))}">‹ Deduplication</button></div>`:g}<header class="page-head"><div class="page-title"><h1>Links${e}</h1><div class="meta-row"><span class="links-file-name" data-tooltip-truncated data-tooltip="${n}">${W(ye[Ae(n)]??ye.default)}${oe(n)}</span> <span>${Lo(r.length,"link","links")}</span> <span>${Lo(s.size,"finding","findings")}</span> ${i.size>0?u`<span>found in ${Lo(i.size,"report","reports")}</span>`:g}</div></div></header>${a<s.size?u`<p class="links-note">${Lo(s.size-a,"linked finding is","linked findings are")} not in any report you hold. Import the reports they came from and this page fills in.</p>`:g} ${o>0?u`<p class="links-note">${Lo(o,"entry","entries")} in this file could not be linked — an id the app can't follow (a session-local number, or something that isn't an id at all).</p>`:g} ${r.length===0?u`<p class="links-empty">This file declares no links: every entry in it named fewer than two findings this app can reach.</p>`:u`<ol class="links-list">${Z(r,(l,p)=>`${p}:${l.join(" ")}`,(l,p)=>BD(l,p))}</ol>`}</div>`}function ew(e,t,n){let r=new Set(t);for(let o of n)r.add(o);return e.filter(o=>r.has(o))}function hT(){if(c.currentWorkspace){let e=Y().find(n=>n.id===c.currentWorkspace),t=c.reports.map(n=>n.fileName).filter(n=>typeof n=="string");return{mode:"workspace",workspaceId:c.currentWorkspace,fileNames:e?ew(e.reports??[],c.storedFiles??[],t):t}}if(c.currentFile){let e=Y().find(t=>Array.isArray(t.reports)&&t.reports.includes(c.currentFile));return e?{mode:"single",workspaceId:e.id,fileNames:[c.currentFile]}:null}return null}var tw=class extends N{static styles=[...N.styles,P(ot)];static properties={workspaceId:{type:String},items:{type:Array},_uploading:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._uploading=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="upload"]')?.focus()}_onClose=()=>this._finish({uploaded:[],failed:[]});_onCancel=()=>this._finish({uploaded:[],failed:[]});_onUpload=async()=>{if(this._uploading)return;this._uploading=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{let o;if(r.kind==="bundle")o=await z0(this.workspaceId,r.identifier);else{let s=await Cn(r.identifier);o=await id(this.workspaceId,r.identifier,s)}if(o.ok)t.push({kind:r.kind,identifier:r.identifier});else{let s=o.reason??"unknown";n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:cr(r),reason:s}]}}catch(o){let s=o?.message??String(o);n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:cr(r),reason:s}]}this._uploading=!1,this._done=!0,n.length===0&&this._finish({uploaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Qc(this.items),o=n?u`Upload <strong>"${cr(this.items[0])}"</strong> to the workspace's remote inventory?`:u`Upload <strong>${t}</strong> local ${r} to the workspace's remote inventory?`,s=n?g:ed(this.items),i=this._uploading?n?"Uploading\u2026":`Uploading ${t} ${r}\u2026`:n?"Upload":`Upload ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Upload to remote</h3></header><p class="lwd-body">${o}</p>${s}<p class="nwd-note ui-hint">End-to-end encrypted with the workspace key — only workspace members can decrypt the uploaded content.</p>${td(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._uploading}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="upload" @click="${this._onUpload}" ?disabled="${this._uploading||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-upload-dialog",tw);function bT({workspaceId:e,items:t}={}){return re("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var yT=`.rec-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.rec-list{margin:.2rem 0 .55rem;padding:0;list-style:none;max-height:320px;overflow-y:auto}.rec-row{display:flex;align-items:center;gap:.5rem;padding:.28rem .15rem;font-size:.8rem;line-height:1.4;border-bottom:1px solid rgb(from var(--text) r g b / .06)}.rec-row:last-child{border-bottom:none}.rec-label{flex:1 1 auto;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rec-status{flex:0 0 auto;padding:0 .4rem;border-radius:4px;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.rec-status-checking{color:var(--muted)}.rec-status-good{color:var(--ok, #16a34a)}.rec-status-uploaded,.rec-status-reuploaded{color:var(--accent, #2563eb)}.rec-status-updated{color:var(--high, #d57422)}.rec-status-differs{color:var(--warning, #d97706)}.rec-choice{flex:0 0 auto;display:flex;gap:.3rem;& button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 4px);padding:.1rem .45rem;font:inherit;font-size:.72rem;cursor:default;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&:disabled{opacity:.5;cursor:default}}}.rec-status-failed,.rec-status-check-failed{color:var(--warning, #d97706)}.rec-status-differs,.rec-status-failed,.rec-status-check-failed{background:rgb(from var(--warning, #d97706) r g b / .14)}.rec-status-missing{color:var(--critical, #dc2626)}.rec-summary{margin:.1rem 0 .2rem;color:var(--muted);font-size:.76rem;line-height:1.45}.rec-error{margin:.3rem 0 .2rem;color:var(--critical, #f87171);font-size:.76rem;line-height:1.4}
|
|
198
|
+
`;var wT={checking:{label:"checking\u2026",hint:"Checking the cloud copy\u2026"},good:{label:"available",hint:"The cloud copy is intact."},updated:{label:"local updated",hint:"Your copy was out of date. It was replaced with the cloud copy."},uploaded:{label:"cloud updated",hint:"Your copy was newer. It was uploaded to the cloud."},differs:{label:"differs",hint:"Your copy differs from the cloud copy, and nothing shows which one is newer. Choose which to keep."},reuploaded:{label:"re-uploaded",hint:"The cloud copy's data was missing. It was restored from your copy."},failed:{label:"failed",hint:"Couldn't bring this back in line. Re-check again to retry."},"check-failed":{label:"check failed",hint:"Couldn't download the cloud copy to check it, so its state is unknown. Re-check again to retry."},missing:{label:"missing",hint:"The cloud copy's data is gone, and there's no matching copy here to restore it from."}};function DD(e){let t={good:0,updated:0,uploaded:0,differs:0,reuploaded:0,failed:0,"check-failed":0,missing:0};for(let n of e)n.status in t&&(t[n.status]+=1);return t}var vT=e=>e===1?"copy":"copies",nw=class extends N{static styles=[...N.styles,P(Hl),P(ot),P(yT)];static properties={workspaceId:{type:String},cloudCount:{type:Number},localFileNames:{type:Array},localBundles:{type:Array},autoRun:{type:Boolean},_rows:{state:!0},_running:{state:!0},_ran:{state:!0},_error:{state:!0},_settled:{state:!0},_resolving:{state:!0},_bulk:{state:!0}};constructor(){super(),this.workspaceId="",this.cloudCount=0,this.localFileNames=[],this.localBundles=[],this.autoRun=!1,this._rows=[],this._running=!1,this._ran=!1,this._error=null,this._settled=!1,this._resolving=new Set,this._bulk=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="recheck"]')?.focus(),this.autoRun&&this._onRecheck()}_result(){return{items:this._rows,counts:this._counts()}}_onClose=()=>this._finish(this._ran?this._result():null);_onCancel=()=>this._finish(this._ran?this._result():null);_counts(){return DD(this._rows)}_onResolve=async(t,n)=>{if(this._resolving.has(t.resourceTag))return;this._resolving=new Set([...this._resolving,t.resourceTag]);let r;try{let s=await H0(this.workspaceId,t.identifier,n,t.compared);r=s?{status:s.status,detail:s.detail}:{status:"failed",detail:"sync is not available"}}catch(s){r={status:"failed",detail:s?.message??String(s)}}this._rows=this._rows.map(s=>s.resourceTag===t.resourceTag?{...s,...r}:s);let o=new Set(this._resolving);o.delete(t.resourceTag),this._resolving=o};_onUseCloudForAll=async()=>{if(!(this._bulk||this._running)){this._bulk=!0;try{for(let t of this._differingRows())await this._onResolve(t,"cloud")}finally{this._bulk=!1}}};_differingRows(){return this._rows.filter(t=>t.status==="differs")}_onRecheck=async()=>{if(!(this._running||this._bulk||this._resolving.size>0)){this._running=!0,this._error=null,this._rows=[];try{let{items:t}=await W0(this.workspaceId,{onList:n=>{this._rows=n},onItem:n=>{this._rows=this._rows.map(r=>r.resourceTag===n.resourceTag?n:r)}});this._rows=t}catch(t){this._error=t?.message??String(t)}finally{this._running=!1,this._ran=!0}}};_downloadableItems(){let t=new Set(this.localFileNames),n=new Set(this.localBundles),r=[];for(let o of this._rows)o.status!=="good"||!o.identifier||(o.kind==="report"&&!t.has(o.identifier)?r.push({kind:"report",identifier:o.identifier}):o.kind==="bundle"&&!n.has(o.identifier)&&r.push({kind:"bundle",identifier:o.identifier,label:o.label}));return r}_onDownload=async()=>{let t=this._downloadableItems();t.length!==0&&await ju({workspaceId:this.workspaceId,items:t})};_statusHint(t){let n=wT[t.status]?.hint??"";return t.status==="good"&&this._heldLocally(t)&&(n="The cloud copy is intact and matches your copy."),t.detail?`${n}
|
|
199
|
+
${t.detail}`:n}_heldLocally(t){return t.identifier?t.kind==="bundle"?this.localBundles.includes(t.identifier):this.localFileNames.includes(t.identifier):!1}_choice(t){if(t.status!=="differs")return g;let n=this._running||this._bulk||this._resolving.has(t.resourceTag);return u`<span class="rec-choice"><button type="button" data-role="keep-cloud" data-tooltip="Replace your copy with the cloud copy" @click="${()=>this._onResolve(t,"cloud")}" ?disabled="${n}">Use cloud copy</button> <button type="button" data-role="keep-local" data-tooltip="Upload your copy, replacing the cloud copy" @click="${()=>this._onResolve(t,"local")}" ?disabled="${n}">Upload mine</button></span>`}_rowsSection(){return this._rows.length===0?this._running?u`<p class="lwd-body">Fetching remote listing…</p>`:g:u`<ul class="rec-list">${this._rows.map(t=>u`<li class="rec-row"><span class="rec-label">${t.label}${t.kind==="bundle"?u`<span class="lwd-kind-tag">bundle</span>`:g}</span> ${this._choice(t)} <span class="${`rec-status rec-status-${t.status}`}" data-tooltip="${this._statusHint(t)}">${wT[t.status]?.label??t.status}</span></li>`)}</ul>`}_summarySection(){if(!this._ran||this._rows.length===0)return g;let t=this._counts(),n=[];return t.good&&n.push(`${t.good} available`),t.updated&&n.push(`${t.updated} local ${vT(t.updated)} updated from the cloud`),t.uploaded&&n.push(`${t.uploaded} cloud ${vT(t.uploaded)} updated from yours`),t.differs&&n.push(`${t.differs} ${t.differs===1?"differs":"differ"} \u2014 choose which copy to keep`),t.reuploaded&&n.push(`${t.reuploaded} re-uploaded`),t.failed&&n.push(`${t.failed} failed`),t["check-failed"]&&n.push(`${t["check-failed"]} check failed`),t.missing&&n.push(`${t.missing} missing`),n.length>0?u`<p class="rec-summary" role="status" aria-live="polite">${n.join(" \xB7 ")}</p>`:g}render(){let t=this.cloudCount===1?"":"s",n=this.cloudCount>0?u`the <strong>${this.cloudCount}</strong> remote`:"remote",r=this._ran?g:u`<p class="lwd-body">Re-check ${n} object${t} for this workspace. Each is re-fetched from the relay and compared with your copy. When one copy is provably newer, the other is updated to match; when it isn't clear, you choose which to keep. Any whose bytes are missing are re-uploaded from a matching local copy.</p>`,o=this._ran&&this._rows.length===0&&!this._error?u`<p class="lwd-empty">No remote objects to check.</p>`:g,s=this._ran?this._downloadableItems().length:0,i=this._differingRows().length>1||this._bulk;return u`<dialog @close="${this._onClose}"><button type="button" class="detail-action rec-close" data-role="close" aria-label="Close" @click="${this._onCancel}">×</button><header><h3>Re-check cloud storage</h3></header>${r} ${this._rowsSection()} ${o} ${this._summarySection()} ${this._error?u`<p class="rec-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> ${i?u`<button type="button" data-role="use-cloud-all" data-tooltip="Replace your copy of every report that differs with its cloud copy" @click="${this._onUseCloudForAll}" ?disabled="${this._running||this._bulk}">${this._bulk?"Using cloud copies\u2026":`Use cloud for all ${this._differingRows().length} conflicts`}</button>`:g} ${!i&&s>0?u`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running}">Download ${s} not stored locally</button>`:g} ${i?g:u`<button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._ran?"Close":"Cancel"}</button>`} <button type="button" data-role="recheck" @click="${this._onRecheck}" ?disabled="${this._running||this._bulk||this._resolving.size>0}">${this._running?"Re-checking\u2026":this._ran?"Re-check again":"Re-check"}</button></footer></dialog>`}};customElements.define("objstore-recovery-dialog",nw);function rw({workspaceId:e,cloudCount:t,localFileNames:n,localBundles:r,autoRun:o}={}){return re("objstore-recovery-dialog",{workspaceId:e??"",cloudCount:typeof t=="number"?t:0,localFileNames:Array.isArray(n)?[...n]:[],localBundles:Array.isArray(r)?[...r]:[],autoRun:o===!0})}var $T=`.ssd-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.lwd-list{margin:.5rem 0 0}
|
|
200
|
+
`;var WD=10,ow=class extends N{static styles=[...N.styles,P(Hl),P(ot),P($T)];static properties={names:{type:Array}};constructor(){super(),this.names=[]}focusInitial(){this.renderRoot.querySelector('button[data-role="sync"]')?.focus()}_onSync=()=>this._finish(!0);_onDismiss=()=>this._finish(!1);_onClose=()=>this._finish(!1);_list(){if(this.names.length<2)return g;let t=this.names.slice(0,WD),n=this.names.length-t.length;return u`<ul class="lwd-list">${t.map(r=>u`<li><strong>${r}</strong></li>`)} ${n>0?u`<li>and ${n} more</li>`:g}</ul>`}render(){let t=this.names.length===1,n=t?u`Your copy of <strong>"${this.names[0]}"</strong> no longer matches its cloud copy, so other members may be seeing a different version.`:u`<strong>${this.names.length}</strong> reports no longer match their cloud copies, so other members may be seeing different versions.`;return u`<dialog @close="${this._onClose}"><button type="button" class="detail-action ssd-close" data-role="close" aria-label="Close" @click="${this._onDismiss}">×</button><header><h3>Reports out of sync</h3></header><p class="lwd-body">${n}</p>${this._list()}<p class="nwd-note ui-hint">Sync compares ${t?"it":"each one"} with the cloud. Where it's clear which copy is newer, the other is updated; otherwise you choose which to keep.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="dismiss" @click="${this._onDismiss}">Not now</button> <button type="button" class="primary" data-role="sync" @click="${this._onSync}">Sync</button></footer></dialog>`}};customElements.define("sync-suggest-dialog",ow);function kT({names:e}={}){return new Promise(t=>{let n=document.createElement("sync-suggest-dialog");n.exclusive=!0,n.names=Array.isArray(e)?[...e]:[];let r=(o,s)=>{n.remove(),t({shown:o,sync:s})};n.addEventListener("resolve",o=>r(!0,o.detail===!0)),n.addEventListener("modal-conflict",()=>r(!1,!1)),document.body.append(n)})}var HD=1500;function xT({open:e,later:t=(r,o)=>setTimeout(r,o),modalOpen:n=()=>Sv()}){let r=new Set,o=!1;function s(i,a,{onSync:l,retry:p}={}){!i||!Array.isArray(a)||a.length===0||o||r.has(i)||(o=!0,t(async()=>{let d;if(n())d={shown:!1,sync:!1};else try{d=await e([...a])}catch{d={shown:!1,sync:!1}}if(o=!1,!d.shown){typeof p=="function"&&t(p,HD);return}r.add(i),d.sync&&typeof l=="function"&&l()},0))}return{suggestSync:s,isClosedFor:i=>r.has(i)}}function ST(e,t,n=0){let{viewMode:r,focusGid:o,tableSelectedGid:s,kanbanPopoverGid:i}=t,a=r==="focus"?o:r==="table"?s:r==="kanban"?i:null,l=a?e.find(p=>ie(p)===a):null;return l||(r==="focus"?e[Math.min(n,e.length-1)]??null:null)}function CT(e,t){if(t.currentView!=="findings")return null;let n=Xe({view:"findings",teamId:t.currentManagedTeam,reportId:t.currentManagedReport},t.managedTeams);if(!n||!e)return n;let r={...n,finding:{id:j(je(e))}};return Ye(r)?r:n}var lp=null;function Zte(e){let t=lp=document.startViewTransition(e);return t.ready.catch(()=>{}),t.finished.finally(()=>{lp===t&&(lp=null)}).catch(()=>{}),t}function _T(e){let t=null;return n=>{t!==null&&t!==n&&lp?.skipTransition(),t=n,e()}}function Gt(){be.classList.add("active"),ut.classList.add("hidden")}function dw(){let e=Yp(c.reports);if(!e)return null;let t=Object.keys(e),r=mr().filter(d=>Fe(d).commonTriage===c.shownTriage),o=qp(r,c.severityMode),s=Ql(e,o),i=new Map,a=new Map,l=new Map;for(let d of r)for(let f of d){let m=de(f,c.severityMode);i.has(f.file)||i.set(f.file,new Set),i.get(f.file).add(m);let h=he(f)?.color??"none";a.has(f.file)||a.set(f.file,new Set),a.get(f.file).add(h),l.has(f.file)||l.set(f.file,[]),l.get(f.file).push({severity:m,color:h})}let p;return ee.focusedPkg?(p=t.filter(d=>(a$(d)??"__own__")===ee.focusedPkg),ee.showAll||(p=p.filter(d=>Xp(d,o,s)))):p=ee.showAll?t:t.filter(d=>Xp(d,o,s)),{treeData:e,files:p,ownCounts:o,transitiveCounts:s,severitySets:i,colorSets:a,fileFindings:l,ownSourceFiles:l$(p)}}function UD(){let e=Fs();if(!e)return;let t=dw();if(!t)return;let n=c.currentView==="bundles";e.refreshSidebar(t,{isBundleContext:n,findingsJump:!(n&&R())})}function VD(){let e=Fs();if(!e)return;let t=dw();t&&e.refreshTopPkgs(t)}function jD(e){return`${zr[e]??e} findings`}function GD(e,t,n){return n?u`<repo-chip url="${n}"></repo-chip>`:R()?g:c.currentWorkspace?t?u`<repo-chip url="${t}"></repo-chip>`:g:e?u`<repo-chip url="${c.repoUrl}" editable ?editing="${c.repoEditing}" ?empty="${!c.repoUrl}"></repo-chip>`:t?u`<repo-chip url="${t}"></repo-chip>`:g}function AT(e,t,n,r,o){let s=e.length,i=new Set(c.reports.map(E=>E.source)),a=i.size===1?[...i][0]:null,l=c.currentWorkspace?Y().find(E=>E.id===c.currentWorkspace):null,p=c.currentWorkspace&&c.currentManagedTeam?c.managedTeams.find(E=>E.id===c.currentManagedTeam):null,d=Gu(c,l?[l]:[],Ie),f=p?`Team: ${p.name}`:l?`Workspace: ${l.name}`:a?jD(a):"Findings",m=a&&ye[a]?a:"default",h=W(ye[m]),b=u`<svg class="file-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"/><path d="M14 3v6h6"/></svg>`,y=g;if(d)y=Xa(d,"reports",c.currentView);else if(t.length===1){let E=oe(t[0]);y=u`<button type="button" class="file-chip" data-copy-report="${E}">${h}<span>${E}</span></button>`}else t.length>1&&(y=u`<button type="button" class="file-chip" data-copy-report="${t.map(oe).join(`
|
|
201
|
+
`)}">${b}<span>${t.length} reports</span></button>`);let w=c.reports.flatMap(E=>E.groups.flat()),x=`${s} ${`finding${s===1?"":"s"}`}`,$=c.currentWorkspace?[]:yx(w,a?wd.filter(E=>E!=="type"):wd),k=g;if(s>0){let E={};for(let I of e){let U=de(An(I),c.severityMode);U&&(E[U]=(E[U]||0)+1)}let T=et.filter(I=>E[I]>0);T.length>0&&(k=u`<span class="status-bar" aria-hidden="true">${T.map(I=>{let U=`${E[I]} ${I.replaceAll("_"," ")}`;return u`<span class="${`status-seg sev-${I}`}" style="${le({flexGrow:E[I]})}" data-tooltip="${U}"></span>`})}</span>`)}let S=new Set(c.reports.map(E=>E.repo??null)),C=S.size===1?[...S][0]:null,_=GD(n,r,C),L=u`<span class="sep" aria-hidden="true"></span>`,A=Sy(o,c.currentView);return u`<header class="page-head"><div class="page-title"><h1>${d?xy(d,c.currentView):f}${y}${Xa(d,"bundles",c.currentView)}${_}${A}${ET()}</h1><div class="meta-row"><span>${x}</span> ${k} ${$.length>0?u`${L}${$.map(E=>u`<span class="tag">${E}</span>`)}`:g}</div></div></header>`}var{suggestSync:KD}=xT({open:e=>kT({names:e})}),qD=new Set(["findings","files","links"]);function ET(){if(G.status!=="online")return g;if(!qD.has(c.currentView))return g;let e=hT();if(!e)return g;let{workspaceId:t,fileNames:n,mode:r}=e,o=N0(t);if(o.length>0&&KD(t,o,{onSync:()=>sw(t,r,n),retry:O}),r==="single"){let x=n[0];if(o.includes(x))return RT({status:"differ",label:"differs",title:`Your copy of "${x}" doesn't match its cloud copy. Click to re-check and bring them in line.`,onClick:()=>sw(t,r,n)});let $=cg(t,x)?"cloud":"local";return RT({status:$,label:$,title:$==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:$==="local"?()=>MT({workspaceId:t,items:[{kind:"report",identifier:x}]}):null})}let s=Y().find(x=>x.id===t),i=s&&Array.isArray(s.bundles)?s.bundles:[],a=ug(t),l=n.filter(x=>!cg(t,x)),p=i.filter(x=>!L0(t,x)),d=[...l.map(x=>({kind:"report",identifier:x})),...p.map(x=>({kind:"bundle",identifier:x}))];if(a===0&&d.length===0)return g;let f=[a>0?`${a} in cloud`:null,d.length>0?`${d.length} local-only`:null,o.length>0?`${o.length} differ from the cloud`:null,a>0?'click "cloud" to re-check storage':null,d.length>0?`click "local" to upload ${d.length}`:null].filter(Boolean).join(" \u2014 "),m=o.length===1?`Your copy of "${o[0]}" doesn't match its cloud copy. Click to re-check and bring them in line.`:`${o.length} reports don't match their cloud copies. Click to re-check and bring them in line.`,h=o.length===0?g:u`<button type="button" class="sync-badge-chunk differ" data-tooltip="${m}" aria-label="${`${o.length} report${o.length===1?"":"s"} differ from the cloud \u2014 re-check`}" @click="${x=>{x.stopPropagation(),sw(t,r,n)}}">${LT()}<span>${o.length} differ</span></button>`,b=a===0?g:u`<button type="button" class="sync-badge-chunk cloud" aria-label="${`re-check ${a} cloud object${a===1?"":"s"}`}" @click="${x=>{x.stopPropagation(),rw({workspaceId:t,cloudCount:a,localFileNames:n,localBundles:i})}}">${OT()}<span>${a} cloud</span></button>`,y=d.length===0?g:u`<button type="button" class="sync-badge-chunk local" aria-label="${`${d.length} items not yet uploaded \u2014 open upload dialog`}" @click="${x=>{x.stopPropagation(),MT({workspaceId:t,items:d})}}">${FT()}<span>${d.length} local</span></button>`,w=u`<span class="sync-badge-divider" aria-hidden="true"></span>`,v=[b,h,y].filter(x=>x!==g);return u`<div class="report-sync-badge report-sync-badge-clickable" data-status="mixed" data-tooltip="${f}">${v.map((x,$)=>$===0?x:u`${w}${x}`)}</div>`}function sw(e,t,n){let r=Y().find(i=>i.id===e),o=t==="single"?ew(r?.reports??[],c.storedFiles??[],n):n,s=r&&Array.isArray(r.bundles)?r.bundles:[];return rw({workspaceId:e,cloudCount:ug(e),localFileNames:o,localBundles:s,autoRun:!0})}function RT({status:e,label:t,title:n,onClick:r}){let o=e==="cloud"?OT():e==="differ"?LT():FT(),s=u`<span class="sync-badge-label">${t}</span>`;return typeof r!="function"?u`<span class="report-sync-badge" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}">${o}${s}</span>`:u`<button type="button" class="report-sync-badge report-sync-badge-clickable" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}" @click="${r}">${o}${s}</button>`}function FT(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="14" width="20" height="8" rx="2" ry="2"/><line x1="6" y1="18" x2="6.01" y2="18"/><line x1="10" y1="18" x2="10.01" y2="18"/><path d="M6 14V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v10"/></svg>`}function LT(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 4v14"/><path d="M3 14l4 4 4-4"/><path d="M17 20V6"/><path d="M13 10l4-4 4 4"/></svg>`}function OT(){return u`<svg class="sync-badge-icon" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1-8.9A6 6 0 0 0 5.07 13.5 4 4 0 0 0 6 21h11.5z"/></svg>`}async function MT({workspaceId:e,items:t}){let n=t.filter(r=>r.kind==="bundle");if(n.length>0){let r=await Je(),o=new Map(r.map(s=>[s.integrity,s.name]));for(let s of n){let i=o.get(s.identifier);i&&(s.label=i)}}await bT({workspaceId:e,items:t})}function YD(e){return Object.values(e).some(n=>n>0)||c.filterSeverities.size>0?u`<severity-chips .counts="${e}"></severity-chips>`:g}function XD(e){return Object.values(e).some(n=>n>0)||c.filterColors.size>0?u`<triage-filter .counts="${e}"></triage-filter>`:g}function JD(e,t,n,r,o,s,i,a){let{showSource:l,showConfidence:p,showPriority:d,showGraphMode:f,showFileSort:m,kanbanMode:h,showRepo:b,hasComment:y,hasFix:w,hasFlagged:v,hasDuplicates:x,hasCrossContext:$,hasAppStacked:k,showSecurity:S,showSeverityMode:C,revalidateOptions:_,showPartial:L,canDropLayer:A,canDetailLayer:E,canUpstreamLens:T,confirmedLocked:I}=s;return u`<div class="toolbar"><div class="toolbar-row"><view-mode-buttons modes="${f?"kanban,focus,table,list,grouped,graph":"kanban,focus,table,list,grouped"}"></view-mode-buttons><findings-sort ?show-file="${m}" ?show-confidence="${p}" ?show-priority="${d}"></findings-sort>${l?u`<source-filter></source-filter>`:g} ${!I&&(p||_.length>0)?u`<conf-filter ?range-disabled="${!p}" .revalidateOptions="${_}" ?has-partial="${L}"></conf-filter>`:g} ${y||w||v||c.filterComment||c.filterFix||c.filterFlagged?u`<annotation-filter .hasComment="${y}" .hasFix="${w}" .hasFlagged="${v}"></annotation-filter>`:g} ${h?g:u`<triage-selector .counts="${n}"></triage-selector>`}<div class="toolbar-end"><download-button></download-button>${!c.currentWorkspace&&(x||c.filterDuplicates)||$||k||S||c.filterCrossContext||c.filterAppStacked?u`<annotation-filter group="context" .hasDuplicates="${x}" .hasCrossContext="${$}" .hasAppStacked="${k}" .hasSecurityContrast="${S}"></annotation-filter>`:g} ${A||c.revalidateConflicts.size>0?u`<revalidation-switch ?can-drop="${A}" ?can-detail="${E}" ?can-upstream="${T&&A}" .upstreamDisabled="${c.showRevalidation===!1&&A}"></revalidation-switch>`:g}</div></div><div class="toolbar-row sev-row">${C?u`<severity-mode-switch></severity-mode-switch>`:g} ${YD(r)} ${i.analyzers.length>1||i.models.length>1?u`<analyzer-select .analyzers="${i.analyzers}" .models="${i.models}" .groups="${i.groups}"></analyzer-select>`:g} ${b&&a.length>1?u`<repo-filter .options="${a}"></repo-filter>`:g} ${XD(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function iw(e,t){return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}var TT=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),dp=null,NT=0,ti=null;function il(e,t=!1,n=null,r=!1,o=!1){return u`<finding-card data-gid="${ie(e)}" .group="${e}" ?in-group="${t}" context="${n??g}" ?lazy="${r}" ?popup="${o}"></finding-card>`}var BT=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2H2v4M10 2h4v4M14 10v4h-4M6 14H2v-4"/></svg>`,PT=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2v4H2M10 2v4h4M10 14v-4h4M6 14v-4H2"/></svg>`,ZD={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};function cw(e,t={}){let{variant:n="kanban",active:r=!1,expandedTrackLast:o=!1}=t,s=Fe(e),i=je(e),a=Ft(i)||"(untitled finding)",l=n==="kanban",p=n==="kanban-side",d=l&&c.currentWorkspace?qc(i):null,f={"kanban-card":!0,"has-conflict":s.hasConflict,"focus-side-card":!l,"kanban-expanded-track-last":o,active:r};!s.hasConflict&&s.commonColor&&(f[`mark-${s.commonColor}`]=!0);let m=parseInt(i.line,10),h=Number.isFinite(m)?`:${m}`:"",b=de(i,c.severityMode),y=ZD[b]??"?",w=Do(i)&&c.severityMode!=="original",v=he(i),x=v?.flagged===!0,$=v?.fix||tn(i),k=v?.comment??"",S=g;l&&$?S=zo($)?u`<managed-fix-link class="kanban-action kanban-fix-link" compact="compact" .url="${$}">${Es}</managed-fix-link>`:_t(i)?u`<button type="button" class="kanban-action mark-fix" data-tooltip="${`Edit fix link: ${$}`}" aria-label="${`Edit fix link: ${$}`}">${Es}</button>`:u`<span class="kanban-action kanban-fix-note" role="img" data-tooltip="${`Fix: ${$}`}" aria-label="${`Fix: ${$}`}">${Es}</span>`:l&&(k||R()&&ur(i))&&(S=u`<comment-preview class="kanban-action" .finding="${i}" .comment="${k}">${Bd}</comment-preview>`);let C=u`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${b}`}" data-tooltip="${w?`${st(b)} \u2014 corrected from ${st(i.severity)}`:g}" aria-label="${w?`Severity ${st(b)}, corrected from ${st(i.severity)}`:`Severity ${st(b)}`}">${y}${w?"*":""}</span> ${x?u`<span class="kanban-flag" aria-label="Flagged">${Pd}</span>`:g} ${S}</div><span class="kanban-title">${a}</span><div class="kanban-meta"><span class="kanban-loc">${i.file}${h}</span> ${i.confidence===void 0||i.confidence===null?g:u`<span class="kanban-conf" data-tooltip="${`Confidence ${i.confidence}/10`}">${i.confidence}</span>`} ${d?u`<span class="kanban-analyzer" role="img" data-tooltip="${ys[d]}" aria-label="${ys[d]}">${W(De[d])}</span>`:g}</div>`;return l?u`<div class="${q(f)}" data-gid="${ie(e)}" data-kanban-source draggable="${ma(e,s).length>0?"true":"false"}" role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Open details for ${a}`}">${C}</div>`:p?u`<div class="${q(f)}" data-gid="${ie(e)}" data-kanban-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Show details for ${a}`}">${C}</div>`:u`<div class="${q(f)}" data-gid="${ie(e)}" data-focus-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Focus on ${a}`}">${C}</div>`}var aw={content:"",parts:""};function QD(e){return aw.content!==e&&(aw={content:e,parts:Ud(e)}),aw.parts}function e5(e){let{content:t,range:n,highlighted:r}=e,o=t.split(`
|
|
202
|
+
`).length,s=String(o).length;return u`<div class="focus-code-lines" style="${le({"--lineno-width":`${s}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:o},(i,a)=>{let l=a+1,d={"focus-code-lineno":!0,"focus-code-line-active":!!n&&l>=n.start&&l<=n.end};return u`<div class="${q(d)}" data-focus-code-line="${l}">${l}</div>`})}</aside><pre class="focus-code-source" tabindex="-1" aria-label="${e.file}"><code>${typeof r=="string"?W(r):QD(t)}</code></pre></div>`}function DT(e){return!e||!oa(je(e))?g:u`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${ie(e)}" aria-label="View issue history"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 5a6.25 6.25 0 1 1-.25 5M1.5 1.5V5H5M8 4.5V8l3 1.5"/></svg></button>`}function zT(e,t=g,n=!1){c.focusCodeTick;let r=Hx(e),o=Ad(e),s=r?"focus-main with-code":"focus-main",i=le({"--focus-split":String(c.focusSplit)});return u`<div class="${s}" style="${i}" data-gid="${ie(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?g:DT(e)} ${il(e,!1,"focus",!1,n)}</div></div>${t} ${r?u`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${cc}" aria-valuemax="${dc}" aria-valuenow="${Math.round(c.focusSplit)}" data-tooltip="Drag to resize · double-click to reset"></div><div class="focus-pane focus-pane-code" data-focus-code-file="${r.file??g}" data-focus-code-integrity="${r.integrity??g}">${r.loading?u`<div class="focus-code-empty">Loading source…</div>`:u`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?u`<span class="focus-code-line">:${Zv(r.range)}</span>`:g} ${(o?.stack.length??0)>1?u`<div class="focus-code-nav"><button type="button" class="focus-code-nav-btn" data-code-history="back" ?disabled="${o.at===0}" aria-label="Back to the previously shown file">${Ts}</button> <button type="button" class="focus-code-nav-btn" data-code-history="forward" ?disabled="${o.at===o.stack.length-1}" aria-label="Forward to the next shown file">${Is}</button></div>`:g}</header><div class="focus-code-body">${e5(r)}</div>`}</div>`:g}</div>`}function WT(e,t,n=[],r=null){if(!e&&!r)return g;let o=e?Fe(e):{},s=c.kanbanDetailFullscreen,i={"kanban-detail-modal":!0,fullscreen:s,"has-conflict":o.hasConflict},a=e?ie(e):null,l=t?.items??[],p=l.findIndex(f=>ie(f)===a),d=u`<div class="kanban-detail-actions">${DT(e)} <button type="button" class="kanban-detail-expand detail-action" data-kanban-detail-fullscreen aria-pressed="${s?"true":"false"}" aria-label="${s?"Back to the readable width":"Fill the available space"}">${s?PT:BT}</button> <button type="button" class="kanban-detail-close detail-action" aria-label="Close details">×</button></div>`;return u`<div class="${q({"kanban-detail-backdrop":!0,"links-preview-backdrop":!!r})}"><div class="kanban-detail-dim"></div><div class="${q(i)}" role="dialog" aria-modal="true" aria-label="${r?"Finding preview":"Finding details"}">${s&&e?g:d}<div class="kanban-detail-body">${e?s?zT(e,d,!0):il(e,!1,"kanban-detail",!1,!0):u`<div class="links-preview-message" role="status">${r.error||"Loading finding\u2026"}</div>`}</div></div>${l.length===0?g:u`<aside class="kanban-detail-side" aria-label="${`${t.label} findings`}"><div class="kanban-detail-side-header"><span class="kanban-detail-side-pick"><select class="kanban-detail-side-select" data-kanban-column aria-label="Column to show">${n.map(f=>{let m=f.key===t.key,h=m?f.label:`${f.label} (${f.count})`;return u`<option value="${f.key}" data-gid="${f.firstGid}" .selected="${m}" ?disabled="${f.count===0}">${h}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${p===0}" aria-label="Previous finding">${Ts}</button> <span class="count">${p<0?l.length:`${p+1} / ${l.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${p===l.length-1}" aria-label="Next finding">${Is}</button></div></div><div class="kanban-detail-side-body">${Z(l,f=>ie(f),f=>cw(f,{variant:"kanban-side",active:ie(f)===a}))}</div></aside>`}</div>`}function t5(e,t){if(c.viewMode==="table"){let r=c.sortBy==="file"?iw(e,TT):e;return r.length===0?g:(dp=r,u`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?u`<aside class="findings-table-details" id="findings-table-details" aria-label="Finding details"><button type="button" class="findings-table-details-close" data-table-deselect aria-label="Close details">×</button><div class="findings-table-details-body">${il(t)}</div></aside>`:g}</div>`)}if(c.viewMode==="focus"){if(e.length===0)return g;let r=e.indexOf(t);NT=r;let o=t,s=r===0,i=r===e.length-1;return u`<div class="focus-view">${zT(o)}<aside class="focus-sidebar" aria-label="Up next"><div class="focus-sidebar-header"><span class="label">Up next</span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-focus-nav="prev" ?disabled="${s}" aria-label="Previous finding">${Ts}</button> <span class="count">${r+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${i}" aria-label="Next finding">${Is}</button></div></div><div class="focus-sidebar-body">${Z(e,a=>ie(a),a=>cw(a,{variant:"focus",active:ie(a)===ie(o)}))}</div></aside></div>`}if(c.viewMode==="kanban"){let r=[{key:"untriaged",label:"Untriaged"},{key:"inprogress",label:"In progress"},{key:"fixed",label:"Fixed"},{key:"invalid",label:"Invalid"},{key:"deleted",label:"Deleted"},{key:"ignored",label:"Ignored"}],o=new Map(r.map(d=>[d.key,[]]));for(let d of e){let m=Fe(d).commonTriage??"untriaged",h=o.get(m);h&&h.push(d)}let s=r.some(d=>d.key===c.kanbanExpandedColumn)?c.kanbanExpandedColumn:null,i=s?r.filter(d=>d.key===s):r,a={"--kanban-cols":String(r.length)},l=t,p=l?r.find(d=>d.key===(Fe(l).commonTriage??"untriaged")):null;return u`<div class="kanban-board" style="${le(a)}">${Z(i,d=>d.key,d=>{let f=o.get(d.key),m=d.key===s;return u`<div class="${`kanban-column kanban-column-${d.key}${m?" expanded":""}`}" data-kanban-target="${d.key}"><div class="kanban-column-header"><span class="label">${d.label}</span> <span class="count">${f.length}</span> <button type="button" class="kanban-expand" data-kanban-expand="${d.key}" aria-pressed="${m}" aria-label="${m?"Show all columns":`Show only ${d.label}`}">${m?PT:BT}</button></div><div class="kanban-column-body">${f.length===0?u`<div class="kanban-empty">No ${d.label.toLowerCase()} findings.</div>`:Z(f,h=>ie(h),(h,b)=>cw(h,{active:ie(h)===c.kanbanPopoverGid,expandedTrackLast:(b+1)%r.length===0}))}</div></div>`})}</div>${WT(l,p&&{key:p.key,label:p.label,items:o.get(p.key)},r.map(d=>{let f=o.get(d.key);return{key:d.key,label:d.label,count:f.length,firstGid:f.length>0?ie(f[0]):""}}))}`}if(c.viewMode==="grouped"){let r=new Map;for(let s of e){let i=An(s).file;r.has(i)||r.set(i,[]),r.get(i).push(s)}let o=c.sortBy==="file"?[...r.keys()].toSorted():[...r.keys()];return u`${Z(o,s=>s,s=>{let i=c.sortBy==="file"?iw(r.get(s),(l,p)=>parseInt(l.line,10)-parseInt(p.line,10)):r.get(s),a=An(i[0]);return u`<div class="file-group"><div class="file-header"><span>${Gp(a,En(a))}</span> <span class="count">${i.length}</span></div><div class="file-body">${Z(i,l=>ie(l),l=>il(l,!1,null,!0))}</div></div>`})}`}let n=c.sortBy==="file"?iw(e,TT):e;return u`${Z(n,r=>ie(r),r=>{let o=je(r),s=r$(o,En(o)),i=Zr(o),a=ui(o),l=r.length>1;return u`<div class="${q({"flat-group":!0,"multi-case":l})}"><div class="flat-group-loc"><span class="file">${Gp(o,En(o))}</span> ${s===g?g:u`<span class="line-num">${s}</span>`} ${a?u`<span class="meta">${a}</span>`:g} ${i?u`<span class="run-meta">${i}</span>`:g}</div>${il(r,!0,null,!0)}</div>`})}`}function n5(){c.bundleSourceFile&&Dg().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&J(eT(),e)}var r5=_T(s5);function O(){r5(c.currentView)}function bn(e){let t=document.querySelector(`#${e}`);return(!t||!be.contains(t)||be.firstElementChild!==t)&&(be.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function Xu(){let e=Gu(c,Y(),Ie);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=bn("empty-workspace-slot");t&&J(u`${AT([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),Gt()}var o5={"manage-deduplication":{slot:"manage-deduplication-slot",tag:"managed-admin-deduplication",title:"DeepView \u2014 deduplication"},manage:{slot:"manage-slot",tag:"managed-admin-home",title:"DeepView \u2014 manage"},"admin-users":{slot:"admin-users-slot",tag:"managed-admin-users",title:"DeepView \u2014 users"},"manage-repos":{slot:"manage-repos-slot",tag:"managed-admin-repos",title:"DeepView \u2014 repositories"},"manage-repo-risk":{slot:"manage-repo-risk-slot",tag:"managed-admin-repo-risk",title:"DeepView \u2014 repository risk"},"manage-reports":{slot:"manage-reports-slot",tag:"managed-admin-reports",title:"DeepView \u2014 reports"},"manage-bundles":{slot:"manage-bundles-slot",tag:"managed-admin-bundles",title:"DeepView \u2014 bundles"},"manage-history":{slot:"manage-history-slot",tag:"managed-admin-history",title:"DeepView \u2014 history"},"manage-teams":{slot:"manage-teams-slot",tag:"managed-admin-teams",title:"DeepView \u2014 teams"},"manage-import":{slot:"manage-import-slot",tag:"managed-admin-import",title:"DeepView \u2014 import"},"manage-links":{slot:"manage-links-slot",tag:"managed-admin-links",title:"DeepView \u2014 links"},"manage-scans":{slot:"manage-scans-slot",tag:"managed-admin-scans",title:"DeepView \u2014 scans"}},IT=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),cp=null;function Qa(){let e=c.revalidateConflicts.size>0,t=!e&&Gl(c.reports);return e?c.showRevalidation!==!1&&(cp=c.showRevalidation,c.showRevalidation=!1):(cp!==null&&(c.showRevalidation=cp,cp=null),!t&&c.showRevalidation===!1&&(c.showRevalidation=!0)),c.upstreamOnly&&(!t||c.showRevalidation===!1||!c.reports.some(n=>(n.groups??[]).some(r=>r.some(o=>o.isUpstream))))&&(c.upstreamOnly=!1),xi(c.showRevalidation,c.upstreamOnly),t}var lw=null;function s5(){ks()||sx(),n5(),Kl(c.reports),Ac()&&queueMicrotask(()=>{xe()}),ql(c.reports)&&fr();let e=Qa(),t=c.reports.some(M=>(M.groups??[]).some(F=>F.some(z=>z.isUpstream)));if(c.currentView==="workspace-reports"||c.currentView==="workspace-bundles"){let M=c.currentView.slice(10),F=Gu(c,Y(),Ie),z=bn("workspace-content-slot");z&&J(QR(F,M,c.workspaceContentFileCount),z),document.title=F?`${F.title} \u2014 ${M}`:`DeepView \u2014 ${M}`;return}if(c.currentView==="bundles")if((c.bundles??[]).length===0)c.currentView="findings";else{Xn(c.bundleDetailsTab,c.bundleSourceFile)&&Dg().catch(()=>{});let M=bn("bundles-slot");M&&J(sT(c.bundles),M);let F=c.bundleDetails,z=c.selectedBundle&&F&&(F.json||F.bundle);if(z&&c.bundleDetailsTab==="graph"){let Re=document.querySelector("#bundle-graph-slot");if(Re){let wt=qM(c.bundleDetails);if(wt){JM(wt);let Sw={hideAllFiles:!0,triageCounts:KM(c.bundleDetails,new Set(wt.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:wt.canPackagesView,showBundleLayouts:!0,hasIssues:wt.hasIssues},ci=lw,Cw=Re.querySelector("graph-layout");!wt.issuesShown&&ci&&!ci.issuesShown&&Cw&&ci.state===ee.graphState&&ci.details===F&&ci.reason===ee.bundleReason?Cw.options=Sw:(lw=null,Yg(Re,wt,Sw,YM,XM).then(JT=>(JT&&ee.graphState&&(lw={state:ee.graphState,details:F,reason:ee.bundleReason,issuesShown:wt.issuesShown}),null)))}}}if(z&&!F.metadataOnly&&c.bundleDetailsTab==="terminal"){let Re=document.querySelector("#bundle-terminal-slot");Re&&iS(Re,c.bundleDetails)}Gt();let pe=c.bundles.find(Re=>Re.integrity===c.selectedBundle)?.npm;document.title=pe?`DeepView \u2014 ${pe.name}@${pe.version}`:"DeepView \u2014 bundles";return}if(c.currentView==="reviews"){let M=bn("dependency-reviews-slot");M&&J(u`<dependency-review-list .session="${c.managedSession}"></dependency-review-list>`,M),Gt(),document.title="DeepView \u2014 my reviews";return}if(c.currentView==="npm"){let M=bn("npm-slot");M&&J(G1(),M),Gt(),document.title="DeepView \u2014 npm packages";return}if(c.currentView==="packages"){let M=bn("packages-slot");M&&J(lT(),M),Gt(),document.title="DeepView \u2014 packages";return}if(c.currentView==="repositories"){let M=bn("repositories-slot");M&&J(uT(),M),Gt(),document.title="DeepView \u2014 repositories";return}if(c.currentView==="links"){if(c.currentLinks){let M=bn("links-slot"),F=ks();M&&J(u`${gT(ET())}${F?WT(F.group,null,[],F):g}`,M),Gt(),document.title=`DeepView \u2014 ${c.currentLinks.name}`;return}c.currentView="findings"}if(c.currentView==="scan"&&customElements.get("local-scan-page")){let M=bn("scan-slot");if(M&&!M.firstElementChild){let F=document.createElement("local-scan-page");F.selection=c.scanSelection,M.append(F),F.updateComplete.then(()=>vi(F.renderRoot,{gate:z=>!Object.hasOwn(z.dataset,"tooltipTruncated")||z.scrollWidth>z.clientWidth}))}Gt(),document.title="DeepView \u2014 scans";return}let n=o5[c.currentView];if(n){let M=bn(n.slot);M?.classList.add("managed-page-slot");let F=M?.firstElementChild?.session;if((F?.id!==c.managedSession?.id||F?.role!==c.managedSession?.role)&&M?.replaceChildren(),M&&!M.firstElementChild){let z=document.createElement(n.tag),pe=Re=>vi(Re,{gate:wt=>!Object.hasOwn(wt.dataset,"tooltipTruncated")||wt.scrollWidth>wt.clientWidth});z.localImportSource=ym(),c.currentView==="manage-import"&&(z.localDeps=bm(),z.promptPassword=Xc,z.resolveConflicts=nd,z.confirmTriageImport=v0,z.confirmContentImport=k0,z.showTriageComparison=_0),z.session=c.managedSession,z.allowShare=c.managed?.allowShare===!0,c.currentView==="manage-scans"&&(z.selection=c.scanSelection),c.currentView==="manage-bundles"&&(z.createRepoId=c.bundleCreationRepoId,z.installTooltips=pe),M.append(z),(async()=>{await customElements.whenDefined(n.tag),await z.updateComplete,pe(z.renderRoot)})().catch(()=>{})}M?.firstElementChild&&(M.firstElementChild.session=c.managedSession,M.firstElementChild.allowShare=c.managed?.allowShare===!0),c.currentView==="manage-scans"&&M?.firstElementChild&&(M.firstElementChild.selection=c.scanSelection),c.currentView==="manage-bundles"&&M?.firstElementChild&&(M.firstElementChild.createRepoId=c.bundleCreationRepoId),Gt(),document.title=n.title;return}if(c.reports.length===0){c.currentWorkspace&&document.querySelector("#empty-workspace-slot")&&Xu();return}let r=mr(),o=c.viewMode==="kanban",s={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},i=[];for(let M of r){let F=Fe(M).commonTriage;F&&s[F]++,(o||F===c.shownTriage)&&i.push(M)}Object.defineProperty(i,"ruledOutIds",{value:r.ruledOutIds});let a=!1,l=!1,p=!1,d=!1;for(let M of r)for(let F of M){Do(F)&&(d=!0);let z=he(F);tn(F)&&(l=!0),z&&(z.comment&&(a=!0),z.fix&&(l=!0),z.flagged===!0&&(p=!0))}let f=cd(),m=r.some(M=>M.some(F=>f.has(F.id)));m||(c.filterDuplicates="");let h=i.some(wg),b=i.some(vg);h||(c.filterCrossContext=""),b||(c.filterAppStacked="");let y=J0(i);y||(c.filterSecurity="");let w=new Set,v=!1,x=!1,$=!1;for(let M of i)for(let F of M){let z=Xr(F);z&&w.add(z)}for(let M of Cg()){let F=!1,z=!1;for(let pe of M){let Re=Be(pe);Re==="partial"&&(x=!0),!((Re==="unreachable"||Re==="refuted")&&($=!0,c.currentWorkspace))&&(Re==="revalidation"?F=!0:z=!0)}F&&z&&(v=!0)}let S=[...new Set(c.reports.map(M=>M.type))].join(", "),C=c.reports.map(M=>M.fileName),_=i.map(Ct).filter(M=>M.length>0),L=_.length>0&&Vp(_),A=yg(r),E=r.some(M=>M.some(F=>Zn(F.file))),T=r.some(M=>M.some(F=>!Zn(F.file))),I=!1,U=!1,K;e:for(let M of r)for(let F of M)if(!U)U=!0,K=F.file;else if(F.file!==K){I=!0;break e}let Q=r.some(M=>M.some(F=>!F.repo?.github&&!Zn(F.file))),ze=new Set;for(let M of r)for(let F of M)!Zn(F.file)&&F.repo?.github&&ze.add(F.repo.github);let We=ze.size===1?[...ze][0]:null,Ke=new Set,Ce=new Set;for(let M of r)for(let F of M)Ke.add(F._analyzer??null),Ce.add(da(F));let bt=Object.keys(Rg),Br=M=>{if(M==null)return 1/0;let F=bt.indexOf(M);return F===-1?bt.length:F},fp=[...Ke].toSorted((M,F)=>{let z=Br(M),pe=Br(F);return z!==pe?z-pe:String(M??"").localeCompare(String(F??""))}),mp=[...Ce].toSorted(IT);if(c.filterAnalyzer){let M=c.filterAnalyzer===vs?null:c.filterAnalyzer;(!Ke.has(M)||Ke.size<2)&&(c.filterAnalyzer="")}if(c.filterModel){let M=c.filterModel===$s?null:c.filterModel;(!Ce.has(M)||Ce.size<2)&&(c.filterModel="")}let Hn=Kv(w);c.filterRevalidate&&!Hn.some(M=>M.value===c.filterRevalidate)&&(c.filterRevalidate="");let V=ud(i);V&&(c.filterRevalidate="confirmed");let ue=w.has("partial")&&fo();ue||(c.filterPartial="");let yt=e&&(v||x||!c.currentWorkspace&&$),mw=!(e&&c.showRevalidation!==!1)&&!c.upstreamOnly&&E&&T;!mw&&c.filterSources.size>0&&c.filterSources.clear(),L||(c.filterConfMin=0,c.filterConfMax=10,(c.sortBy==="confidence-desc"||c.sortBy==="confidence-asc")&&(c.sortBy="severity")),!A&&(c.sortBy==="priority-desc"||c.sortBy==="priority-asc")&&(c.sortBy="severity"),!I&&c.sortBy==="file"&&(c.sortBy="severity");let gp=Z0(i),oi={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},si={red:0,blue:0,green:0,gray:0,none:0};for(let M of gp){if(M.length===1){let pe=de(M[0],c.severityMode);oi[pe]=(oi[pe]||0)+1;let Re=he(M[0])?.color??"none";si[Re]=(si[Re]||0)+1;continue}let F=new Set(M.map(pe=>de(pe,c.severityMode)));for(let pe of F)oi[pe]=(oi[pe]||0)+1;let z=new Set(M.map(pe=>he(pe)?.color??"none"));for(let pe of z)si[pe]=(si[pe]||0)+1}let gw=j0(gp),GT=[...gw].toSorted(IT);if(c.filterRepo){let M=c.filterRepo===mg?null:c.filterRepo;gw.has(M)||(c.filterRepo="")}let ii=ex(pd(i)),cl=Yp(c.reports),hw=cl?Object.keys(cl).length:0,hp=hw>1;!hp&&c.currentView==="files"&&(c.currentView="findings"),!hp&&c.viewMode==="graph"&&(c.viewMode="kanban");let bw=AT(r,C,Q,We,hw);if(c.currentView==="files"){let M=qp(r,c.severityMode),F=document.querySelector("#header-slot"),z=document.querySelector("#tree-view-slot");(!F||!z||!be.contains(F)||!be.contains(z))&&(be.innerHTML='<div id="header-slot"></div><div id="tree-view-slot"></div>',F=document.querySelector("#header-slot"),z=document.querySelector("#tree-view-slot")),F&&J(bw,F),z&&J(nS(cl,M),z),Gt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let KT=c.viewMode==="table"&&c.tableSelectedGid&&ii.some(M=>ie(M)===c.tableSelectedGid),ai=null;c.viewMode==="graph"&&cl&&(ai=dw(),ai||(c.viewMode="kanban"));let dl=!!ai,Pr="findings-content";KT&&(Pr+=" with-details"),dl&&(Pr+=" with-graph"),o&&(Pr+=" with-kanban"),c.viewMode==="focus"&&(Pr+=" with-focus");let yw=g,ul=g,ww=g,vw=ST(ii,c,NT);dp=null,dl||(yw=JD(ii.length,i.length,s,oi,si,{showSource:mw,showConfidence:L,showPriority:A,showGraphMode:hp,showFileSort:I,kanbanMode:o,showRepo:!!c.currentWorkspace,hasComment:a,revalidateOptions:Hn,showPartial:ue,canDropLayer:e,canDetailLayer:yt,canUpstreamLens:t,confirmedLocked:V,hasFix:l,hasFlagged:p,hasDuplicates:m,hasCrossContext:h,hasAppStacked:b,showSecurity:y,showSeverityMode:d||c.severityMode==="original"},{analyzers:fp,models:mp,groups:gp},GT),c.shownTriage&&i.length===0?ul=u`<p style="color:var(--muted); margin: 1rem 0;">No ${c.shownTriage} findings.</p>`:ii.length===0&&i.length>0&&!o?ul=u`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:i.length===0&&(ul=r.length>0?u`<p style="color:var(--green)">All ${S} issues triaged.</p>`:u`<p style="color:var(--green)">No ${S} issues found.</p>`),ww=t5(ii,vw));let li=document.querySelector("#header-slot"),qt=be.querySelector(":scope > .findings-content"),qT=qt&&qt.querySelector(":scope > #findings-graph-slot"),YT=qt&&qt.querySelector(":scope > #findings-body-slot"),XT=qt&&(qT?"graph":YT?"body":null)===(dl?"graph":"body");if(!li||!qt||!be.contains(li)||!be.contains(qt)||!XT){let M=dl?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';be.innerHTML=`<div id="header-slot"></div><div class="${Pr}">${M}</div>`,li=document.querySelector("#header-slot"),qt=be.querySelector(":scope > .findings-content")}else qt.className!==Pr&&(qt.className=Pr);li&&J(bw,li);let $w=document.querySelector("#toolbar-slot");$w&&J(yw,$w);let kw=document.querySelector("#empty-state-slot");kw&&J(ul,kw);let xw=document.querySelector("#findings-body-slot");if(xw&&J(ww,xw),ai){let M=document.querySelector("#findings-graph-slot");if(M){let z={extraTopRow:u`<view-mode-buttons modes="kanban,focus,table,list,grouped,graph"></view-mode-buttons>`,triageCounts:s,triageStates:["inprogress","fixed","invalid","deleted","ignored"]};Yg(M,ai,z,UD,VD)}}if(dp){let M=be.querySelector(".finding-table-slot");M&&(ti||(ti=document.createElement("finding-table")),ti.items=dp,ti.selectedGid=c.tableSelectedGid,ti.parentNode!==M&&M.append(ti))}Gt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`,R()&&te?.replaceFindingRoute(CT(vw,c))}var u5=500,p5=14;function up(e){if(!e)return null;let t={};e.color&&(t.color=e.color);let n=qe(e);return n&&(t.triage=n),typeof e.fix=="string"&&e.fix&&(t.fix=e.fix),typeof e.flagged=="boolean"&&(t.flagged=e.flagged),Object.keys(t).length>0?t:null}function al(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function f5(e,t){return e.length>100?!1:t==null?!0:(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}var m5=e=>new TextEncoder().encode(e).length,Kt=new Map,ri=new Set,ll=(e,t=c.currentManagedTeam)=>JSON.stringify([t,e]),Nr=new Map,Wn=null,ni=Promise.resolve();function UT(){let e=new Set;for(let t of c.reports)for(let n of t.groups)for(let r of n)typeof r.id=="string"&&r.id&&e.add(r.id);return e}function uw(){return Array.isArray(c.managedReports)&&c.managedReports.length>0?c.managedReports:c.managedReport==null?[]:[c.managedReport]}function VT(e){let t=new Set,n=!1;for(let r of c.reports)if(r._managedReportId===e){n=!0;for(let o of r.groups??[])for(let s of o)typeof s.id=="string"&&s.id&&t.add(s.id)}return n||c.reports.length===0?t:new Set(UT())}function g5(e){let t=uw();for(let n of c.reports)if(n._managedReportId!=null&&(n.groups??[]).some(r=>r.some(o=>o.id===e))){let r=t.find(o=>o.id===n._managedReportId);if(r)return r}return t[0]??null}function pw(){let e=c.managedSession;return c.serverMode==="managed"&&c.localMode!==!0&&e!=null&&Yn(e.role,"triage")}function h5(e){return e===403&&c.managedSession?.viewer?!0:e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function b5(e,t){let n=Nr.get(e.key);n==null&&(n={report:e.report,key:e.key,teamId:e.teamId,changes:new Map},Nr.set(e.key,n));for(let r of t)n.changes.has(r)||n.changes.set(r,e.changes.get(r))}async function y5(e,t,n){if(!pw())return;let r=[...e.changes.keys()],o=0;for(;o<r.length;){let s=o,i={},a=0,l=p5;for(;o<r.length&&a<200;){let f=r[o],m=m5(`${JSON.stringify(f)}:${JSON.stringify(e.changes.get(f))},`);if(a>0&&l+m>262144)break;i[f]=e.changes.get(f),l+=m,a++,o++}let p=await a0(e.report.id,i,c.managedSession?.csrfToken,e.teamId),d=p>=200&&p<300;if(!d&&!h5(p)){b5(e,r.slice(s));return}d||console.warn("managed: the server refused a triage batch",e.report.id,p,Object.keys(i)),!d&&p===403&&c.managedSession?.viewer&&n.add(e.report.id);for(let[f,m]of Object.entries(i)){let h=Kt.get(f)?.fix??"",b=d?m?.fix??"":h;b!==h&&t.add(e.teamId),Kt.set(f,{key:al(m),fix:b})}}}function pp(){Wn!=null&&(clearTimeout(Wn),Wn=null);let e=[...Nr.values()];if(Nr.clear(),e.length===0)return;let t=new Set,n=new Set;for(let r of e)ni=ni.then(()=>y5(r,t,n)).catch(o=>{console.warn("managed: triage push failed",o)});ni=ni.finally(()=>{for(let r of t)bs(r);for(let r of n)Ob(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function jT(){if(!(uw().length===0||!pw()||ri.size===0)){for(let t of UT()){let n=up(c.triage.get(t)),r=al(n);if((Kt.get(t)?.key??"")===r)continue;if(!f5(t,n)){console.warn("managed: triage entry exceeds the server caps, kept local only",t),Kt.set(t,{key:r,fix:Kt.get(t)?.fix??""});continue}let o=g5(t);if(o==null||!ri.has(ll(o.id)))continue;let s=c.currentManagedTeam,i=ll(o.id,s),a=Nr.get(i);a==null&&(a={report:o,key:i,teamId:s,changes:new Map},Nr.set(i,a)),a.changes.set(t,n)}Nr.size!==0&&(Wn!=null&&clearTimeout(Wn),Wn=setTimeout(pp,u5))}}var HT=!1;function SR(){HT||!pw()||(HT=!0,pm(jT))}function zu(){H$(),c.managedComments?.clear(),c.managedIssues.clear(),globalThis.document?.dispatchEvent(new Event("managed-comments-reset")),Wn!=null&&(clearTimeout(Wn),Wn=null),Nr.clear(),ri.clear(),Kt.clear()}async function ire(e,{renderView:t=!0,signal:n,readAnnotations:r}={}){let o=c.reports,s=c.currentManagedTeam,i=c.managedSession?.role,a=c.managedSession?.id,l=()=>!n?.aborted&&c.serverMode==="managed"&&c.localMode!==!0&&c.managedSession!=null&&c.managedSession.id===a&&c.managedSession.role===i&&c.reports===o&&c.currentManagedTeam===s&&uw().some(y=>y.id===e);if(!l()||(ri.delete(ll(e)),pp(),!await fw(n)||!l()))return!1;let p=new Map(c.managedIssues),d=r?await r(e):null,f=r?d?.entries:await tg(e,s,{signal:n});if(f==null||!l())return!1;let m=!1,h=VT(e),b=d&&sa(h,d.issues,p);for(let y of h){if(!Object.hasOwn(f,y)){Kt.delete(y);continue}let w=up(f[y]);Kt.set(y,{key:al(w),fix:w?.fix??""});let v=w?.triage==null||w.triage==="ignored"?c.triage.get(y)?.ignoredReports:void 0;vl(c.triage,y,{...w,ignoredReports:v,scopedIgnoredReports:c.triage.get(y)?.scopedIgnoredReports})&&(m=!0)}if(ri.add(ll(e)),d&&Zm(s,h,p),b&&!m&&t&&O(),m){if(await xe(),!l())return!1;t&&O()}return jT(),!0}function fw(e){return e?e.aborted?Promise.resolve(!1):new Promise(t=>{let n=o=>{e.removeEventListener("abort",r),t(o)},r=()=>n(!1);e.addEventListener("abort",r,{once:!0}),ni.then(()=>n(!0),()=>n(!1))}):ni.then(()=>!0)}async function Ob(e,{signal:t,readAnnotations:n}={}){let r=c.reports,o=c.currentManagedTeam,s=c.managedSession?.role,i=c.managedSession?.id,a=()=>!t?.aborted&&c.serverMode==="managed"&&!c.localMode&&c.reports===r&&c.currentManagedTeam===o&&c.managedSession?.id===i&&c.managedSession?.role===s&&ri.has(ll(e,o));if(!a()||(pp(),!await fw(t)||!a()))return!1;let l=VT(e),p=new Map([...l].map(w=>[w,Kt.get(w)])),d=new Map(c.managedIssues),f=n?await n(e):null,m=n?f?.entries:await tg(e,o,{signal:t});if(m==null||!a())return!1;let h=f&&sa(l,f.issues,d),b=!1,y=!1;for(let w of l){let v=p.get(w),x=up(c.triage.get(w));if(Kt.get(w)!==v||al(x)!==(v?.key??""))continue;let $=up(m[w]);(v?.fix??"")!==($?.fix??"")&&(y=!0),Kt.set(w,{key:al($),fix:$?.fix??""});let k=$?.triage==null||$.triage==="ignored"?c.triage.get(w)?.ignoredReports:void 0;vl(c.triage,w,{...$,ignoredReports:k,scopedIgnoredReports:c.triage.get(w)?.scopedIgnoredReports})&&(b=!0)}if(y&&bs(o),f&&Zm(o,l,d),h&&!b&&O(),b){if(await xe(),!a())return!1;O()}return!0}function P_(e,t){if(!e)return;let n=c.currentManagedReport;if(n!=null&&(c.managedReports.length!==1||c.managedReports[0].id!==n))return;let r;return async o=>(r??=(async()=>(pp(),!await fw(t)||t?.aborted?null:r0(e,{signal:t,reportId:n})))(),(await r)?.(o)??null)}export{F$ as a,L$ as b,O$ as c,N$ as d,vf as e,B$ as f,eo as g,c as h,R as i,CI as j,II as k,Ie as l,Kf as m,Y as n,cs as o,HI as p,VI as q,jI as r,KI as s,qI as t,Qi as u,uk as v,YI as w,xe as x,hk as y,oA as z,sA as A,iA as B,xA as C,CA as D,n6 as E,r6 as F,o6 as G,s6 as H,i6 as I,a6 as J,G as K,te as L,oa as M,Gm as N,Km as O,Xm as P,Oz as Q,ye as R,Ae as S,rn as T,Jc as U,g0 as V,Zc as W,nd as X,ot as Y,Ee as Z,vs as _,mg as $,$s as aa,dd as ba,b6 as ca,y6 as da,w6 as ea,dr as fa,XA as ga,JA as ha,ua as ia,pd as ja,ex as ka,x6 as la,ks as ma,sx as na,z6 as oa,ie as pa,fo as qa,ur as ra,iE as sa,_t as ta,he as ua,aE as va,pr as wa,je as xa,En as ya,ux as za,Fe as Aa,nH as Ba,cE as Ca,rH as Da,ma as Ea,oH as Fa,mr as Ga,go as Ha,sH as Ia,iH as Ja,yd as Ka,Ss as La,IH as Ma,me as Na,qH as Oa,YH as Pa,Bg as Qa,ho as Ra,hr as Sa,XH as Ta,EE as Ua,Cd as Va,Dg as Wa,Td as Xa,oU as Ya,sU as Za,Ox as _a,Px as $a,Ad as ab,$U as bb,Ed as cb,Ms as db,TU as eb,KE as fb,NU as gb,jx as hb,Gx as ib,qE as jb,Gg as kb,Fd as lb,BU as mb,PU as nb,Ld as ob,Od as pb,Ts as qb,Is as rb,qx as sb,jU as tb,GU as ub,it as vb,g8 as wb,h8 as xb,SF as yb,b8 as zb,Ls as Ab,vr as Bb,Dd as Cb,L8 as Db,cS as Eb,Ud as Fb,DS as Gb,zS as Hb,HS as Ib,lh as Jb,US as Kb,yL as Lb,wL as Mb,VS as Nb,jS as Ob,rj as Pb,kL as Qb,xL as Rb,t1 as Sb,gh as Tb,r1 as Ub,yj as Vb,o1 as Wb,i1 as Xb,u1 as Yb,p1 as Zb,Mj as _b,m1 as $b,Tj as ac,Ij as bc,wh as cc,Ej as dc,Fj as ec,Dj as fc,Rh as gc,Ia as hc,R1 as ic,ln as jc,N1 as kc,Ea as lc,B1 as mc,CN as nc,LN as oc,NN as pc,BN as qc,Qh as rc,_C as sc,DN as tc,zN as uc,j7 as vc,WN as wc,G7 as xc,J7 as yc,Z7 as zc,Q7 as Ac,eK as Bc,tK as Cc,EC as Dc,NC as Ec,DC as Fc,ib as Gc,WC as Hc,cb as Ic,QK as Jc,VC as Kc,e9 as Lc,t9 as Mc,nB as Nc,n9 as Oc,T_ as Pc,Eb as Qc,Ge as Rc,qB as Sc,SR as Tc,zu as Uc,ire as Vc,Ob as Wc,P_ as Xc,Io as Yc,wy as Zc,Ya as _c,_R as $c,Ar as ad,Xs as bd,uM as cd,BZ as dd,PZ as ed,Qu as fd,bM as gd,_Q as hd,RQ as id,YM as jd,XM as kd,op as ld,Zte as md,UD as nd,VD as od,O as pd,Xu as qd,Qa as rd,Gc as sd,zk as td,Hz as ud,Uz as vd,Vz as wd,jz as xd,Gz as yd,Kz as zd,qz as Ad,Yz as Bd,ng as Cd,Xz as Dd,Jz as Ed,Zz as Fd,Qz as Gd,U_ as Hd,rR as Id,H as Jd,nJ as Kd,Mt as Ld};
|
|
203
203
|
/*! Bundled license information:
|
|
204
204
|
|
|
205
205
|
lit-html/directives/map.js:
|