@preventive/triage 1.0.0-alpha.42 → 1.0.0-alpha.44
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/bundle-compare-diff.js +2 -167
- package/common/bundle-compare-versions.js +172 -0
- package/common/bundle-comparison.d.ts +8 -0
- package/common/bundle-comparison.js +62 -0
- package/common/managed/report-filter.ts +2 -1
- package/common/managed/routes.js +3 -3
- package/common/security-links.d.ts +5 -0
- package/common/security-links.js +33 -0
- package/common/server-info.ts +8 -0
- package/common/workspace-app.js +14 -1
- package/out/chunk-2ABLKCOY.js +46 -0
- package/out/chunk-5LSXOLUS.js +1 -0
- package/out/chunk-5RCM2J63.js +1 -0
- package/out/chunk-7B6HB4D7.js +1 -0
- package/out/{chunk-4F6JSF57.js → chunk-AJ4GTATZ.js} +1 -1
- package/out/chunk-CH4UN6WK.js +225 -0
- package/out/chunk-EDKLBQQN.js +17 -0
- package/out/{chunk-UXNUAIIC.js → chunk-F47DXCEV.js} +1 -1
- package/out/chunk-FK3DZEKL.js +1 -0
- package/out/chunk-G6AJWENO.js +1 -0
- package/out/chunk-GZWM7UQM.js +2 -0
- package/out/chunk-JCIIBLKR.js +1 -0
- package/out/chunk-LPCTJYNA.js +7 -0
- package/out/{chunk-DGVQPIYB.js → chunk-O4RJY5TP.js} +1 -1
- package/out/chunk-OD4LPN3H.js +1 -0
- package/out/{chunk-D7AF2JXL.js → chunk-QWDWTBM7.js} +1 -1
- package/out/chunk-QYWKC557.js +1 -0
- package/out/chunk-R75XOKUP.js +1 -0
- package/out/{chunk-RSHMVYNS.js → chunk-SWTLADW5.js} +1 -1
- package/out/chunk-T7OKH4VW.js +1 -0
- package/out/{chunk-ZMQQCGF6.js → chunk-UTR2LVME.js} +1 -1
- package/out/chunk-ZESLQCTF.js +6 -0
- package/out/client-managed-import.js +1 -1
- package/out/client-managed.js +21 -21
- package/out/client-sync.js +1 -1
- package/out/graph.js +1 -1
- package/out/index.html +14 -10
- package/out/terminal.js +1 -1
- package/out/view.css +1 -1
- package/out/view.js +58 -58
- package/package.json +13 -3
- package/risk/index.d.ts +26 -0
- package/risk/index.js +1 -1
- package/risk/npm/assess.js +66 -15
- package/risk/npm/dependencies.js +22 -3
- package/risk/npm/new-dependency.js +42 -12
- package/risk/npm/registry.js +122 -21
- package/server-managed/comparison.ts +41 -0
- package/server-managed/http.ts +161 -56
- package/server-managed/locked-packages.ts +29 -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 +14 -9
- package/server-managed/public-workspace.ts +26 -8
- 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 +265 -209
- package/server-managed/scan-downloads.ts +87 -0
- package/server-managed/sql.ts +1 -1
- package/server-managed/team-app.ts +38 -14
- package/server-managed/team-reports.ts +6 -11
- package/server-managed/upstream-cache.ts +16 -0
- package/out/chunk-CLPKNNC7.js +0 -51
- package/out/chunk-Q7ZSIEHP.js +0 -1
- package/out/chunk-RFZQQXSG.js +0 -17
- package/out/chunk-VQJCXGIY.js +0 -7
- package/out/chunk-WOTMRDM3.js +0 -226
- package/out/chunk-WZDTZE64.js +0 -1
- package/out/chunk-YP2537WX.js +0 -1
- package/out/chunk-YQRVLRDH.js +0 -1
- package/out/chunk-YVZH5SHP.js +0 -1
- package/out/chunk-ZBBOBQ43.js +0 -1
package/out/chunk-WOTMRDM3.js
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import{b as Rv}from"./chunk-K3X5EJBQ.js";import{a as ut,b as be,d as fv,e as El,f as mv,g as N,h as re,i as Fl}from"./chunk-CVVJAXVY.js";import{A as mt,B as ce,C as Xt,D as fe,E as Cn,F as Yp,G as Xp,H as Zo,I as d$,J as Je,K as Jp,L as u$,M as Zr,N as Zp,O as _n,P as Qp,Q as ef,R as tf,S as nf,T as rf,U as of,a as Yl,b as i$,d as ft,e as Xo,f as tr,g as Xl,h as xi,i as Up,j as kt,k as Si,l as Vp,m as jp,n as Gp,o as a$,p as l$,q as Yt,r as ve,s as Me,t as nr,u as Ci,v as c$,w as Kp,x as qp,y as Jo,z as Jl}from"./chunk-VIHGO77Y.js";import{m as n$,o as r$,q as o$,w as s$,x as Wp,y as Hp}from"./chunk-RFZQQXSG.js";import{a as Aw,b as ct,c as Te,e as dp,f as Ew,g as hl,h as Fw,i as Lw,j as pp,k as Ow,l as yl,m as wl,n as vl,o as $l,p as ke,q as qn,r as _l,s as fi,t as Pw}from"./chunk-RSHMVYNS.js";import{$ as $v,A as xn,B as tv,C as bp,D as Ot,E as nv,F as Xn,G as Ml,H as rv,I as gi,J as ov,K as hi,L as yp,M as jo,N as iv,O as av,P as lv,Q as Il,R as cv,S as Al,T as dv,U as uv,V as pv,X as yv,Y as wp,Z as wv,_ as vv,a as Hw,aa as Ll,b as De,ba as yi,c as oe,ca as Go,d as Vw,da as Ko,ea as Nt,f as jw,fa as kv,ga as vp,h as Gw,ha as $p,i as Kw,ia as Ol,ja as Nl,k as mi,ka as qr,l as qw,la as kp,m as Uo,ma as xv,n as kn,na as Sv,oa as Cv,p as Yw,pa as _v,q as Rl,qa as xp,r as Xw,ra as Sp,s as hp,sa as Cp,t as Jw,ta as _p,u as Zw,v as Lt,w as Qw,x as Tl,y as we,z as ev}from"./chunk-CLPKNNC7.js";import{a as Dw,b as zw,c as Yn,d as gp,e as Ww,f as vn,h as $n}from"./chunk-UYAXVRVL.js";import{g as Tv,h as Mv,i as Rp,j as wi,k as Pl,l as Jn,m as qo,n as Tp,o as Mp,q as Dl,r as Ip,s as pt,t as Ap,w as Iv}from"./chunk-VQJCXGIY.js";import{a as qe,b as Wr,c as Hr,d as Kn,e as ml,f as ae,g as gl,h as tt}from"./chunk-W4J3MGLB.js";import{b as up,c as ci,d as bl}from"./chunk-PNHBZGDD.js";import{$ as ee,A as Zn,B as Ul,C as Vl,D as Qn,E as Pv,F as Jr,H as nt,I as Np,J as jl,K as Dv,L as er,M as zv,N as Wv,O as ki,P as Hv,Q as Uv,R as Vv,S as jv,T as Gv,U as Kv,V as qv,X as Yv,Y as Gl,Z as Kl,_ as Xv,a as q,aa as Bt,b as le,ba as Jv,c as j,ca as Zv,d as Av,fa as Sn,ga as Bp,h as Ep,ha as Pp,i as Fp,ia as Dp,j as Lp,ja as ql,k as Ev,ka as zp,l as Fv,m as Lv,ma as Qv,n as zl,o as vi,oa as e$,p as Op,pa as t$,q as Yr,s as Wl,t as Ov,u as $i,v as Xr,w as Nv,x as Bv,y as Hl,z as Yo}from"./chunk-UXNUAIIC.js";import{a as Bl}from"./chunk-R5O6FAW4.js";import{a as gv,b as hv,d as bi,e as bv}from"./chunk-CMQA4DM6.js";import{b as fl,c as dt,d as Cl,e as jr,f as mp,g as pi}from"./chunk-4F6JSF57.js";import{a as ge,e as Kr,g as sv,h as Vo}from"./chunk-YVZH5SHP.js";import{a as Gr}from"./chunk-3BZ7JERB.js";import{a as Z}from"./chunk-TZ5KB2Y5.js";import{a as Uw}from"./chunk-XYFXXB2G.js";import{a as W}from"./chunk-DIJJNTRH.js";import{a as fp,c as Vr,d as kl,e as Nw,g as xl,h as Ho,i as di,j as Ye,k as Sl,l as ui,m as Bw,n as Xe}from"./chunk-WZDTZE64.js";import{A as _w,B as Do,C as zo,D as Pe,E as Ft,G as Rw,H as Gn,J as yn,K as Tw,L as cp,M as Mw,N as Iw,O as $t,a as Pr,f as $w,h as Dr,i as _e,j as et,k as ai,l as Po,m as de,n as kw,o as xw,p as Be,q as jn,r as dl,t as zr,u as li,v as qt,w as Sw,x as ul,y as Cw,z as pl}from"./chunk-GNXOKIGP.js";import{a as hw,b as lp,c as bw}from"./chunk-C4Z6ZBXV.js";import{a as P,b as ap,c as u,d as Un,g,i as J,j as Et}from"./chunk-2XUEZHIP.js";import{a as Wo,b as wn,c as Ur}from"./chunk-TUII34K2.js";import{a as yw,c as Oo,d as No,e as Bo,j as al,k as ww,l as Vn,m as vw,p as Kt,q as ll,r as cl}from"./chunk-V5O7M2YT.js";var cf=new WeakMap,g$=Symbol("iteration key");function BM(e){cf.set(e,new Map)}function PM(e,{target:t,key:n,type:r}){r==="iterate"&&(n=g$);let o=cf.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 DM({target:e,key:t,type:n}){let r=cf.get(e),o=new Set;if(n==="clear"?r.forEach((s,i)=>{sf(o,r,i)}):sf(o,r,t),n==="add"||n==="delete"||n==="clear"){let s=Array.isArray(e)?"length":g$;sf(o,r,s)}return o}function sf(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function h$(e){e.cleaners&&e.cleaners.forEach(zM,e),e.cleaners=[]}function zM(e){e.delete(this)}var Qo=[],af=!1;function WM(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(Qo.indexOf(e)===-1){h$(e);try{return Qo.push(e),Reflect.apply(t,n,r)}finally{Qo.pop()}}}function Pt(e){let t=Qo[Qo.length-1];t&&(b$(t,e),PM(t,e))}function rr(e){DM(e).forEach(HM,e)}function HM(e){b$(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function b$(e,t){if(e.debugger&&!af)try{af=!0,e.debugger(t)}finally{af=!1}}function y$(){return Qo.length>0}var p$=Symbol("is reaction");function w$(e,t={}){let n=e[p$]?e:function r(){return WM(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[p$]=!0,t.lazy||n(),n}function df(e){e.unobserved||(e.unobserved=!0,h$(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}var He=new WeakMap,ec=new WeakMap,UM=Object.prototype.hasOwnProperty;function Ql(e){let t=ec.get(e);return y$()&&typeof e=="object"&&e!==null?t||tc(e):t||e}function lf(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=Ql(o[1]):o=Ql(o)),{done:r,value:o}},e}var f$={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"}),Ql(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(Ql(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 lf(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 lf(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 lf(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)}},Zl={get(e,t,n){return e=UM.call(f$,t)?f$:e,Reflect.get(e,t,n)}},m$=typeof window=="object"?window:Function("return this")(),v$=new Map([[Map,Zl],[Set,Zl],[WeakMap,Zl],[WeakSet,Zl],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function VM({constructor:e}){return!(typeof e=="function"&&e.name in m$&&m$[e.name]===e)||v$.has(e)}function jM(e){return v$.get(e.constructor)}var $$=Object.prototype.hasOwnProperty,GM=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));function KM(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&GM.has(t))return r;Pt({target:e,key:t,receiver:n,type:"get"});let o=ec.get(r);if(y$()&&typeof r=="object"&&r!==null){if(o)return o;let s=Reflect.getOwnPropertyDescriptor(e,t);if(!s||!(s.writable===!1&&s.configurable===!1))return tc(r)}return o||r}function qM(e,t){let n=Reflect.has(e,t);return Pt({target:e,key:t,type:"has"}),n}function YM(e){return Pt({target:e,type:"iterate"}),Reflect.ownKeys(e)}function XM(e,t,n,r){typeof n=="object"&&n!==null&&(n=He.get(n)||n);let o=$$.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 JM(e,t){let n=$$.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&rr({target:e,key:t,oldValue:r,type:"delete"}),o}var ZM={get:KM,has:qM,ownKeys:YM,set:XM,deleteProperty:JM};function tc(e={}){return He.has(e)||!VM(e)?e:ec.get(e)||QM(e)}function QM(e){let t=jM(e)||ZM,n=new Proxy(e,t);return ec.set(e,n),He.set(n,e),BM(e),n}var rt=tc;function Rn(e){let t=!0,n=w$(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw df(n),r}return()=>df(n)}var x$="deepview.viewMode",S$="deepview.severityMode",Ri="deepview.repoUrls",C$="deepview.focusSplit",_$="deepview.kanbanDetailFullscreen",R$="deepview.bundleSourceWrap",eI=new Set(["corrected","original"]),pf=50,nc=20,rc=80;try{localStorage.removeItem(x$)}catch{}function tI(){try{let e=localStorage.getItem(S$);return e!==null&&eI.has(e)?e:null}catch{return null}}function nI(){try{let e=localStorage.getItem(_$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function rI(){try{let e=localStorage.getItem(R$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function T$(e){if(!Number.isFinite(e))return pf;let t=Math.round(e*10)/10;return Math.min(Math.max(t,nc),rc)}function oI(){try{let e=localStorage.getItem(C$);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?T$(t):null}catch{return null}}function oc(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function sc(){return oc(ve(Ri))}function Ze(e){return e?sc()[e]??"":""}var uf=new Set;function M$(e){return uf.add(e),()=>{uf.delete(e)}}function I$(e){for(let t of uf)try{t(e)}catch(n){console.warn("repo-url listener:",n)}}function Qr(e,t){if(_()||!e)return;let n=sc();t?n[e]=t:delete n[e],Me(Ri,JSON.stringify(n)).catch(r=>console.warn("saveRepoUrlFor:",r)),Jo(Ri,r=>{let o=oc(r);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(r=>console.warn("saveRepoUrlFor cross-tab merge:",r)),I$(e)}async function A$(e,t){await Jo(Ri,n=>{let r=oc(n),o=t==="replace"?{...e}:t==="prefer-imported"?{...r,...e}:{...e,...r};return JSON.stringify(o)}),gf()}async function ic(e){if(!e||typeof e!="object")return[];let t=[];if(await Jo(Ri,n=>{let r=oc(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;gf();for(let n of t)I$(n);return t}async function ff(e,t){return!e||!t?!1:(await ic({[e]:t})).length>0}var _i=pt(),k$=qo(_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:rI()??!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:tI()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:nI()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:oI()??pf,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:Tp(_i?.mode??"e2e",k$),serverModeConfig:_i?.mode??null,serverModeSelection:k$,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 Tn(e){c.localMode=!!e}function ac(e,t=globalThis.location?.pathname??""){let n=qo(e,t);n&&(c.serverModeSelection="managed"),c.serverModeConfig=e,c.serverMode=Tp(e,c.serverModeSelection),c.serverModeSelection!==c.serverMode&&(c.serverModeSelection=null),(n||c.serverMode==="e2e"||Jn(e))&&Tn(!1)}function mf(){return Jn(c.serverModeConfig)?(c.serverModeSelection=c.serverMode==="managed"?"e2e":"managed",c.serverMode=c.serverModeSelection,Tn(!1),!0):c.serverMode!=="managed"?!1:(Tn(!c.localMode),!0)}function Jt(){return c.serverMode==="standalone"&&c.localMode?"local":c.serverMode!=="managed"?c.serverMode:c.localMode?"local":"managed"}function gf(){_()||c.repoEditing||c.currentFile&&(c.repoUrl=Ze(c.currentFile))}Yt(()=>{gf()});var es=null;function E$(){es=null}function Ti(){return _()&&es?.teamId===c.currentManagedTeam&&es?.userId===c.managedSession?.id&&es?.role===c.managedSession?.role?es:null}function F$(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=fl([{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 zo(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)}}es={teamId:e,userId:c.managedSession?.id,role:c.managedSession?.role,links:o,rows:s,byId:n,duplicates:r},c.linksTick++,c.findingIndexTick++}function lc(e){let t=Ti();return[...new Set(e.flatMap(n=>t?.byId.get(n)??[]))]}function L$(e){for(let t of lc([e])){let n=qt(t.members.find(r=>r.id===e));if(n)return n}return""}var sI="solidity-bundle",iI="0.0.0";function or(e){if(e?.name!==sI)return!1;let t=e.version;return!t||t===iI}function N$(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 cc(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function dc(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 uc(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 pc(e){let t=new Set;for(let n of e._keyReports.values())for(let r of n)t.add(r);e.reports=t}function B$(e,t,n,r,o){let s=e.byVersion.get(t);s||(s=cc(),e.byVersion.set(t,s)),dc(s,r,o,n)}function P$(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&&uc(i,n,r,s)),i._keyReports.size===0){e.byVersion.delete(t);return}pc(i)}function hf(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[n,r=""]=O$(e,"-"),[o,s=""]=O$(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 O$(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+1)]}var eo=new Map,ts=new Map,ns=new Map,to=new Map,fc=new Map;function aI(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 lI(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function cI(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,bf=new Set,Mi=null,yf=!1;function dI(e){return bf.add(e),()=>bf.delete(e)}function wf(){for(let e of bf)try{e()}catch{}}function vf(e){return eo.get(e)?.list??[]}function $f(){let e=0;for(let t of eo.values())e+=t.list.length;return e}function Zt(){return ts}function no(){return ns}function Ai(e,t){let n=eo.get(e);if(!n)return[];let r=n.reports.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 xf(e,t){let n=ns.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function ro(e){return _()?[...new Set(lc([e]).map(t=>t.report))]:[...to.get(e)?.reports.keys()??[]]}function Sf(e){if(_())return L$(e);for(let{title:t}of to.get(e)?.reports.values()??[])if(t)return t;return""}function Qt(e){if(_())return lc(e);let t=new Set;for(let n of e)for(let r of to.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 mc(e,t,n){let r=fc.get(e);r||(r={hash:[],pkg:[],repo:[],id:[]},fc.set(e,r)),r[t].push(n)}function uI(e,t,n){let r=to.get(e.id);r||to.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])}),mc(t,"id",e.id),!0)}function pI(e,t,n){let r=eo.get(e.fileHash);r||(r={keys:new Set,list:[],reports:new Map},eo.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&&mc(n,"hash",{hash:e.fileHash,key:t}),r.keys.has(t)?s:(r.keys.add(t),r.list.push(e),!0)}function fI(e,t,n){let r=aI(e);if(!r)return!1;let o=N$(e),s=ts.get(r);if(s||(s={...cc(),repos:new Set,byVersion:new Map,_repoReports:new Map},ts.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)}B$(s,o,e,t,n);let i=dc(s,t,n,e);return mc(n,"pkg",{pkg:r,key:t,file:e.file,version:o}),i}function mI(e,t,n,r){if(lI(e))return!1;let o=cI(e,r);if(!o)return!1;let s=ns.get(o);s||(s=cc(),ns.set(o,s));let i=dc(s,t,n,e);return i&&mc(n,"repo",{repo:o,key:t,file:e.file}),i}function Cf(e){let t=fc.get(e);if(fc.delete(e),Ii.delete(e),!t)return!1;let n=!1;for(let{hash:o,key:s}of t.hash){let i=eo.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&&eo.delete(o)}}let r=new Set;for(let{pkg:o,key:s,file:i,version:a}of t.pkg){let l=ts.get(o);if(!l)continue;let p=l._keyReports.get(s);if(p){if(p.delete(e)&&(n=!0),p.size===0&&uc(l,s,i,sr),P$(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?ts.delete(o):pc(l)}}for(let{repo:o,key:s,file:i}of t.repo){let a=ns.get(o);if(!a)continue;let l=a._keyReports.get(s);l&&(l.delete(e)&&(n=!0),l.size===0&&uc(a,s,i,sr),a._keyReports.size===0?ns.delete(o):pc(a))}for(let o of t.id){let s=to.get(o);s&&(s.reports.delete(e)&&(n=!0),s.reports.size===0&&to.delete(o))}return n}async function gI(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;Aw(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&&pI(a,l,e)&&(i=!0),a.file&&fI(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: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)uI(f,e,d)&&(i=!0)}return Ii.has(e)?i:(Cf(e),yf=!0,!1)}catch{return Ii.delete(e),!1}}function xt(){return _()?Promise.resolve():Mi||(Mi=(async()=>{try{do{yf=!1;let e=await ce();for(let t of e)await gI(t)&&wf()}while(yf)}finally{Mi=null}})(),Mi)}mt(e=>{Cf(e)&&wf()});M$(e=>{Cf(e)&&wf(),xt().catch(()=>{})});var Ei=new Map,rs=new Map,gc=new Map,_f=new Set;function hI(e){return _f.add(e),()=>_f.delete(e)}function D$(){for(let e of _f)try{e()}catch{}}function Fi(e,t){if(!e||!t)return!1;let n=!rs.has(e);rs.set(e,t),gc.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&&D$(),n}function Rf(e){let t=rs.get(e);if(rs.delete(e),gc.delete(e),!!t){for(let n of t.values()){let r=Ei.get(n);r&&(r.delete(e),r.size===0&&Ei.delete(n))}D$()}}function Tf(e,t){let n=rs.get(e);if(!n||typeof t!="string"||t==="")return null;if(n.has(t))return t;let r=bI(e,n).get(z$(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 z$(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function bI(e,t){let n=gc.get(e);if(n)return n;n=new Map;for(let r of t.keys()){let o=z$(r),s=n.get(o);s?s.push(r):n.set(o,[r])}return gc.set(e,n),n}function oo(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 rs.has(e)}var W$="deepview.fileCounts",If=4,yI=new Set([3,If]),Oi=null;function bc(){if(Oi)return Oi;let e;try{e=JSON.parse(ve(W$)||"{}")}catch{e={}}return yI.has(e?.__v)?e.__v=If:e={__v:If},Oi=e,Oi}function Af(){Me(W$,JSON.stringify(Oi)).catch(e=>console.warn("counts persist:",e))}function H$(e){if(e==="__v")return;let t=bc()[e];if(t!==void 0)return typeof t=="number"?{count:t}:t}function Ni(e){return H$(e)?.count}function Ie(e){return H$(e)?.source}function Ue(e,t,n){let r=bc();r[e]={count:t,source:n??null},Af()}function ss(e){let t=bc();delete t[e],Af()}function Ve(e){let t=qn(e);return t?{count:_l(t.groups),source:ke,recognized:!0}:Mw(e)}var Li=null,os=null,hc=null;function wI(e,t){for(let{names:n,onUpdate:r}of hc)if(n.has(e))try{r(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function Ef(e,t){if(Li){t&&hc.push({names:new Set(e),onUpdate:t});for(let n of e)os.add(n);return Li}return os=new Set(e),hc=t?[{names:new Set(e),onUpdate:t}]:[],Li=(async()=>{await Promise.resolve();try{let n=bc();for(;os.size>0;){let r=os.values().next().value;if(os.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},Af(),wI(r,s)}catch{}}}finally{Li=null,os=null,hc=null}})(),Li}var vI=`deepview/workspace-id/v1
|
|
2
|
-
`;async function Bi(e){let t=Uint8Array.fromBase64(e),n=Wo(vI),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 Pi(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 U$=Pi("create"),V$=Pi("delete"),j$=Pi("privateKey"),G$=Pi("report-membership"),K$=Pi("bundle-membership"),$I=U$.on,Di=V$.on,Ff=j$.on,zi=G$.on,Lf=K$.on,yc=U$.fire,Of=V$.fire,Nf=j$.fire,wc=G$.fire,vc=K$.fire;var Pf="deepview.workspaces",kI=1;function Wi(){try{let e=ve(Pf);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 xI(e){await Me(Pf,JSON.stringify({version:kI,workspaces:e}))}var SI=Pf;function as(e){return navigator.locks.request(SI,async()=>{await Ci();let t=Wi(),n=await e(t);if(n!==!1)return await xI(t),n})}function Hi(e){return{id:e.id,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...e.reports]:[],bundles:Array.isArray(e.bundles)?[...e.bundles]:[]}}var Dt=Wi().map(Hi);function Df(){Dt=Wi().map(Hi)}function zf(e){Dt=Dt.filter(t=>t.id!==e.id),Dt.push(Hi(e))}function CI(e,t){let n=Array.isArray(e[t])?[...e[t]]:[],r=Dt.find(o=>o.id===e.id);if(r){r[t]=n;return}Dt.push(Hi(e))}function _I(e){Dt=Dt.filter(t=>t.id!==e)}function Y(){let e=Wi();for(let t of e)Array.isArray(t.reports)||(t.reports=[]),Array.isArray(t.bundles)||(t.bundles=[]);return e}var RI=200;function is(e){let t=(e??"").trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,"").slice(0,RI)||null}async function Wf(e){let t=is(e);if(!t)return null;let n=new Uint8Array(32);crypto.getRandomValues(n);let r=n.toBase64(),o={id:await Bi(r),name:t,privateKey:r,reports:[],bundles:[],createdAt:Date.now()};return await as(i=>i.some(a=>a.id===o.id)?!1:(i.push(o),o))?(zf(o),o):null}async function Hf(e){await as(n=>{let r=n.findIndex(o=>o.id===e);return r<0?!1:(n.splice(r,1),!0)})&&(Of(e),_I(e))}async function Uf(e,t){let n=is(t);return!(!n||!await as(o=>{let s=o.find(i=>i.id===e);return!s||s.name===n?!1:(s.name=n,s)}))}async function q$(e){let t=await as(o=>{let s=o.findIndex(d=>d.id===e.id),i=s>=0?o[s]:null,a=is(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=Dt.find(o=>o.id===n.id)??null;return r==null?yc(n.id):(r.privateKey!==n.privateKey&&Nf(n.id),$c(r.reports,n.reports)||wc(n.id),$c(r.bundles,n.bundles)||vc(n.id)),zf(n),n}async function TI({id:e,name:t,privateKey:n,createdAt:r}){let o=null;return await as(s=>{let i=is(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=>is(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"&&(yc(o.workspace.id),zf(o.workspace)),o}function $c(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 Bf({identifier:e,workspaceId:t,field:n,fire:r,additive:o=!1,from:s=void 0}){let i=await as(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&&CI(d,n)}}function Y$(e,t){return{move:(n,r)=>Bf({identifier:n,workspaceId:r,field:e,fire:t}),add:(n,r)=>Bf({identifier:n,workspaceId:r,field:e,fire:t,additive:!0}),remove:(n,r)=>Bf({identifier:n,field:e,fire:t,from:r})}}var Vf=Y$("reports",wc),jf=Y$("bundles",vc),Ui=Vf.move,so=Vf.add,Vi=Vf.remove,Gf=jf.move,io=jf.add,Kf=jf.remove;function MI(){let e=Wi().map(Hi),t=Dt,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)||Of(o);for(let[o,s]of r){let i=n.get(o);if(!i){yc(o);continue}i.privateKey!==s.privateKey&&Nf(o),$c(i.reports,s.reports)||wc(o),$c(i.bundles,s.bundles)||vc(o)}Dt=e}Yt(()=>{MI()});async function II(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 AI(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 EI(e,t){let n;try{n=await fe(e)}catch{return!1}return n==null?!1:(await $t(n))?.findings.some(o=>o.id===t)??!1}async function FI(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 EI(o,e))return o;return null}function ji(e){return e?Y().filter(t=>t.reports.includes(e)):[]}function qf(e){if(!e)return"";for(let t of e.split(`
|
|
3
|
-
`))if(t.trim())return t.trim();return""}function LI(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:qf(s.description)}),n.size===t.size))return n}return n}var ir=new Map,Jf=new Map,kc=new Map,Yf=new Set,Gi=null,Ki=null,Xf=0,qi=!1,zt=!1;function Zf(){return _()||zt}function Yi(e){return Yf.add(e),()=>Yf.delete(e)}function ls(){for(let e of Yf)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function Qf(){let e=new Map;for(let t of ir.values())t&&fi(t.groups,e);Jf=e}function em(){if(_())return Ti()?.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 tm(){return _()?!!Ti()?.duplicates.size:Jf.size>0}function gt(e){if(_())return[...Ti()?.duplicates.get(e)??[]];let t=Jf.get(e);return t?[...t]:[]}async function X$(e){if(ir.has(e))return!1;let t=kc.get(e)??0,n;try{n=await fe(e)}catch{return!1}if(n==null)return!1;if((kc.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,_l(r.groups),ke);else if(!r&&Ie(e)===ke){let{count:o,source:s}=Ve(n);Ue(e,o,s)}return r!==null}function J$(){return _()?Promise.resolve():Ki||(Ki=(async()=>{try{let e,t;do{t=Xf,e=await ce(),zt&&e.some(o=>!ir.has(o))&&(zt=!1,ls());let n=e.filter(o=>Ie(o)===ke);(await Promise.all(n.map(o=>X$(o)))).some(Boolean)&&(Qf(),ls())}while(t!==Xf);return e}catch(e){throw zt&&(zt=!1,ls()),e}finally{Ki=null}})(),Ki)}function Xi(){return _()?Promise.resolve():Gi||(Gi=(async()=>{try{do{qi=!1;let e=await J$(),t=!1;for(let o of e)await X$(o)&&(t=!0);let n=!qi&&e.every(o=>ir.has(o)),r=zt!==n;zt=n,t&&Qf(),(t||r)&&ls()}while(qi)}catch(e){throw zt&&(zt=!1,ls()),e}finally{Gi=null}})(),Gi)}mt(e=>{let t=zt;zt=!1,Xf++,kc.set(e,(kc.get(e)??0)+1),qi=!0;let n=ir.get(e)!=null;ir.delete(e),n&&Qf(),(n||t)&&ls()});var nm=()=>{};function rm(e){nm=typeof e=="function"?e:()=>{}}var Q$=()=>{};function om(e){Q$=typeof e=="function"?e:()=>{}}var ek=()=>{};function OI(e){ek=typeof e=="function"?e:()=>{}}var ar="deepview.triage",Mn="deepview.triage.pending",en=/^\d+$/u;async function NI(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function BI(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}var PI="deepview.triage.save",Z$=0;function xc(){return!_()&&dp(c.triage,c.reports)}function sm(){xc();let e={};for(let[t,n]of c.triage){if(en.test(t))continue;let r=ml(n);r&&(e[t]=r)}return e}function xe(){if(_())return Q$(),Promise.resolve();let e=++Z$,t=sm(),n=Object.keys(t).length===0,r=n?null:JSON.stringify(t);if(r!=null)try{localStorage.setItem(Mn,r)}catch{}return navigator.locks.request(i$,{mode:"shared"},async()=>{let o=null,s=null;if(r!=null)try{let i=Wo(r),a=await NI(i);s=xi(),o=(s?await a$(a):a).toBase64()}catch(i){console.warn("Failed to save triage:",i),nm();return}await navigator.locks.request(PI,()=>{try{if(e!==Z$)return;if(r!=null&&xi()!==s){queueMicrotask(()=>{xe()});return}if(n)localStorage.removeItem(ar),localStorage.removeItem(Mn);else{localStorage.setItem(ar,o);try{localStorage.removeItem(Mn)}catch{}}}catch(i){console.warn("Failed to save triage:",i)}}),nm()})}async function Sc(){let e=localStorage.getItem(Mn);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(ar);if(!t)return null;let n=Uint8Array.fromBase64(t);if(Yl(n)){if(!xi())throw new Error("triage: vault locked, cannot decrypt envelope");n=await l$(n)}let r=await BI(n);return JSON.parse(Ur(r))}function tk(e,{replace:t=!1}={}){let n=c.triage;if(t){let r=null,o=localStorage.getItem(Mn);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 cs(){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 Ew(Object.fromEntries(c.triage),r=>t("report",r,()=>e(r)));if(!_())return dp(c.triage,n)}async function DI(){if(!_())try{let e=await Sc();if(_())return;tk(e),await cs()&&await xe()}catch(e){console.warn("Failed to load triage:",e)}}async function Ji(){if(!_())try{let e=await Sc();if(_())return;tk(e,{replace:!0}),await cs()&&await xe(),ek()}catch(e){console.warn("Failed to reload triage:",e)}}typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==ar&&e.key!==Mn||Ji()});var zI;function ao(){return _()?Promise.resolve():zI??=DI()}kt(()=>{Ji()});kt(()=>{_()||xi()&&localStorage.getItem(Mn)&&xe()});async function im({seal:e}){try{localStorage.removeItem(Mn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(Yl(n))return;let r=await e(n,Up());localStorage.setItem(ar,r.toBase64())}async function am({open:e}){try{localStorage.removeItem(Mn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(!Yl(n))return;let r=await e(n,Up());localStorage.setItem(ar,r.toBase64())}function Cc(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function nk(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 rk="deepview.lastFile",Zi=null;function lm(){return Zi||(Zi=WI(),Zi.catch(()=>{Zi=null})),Zi}async function WI(){try{await ao()}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 Zo(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(ss(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&&(Qr(o,""),Qr(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=nk(ve(rk));if(d?.name===o)try{await Me(rk,Cc(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 so(i,o.id)}}function cm(){return{...ok,hydrateKey:c$,localContentSyncStatus:Iv,readTriageBlob:async()=>(await hl(await Sc(),e=>Jl("report",e,()=>Yp(e)))).entries,reportSyncHash:e=>Jl("report",e,async()=>Tv(await Cn(e)))}}var ok={hasStoredBundleBytes:u$,listBundles:Je,listFiles:ce,onBundleMutated:d$,onFileMutated:mt,readBundle:_n,readFile:Yp,withStoredItem:Jl,isEncryptionEnabled:ft,isUnlocked:Xo,onVaultStateChange:kt,unlockEncryption:Si};function dm(e=ok){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 sk(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function ds(){if(!sk()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function um(){let e={supported:sk(),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 _c="deepview.scan.access",pm=new Set;function ik(){for(let e of pm)e()}function us(){return ve(_c)!=null}function fm(e){try{let t=JSON.parse(ve(_c)),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 mm({server:e,deepview:t,provider:n,token:r}){await Me(_c,JSON.stringify({server:e,deepview:t,provider:n,token:r})),ik()}async function gm(){await nr(_c),ik()}function hm(e){pm.add(e);let t=Yt(e);return()=>{pm.delete(e),t()}}var bm=1;function HI(){let e=sm(),t=sc();return{version:bm,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function UI(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function VI(){let e=HI();return{blob:new Blob([await ci(JSON.stringify(e))]),filename:UI()}}async function jI(e){let t;try{t=await bl(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!==bm)throw new Error(`Unsupported backup version: ${n.version} (expected ${bm})`);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 GI(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 cs(),await xe();let s=0,i=null;try{await A$(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 KI(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function ym(e){let t=new Set;for(let n of e){let r;try{r=await fe(n)}catch(s){if(KI(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 qI(){let e=new Set;for(let t of c.triage.keys())en.test(t)||e.add(t);return e}async function Rc(e){let t=qI();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await ym(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 ym(i),l=0,p=0;for(let d of r)a.has(d)?p++:l++;return{orphanedCount:l,sharedCount:p}}async function Tc(){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 ym(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 YI=1;async function XI(e){let t=new Set,n=await $t(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function wm(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function JI(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 ZI(e){let t=Ze(e);return t?{github:t}:null}async function ak(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=ZI(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function QI(e,{includeBundleBytes:t=!1}={}){let n=await ak(e),r=new Set;for(let p of n)for(let d of await XI(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=ml({...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:YI,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 JI(a);p.length>0&&(l.bundleBlobs=p)}return l}async function lk(e,{includeBundleBytes:t=!1}={}){let n=await QI(e,{includeBundleBytes:t});return{blob:new Blob([await ci(JSON.stringify(n))]),filename:`${wm(e.name)}.deepview-workspace.json.gz`}}async function eA(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await lk(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),s=await Ow(o,t);return{blob:new Blob([s],{type:"application/octet-stream"}),filename:`${wm(e.name)}.deepview-workspace.enc`}}async function vm(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await eA(e,t,{includeBundleBytes:n}):await lk(e,{includeBundleBytes:n})}async function tA(e){return{reports:await ak(e)}}async function $m(e){let t=await tA(e);return{blob:new Blob([await ci(JSON.stringify(t))]),filename:`${wm(e.name)}.deepview-reports.json.gz`}}function nA(e){return qe(e)??null}async function rA(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:qf(o.description)})}return t}async function oA(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=nA(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&&sA(o,s)}await xe()}function sA(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&iA(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 iA(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 aA(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 Zr(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 km(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 aA(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await rA(e.reports):new Map,s=await hl(e.triage,f=>e.reports.find(m=>m.name===f)?.content);await oA(s.entries,t,o);let i=Array.isArray(e.bundles),a=i?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],l=await q$({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 ic(d)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return l}function lA(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>yl?`reports count (${e.reports.length}) exceeds cap (${yl})`:null:"reports field must be an array"}function ck(e){return lA(e)===null}async function xm(e){if(pp(e))return{kind:"encrypted"};let t;try{t=await bl(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 ck(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}async function Sm({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 Fw(Wo(JSON.stringify(s)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function cA({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 Lw(n,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await dA(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function dA(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 Cm(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function uA(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",dk=2,_m=new Set,Rm=new Set,Tm=0,Im=0,Am=0,Ic=new Map,Ac=Promise.resolve(),uk=null;function fs(e=ve(Mm)){try{let t=JSON.parse(e);if(t?.version===dk&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:dk,revision:"",links:"[]",entries:{}}}function ps(){for(let e of _m)e()}function pk(e){let t=Ac.then(()=>Jo(Mm,n=>e(fs(n))));return Ac=t.catch(n=>console.warn("workspace App cache:",n)),t}function Mc(e){return JSON.stringify(e.reports.toSorted())}function fk(){return JSON.stringify(em().map(({name:e,groups:t})=>({name:e,groups:t})))}function Em(e){return Zf()&&e.links===fk()}function mk(e,t){return e.workspaceRevisions?.[t]??""}function gk(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(Ic.get(t?.id)??0)&&n.workspaceRevision===mk(e,t?.id)}function hk(e,t,n){return n.reportEpoch===Am&&n.reportRevision===(e.reportRevision??e.revision)&&gk(e,t,n)}function Fm(e,t){return hk(fs(),e,t)}function bk(e,t){if(Tm||Rm.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 Lm(e){return bk(e,fs())?.appMode??null}function lo(e){let t=fs(),n=bk(e,t);return!n||!Em(t)?null:n}async function Qi(e,t=null){let n;do n=Ac,await n;while(n!==Ac);let r=fs(),o=r.reportRevision??r.revision;return t&&(!hk(r,e,t)||!Em(r))?null:{epoch:Im,revision:r.revision,reportEpoch:Am,reportRevision:o,workspaceId:e?.id,workspaceEpoch:Ic.get(e?.id)??0,workspaceRevision:mk(r,e?.id)}}async function Om(e,t,n){let r=!1;return await pk(o=>{if(n.epoch!==Im||n.revision!==o.revision||!gk(o,e,n)||!Em(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&&ps(),r}function Ec(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)Im++,t===void 0&&Am++,Tm++;else for(let n of e)Ic.set(n,(Ic.get(n)??0)+1),Rm.add(n);return ps(),pk(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)Tm--;else for(let n of e)Rm.delete(n);ps()})}function Nm(e){return _m.add(e),()=>_m.delete(e)}Yt(()=>{let e=ve(Mm);e!==uk&&(uk=e,ps())});zi(e=>{Ec([e]).catch(()=>{})});Di(e=>{Ec([e]).catch(()=>{})});mt(e=>{let t=Y().filter(n=>n.reports.includes(e)).map(n=>n.id);Ec(t).catch(()=>{})});Yi(()=>{if(!Zf()){ps();return}let e=fk();fs().links===e?ps():Ec(null,e).catch(()=>{})});var St="deepviewManagedNavigation",Fc="deepviewManagedLoginFinding";function Bm(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Lc(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 pA(e){let t=e.location.hash,n=Ww(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(Fc);if(e.sessionStorage?.removeItem(Fc),!$)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(),M=!1;try{M=await i($,E)}catch(I){console.warn("managed: navigation failed:",I)}return E()?M?(typeof M=="object"&&(R=Ye(M)??R),Bm(A.findingRoute,typeof M=="object"?M:$)&&(R=Ye(A.findingRoute)),Lc(A.codeRoute,typeof M=="object"?M:$)&&(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&&Lc(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(Fc,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||Bm($,{...d.route,view:"findings"}))&&(d.findingRoute=$);return}Bm($,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){Lc($,d.route)&&(d.codeRoute=$);return}Lc($,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(Fc)}catch{}r=!1,o=null,i=null,w("/")}}}}var te=typeof window>"u"?null:pA(window);function ea(e){return _()&&!c.managedSession?.publicShare&&Yn(c.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}function yk(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function fA(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 wk(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!fA(o)||!Number.isSafeInteger(s)||s<=0?null:{repo:o,number:s}}function Pm(e){return wk(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Dm(e){return wk(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function zm(e){let t=Pm(e);if(t)return{...t,kind:"pull"};let n=Dm(e);return n?{...n,kind:"issue"}:null}function Wm(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}function Oc(e){return _()&&c.currentManagedTeam&&c.managedSession&&!c.managedSession.publicShare?c.managedIssues.get(e?.id)??null:null}function tn(e){return Oc(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=Dm(s?.url)?{url:s.url,autoFix:Pm(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 Nc=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&&zm(t);if(!o)return null;let s=Wm(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=zm(s?.url);if(i&&typeof s.title=="string"&&["open","draft","closed","merged"].includes(s.status)){let a=i.kind==="issue"&&s.status==="closed"?yk(s.stateReason):null;this.entries.set(Wm(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 Bc=new Set,Hm=new Nc({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:vk,changed:()=>{for(let e of Bc)e()}});function dz(e){return Bc.add(e),()=>Bc.delete(e)}function Um(){Hm.reset();for(let e of Bc)e()}function ms(e){c.currentManagedTeam===e&&Um()}function Vm(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)&&ms(e);for(let{id:s,issue:i}of r)i?.autoFix&&i.autoFix!==n.get(s)?.autoFix&&Hm.read(i.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:s})=>s?.url)?.issue.url;o&&Hm.read(o)}var na=null,nn=null;function jm(){return nn?.getPreviewRole()??null}function $k(){nn?.setPreviewRole(null)}function kk(){nn?.resetManagedAppState()}function xk(e){nn?.setManagedAppSession(e)}function Sk(e){return nn?.setManagedReportCatalog(e)??new Set}function Pc(e,t=c.currentManagedTeam){return nn?.readReportSources(e,t)}function Ck(){nn?.clearReportSources(),nn?.clearFindingHistory()}async function _k(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 Rk(e){return(await D()).probeSession(e)}async function Tk(e){return(await D()).probeTeams(e)}async function Gm(e){return(await D()).fetchManagedBundleCatalog(e)}async function Mk(e,t,n){return(await D()).fetchNpmPackage(e,t,n)}async function Ik(e,t){return(await D()).fetchNpmVersions(e,t)}async function Ak(e,t){return(await D()).fetchNpmStats(e,t)}async function Ek(e,t){return(await D()).fetchNpmAdvisories(e,t)}async function Fk(e,t,n){return(await D()).fetchNpmTags(e,t,n)}async function Lk(e,t,n,r){return(await D()).fetchNpmRisk(e,t,n,r)}async function Ok(e,t,n){return(await D()).fetchNpmSocket(e,t,n)}async function Nk(e,t,n){return(await D()).fetchNpmProvenance(e,t,n)}async function Bk(e,t,n,r){return(await D()).fetchPrettyBundleFile(e,t,n,r)}async function Pk(e,t,n,r){return(await D()).fetchPrettyNpmFiles(e,t,n,r)}async function Dk(e,t,n,r,o){return(await D()).fetchPrettyNpmFile(e,t,n,r,o)}async function zk(e,t,n,r){return(await D()).fetchPrettyBundleChanges(e,t,n,r)}async function Wk(e,t,n,r,o){return(await D()).fetchPrettyNpmChanges(e,t,n,r,o)}async function bz(e,t,n,r){return(await D()).fetchBundleRenameDiff(e,t,n,r)}async function yz(e,t,n,r,o){return(await D()).fetchNpmRenameDiff(e,t,n,r,o)}async function wz(e,t,n,r){return(await D()).fetchBundleRenameDiffs(e,t,n,r)}async function vz(e,t,n,r,o){return(await D()).fetchNpmRenameDiffs(e,t,n,r,o)}async function $z(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 Hk(e){return(await D()).openManagedShareDialog(e,"",c.managedSession)}async function xz(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-YQRVLRDH.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}});ms(e.teamId),a&&r()}}):null}async function Sz(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 Uk(e,t){return(await D()).fetchTeamAnnotations(e,t)}async function Km(e,t=c.currentManagedTeam,n){return(await D()).fetchReportTriage(e,t,n)}async function vk(e,t,n){return(await D()).fetchFixes(e,t,n)}async function Vk(e,t=c.currentManagedTeam,n){return(await D()).fetchReportComments(e,t,n)}async function jk(e,t,n,r=c.currentManagedTeam){return(await D()).saveReportComment(e,t,n,r)}async function Gk(e,t,n,r,o=c.currentManagedTeam){return(await D()).deleteReportComment(e,t,n,r,o)}async function Kk(e,t,n,r=c.currentManagedTeam){return(await D()).pushReportTriage(e,t,n,r)}async function qk(e){return e&&te?.rememberFinding(),(await D()).login(e)}async function Yk(e){return(await D()).logout(e)}async function Xk(e){return(await D()).stopViewing(e)}async function Dc(e,t){return(await D()).fetchBundleMetadata(e,t)}async function Jk(e,t){return(await D()).fetchBundleContents(e,t)}async function qm(e,t){return(await D()).fetchTeamReports(e,t)}async function Zk(e,t){return(await D()).watchTeamFeed(e,t)}async function Qk(e,t=c.currentManagedTeam,n="",r=!1,o=!1){return(await D()).fetchBundleAdvisories(e,t,n,r,o)}async function Cz(...e){return(await D()).dependencyReviews(...e)}async function _z(...e){return(await D()).myDependencyReviews(...e)}async function Rz(...e){return(await D()).discardDependencyReview(...e)}async function Tz(...e){return(await D()).latestDependencyReview(...e)}var ye={...Hw,[ke]:ww},gA=new Set(Object.keys(Dr)),gs={...Dr,default:"DeepView"};function zc(e){let t=e._source??e.source;return t!=="default"&&Object.hasOwn(De,t)?t:null}function Ae(e){return Ym(e,Ie(e))}function Ym(e,t){if(t===ke)return ke;if(t!==void 0)return gA.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 Wc(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 Xm=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",Xm);function Hc({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return Fl("workspace-unlock-bundle-dialog",{_tryPassword:e},t=>{t._tryPassword=null})}var Uc=`.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 e0=`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 t0({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 Vc(e){if(!e)return g;let t=e.replaceAll("_"," ");return u`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function wA(e){return`bundle-${e.slice(7,19)}\u2026`}function lr(e){return e.kind==="bundle"?e.label??wA(e.identifier):e.identifier}function n0(e){return e.kind==="bundle"?"bundle":Wc(e.identifier)?"links file":"report"}function jc(e){let t=e.length,n=t===1,r=new Set(e.map(n0)),o="items";if(r.size===1){let s=[...r][0];o=n?s:`${s}s`}return{count:t,singular:n,kindLabel:o}}function Gc(e){return u`<ul class="lwd-list">${e.map(t=>{let n=n0(t);return u`<li>${lr(t)}${n==="report"?g:u`<span class="lwd-kind-tag">${n}</span>`}</li>`})}</ul>`}function Kc(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 vA(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 $A(e){return u`<span class="comment-text">${e||u`<em>empty</em>`}</span>`}function kA(e){return e?Do(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 xA(e){return e?u`<span class="${`triage triage-${e}`}">${e}</span>`:u`<em>none</em>`}function SA(e){return e?u`<span class="${`flag-badge${e==="flagged"?" on":""}`}">${e}</span>`:u`<em>none</em>`}function r0(e,t){return e==="color"?vA(t):e==="comment"?$A(t):e==="fix"?kA(t):e==="triage"?xA(t):e==="flagged"?SA(t):u`${String(t)}`}function CA(e,t){let n=e?.file?e.line?`${e.file}:${e.line}`:e.file:"";return u`<div class="card-head">${Vc(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 s0={title:"Triage conflicts",intro:"disagree with your local triage on",trailingNote:"",applyButton:"Apply",importedSideLabel:"Apply imported"},o0={color:0,comment:1,fix:2,triage:3,flagged:4},_A={color:"Color",comment:"Comment",fix:"Fix",triage:"Triage state",flagged:"Flag"},Jm=class extends N{static styles=[...N.styles,P(Uc),P(e0)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...s0},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)=>(o0[f.property]??99)-(o0[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}">${CA(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">${_A[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">${r0(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">${r0(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",Jm);function qc(e,t,n={}){return new Promise((r,o)=>{let s=document.createElement("triage-conflict-dialog");s.conflicts=e,s.findingLookup=t,s.labels={...s0,...n},s.addEventListener("resolve",i=>{s.remove(),r(i.detail)}),s.addEventListener("modal-conflict",i=>{s.remove(),o(El(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 Zm=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",Zm);function i0(e){return re("local-triage-import-dialog",e)}var a0=`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 Qm=class extends Ee{static styles=[...Ee.styles,P(a0)];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",Qm);function l0(e){return re("local-content-import-dialog",e)}var c0=`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 IA={triage:"Triage state",color:"Color",fix:"Fix",flagged:"Flag",comment:"Comments",ignoredReports:"Per-report ignores"},d0={"managed-only":"Only managed","local-only":"Only local",mismatch:"Different"},AA={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"};function u0(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"?AA[t]??t:t}var eg=class extends Ee{static styles=[...Ee.styles,P(c0)];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(d0).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">${IA[p.property]}<span class="difference-kind">${d0[p.kind]}</span></th><td class="${p.kind==="managed-only"?"":"highlight"}">${u0(p.property,p.local)}</td><td class="${p.kind==="local-only"?"":"highlight"}">${u0(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",eg);var p0=e=>re("triage-comparison-dialog",e);var EA={get state(){return c},listWorkspaces:Y,addReportToWorkspace:so,addBundleToWorkspace:io,onReportMembershipChanged:zi,onBundleMembershipChanged:Lf,onWorkspaceDeleted:Di,onWorkspacePrivateKeyChanged:Ff,analyzeContent:Ve,setCount:Ue,gunzipBytes:up,listBundles:Je,listFiles:ce,readBundle:_n,readFileBytes:Cn,saveBundle:Zr,saveFileBytes:Xp,onFileMutated:mt,async saveTriage(){return await cs(),xe()},getSecureItem:ve,setSecureItem:Me,removeSecureItem:nr,onSecureStorageHydrated:Yt};function f0(e){e.installSyncHost(EA),rm(()=>e.triageSync.notify())}var X=null,co=null;function b0(){try{return ve("deepview.sync.userEnabled")!=="0"}catch{return!0}}var y0=!1;function Jc(e){y0=!!e}function Xc(){if(y0||c.serverMode!=="e2e")return!0;try{return pt()?.mode==="managed"}catch{return!1}}function ra(){return co||(Xc()&&!X?Promise.resolve(null):(co=(async()=>{let e="./client-sync.js";try{let t=await import(e);return f0(t),X=t,FA(),t}catch(t){throw co=null,t}})(),co))}var w0=[];function oa(e){X?e(X):w0.push(e)}function FA(){let e=w0.splice(0);for(let t of e)try{t(X)}catch(n){console.warn("client-sync: deferred apply failed:",n)}}function uo(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 tg(e,t){return X?X.isInRemote(e,t):!1}function v0(e,t){return X?X.isBundleInRemote(e,t):!1}var LA="deepview.objstore-presence.";function $0(e){try{let t=localStorage.getItem(LA+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function hs(e,t){if(X&&X.isInRemote(e,t))return!0;let n=$0(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function ng(e,t){if(X&&X.isBundleInRemote(e,t))return!0;let n=$0(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function rg(e){return X?X.remoteCount(e):0}function k0(e){return X?X.differingReports(e):[]}function AW(e){return uo(e,(t,n)=>t.onAutoDownloaded(n))}function EW(e){return uo(e,(t,n)=>t.onBundleAutoDownloaded(n))}function FW(e){return uo(e,(t,n)=>t.onChange(n))}var m0=null,g0=null,h0=null,Yc=[];function LW(e){if(X){X.setRedraw(e);return}m0=e,oa(t=>{m0===e&&t.setRedraw(e)})}function OW(e){if(X){X.setAuthenticationResolver(e);return}g0=e,oa(t=>{g0===e&&t.setAuthenticationResolver(e)})}function NW(e){if(X){X.setHydrationConflictResolver(e);return}h0=e,oa(t=>{h0===e&&t.setHydrationConflictResolver(e)})}async function on(e,t){if(Xc()||!b0()&&!X)return;let n=await ra();if(!(!n||Xc()))return n[e](...t)}function x0(...e){return on("downloadFileFromRemote",e)}function S0(...e){return on("fetchBundleFromRemote",e)}function Zc(...e){return on("putFile",e)}function C0(...e){return on("holdLocalChangeChecks",e)}function _0(...e){return on("putBundleToRemote",e)}function Qc(...e){return on("deleteFromRemote",e)}function ed(...e){return on("deleteBundleFromRemote",e)}function sa(...e){return on("openWorkspace",e)}async function og(...e){return(X??(co?await co:null))?.closeWorkspace(...e)}function R0(...e){return on("recheckRemoteStorage",e)}function T0(...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 Xc()?Promise.resolve(null):ra().then(t=>{t.triageSync.setEnabled(!0);let n=Yc;Yc=[];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){Yc=X.openWorkspaceIds();for(let t of Yc)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():b0()},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 uo(e,(t,n)=>t.triageSync.onStatusChange(n))},onServerInfo(e){return uo(e,(t,n)=>t.triageSync.onServerInfo(n))},onPersistenceDegraded(e){return uo(e,(t,n)=>t.triageSync.onPersistenceDegraded(n))},onProxyAuthRequired(e){return uo(e,(t,n)=>t.triageSync.onProxyAuthRequired(n))}};function td(){let e=new Set;if(c.currentWorkspace||!tm())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)&&ro(o).some(s=>s!==t))&&e.add(r);return e}var bs="\0",ig="",ys="";function ia(e){return dl(e.model)||null}function ag(e){let t=cr();if(t.filterAnalyzer){let n=e._analyzer??null,r=t.filterAnalyzer===bs?null:t.filterAnalyzer;if(n!==r)return!1}if(t.filterModel){let n=ia(e),r=t.filterModel===ys?null:t.filterModel;if(n!==r)return!1}return!0}function lg(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 A0(e){let t=new Set;for(let n of e)for(let r of n)t.add(lg(r));return t}function nd(){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 OA=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];function GW(){let e={};for(let t of OA){let n=c[t];e[t]=n instanceof Set?new Set(n):n}return e}var cg=null;function KW(e){cg=e}function qW(){cg=null}function cr(){return cg??c}function E0(e){return Yr(e)||(e._source&&!e._sourcePass?"revalidation":"")}function F0(e){let t=Ep("confirmed","");return e.some(n=>t.includes(E0(n)))}function NA(e,t){let n=e.map(Ct).filter(r=>r.length>0);return Lv(n,t,Fv(e,Ct,Yr),Yr)?"confirmed":""}function BA(e,t=Ct){return Ev(e,t)}function PA(e,{tabs:t=Ct,kindOf:n=Yr,severityMode:r=c.severityMode}={}){return zl(e,{tabs:t,kindOf:n,severityMode:r})}function rd(e){return c.showRevalidation===!1||c.upstreamOnly||po()?!1:PA(e)}function aa(e,{resetSort:t=!0}={}){c.filterConfMin=BA(e),c.filterConfMax=10,c.filterRevalidate=NA(e,c.filterConfMin),c.filterPartial="",t&&(c.sortBy=dg(e)?"priority-desc":"severity")}function dg(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(L0(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&&Xr(o))})}function L0(e){let t=e.find(n=>n.priority!==void 0);return t?t.priority:e.some(Xr)?0:void 0}function O0(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=Ep(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(E0(e)))return!1}if(!t.filterRevalidate){let n=Nv(e)?0:Fp(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 DA(e){if(!O0(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(!ag(e))return!1;if(t.filterRepo){let r=lg(e),o=t.filterRepo===ig?null:t.filterRepo;if(r!==o)return!1}if(n){let r=he(e),o=Pv(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 zA(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 WA(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 N0(){return c.showRevalidation!==!1&&!c.upstreamOnly}function ug(e){if(N0())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=lg(o);s&&n.add(s);let i=WA(o);i&&r.add(i)}return n.size>1||r.size>1}function pg(e){if(!N0()||Ct(e).length===0)return!1;let n=e.filter(r=>r.isApp);return n.length>0&&n.length>1}function sg(e){return e.some(t=>t.isSecurity===!0)}function B0(e){return e.some(sg)&&e.some(t=>!sg(t))}function P0(e){return e.filter(t=>t.some(O0)).map(Ct)}function od(e){let t=!c.currentWorkspace&&cr().filterDuplicates,n=t?td():null,r=cr().filterCrossContext,o=cr().filterAppStacked,s=cr().filterSecurity;return e.filter(i=>i.some(DA)&&zA(i)&&(!t||t==="with"===i.some(a=>n.has(j(a))))&&(!r||r==="with"===ug(i))&&(!o||o==="with"===pg(i))&&(!s||s==="with"===sg(i)))}function M0(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 D0(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 I0=D0("desc"),HA={severity:(e,t)=>(_e[de(t,c.severityMode)]||0)-(_e[de(e,c.severityMode)]||0)||I0(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":I0,"confidence-asc":D0("asc"),"priority-desc":M0("priority","desc"),"priority-asc":M0("priority","asc")};function z0(e){let t=HA[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:L0(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 W0(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.startsWith("revalidate")&&n!=null))}function H0(e,t,n){let r=W0(t);if(!e._revalidationCopies){let o=W0(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 ZW(e){let t=new Map,n=new Set(xw);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 UA=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"]);function U0(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,o]of Object.entries(t)){if(r.startsWith("_")||UA.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 fg(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=H0(e,t,n);(U0(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 sd(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(V0):t?r?v.filter($=>!["refuted","unreachable"].includes(Be($))):v:v.filter($=>Be($)!=="revalidation").map(V0),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(...mg(y,L,t,n))}else b.push(...mg(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))fg(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(...mg(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 mg(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 V0(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 fo=null,gg=0;function ws(){return c.currentView==="links"&&fo?.owner===c.currentLinks?fo:null}function j0(){gg++,fo=null}async function u6(e,t,n,r){if(c.currentView!=="links"||!c.currentLinks)return;let o=rt(c.currentLinks),s=++gg;fo={owner:o,id:e,reportName:t,group:null,error:""},c.focusCodeStack=[],c.focusCodeAt=0;let i=()=>s===gg&&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.");fo={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 zo(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=jn(b,b._source)),b});await Promise.all([ao(),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}))]}),fo.group=m,c.activeTabByGroup.set(m[0].id,e))}catch(a){i()&&(fo.error=a.message||"Unable to load this finding.")}}function id(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 ad(e){return Array.isArray(e)?e:[e]}function po(){return c.revalidationDetailed===!0}function VA(e){return e?._reportName??""}var G0=null,K0=!0;function jA(){let e=c.reports;return!Array.isArray(e)||e.length===0?!0:(e!==G0&&(G0=e,K0=Wl(e)),K0)}function dr(e){return!e.isUpstream||c.showRevalidation===!1||c.upstreamOnly===!0||!jA()}function GA(){let e=c.managedSession;return _()&&(e?.publicShare===!0||!Yn(e?.role,"triage"))}function _t(e){return dr(e)&&!GA()}function he(e){if(!dr(e))return;let t=c.triage.get(j(e)),n=t?.triage==="ignored"&&ct(e,Yo())?{...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(`
|
|
12
|
-
|
|
13
|
-
`)}}function KA(e){return dr(e)&&(Te(e,c.triage.get(j(e)),Yo())==="ignored"||ct(e,Yo())&&Hr(c.triage,j(e),VA(e)))}function ca(e,t=he(e)){if(dr(e))return Te(e,t,Yo())??(KA(e)?"ignored":void 0)}function Ct(e){return ws()?.group===e?e:e.linkedTabs?e.linkedTabs:po()?e:q0(e)}function q0(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 Y0(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function qA(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(ag);o.length>0&&(r=o)}return r.find(qA)??r[0]}function X0(e){return e?._repoFallback||c.repoUrl||""}function En(e){return{github:X0(e),directory:e?._repoDirectory??""}}function J0(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||X0(e)||null}function vs(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=vs(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 _6(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=>YA(o,r))}function YA(e,t){if(!_t(e))return!1;let n=(he(e)?.fix??"").trim();return n===""||n===(t??"").trim()}function R6(e,t){if(!_t(je(e)))return{targets:[],clearing:!1};let n=Fe(e);return{targets:da(e,n),clearing:t==="restore"||hg(e,n)===t}}function da(e,t=Fe(e)){let n=vs(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 hg(e,t=Fe(e),n=null){return e.linkedTabs||e.some(r=>r.isApp)&&vs(e)!==e||!t.hasConflict?t.commonTriage??null:ca(n??je(e))??null}function T6(e){let t=vs(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,Yo())||r!=="ignored"&&a?.ignoredReports?.length||ae(c.triage,i,{triage:r})&&(o=!0))}return o}var ht=null;function pr(){ht=null}function ld(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]=sd(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:o})),ht[i]}function Z0(){return ld(c.showRevalidation!==!1).groups}function bg(){return ld(!0).groups}function Q0(){return ld(!0,!1,!!c.currentWorkspace).conflicts}function fr(){let e=ld(c.showRevalidation!==!1,c.upstreamOnly===!0,!!c.currentWorkspace),t=e.groups;if(c.showRevalidation===!1||c.upstreamOnly)return t;if(c.currentWorkspace){let n=po();return(!e.linkedGroups||e.linksTick!==c.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=id(t,gt,q0,Ct),e.linksTick=c.linksTick,e.linkedDetailed=n),e.linkedGroups}return po()?t:e.visibleGroups??=(()=>{let n=t.flatMap(r=>{let o=r.filter(s=>!Xr(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 mo(){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 M6(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 bg())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 I6(e){let t=ws()?.group;if(t&&ie(t)===e)return t;for(let n of fr())if(ie(n)===e)return n;return null}var cd=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 wg=Dr;function ex(e){return e==null?"(none)":wg[e]??e}function tx(e){return e??"(no model)"}var yg=class extends cd{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===bs?null:c.filterAnalyzer,o=c.filterModel===""?void 0:c.filterModel===ys?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:ex(r),l=o===void 0?null:tx(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:bs,labelOf:ex,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:ys,labelOf:tx,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",yg);var dd=["type","model","effort","exportsMode"],nx=["security","correctness"],XA=["max","xhigh","high","medium","low","minimal"],JA=["list","isolate"];function vg(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}var ZA={type:e=>e==="terminal"?nx.length+2:vg(nx,e),model:e=>e==null?1:0,effort:e=>vg(XA,e),exportsMode:e=>vg(JA,e)};function QA(e,t,n){for(let r of n){let o=ZA[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 rx(e,t,{typePrefix:n=!0}={}){return e==="type"?n?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function eE(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 ox(e,t=dd){let n=new Map;for(let m of e){let h={};for(let y of t)h[y]=y==="model"?dl(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)=>QA(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")?eE(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=rx(m,i[0][m]);h!=null&&d.push(h)}else if(!f){for(let h of i){let b=s.map(y=>rx(y,h[y],{typePrefix:!a})).filter(y=>y!=null);b.length>0&&d.push(b.join(" \xB7 "))}f=!0}return d}function sx(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 ud=null;function tE(){return ud||(ud=(async()=>await import("./prism.js"))(),ud)}var ix=1024*1024;function nE(e){return e.length<=ix&&wn(e)<=ix}var rE={__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 ax(e){return typeof e!="string"?null:rE[e.toLowerCase()]??null}async function $s(e,t,n=null){if(!t||!nE(e))return null;try{return(await tE()).highlight(e,t,n)}catch{return null}}function eH(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 $g=new Map,kg=new Set,xg=!1;function oE(){xg||(xg=!0,queueMicrotask(()=>{xg=!1,c.codeBlockTick++,O()}))}function Sg(e,t){let n=ax(t);if(!n||!e)return null;let r=`${n}\0${e}`;return $g.has(r)?$g.get(r):(kg.has(r)||(kg.add(r),(async()=>{let o=await $s(e,n);$g.set(r,o??null),kg.delete(r),oE()})()),null)}var pd=null,fd=null;function sE(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function iE(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function aE(){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 lx="./brotli-fallback.js",md=Symbol("brotli worker unavailable"),sn=null,Cg=!1,lE=0,ks=new Map;function cE(){return fd||(fd=(async()=>await import(lx))(),fd)}function _g(){Cg=!0,sn&&(sn.terminate(),sn=null);let e=[...ks.values()];ks.clear();for(let t of e)t.resolve(md)}function dE(e){let{id:t,bytes:n,error:r}=e.data??{},o=ks.get(t);o&&(ks.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function uE(){if(sn)return sn;if(Cg||typeof Worker>"u")return null;try{sn=new Worker(new URL(lx,import.meta.url),{type:"module"})}catch{return Cg=!0,null}return sn.addEventListener("message",dE),sn.addEventListener("error",_g),sn.addEventListener("messageerror",_g),sn}function pE(e){let t=uE();return t?new Promise((n,r)=>{let o=++lE;ks.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{ks.delete(o),_g(),n(md)}}):Promise.resolve(md)}async function fE(){await aE();let e=sE();return e?{kind:"native",format:e}:{kind:"fallback"}}function cx(){return pd||(pd=fE(),pd)}async function dx(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await cx();if(n(),r.kind==="native")return iE(r.format,e);let o=await pE(e);return n(),o!==md?o:(await cE()).brotliDecompress(e)}cx().catch(()=>{});var ux=0,Rg=new AbortController;function me(){return ux}function Le(){return Rg.signal}function Oe(){return Rg.abort(),Rg=new AbortController,++ux}var mE=new Map,gE=new Map,ua=new Map,gd=new WeakMap;async function Tg(e){try{let t=await Qp(e);return t?hi(t,e):null}catch{return null}}var mr=null;function yH(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 wH(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 go(e,t,{sources:n=!0}={}){if(!t.managedId&&_())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let r=n?mE:gE,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?yp(await Jk(t.managedId,{signal:l}),{integrity:e,kind:o,size:t.size}):hi(await Dc(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 Tg(e);return h?.kind===o&&!h.stale?h:go(e,t)}let[f,m]=await Promise.all([hE(e,t),Tg(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||ov(f).then(b=>ef(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 vH(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 hE(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 yp(Ur(n),{integrity:e,kind:o,size:n.byteLength});let s=Ur(await dx(n,()=>!_())),i=Jw.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 bE(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 yE(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 Tg(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 Ig(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 yE(r)}}}async function hd(e){let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t)return;let n;try{n=await go(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(),bE(n),t.managedId||xt().catch(()=>{}))}function Ag(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=gd.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=go(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 gd.set(e,{job:o,signal:t}),o.finally(()=>{gd.get(e)?.job===o&&gd.delete(e)}).catch(()=>{}),o}var bd=new WeakMap,px=new WeakMap;function xs(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 fx(e){let t=new Map;for(let n of e.keys()){let r=xs(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function wE(e,t,n,r){let o=xs(n);if(o===null)return null;let s=typeof r=="string"?xs(`${r}/package.json`):null,i=o.slice(0,o.lastIndexOf("/")+1),a=px.get(e);for(a||(a=new Map,px.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 vE(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 gx(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=>gx(r,t,n+1)):[null]}function $E(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=xs(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("../"))&&xs(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 kE(e,t,n,r,o,s){let i=vE(e?.imports,t);if(!i)return null;let a=gx(i.value,i.wildcard),l=null;for(let p of a){let d=$E(p,e,n,r,o,s);if(!d||l&&d!==l)return null;l=d}return l}function Eg(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 Zw(e))t.has(r)&&n.set(r,new Map([...o].map(([s,i])=>[s,t.has(i)?i:null])));return n}function yd(e,t,n=null,r=e,o=null){let s=bd.get(e);s||(s=fx(e),bd.set(e,s));let i=bd.get(r);i||(i=fx(r),bd.set(r,i));let a=n?.get(t),l=t.slice(0,t.lastIndexOf("/")+1),p=n?wE(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 kE(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(xs(l+d))??null}}var mx=new WeakMap;function Fg(e,t){let n=Lt(e),r=mx.get(n);return r||(r={imports:Eg(e,n),packageDirs:Ot(e)},mx.set(n,r)),yd(n,t,r.imports,we(e),r.packageDirs)}var bx=/[\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,wd=new RegExp(bx.source,"gu"),xE=new Map(`
|
|
15
|
-
0000 NUL NULL
|
|
16
|
-
0001 SOH START OF HEADING
|
|
17
|
-
0002 STX START OF TEXT
|
|
18
|
-
0003 ETX END OF TEXT
|
|
19
|
-
0004 EOT END OF TRANSMISSION
|
|
20
|
-
0005 ENQ ENQUIRY
|
|
21
|
-
0006 ACK ACKNOWLEDGE
|
|
22
|
-
0007 BEL BELL
|
|
23
|
-
0008 BS BACKSPACE
|
|
24
|
-
000B VT LINE TABULATION
|
|
25
|
-
000C FF FORM FEED
|
|
26
|
-
000D CR CARRIAGE RETURN
|
|
27
|
-
000E SO SHIFT OUT
|
|
28
|
-
000F SI SHIFT IN
|
|
29
|
-
0010 DLE DATA LINK ESCAPE
|
|
30
|
-
0011 DC1 DEVICE CONTROL ONE
|
|
31
|
-
0012 DC2 DEVICE CONTROL TWO
|
|
32
|
-
0013 DC3 DEVICE CONTROL THREE
|
|
33
|
-
0014 DC4 DEVICE CONTROL FOUR
|
|
34
|
-
0015 NAK NEGATIVE ACKNOWLEDGE
|
|
35
|
-
0016 SYN SYNCHRONOUS IDLE
|
|
36
|
-
0017 ETB END OF TRANSMISSION BLOCK
|
|
37
|
-
0018 CAN CANCEL
|
|
38
|
-
0019 EM END OF MEDIUM
|
|
39
|
-
001A SUB SUBSTITUTE
|
|
40
|
-
001B ESC ESCAPE
|
|
41
|
-
001C FS FILE SEPARATOR
|
|
42
|
-
001D GS GROUP SEPARATOR
|
|
43
|
-
001E RS RECORD SEPARATOR
|
|
44
|
-
001F US UNIT SEPARATOR
|
|
45
|
-
007F DEL DELETE
|
|
46
|
-
0080 PAD PADDING CHARACTER
|
|
47
|
-
0081 HOP HIGH OCTET PRESET
|
|
48
|
-
0082 BPH BREAK PERMITTED HERE
|
|
49
|
-
0083 NBH NO BREAK HERE
|
|
50
|
-
0084 IND INDEX
|
|
51
|
-
0085 NEL NEXT LINE
|
|
52
|
-
0086 SSA START OF SELECTED AREA
|
|
53
|
-
0087 ESA END OF SELECTED AREA
|
|
54
|
-
0088 HTS CHARACTER TABULATION SET
|
|
55
|
-
0089 HTJ CHARACTER TABULATION WITH JUSTIFICATION
|
|
56
|
-
008A VTS LINE TABULATION SET
|
|
57
|
-
008B PLD PARTIAL LINE FORWARD
|
|
58
|
-
008C PLU PARTIAL LINE BACKWARD
|
|
59
|
-
008D RI REVERSE LINE FEED
|
|
60
|
-
008E SS2 SINGLE SHIFT TWO
|
|
61
|
-
008F SS3 SINGLE SHIFT THREE
|
|
62
|
-
0090 DCS DEVICE CONTROL STRING
|
|
63
|
-
0091 PU1 PRIVATE USE ONE
|
|
64
|
-
0092 PU2 PRIVATE USE TWO
|
|
65
|
-
0093 STS SET TRANSMIT STATE
|
|
66
|
-
0094 CCH CANCEL CHARACTER
|
|
67
|
-
0095 MW MESSAGE WAITING
|
|
68
|
-
0096 SPA START OF GUARDED AREA
|
|
69
|
-
0097 EPA END OF GUARDED AREA
|
|
70
|
-
0098 SOS START OF STRING
|
|
71
|
-
0099 SGC SINGLE GRAPHIC CHARACTER INTRODUCER
|
|
72
|
-
009A SCI SINGLE CHARACTER INTRODUCER
|
|
73
|
-
009B CSI CONTROL SEQUENCE INTRODUCER
|
|
74
|
-
009C ST STRING TERMINATOR
|
|
75
|
-
009D OSC OPERATING SYSTEM COMMAND
|
|
76
|
-
009E PM PRIVACY MESSAGE
|
|
77
|
-
009F APC APPLICATION PROGRAM COMMAND
|
|
78
|
-
00A0 NBSP NO-BREAK SPACE
|
|
79
|
-
00AD SHY SOFT HYPHEN
|
|
80
|
-
034F CGJ COMBINING GRAPHEME JOINER
|
|
81
|
-
061C ALM ARABIC LETTER MARK
|
|
82
|
-
115F HCF HANGUL CHOSEONG FILLER
|
|
83
|
-
1160 HJF HANGUL JUNGSEONG FILLER
|
|
84
|
-
1680 OSM OGHAM SPACE MARK
|
|
85
|
-
17B4 KIVAQ KHMER VOWEL INHERENT AQ
|
|
86
|
-
17B5 KIVAA KHMER VOWEL INHERENT AA
|
|
87
|
-
180E MVS MONGOLIAN VOWEL SEPARATOR
|
|
88
|
-
2000 NQSP EN QUAD
|
|
89
|
-
2001 MQSP EM QUAD
|
|
90
|
-
2002 ENSP EN SPACE
|
|
91
|
-
2003 EMSP EM SPACE
|
|
92
|
-
2004 3/MSP THREE-PER-EM SPACE
|
|
93
|
-
2005 4/MSP FOUR-PER-EM SPACE
|
|
94
|
-
2006 6/MSP SIX-PER-EM SPACE
|
|
95
|
-
2007 FSP FIGURE SPACE
|
|
96
|
-
2008 PSP PUNCTUATION SPACE
|
|
97
|
-
2009 THSP THIN SPACE
|
|
98
|
-
200A HSP HAIR SPACE
|
|
99
|
-
200B ZWSP ZERO WIDTH SPACE
|
|
100
|
-
200C ZWNJ ZERO WIDTH NON-JOINER
|
|
101
|
-
200D ZWJ ZERO WIDTH JOINER
|
|
102
|
-
200E LRM LEFT-TO-RIGHT MARK
|
|
103
|
-
200F RLM RIGHT-TO-LEFT MARK
|
|
104
|
-
2028 LS LINE SEPARATOR
|
|
105
|
-
2029 PS PARAGRAPH SEPARATOR
|
|
106
|
-
202A LRE LEFT-TO-RIGHT EMBEDDING
|
|
107
|
-
202B RLE RIGHT-TO-LEFT EMBEDDING
|
|
108
|
-
202C PDF POP DIRECTIONAL FORMATTING
|
|
109
|
-
202D LRO LEFT-TO-RIGHT OVERRIDE
|
|
110
|
-
202E RLO RIGHT-TO-LEFT OVERRIDE
|
|
111
|
-
202F NNBSP NARROW NO-BREAK SPACE
|
|
112
|
-
205F MMSP MEDIUM MATHEMATICAL SPACE
|
|
113
|
-
2060 WJ WORD JOINER
|
|
114
|
-
2061 FA FUNCTION APPLICATION
|
|
115
|
-
2062 IT INVISIBLE TIMES
|
|
116
|
-
2063 IS INVISIBLE SEPARATOR
|
|
117
|
-
2064 IP INVISIBLE PLUS
|
|
118
|
-
2066 LRI LEFT-TO-RIGHT ISOLATE
|
|
119
|
-
2067 RLI RIGHT-TO-LEFT ISOLATE
|
|
120
|
-
2068 FSI FIRST STRONG ISOLATE
|
|
121
|
-
2069 PDI POP DIRECTIONAL ISOLATE
|
|
122
|
-
2800 BLANK BRAILLE PATTERN BLANK
|
|
123
|
-
3000 IDSP IDEOGRAPHIC SPACE
|
|
124
|
-
3164 HF HANGUL FILLER
|
|
125
|
-
FEFF BOM ZERO WIDTH NO-BREAK SPACE
|
|
126
|
-
FFA0 HWHF HALFWIDTH HANGUL FILLER
|
|
127
|
-
E0001 LANG LANGUAGE TAG
|
|
128
|
-
E0020 SP TAG SPACE
|
|
129
|
-
E007F CANCEL CANCEL TAG
|
|
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 yx(e){let t=xE.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)} ${RE(e)}`}}var SE=/\p{Cf}/u,CE=/\p{Default_Ignorable_Code_Point}/u,_E=/\p{Cn}/u;function RE(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 SE.test(t)?"format character":CE.test(t)&&!_E.test(t)?"invisible character":"unassigned code point"}function wx(e,t){let n=[];wd.lastIndex=0;for(let r=wd.exec(e);r;r=wd.exec(e)){let o=r[0].codePointAt(0),s=yv(e,r.index,o,t);s===-1?n.push([r.index,o]):wd.lastIndex=s}return n}function Ss(e){return bx.test(e)}var TE=e=>{let{label:t,title:n}=yx(e);return u`<span class="code-control" data-tooltip="${n}">${t}</span>`};function vx(e,t=!1){if(!Ss(e))return[e];let n=[],r=0;for(let[o,s]of wx(e,t))o>r&&n.push(e.slice(r,o)),n.push(TE(s)),r=o+(s>65535?2:1);return r<e.length&&n.push(e.slice(r)),n}var hx=e=>e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""");function vd(e,t=!1){if(!Ss(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 wx(n,t)){for(;r[i+1]?.text<=a;)i++;let p=r[i].markup+a-r[i].text,{label:d,title:f}=yx(l);o+=`${e.slice(s,p)}<span class="code-control" data-tooltip="${hx(f)}">${hx(d)}</span>`,s=p+(l>65535?2:1)}return o+e.slice(s)}function $d(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 ME=[];function Lg(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!$d(e[0],n))return{stack:ME,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function TH({stack:e,at:t,base:n},r){let o=e.length>0?e[t]:n;if($d(o,r))return null;let s=e.length>0?e.slice(0,t+1):[n];return{stack:[...s,r],at:s.length}}function MH(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}function $x(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,Ng=new Map,IE=new Set,kx=new WeakMap,Og=new Set;function xx(e,t,n,r,o,s=Ng,i=IE){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 $s(n,l,o);s.set(a,typeof p=="string"?vd(p):null),i.delete(a),c.focusCodeTick++,queueMicrotask(O)})()}async function AE(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 go(e,n),o=Lt(r);fa.set(e,{sources:o,packageFiles:we(r),packageDirs:Ot(r),imports:Eg(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(Sx)}}function Sx(){let e=be.querySelectorAll(".focus-code-line-active");e.length!==0&&$x(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=Pc(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:oo(e.fileHash).find(({integrity:n})=>t.includes(n))??null}function ga(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return Tf(e.integrity,t);let n=Pc(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 Cx(e,t,n){if(!_())return null;let r=Pc(e);if(!r||r.data===void 0&&!r.error)return n&&!Og.has(e)&&(Og.add(e),_k(e).catch(()=>{}).finally(()=>{Og.delete(e),c.focusCodeTick++,queueMicrotask(O),queueMicrotask(Sx)})),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=kx.get(o);return i||(i={cache:new Map,pending:new Set},kx.set(o,i)),xx(o.integrity,t,s,o.formats?.get(t),yd(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 ho(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return Cx(r,t,n);if(_())return null;let o=fa.get(e);if(!o)return n?(AE(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;xx(e,t,s,o.formats?.get(t),yd(o.sources,t,o.imports,o.packageFiles,o.packageDirs));let i=`${e}\0${t}`;return{content:s,highlighted:Ng.has(i)?Ng.get(i):void 0,loading:!1}}function _x(e){let t=ma(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:ki(t.reportId?t.line:e.line)}:null}function EE(e){return e?_x(je(e)):null}function kd(e){let t=EE(e);return t?{base:t,...Lg(c.focusCodeStack,c.focusCodeAt,t)}:null}function Rx(e){let t=_x(e);return t?Lg(c.focusCodeStack,c.focusCodeAt,t).pos:null}function jH(e,t,n,r){let o=kd(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let s=je(e),i=ho(t,r,{kick:!1,reportId:s?._managedReportId});return i&&!i.loading?{integrity:t,file:r,range:null}:null}function Tx(e){let t=e&&je(e),n=ma(t);if(n?.reportId&&!n.integrity)return Cx(n.reportId,n.file,!0);let r=kd(e);if(!r)return null;let{pos:o}=r,s=ho(o.integrity,o.file,{reportId:t?._managedReportId});return!s||s.loading?s:{...s,file:o.file,integrity:o.integrity,range:o.range}}function xd(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||Cs(o);return mp({id:r,report:c.currentWorkspace?null:Cl("report",o),workspace:Cl("workspace",s??"")})}function Cs(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 QH(e){for(let t of[fr(),Z0()])for(let n of t)for(let r of n)if(j(r)===e)return{group:n,finding:r};return null}function FE(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(Xr(r)||rd(mo())&&!F0(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 FE(i,t)}else c.revalidationDetailed=!0;if(od([e]).length===0){let i=c.sortBy;nd(),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 Mx(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function Ix(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 iU(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 Bg(e,t){c.managedComments.set(e,t);for(let n of ha.get(e)??[])n()}function Ax(e){return _()?c.managedComments?.get(e?.id)??[]:[]}function Ex(){return _()&&c.managedSession!=null&&Yn(c.managedSession.role,"triage")}function LE(e){return Ex()&&Mx(e,c.managedSession)}function Pg(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 Sd(e,{signal:t,readAnnotations:n}={}){let r=Pg(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 Vk(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)&&Bg(l,p);return!0}async function aU(e,t,n=null){let r=e?._managedReportId,o=Pg(r);if(!o()||!Ex())return{status:403};if(n&&n.authorId!==c.managedSession.id)return{status:403};let s=await jk(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(Ix),Bg(e.id,a)}return s}async function lU(e,t){let n=e?._managedReportId,r=Pg(n);if(!r()||!LE(t))return 403;let o=await Gk(n,t.id,t.version,c.managedSession.csrfToken);if(!r())return 0;if(o===204){let s=c.managedComments.get(e.id)??[];Bg(e.id,s.filter(i=>i.id!==t.id))}return o}function Cd(e){return Xv(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 _d=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>`,_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="M10 3 5 8l5 5"/></svg>`,Rs=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>`,Fx=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>`,Lx=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>`,gU=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>`,hU=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 Dg(e,{variant:t="full"}={}){let n=c.severityMode,r=de(e,n),o=u`<span class="${`badge ${r}`}">${st(r)}</span>`,s=Po(e),i=t==="tab"?null:kw(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 Ox=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;function ya(e){Ox.lastIndex=0;let t=[],n=0,r;for(;(r=Ox.exec(e))!==null;){r.index>n&&t.push(e.slice(n,r.index));let o=r[0].codePointAt(0);if(o===91){let s=Gv(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 OE({lang:e,code:t}){c.codeBlockTick;let n=Sg(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 NE(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 BE({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?Wv(e):[e],r=n.length>1,o=i=>t?NE(i,{wrap:r}):ya(i),s=i=>{let a=zv(i);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(l=>typeof l=="string"?o(l):OE(l))};return n.length===1&&typeof n[0]=="string"?s(n[0]):n.map(i=>typeof i=="string"?s(i):BE(i))}function PE(e){let t=new Set;for(let n of e)t.add(Ae(n));return[...t]}function DE(e){let t=Ae(e);return gs[t]??t}function zE(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=Kl(o),i=ro(o),a=c.currentView==="links"&&c.currentLinks?.managedId?Qt([o])[0]:null,l=i.length===0?"":` \u2014 in ${i.map(p=>`${oe(p)} (${DE(p)})`).join(", ")}`;return u`<a class="duplicate-ref" href="${_()?xd({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}`}">${PE(i).map(p=>W(ye[p]??ye.default))}<span class="duplicate-ref-id">${Gl(o)??s}</span></a>`})}</div>`}function WE(e){let t=Ov(e);return t?u`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:g}function HE(e){let t=Op()?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 UE(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 VE(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?Rx(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=pl(a),d=Vv(a,e,r,l),f=_w(a),m=Px(e,`ev${l}`,o,a?.file,a?.line),h=zg(d),b=s&&$d(i,{integrity:o.integrity,file:ga(o,a?.file),range:ki(a?.line)});return u`<li class="${q({current:b})}">${s?UE(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 Bx(e,t){let n=pl(e);return t?u`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function jE(e,t){if(!t)return g;let n=t.slice(0,7),r=qv(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 Td=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>`,GE=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>`,KE=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>`,qE=W(Kt);function zg(e){let t=Dv(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`}">${qE}</a>`:g}function YE(e,t,n,r){return`${j(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:""}`}var Ts={key:null,host:null};function Rd(e,t){if(Ts.key===e)return;let n=Ts.host,r=e===null?null:t?.getRootNode?.()?.host??null;Ts={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function Nx(e,t,n){c.codeBlockTick;let{text:r,lines:o,startLine:s}=Uv(e,t);if(o.length===0)return g;let i=n.lastIndexOf("."),a=Sg(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 Px(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=YE(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=>{Rd(a,m.currentTarget),ho(n.integrity,s,{reportId:n.reportId})}}" @mouseleave="${m=>{Ts.key===a&&Rd(null,m.currentTarget)}}" @focus="${m=>{Rd(a,m.currentTarget),ho(n.integrity,s,{reportId:n.reportId})}}" @blur="${m=>{Ts.key===a&&Rd(null,m.currentTarget)}}">${KE}</button>`;if(l){let m=ho(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>`:Nx(m.content,i,s);return{mark:p,tip:g,body:h}}if(Ts.key!==a)return{mark:p,tip:g,body:g};let d=ho(n.integrity,s,{kick:!1,reportId:n.reportId}),f=d&&!d.loading?u`<div class="code-preview-tip" role="tooltip">${Nx(d.content,i,s)}</div>`:g;return{mark:p,tip:f,body:g}}var XE=u`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${yw}"/></svg>`,JE=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 ZE(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 QE(e){let t=qt(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function eF(e){let t=jl(e,En(e)),n=pl(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let o=jv(e);return o&&r.push(o),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
|
|
132
|
-
|
|
133
|
-
`)}function tF(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=xd(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 Dx(e,t,n,r,o=null){let s=o==="table"?g:tF(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}">${Td}${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=ZE(r,b),$=u`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${_d}${b?u`<span class="mark-btn-label">Copy</span>`:g}</button>`,S=xd(r)?u`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${GE}${b?u`<span class="mark-btn-label">Link</span>`:g}</button>`:g,C=_()?Pe({repo:{github:r.repo?.github||r._repoFallback}}):J0(r),R=Yv(C,{title:QE(r),body:eF(r),labels:sx(r.isSecurity===!0,c.githubNewIssueLabels)}),L=_()&&c.managedSession&&!c.managedSession.publicShare&&c.currentManagedTeam,A=u`${JE}${b?u`<span class="mark-btn-label">Issue</span>`:g}`,E=Oc(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,M=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">${XE}${b?u`<span class="mark-btn-label">Claude</span>`:g}</button>`,I=u`<color-marker .selected="${p}" .disabled="${l}"></color-marker>`,U=vs(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}${M}</span>${I}${rF(e,K,o,n,r)}</div></div>`}function nF(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 rF(e,t,n,r,o){let s=ie(e),i=!_t(o)||da(e,r).length===0,a=i?null:hg(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="${nF}">${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 oF(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">${Td}</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 zx(e,t,n){let{app:r,source:o}=Y0(e),s=i=>sF(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 sF(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=zc(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="${gs[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">${Dg(e,{variant:"tab"})}</span><span class="tab-indicators">${oF(o,e)}</span></span>${f}</button>`}function iF(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 aF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function lF(e){if(or(e))return g;let t=e?.name;if(typeof t!="string"||!aF.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 cF(e,t,n,r,o,s){let i=j(e),a=he(e),l=a?.comment??"",p=a?.fix??"",d=tn(e),f=Oc(e),m=jl(e,En(e)),h=Bx(e,m),b=li(e),y=ma(e),w=Px(e,"loc",y,e.file,e.line),v=zg(m),x=u`<span class="line-num">${b?u`${h}, ${b}`:h}${w?.mark??g}${v}</span>`,k=Jr(e),$=String(e.discoveredIn??"").trim(),S=$===String(e.file??"").trim()?"":$,C=o==="focus"?lF(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=oo(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}=Sw(e),E=Cw(A),M=E.findIndex(K=>K.label!==null),I=M===-1?E:E.slice(0,M),U=M===-1?[]:E.slice(M);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} ${Dg(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?g:iF(e)} ${WE(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>`)} ${VE(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} ${HE(e)} ${e.revalidateRecommendation&&Op()?ba("Revalidation recommendation",zr(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):g} ${Po(e)&&e.correctedSeverityReason?u`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${it(e.correctedSeverityReason)}</div>`:g} ${zE(e,s)} ${_()?Ax(e).map(K=>u`<div class="comment-block">${Rv(K,Cd(K.body))}</div>`):l?u`<div class="comment-block"><span class="comment-label">Comment:</span> ${Cd(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> ${Do(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 DU(e){let t=["finding",...dF(e)];return ur(e).length>1&&t.push("multi-case"),t}function zU(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 ${jE(i.repo?.github,i.commitHash)}</div>`:g,p=c.currentWorkspace&&l!==g;return u`${o.map((d,f)=>cF(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?zx(o,a,r):g}</div>${Dx(e,o,r,i,n)}</div>`}function dF(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 WU(e){let t=Fe(e),n=ur(e),r=je(e),o=j(r),s=r,i=qt(s),a=Jr(s),l=li(s),p=l?`, ${l}`:"",d=jl(s,En(s));return u`<div class="row-score">${Dg(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">${Bx(s,d)}${p}</span> ${zg(d)}<div class="marks">${Dx(e,n,t,r,"table")}</div></div>${n.length>1?u`<div class="tabs-row">${zx(n,o,t)}</div>`:g}</div>`}function Wx(e){if(!e)return g;let t=oo(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 Hx(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="${`#${Bp(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=Vl(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">${uF(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=Vl(f.size);return u`<section class="tree-file" id="${Bp(d)}"><div class="tree-file-header"><span class="name">${d}</span> ${a(d)} ${h?u`<span class="tree-file-size">${h}</span>`:g} ${Wx(f.fileHash)}</div>${Ux(f,m,i)}</section>`})}</div>`}function Ux(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 uF(e,t,n,r){let o=Vl(e.size);return u`<div class="tree-detail-name"><span class="name">${t}</span> ${o?u`<span class="tree-detail-size">${o}</span>`:g} ${Wx(e.fileHash)}</div>${Ux(e,n,r)}`}var wa=null,Vx=null;function Is(){return Vx}function pF(){return wa||(wa=(async()=>{let e="./graph.js";try{let t=await import(e);return Vx=t,t}catch(t){throw wa=null,t}})(),wa)}async function Wg(e,t,n,r,o){try{let s=await pF(),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 jx(){hr=null}function fF(){return va||(va=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw va=null,t}})(),va)}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 Gx(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:gF(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 gF(e,t){return(await fF()).createTerminalElement(mF(e),t)}function As(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 Id(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=Tl(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 Hg(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,...Ho(n.mode)};let r=As(e.bundles??[],e.selectedBundle).find(o=>o.integrity===n.target);return r?.managedId?{compareId:r.managedId,...Ho(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,...Ho(o?.mode??"code")};if(t==="review"&&r){let{bundle:s,started:i,user:a,resume:l,...p}=r;return p}return Id(e,t)??Hg(e,t)}function o8(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 Es(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,br(t)])).values()]}var Ug=(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},Ad=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},Kx=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),yF(t)}};function hF(e){this._$AN!==void 0?(Ad(this),this._$AM=e,Kx(this)):this._$AM=e}function bF(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),Ad(r[s]);else r!=null&&($a(r,!1),Ad(r));else $a(this,e)}var yF=e=>{e.type==hw.CHILD&&(e._$AP??=bF,e._$AQ??=hF)},Ed=class extends bw{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,n,r){super._$AT(t,n,r),Kx(this),this.isConnected=t._$AU}_$AO(t,n=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),n&&($a(this,t),Ad(this))}setValue(t){if(Uw(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 Vg=new WeakMap,qx=lp(class extends Ed{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=Vg.get(t);n===void 0&&(n=new WeakMap,Vg.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"?Vg.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 Fd=2**20,Yx=Math.floor(2**25/15);function wF(e){let t=[];for(let n=0;n<e.length;){let r=Math.min(n+Fd,e.length);r<e.length&&e.codePointAt(r-1)>65535&&r--,t.push(e.slice(n,r)),n=r}return t}function Ld(e,t=!1){return e.length<=Fd&&!Ss(e)?e:vx(e,t).flatMap(n=>typeof n=="string"?wF(n):[n])}var vF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu,Xx=200;function $F(e){let t=[...e];return t.length>Xx?`${t.slice(0,Xx-1).join("").trimEnd()}\u2026`:e}var Od=e=>e.split("/").map(encodeURIComponent).join("/"),jg=(e,t)=>`https://github.com/${Od(e)}/releases/tag/${Od(t)}`;function Jx(e,t){return t&&e?.sha===t&&Array.isArray(e.tags)?e.tags.filter(n=>typeof n=="string"&&n):[]}function Fs(e,t,n=null){let o=typeof e?.github=="string"&&typeof n=="string"&&n.toLowerCase()===e.github.toLowerCase()?Jx(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:$F(s.subject),authorName:s.authorName,authorLogin:s.authorLogin,date:s.committedAt??s.authoredAt}:{}})}function Nd(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?Jx(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:jg(d,m)}))}:{}}}:{}})}let s=e?.package?.npm;if(typeof s?.name=="string"&&vF.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 kF=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,Zx=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,Kg=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,Gg=e=>JSON.stringify(e).replaceAll(kF,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);function $e(e){let t=Zx(e,64);return t===e?Gg(e):`${Gg(t)}...`}var Bd=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 Bd{};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 N8=2**20;var xF=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,SF=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,CF=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,_F=[31,28,31,30,31,30,31,31,30,31,30,31];function qg(e){let t=xF.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:_F[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 Pd=class{constructor(t){if(typeof t!="string"||qg(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}=qg(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 eS(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let n=qg(e);if(n?.unsupported.length===0)return new Pd(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(!SF.test(e),t,()=>`local dates and times are not supported: ${$e(e)}`),se(!CF.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 RF=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,TF=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,MF=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,tS=2n**63n,nS=BigInt(Number.MAX_SAFE_INTEGER),IF={__proto__:null,x:16,o:21,b:63};function oS(e,t){let n=RF.test(e);if(!n&&!TF.test(e))return;let r=e.replaceAll("_",""),o=n?r.replace(/^[+-]/u,""):r.slice(2).replace(/^0+/u,""),i=o.length<=(n?19:IF[r[1]])?BigInt(n?r:`${r.slice(0,2)}${o||"0"}`):void 0;return se(i!==void 0&&i>=-tS&&i<tS,t,()=>`integer out of range ${$e(e)}`),i>=-nS&&i<=nS?Number(i):i}var rS={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};function sS(e){if(typeof e!="string"||!MF.test(e))return;if(e in rS)return rS[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 Dd=class{constructor(t){let n=sS(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 iS(e,t){let n=sS(e);if(n!==void 0)return se(n!==null,t,()=>`float out of range ${$e(e)}`),new Dd(e)}var cS=64;function kr(e){for(;e.text[e.pos]===" "||e.text[e.pos]===" ";)e.pos++}function bo(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 dS="a carriage return must be followed by a line feed";function uS(e,t,n){throw new Wt(t==="\r"?dS:`${Kg(t)} is not allowed in ${n}`,e.line)}var Wd=e=>e.pos>=e.text.length||e.text[e.pos]===`
|
|
134
|
-
`||e.text.startsWith(`\r
|
|
135
|
-
`,e.pos),AF=/#[^[\p{Cc}--[\t\u0080-\u009F]]]*/vy;function pS(e){e.text[e.pos]==="#"&&($r(e,AF),Wd(e)||uS(e,e.text[e.pos],"a comment"))}function zd(e){if(e.text[e.pos]===`
|
|
136
|
-
`)e.pos+=1;else if(e.text.startsWith(`\r
|
|
137
|
-
`,e.pos))e.pos+=2;else return!1;return e.line++,!0}function Yg(e){do kr(e),pS(e);while(zd(e))}var aS={__proto__:null,b:"\b",t:" ",n:`
|
|
138
|
-
`,f:"\f",r:"\r",'"':'"',"\\":"\\"},EF={__proto__:null,'"':/[^"\\[\p{Cc}--[\t\u0080-\u009F]]]*/vy,"'":/[^'[\p{Cc}--[\t\u0080-\u009F]]]*/vy},FF=/u([\dA-Fa-f]{4})|U([\dA-Fa-f]{8})/uy;function fS(e){let t=e.text[e.pos];if(t in aS)return aS[e.text[e.pos++]];let n=$r(e,FF);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 LF=/[\t ]*\r?\n(?:[\t ]|\r?\n)*/uy;function OF(e){let t=$r(e,LF);return t===null?fS(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,NF={__proto__:null,'"':/"/uy,"'":/'/uy,'"""':/"{3,5}/uy,"'''":/'{3,5}/uy};function gS(e,t){let n=mS(e,t),r=NF[n?t.repeat(3):t];e.pos+=n?3:1,n&&zd(e);let o="";for(;;){if(o+=$r(e,EF[t])[0],n&&zd(e)){o+=`
|
|
140
|
-
`;continue}se(!Wd(e),e,"unterminated string");let s=$r(e,r);if(s!==null)return o+s[0].slice(3);let i=e.text[e.pos++];i===t?o+=i:i==="\\"?o+=n?OF(e):fS(e):uS(e,i,"a string")}}var BF=/[\w-]+/uy;function lS(e){let t=e.text[e.pos];if(t==='"'||t==="'")return se(!mS(e,t),e,"a multi-line string cannot be a key"),gS(e,t);let n=$r(e,BF);return se(n!==null,e,()=>`expected a key, found ${bo(e)}`),n[0]}function hS(e){let t=[lS(e)];for(;;){if(kr(e),e.text[e.pos]!==".")return t;e.pos++,kr(e),t.push(lS(e)),se(t.length<=cS,e,"a key with too many parts")}}var PF=/[\w+.:-]+/uy;function DF(e){let t=$r(e,PF);se(t!==null,e,()=>`expected a value, found ${bo(e)}`);let n=t[0];if(n==="true")return!0;if(n==="false")return!1;let r=oS(n,e)??iS(n,e)??eS(n,e);return se(r!==void 0,e,()=>`expected a value, found ${$e(n)}`),r}function zF(e,t,n,r){se(t[n]===void 0,e,()=>`duplicate key ${$e(n)}`),t[n]=r}function bS(e,t){let n=hS(e);return se(e.text[e.pos]==="=",e,()=>`expected "=" after the key, found ${bo(e)}`),e.pos++,kr(e),{header:!1,keys:n,value:yS(e,t)}}function WF(e,t){e.pos++;let n=[];for(Yg(e);e.text[e.pos]!=="]"&&(n.push(yS(e,t+1)),Yg(e),e.text[e.pos]!=="]");Yg(e))se(e.text[e.pos]===",",e,()=>`expected "," or "]", found ${bo(e)}`),e.pos++;return e.pos++,n}var Ls=e=>typeof e=="object"&&e!==null&&Object.getPrototypeOf(e)===null,HF=new WeakSet;function Jg(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}zF(e,i,r.at(-1),o)}var UF=e=>Array.isArray(e)?"an array":Ls(e)?"an inline table":"a value",VF=(e,t)=>`${$e(e)} is ${UF(t)}, which a dotted key cannot add to`;function Xg(e){kr(e),se(!Wd(e)&&e.text[e.pos]!=="#",e,"an inline table across lines is not supported")}function jF(e,t){e.pos++;let n=Object.create(null);HF.add(n);let r=new Set;if(Xg(e),e.text[e.pos]==="}")e.pos++;else do{Xg(e),se(e.text[e.pos]!=="}",e,"a trailing comma in an inline table is not supported");let{keys:o,value:s}=bS(e,t+1);Jg(e,n,r,o,s,VF),Xg(e);let i=e.text[e.pos];se(i===","||i==="}",e,()=>`expected "," or "}" on the inline table's line, found ${bo(e)}`)}while(e.text[e.pos++]===",");return n}function yS(e,t){se(t<=cS,e,"nested too deep");let n=e.text[e.pos];return n==='"'||n==="'"?gS(e,n):n==="["?WF(e,t):n==="{"?jF(e,t):DF(e)}function GF(e){let t=e.text.startsWith("[[",e.pos);e.pos+=t?2:1,kr(e);let n=hS(e),r=t?"]]":"]";return se(e.text.startsWith(r,e.pos),e,()=>`expected "${r}", found ${bo(e)}`),e.pos+=r.length,{header:!0,keys:n,array:t}}function wS(e){kr(e);let t=e.text[e.pos];if(t==="[")return GF(e);if(!(t==="#"||t==="\r"||Wd(e)))return bS(e,0)}function vS(e){if(kr(e),pS(e),!(zd(e)||e.pos===e.text.length))throw se(e.text[e.pos]!=="\r",e,dS),new Wt(`expected the end of the line, found ${bo(e)}`,e.line)}function Hd(e,t){return e.arrays.has(t)?"an array of tables":Array.isArray(t)?"an array":Ls(t)?e.fixed.has(t)?"an inline table":"a table":"a value"}var $S=e=>$e(e.join("."));function KF(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(Ls(s)&&!e.fixed.has(s),t,()=>`${$e(o)} is ${Hd(e,s)}, which a header cannot add to`),r=s}return r}function qF(e,t,n,r){e.pending.clear();let o=KF(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,()=>`${$S(n)} is ${Hd(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,()=>`${$S(n)} is ${Hd(e,o[s])} already`):o[s]=Object.create(null),e.current=o[s]}function YF(e,t,n){return!Ls(n)||e.fixed.has(n)?`${$e(t)} is ${Hd(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 XF(e,t,n,r){Jg(t,e.current,e.pending,n,r,(o,s)=>YF(e,o,s)),Ls(r)&&e.fixed.add(r)}var JF={__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 ZF(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 Wt(JF[t[0]]??"a lone surrogate is not well-formed Unicode",n)}function Zg(e){ZF(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=wS(n);o?.header===!0?qF(r,n,o.keys,o.array):o!==void 0&&XF(r,n,o.keys,o.value),vS(n)}return t}function QF(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&&hp("github",n)?n:null}function eL(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 tL=e=>e.replaceAll("\\","/").split("/").every(t=>t===""||t===".");function nL(e){if(typeof e!="string")return{};let t=e.replaceAll("\\","/").split("/");if(t.includes(".."))return{};let n=t.filter(r=>r!==""&&r!==".").join("/");return hp("directory",n)?{directory:n}:{}}function kS(e){let t=e?.repository,n=typeof t=="string"?t:t?.url,r=QF(n);if(!r)return;let o=t.directory;return typeof o!="string"&&(o=eL(e.homepage,r),o!==void 0&&tL(o)&&(o=void 0)),{github:r,...nL(o)}}function Qg(e,t){let n=e?.[t];if(typeof n!="string")return null;try{return t.endsWith(".toml")?Zg(n):JSON.parse(n.replace(/^\uFEFF/u,""))}catch{return null}}function rL(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 Ud(e,t,n){let r=t?.ecosystem??e.ecosystem??"npm",o=r==="composer"?Qg(t?.files,"composer.json"):r==="cargo"?Qg(t?.files,"Cargo.toml")?.package:Qg(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"?kS(o):{github:[o?.repository,o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(f=>rL(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 xS=new WeakMap;function SS(e,t){let n=xS.get(e);if(n||xS.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+=rv(a));n.set(t,{bytes:o,loc:s})}return n.get(t)}var Vd=new Set(["cargo","composer","soldeer"]);function jd(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 CS(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])}RS(r,n,n?new Set(t):null);let o=s=>{s.package&&(s.packageInfo=Ud(s.package,n?.get(s.sourcePath),s.fileCount));for(let i of s.dirs.values())o(i)};return o(r),r}function _S(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=jd(i,a,s);if(!Vd.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 RS(e,t,n){for(let s of e.dirs.values())RS(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=jd(e.sourcePath,r,n);if(Vd.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 Vd.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=yo(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 yo(e,t){let n=t.package;return n?`${n.name}${n.version?`${Vd.has(n.ecosystem)?" - ":"@"}${n.version}`:""}`:e}function TS(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}/${yo(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 eh(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 MS(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 oL([e,t],[n,r]){return yo(e,t).localeCompare(yo(n,r))||t.path.localeCompare(r.path)}function sL(e,t=0,n=[]){for(let[r,o]of[...e.dirs.entries()].toSorted(oL))sL(eh(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 th(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 IS(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?th(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:jd(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 th(h,b,t,f?o.repo?.commit:void 0,null)}let d=Ud({name:a.name,ecosystem:p},a,0);return d.github?th(d.github,d.directory??"",l,d.commit,d):null}function AS(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="${Fs(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>${Rl(e.package.ecosystem)}</span>`:g}</a>`}var LS=".bundle-code-main, .bundle-source-modal, .bundle-search-side",Gd=new Map,rh=new WeakMap,nh=null;function oh(e){if(!e){queueMicrotask(ES);return}if(ES(),Gd.has(e))return;if(!e.isConnected){queueMicrotask(()=>{e.isConnected&&oh(e)});return}let t=e.querySelector(":scope > .bundle-source-code");if(!t)return;let n=new ResizeObserver(()=>{rh.get(e)?.width!==OS(e)&&FS(e)});n.observe(t),n.observe(e.parentElement);let r=new MutationObserver(()=>FS(e));r.observe(t,{childList:!0,subtree:!0,characterData:!0}),r.observe(e,{attributes:!0,attributeFilter:["class"]}),Gd.set(e,()=>{n.disconnect(),r.disconnect()})}function ES(){for(let[e,t]of Gd)e.isConnected||(t(),Gd.delete(e))}function OS(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 FS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col"),r=OS(e);if(!t||!n||!e.isConnected||r<=0)return;let o=e.classList.contains("is-wrapped"),s=rh.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}=iL(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");rh.set(e,{rows:d,width:r});let f=e.closest(LS)?.querySelector("[data-bundle-source-wrap]");f&&(f.hidden=!p)}function iL(e,t,n,r){let o=getComputedStyle(e);nh??=document.createElement("canvas").getContext("2d"),nh.font=`${o.fontSize} ${o.fontFamily}`;let s=t/(2*nh.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 RV(e){let t=e.closest(LS)?.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 aL=new Set(["js","mjs","cjs","jsx","ts","mts","cts","tsx","css","json"]),lL=4*1024*1024;function cL(e){let t=/\.([a-z]+)$/iu.exec(e)?.[1]?.toLowerCase();return aL.has(t)?t:null}function NS(e,t,n=()=>Ll(e,t)){return cL(e)!==null&&wn(t)<=lL&&n().category==="minified"}var BS=e=>e.bundle??e.json??e,PS=new WeakMap;function sh(e,t){let n=PS.get(BS(e));if(n||PS.set(BS(e),n=new Map),!n.has(t)){let r=we(e).get(t);n.set(t,Sv(t,typeof r=="string"?r:null,xn(e).get(t)))}return n.get(t)}var Os=(e,t=n=>n)=>e?new Map(Object.entries(e).map(([n,r])=>[t(n),r])):null,dL=({stamps:e,readability:t,runsCode:n,exfiltration:r,hosts:o})=>({stamps:e,runsCode:Os(n),exfiltration:Os(r),hosts:Os(o),readability:t&&{...t,controls:Os(t.controls,Number)}});function uL(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:Os(t.found),...t.added?{added:Os(t.added)}:{}}))};case"popularity":return{...e,tier:e.tier??1/0};default:return e}}var DS=e=>({oldVersion:e.oldVersion??null,findings:e.findings.map(uL),files:new Map(Object.entries(e.files).map(([t,n])=>[t,dL(n)])),dependencies:e.dependencies,score:e.score??null}),Kd=e=>e?.npm?e.risk?.()?.files??null:null,pL={stamps:[],readability:null,runsCode:null,exfiltration:null,hosts:null};function Fn(e,t){return e?.npm?Kd(e)?.get(t)??pL:sh(e,t)}var ih=({names:e,loop:t})=>[e>=vv&&`${e.toLocaleString("en")}${e===$v?" or more":""} names such as _0x1a2b`,t&&"while(!![])"].filter(Boolean).join(", and ");function WS(e,t,n){return n===we(e).get(t)&&typeof n=="string"?Fn(e,t).readability:ah(e,t,n)}var zS=new WeakMap;function ah(e,t,n){let r=zS.get(e);r||zS.set(e,r=new Map);let o=r.get(t);if(o?.text===n)return o.read;let s=Ll(t,n);return r.set(t,{text:n,read:s}),s}function fL(e,t){let n=kv(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 HS=({longLines:e,longest:t})=>`${e.toLocaleString("en")} ${e===1?"line":"lines"} over ${wv} characters, the longest ${t.toLocaleString("en")}`;function mL(e){let{average:t,category:n,longLines:r,inlineMap:o}=e,s=()=>HS(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 US(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="${mL({...e,category:n})}">${t?o??r:r}</span>`}function HV(e){let t=e?.kind;return t!=="ascii"&&t!=="utf8"||yi(e)===t?g:US({...e,category:t})}function VS(e,t=null){let n=e?Go(e).filter(o=>["controls","invisible","long"].includes(o)&&(t===null||t.includes(Ko(e,o)))):[];if(n.length===0)return g;let r=o=>o==="long"?`${HS(e)}${e.category==="long"?", among readable ones":""}`:fL(e.controls,o);return n.map(o=>u`<span class="${`npm-flag-tag is-${Ko(e,o)}`}" data-tooltip="${r(o)}">${Nt.get(o).tag}</span>`)}function jS(e){if(!e)return g;let t=yi(e);return t==="ascii"||t==="map"?VS(e):gL(e)}var gL=e=>e?u`${VS(e)}${US(e)}`:g;function GS(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: ${ih(a)}`}">Obfuscated</span>`:g}`}var JS=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>`,ZS=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",hL=8,bL=4,yL=2,wL=30,vL=2,ka="The server's copy is of another file than the one open.",$L="The server didn't pretty-print this file.",Bs=e=>!(e>=400&&e<500&&e!==429),kL=5e3,xL=5*6e4,lh=new Map;function QS(e,t,n,r){if(!t?.retry){lh.delete(e);return}let o=lh.get(e)??0;lh.set(e,o+1),setTimeout(()=>{n()&&r()?.()},Math.min(kL*2**o,xL))?.unref?.()}var at=new Map,Ps=0,ZV=()=>Ps,Ns=new Map,SL=(e,t)=>`${e.integrity}\0${t}`,an=new Map,Rt=new Map,KS=new WeakMap;function e1(e,t,n,r){if(!(t?.managedId||t?.npm)||typeof r!="string")return!1;let o=KS.get(e);return o||KS.set(e,o=new Map),o.has(n)||o.set(n,NS(n,r,()=>ah(e,n,r))),o.get(n)}var ch=!1,Yd=new Set,t1=new Set;function CL(e,t){at.delete(e),at.set(e,t),ch||(ch=!0,t1=Yd,Yd=new Set,setTimeout(()=>{ch=!1})),Yd.add(e),n1()}function n1(){for(let[e,t]of at){if(at.size<=hL)break;Yd.has(e)||t1.has(e)||t.status==="loading"||(at.delete(e),Ns.delete(e))}}var dh=0,qS=[];async function _L(e){dh<vL?dh++:await new Promise(t=>{qS.push(t)});try{return await e()}finally{let t=qS.shift();t?t():dh--}}async function RL(e,t,n,r,o,s){let i;try{let p=s??await Pr(o),{text:d,source:f}=await _L(()=>n.npm?Dk(n.npm.name,n.npm.version,r,p):Bk(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),Ns.delete(e));return}i={status:"error",message:p?.message??String(p),retry:Bs(p?.status)}}if(at.get(e)!==t)return;at.set(e,i),Ps++;let a=Ns.get(e),l=i.status==="error"&&i.retry;l||Ns.delete(e),QS(`file ${e}`,l?i:null,()=>at.get(e)===i&&at.delete(e),()=>Ns.get(e)),a?.(),n1()}function r1(){for(let[e,t]of an){if(an.size<=bL)break;t.rest&&an.delete(e)}}function YS(e,t){let n=e.notifiers.get(t);e.notifiers.delete(t),n?.()}async function TL(e,t,n,{npm:r}){let o=we(n),s;try{await Pk(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:Bs(p)};t.copies.set(i,h),Ps++,YS(t,i)}),s={status:"error",message:$L,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:Bs(i?.status)}}t.rest=s,Ps++;for(let i of[...t.notifiers.keys()])YS(t,i);r1()}function ML(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},TL(s,i,e,t)),an.set(s,i),r1(),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 o1(e,t,n,r,o){return c.bundleSourcePretty?t.npm?ML(e,t,n,r,o):s1(e,n,r,o,t):null}function s1(e,t,n,r,o=e){let s=SL(e,t),i=at.get(s),a=i??{status:"loading"};return CL(s,a),(a.status==="loading"||a.retry)&&Ns.set(s,r),i||RL(s,a,o,t,n,e.fileHashes?.get(t)),a}var qd=new Set;function XS(e){e&&(qd.size===0&&setTimeout(()=>{let t=[...qd];qd.clear();for(let n of t)n()},wL),qd.add(e))}function i1(){for(let[e,t]of Rt){if(Rt.size<=yL)break;t.ended&&Rt.delete(e)}}async function IL(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"&&Bs(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:Bs(f)}),Ps++,XS(t.notify)};await(n.npm?Wk(n.npm.name,n.npm.version,r.npm.version,i):zk(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:Bs(i?.status)}}Object.assign(t,{ended:!0,rest:s}),Ps++,QS(`comparison ${e}`,s,()=>Rt.get(e)===t&&Rt.delete(e),()=>t.notify),XS(t.notify),i1()}function QV(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},IL(i,a,e,t)),Rt.set(i,a),i1();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?s1(l,r,o,s):{status:"loading"}))}function ej(){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 uh(e,t,n){return e?.bundle===t&&e.files[e.at]===n?e:{bundle:t,files:n?[n]:[],at:0}}function nj(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 rj(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 ph=1024,a1=1024*ph,l1=["tiny","small","medium","large","gigantic"],AL={dependencies:[1,4,11,26],files:[3,24,192,1536],lines:[400,3200,25600,204800],unpacked:[16*ph,128*ph,a1,8*a1]};function EL(e,t){let n=AL[e].findIndex(r=>t<r);return l1[n===-1?l1.length-1:n]}function Xd(e,t,n){return u`<span class="${`npm-sized is-${EL(e,t)}`}">${n}</span>`}var FL=["preinstall","install","postinstall"];function c1(e,t=!1){let n={...e};return!n.preinstall&&!n.install&&t&&(n.install="node-gyp rebuild"),FL.filter(r=>typeof n[r]=="string").map(r=>[r,n[r]])}function xa(e,t=[]){return c1(e?.installScripts,!!(t&&(t instanceof Set?t.has("binding.gyp"):t.includes("binding.gyp"))))}function cj(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 c1(r,t)}var fh=14*864e5,mh=(e,{minimumReleaseAge:t=fh,now:n=Date.now()}={})=>t>0&&typeof e=="string"&&n-Date.parse(e)<t,fj=90*864e5;var wo=72,Qe={top:6,right:0,bottom:18,left:40},LL=24,OL=4,Sa=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),d1=new Intl.NumberFormat("en"),Zd=e=>new Intl.DateTimeFormat("en",{...e,timeZone:"UTC"}).format,NL=Zd({month:"short",day:"numeric"}),zs=Zd({month:"short",day:"numeric",year:"numeric"}),gh=Zd({month:"short",year:"numeric"}),u1=Zd({month:"long",year:"numeric"}),Qd=e=>e===1/0?"unpopular":`top ${e.toLocaleString("en")}`,BL=(e,t)=>{let n=t&&_p(e);return u`<dd class="${`npm-downloads-tier ${n?"is-mid":Cp(e)}`}" data-tooltip="${n?t:g}">${Qd(e)}</dd>`},Ds={week:{label:"Weekly",of:e=>_v(e).slice(-52),name:e=>`${NL(e.from)} \u2013 ${zs(e.to)}`},month:{label:"Monthly",of:xp,name:e=>u1(e.from)}},hh=(e,t)=>`${d1.format(e)} downloads, ${t}`;function p1(e){let t=xp(e).at(-1);return t?yh(t):null}var yh=({total:e,from:t})=>({total:e,month:u1(t)});function PL(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 bh=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=Ds[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(Ds).map(([i,{of:a,name:l}])=>{let p=a(r).at(-1);return[i,{total:p?.total??0,tooltip:p&&hh(p.total,l(p))}]})),this._tier=Sp(r);let o=r?.days.slice(-365),s=o?.reduce((i,a)=>i+a,0);this._year=r==null?null:{total:s,tooltip:hh(s,`${zs(Cv(r.start,r.days.length-o.length))} \u2013 ${zs(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=wo-Qe.bottom,i=PL(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=gh(n[0].from),y=n.at(-1),w;if(p){let v=Math.min(LL,d*.7)/2;w={bars:n.map(({total:x},k)=>{let[$,S,C]=[f(k)-v,f(k)+v,a(x)],R=Math.min(OL,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:gh(y.to),...w,ticks:[[0,Sa.format(0)],[i,Sa.format(i)]],label:`${t.label} downloads over the last year, from ${b} to ${gh(y.to)}; the latest ${this._unit}: ${hh(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">${Ds[this._unit].label} downloads</dt><dd class="npm-stat-units" data-tooltip="${t?.tooltip||g}">${Object.keys(Ds).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(Ds).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>${d1.format(t.total)}</strong> <span>${Ds[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>${BL(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: ${wo}px"></div>`;let r=this._width;return u`<div class="npm-downloads-plot" style="height: ${wo}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="${wo}" viewBox="0 0 ${r} ${wo}" 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="${wo-4}">${n.first}</text><text class="npm-downloads-tick" x="${r-Qe.right}" y="${wo-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",bh);function wh(e,t){let n=vh(e);return[n,`${n}.js`,`${n}.cjs`,`${n}.mjs`,`${n}/index.js`].find(r=>r&&t?.has(r))}var vh=e=>e.replace(/^(?:\.\/)+/u,"").replace(/\/+$/u,""),Ca=/^licen[cs]e(?:-[\w.]+)?(?:\.(?:md|txt))?$/iu;function f1(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,""),$h=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}}]]),DL=new Map([...$h.values()].map(e=>[e.domain,e])),zL=new Set(["git+ssh:","ssh:","git+https:","git:","http:","https:","git+http:",...[...$h.keys()].map(e=>`${e}:`)]);function WL(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 eu=e=>{try{return new URL(e)}catch{return null}};function HL(e){let t=e.indexOf("@"),n=e.indexOf(":"),r=zL.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(eu(r))return eu(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}`),eu(s)}function UL(e){if(!e)return null;let t=HL(WL(e)?`github:${e}`:e);if(!t)return null;let n=$h.get(t.protocol.slice(0,-1)),r=n??DL.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 VL(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=UL(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=eu(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 Ws(e){let[,t,n=""]=/^npm:((?:@[^/@]+\/)?[^/@]+)(?:@(.*))?$/iu.exec(String(e??"").trim())??[];return t?{name:t,spec:n}:null}var m1=e=>VL(e)==="registry";var jL=[["dependencies",null],["peerDependencies","peer"],["optionalDependencies","optional"]];function Hs(e){let t=[];for(let[n,r]of jL)for(let[o,s]of Object.entries(e?.[n]??{})){let i=Ws(s)?.name??o;t.push({name:o,range:s,kind:r,opens:kl(i)&&m1(s)?i:null})}return t.toSorted((n,r)=>n.name.localeCompare(r.name)||(n.kind??"").localeCompare(r.kind??""))}function kh(e,t){let n=l=>new Map(Hs(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 tu=(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}`}`,()=>Lk(e.name,e.version,t),DS);return n.status==="ready"?n:null}var GL=/^https?:\/\/(?:www\.)?npmjs\.(?:com|org)\/package\/((?:@[^/]+\/)?[^/?#]+)(?:\/v\/([^/?#]+))?\/?(?:[?#].*)?$/u;function k1(e){let t=String(e??"").trim(),n=GL.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!kl(r)||o!==null&&!Nw(o)?null:{name:r,spec:o}}function KL(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=wh(o,n);s&&!r.includes(s)&&r.push(s)}return r}function qL(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 YL(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:KL(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:Sl.has(t)?t:"overview",...n}:null}var XL=3,g1=new Map,Bn=new Map,JL=1e4,ZL=5*6e4,h1=null;function nu(){let e=c.managedSession?`${c.managedSession.id}\0${c.managedSession.role}`:null;return e!==h1&&(g1.clear(),Bn.clear(),h1=e),g1}function b1(e,t){let n=nu();for(n.delete(e.name),n.set(e.name,{entry:e,details:t});n.size>XL;)n.delete(n.keys().next().value)}async function x1(e,t,n){let r=nu().get(`${e}@${t}`);if(r)return b1(r.entry,r.details),r;let o=await Mk(e,t,n),s=qL(o),i=YL(s,o);return s.npm.private||b1(s,i),QL(o),{entry:s,details:i}}function QL({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){nu();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(JL*2**(a-1),ZL);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?.(),eO()),null)).catch(()=>{}),i}var xh=!1;function eO(){xh||(xh=!0,queueMicrotask(()=>{xh=!1,O()}))}function ru(e){return Nn("versions",e,()=>Ik(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 tO(e={}){let t=new Map;for(let[n,r]of Object.entries(e))t.set(r,[...t.get(r)??[],n]);return t}function S1(e,t,n=Date.now()){let r=tO(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&&C1(e,i,n)&&{age:Th(i,n)}}})}function C1(e,t,n=Date.now()){return e.status==="ready"&&mh(t,{minimumReleaseAge:e.teamScoped?0:fh,now:n})}var Sh=new Intl.RelativeTimeFormat("en",{numeric:"auto"});function y1(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/864e5),r=n<60?Sh.format(-n,"day"):n<730?Sh.format(-Math.floor(n/30.44),"month"):Sh.format(-Math.floor(n/365.25),"year");return`${zs(Date.parse(e))} \xB7 ${r}`}var Ch=new Intl.RelativeTimeFormat("en",{numeric:"always"});function Th(e,t=Date.now()){let n=Math.max(0,Math.floor((t-Date.parse(e))/6e4));return n<60?Ch.format(-n,"minute"):n<1440?Ch.format(-Math.floor(n/60),"hour"):Ch.format(-Math.floor(n/1440),"day")}var Mh=e=>zs(Date.parse(e)),_1=e=>`Published on ${Mh(e)}`;function R1(e){let{name:t,version:n}=e.npm,r=ru(t),o=S1(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 x1(t,s)).details,dependencies:sO,openDependency:aO,open:(s,i,a)=>xr(t,s,"compare",i?{compareSpec:i,...Ho(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 _h(e){c.currentView="npm",c.npmLookup=e,c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1})}async function T1(e,t,n){let{packageName:r,packageSpec:o=null,bundleTab:s="overview"}=e;if(r==null)return _h({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&&nu().has(`${r}@${o}`);!a&&!f&&(_h({input:i,pending:!0,error:null}),n());try{({entry:l,details:p}=await x1(r,o??"latest",{signal:Le()}))}catch(m){return m?.name==="AbortError"||!t()?!1:(_a=null,_h({input:i,pending:!1,error:m.message}),{view:"npm"})}if(!t()||!_())return!1}_a?.name===r&&_a.spec===o&&(I1([i,...Ih().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:xl(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 nO=10,M1=()=>`deepview.npm.recent.${c.managedSession?.id??"anonymous"}`,_a=null;function Ih(){try{let e=JSON.parse(localStorage.getItem(M1())??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"&&k1(t)):[]}catch{return[]}}function I1(e){try{localStorage.setItem(M1(),JSON.stringify(e.slice(0,nO)))}catch{}}function rO(e){I1(Ih().filter(t=>t!==e)),O()}function A1(e){let t=k1(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 oO(e){e.preventDefault(),A1(e.currentTarget.querySelector('input[name="package"]')?.value)}function E1(){let e=c.npmLookup??{input:"",pending:!1,error:null},t=["admin","manage"].includes(c.managedSession?.role),n=Ih();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(No)}</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="${oO}"><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="${()=>A1(r)}">${r}</button> <button type="button" class="npm-lookup-recent-remove" aria-label="${`Remove ${r} from recent searches`}" @click="${()=>rO(r)}">×</button></li>`)}</ul></section>`:g}</section>`}function sO(e,t){let n=kh(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 F1=e=>{let t=ln(e)?.dependencies;return new Map((t?.held??t?.added??[]).map(({key:n,flags:r})=>[n,r]))},L1=({kind:e,name:t})=>`${e??""}\0${t}`,iO=/^(?:[\^~]|=)?v?(\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?)$/u,w1=e=>iO.exec(Ws(e)?.spec??e.trim())?.[1]??null,v1=e=>Ws(e)?.name??null;function aO({opens:e,from:t,to:n}){if(!e)return;let r=n&&w1(n),o=t&&w1(t);!o||!r||o===r||v1(t)!==v1(n)?xr(e):xr(e,r,"compare",{compareSpec:o})}function O1(e){let t=Hs(e.npm.manifest);if(t.length===0)return g;let n=F1(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(L1(r))??[],p=u`<span class="npm-dependency-name"><span class="bundles-source-path" data-tooltip-truncated data-tooltip="${o}">${o}</span>${tu(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 lO=[["source","Non-registry",()=>"From elsewhere than npm's registry"],["unimported","Unimported",e=>`Imported by nothing of ${e}`]];function cO(e){let t=F1(e),n=Map.groupBy(Hs(e.manifest).flatMap(r=>(t.get(L1(r))??[]).map(({check:o})=>({...r,check:o}))),({check:r})=>r);return lO.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 dO(e,t){let{name:n,version:r}=e.npm,o=Nn("tags",`${n}@${r}`,()=>Fk(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="${jg(t,s)}" target="_blank" rel="noopener noreferrer">${W(cl)}<span>${s}</span></a>`)}</span>`}function Us(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 $1(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 uO=/^\s*(Package no longer supported\.)\s+Contact Support at https:\/\/www\.npmjs\.com\/support for more info\.\s*$/u,Ah=e=>e.replace(uO,"$1");function Eh(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?Nd({repo:{github:a,directory:i.github.directory??"",commit:i.gitHead}})[0]:null,p=ru(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">${Ah(i.deprecated)}</dd>`:g} ${i.description?u`<dt>Description</dt><dd>${i.description}</dd>`:g} ${i.license?u`<dt>License</dt><dd>${f1(i.license,[...s??[]]).map(({text:f,file:m})=>Us(m,s,f))}</dd>`:g} ${i.author?u`<dt>Author</dt><dd class="bundle-origin-row">${i.authorAccount?u`${$1(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">${$1(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>${C1(p,d)?u`<span class="npm-recent">${y1(d)}</span>`:y1(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(ll)}<span>${l.commit.text}</span></a> ${dO(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 pO=(e,t)=>e.split(/(\s+)/u).map(n=>{let r=n.replace(/^\.\//u,"");return t?.has(r)?Us(r,t,n):n});function N1(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:wh(r[d],t)??vh(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=Hs(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,Uo(n,m))}${Us(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>${pO(f,t)}</code></div>`)}</dd>`:g}<dt>Dependencies</dt><dd class="npm-dependencies-fact">${Xd("dependencies",p,p===0?"None":p)}${cO(e.npm)}</dd>`}var Rh=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=S1(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",Rh);var B1=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 fO=new Map([["registry",{label:"Source: npm registry",icon:Yw}],["repository",{label:"Source: GitHub repository",icon:W(Kt)}],["osv",{label:"Source: OSV",icon:B1}]]);function mO(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function gO(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var ou=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 hO(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 bO(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 yO(e){let t=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,n=e.ghsa??gO(t)??(typeof e.id=="string"?e.id:null),r=fO.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}${ou}</a>`:g}</span>`}function wO(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?"":", "}${hO(n)}`)}</span>`:g}function su(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">${bO(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>`} ${yO(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} ${wO(e.cwe)}</div>${n?u`<div class="bundle-advisory-cvss-vector mono">${n}</div>`:g}</div></div></li>`}function Fh(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 vO=e=>e.subarray(0,8e3).includes(0),P1=(e,t)=>(e+Math.imul(t,97)>>>0)%107927,D1=e=>Uint8Array.from({length:256},(t,n)=>Number(n===10||e.includes(String.fromCodePoint(n)))),$O=D1(""),z1=D1(",;={}");function Lh(e,t=$O){let n=!vO(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(P1(s,i),a),a=0,s=0,i=0)}a>0&&o(P1(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 kO(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 xO(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 Oh(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?xO(a,l,n*i):kO(a,l);return Math.trunc(p*6e4/i)}var W1=/^[\w-]{6,}$/u,H1=/[\dA-Z]/u;function SO(e){let t=e.lastIndexOf("/"),n=e.slice(t+1),r=n.lastIndexOf("."),o=r>0?n.slice(r):"",s=n.slice(0,n.length-o.length);return{stem:s,key:`${e.slice(0,t+1)}\0${o}\0${s.length}`}}function CO(e,t){let n=0;for(;n<e.length&&e[n]===t[n];)n++;for(;n>0&&!"-._".includes(e[n-1]);)n--;let r=e.slice(n),o=t.slice(n);return n>0&&W1.test(r)&&W1.test(o)&&(H1.test(r)||H1.test(o))}function U1({sources:e,dests:t,pairs:n,used:r,record:o,punctuatedScoreOf:s},{remaining:i,open:a},l){let p=(y,w)=>new Map(w.filter(v=>y[v].type==="file").map(v=>[v,SO(y[v].path)])),d=p(t,a),f=p(e,i),m=Map.groupBy(f.keys(),y=>f.get(y).key),h=Map.groupBy(d.keys(),y=>d.get(y).key),b=[];for(let[y,w]of h){let v=m.get(y)??[];for(let x of w)for(let k of v){if(!CO(f.get(k).stem,d.get(x).stem))continue;let $=s(k,x,l);$>=l&&b.push({s:k,d:x,score:$})}}for(let{s:y,d:w,score:v}of b.sort((x,k)=>k.score-x.score))!n.has(w)&&!r.has(y)&&o(w,y,v)}function V1(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 _O=new Set(["file","contiguous-file"]),RO=new Set(["fifo","character-device","block-device"]),TO=/(?:^|\/)\.{0,2}(?:\/|$)/u;function MO(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 IO(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==="":TO.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 AO(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 EO(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 iu=e=>typeof e=="string"?n$(e):e;function FO(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(IO(r,o,t,n),s!==void 0&&MO(s),_O.has(o))return{path:r,type:"file",mode:s??420,data:EO(a)};if(o==="symlink"||o==="hardlink")return{path:r,type:o,target:AO(i,r,t)};if(o==="directory")return{path:r,type:o};throw RO.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 Ta(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:V1(iu(e.data),iu(t.data))}function LO(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 Nh(e,t,n){let r=new Map;for(let s of e){let i=FO(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,LO(i,r,t)):i.type!=="directory"&&o.set(s,i)}return o}var OO=100,NO=4,j1=e=>e.slice(e.lastIndexOf("/")+1);function G1(e,t){if(e.type==="symlink")return`l${e.target}`;let n=t(e);return`f${n.length}:${o$(n)}`}function BO({sources:e,dests:t,sourceNames:n,destNames:r,used:o,record:s,bytes:i}){let a=Map.groupBy(e.keys(),l=>G1(e[l],i));for(let l=0;l<t.length;l++){let p=-1,d=OO;for(let f of a.get(G1(t[l],i))??[])if(!(o.has(f)||!Ta(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 PO=new Map([[".ts",".js"],[".mts",".mjs"],[".cts",".cjs"],[".tsx",".jsx"]]),DO=new Map([...[".js",".mjs",".cjs",".jsx",".ts",".mts",".cts",".tsx"].map(e=>[e,"script"]),...[".css",".scss",".sass",".less"].map(e=>[e,"style"])]);function X1(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 K1(e){let{dirs:t,stem:n,extension:r}=X1(e);return JSON.stringify([t.map(o=>o==="lib"||o==="src"?null:o),n,PO.get(r)??r])}function zO(e){let{dirs:t,stem:n,extension:r}=X1(e),o=[n,DO.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 WO(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=>K1(o[m].path)),f=t.open.filter(m=>s[m].type==="file").flatMap(m=>(d.get(K1(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 HO(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=zO(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 UO(e,t,n){let r=au(e),o=t<6e4&&r.remaining.length*r.open.length<=n*n;WO(e,r,o,t),HO(e,r,o,t)}function q1(e,t){let n=new Map;for(let r of t)n.set(e[r],n.has(e[r])?-1:r);return n}function VO({sourceNames:e,destNames:t,record:n,scoreOf:r},{remaining:o,open:s},i){let a=q1(t,s),l=q1(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 Bh=(e,t)=>t.score-e.score||t.nameScore-e.nameScore;function jO(e,t){if(e.length<NO){e.push(t);return}let n=0;for(let r=1;r<e.length;r++)Bh(e[r],e[n])>0&&(n=r);Bh(e[n],t)>0&&(e[n]=t)}function GO({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)jO(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(Bh)){if(m<l)break;!n.has(d)&&!r.has(f)&&o(d,f,m)}}var au=({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()}),Y1=e=>e+Math.trunc(.5*(6e4-e));function Ph(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=y=>y.type==="file"?l.get(y)??l.set(y,iu(y.data)).get(y):null,f=y=>a.get(y)??a.set(y,Lh(y)).get(y),m=y=>p.get(y)??p.set(y,Lh(y,z1)).get(y),h={sources:e,dests:t,pairs:s,used:i,sourceNames:e.map(y=>j1(y.path)),destNames:t.map(y=>j1(y.path)),record(y,w,v){s.set(y,{source:w,score:v}),i.add(w)},bytes:d,scoreOf:(y,w,v)=>Oh(d(e[y]),d(t[w]),v,f),punctuatedScoreOf:(y,w,v)=>Oh(d(e[y]),d(t[w]),v,m,!0)};if(BO(h),o&&UO(h,n,r),n>=6e4)return s;VO(h,au(h),Y1(n));let b=au(h);return b.remaining.length*b.open.length>r*r||(GO(h,b,n),o&&U1(h,au(h),Y1(n))),s}function Ma(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 r$(t)}catch{return}}var KO=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(!KO.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 Z1(e,t,n){let r=Ma(e),o=Ma(t);if(r===void 0||o===void 0)return{binary:!0,blocks:[],insertions:null,deletions:null};let s=r===o?[]:Wp(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 qO=50,YO=1e3;function Dh(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 XO(e){if(e===!1)return null;let t=e===!0?qO: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 JO({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)=>Ta(e,t)&&(e.type!=="file"||e.mode===t.mode),Aa=(e,t,n,r=null)=>({status:e,old:t,new:n,similarity:r}),QO=/\.d\.(?:[^./]+\.)?[cm]?ts$/u,Q1=e=>e.endsWith(".mts")?"module":e.endsWith(".cts")?"commonjs":null,eN=/^export\s*\{\s*\}\s*;?$/u;function eC(e){if(e===null)return{proven:!0,runtime:"",loads:!1};let t=Ma(e);try{return t===void 0?{proven:!1}:Fh(t)}catch{return{proven:!1}}}function tN(e){if(![e.old,e.new].filter(o=>o!==null).every(o=>o.type==="file"&&QO.test(o.path))||e.old&&e.new&&e.old.mode!==e.new.mode)return e;let n=eC(e.new),r=eC(e.old);return!r.proven||!n.proven||r.runtime!==n.runtime&&!(e.old===null&&eN.test(n.runtime))||r.loads&&e.old&&e.new&&e.old.path!==e.new.path&&Q1(e.old.path)!==Q1(e.new.path)?e:{...e,typeOnly:!0}}function nN(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)=>Dh(s.path,i.path)),n.sort((s,i)=>Dh(s.path,i.path)),{changes:r,deleted:o,added:n}}function rN(e,t,{group:n,...r}){if(n===null)return Ph(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 Ph(p.map(h=>e[h]),l.map(h=>t[h]),r))o.set(l[d],{source:p[f],score:m})}return o}function zh(e,t,{renames:n=!0,renamesByPath:r=!0,renameLimit:o=YO,renameGroup:s=null,paths:i="tree",lines:a=!0,horizon:l,whitespace:p,ignoreCase:d}={}){let f=XO(n);JO({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}=nN(Nh(e,"old",h),Nh(t,"new",h)),v=f===null?new Map:rN(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,$)=>Dh((k.new??k.old).path,($.new??$.old).path)),(a?b.map(k=>({...k,...Z1(k.old,k.new,m)})):b).map(tN)}var lu=(e,{lo:t,start:n},r)=>e[n+(r-t)/2];function tC(e,t,{low:n,high:r},o,s){return e===-t||e-1<n||e!==t&&e+1<=r&&lu(o,s,e-1)<lu(o,s,e+1)?e+1:e-1}function oN(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=tC(f,d,a,t,n[d]),h=lu(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 nC(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=tC(b,d,a,l,f),w=lu(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 oN(n,l,p,{first:r,n:s,m:o,d,...a}),i}}throw new Error("no edit script between two lines")}var sN=/[\p{L}\p{N}_$]+|\s+|[^\p{L}\p{N}_$\s]/gu,iN=2e3,aN=800,du=.6;function cu(e,t){if(e.length>iN)return null;let n=e.match(sN)??[];return n.length>aN?null:{line:e,tokens:n,words:n.map(r=>(t.has(r)||t.set(r,t.size),t.get(r)))}}function rC({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 oC=(e,t)=>e.reduce((n,[r,o])=>n+o-r,0)/Math.max(1,t.length);function Wh(e,t){let n={a:e.words.map(()=>0),b:t.words.map(()=>0)},r=nC(e.words,t.words,n),o={a:rC(e,n.a),b:rC(t,n.b)};return{ranges:o,share:n.a.includes(1)?Math.min(oC(o.a,e.line),oC(o.b,t.line)):1,steps:r}}function lN(e,t){if(e===t)return{a:[],b:[]};let n=new Map,r=cu(e,n),o=cu(t,n);if(r===null||o===null)return null;let{ranges:s,share:i}=Wh(r,o);return i<=du?s:null}var sC=200,cN=5e6,dN=6,uN=60,pN=3;function fN(e){let t=new Map;for(let n of e?.tokens??[])t.set(n,(t.get(n)??0)+1);return t}function mN(e,t){let n=new Map,r=[e,t].map(f=>f.map(m=>cu(m,n))),o=r.map(f=>f.map(fN)),s=0,i=(f,m,h)=>{let b=0;for(let[y,w]of f)if(s+=pN,(b+=y.length*Math.max(0,w-(m.get(y)??0)))>du*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+=uN,a(f,m)===1/0)return 1/0;let{share:h,steps:b}=Wh(r[0][f],r[1][m]);return s+=b,h<=du?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 gN(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()>cN)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 hN(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+dN)-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 bN(e,t){if(e.length>sC||t.length>sC)return[];let n=mN(e,t);return gN(e.length,t.length,n)??hN(e.length,t.length,n)}function iC(e,t,n,r){let{whitespace:o,ignoreCase:s}=Ia(r);try{return Hp(e,t,n,{format:"normal",whitespace:o,ignoreCase:s}),!0}catch(i){if(i instanceof s$)return!1;throw i}}var aC=/[ \t\n\v\f\r]/u,lC=e=>{let t=e.split(`
|
|
145
|
-
`);return t.at(-1)===""&&t.pop(),t};function yN(e,t){for(let n=0,r=0;;n++,r++){let o="",s="";for(;n<e.length&&aC.test(e[n]);)o+=e[n++];for(;r<t.length&&aC.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 wN(e,t,n){try{if(!iC(e,t,n,{whitespace:"all"}))return!0}catch{return!0}let r=lC(e),o=lC(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]&&yN(r[s],o[i]))return!0;a<n.length&&({a1:s,b1:i}=n[a])}return!1}function vN(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 Hh(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 Uh(e,t,n){let r=new Map,o=new Set,s=0;for(let a of e){let l=Hh(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=Hh(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 $N(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=Uh(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,...Uh(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 Vh(e,t){let n=[...e],r=new Set(t),o=$N(n,r);return{root:o,paths:Uh(n,r,o).paths}}function dC({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=Hh(e,`${n}/`);return o===null?cC(e,n):o.slice(0,-1)||"."}function kN(e,t,n){if(!e&&!t)return null;let r=Map.groupBy([...e??[]],([,s])=>s),o=new Map([...r].map(([s,i])=>[s,dC(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 xN(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 g7(...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 SN(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 jh(e,t,n,r){return JSON.stringify([e,t,n,r])}function h7(e,t=""){let n=new Map;if(e?.kind!=="stasis"||!e.bundle)return n;let r=t?we(e):null,o=t?SN(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=jh(a,p,s,m);n.set(b,{key:b,parent:a,specifier:p,conditions:s,platform:m,target:h})}}return n}function $7(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,MN(o,a)??a])]:[l]},i=[];for(let a of e.values()){let l=s(a.parent).map(p=>t.get(jh(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 Vs(e){return ev(e)??0}function uC(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 k7(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 CN(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 pC(e){return(t,n)=>Math.abs(n.delta)-Math.abs(t.delta)||t[e].localeCompare(n[e])}function uu(e){return(t,n)=>n.bytes-t.bytes||t[e].localeCompare(n[e])}function _N(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 RN=250;function TN(e,t,n,r,o){let s=(l,p,d)=>l.filter(({path:f})=>f!==""&&f.isWellFormed()).map(({path:f},m)=>({name:f,data:_N(p.get(f),`${d}${m}`)})),i={paths:"keys",renameGroup:o,renameLimit:RN,lines:!1},a=zh(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 MN(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}function IN(){return{baseBytes:0,otherBytes:0,onlyBaseFiles:0,onlyOtherFiles:0,changedFiles:0}}function x7(e,t,n,r=Vh(e.keys(),t.keys()),o=[]){let{root:s,paths:i}=r,a=new Map([...i].map(([M,I])=>[I,M]));e=new Map([...e].map(([M,I])=>[i.get(M),I]));let l=M=>a.get(M)===M?{}:{basePath:a.get(M)},p=(M,I)=>{let U=CN(o[0]?.(M),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,$=M=>{let I=n(M),U=k.get(I);return U||(U=IN(),k.set(I,U)),U},S=new Set([...e.keys(),...t.keys()]);for(let M of S){let I=e.has(M),U=t.has(M),K=$(M);if(I&&U){let Q=e.get(M),ze=t.get(M),We=uC(Q,ze),Ke=p(a.get(M),M),Ce=Vs(Q),yt=We?Ce:Vs(ze);if(h+=Ce,b+=yt,K.baseBytes+=Ce,K.otherBytes+=yt,We&&!Ke.meta)x++;else{let Nr=yt-Ce;m.push({path:M,...l(M),baseBytes:Ce,otherBytes:yt,delta:Nr,...Ke,...We?{modified:!1}:{}}),v+=Nr,K.changedFiles++}}else if(I){let Q=Vs(e.get(M));h+=Q,y+=Q,K.baseBytes+=Q,K.onlyBaseFiles++,d.push({path:M,...l(M),bytes:Q})}else{let Q=Vs(t.get(M));b+=Q,w+=Q,K.otherBytes+=Q,K.onlyOtherFiles++,f.push({path:M,bytes:Q})}}let C=TN(d,f,e,t,n);if(C.size>0){let M=new Set(C.values());for(let[I,U]of C){let K=e.get(I),Q=t.get(U),ze=uC(K,Q),We=Vs(K),Ke=ze?We:Vs(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=>!M.has(I.path)))}let R=[],L=[],A=[],E=[];for(let[M,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:M,bytes:I.baseBytes}):K&&!U?L.push({pkg:M,bytes:I.otherBytes}):Q>0||I.baseBytes!==I.otherBytes?A.push({pkg:M,baseBytes:I.baseBytes,otherBytes:I.otherBytes,delta:I.otherBytes-I.baseBytes}):E.push({pkg:M,bytes:I.baseBytes})}return d.sort(uu("path")),f.sort(uu("path")),m.sort(pC("path")),R.sort(uu("pkg")),L.sort(uu("pkg")),A.sort(pC("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 S7(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()]))Gh(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&&!Gh(h,m)?mC(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 fC(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=fC(e),r=fC(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 Gh(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 mC(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 C7(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(Gh(d,f))continue;n.push({pkg:a,baseVersions:d,otherVersions:f,direction:mC(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 gC=`.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 hC=`.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 pu=`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 Kh=class extends N{static styles=[...N.styles,P(gC),P(hC),P(Uc),P(pu)];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">${Vc(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",Kh);function fu(e){return re("advisory-details-dialog",e)}var bC=`.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 yC=`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 qh=class extends N{static styles=[...N.styles,P(bC),P(pu),P(yC)];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",qh);function wC(e){return re("npm-compare-advisories-dialog",e)}var vC=(e,t)=>Fn(e,t).runsCode,Ea=(e,t=e.length>=wp)=>e.length===1?`line ${e[0]}`:`lines ${e.slice(0,5).join(", ")}${e.length>5?` and ${(e.length-5).toLocaleString("en")}${t?"+":""} more`:""}`,NN=/^[\w$.]+$/u,$C=(e,t=null)=>[...Map.groupBy([...e],([n])=>{let{name:r,tag:o}=qr.get(n);return r&&NN.test(r)?r:o})].map(([n,r])=>{let o=[...new Set(r.flatMap(([,s])=>s))].toSorted((s,i)=>s-i);return`${n} (${Ea(o,r.some(([,s])=>s.length>=wp))}${r.some(([s])=>t?.has(s))?", new":""})`}).join(", "),Yh=e=>{let t=new Set(e.flat());return t.size===1?[...t][0]:void 0},Xh=(e,t)=>t===void 0?{path:g,line:g}:{path:e,line:t},kC=(e,t=null)=>[...e].map(([n,r])=>`${qr.get(n).name} (${Ea(r)}${t?.has(n)?", new":""})`).join(", ");function xC(e,t,n){return e?[...Map.groupBy(e,([r])=>qr.get(r).tag)].map(([r,o])=>{let{note:s,mark:i}=qr.get(o[0][0]),a=o.map(([f,m])=>[qr.get(f).name,Ea(m)]),l=t===void 0?[]:o.filter(([f])=>!t?.has(f)).map(([f])=>qr.get(f).name),p=l.length===0?null:l.length===o.length?"New in this version":`New in this version: ${l.join(", ")}`,d=Xh(n,n===void 0?void 0:Yh(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 Jh=(e,t)=>Fn(e,t).exfiltration,SC=e=>[...$p].filter(([t])=>e.some(n=>n.has(t))).map(([,{name:t}])=>t).join(", "),Zh=(e,t)=>[...e].map(([n,r])=>`${$p.get(n).name} (${Ea(r)}${t!==void 0&&!t?.has(n)?", new":""})`).join(", "),BN=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 CC(e,t,n){return e?Ol(e).map(([r,o])=>{let s=Xh(n,n===void 0?void 0:Yh([...o.values()]));return u`<span data-bundle-view-source="${s.path}" data-bundle-view-line="${s.line}" class="${`npm-exfiltration is-${Nl(r,o,t)}`}" data-tooltip="${`${BN.get(r)}: ${Zh(o,t)}`}">${r}</span>`}):g}var Qh=e=>e.toLowerCase().replaceAll(" ","-");var _C=({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 eb={accept:"Accept","accept-with-nits":"Accept with nits (non-blocking)","request-changes":"Request changes",reject:"Reject"};function xK(e,t){return[e,t].every(n=>n===void 0||typeof n=="string")&&[e,t].some(n=>typeof n=="string")}function TC(e,t,n=[]){let r=Object.keys(eb),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 SK(e,t="accept"){let n=Object.keys(eb);return n.slice(Math.max(n.indexOf(t),n.indexOf(TC(e,null).verdictLimit)))}function mu({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 MC(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")||mu({npm:e})||i.some(a=>a.type==="malware")||s.some(a=>_C(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 CK(e,t,n=[]){return TC(e,t,n).coverage==="partial"&&(n===null||n.includes("package.json")||!e.some(r=>r.file==="package.json"&&Object.keys(eb).includes(r.status)))}var PN=e=>e.replaceAll(/[\\`*_{}[\]<>]/gu,"\\$&").replaceAll(/\r\n?/gu,`
|
|
151
|
-
`).replaceAll(`
|
|
152
|
-
`,`
|
|
153
|
-
`);function DN(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 RC(e,t=""){return DN(e).map(n=>`* ${t}${n.text.replaceAll(`
|
|
155
|
-
`,`
|
|
156
|
-
`)}`)}function _K(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=>RC(o.comment,`In ${PN(o.file)}: `)),...RC(e.comment)];return`Audited:
|
|
157
|
-
\`\`\`
|
|
158
|
-
${n}
|
|
159
|
-
\`\`\`${r.length>0?`
|
|
160
|
-
|
|
161
|
-
Notes:
|
|
162
|
-
${r.join(`
|
|
163
|
-
`)}`:""}`}var Oa=["critical","high","moderate","low","unknown"],ab=e=>Oa.includes(e.severity)?e.severity:"unknown",zN=[["affects",e=>`Affects ${e}`],["later",()=>"Later versions"],["fixed",e=>`Fixed in ${e}`]];function lb(e){return Nn("stats",e,()=>Ak(e),t=>({downloads:t.downloads??null,github:t.github??null}))}function cb(e){return Nn("advisories",e,()=>Ek(e),t=>({versions:t.versions??[],advisories:t.advisories??[],repository:t.repository!==!1,keptAt:t.keptAt??null}))}function db(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}${ou}</a>`;return u`<span class="npm-package-links">${r(`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`,"npmjs")} ${e.npm.private?g:r(yu(e),"socket.dev")}</span>`}var yu=e=>`https://socket.dev/npm/package/${e.npm.name}/overview/${encodeURIComponent(e.npm.version)}`;function Ba(e){let{name:t,version:n}=e.npm;if(e.npm.private)return null;let r=Nn("socket",`${t}@${n}`,()=>Ok(t,n),o=>({socket:o.socket??null}));return r.status==="ready"?r.socket:null}var OC=[["supplyChain","Supply chain",85,85],["vulnerability","Vulnerability",85,85],["quality","Quality",70,80],["maintenance","Maintenance",70,80],["license","License",80,80]],WN=50,rb=(e,t)=>e===100?"is-good is-max":e>=t?"is-good":e>=50?"is-fair":"is-poor",gu=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 HN(e){let t=Ba(e)?.scores;return t?u`<ul class="npm-extensions npm-socket-scores" aria-label="Socket scores">${OC.map(([n,r,,o])=>{let s=Math.round(t[n]*100);return u`<li><a class="${`npm-extension npm-socket-score ${rb(s,o)}`}" href="${yu(e)}" target="_blank" rel="noopener noreferrer">${gu(s)}<span>${r}</span><span class="npm-extension-count">${s}</span></a></li>`})}</ul>`:g}var ub=new Map([["critical","critical"],["high","high"],["middle","moderate"],["low","low"]]),hu=e=>e.replaceAll(/(?<=[a-z])(?=[A-Z])/gu," ").toLowerCase().replace(/^./u,t=>t.toUpperCase()),UN=new Map,tb=new WeakMap;function pb(e){let t=e?Ba({npm:e}):null;return t?(tb.has(t)||tb.set(t,Map.groupBy(t.alerts.filter(n=>n.file),n=>n.file)),tb.get(t)):UN}var fb=(e=[])=>e.map(t=>{let n=ub.get(t.severity)??"low";return u`<span class="${`npm-socket-file-alert sev-${n}`}" data-tooltip="${`Socket: ${hu(t.type)}, ${n}${t.note?` \xB7 ${t.note}`:""}`}">${hu(t.type)}</span>`});function NC(e,t){return MC(e.npm,cb(e.npm.name),Ba(e),ln(e.npm,t?t.npm?.version??"(empty)":null))}function BC(e,t){let n=mu(e),o=n&&t!==null&&[...t].every(Na)?[]:Ba(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`: ${Us(s,t,"its readme")}`:""}.</p>`:g} ${o.length>0?VN(e,o,t):g}</div>`}function VN(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="${yu(e)}" target="_blank" rel="noopener noreferrer">socket.dev${ou}</a></span><ul>${t.map(r=>{let o=ub.get(r.severity)??"info";return u`<li><span class="${`bundle-advisory-severity sev-${o}`}">${o}</span> <span class="npm-socket-alert-type">${hu(r.type)}</span> ${r.file?u`<span class="npm-socket-alert-file">in ${Us(r.file,n)}</span>`:g} ${r.note?u`<p class="npm-socket-alert-note">${r.note}</p>`:g}</li>`})}</ul></div>`}function PC(e,t,n=g){let r=lb(e.npm.name),o=l_(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">${db(e)}${t}</div>${n}</div>`}var jN=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>`,GN=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>`,KN=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>`,qN=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 mb(e){if(!e.npm.manifest.github?.github)return g;let t=lb(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/${Od(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(jN,n.stars,n.stars===1?"star":"stars","stargazers")} ${r(qN,n.forks,n.forks===1?"fork":"forks","forks")} ${r(GN,s,o===null?"open issues and pull requests":s===1?"open issue":"open issues","issues")} ${o===null?g:r(KN,o,o===1?"open pull request":"open pull requests","pulls")} ${n.archived?u`<span class="npm-github-archived">Archived</span>`:g}`}var DC=({name:e,version:t,private:n,manifest:r})=>n||!r.provenance?null:Nn("provenance",`${e}@${t}`,()=>Nk(e,t),o=>({provenance:o.provenance??null}));function gb(e){let t=DC(e);return t!==null&&(t.status==="loading"||!!t.provenance?.builder)}function YN(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 XN=(e,t)=>t?t==="github-hosted"||t==="gitlab-hosted":e==="GitHub Actions";function hb(e){if(e.npm.private)return g;let t=DC(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=YN(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="${XN(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 JN(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 zC(){let e=c.managedSession?.id;return()=>c.managedSession?.id===e}function WC(e,t){return su({...e,title:e.title??e.id,severity:ab(e),cvss:{score:e.cvss},vulnerable_versions:e.range},({title:n,severity:r,details:o})=>fu({heading:n,severity:r,markdown:o,isCurrent:t}))}function HC(e){let{name:t,version:n}=e.npm,r=cb(t),o=zC(),s=r.status==="ready",i=s?r.advisories:[],a=i.map(m=>JN(m,r.versions,n)),l=zN.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 ${d_(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=>WC(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 ZN=[...Nt].filter(([,{mark:e}])=>e!==null).map(([e])=>e),QN=[...Nt].filter(([,{mark:e}])=>e===null).map(([e])=>e),IC=[null,"notice","warn"];function UC(e){let t=new Map,n=new Map,r=0;for(let o of e){let s=Go(o);for(let i of s){t.set(i,(t.get(i)??0)+1);let a=Ko(o,i);IC.indexOf(a)>IC.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 AC=new WeakMap;function Cr(e){let t=e.npm?Kd(e):e,n=AC.get(e);if(n?.of!==t){let{sources:r,sourcesContent:o}=e.json,s=new Map(r.map((h,b)=>[h,WS(e,h,o[b])]).filter(([,h])=>h)),i=new Set(r.filter((h,b)=>typeof o[b]!="string")),{counts:a,marks:l,unreadable:p}=UC(s.values()),d=gi(e),f=xn(e),m={files:0,lines:0,unpacked:0};for(let h of r.filter(b=>!Na(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,$b(h)])),binaries:new Set([...i].toSorted((h,b)=>h.localeCompare(b))),types:_B(r,f,d),content:m},AC.set(e,n)}return n}var bu={key:null,chip:null},VC=e=>`${e.npm.name}@${e.npm.version}`,jC=e=>bu.key===VC(e)?bu.chip:null;function GC(e){let t=jC(e);return t&&{label:t.label,keeps:t.keeps,clear:()=>{bu={key:null,chip:null},O()}}}function ob(e,t,n,r,{classes:o="",tooltip:s=g}={}){let i=jC(e)?.id===t.id;return u`<li><button type="button" class="${`npm-extension npm-category${o}`}" aria-pressed="${String(i)}" data-tooltip="${s}" @click="${()=>{bu={key:VC(e),chip:i?null:t},O()}}">${n}<span class="npm-extension-count">${r.toLocaleString("en")}</span></button></li>`}function KC(e,t,n){let{name:r}=Nt.get(n),{byPath:o,counts:s,marks:i}=Cr(t),a=i.get(n);return ob(e,{id:`category:${n}`,label:r,keeps:l=>o.has(l)&&Go(o.get(l)).includes(n)},u`<span>${r}</span>`,s.get(n),{classes:a?` is-${a}`:""})}function qC({counts:e,marks:t,unreadable:n},r,o,s){let i=ZN.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 YC(e,t){return qC(Cr(t),t.json.sources.length,"files",n=>KC(e,t,n))}function bb(e,t,n=!1,r=void 0){let{byPath:o,sizes:s}=Cr(e),i=n?t:void 0;return u`${xC(vC(e,t),void 0,i)}${CC(Jh(e,t),XC(r),i)}${GS(e,t,s.get(t))}${jS(o.get(t))}`}var XC=e=>e===void 0||e?.details.npm&&!Kd(e.details)?void 0:e&&Jh(e.details,e.path);function yb(e,t,n=[],r=void 0){let{stamps:o,exfiltration:s}=Fn(e,t),i=XC(r),a=i===void 0?null:new Map(Ol(s).map(([l,p])=>[l,Nl(l,p,i)]));return[...n.map(l=>({name:hu(l.type),severity:ub.get(l.severity)??"low"})),...o.map(l=>a?.has(l.name)?{...l,severity:a.get(l.name)}:l)]}var nb=new WeakMap;function eB(e,t){let n=e&&t?.npm?ln(t.npm,e.npm?.version??"(empty)"):null;if(!n)return null;if(!nb.has(n)){let r=new Map;for(let{host:o,places:s}of wb(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}]);nb.set(n,r)}return nb.get(n)}function tB(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 JC={icon:(e,t)=>kn(e,t.map(([n,r])=>Uo(n,r)).find(qw)),alerts:e=>pb(e?.npm),alertTags:fb,newHosts:eB,newHostTag:tB,tag:(e,t,n)=>bb(e,t,!1,n),flags:(e,t,n)=>yb(e,t,[],n),warning(e,t){let{byPath:n}=Cr(e),r=UC(t.filter(i=>n.has(i)).map(i=>n.get(i))),{counts:o,marks:s}=r;return qC(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>`})}},nB=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"]]),rB={critical:"is-critical",high:"is-warn",moderate:"is-moderate",low:"is-low"},oB=e=>e>=730?`${Math.floor(e/365)} years`:e>=60?`${Math.floor(e/30)} months`:`${e} days`;function ZC(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})=>[nB.get(p)??p,d]),a=s&&i.length>0?`Lowered by ${Math.round(s.by*100)}%: out ${oB(s.days)}${s.tier===null?"":`, its package npm's ${Qd(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 ${rB[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>`}">${gu(n)}<span>Risk</span><span class="npm-extension-count">${n}</span></span></li>`}var QC=(e,t)=>[aB(t.get("malware")),lB(t.get("deprecated")),uB(e,t.get("publisher")),pB(e,t.get("provenance-lost")),fB(e,t.get("held-install-scripts")),...hB(e,t),...mB(e,t),gB(t.get("new-hosts")),bB(t.get("too-new"))],wb=e=>new Map((e?.findings??[]).map(t=>[t.id,t]));function e_(e,t){if(!e||!t?.npm)return g;let n=[e.npm??{name:t.npm.name,version:"Empty package",private:!0},t.npm],r=n_(n),o=ln(t.npm,e.npm?.version??"(empty)"),s=wb(o),i=[ZC(o),...QC(n,s),i_(n,r),...a_(n,r,s.get("malware")),$B(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 t_(e){let{npm:t}=e,n=n_([t]),r=ln(t),o=wb(r),s=r?.oldVersion?[{name:t.name,version:r.oldVersion},t]:[t],i=[ZC(r),...QC(s,o),i_([t],n),...a_([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 sB(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?sb("npm-compare-unreadable","Now unreadable",t,n):vo(`${vb[e.severity]} npm-held-file npm-compare-unreadable`,"Now unreadable",t,n)}var vb={critical:"is-critical",high:"is-warn",moderate:"is-moderate"},iB=e=>[...vp.keys()].map(t=>{let n=e.get(`held-${Qh(t)}`),r=n?.files??[],o=s=>s.added?new Map([...s.found].filter(([i])=>!s.added.has(i))):void 0;return vo(`${vb[n?.severity]} npm-held-file npm-files-${Qh(t)}`,t,r,s=>Zh(s.found,o(s)),SC(r.map(s=>s.found)))});function n_(e){let t=cb(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 r_=(e,t)=>e===t?`${t??"\u2013"}`:`${e??"\u2013"} \u2192 ${t??"\u2013"}`,o_=e=>Oa.find(t=>e.some(n=>ab(n)===t));function aB(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 lB(e){return e?u`<li><span class="npm-extension npm-compare-deprecated" data-tooltip="${Ah(e.message)}">Deprecated</span></li>`:g}var cB={critical:"is-from-known",high:"is-to-unknown"},dB={known:"is-known",maintainer:"is-maintainer"},EC={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 uB([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 ${dB[y]??"is-unknown"}`}">~${b}</span>`,m=cB[a]??"is-to-known",h=u`A different npm account published the open version,<br>${EC[d]},<br>after ${EC[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="${$o("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 pB([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="${$o("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 fB(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>`:ib(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="${$o("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 s_=8;function mB(e,t){let n=o=>t.get(o)?.files??[],r=(o,s)=>`${vb[t.get(o)?.severity]} npm-held-file ${s}`;return[vo(r("held-runs-code","npm-files-runs"),"Runs code",n("held-runs-code"),o=>$C(o.found,o.added),kp(n("held-runs-code").map(o=>o.found)),null,!1),vo(r("held-credentials","npm-files-credentials"),"Credentials",n("held-credentials"),o=>kC(o.found,o.added)),...iB(t),sb("npm-compare-large","Large new code",n("large-code"),o=>ge(o.bytes)),sB(t.get("now-unreadable")),vo(r("held-obfuscated","npm-files-obfuscated"),"Obfuscated",n("held-obfuscated"),o=>`${ih(o.found)}${o.added?`, new since ${e[0].version}`:""}`),sb("npm-compare-binary","Binary code",n("binary-code"),o=>`${ge(o.bytes)}, not UTF-8 or holding a NUL`)]}function gB(e){let t=e?.hosts??[],n=t.map(({host:s,places:i})=>{let a=i.slice(0,s_).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 vo("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 sb(e,...t){return vo(`npm-compare-file ${e}`,...t)}function vo(e,t,n,r,o=null,s=null,i=!0){if(n.length===0)return g;let a=n.slice(0,s_),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 hB(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="${$o("From elsewhere than npm's registry",[e.at(-1)],[ib(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="${$o(`Nothing imports ${a}`,[e.at(-1)],[ib(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 bB(e){return e?u`<li><span class="npm-extension is-warn npm-compare-published" data-tooltip="${_1(e.published)}">${Th(e.published)}</span></li>`:g}function i_(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-${o_(n)}`,s=n.filter(d=>!r.includes(d)).length,i=r.filter(d=>!n.includes(d)).length,a=$o("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">${Oa.map(f=>[f,d.filter(m=>ab(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">${r_(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="${()=>yB(e,t)}">${p}</button></li>`:u`<li><span class="${`npm-extension npm-compare-advisories ${o}`}" data-tooltip="${l}" .tooltipContent="${a}">${p}</span></li>`}var ib=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>`,$o=(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 yB([e,t],[n,r]){let o=zC(),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=>WC(p,o))}));wC({heading:`Advisories \xB7 ${e.name} ${e.version} \u2192 ${t.version}`,groups:s,isCurrent:o})}function wB(e,t,n){if(e===null||e>=n)return!1;let r=o_(t);return r===void 0||Oa.indexOf(e<=25?"critical":"high")<Oa.indexOf(r)}function a_(e,t,n=null){let r=e.at(-1),o=e.map(s=>Ba({npm:s})?.scores??null);return!o.at(-1)||n?[]:OC.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&&wB(d,t.at(-1),a))?[]:s==="maintenance"&&r.manifest?.deprecated&&d>=WN?[]:[u`<li><a class="${`npm-extension npm-socket-score ${rb(d,l)}`}" href="${yu({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="${$o(`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 ${rb(m,l)}`}">${gu(m)}${m}</span>`),s==="vulnerability"?`Shown under ${a}, where worse than the advisories found`:`Shown under ${a}`)}">${gu(d)}<span>${i}</span><span class="npm-extension-count">${r_(f,d)}</span></a></li>`]})}var vB={critical:"is-unpopular",high:"is-low",moderate:"is-mid"};function l_({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 ${vB[s]??"is-low"}`:`npm-downloads-tier ${o}`,l=n?l_(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}">${Qd(r??1/0)}</span>`}function $B(e,t){let n=lb(e);return t?u`<li>${c_(t,n.status==="ready"&&n.downloads?p1(n.downloads):null,!0)}</li>`:g}var kB=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>`,Fa=e=>new Intl.NumberFormat("en",{style:"unit",unit:e,unitDisplay:"long"}),La={minute:Fa("minute"),hour:Fa("hour"),day:Fa("day"),month:Fa("month"),year:Fa("year")};function d_(e){let t=Math.max(0,Math.floor(e/6e4)),n=Math.floor(t/1440);return t<60?La.minute.format(t):t<1440?La.hour.format(Math.floor(t/60)):n<60?La.day.format(n):n<730?La.month.format(Math.floor(n/30.44)):La.year.format(Math.floor(n/365.25))}function xB({compared:e},{created:t,gap:n}){if(!t)return g;let[r,o]=e,s=d_(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 u_(e,t){let n=tu(e.flags);if(t!=="added"||!e.level)return[n,g];let r=e.month?yh({total:e.month.total,from:new Date(e.month.from)}):null;return[n,e.uncounted?kB:c_(e,r),e.compared?xB(e,e):g]}function SB(e,t){let{counts:n}=Cr(t),r=QN.filter(o=>n.has(o));return r.length===0?g:u`<ul class="npm-extensions" aria-label="Readable files">${r.map(o=>KC(e,t,o))}</ul>`}function $b(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 FC(e,t,n=new Map){let r=new Map;for(let o of e){let s=$b(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 CB=/^(?:package\.json|readme(?:\.md)?)$/iu,Na=e=>CB.test(e)||Ca.test(e);function _B(e,t,n=new Map){let r=e.filter(Na),o=new Set(e.filter(l=>!Na(l)).map($b)),{files:s,bytes:i,lines:a}=FC(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:FC(e,t,n).filter(l=>o.has(l.extension))}}var LC=({bytes:e,lines:t})=>t===null?ge(e):`${ge(e)} \xB7 ${t.toLocaleString("en")} LoC`;function RB(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?ob(e,{id:"package",label:"Package",keeps:Na},u`<span>Package</span>`,n.package.files,{tooltip:`package.json, readme and license: ${LC(n.package)}`}):g} ${n.extensions.map(o=>ob(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:LC(o)}))}</ul>`}function p_(e,t,n){let r=[["languages","Languages",t],["readable","Readable",SB(e,n)],["types","File types",RB(e,n)],["socket","Socket",HN(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 f_(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 wu=({severity:e})=>xv.indexOf(e),TB=(e,t)=>e.reduce((n,r,o)=>n||r.name.localeCompare(t[o].name),0);function m_(e,t,n){return e.map(r=>({row:r,path:n(r),flags:t(r).toSorted((o,s)=>wu(o)-wu(s)||o.name.localeCompare(s.name))})).toSorted((r,o)=>(o.flags.length>0)-(r.flags.length>0)||r.flags.length>0&&(wu(r.flags[0])-wu(o.flags[0])||o.flags.length-r.flags.length||TB(r.flags,o.flags))||r.path.localeCompare(o.path)).map(({row:r})=>r)}function kb(e){return{...R1(e),files:JC,badges:e_,dependencyTags:u_,reviewVerdictLimit:NC}}var xb=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",xb);function g_({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:MB(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 MB(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,Pa=null,vu=0;function IB(){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=IB(),o=++vu;clearTimeout(Pa),Pa=null,r.className=t,r.textContent=e,requestAnimationFrame(()=>{vu===o&&r.classList.add("visible")});let s=()=>{vu===o&&AB()};return n>0&&(Pa=setTimeout(s,n)),s}function AB(){vu++,cn&&(clearTimeout(Pa),Pa=null,cn.classList.remove("visible"))}function h_(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 b_(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=Es(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 y_({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?As(l,f.integrity).find($=>$.managedId===i):null;k&&(c.bundleCompare={bundle:f.integrity,target:k.integrity,mode:xl(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 Dc(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 EB(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 w_(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:EB(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 Sb(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function v_(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 $_(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 $u=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 k_(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,S_=()=>Promise.resolve(!0);function C_(e){S_=e}function ko(){Pn?.controller.abort(),Pn=null}function FB(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 __(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 ko(),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){ko();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,LB(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?FB(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&&_b(p,b,p.signal).then(y=>(!y&&b.current()&&(ko(),_r()),y))),b.ready}function LB(e){let{signal:t,controller:n,current:r}=e;Zk(e.teamId,{signal:t,reportId:e.reportId,onTeams:async(o,s)=>{let i=()=>r(o);return i()?await S_(i,o,s)&&i():!1},onUpdate:o=>r(o)?(e.version++,_b(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 _b(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=OB(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 __(r.promise,o)}finally{n.removeEventListener("abort",s)}return e.current(n)?t.current()?i?t.version<e.version?_b(e,t,n):!0:!1:!0:!1}async function OB(e,t,n){if(t.hydration&&!await __(t.hydration.start(),n))return!1;for(;t.current()&&!n.aborted&&t.version<e.version;){let r=e.version,o=x_(e.teamId,n),s=c.managedReports.filter(a=>t.reports.some(l=>l._managedReportId===a.id));if(!(await Promise.all(s.flatMap(a=>[Cb(a.id,{signal:n,readAnnotations:o}),Sd(a.id,{signal:n,readAnnotations:o})]))).every(Boolean)||!t.current()||n.aborted)return!1;t.version=r}return!n.aborted&&t.current()}var R_=`*,*: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 T_=`: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 Rb=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=Xl(),this._vaultStateUnsub=kt(()=>{if(this._settled)return;let t=Xl();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 Gp({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 Vp({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 Kp({seal:n}),this._phase="Encrypting triage data\u2026",await im({seal:n}),this._phase="Encrypting report files\u2026",await tf({seal:n}),this._phase="Encrypting bundles\u2026",await rf({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",Rb);function ku(){return re("passkey-setup-dialog")}var Tb=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 Si({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",Tb);function xu(){return re("passkey-unlock-dialog")}var M_=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>`,PB=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 Mb(){if(!Ne)return;if(await Tt(),_()){Ne.hidden=!0;return}if(!tr()){Ne.hidden=!0;return}let e=ft();Ne.hidden=!1;let t=Xo();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(M_,Ne)):e?(Ne.dataset.tooltip="Encryption on, locked \u2014 click to unlock",Ne.setAttribute("aria-label","Unlock encrypted data"),J(M_,Ne)):(Ne.dataset.tooltip="Encryption off \u2014 click to enable",Ne.setAttribute("aria-label","Enable encryption"),J(PB,Ne))}async function DB(){if(confirm(`Disable encryption?
|
|
168
|
-
|
|
169
|
-
Your local triage and report data will be rewritten as plaintext.
|
|
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 jp({migrate:async({open:t})=>{await qp({open:t}),await am({open:t}),await nf({open:t}),await of({open:t})}}))?.disabled&&alert(`Encryption disabled. Your data is now plaintext.
|
|
172
|
-
|
|
173
|
-
To complete cleanup, remove the DeepView passkey from your password manager / OS settings:
|
|
174
|
-
\u2022 macOS / iOS: Settings \u2192 Passwords
|
|
175
|
-
\u2022 Windows: Settings \u2192 Accounts \u2192 Sign-in options \u2192 Passkeys
|
|
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 I_(){Mb()}function A_(e){if(!e||e===Ne)return;Ne=e;let t=!1;Ne.addEventListener("click",async()=>{if(await Tt(),!_()&&!t){t=!0;try{if(!ft()){await ku();return}if(!Xo()){await xu();return}await DB()}finally{t=!1}}}),kt(Mb),Mb()}var E_=`.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 Ab(){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 Ib=class extends N{static styles=[...N.styles,P(E_)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await ds()){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=Ab(),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",Ib);function F_(){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,Lb=!1,Su=!1,Eb=0;function Fb(){return Ab()==="webkit"}function L_(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 O_(){if(!un)return;if(_()||!dn||dn.persisted!==!1||!Lb){un.hidden=!0;return}un.hidden=!1;let e=dn.usage===null||dn.quota===null?"":` Using ${L_(dn.usage)} of ${L_(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. "+(Fb()?"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 B_(e,t){let n=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!Fb()&&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 `+(Fb()?"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 Cu(){if(await Tt(),!un||_()){O_();return}let[e,t]=await Promise.all([um(),(async()=>{try{return(await ce()).length>0||await Jp()}catch{return!1}})()]);dn=e,Lb=t,O_()}function Ob(){!un||Eb||(Eb=setTimeout(()=>{Eb=0,Cu()},1e3))}async function N_(){if(Su||(await Cu(),_()||dn?.persisted!==!1||!Lb||Su))return;Su=!0;let e=await ds();B_(e,!1),await Cu()}async function WB(){if(dn&&dn.persisted===!1){Su=!0;let e=await ds();B_(e,!0),e||await F_()}await Cu()}function P_(e){un=e,un&&(un.addEventListener("click",()=>{WB()}),mt((t,n)=>{Ob(),n==="save"&&N_()}),N_())}function Nb(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=lo(r),s=r.reports.filter(i=>Ie(i)!==ke).length;return u`<button type="button" class="landing-workspace" data-landing-workspace="${r.id}">${W(Bo)} <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 Bb(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(n=>Be(n)==="revalidation");return t.length>0?t:e}function Pb(e,t=()=>[]){let{groups:n,conflicts:r}=sd(e,{hideRuledOut:!0});if(r.size>0)return{appMode:!1};let o=id(n,t,Bb);return zl(o,{tabs:Bb,kindOf:Be,severityMode:"corrected"})?{appMode:!0,appFindings:o.filter(s=>Bb(s).some(i=>i.isApp)).length}:{appMode:!1}}var Mt=null,Db=0;Yi(()=>{Db++});function D_(e,t,n,{complete:r,isCurrent:o}){Mt={id:e.id,membership:JSON.stringify(e.reports.toSorted()),reports:t,token:n,complete:r,isCurrent:o}}function z_(e){return!Mt||Mt.id!==e.id||!Mt.isCurrent()||Mt.membership!==JSON.stringify(e.reports.toSorted())||!Fm(e,Mt.token)?null:(Mt.linksRevision!==Db&&(Mt.metadata=Mt.complete?Pb(Mt.reports,gt):{appMode:!1},Mt.linksRevision=Db),Mt.metadata)}async function W_(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?Pb(t,gt):{appMode:!1};await Om(e,a,i)&&o()&&await s(a)}var Rr=null;function zb(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,zb(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(Bo)}</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",Oo],["manage-scans","Scans",Vn],["manage-reports","Reports",vw]]:[],["npm","npm packages",No]].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(al)}</span><span>Manage</span></button></div>`:g}`,p)}var H_=`.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 UB=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],Wb=class extends N{static styles=[...N.styles,P(rn),P(H_)];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 $m(this.workspace):await vm(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;fv(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 t0({tabs:UB,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",Wb);function U_({workspace:e}={}){return Fl("workspace-export-dialog",{workspace:e??null},t=>{t.workspace=null})}async function V_(e){await U_({workspace:e})}var G_="deepview.passkey.firstImportPrompted";function VB(){try{return localStorage.getItem(G_)==="1"}catch{return!1}}function j_(){try{localStorage.setItem(G_,"1")}catch{}}async function _u(){if(ft()||!tr()||VB())return;if(!confirm(`Encrypt your DeepView data with a passkey?
|
|
180
|
-
|
|
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
|
-
|
|
183
|
-
You can change this anytime from the lock icon in the sidebar header.`)){j_();return}await ku(),ft()&&j_()}var Hb=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",Hb);function K_(){return re("new-workspace-dialog")}var Ub=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",Ub);function q_({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 Vb=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 Sm({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=Cm(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",Vb);function Y_({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(El(i.detail?.cause))}),document.body.append(s)})}var jb=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",jb);function X_({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 Gb=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",Gb);function J_({name:e,inRemote:t}={}){return re("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var Kb=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",Kb);function Z_({name:e,workspaceName:t}={}){return re("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var qb=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",qb);function Q_({name:e,workspaceName:t}={}){return re("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var Yb=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",Yb);function eR(){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 Xb=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",Xb);function tR(){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,ny=null;function Ru(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}bv();function jB(){return Zt().size}function GB(){return no().size}var za=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,uy="application/x-deepview-report",ry="application/x-deepview-source-ws",Wa="application/x-deepview-bundle",Tu=!1,Mu=!1,KB={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[ke]:"Links"},nR=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",ke],Tr="",Ut=!1,Ha=new Map,rR="",Ua=new $u;function qB(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?Cs(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===rR)){rR=a;for(let l of i){let p=Ha.get(l.id)??new Set;p.add(o),Ha.set(l.id,p)}}}function oR(e,t={}){let r=`file-item${hR(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 hR(e,t){return e===c.currentFile&&t===Cs(e)&&(c.currentView==="findings"||c.currentView==="files"||c.currentView==="links")}function bR(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 YB=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>`,XB=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 JB(){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">${YB}</button></span></li>`}function ZB(){let e=$_(c.managedTeams,Tr);return e.length===0?g:u`${bR("Teams")} ${Z(e,({team:t})=>t.id,({team:t,reports:n,bundles:r})=>{let o=t.app,s=o?.appMode===!0,i=Ua.shown(t.id,"reports",s,Ut),a=Ua.shown(t.id,"bundles",s,Ut),l=n.filter(p=>p.analyzer!==ke).length;return u`<li class="${`file-item team-item${wR(t)?" current":""}`}" data-team-id="${t.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{Ir(t)}}">${CR}<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="${()=>{Hk(t)}}">${_R}</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=>t2(t,p)):g} ${a?Z(r,p=>p.id,p=>r2(t,p)):g}`})}`}function yR(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">${k_(e)}</span></button></li>`}function QB(){return Z(c.managedTeams??[],e=>e.id,e=>yR(e.name,CR,wR(e)||(e.reports??[]).some(t=>vR(e,t))||(e.bundles??[]).some(t=>$R(e,t)),()=>{Ir(e)}))}function e2(e){return Z(e,t=>t.id,t=>yR(t.name,SR,RR(t)||t.reports.some(n=>hR(n,t.id))||t.bundles.some(n=>xR(n,t.id)),()=>IR(t.id)))}function wR(e){return c.currentManagedTeam===e.id&&!!c.currentWorkspace&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function vR(e,t){return c.currentManagedTeam===e.id&&c.currentManagedReport===t.id&&["findings","links"].includes(c.currentView)}function $R(e,t){return c.currentManagedTeam===e.id&&yr(c)===t.id}function t2(e,t){let n=oe(t.filename),r=vR(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="${Sb(t)||g}" data-tooltip-placement="right-start" @click="${()=>{n2(e,t)}}">${W(ye[Ym(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function n2(e,t){return Ir(e,t.id)}function r2(e,t){let n=$R(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="${Sb(t)||g}" data-tooltip-bundle="${t.kind||g}" data-tooltip-built="${t.provenance==="build"?"true":g}" data-tooltip-stats="${v_(t)||g}" data-tooltip-commit="${t.summary?.commit||g}" data-tooltip-commit-info="${Fs(t.commitInfo,t.summary?.commit,t.repoFullName)??g}" data-tooltip-placement="right-start">${kR}<span class="file-label">${t.filename}</span></button></li>`}function o2(){return u`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var kR=u`${W(Oo)}`;function xR(e,t){return c.selectedBundle===e&&c.currentView==="bundles"&&t===c.selectedBundleWorkspace}function sR(e,t={}){let{integrity:n,name:r}=e,o=xR(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}`}">${kR}<span class="file-label">${r}</span></button></li>`}function s2(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 i2(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 SR=u`${W(Bo)}`,CR=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>`,a2=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>`,l2=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>`,_R=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 RR(e){return c.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function c2(e,{app:t,compact:n,reports:r,bundles:o,showReports:s,showBundles:i}){let l=`file-item workspace-item${RR(e)?" current":""}`;return u`<li class="${l}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${SR}<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">${_R}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${a2}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${l2}</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 Tr?oe(e).toLowerCase().includes(Tr):!0}var Jb=(e,t)=>oe(e).localeCompare(oe(t));async function H({revealSelection:e=!1}={}){await Tt();let t=Jt();if(zb({serverMode:t,session:c.managedSession,teams:c.managedTeams,sessionPending:Co,teamsPending:_o,alternateMode:Jn(c.serverModeConfig)?"e2e":"local",onSwitchMode:MR}),Au(),_()){if(Ua.sync(c,e),!Co&&!_o&&!Gs&&!pn&&_r({catalogOnly:!0}),c.bundles=(c.bundles??[]).filter(w=>w.managedId||w.npm),c.storedFiles=[],Nb([]),!B)return;J(u`${ZB()}`,ny);let y=B.querySelector("#sidebar-rail");y?.setAttribute("aria-label","Teams"),y&&J(QB(),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(Ua.sync({managedTeams:[]}),B?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),B?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await lm(),t!==Jt()){await H();return}xt().catch(()=>{}),Xi().catch(()=>{});let n=await ce();if(t!==Jt()){await H();return}let r=Y();qB(r,e),Nb(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,Ob(),!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 nR)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=>!Tr||y.name.toLowerCase().includes(Tr)||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`${JB()} ${Z(d,y=>y.id,y=>{let w=[],v=[];for(let M of y.reports)js(M)&&(s.has(M)?w.push(M):v.push(M));w.sort(Jb),v.sort(Jb);let x=[],k=[];for(let M of y.bundles){let I=a.get(M);I?(!Tr||js(I.name))&&x.push(I):Tr||k.push(M)}let $=z_(y)??lo(y),S=$?.appMode??Lm(y)===!0,C=Ha.get(y.id),R=!S||Ut||C?.has("reports")===!0,L=!S||Ut||C?.has("bundles")===!0,A=[...w,...v].filter(M=>Ie(M)!==ke).length,E=x.length+k.length;return u`${c2(y,{app:$,compact:S,reports:A,bundles:E,showReports:R,showBundles:L})} ${R?u`${w.map(M=>oR(M,{indented:!0,workspaceId:y.id}))}${v.map(M=>i2(M,y.id))}`:g} ${L?u`${x.map(M=>sR(M,{workspaceId:y.id}))}${k.map(M=>s2(M,y.id))}`:g}`})} ${nR.map(y=>{let w=(p.get(y)??[]).toSorted(Jb),v=y==="default";return w.length===0&&!(v&&Tu)?null:u`${bR(KB[y]??y,{dropTarget:v})} ${w.map(x=>oR(x))}`})} ${f.length>0||Mu?o2():null} ${Z(f,y=>y.integrity,y=>sR(y))}`,ny);let m=B.querySelector("#sidebar-rail");m?.setAttribute("aria-label","Workspaces"),m&&J(e2(r),m);let h=B.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=jB());let b=B.querySelector('sidebar-view-button[kind="repositories"]');b&&(b.count=GB()),fn(),Ef(n,TR)}var Zb=!1;function TR(){Zb||(Zb=!0,requestAnimationFrame(()=>{Zb=!1,H().catch(e=>console.warn("counts repaint:",e))}))}kt(()=>{H()});Nm(TR);async function MR(){B?.querySelector("#user-menu")?.hidePopover?.(),It?await k2():mf()&&await Fu()}function IR(e){let t=c.currentView==="findings"||c.currentView==="files";(e!==c.currentWorkspace||!t)&&Ks(e)}async function iR(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&&Ua.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=Ha.get(f)??new Set;h.has(m)?h.delete(m):h.add(m),Ha.set(f,h),await H();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await MR();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}),cy(f,c.bundleDetailsTab),O(),H(),hd(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 K_();f&&(await _u(),await Wf(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&&Y_({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&&V_(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 Rc(h)}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let{confirmed:y,mode:w,triage:v}=await q_({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 gR(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&&IR(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)&&Va(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=>ng(C.id,x)).map(C=>C.id),{confirmed:S}=await J_({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 mR({deleteFromRemoteWorkspaceIds:$})}catch(C){alert(`Failed to delete bundle: ${C.message}`)}return}if(!c.currentFile)return;let f=c.currentFile,m;try{m=await Rc([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=>hs(x.id,f)).map(x=>x.id),b=h.length>0,y=Wc(f)?"links file":"report",{confirmed:w,triage:v}=await X_({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 pR({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()&&za&&G.setServerUrl(za),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?.(),Xk(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"]')){Yk(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 d2={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 u2(e){Ut=e.target.value.length>0,Tr=e.target.value.trim().toLowerCase(),H()}var p2={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};function AR(){return G.getServerUrl()||za?Y().length>0:!1}function ER(){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"),f2(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`${aR(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">${aR(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">${XB}<span>Log out</span></button>`,n)}function f2(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 aR(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> ${jm()||c.managedSession?.role==="none"?g:u`<img alt="" src="${r}" @error="${m2}">`}</span>`}function m2(e){e.currentTarget.classList.add("broken")}function FR(){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 g2(){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","")),I_()}function fn(e){let t=B?.querySelector("#sync-status");if(!t)return;if(FR(),g2(),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),ER();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=AR(),o=pt()!=null;if(r&&o&&G.isEnabled()&&ra().catch(d=>{console.warn("sync: load failed",d)}),r&&o&&!G.getServerUrl()&&za&&G.isEnabled()&&G.setServerUrl(za),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=p2[s]??"")}G.onStatusChange(fn);var Qb=!1,oy=!1;async function LR(){if(!G.persistenceDegraded||oy||Qb)return;Qb=!0;let{shown:e}=await eR();if(Qb=!1,e){oy=!0;return}G.persistenceDegraded&&setTimeout(LR,1500)}G.onPersistenceDegraded(e=>{fn(),e?LR():oy=!1});var ey=!1,sy=!1;async function OR(){if(!G.proxyAuthRequired||sy||ey)return;ey=!0;let{shown:e,reload:t}=await tR();if(ey=!1,!e){G.proxyAuthRequired&&setTimeout(OR,1500);return}sy=!0,t&&location.reload()}G.onProxyAuthRequired(e=>{fn(),e?OR():sy=!1});function h2(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 Uf(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 Eu(){for(let e of B.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function NR(e){return e.dataTransfer.types.includes(uy)||e.dataTransfer.types.includes(Wa)}function b2(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(Wa,r),e.dataTransfer.setData(ry,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(uy,n.dataset.file),e.dataTransfer.setData(ry,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),Tu=!0,H())}function y2(){for(let e of B.querySelectorAll(".dragging"))e.classList.remove("dragging");Eu(),(Tu||Mu)&&(Tu=!1,Mu=!1,H())}function w2(e){if(!NR(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",Eu(),!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(Wa)?"[data-default-bundles]":"[data-default-reports]",l=B.querySelector(a);l&&l.classList.add("drag-over")}}function v2(e){B.contains(e.relatedTarget)||Eu()}async function $2(e){if(!NR(e))return;e.preventDefault(),e.stopPropagation(),Eu();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(ry)||null;if(e.dataTransfer.types.includes(Wa)){let i=e.dataTransfer.getData(Wa);if(!i)return;if(r&&r!==n&&ng(r,i)){let a=(c.bundles??[]).find(d=>d.integrity===i)?.name??i,l=Y().find(d=>d.id===r),{confirmed:p}=await Z_({name:a,workspaceName:l?.name??""});if(!p)return;try{await ed(r,i)}catch(d){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,d)}}n&&await io(i,n),r&&r!==n&&await Kf(i,r),H();return}let o=e.dataTransfer.getData(uy);if(!o)return;if(r&&r!==n&&hs(r,o)){let i=Y().find(l=>l.id===r),{confirmed:a}=await Q_({name:o,workspaceName:i?.name??""});if(!a)return;try{await Qc(r,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,l)}}n&&await so(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,iy=null,Se=0,lR=0,Gs=null,Co=!0,_o=!0,pn=!1,Da=null;async function Fu({forgetLastView:e=!0,resetNavigation:t=!0}={}){te.reset({force:t}),Da?.remove(),Da=null;let n=++Se;if(_o=!0,pn=!1,kk(),Um(),ko(),Iu(),Jc(c.serverMode!=="e2e"),G.setForcedOff(!0),G.setProtocolLocked(c.serverMode!=="e2e"||!!It),fR({forgetLastView:e}),c.triage.clear(),_()){let r=Ro();if(jm()&&(await r,n!==Se))return}else{if(c.managedSession=null,c.managedTeams=[],await Ci(),n!==Se||(await Ji(),n!==Se))return;Df()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),Au(),FR(),fn(G.status),O(),await H()}async function _X(e){if(e!==void 0&&!zw(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${Dw.join(", ")}.`);if(await Tt(),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",Tn(!1),c.managedSession=null,c.managedTeams=[],await Fu({forgetLastView:!1}))}async function k2(){let e=It,t=iy;It=null,iy=null,$k(),Object.assign(c,e),await Fu({forgetLastView:!1}),t&&xo(t)}function xo(e,{runtime:t=!0}={}){if(It){iy=e;return}Ru(!1);let n=pt()!=null,r=_(),o=c.serverMode;vn()&&e.managed&&(c.serverModeSelection="managed"),ac(e.mode),vn()&&e.managed&&Tn(!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),Au(),Jc(c.serverMode!=="e2e"),G.setProtocolLocked(c.serverMode!=="e2e"),Ap(e),r!==_()){Fu({forgetLastView:!1,resetNavigation:n&&!vn()&&!qo(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}fn(G.status),s&&c.serverMode==="e2e"&&AR()&&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}),_()&&Ro()}function Ro(){if(Gs?.generation===Se)return Gs.promise;Co=!0;let e={generation:Se,promise:null};return Gs=e,e.promise=x2().finally(()=>{Gs===e&&(Gs=null,H())}),e.promise}async function x2(){let e=Se,t=++lR,n=()=>e===Se&&t===lR&&_();try{let r=c.managedSession,o=await Rk({fallback:r});if(!n()||(c.managedSession=o,Co=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&(_o=!0),H(),xk(o),r&&(r.id!==o?.id||r.role!==o?.role)?(c.managedTeams=[],c.bundles=[],ko(),Iu(),te.reset(),At({history:!1})):Object.hasOwn(di,c.currentView)&&Mr(c.currentView)&&O({animate:!1}),ER(),cR(),!await Lu(n)))return;document.querySelector("base")||(Da=document.createElement("base"),Da.href="/",document.head.prepend(Da)),te.active&&Object.hasOwn(di,c.currentView)&&!Mr(c.currentView)?await te.navigate({view:Mr("manage")?"manage":"home"},{replace:!0}):o&&await te.start(R2,{onCancel:_2})}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(Co||_o)&&(Co=!1,_o=!1,H())}}C_((e,t,n)=>Lu(e,{strict:!0,signal:t,revision:n}));var S2=w_(Tk),ty=0;async function Lu(e,{strict:t=!1,signal:n=Le(),reuse:r=!1,revision:o=null}={}){let s=Se,i=c.managedSession,a=await S2({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=Sk(l);c.managedTeams=l;let f=a===null?ty:++ty;_o=!1;let m=yr(c);if(a!==null&&m&&!pn){let h=me(),b=()=>e()&&!n.aborted&&!pn&&f===ty&&h===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&_()&&yr(c)===m,y;try{y=await b_(c,l,{fetchCatalog:()=>Gm({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){So=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(h_(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;So=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 dy(n))}var C2=new Set(["admin-users","manage-repos","manage-repo-risk","manage-teams","manage-import","manage-deduplication"]),So=null;function Mr(e){let t=c.managedSession?.role;return e==="manage-links"&&!c.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!C2.has(e)||t==="admin")}var ay=0;function _2(){++ay,pn=!1,Oe();let e=Se;Lu(()=>e===Se&&_(),{reuse:!0})}async function R2(e,t){let n=++ay;pn=!0;try{return await T2(e,t)}finally{n===ay&&(pn=!1,H())}}async function T2(e,t){let n=So===me()?So:null;if(Oe(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&!await Lu(t,{reuse:!0}))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!Mr("manage-bundles")||(r=await Gm(),!t()||!_()))||(e=Bw(e,c.managedTeams,r),!e))return!1;let o=n!==null&&So===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-Q7ZSIEHP.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?(So=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 uR(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let i=e.teamId==null?r.map(br):Es(c.managedTeams);if(!await y_(e,i,t,H))return!1;let{compareId:a,compareMode:l,...p}=e;return Xe({...p,bundleTab:c.bundleDetailsTab,...Hg(c)},c.managedTeams,r)}if(e.view==="home")return At({history:!1});if(e.view==="npm")return T1(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 Mr(e.view)&&await dR(e.linkId);if(Object.hasOwn(di,e.view))return To(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}),So=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",()=>{Ro()});document.addEventListener("managed-feed-closed",()=>{Co=!0,ko(),Iu(),At({history:!1}).then(()=>Ro()),Ge("Workspace access changed. Refreshing your session.")});async function To(e,t={}){if(t.history!==!1&&_()&&(te.active||await Ro(),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)||!_()||!Mr(e))return!1;let n=Oe(),r=Se;try{let o=await D();e==="manage-import"&&Mr(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(`${e}: managed bundle load failed:`,o),!1}return r!==Se||n!==me()||!_()||!Mr(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(),Ro(),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 M2;function Tt(){return M2??=I2().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function I2(){let e=pt();if(e){ac(e.mode),c.managed=e.managed,Dl().then(o=>{if(o&&o!=="standalone")return xo(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Ru(!wi());let t=Dl(),n=await Ip(t,wi()?0:3e3),r=pt();if(r)return n&&n!=="standalone"?xo(n):xo(r,{runtime:!1});if(n&&n!=="standalone")return xo(n);n==="standalone"&&Pl(),c.serverMode="standalone",c.serverModeConfig=null,c.serverModeSelection=null,Tn(n===null),Jc(!0),Ru(!1),fn(G.status),H(),n===null&&t.then(o=>{let s=pt(),i=o&&o!=="standalone"?o:s??o;if(i==="standalone"){if(Pl(),It){It.serverMode="standalone",It.serverModeConfig=null,It.serverModeSelection=null,It.localMode=!1;return}return Tn(!1),fn(G.status),H()}if(i)return xo(i,{runtime:i!==s})}).catch(o=>console.warn("server mode probe:",o))}function A2(){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 E2(e){Ar=e,B=e.renderRoot,ny=B.querySelector("#file-list"),A_(B.querySelector("#encryption-toggle")),P_(B.querySelector("#storage-status")),B.addEventListener("click",iR),B.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),iR(t))}),B.addEventListener("dblclick",h2),B.addEventListener("dragstart",b2),B.addEventListener("dragend",y2),B.addEventListener("dragover",w2),B.addEventListener("dragleave",v2),B.addEventListener("drop",$2),bi(B,d2),B.querySelector("#sidebar-search-input")?.addEventListener("input",u2),A2(),fn(G.status),pt()||Ru(!wi()),H(),G.onServerInfo(t=>{if(c.serverMode!=="e2e")return;let n=pt(),r=n&&{...n,...c.deepviewScanServer?{deepviewScanServer:c.deepviewScanServer}:{}};return xo(Mp(r,t))}),Tt(),c.serverMode==="managed"&&Ro()}var ly=class extends Et{static styles=[P(T_),P(R_)];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(al)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){E2(this)}};customElements.define("app-sidebar",ly);async function BR(e){let t=await wl(e),n=await xm(t);if(n.kind==="reports")return{kind:"reports",reports:n.reports};let r;if(n.kind==="encrypted"){if(r=await Hc({tryPassword:s=>vl(t,s)}),!r)return null}else r=$l(n.text);let o=await km(r,{conflictResolver:async(s,i)=>{try{return await qc(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 py=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 S0(this.workspaceId,r.identifier);if(!s.ok){this._fail(n,r,"bundle",s.reason??"unknown");continue}await io(r.identifier,this.workspaceId),t.push({kind:"bundle",identifier:r.identifier});continue}let o=await x0(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}=jc(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:Gc(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} ${Kc(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",py);function Ou({workspaceId:e,items:t}={}){return re("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}function Nu(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 fy(e,t){return t==="findings"?e.title:u`<button type="button" class="workspace-title-link" data-action="workspace-findings">${e.title}</button>`}function ja(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 Ga(e){return new Set(e.flatMap(t=>t?.source==="links"?[]:Object.keys(t?.tree??{}))).size}function my(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 PR(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>${fy(e,r)}${ja(e,"reports",r)}${ja(e,"bundles",r)}${my(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 DR(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?Ga(p.map(d=>d.data)):0,o(),p!==null):!0}var Mo="deepview.lastFile";function cy(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"&&fp.has(t)?` ${t}`:"";Me(Mo,`b:${e}${r}`).catch(()=>{})}var ne=e=>e!==me();function F2(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Ka(e){return await F2(),e!==null&&ne(e)?!1:(O(),Ig(c.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!ne(e)).catch(()=>{}),!0)}function Pu(){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),og(t.workspaceId))}function gy(){be.classList.remove("active"),be.replaceChildren(),ut.classList.remove("hidden"),document.title="DeepView"}function zR(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function hy(e){let t=WR(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function WR(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function Bu({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(!zR(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=>hs(l.id,e)),i=await g_({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 C0(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 O2(e,s)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function L2(e,t){let n=typeof t?.github=="string"?t.github:"";if(n)try{await ff(e,n)}catch(r){console.warn(`Import: failed to adopt the repository "${n}" for "${e}":`,r)}}async function O2(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 Zc(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 by(e){if(e=[...e],e.length===0||(await Tt(),_())||(await _u(),_()))return;let t=null,n=null,r=new Set,o=new Set(await ce()),s=[];for(let i of e)try{let a=WR(i.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let f=await BR(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 Bu({name:m.name,content:m.content,existingNames:o});b&&(Ue(b.name,h.count,h.source),await L2(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(hy(i.name)){let f=new Uint8Array(await i.arrayBuffer()),{integrity:m}=await Zr(i.name,f);n=m,r.add(m);continue}let p=await i.text(),d=jw(p,i.name);if(d)for(let f of d){let{count:m,source:h}=Ve(f.content),b=await Bu({...f,existingNames:o});b&&(Ue(b.name,m,h),t={name:b.name,content:b.content})}else if(Tw(p,a)==="codex"){let f=Rw(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 Bu({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 Bu({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 Va(t.name,t.content):n&&(gr(n),cy(n,c.bundleDetailsTab),O(),await H(),hd(n)),Ig(r).catch(()=>{})}async function Va(e,t,{workspaceId:n}={}){if(_())return;let r=Oe();c.currentManagedTeam=null,c.currentManagedReport=null,c.currentReportWorkspace=Cs(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,Pu(),Me(Mo,Cc(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 xu()&&!ne(r)){await Va(e);return}ne(r)||(c.currentFile=null,await H());return}if(zR(i)){let a=Y().find(l=>Array.isArray(l.reports)&&l.reports.includes(e)&&hs(l.id,e));if(a)try{if(await sa(a.id),ne(r))return;let l=await Ou({workspaceId:a.id,items:[{kind:"report",identifier:e}]});if(ne(r))return;if(l?.downloaded?.some(p=>p.kind==="report"&&p.identifier===e)){await Va(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 Du(e,t,r),!ne(r)){for(let i of o)G.openSession(i),G.refreshSession(i),sa(i);return await H(),!0}}function dR(e){return c.managedSession?.role!=="admin"?!1:Ir({id:null,reports:[{id:e}]},e,{history:!1,deduplication:!0})}function dy(e=Le()){let t=Le();return DR(c,{fetchReports:qm,signal:AbortSignal.any([e,t]),isCurrent:()=>_()&&Le()===t,render:()=>O({animate:!1})})}async function uR(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:Ga(c.reports):0,l=Oe();if(qs(new Set),Ya({forgetLastView:!1}),c.currentWorkspace=i,c.workspaceContentFileCount=a,c.currentManagedTeam=o?e:null,c.currentView=r,o&&(c.bundles=Es(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||Me(Mo,`${t==="reports"?"wrs":"wbs"}:${e}`).catch(()=>{}),await H(),ne(l))return!1;if(O({animate:!1}),o)await dy();else{let p=await Promise.all((s.reports??[]).map(async d=>{try{return cp(await fe(d)).data}catch{return null}}));if(ne(l))return!1;c.workspaceContentFileCount=Ga(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 qm(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(Ck(),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,F$(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,Pu();for(let m of d)if(await Du(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-YP2537WX.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}),Sd(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 Ka(o))return!1}else if(d.length===0)zu();else if(aa(mo()),!await Ka(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,Pu(),Me(Mo,`ws:${e}`).catch(()=>{}),t.reports.length===0&&gy();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 Du(t.reports[f],m,n,{renderView:!1})?i++:o=!1,ne(n)))return}i===0&&t.reports.length>0&&gy(),o&&lo(t)?.appMode&&(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,qa());let a=c.reports.slice();D_(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(mo()),!await Ka(n))return}else zu();let p=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],d=p.map(f=>c[f]);W_(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(),aa(mo()),await Ka(n))}}).catch(f=>console.warn("workspace App metadata:",f)),G.openSession(e),G.refreshSession(e),sa(e),await l}async function pR({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!c.currentFile)return;let n=Oe(),r=c.currentFile;ss(r),Qr(r,"");for(let o of t)try{let s=await Qc(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 Zo(r),!ne(n)&&(await Ui(r,null),!ne(n))){if(e==="wipe"){try{await Tc()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(ne(n))return}ne(n)||(Ya(),await H())}}function Ya({forgetLastView:e=!0}={}){jx(),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",Pu(),e&&nr(Mo),gy()}function fR(e){Oe(),qs(new Set),Ya(e)}async function At({history:e=!0}={}){return e&&_()&&te.active?te.navigate({view:"home"}):(Oe(),qs(new Set),Ya({forgetLastView:!_()}),await H(),!0)}async function mR({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!c.selectedBundle)return;let t=Oe(),n=c.selectedBundle;for(let o of e)try{let s=await ed(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 Zp(n),ne(t)||(await Gf(n,null),ne(t)))return;c.selectedBundle=null,c.selectedBundleWorkspace=null,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleSourceFindingIdx=null;let r=ve(Mo);typeof r=="string"&&(r===`b:${n}`||r.startsWith(`b:${n} `))&&nr(Mo),Rf(n),c.bundles=await Je(),!ne(t)&&(O(),await H())}async function gR(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),og(e),t==="delete"){for(let a of o){try{await Zo(a)}catch{}ss(a),Qr(a,"")}if(n==="wipe")try{await Tc()}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)&&Ya(),await Hf(e),await H()}async function Du(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 ao(),i()))return;let{data:a,reason:l}=o===null?_()?Pw(t,e):cp(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(l);let p=c.reports.length===0,d=yn(a)??[],f=d.flatMap(ad);if(await Iw(f),i())return;let m=new Set(f.filter(Av).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=fl([{groups:d.map(ad),tree:a.tree}]),x=[];for(let k of d){let $=ad(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??[]};zo(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??[]}),Hl(c.reports),Ul(c.reports)&&pr(),c.revalidateConflicts=Q0(),qa(),p&&(nd(),aa(mo())),r&&await Ka(n),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}window.__loadFile=(e,t)=>Du(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")&&by(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"),by(e.dataTransfer.files)});var mn=null;function N2(){_()||(mn||(mn=document.createElement("input"),mn.type="file",mn.multiple=!0,mn.hidden=!0,mn.addEventListener("change",()=>{let e=[...mn.files];e.length>0&&by(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]")){qk(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")&&N2()});function HR(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 Wu=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=gp(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=HR(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?Gw(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 UR(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 VR(e){Er(e);let t=await Je();return Er(e),dv(t,Y())}async function jR(e,t){Er(t);let n=await go(e.integrity,{name:e.filename},{sources:!1});return Er(t),uv(e,n)}async function GR(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),pv(n,Y())}function KR({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?Rp(o):Rp(t)??(e==="127.0.0.1"?Mv:null)}async function qR(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 Xa(){return KR({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:c.serverMode,localMode:c.localMode,deepviewScanServer:c.deepviewScanServer})}function Ja(e){return _()?!!e.managedId&&["admin","manage"].includes(c.managedSession?.role):!e.managedId&&!!Xa()}async function Hu(e=null,{mode:t}={}){let n=c.selectedBundleWorkspace,r=me();if(await Tt(),r!==me()||e&&!Ja(e))return;if(_()){e&&await To("manage-scans",{bundleId:e.managedId,...t?{scanMode:t}:{}});return}if(!Xa())return;let o=At(),s=me();await o,!(!Xa()||s!==me())&&(c.scanSelection=e?{bundleId:e.integrity,...n?{repoId:n}:{},...t?{mode:t}:{}}:null,c.currentView="scan",O(),H())}var yy=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=Xa(),this._access=new Wu(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>qR("Loading bundle\u2026",n,()=>jR(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=hm(()=>{this._savedAccess=us()}),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 qR("Loading bundles\u2026",t.signal,()=>VR(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=us();let t=fm(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=us();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await gm(),this._resetAccess()):await mm({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=us()}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=UR(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=ap`: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">${Kw(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="${GR}"><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",yy);function Au(){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",()=>{Hu()}),e.append(t));let n=Xa();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||!Ja(o))}var YR="@preventive/triage";function wy(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 XR(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function JR(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 ZR(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 QR(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:wy(n.name,n.version)}:{name:XR(t?.name??"bundle"),version:null,purl:null},rest:r}}function eT(e){return e??globalThis.crypto.randomUUID()}function aZ(e,t,{now:n=new Date,uuid:r}={}){let o=JR(e),{root:s,rest:i}=QR(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:${eT(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:YR}]},component:a},components:i.map(p=>{let d=wy(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 B2(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function lZ(e,t,{now:n=new Date,uuid:r}={}){let o=JR(e),{root:s,rest:i}=QR(o,t),a=XR(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=[B2(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,wy(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)}-${eT(r)}`,creationInfo:{created:l,creators:[`Tool: ${YR}`]},packages:f,relationships:m};return`${JSON.stringify(h,null,2)}
|
|
186
|
-
`}function P2(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 Uu(e,t,n){if(t){let s=P2(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 D2(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 z2(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 tT(e,t,n,r,o,s=null){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let i=Uu(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?z2(p,i):D2(t,i,s??[...t.keys()].toSorted());return lt.entries.unshift({query:n,result:f}),lt.entries.length>8&<.entries.pop(),f}var W2=200,H2=28,U2=12;function V2(e,t){let n=t.length>0?t[0][0]:0,r=e.length-e.trimStart().length,o=n-r>H2?n-U2:0;return vy(e,t,o,W2)}function nT(e,t){let n=V2(e,t);return u`${n.clipped?u`<span class="bundle-search-clip">…</span>`:g}${$y(n.text,n.ranges)}`}function vy(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 $y(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 j2(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 rT(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=e$(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,j2(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,M=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,M=I)}if(M!==null){let I=m.get(M);m.set(k,I),m.set(M,$),y.set(b(I),k),y.set(b($),M),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,Vu=32,Dn=20,Sy=24,G2=20,ky=10;function oT(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 sT(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 Cy=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1));function xy(e,t,n,r){let o=e.packages.find(d=>d.id===t),s=Cy(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 iT(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||Cy(d.get(b))-Cy(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=xy(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=xy(l,a.fromPackage,!1,o.get(a)),f=xy(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:sT([...p,...h,...l.toReversed()])}})}function K2(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+Sy){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 sT([[a,l],[p,l],[p,m],[d,m],[d,h]])}function aT(e,t,n,r=1184,o=!1){if(o)return{id:e,members:t,collapsed:o,packages:[],internalEdges:[],width:gn+ky*2,height:Fr};let s=t.length>1,i=Math.max(1,Math.floor((r-ky*2+Dn)/(gn+Dn))),a=s?Math.min(i,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,l=s?ky:0,p=Math.ceil(t.length/a),d=s?G2:0,m=(s?rT(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+Sy)})),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:K2(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)*Sy+l*2+d}}function _y(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 lT=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function cT(e,t){let n=e?.bundle?.modules.get(t);if(!t||t==="."||!n)return null;let r=_y(t,n);return{packageKey:r.ecosystem?lT(r):r.name,packageGroup:Kr("",{packageDir:t})}}function dT(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=jo(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,_y(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 Il(e))if(f.has(k))for(let S of $){if(!f.has(S))continue;let C=l.get(k),R=l.get(S);if(Qv(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}=Al(e,f,k=>l.get(k),l,p);b.length>0&&!a.has(".")&&a.set(".",_y("."));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 $=lT(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 uT(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:o,componentOf:s}=t$(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-Vu-24-(f?56:0),b=[...Map.groupBy(o.map(($,S)=>{let C=$.length>10;return{...aT(S,$,e.imports,m,C&&!n.has(S)),collapsible:C}}),$=>l[$.id])].toSorted(([$],[S])=>$-S).map(([,$])=>oT($,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=iT(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 pT(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 fT=`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 Ry=e=>Sn(e.own?"__own__":e.name),mT=()=>Math.floor(Math.min(document.documentElement.clientWidth*.94,80*Number.parseFloat(getComputedStyle(document.documentElement).fontSize))),Ty=class extends N{static styles=[...N.styles,P(fT)];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=mT(),this.layout=uT(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=dT(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(mT()!==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":Ry(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=pT(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":`${Fr}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":Ry(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
|
-
class=${i?a.from===r||a.to===r?"traced":"subdued":""}
|
|
191
|
-
style=${le({"--connection-color":Ry(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:Vo(this.packageGroup);return u`<dialog aria-labelledby="why-title" style="${le({"--graph-dialog-width":`${Math.max(480,this.layout.width+Vu)}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",Ty);function ju(e){return re("why-dialog",e)}var Y2=new Map,gT=new Map,hT=[];function Io(e){if(!e?.managedId)return Y2;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!==hT[s])&&(hT=r,gT=new Map),gT}var My=new WeakMap;function Za(e){return My.has(e)||My.set(e,{reasons:jo(e),selected:""}),My.get(e)}function Ao(e,t=Za(e).selected){return JSON.stringify([e.managedId??e.integrity,t])}var bT="deepview.advisories.proxyConsent";function Iy(){try{return localStorage.getItem(bT)==="1"}catch{return!1}}function XZ(){try{localStorage.setItem(bT,"1")}catch{}}function X2(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 yT(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 J2(e){if(e.bundle&&!yT(e))return!0;let t=Io(e).get(Ao(e,""));return t?.state==="ok"&&t.query.size===0&&t.skipped.length===0}function wT(e,t,n=!1){return!e||e.managedId&&!Q2(e)||Z2(e,t)<1||e.summary?.versionedPackages===0?!1:n?!0:hy(e.name)!=="stasis"?!1:!t||t.integrity!==e.integrity?!0:e.managedId?!t.bundle||yT(t):X2(t)}function Z2(e,t){let n=t?.integrity===e.integrity&&t.bundle?t.bundle.version:e.summary?.stasisVersion;return Number.isSafeInteger(n)?n:1/0}function Q2(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 eP(e){return Object.fromEntries([...e].map(([t,n])=>[t,[...n].toSorted()]))}var Ay=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function tP(e){return{...e,title:e.title||e.id,severity:e.severity??"unknown",cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function nP(e){let t=Array.isArray(e),n=t?Map.groupBy(e.map(tP),Ay):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 vT(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function rP(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(eP(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 Ku(e,t){return $T(e,t)}function oP(e,t){return $T(e,t,!0)}async function $T(e,t,n=!1){if(!e?.integrity||!e.managedId&&!Iy())return;let r=Io(e),o=Ao(e),s=r.get(o);if(n){if(!vT(e,s))return;r.set(o,{...s,recheckingRepositories:!0,repositoryError:null}),t()}else if(s)return;let{reasons:i,selected:a}=Za(e),l=e.managedId?new Map:nv(e,i.get(a)??null);n||r.set(o,{state:"loading",query:l});try{let p,d=[];if(e.managedId){let f=await Qk(e.managedId,void 0,a,n,n);l=Array.isArray(f.packages)?new Map(f.packages.map(m=>[Ay(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 rP(l):{};r.set(o,{state:"ok",byPackage:nP(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 JZ(e,t){if(!e?.integrity)return;let n=Io(e),r=Ao(e);n.get(r)?.state==="error"&&(n.delete(r),await Ku(e,t))}var sP={critical:0,high:1,moderate:2,low:3,info:4};function Gu(e){return sP[e]??999}function iP(){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 kT(e,t=()=>{},n=null){let r=e?Za(e):null,o=[...r?.reasons.keys()??[]].map(a=>({id:`reason:${a}`,label:a})),s=lP(e),i=!!e?.managedId&&!J2(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=Ku(e,t);return t(),p}}"></bundle-scope-selector>`:g} ${i?aP(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} ${dP(e)}</div>`}function aP(e,t){if(!e?.managedId)return g;let n=Io(e).get(Ao(e)),r=!!n?.recheckingRepositories;return u`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!vT(e,n)}" aria-busy="${String(r)}" @click="${()=>oP(e,t)}">${r?"Rechecking\u2026":"Recheck against repositories"}</button>`}function lP(e){if(!e||!e.managedId&&!Iy())return g;let t=Io(e).get(Ao(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 cP(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 ${Za(e).selected?"this scope":"this bundle"}.`}function dP(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&&!Iy())return iP();let t=Io(e).get(Ao(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>${cP(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=>Gu(d.severity))),p=Math.min(...a.map(d=>Gu(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">${Ay(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:g}<ul class="bundle-advisories-list">${r.map(([o,s])=>uP(e,o,s,t.query.get(o),()=>Io(e).get(Ao(e))?.byPackage===t.byPackage))}</ul></div>`}function uP(e,t,n,r,o){let s=[...n].toSorted((a,l)=>{let p=Gu(a.severity)-Gu(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="${()=>ju({details:e,packageKey:t,version:a,reason:Za(e).selected,isCurrent:o})}">${a}</button>`)}</span>`:g}</div><ul class="bundle-advisories-rows">${s.map(a=>su(a,({title:l,severity:p,details:d})=>fu({heading:l,severity:p,markdown:d,isCurrent:o})))}</ul></li>`}var Ju=e=>_()?[]:vf(e),pP=()=>_()?0:$f(),Qa=null,Ey=new WeakMap;function fP(e){if(Ey.has(e))return Ey.get(e);let t=bp(e),n=Il(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 Ey.set(e,a),a}function ET(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 Ju(s)){let a=Te(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=Ju(o);if(s.length===0)continue;let i=s.filter(a=>{let l=Te(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 FT(e){let t=fP(e),n=jo(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}=lv(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 M=o.get(A);M!==void 0&&a.set(M,E)}}let l=Js(a),p=l.size>0||[...e.fileHashes??[]].some(([A,E])=>t.origToStripped.has(A)&&Ju(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 M={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){M[Q.severity]=(M[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,M),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=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=Al(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"?cv(e,o,t.origToStripped,v):void 0,ownSourcePackages:iv(o,k,v),entryPackages:av(e,o,k),ownSourceFiles:new Set($),reasons:[...n.keys()]}}function LT(){if(!Qa)return;let e=Is();e&&e.refreshSidebar(Qa,{isBundleContext:!0,findingsJump:!_()})}function OT(){if(!Qa)return;let e=Is();e&&e.refreshTopPkgs(Qa)}function NT(e){Qa=e}function mP(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,cT(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)||Vo(a[0]).localeCompare(Vo(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=Vo(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="${()=>gP(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 gP(e,t){let n=c.currentManagedTeam,r=c.currentWorkspace,o=c.managedSession&&rt(c.managedSession);return ju({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 By(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),M=c.bundleOverviewFilesSort==="flags"&&!E?"name":c.bundleOverviewFilesSort,I=M==="flags"?m_(L,A,V=>S[V]):L.toSorted((V,ue)=>(M==="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=mP(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 Lo of Ai(wt.fileHash,wt))Ce.set(Lo,(Ce.get(Lo)??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>`),rp=n.length>0?u`<ul class="bundles-sources-list">${I.map(V=>{let ue=n[V],wt=r[V],Lo=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">${Lo}</div>`:u`<button type="button" class="bundles-source-row" data-bundle-view-source="${ue}">${Lo}</button>`}</li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,op=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:rp,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(M===V)}" @click="${()=>{c.bundleOverviewFilesSort=V,O()}}">${ue}</button>`)}</span>`})} ${yt.length>0?Ln({title:"Reports",count:yt.length,body:op,list:!0}):g} ${f}</div></div>`}var Fy=new Map,Ly=new Set,BT=()=>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">${Fx}</button>`;function hP(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="${ZS(e)}">${JS}</button>`}function zy(e,t,n,r,o,s){let i=e1(e,t,n,r),a=i?o1(e,t,n,r,()=>{c.bundleSourceFile===n&&O()}):null,l=a?.status==="ready";return{pretty:l,toggle:i?hP(a):g,content:l?a.text:r,fileFindings:l?[]:o,lineFindings:l?new Map:s}}var zn=null;function qu(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function bP(e){requestAnimationFrame(()=>requestAnimationFrame(()=>{document.querySelector(`.bundle-code-main .bundle-source-lineno-row[data-line="${e}"]`)?.scrollIntoView({block:"center"})}))}function Eo(e){for(let t of et)for(let n of e)if(n.severity===t)return t;return e[0]?.severity??null}var Oy={content:"",parts:""};function yP(e){if(Oy.content===e)return Oy.parts;let t=e;if(e.length>Fd||Ss(e)){let n=o=>[Ld(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>Yx&&(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 Oy={content:e,parts:t},t}function wP(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=mi(t,n?.kind==="stasis"?n.bundle?.formats?.get(t):void 0,e),h=`${n?.integrity??""}\0${t}${i?"\0pretty":""}`;m&&!Fy.has(h)&&!Ly.has(h)&&(Ly.add(h),(async()=>{let y=await $s(e,m,Fg(n,t));Fy.set(h,typeof y=="string"?vd(y):null),Ly.delete(h),c.bundleSourceFile===t&&O()})());let b=Fy.get(h);return u`<div class="${q({"bundle-source-lines":!0,"is-wrapped":c.bundleSourceWrap})}" style="${le({"--lineno-width":`${f}ch`})}" ${qx(oh)}><aside class="bundle-source-lineno-col" aria-hidden="true">${Array.from({length:a},(y,w)=>{let v=w+1,x=r.get(v),k=x?Eo(x.map(S=>S.f)):null,$=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-${k}`]:!0,active:$})}" 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):yP(e)}</code></pre></div>`}function vP(e){let t=c.bundleSourceFindingIdx;if(t==null)return g;let n=e[t];if(!n)return g;let r=n.fileHash?Ai(n.fileHash,n):[],o=Te(n,c.triage.get(j(n))),s=o==="fixed"?"Fixed":o==="inprogress"?"In progress":o==="ignored"?"Ignored":null,i=Jr(n),a=UT(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(ul(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 Wy(e,t,n){let r=[],o=new Map;if(typeof n=="string"&&e?.fileHashes){let i=Js(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 PT(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?HT(t):g} ${BT()} ${n} <button type="button" class="bundle-source-close" data-action="bundle-source-close" aria-label="Close source viewer">×</button></header>`}function Hy(e,t,n,r,o,s=null,i=!1,a=!1){return u`<div class="bundle-source-code-wrap">${typeof t=="string"?wP(t,e,n,o,s,i,a):u`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${vP(r)}`}function DT(){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=Lt(t),{fileFindings:s,lineFindings:i}=Wy(t,e,o.get(e)),a=c.bundles?.find(p=>p.integrity===t?.integrity)??(t?.npm?{npm:t.npm}:null),l=r||n?null:zy(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})}">${PT(e,uh(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>`:Hy(e,l.content,t,l.fileFindings,l.lineFindings,null,!1,l.pretty)}</div></div></div>`}var Xs=new Map,xT=null,Ny=null;function zT(e,t){let n=Lr(e??"",t).split("/");for(let r=1;r<n.length;r++)Xs.set(n.slice(0,r).join("/"),!0)}function $P(e,t){c.bundleCodeSearchMode="files",c.bundleCodeSearchQuery="",zT(e,t),O(),qu()}function kP(e){let t=n=>{for(let r of n.dirs.values())Xs.set(r.path,!1),t(r)};t(e),O()}function xP(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=Eo(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 Py(e,t,n=0,r=null,o=!1,s=null,i=null){let a=[...e.dirs.entries()].toSorted(([m,h],[b,y])=>yo(m,h).localeCompare(yo(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:Xs.has(m)?Xs.get(m):n===0||p(h),f=m=>h=>{Xs.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?MS:g}">${Z(a,([,m])=>m.path,([m,h])=>{let b=h.path,y=eh(m,h,n),w=h.package,v=w?.ecosystem==="cargo"||w?.ecosystem==="composer"||w?.ecosystem==="soldeer",x=Rl(w?.ecosystem),k=w?.variant?`${y.node.sourcePath}
|
|
194
|
-
Variant ${w.variant}`:y.node.sourcePath,$=h.packageInfo,S=!!$||!!w?.variant,C=$&&i?L=>{let{bytes:A,loc:E}=SS(i,h.sourcePath);Object.assign(L.dataset,{tooltipLoc:String(E),tooltipSize:ge(A)})}:void 0,R=xP(h,r);return u`<li class="bundle-code-tree-dir"><details .open="${Vw(d(b,h))}"><summary @click="${f(b)}" .prepareTooltip="${C}" data-tooltip-package="${$?.name??g}" data-tooltip-ecosystem="${$?.ecosystem??g}" data-tooltip-version="${$?.version??g}" data-tooltip-files="${$?.fileCount??g}" data-tooltip-repo="${$?.github?$.github+($.directory?`/${$.directory}`:""):g}" data-tooltip-commit="${$?.commit??g}" data-tooltip="${S?k: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:k}">${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} ${R.count>0?u`<span class="${`bundle-code-tree-count sev-${R.worst}`}" data-tooltip="${`${R.count} ${R.count===1?"issue":"issues"} inside`}">${R.count}</span>`:g}</summary>${Py(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?Eo(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 Lr(e,t){return t&&e.startsWith(t)?e.slice(t.length):e}function SP(e,t,n,r,o="",s=null,i=null){if(!n)return Py(e,t,0,r,!1,s,i);let a=TS(e,n,o);return a?Py(a,t,0,r,!0,s,i):u`<div class="bundle-code-search-empty">No files match.</div>`}var ST=new WeakMap;function WT(e,t){let n=ST.get(t);return n||(n=sv([...t.keys()].toSorted(),Ot(e)),ST.set(t,n)),n}var CT=1e3,_T=new WeakMap;function CP(e,t,n,r,o=""){let s=bp(e),i=_T.get(t);i||(i=[...t.keys()].filter(d=>s.get(d)!=null).toSorted((d,f)=>s.get(f)-s.get(d)||d.localeCompare(f)),_T.set(t,i));let a=n.toLowerCase(),l=a?i.filter(d=>Lr(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>CT?l.slice(0,CT):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}">${Lr(d,o)}</span><span class="bundle-code-largest-size">${ge(s.get(d))}</span></button></li>`)}</ul></div>`}function _P(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=Uu(n,!1,!1),i=20,a=100,l=[],p=0;for(let d of WT(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=Lr(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">${nT(h.text,h.ranges)}</span></button></li>`)}</ul></div>`})}</div>`}function RP(e,t,n,r=""){if(!e.fileHashes)return u`<div class="bundle-code-search-empty">Computing file hashes…</div>`;let o=Js(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=Lr(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(ul(l),{paragraphs:!1})}</div></button></li>`})}</ul></div>`}function TP(e,t){if(e.kind!=="stasis")return t;let n=Ot(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 RT(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[Eo(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 MP(e,t=null){let n=Lt(e);if(n.size===0)return u`<div class="bundle-code-empty">This bundle doesn't carry any source content.</div>`;xT!==c.selectedBundle&&(Xs.clear(),xT=c.selectedBundle,Ny=null);let o=Tl(n).paths,s=e.kind==="stasis"?e.bundle.modules:null,i=_S(Qn(o).prefix,s,o),a=o.map(S=>Lr(S,i)),l=CS(a,o,s),p=e.fileHashes?Js(e.fileHashes,"issues"):new Map,d=TP(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,qu();let C=h.endLine??h.line;c.bundleSourceTargetLine=h.line&&C<=Qw(n.get(S))?{bundle:e.integrity,path:S,line:h.line,...C>h.line?{end:C}:{}}:null,c.bundleSourceTargetLine&&bP(h.line)}}if(zn&&(zn.bundle!==c.selectedBundle||m&&m!==zn.path)&&(zn=null),!m)m=RT(e,d,f),m&&(c.bundleSourceFile=m,zn={bundle:c.selectedBundle,path:m,hadIssues:f.size>0},qu());else if(zn&&!zn.hadIssues&&f.size>0){zn.hadIssues=!0;let S=RT(e,d,f);S&&S!==m&&(m=S,c.bundleSourceFile=S,c.bundleSourceFindingIdx=null,zn.path=S,qu())}m!==Ny&&(zT(m,i),Ny=m),m&&t?.managedId&&_()?te?.replaceCodeRoute(wr(c.managedTeams,t,c.currentManagedTeam,"code",Id(c))):m&&t?.npm&&_()&&te?.replaceCodeRoute(Ra(t,"code",Id(c)));let b=m?n.get(m):null,{fileFindings:y,lineFindings:w}=Wy(e,m,b),x=p.size>0?["files","code","issues","largest"]:["files","code","largest"],k=x.includes(c.bundleCodeSearchMode)?c.bundleCodeSearchMode:"files",$=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="${()=>$P(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="${k!=="files"||!!$||l.dirs.size===0}" @click="${()=>kP(l)}">${Lx}</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">${Ug(k,[["files",()=>SP(l,m,$,p,i,e.kind==="stasis"?e.bundle.formats:null,n)],["code",()=>_P(e,n,$,m,i)],["issues",()=>RP(e,$,m,i)],["largest",()=>CP(e,n,$,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?IP(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 HT(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}">${_s}</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}">${Rs}</button></span>`}function TT(e){let t=e.split(`
|
|
196
|
-
`).length;return`${t.toLocaleString()} ${t===1?"line":"lines"} \xB7 ${ge(wn(e))}`}function IP(e,t,n,r,o,s=null){let i=uh(c.bundleCodeHistory,e.integrity,t),{pretty:a,toggle:l,content:p,fileFindings:d,lineFindings:f}=zy(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=IS(e,t,s?.managedId&&s.repoId!=null?{github:s.repoFullName,directory:s.repoDirectory}:null);return u`<header class="bundle-code-main-bar">${HT(i)} ${kn(t,Uo(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">${_d}</button> ${h?AS(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-${Eo(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} ${BT()} ${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">${TT(n)}</span>`}<span>${TT(p)}</span></span>`:g}</header><div class="bundle-code-main-body">${Hy(t,p,e,d,f,null,!a&&!!(s?.managedId||s?.npm)&&_()&&!vn(),a)}</div>`}var AP=400;function EP(e){return e<=5?8:e<=15?6:e<=40?4:e<=120?3:2}function FP(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 LP(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 vy(e,t,o,n)}function OP(e,t,n){let r=LP(e,n??[],AP);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}${$y(r.text,r.ranges)}</span></div>`}function NP(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(OP(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 BP(e,t,n){let{path:r,lines:o,hits:s}=e,i=Lr(r,t),a=FP(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)=>NP(r,o,f,l,m>0))}</div></section>`}function PP(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=tT(e.integrity??"",t,n,r,o,WT(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?EP(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=>BP(b,f,m))}</div>`}function DP(e,t,n,r){if(!t||typeof e!="string")return null;let o=Uu(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 zP(e,t,n,r){let o=c.bundleSourceFile;if(!o)return g;let s=t.get(o),{fileFindings:i,lineFindings:a}=Wy(e,o,s),l=zy(e,r,o,s,i,a);return u`<aside class="bundle-search-side">${PT(o,null,l.toggle)}<div class="bundle-source-body">${Hy(o,l.content,e,l.fileFindings,l.lineFindings,l.pretty?null:n,!1,l.pretty)}</div></aside>`}function WP(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=DP(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">${PP(e,n,r,o,s,a)} ${zP(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 HP(e){let t=!!e.npm;t&&!Sl.has(c.bundleDetailsTab)&&(c.bundleDetailsTab="overview");let n=!t&&wT(e,c.bundleDetails,c.bundleDetailsTab==="advisories");c.bundleDetailsTab==="advisories"&&!n&&(c.bundleDetailsTab="overview");let r=t||c.bundleDetailsTab==="compare"||As(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"&&Ku(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?No:Oo)}</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="${ru(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="${!Ja(e)}" @click="${()=>{Hu(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?XP(e,a):p?Ug(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",()=>MP(a,e)],["search",()=>WP(a,e)],["review",()=>u`<npm-review .entry="${e}" .details="${a}" .request="${c.npmReview}" .session="${c.managedSession}" .source="${kb(e)}"></npm-review>`],["compare",()=>u`<bundle-compare .details="${a}" .integrity="${e.integrity}" .request="${c.bundleCompare}" .source="${t?kb(e):null}"></bundle-compare>`],["issues",()=>VP(a)],["advisories",()=>kT(a,O,Ja(e)?()=>{Hu(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 UP(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=kf(t.bucketKey,e):t.kind==="repository"&&(n=xf(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 UT(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 VP(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=pP();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+=Ju(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 el(t,{kind:"bundle"})}function el(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[Eo(d)]??0,b=_e[Eo(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=UT(b.line),x=Te(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> ${UP(b,{kind:t,bucketKey:n})}</div><div class="bundle-issues-finding-desc">${it(ul(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 VT(e){let t=c.selectedBundle,n=t?e.find(r=>r.integrity===t):null;return n?HP(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 Yu=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>`,jP=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>`,MT=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"}),IT=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"]);function AT(e){if(MT[e])return MT[e];let t=0;for(let n of e)t=Math.imul(t,31)+n.codePointAt(0)|0;return IT[(t>>>0)%IT.length]}function GP(e){let t=e.currentTarget,n=e.target.closest?.(".bundles-languages-segment");!n||!t.contains(n)||(t.dataset.tooltip=n.dataset.languageTooltip??"",gv(t))}function KP(e){delete e.currentTarget.dataset.tooltip,hv()}var jT=e=>e.codeStats??=Xw(e.npm?new Map([...gi(e)].filter(([t])=>!Ca.test(t.slice(t.lastIndexOf("/")+1)))):gi(e),xn(e));function GT(e,{legend:t=!1}={}){if(!(e?.kind==="stasis"&&e.bundle)&&!(e?.npm&&e.json))return g;let n=jT(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:AT(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="${GP}" @pointerleave="${KP}">${o.map(({key:a,label:l,lines:p})=>u`<span class="bundles-languages-segment" style="${le({flexGrow:p,background:AT(a)})}" data-language-tooltip="${`${l} \xB7 ${s(p)}% \xB7 ${p.toLocaleString()} LoC`}"></span>`)}</div>${i}`}async function qP(e){try{await(await D()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function YP(e,t){let n=ZR(t),r=GT(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="${()=>{qP(e)}}">${Yu}<span>Download bundle</span></button>`:u`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${Yu}<span>Download bundle</span></a>`:u`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${Yu}<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)">${jP}<span>SPDX</span></button></div>`:g}</div>${r}</div>`}function Xu(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 Dy(e){let t=e.filter(n=>typeof n=="number");return t.length>0?t.reduce((n,r)=>n+r,0):null}function XP(e,t){if(e.npm)return JP(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} ${Nd(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="${Fs(e.commitInfo,d.commit.hash)??g}" target="_blank" rel="noopener noreferrer">${W(ll)}<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(cl)}<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=YP(e,t);if(!n)return Xu(i("",!0),a);if(t.error)return Xu(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 By(i,m,d,f,null,a,{bundleSize:t.size,unpackedSize:Dy(f)})}if(t.kind==="stasis"&&t.bundle){let l=t.bundle,p=xn(t),d=tv(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 By(i,w,f,y,Ot(t),a,{bundleSize:t.size,unpackedSize:Dy(y),resources:m,details:t})}return Xu(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`})}function JP(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}">${Yu}<span>Tarball</span></a>`,o=u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${db(e)}${r}</div></div>`;if(t?.integrity!==e.integrity||!t.json)return Xu(Eh(e,{githubFigures:mb(e),provenance:hb(e),provenanceNamesBuilder:gb(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=pb(e.npm);return By(m=>Eh(e,{prefix:m,githubFigures:mb(e),provenance:hb(e),provenanceNamesBuilder:gb(e.npm),files:l}),N1(e,l,t),s,a,null,g,{bundleSize:t.size,unpackedSize:Dy(a),resources:p,leadColumn:u`${O1(e)}${HC(e)}`,trailColumns:f_(p,i),summaryExtra:u`${BC(e,l)}${YC(e,t)}${p_(e,GT(t,{legend:!0}),t)}${PC(e,r,t_(e))}`,overviewClass:"npm-overview",lines:jT(t).lines,sized:(m,h,b)=>Xd(m,d[m],b),fileTag:m=>u`${fb(f.get(m))}${bb(t,m,!0)}`,fileFlags:m=>yb(t,m,f.get(m)),fileIcon:m=>kn(m,p.has(m)?"binary":void 0),fileFilter:GC(e)})}function KT(){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=Te(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])=>hf(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 oD(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();nD(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>${eD(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(ZP(l),QP,m=>sD(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">${lD(o[0],i,s?s[0]:void 0)}</div></aside>`:g}</div>`}</div>`}function ZP(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 QP(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function eD(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="${tD}"></triage-selector></div>`}var tD=["inprogress","fixed","invalid","deleted","ignored"];function nD(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 rD(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=Te(s,c.triage.get(j(s)))??null;i==="invalid"?n.invalid++:i==="deleted"?n.deleted++:n.live++}return n}function oD(e,t,n){let r=Zt().get(e),o=rD(r,n),s=c.packageSlideTriage??"live",i=r?qT(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>`:el(i,{kind:"package",bucketKey:e})}</div></div>`}function sD(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&&iD(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"?aD(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 iD(e,t){return e.kind==="single"?!0:e.version===t}function aD(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 lD(e,t,n){let r=Zt().get(e),s=[...(r?qT(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>${cD(e,t,n)}`}function qT(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=Te(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=YT(t,i);o.has(p)||o.set(p,[]);let d=o.get(p);for(let f of l)d.push(f)}return o}function cD(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=YT(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 YT(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 XT(){xt().catch(()=>{});let e=no(),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=Te(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 mD(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();pD(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>${dD(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])=>gD(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">${hD(o[0],o[1])}</div></aside>`:g}</div>`}</div>`}function dD(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="${uD}"></triage-selector></div>`}var uD=["inprogress","fixed","invalid","deleted","ignored"];function pD(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 fD(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=Te(r,c.triage.get(j(r)))??null;o==="invalid"?t.invalid++:o==="deleted"?t.deleted++:t.live++}return t}function mD(e,t){let n=no().get(e),r=fD(n),o=c.repositorySlideTriage??"live",s=n?JT(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>`:el(s,{kind:"repository",bucketKey:e})}</div></div>`}function gD(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 hD(e,t){let n=no().get(e),o=[...(n?JT(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>${bD(e,t)}`}function JT(e,t="live"){let n=new Map;for(let[r,o]of e.files){let s=o.filter(i=>{let a=Te(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 bD(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 ZT(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 Fo(e,t,n){return`${e} ${e===1?t:n}`}function yD(e,t){let n=Te(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`:$w[o];return u`<span class="${`links-finding-status triage-${o}`}" data-tooltip="${s?r.map(({name:a})=>oe(a)).join(", "):g}">${i}</span>`}function Uy(e,t=[],n=!0,r=g){let{id:o,title:s}=e,i=t[0]?.name,a=Kl(o),l=Gl(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} ${yD(e,t)} ${n?g:u`<span class="links-member-context">not in this link</span>`} ${r}</li>`}function QT(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 wD(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">${Uy(r,n,t.has(r.id),QT(n))}</ul></li>`}return u`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${Fo(e.members.length,"finding","findings")} in row</span> ${QT(n)}</div><ul class="links-row-members">${e.members.map(r=>Uy(r,n,t.has(r.id)))}</ul></li>`}function vD(e,t){let{rows:n,missing:r}=ZT(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">${Fo(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${Z(n,s=>s.key,s=>wD(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=>Uy({id:s,title:Sf(s)}))}</ul></div>`:g}</li>`}function eM(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=ro(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>${Fo(r.length,"link","links")}</span> <span>${Fo(s.size,"finding","findings")}</span> ${i.size>0?u`<span>found in ${Fo(i.size,"report","reports")}</span>`:g}</div></div></header>${a<s.size?u`<p class="links-note">${Fo(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">${Fo(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)=>vD(l,p))}</ol>`}</div>`}function Vy(e,t,n){let r=new Set(t);for(let o of n)r.add(o);return e.filter(o=>r.has(o))}function tM(){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?Vy(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 jy=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 _0(this.workspaceId,r.identifier);else{let s=await Cn(r.identifier);o=await Zc(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}=jc(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:Gc(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>${Kc(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",jy);function nM({workspaceId:e,items:t}={}){return re("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var rM=`.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 oM={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 kD(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 sM=e=>e===1?"copy":"copies",Gy=class extends N{static styles=[...N.styles,P(Bl),P(ot),P(rM)];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 kD(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 T0(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 R0(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 Ou({workspaceId:this.workspaceId,items:t})};_statusHint(t){let n=oM[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)}">${oM[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 ${sM(t.updated)} updated from the cloud`),t.uploaded&&n.push(`${t.uploaded} cloud ${sM(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",Gy);function Ky({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 iM=`.ssd-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.lwd-list{margin:.5rem 0 0}
|
|
200
|
-
`;var SD=10,qy=class extends N{static styles=[...N.styles,P(Bl),P(ot),P(iM)];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,SD),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",qy);function aM({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 CD=1500;function lM({open:e,later:t=(r,o)=>setTimeout(r,o),modalOpen:n=()=>mv()}){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,CD);return}r.add(i),d.sync&&typeof l=="function"&&l()},0))}return{suggestSync:s,isClosedFor:i=>r.has(i)}}function cM(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 dM(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 Zu=null;function kte(e){let t=Zu=document.startViewTransition(e);return t.ready.catch(()=>{}),t.finished.finally(()=>{Zu===t&&(Zu=null)}).catch(()=>{}),t}function uM(e){let t=null;return n=>{t!==null&&t!==n&&Zu?.skipTransition(),t=n,e()}}function Vt(){be.classList.add("active"),ut.classList.add("hidden")}function ew(){let e=Dp(c.reports);if(!e)return null;let t=Object.keys(e),r=fr().filter(d=>Fe(d).commonTriage===c.shownTriage),o=Pp(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=>(Jv(d)??"__own__")===ee.focusedPkg),ee.showAll||(p=p.filter(d=>zp(d,o,s)))):p=ee.showAll?t:t.filter(d=>zp(d,o,s)),{treeData:e,files:p,ownCounts:o,transitiveCounts:s,severitySets:i,colorSets:a,fileFindings:l,ownSourceFiles:Zv(p)}}function _D(){let e=Is();if(!e)return;let t=ew();if(!t)return;let n=c.currentView==="bundles";e.refreshSidebar(t,{isBundleContext:n,findingsJump:!(n&&_())})}function RD(){let e=Is();if(!e)return;let t=ew();t&&e.refreshTopPkgs(t)}function TD(e){return`${Dr[e]??e} findings`}function MD(e,t,n){return n?u`<repo-chip url="${n}"></repo-chip>`:_()?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 hM(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=Nu(c,l?[l]:[],Ie),f=p?`Team: ${p.name}`:l?`Workspace: ${l.name}`:a?TD(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=ja(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"}`}`,k=c.currentWorkspace?[]:ox(w,a?dd.filter(E=>E!=="type"):dd),$=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 M=et.filter(I=>E[I]>0);M.length>0&&($=u`<span class="status-bar" aria-hidden="true">${M.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=MD(n,r,C),L=u`<span class="sep" aria-hidden="true"></span>`,A=my(o,c.currentView);return u`<header class="page-head"><div class="page-title"><h1>${d?fy(d,c.currentView):f}${y}${ja(d,"bundles",c.currentView)}${R}${A}${bM()}</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:ID}=lM({open:e=>aM({names:e})}),AD=new Set(["findings","files","links"]);function bM(){if(G.status!=="online")return g;if(!AD.has(c.currentView))return g;let e=tM();if(!e)return g;let{workspaceId:t,fileNames:n,mode:r}=e,o=k0(t);if(o.length>0&&ID(t,o,{onSync:()=>Yy(t,r,n),retry:O}),r==="single"){let x=n[0];if(o.includes(x))return pM({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:()=>Yy(t,r,n)});let k=tg(t,x)?"cloud":"local";return pM({status:k,label:k,title:k==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:k==="local"?()=>fM({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=rg(t),l=n.filter(x=>!tg(t,x)),p=i.filter(x=>!v0(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(),Yy(t,r,n)}}">${wM()}<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(),Ky({workspaceId:t,cloudCount:a,localFileNames:n,localBundles:i})}}">${vM()}<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(),fM({workspaceId:t,items:d})}}">${yM()}<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 Yy(e,t,n){let r=Y().find(i=>i.id===e),o=t==="single"?Vy(r?.reports??[],c.storedFiles??[],n):n,s=r&&Array.isArray(r.bundles)?r.bundles:[];return Ky({workspaceId:e,cloudCount:rg(e),localFileNames:o,localBundles:s,autoRun:!0})}function pM({status:e,label:t,title:n,onClick:r}){let o=e==="cloud"?vM():e==="differ"?wM():yM(),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 yM(){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 wM(){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 vM(){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 fM({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 nM({workspaceId:e,items:t})}function ED(e){return Object.values(e).some(n=>n>0)||c.filterSeverities.size>0?u`<severity-chips .counts="${e}"></severity-chips>`:g}function FD(e){return Object.values(e).some(n=>n>0)||c.filterColors.size>0?u`<triage-filter .counts="${e}"></triage-filter>`:g}function LD(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:M,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="${M&&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} ${ED(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} ${FD(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function Xy(e,t){return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}var mM=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),ep=null,$M=0,Zs=null;function tl(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 kM=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>`,xM=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>`,OD={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};function Qy(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?zc(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=OD[b]??"?",w=Po(i)&&c.severityMode!=="original",v=he(i),x=v?.flagged===!0,k=v?.fix||tn(i),$=v?.comment??"",S=g;l&&k?S=Do(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="${$}">${Td}</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="${gs[d]}" aria-label="${gs[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 Jy={content:"",parts:""};function ND(e){return Jy.content!==e&&(Jy={content:e,parts:Ld(e)}),Jy.parts}function BD(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):ND(t)}</code></pre></div>`}function SM(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 CM(e,t=g,n=!1){c.focusCodeTick;let r=Tx(e),o=kd(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:SM(e)} ${tl(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="${nc}" aria-valuemax="${rc}" 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">:${Hv(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">${_s}</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">${Rs}</button></div>`:g}</header><div class="focus-code-body">${BD(r)}</div>`}</div>`:g}</div>`}function _M(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">${SM(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?xM:kM}</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?CM(e,d,!0):tl(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">${_s}</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">${Rs}</button></div></div><div class="kanban-detail-side-body">${Z(l,f=>ie(f),f=>Qy(f,{variant:"kanban-side",active:ie(f)===a}))}</div></aside>`}</div>`}function PD(e,t){if(c.viewMode==="table"){let r=c.sortBy==="file"?Xy(e,mM):e;return r.length===0?g:(ep=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">${tl(t)}</div></aside>`:g}</div>`)}if(c.viewMode==="focus"){if(e.length===0)return g;let r=e.indexOf(t);$M=r;let o=t,s=r===0,i=r===e.length-1;return u`<div class="focus-view">${CM(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">${_s}</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">${Rs}</button></div></div><div class="focus-sidebar-body">${Z(e,a=>ie(a),a=>Qy(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?xM:kM}</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)=>Qy(h,{active:ie(h)===c.kanbanPopoverGid,expandedTrackLast:(b+1)%r.length===0}))}</div></div>`})}</div>${_M(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"?Xy(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>${Np(a,En(a))}</span> <span class="count">${i.length}</span></div><div class="file-body">${Z(i,l=>ie(l),l=>tl(l,!1,null,!0))}</div></div>`})}`}let n=c.sortBy==="file"?Xy(e,mM):e;return u`${Z(n,r=>ie(r),r=>{let o=je(r),s=Kv(o,En(o)),i=Jr(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">${Np(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>${tl(r,!0,null,!0)}</div>`})}`}function DD(){c.bundleSourceFile&&Ag().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&J(DT(),e)}var zD=uM(HD);function O(){zD(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 zu(){let e=Nu(c,Y(),Ie);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=bn("empty-workspace-slot");t&&J(u`${hM([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),Vt()}var WD={"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"}},gM=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),Qu=null;function qa(){let e=c.revalidateConflicts.size>0,t=!e&&Wl(c.reports);return e?c.showRevalidation!==!1&&(Qu=c.showRevalidation,c.showRevalidation=!1):(Qu!==null&&(c.showRevalidation=Qu,Qu=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 Zy=null;function HD(){ws()||j0(),DD(),Hl(c.reports),xc()&&queueMicrotask(()=>{xe()}),Ul(c.reports)&&pr();let e=qa(),t=c.reports.some(T=>(T.groups??[]).some(F=>F.some(z=>z.isUpstream)));if(c.currentView==="workspace-reports"||c.currentView==="workspace-bundles"){let T=c.currentView.slice(10),F=Nu(c,Y(),Ie),z=bn("workspace-content-slot");z&&J(PR(F,T,c.workspaceContentFileCount),z),document.title=F?`${F.title} \u2014 ${T}`:`DeepView \u2014 ${T}`;return}if(c.currentView==="bundles")if((c.bundles??[]).length===0)c.currentView="findings";else{Xn(c.bundleDetailsTab,c.bundleSourceFile)&&Ag().catch(()=>{});let T=bn("bundles-slot");T&&J(VT(c.bundles),T);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=FT(c.bundleDetails);if(vt){NT(vt);let mw={hideAllFiles:!0,triageCounts:ET(c.bundleDetails,new Set(vt.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:vt.canPackagesView,showBundleLayouts:!0,hasIssues:vt.hasIssues},ii=Zy,gw=Re.querySelector("graph-layout");!vt.issuesShown&&ii&&!ii.issuesShown&&gw&&ii.state===ee.graphState&&ii.details===F&&ii.reason===ee.bundleReason?gw.options=mw:(Zy=null,Wg(Re,vt,mw,LT,OT).then(NM=>(NM&&ee.graphState&&(Zy={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&&Gx(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 T=bn("dependency-reviews-slot");T&&J(u`<dependency-review-list .session="${c.managedSession}"></dependency-review-list>`,T),Vt(),document.title="DeepView \u2014 my reviews";return}if(c.currentView==="npm"){let T=bn("npm-slot");T&&J(E1(),T),Vt(),document.title="DeepView \u2014 npm packages";return}if(c.currentView==="packages"){let T=bn("packages-slot");T&&J(KT(),T),Vt(),document.title="DeepView \u2014 packages";return}if(c.currentView==="repositories"){let T=bn("repositories-slot");T&&J(XT(),T),Vt(),document.title="DeepView \u2014 repositories";return}if(c.currentView==="links"){if(c.currentLinks){let T=bn("links-slot"),F=ws();T&&J(u`${eM(bM())}${F?_M(F.group,null,[],F):g}`,T),Vt(),document.title=`DeepView \u2014 ${c.currentLinks.name}`;return}c.currentView="findings"}if(c.currentView==="scan"&&customElements.get("local-scan-page")){let T=bn("scan-slot");if(T&&!T.firstElementChild){let F=document.createElement("local-scan-page");F.selection=c.scanSelection,T.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=WD[c.currentView];if(n){let T=bn(n.slot);T?.classList.add("managed-page-slot");let F=T?.firstElementChild?.session;if((F?.id!==c.managedSession?.id||F?.role!==c.managedSession?.role)&&T?.replaceChildren(),T&&!T.firstElementChild){let z=document.createElement(n.tag),pe=Re=>bi(Re,{gate:vt=>!Object.hasOwn(vt.dataset,"tooltipTruncated")||vt.scrollWidth>vt.clientWidth});z.localImportSource=dm(),c.currentView==="manage-import"&&(z.localDeps=cm(),z.promptPassword=Hc,z.resolveConflicts=qc,z.confirmTriageImport=i0,z.confirmContentImport=l0,z.showTriageComparison=p0),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),T.append(z),(async()=>{await customElements.whenDefined(n.tag),await z.updateComplete,pe(z.renderRoot)})().catch(()=>{})}T?.firstElementChild&&(T.firstElementChild.session=c.managedSession,T.firstElementChild.allowShare=c.managed?.allowShare===!0),c.currentView==="manage-scans"&&T?.firstElementChild&&(T.firstElementChild.selection=c.scanSelection),c.currentView==="manage-bundles"&&T?.firstElementChild&&(T.firstElementChild.createRepoId=c.bundleCreationRepoId),Vt(),document.title=n.title;return}if(c.reports.length===0){c.currentWorkspace&&document.querySelector("#empty-workspace-slot")&&zu();return}let r=fr(),o=c.viewMode==="kanban",s={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},i=[];for(let T of r){let F=Fe(T).commonTriage;F&&s[F]++,(o||F===c.shownTriage)&&i.push(T)}Object.defineProperty(i,"ruledOutIds",{value:r.ruledOutIds});let a=!1,l=!1,p=!1,d=!1;for(let T of r)for(let F of T){Po(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=td(),m=r.some(T=>T.some(F=>f.has(F.id)));m||(c.filterDuplicates="");let h=i.some(ug),b=i.some(pg);h||(c.filterCrossContext=""),b||(c.filterAppStacked="");let y=B0(i);y||(c.filterSecurity="");let w=new Set,v=!1,x=!1,k=!1;for(let T of i)for(let F of T){let z=Yr(F);z&&w.add(z)}for(let T of bg()){let F=!1,z=!1;for(let pe of T){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(T=>T.type))].join(", "),C=c.reports.map(T=>T.fileName),R=i.map(Ct).filter(T=>T.length>0),L=R.length>0&&Lp(R),A=dg(r),E=r.some(T=>T.some(F=>Zn(F.file))),M=r.some(T=>T.some(F=>!Zn(F.file))),I=!1,U=!1,K;e:for(let T of r)for(let F of T)if(!U)U=!0,K=F.file;else if(F.file!==K){I=!0;break e}let Q=r.some(T=>T.some(F=>!F.repo?.github&&!Zn(F.file))),ze=new Set;for(let T of r)for(let F of T)!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 T of r)for(let F of T)Ke.add(F._analyzer??null),Ce.add(ia(F));let yt=Object.keys(wg),Nr=T=>{if(T==null)return 1/0;let F=yt.indexOf(T);return F===-1?yt.length:F},rp=[...Ke].toSorted((T,F)=>{let z=Nr(T),pe=Nr(F);return z!==pe?z-pe:String(T??"").localeCompare(String(F??""))}),op=[...Ce].toSorted(gM);if(c.filterAnalyzer){let T=c.filterAnalyzer===bs?null:c.filterAnalyzer;(!Ke.has(T)||Ke.size<2)&&(c.filterAnalyzer="")}if(c.filterModel){let T=c.filterModel===ys?null:c.filterModel;(!Ce.has(T)||Ce.size<2)&&(c.filterModel="")}let Hn=Bv(w);c.filterRevalidate&&!Hn.some(T=>T.value===c.filterRevalidate)&&(c.filterRevalidate="");let V=rd(i);V&&(c.filterRevalidate="confirmed");let ue=w.has("partial")&&po();ue||(c.filterPartial="");let wt=e&&(v||x||!c.currentWorkspace&&k),ow=!(e&&c.showRevalidation!==!1)&&!c.upstreamOnly&&E&&M;!ow&&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 sp=P0(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 T of sp){if(T.length===1){let pe=de(T[0],c.severityMode);ti[pe]=(ti[pe]||0)+1;let Re=he(T[0])?.color??"none";ni[Re]=(ni[Re]||0)+1;continue}let F=new Set(T.map(pe=>de(pe,c.severityMode)));for(let pe of F)ti[pe]=(ti[pe]||0)+1;let z=new Set(T.map(pe=>he(pe)?.color??"none"));for(let pe of z)ni[pe]=(ni[pe]||0)+1}let sw=A0(sp),AM=[...sw].toSorted(gM);if(c.filterRepo){let T=c.filterRepo===ig?null:c.filterRepo;sw.has(T)||(c.filterRepo="")}let ri=z0(od(i)),ol=Dp(c.reports),iw=ol?Object.keys(ol).length:0,ip=iw>1;!ip&&c.currentView==="files"&&(c.currentView="findings"),!ip&&c.viewMode==="graph"&&(c.viewMode="kanban");let aw=hM(r,C,Q,We,iw);if(c.currentView==="files"){let T=Pp(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(aw,F),z&&J(Hx(ol,T),z),Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let EM=c.viewMode==="table"&&c.tableSelectedGid&&ri.some(T=>ie(T)===c.tableSelectedGid),oi=null;c.viewMode==="graph"&&ol&&(oi=ew(),oi||(c.viewMode="kanban"));let sl=!!oi,Br="findings-content";EM&&(Br+=" with-details"),sl&&(Br+=" with-graph"),o&&(Br+=" with-kanban"),c.viewMode==="focus"&&(Br+=" with-focus");let lw=g,il=g,cw=g,dw=cM(ri,c,$M);ep=null,sl||(lw=LD(ri.length,i.length,s,ti,ni,{showSource:ow,showConfidence:L,showPriority:A,showGraphMode:ip,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:rp,models:op,groups:sp},AM),c.shownTriage&&i.length===0?il=u`<p style="color:var(--muted); margin: 1rem 0;">No ${c.shownTriage} findings.</p>`:ri.length===0&&i.length>0&&!o?il=u`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:i.length===0&&(il=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>`),cw=PD(ri,dw));let si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content"),FM=Gt&&Gt.querySelector(":scope > #findings-graph-slot"),LM=Gt&&Gt.querySelector(":scope > #findings-body-slot"),OM=Gt&&(FM?"graph":LM?"body":null)===(sl?"graph":"body");if(!si||!Gt||!be.contains(si)||!be.contains(Gt)||!OM){let T=sl?'<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}">${T}</div>`,si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content")}else Gt.className!==Br&&(Gt.className=Br);si&&J(aw,si);let uw=document.querySelector("#toolbar-slot");uw&&J(lw,uw);let pw=document.querySelector("#empty-state-slot");pw&&J(il,pw);let fw=document.querySelector("#findings-body-slot");if(fw&&J(cw,fw),oi){let T=document.querySelector("#findings-graph-slot");if(T){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"]};Wg(T,oi,z,_D,RD)}}if(ep){let T=be.querySelector(".finding-table-slot");T&&(Zs||(Zs=document.createElement("finding-table")),Zs.items=ep,Zs.selectedGid=c.tableSelectedGid,Zs.parentNode!==T&&T.append(Zs))}Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`,_()&&te?.replaceFindingRoute(dM(dw,c))}var qD=500,YD=14;function tp(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 nl(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function XD(e,t){return e.length>100?!1:t==null?!0:(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}var JD=e=>new TextEncoder().encode(e).length,jt=new Map,ei=new Set,rl=(e,t=c.currentManagedTeam)=>JSON.stringify([t,e]),Or=new Map,Wn=null,Qs=Promise.resolve();function TM(){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 tw(){return Array.isArray(c.managedReports)&&c.managedReports.length>0?c.managedReports:c.managedReport==null?[]:[c.managedReport]}function MM(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(TM())}function ZD(e){let t=tw();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 nw(){let e=c.managedSession;return c.serverMode==="managed"&&c.localMode!==!0&&e!=null&&Yn(e.role,"triage")}function QD(e){return e===403&&c.managedSession?.viewer?!0:e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function e5(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 t5(e,t,n){if(!nw())return;let r=[...e.changes.keys()],o=0;for(;o<r.length;){let s=o,i={},a=0,l=YD;for(;o<r.length&&a<200;){let f=r[o],m=JD(`${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 Kk(e.report.id,i,c.managedSession?.csrfToken,e.teamId),d=p>=200&&p<300;if(!d&&!QD(p)){e5(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:nl(m),fix:b})}}}function np(){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(()=>t5(r,t,n)).catch(o=>{console.warn("managed: triage push failed",o)});Qs=Qs.finally(()=>{for(let r of t)ms(r);for(let r of n)Cb(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function IM(){if(!(tw().length===0||!nw()||ei.size===0)){for(let t of TM()){let n=tp(c.triage.get(t)),r=nl(n);if((jt.get(t)?.key??"")===r)continue;if(!XD(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=ZD(t);if(o==null||!ei.has(rl(o.id)))continue;let s=c.currentManagedTeam,i=rl(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(np,qD))}}var RM=!1;function cR(){RM||!nw()||(RM=!0,om(IM))}function Iu(){E$(),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 Ine(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&&tw().some(y=>y.id===e);if(!l()||(ei.delete(rl(e)),np(),!await rw(n)||!l()))return!1;let p=new Map(c.managedIssues),d=r?await r(e):null,f=r?d?.entries:await Km(e,s,{signal:n});if(f==null||!l())return!1;let m=!1,h=MM(e),b=d&&ta(h,d.issues,p);for(let y of h){if(!Object.hasOwn(f,y)){jt.delete(y);continue}let w=tp(f[y]);jt.set(y,{key:nl(w),fix:w?.fix??""});let v=w?.triage==null||w.triage==="ignored"?c.triage.get(y)?.ignoredReports:void 0;gl(c.triage,y,{...w,ignoredReports:v,scopedIgnoredReports:c.triage.get(y)?.scopedIgnoredReports})&&(m=!0)}if(ei.add(rl(e)),d&&Vm(s,h,p),b&&!m&&t&&O(),m){if(await xe(),!l())return!1;t&&O()}return IM(),!0}function rw(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 Cb(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(rl(e,o));if(!a()||(np(),!await rw(t)||!a()))return!1;let l=MM(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 Km(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=tp(c.triage.get(w));if(jt.get(w)!==v||nl(x)!==(v?.key??""))continue;let k=tp(m[w]);(v?.fix??"")!==(k?.fix??"")&&(y=!0),jt.set(w,{key:nl(k),fix:k?.fix??""});let $=k?.triage==null||k.triage==="ignored"?c.triage.get(w)?.ignoredReports:void 0;gl(c.triage,w,{...k,ignoredReports:$,scopedIgnoredReports:c.triage.get(w)?.scopedIgnoredReports})&&(b=!0)}if(y&&ms(o),f&&Vm(o,l,d),h&&!b&&O(),b){if(await xe(),!a())return!1;O()}return!0}function x_(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()=>(np(),!await rw(t)||t?.aborted?null:Uk(e,{signal:t,reportId:n})))(),(await r)?.(o)??null)}export{S$ as a,C$ as b,_$ as c,R$ as d,pf as e,T$ as f,Qr as g,c as h,_ as i,dI as j,hI as k,Ie as l,Df as m,Y as n,is as o,TI as p,II as q,AI as r,FI as s,LI as t,Yi as u,J$ as v,OI as w,xe as x,nk as y,VI as z,jI as A,GI as B,cA as C,uA as D,AW as E,EW as F,FW as G,LW as H,OW as I,NW as J,G as K,te as L,ea as M,Pm as N,Dm as O,Hm as P,dz as Q,ye as R,Ae as S,rn as T,Uc as U,t0 as V,Vc as W,qc as X,ot as Y,Ee as Z,bs as _,ig as $,ys as aa,nd as ba,GW as ca,KW as da,qW as ea,cr as fa,NA as ga,BA as ha,aa as ia,od as ja,z0 as ka,ZW as la,ws as ma,j0 as na,u6 as oa,ie as pa,po as qa,dr as ra,GA as sa,_t as ta,he as ua,KA as va,ur as wa,je as xa,En as ya,J0 as za,Fe as Aa,_6 as Ba,YA as Ca,R6 as Da,da as Ea,T6 as Fa,fr as Ga,mo as Ha,M6 as Ia,I6 as Ja,cd as Ka,$s as La,eH as Ma,me as Na,yH as Oa,wH as Pa,Mg as Qa,go as Ra,gr as Sa,vH as Ta,yE as Ua,hd as Va,Ag as Wa,vd as Xa,TH as Ya,MH as Za,$x as _a,Sx as $a,kd as ab,jH as bb,xd as cb,Cs as db,QH as eb,FE as fb,iU as gb,Ax as hb,Ex as ib,LE as jb,Pg as kb,Sd as lb,aU as mb,lU as nb,Cd as ob,_d as pb,_s as qb,Rs as rb,Lx as sb,gU as tb,hU as ub,it as vb,DU as wb,zU as xb,dF as yb,WU as zb,As as Ab,wr as Bb,Id as Cb,o8 as Db,Yx as Eb,Ld as Fb,CS as Gb,_S as Hb,TS as Ib,eh as Jb,MS as Kb,oL as Lb,sL as Mb,IS as Nb,AS as Ob,RV as Pb,lL as Qb,cL as Rb,WS as Sb,ah as Tb,US as Ub,HV as Vb,VS as Wb,GS as Xb,JS as Yb,ZS as Zb,ZV as _b,e1 as $b,QV as ac,ej as bc,uh as cc,nj as dc,rj as ec,cj as fc,wh as gc,Ca as hc,f1 as ic,ln as jc,k1 as kc,Ra as lc,x1 as mc,lN as nc,bN as oc,wN as pc,vN as qc,Vh as rc,dC as sc,kN as tc,xN as uc,g7 as vc,SN as wc,h7 as xc,$7 as yc,k7 as zc,x7 as Ac,S7 as Bc,C7 as Cc,hC as Dc,vC as Ec,xC as Fc,Jh as Gc,CC as Hc,eb as Ic,xK as Jc,TC as Kc,SK as Lc,CK as Mc,DN as Nc,_K as Oc,m_ as Pc,kb as Qc,Ge as Rc,AB as Sc,cR as Tc,Iu as Uc,Ine as Vc,Cb as Wc,x_ as Xc,Mo as Yc,cy as Zc,Va as _c,uR as $c,Ir as ad,Ks as bd,XR as cd,aZ as dd,lZ as ed,Uu as fd,nT as gd,XZ as hd,JZ as id,LT as jd,OT as kd,qu as ld,kte as md,_D as nd,RD as od,O as pd,zu as qd,qa as rd,Pc as sd,_k as td,bz as ud,yz as vd,wz as wd,vz as xd,$z as yd,kz as zd,xz as Ad,Sz as Bd,qm as Cd,Cz as Dd,_z as Ed,Rz as Fd,Tz as Gd,T_ as Hd,H_ as Id,H as Jd,_X as Kd,Tt as Ld};
|
|
203
|
-
/*! Bundled license information:
|
|
204
|
-
|
|
205
|
-
lit-html/directives/map.js:
|
|
206
|
-
lit-html/directives/choose.js:
|
|
207
|
-
(**
|
|
208
|
-
* @license
|
|
209
|
-
* Copyright 2021 Google LLC
|
|
210
|
-
* SPDX-License-Identifier: BSD-3-Clause
|
|
211
|
-
*)
|
|
212
|
-
|
|
213
|
-
lit-html/async-directive.js:
|
|
214
|
-
(**
|
|
215
|
-
* @license
|
|
216
|
-
* Copyright 2017 Google LLC
|
|
217
|
-
* SPDX-License-Identifier: BSD-3-Clause
|
|
218
|
-
*)
|
|
219
|
-
|
|
220
|
-
lit-html/directives/ref.js:
|
|
221
|
-
(**
|
|
222
|
-
* @license
|
|
223
|
-
* Copyright 2020 Google LLC
|
|
224
|
-
* SPDX-License-Identifier: BSD-3-Clause
|
|
225
|
-
*)
|
|
226
|
-
*/
|