@preventive/triage 1.0.0-alpha.39 → 1.0.0-alpha.40
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/dependency-reviews.js +1 -1
- package/common/managed/routes.js +2 -2
- package/out/{chunk-ZPD5R5RP.js → chunk-4F6JSF57.js} +1 -1
- package/out/chunk-AQ75QITE.js +1 -0
- package/out/{chunk-XNGEQO7Y.js → chunk-B2RQY6OP.js} +1 -1
- package/out/chunk-IISEF2BZ.js +1 -0
- package/out/{chunk-QSLWGJBQ.js → chunk-MYDDTA7W.js} +46 -44
- package/out/{chunk-F4OMDNEY.js → chunk-RSHMVYNS.js} +1 -1
- package/out/{chunk-JVBB4LZX.js → chunk-TGANXVTA.js} +1 -1
- package/out/{chunk-6C76GAXK.js → chunk-UN5ZSYLE.js} +1 -1
- package/out/{chunk-TINZZKP5.js → chunk-UXNUAIIC.js} +1 -1
- package/out/chunk-VQJCXGIY.js +7 -0
- package/out/chunk-WZDTZE64.js +1 -0
- package/out/{chunk-ABW5FVSN.js → chunk-ZBBOBQ43.js} +1 -1
- package/out/{chunk-GMFXFEUA.js → chunk-ZMQQCGF6.js} +1 -1
- package/out/client-managed-import.js +1 -1
- package/out/client-managed.js +14 -14
- package/out/client-sync.js +1 -1
- package/out/graph.js +1 -1
- package/out/index.html +7 -7
- package/out/view.css +1 -1
- package/out/view.js +2 -2
- package/package.json +1 -1
- package/out/chunk-45WIN3SW.js +0 -1
- package/out/chunk-7ZKDKGAH.js +0 -1
- package/out/chunk-HIV7SVI7.js +0 -1
- package/out/chunk-XRWAV3DX.js +0 -7
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import{b as Cv}from"./chunk-K3X5EJBQ.js";import{a as ut,b as be,d as pv,e as Al,f as fv,g as N,h as re,i as El}from"./chunk-CVVJAXVY.js";import{A as mt,B as ce,C as Xt,D as fe,E as Cn,F as Hp,G as Up,H as Jo,I as l$,J as Je,K as Vp,L as c$,M as Zr,N as jp,O as _n,P as Gp,Q as Kp,R as qp,S as Yp,T as Xp,U as Jp,a as ql,b as o$,d as ft,e as Yo,f as tr,g as Yl,h as xi,i as Np,j as kt,k as Si,l as Bp,m as Dp,n as Pp,o as s$,p as i$,q as Yt,r as ve,s as Me,t as nr,u as Ci,v as a$,w as zp,x as Wp,y as Xo,z as Xl}from"./chunk-VIHGO77Y.js";import{m as e$,o as t$,q as n$,w as r$,x as Lp,y as Op}from"./chunk-RFZQQXSG.js";import{a as Iw,b as ct,c as Te,e as lp,f as Aw,g as gl,h as Ew,i as Fw,j as dp,k as Lw,l as bl,m as yl,n as wl,o as vl,p as ke,q as qn,r as Cl,s as fi,t as Bw}from"./chunk-F4OMDNEY.js";import{$ as $v,A as xn,B as ev,C as gp,D as Ot,E as tv,F as Xn,G as Tl,H as nv,I as gi,J as rv,K as hi,L as hp,M as Vo,N as sv,O as iv,P as av,Q as Ml,R as lv,S as Il,T as cv,U as dv,V as uv,X as bv,Y as yv,Z as wv,_ as vv,a as Ww,aa as Fl,b as Pe,ba as yi,c as oe,ca as jo,d as Uw,da as Go,ea as Nt,f as Vw,fa as kv,ga as bp,h as jw,ha as yp,i as Gw,ia as Ll,ja as Ol,k as mi,ka as qr,l as Kw,la as wp,m as Ho,ma as xv,n as kn,na as Sv,p as qw,q as _l,r as Yw,s as mp,t as Xw,u as Jw,v as Lt,w as Zw,x as Rl,y as we,z as Qw}from"./chunk-XYDGU6BM.js";import{a as Dw,b as Pw,c as Yn,d as fp,e as zw,f as vn,h as $n}from"./chunk-UYAXVRVL.js";import{g as _v,h as Rv,i as vp,j as wi,k as Bl,l as Jn,m as Ko,n as $p,o as kp,q as Dl,r as xp,s as pt,t as Sp,w as Tv}from"./chunk-XRWAV3DX.js";import{a as qe,b as Wr,c as Hr,d as Kn,e as fl,f as ae,g as ml,h as tt}from"./chunk-W4J3MGLB.js";import{b as cp,c as ci,d as hl}from"./chunk-PNHBZGDD.js";import{$ as ee,A as Zn,B as Hl,C as Ul,D as Qn,E as Nv,F as Jr,H as nt,I as Mp,J as Vl,K as Bv,L as er,M as Dv,N as Pv,O as ki,P as zv,Q as Wv,R as Hv,S as Uv,T as Vv,U as jv,V as Gv,X as Kv,Y as jl,Z as Gl,_ as qv,a as q,aa as Bt,b as le,ba as Yv,c as j,ca as Xv,d as Mv,fa as Sn,ga as Ip,h as Cp,ha as Ap,i as _p,ia as Ep,j as Rp,ja as Kl,k as Iv,ka as Fp,l as Av,m as Ev,ma as Jv,n as Pl,o as vi,oa as Zv,p as Tp,pa as Qv,q as Yr,s as zl,t as Fv,u as $i,v as Xr,w as Lv,x as Ov,y as Wl,z as qo}from"./chunk-TINZZKP5.js";import{a as Nl}from"./chunk-R5O6FAW4.js";import{a as mv,b as gv,d as bi,e as hv}from"./chunk-CMQA4DM6.js";import{b as pl,c as dt,d as Sl,e as jr,f as pp,g as pi}from"./chunk-ZPD5R5RP.js";import{a as ge,e as Kr,g as ov,h as Uo}from"./chunk-YVZH5SHP.js";import{a as Gr}from"./chunk-3BZ7JERB.js";import{a as Z}from"./chunk-TZ5KB2Y5.js";import{a as Hw}from"./chunk-XYFXXB2G.js";import{a as W}from"./chunk-DIJJNTRH.js";import{a as up,c as Vr,d as $l,e as Ow,g as kl,h as Wo,i as di,j as Ye,k as xl,l as ui,m as Nw,n as Xe}from"./chunk-HIV7SVI7.js";import{A as Cw,B as Do,C as Po,D as De,E as Ft,G as _w,H as Gn,J as yn,K as Rw,L as ap,M as Tw,N as Mw,O as $t,a as Dr,f as vw,h as Pr,i as _e,j as et,k as ai,l as Bo,m as de,n as $w,o as kw,p as Be,q as jn,r as cl,t as zr,u as li,v as qt,w as xw,x as dl,y as Sw,z as ul}from"./chunk-GNXOKIGP.js";import{a as gw,b as ip,c as hw}from"./chunk-C4Z6ZBXV.js";import{a as D,b as sp,c as u,d as Un,g,i as J,j as Et}from"./chunk-2XUEZHIP.js";import{a as zo,b as wn,c as Ur}from"./chunk-TUII34K2.js";import{a as bw,c as Lo,d as Oo,e as No,j as il,k as yw,l as Vn,m as ww,p as Kt,q as al,r as ll}from"./chunk-V5O7M2YT.js";var tf=new WeakMap,f$=Symbol("iteration key");function IM(e){tf.set(e,new Map)}function AM(e,{target:t,key:n,type:r}){r==="iterate"&&(n=f$);let o=tf.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 EM({target:e,key:t,type:n}){let r=tf.get(e),o=new Set;if(n==="clear"?r.forEach((s,i)=>{Zp(o,r,i)}):Zp(o,r,t),n==="add"||n==="delete"||n==="clear"){let s=Array.isArray(e)?"length":f$;Zp(o,r,s)}return o}function Zp(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function m$(e){e.cleaners&&e.cleaners.forEach(FM,e),e.cleaners=[]}function FM(e){e.delete(this)}var Zo=[],Qp=!1;function LM(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(Zo.indexOf(e)===-1){m$(e);try{return Zo.push(e),Reflect.apply(t,n,r)}finally{Zo.pop()}}}function Dt(e){let t=Zo[Zo.length-1];t&&(g$(t,e),AM(t,e))}function rr(e){EM(e).forEach(OM,e)}function OM(e){g$(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function g$(e,t){if(e.debugger&&!Qp)try{Qp=!0,e.debugger(t)}finally{Qp=!1}}function h$(){return Zo.length>0}var d$=Symbol("is reaction");function b$(e,t={}){let n=e[d$]?e:function r(){return LM(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[d$]=!0,t.lazy||n(),n}function nf(e){e.unobserved||(e.unobserved=!0,m$(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}var He=new WeakMap,Ql=new WeakMap,NM=Object.prototype.hasOwnProperty;function Zl(e){let t=Ql.get(e);return h$()&&typeof e=="object"&&e!==null?t||ec(e):t||e}function ef(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=Zl(o[1]):o=Zl(o)),{done:r,value:o}},e}var u$={has(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Dt({target:t,key:e,type:"has"}),n.has.apply(t,arguments)},get(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Dt({target:t,key:e,type:"get"}),Zl(n.get.apply(t,arguments))},add(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.add.apply(t,arguments);return r||rr({target:t,key:e,value:e,type:"add"}),o},set(e,t){let n=He.get(this),r=Reflect.getPrototypeOf(this),o=r.has.call(n,e),s=r.get.call(n,e),i=r.set.apply(n,arguments);return o?t!==s&&rr({target:n,key:e,value:t,oldValue:s,type:"set"}):rr({target:n,key:e,value:t,type:"add"}),i},delete(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.get?n.get.call(t,e):void 0,s=n.delete.apply(t,arguments);return r&&rr({target:t,key:e,oldValue:o,type:"delete"}),s},clear(){let e=He.get(this),t=Reflect.getPrototypeOf(this),n=e.size!==0,r=e instanceof Map?new Map(e):new Set(e),o=t.clear.apply(e,arguments);return n&&rr({target:e,oldTarget:r,type:"clear"}),o},forEach(e,...t){let n=He.get(this),r=Reflect.getPrototypeOf(this);Dt({target:n,type:"iterate"});let o=(s,...i)=>e(Zl(s),...i);return r.forEach.call(n,o,...t)},keys(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Dt({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t.values.apply(e,arguments);return ef(n,!1)},entries(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t.entries.apply(e,arguments);return ef(n,!0)},[Symbol.iterator](){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t[Symbol.iterator].apply(e,arguments);return ef(n,e instanceof Map)},get size(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Dt({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Jl={get(e,t,n){return e=NM.call(u$,t)?u$:e,Reflect.get(e,t,n)}},p$=typeof window=="object"?window:Function("return this")(),y$=new Map([[Map,Jl],[Set,Jl],[WeakMap,Jl],[WeakSet,Jl],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function BM({constructor:e}){return!(typeof e=="function"&&e.name in p$&&p$[e.name]===e)||y$.has(e)}function DM(e){return y$.get(e.constructor)}var w$=Object.prototype.hasOwnProperty,PM=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));function zM(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&PM.has(t))return r;Dt({target:e,key:t,receiver:n,type:"get"});let o=Ql.get(r);if(h$()&&typeof r=="object"&&r!==null){if(o)return o;let s=Reflect.getOwnPropertyDescriptor(e,t);if(!s||!(s.writable===!1&&s.configurable===!1))return ec(r)}return o||r}function WM(e,t){let n=Reflect.has(e,t);return Dt({target:e,key:t,type:"has"}),n}function HM(e){return Dt({target:e,type:"iterate"}),Reflect.ownKeys(e)}function UM(e,t,n,r){typeof n=="object"&&n!==null&&(n=He.get(n)||n);let o=w$.call(e,t),s=e[t],i=Reflect.set(e,t,n,r);return e!==He.get(r)||(o?n!==s&&rr({target:e,key:t,value:n,oldValue:s,receiver:r,type:"set"}):rr({target:e,key:t,value:n,receiver:r,type:"add"})),i}function VM(e,t){let n=w$.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&rr({target:e,key:t,oldValue:r,type:"delete"}),o}var jM={get:zM,has:WM,ownKeys:HM,set:UM,deleteProperty:VM};function ec(e={}){return He.has(e)||!BM(e)?e:Ql.get(e)||GM(e)}function GM(e){let t=DM(e)||jM,n=new Proxy(e,t);return Ql.set(e,n),He.set(n,e),IM(e),n}var rt=ec;function Rn(e){let t=!0,n=b$(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw nf(n),r}return()=>nf(n)}var $$="deepview.viewMode",k$="deepview.severityMode",Ri="deepview.repoUrls",x$="deepview.focusSplit",S$="deepview.kanbanDetailFullscreen",C$="deepview.bundleSourceWrap",KM=new Set(["corrected","original"]),of=50,tc=20,nc=80;try{localStorage.removeItem($$)}catch{}function qM(){try{let e=localStorage.getItem(k$);return e!==null&&KM.has(e)?e:null}catch{return null}}function YM(){try{let e=localStorage.getItem(S$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function XM(){try{let e=localStorage.getItem(C$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function _$(e){if(!Number.isFinite(e))return of;let t=Math.round(e*10)/10;return Math.min(Math.max(t,tc),nc)}function JM(){try{let e=localStorage.getItem(x$);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?_$(t):null}catch{return null}}function rc(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function oc(){return rc(ve(Ri))}function Ze(e){return e?oc()[e]??"":""}var rf=new Set;function R$(e){return rf.add(e),()=>{rf.delete(e)}}function T$(e){for(let t of rf)try{t(e)}catch(n){console.warn("repo-url listener:",n)}}function Qr(e,t){if(_()||!e)return;let n=oc();t?n[e]=t:delete n[e],Me(Ri,JSON.stringify(n)).catch(r=>console.warn("saveRepoUrlFor:",r)),Xo(Ri,r=>{let o=rc(r);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(r=>console.warn("saveRepoUrlFor cross-tab merge:",r)),T$(e)}async function M$(e,t){await Xo(Ri,n=>{let r=rc(n),o=t==="replace"?{...e}:t==="prefer-imported"?{...r,...e}:{...e,...r};return JSON.stringify(o)}),lf()}async function sc(e){if(!e||typeof e!="object")return[];let t=[];if(await Xo(Ri,n=>{let r=rc(n);t=[];for(let[o,s]of Object.entries(e))!o||typeof s!="string"||!s||r[o]||(r[o]=s,t.push(o));return t.length===0?n:JSON.stringify(r)}),t.length===0)return t;lf();for(let n of t)T$(n);return t}async function sf(e,t){return!e||!t?!1:(await sc({[e]:t})).length>0}var _i=pt(),v$=Ko(_i?.mode??"e2e",globalThis.location?.pathname??"")?"managed":null,c=rt({reports:[],workspaceMerges:[],currentFile:null,currentWorkspace:null,workspaceContentFileCount:0,currentManagedTeam:null,currentManagedReport:null,currentReportWorkspace:null,currentView:"findings",currentLinks:null,bundles:[],storedFiles:[],selectedBundle:null,selectedBundleWorkspace:null,scanSelection:null,bundleCreationRepoId:null,bundleDetails:null,bundleDetailsTab:"overview",selectedPackage:null,selectedPackageVersion:null,packageDetailsTab:"overview",packageSlideTriage:null,packageSlideTransient:!1,packagesSearchQuery:"",packagesSortBy:"findings-desc",expandedPackages:new Set,selectedRepository:null,repositoryDetailsTab:"overview",repositorySlideTriage:null,repositorySlideTransient:!1,repositoriesSearchQuery:"",repositoriesSortBy:"findings-desc",bundleSourceFile:null,bundleSourceFindingIdx:null,bundleSourceTargetLine:null,bundleSourceWrap:XM()??!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:qM()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:YM()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:JM()??of,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:$p(_i?.mode??"e2e",v$),serverModeConfig:_i?.mode??null,serverModeSelection:v$,deepviewScanServer:null,githubNewIssueLabels:_i?.githubNewIssueLabels??"",localMode:!1,managed:_i?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map,managedIssues:new Map});function _(){return c.serverMode==="managed"&&!c.localMode}function Tn(e){c.localMode=!!e}function ic(e,t=globalThis.location?.pathname??""){let n=Ko(e,t);n&&(c.serverModeSelection="managed"),c.serverModeConfig=e,c.serverMode=$p(e,c.serverModeSelection),c.serverModeSelection!==c.serverMode&&(c.serverModeSelection=null),(n||c.serverMode==="e2e"||Jn(e))&&Tn(!1)}function af(){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 lf(){_()||c.repoEditing||c.currentFile&&(c.repoUrl=Ze(c.currentFile))}Yt(()=>{lf()});var Qo=null;function I$(){Qo=null}function Ti(){return _()&&Qo?.teamId===c.currentManagedTeam&&Qo?.userId===c.managedSession?.id&&Qo?.role===c.managedSession?.role?Qo:null}function A$(e,t){let n=new Map,r=new Map,o=[],s=[];fi(t.links??[],r);for(let i of t){let a=i.data;if(a.source==="links"&&Array.isArray(a.links)){o.push({id:i.id,name:i.filename,groups:a.links,skipped:0}),fi(a.links,r);continue}let l=yn(a)??[],p=pl([{groups:[l.flat().filter(d=>d&&typeof d=="object")],tree:a.tree}]);for(let[d,f]of l.entries()){let m=(Array.isArray(f)?f:[f]).filter(b=>b&&typeof b=="object").map(b=>{let y={...b,_managedReportId:i.id,_reportName:i.filename,_repoFallback:i.repo.github,_repoDirectory:i.repo.directory,_source:b.source??a.source??null,_bundleHashes:a.bundleHashes??[],_depsDirectory:p};return Po(y,a),y._analyzer=y._source??y.type??null,"isApp"in y||(y.isApp=jn(y,y._source)),y}),h={report:i.filename,managedReportId:i.id,index:d,members:m};s.push(h);for(let b of m)n.has(b.id)||n.set(b.id,[]),n.get(b.id).push(h)}}Qo={teamId:e,userId:c.managedSession?.id,role:c.managedSession?.role,links:o,rows:s,byId:n,duplicates:r},c.linksTick++,c.findingIndexTick++}function ac(e){let t=Ti();return[...new Set(e.flatMap(n=>t?.byId.get(n)??[]))]}function E$(e){for(let t of ac([e])){let n=qt(t.members.find(r=>r.id===e));if(n)return n}return""}var ZM="solidity-bundle",QM="0.0.0";function or(e){if(e?.name!==ZM)return!1;let t=e.version;return!t||t===QM}function L$(e){let t=e?.package?.npm,n=t?.version;if(typeof n=="string"&&n&&!or(t))return n;let r=e?.file;if(!r)return null;let o=/(?:^|\/)node_modules\/\.pnpm\/([^/]+)\/node_modules\//u.exec(r);if(!o)return null;let s=o[1],i=s.indexOf("_");i>0&&(s=s.slice(0,i));let a=s.lastIndexOf("@");return a<=0?null:s.slice(a+1)||null}function lc(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function cc(e,t,n,r){e.reports.add(n);let o=e._keyReports.get(t);o||e._keyReports.set(t,o=new Set);let s=!o.has(n);return o.add(n),e.keys.has(t)||(e.keys.add(t),e.findings.push(r),e.files.has(r.file)||e.files.set(r.file,[]),e.files.get(r.file).push(r)),s}function dc(e,t,n,r){e._keyReports.delete(t),e.keys.delete(t);let o=e.findings.findIndex(a=>r(a)===t);o>=0&&e.findings.splice(o,1);let s=e.files.get(n);if(!s)return;let i=s.findIndex(a=>r(a)===t);i>=0&&s.splice(i,1),s.length===0&&e.files.delete(n)}function uc(e){let t=new Set;for(let n of e._keyReports.values())for(let r of n)t.add(r);e.reports=t}function O$(e,t,n,r,o){let s=e.byVersion.get(t);s||(s=lc(),e.byVersion.set(t,s)),cc(s,r,o,n)}function N$(e,t,n,r,o,s){let i=e.byVersion.get(t);if(!i)return;let a=i._keyReports.get(n);if(a&&(a.delete(o),a.size===0&&dc(i,n,r,s)),i._keyReports.size===0){e.byVersion.delete(t);return}uc(i)}function cf(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[n,r=""]=F$(e,"-"),[o,s=""]=F$(t,"-"),i=n.split("."),a=o.split("."),l=Math.max(i.length,a.length);for(let p=0;p<l;p++){let d=i[p]??"0",f=a[p]??"0",m=/^\d+$/u.test(d),h=/^\d+$/u.test(f);if(m&&h){let b=Number(f)-Number(d);if(b!==0)return b}else{let b=f.localeCompare(d);if(b!==0)return b}}return r===""&&s!==""?-1:r!==""&&s===""?1:s.localeCompare(r)}function F$(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+1)]}var eo=new Map,es=new Map,ts=new Map,to=new Map,pc=new Map;function eI(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!or(t))return t.name;if(!e?.file)return null;let n=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,r;for(;(r=n.exec(e.file))!==null;)if(r[1]!==".pnpm")return r[1];return null}function tI(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function nI(e,t){return typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:typeof t=="string"&&t?t:null}var Ii=new Set,df=new Set,Mi=null,uf=!1;function rI(e){return df.add(e),()=>df.delete(e)}function pf(){for(let e of df)try{e()}catch{}}function ff(e){return eo.get(e)?.list??[]}function mf(){let e=0;for(let t of eo.values())e+=t.list.length;return e}function Zt(){return es}function no(){return ts}function Ai(e,t){let n=eo.get(e);if(!n)return[];let r=n.reports.get(sr(t));return r?[...r]:[]}function gf(e,t){let n=es.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function hf(e,t){let n=ts.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function ro(e){return _()?[...new Set(ac([e]).map(t=>t.report))]:[...to.get(e)?.reports.keys()??[]]}function bf(e){if(_())return E$(e);for(let{title:t}of to.get(e)?.reports.values()??[])if(t)return t;return""}function Qt(e){if(_())return ac(e);let t=new Set;for(let n of e)for(let r of 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 fc(e,t,n){let r=pc.get(e);r||(r={hash:[],pkg:[],repo:[],id:[]},pc.set(e,r)),r[t].push(n)}function oI(e,t,n){let r=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])}),fc(t,"id",e.id),!0)}function sI(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&&fc(n,"hash",{hash:e.fileHash,key:t}),r.keys.has(t)?s:(r.keys.add(t),r.list.push(e),!0)}function iI(e,t,n){let r=eI(e);if(!r)return!1;let o=L$(e),s=es.get(r);if(s||(s={...lc(),repos:new Set,byVersion:new Map,_repoReports:new Map},es.set(r,s)),typeof e.repo?.github=="string"&&e.repo.github){s.repos.add(e.repo.github);let a=s._repoReports.get(e.repo.github);a||s._repoReports.set(e.repo.github,a=new Set),a.add(n)}O$(s,o,e,t,n);let i=cc(s,t,n,e);return fc(n,"pkg",{pkg:r,key:t,file:e.file,version:o}),i}function aI(e,t,n,r){if(tI(e))return!1;let o=nI(e,r);if(!o)return!1;let s=ts.get(o);s||(s=lc(),ts.set(o,s));let i=cc(s,t,n,e);return i&&fc(n,"repo",{repo:o,key:t,file:e.file}),i}function yf(e){let t=pc.get(e);if(pc.delete(e),Ii.delete(e),!t)return!1;let n=!1;for(let{hash:o,key:s}of t.hash){let i=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=es.get(o);if(!l)continue;let p=l._keyReports.get(s);if(p){if(p.delete(e)&&(n=!0),p.size===0&&dc(l,s,i,sr),N$(l,a,s,i,e,sr),!r.has(o)){r.add(o);for(let d of[...l._repoReports.keys()]){let f=l._repoReports.get(d);f?.delete(e)&&f.size===0&&(l._repoReports.delete(d),l.repos.delete(d),n=!0)}}l._keyReports.size===0?es.delete(o):uc(l)}}for(let{repo:o,key:s,file:i}of t.repo){let a=ts.get(o);if(!a)continue;let l=a._keyReports.get(s);l&&(l.delete(e)&&(n=!0),l.size===0&&dc(a,s,i,sr),a._keyReports.size===0?ts.delete(o):uc(a))}for(let o of t.id){let s=to.get(o);s&&(s.reports.delete(e)&&(n=!0),s.reports.size===0&&to.delete(o))}return n}async function lI(e){if(Ii.has(e))return!1;Ii.add(e);try{let t=await fe(e),n=await $t(t);if(!n)return!1;let{data:r,findings:o}=n;if(o.length===0)return!1;Iw(o,r),Gn(yn(r).map(a=>Array.isArray(a)?a:[a]),{source:r.source});let s=De(r)??"";if(!s)try{s=Ze(e)}catch{}let i=!1;for(let a of o){let l=sr(a);a.fileHash&&sI(a,l,e)&&(i=!0),a.file&&iI(a,l,e)&&(i=!0),a.file&&aI(a,l,e,s)&&(i=!0)}for(let[a,l]of yn(r).entries()){let p=(Array.isArray(l)?l:[l]).filter(f=>f?.id);if(p.length===0)continue;let d={report:e,index:a,members:p.map(f=>{let m=f.source??r.source??null;return{id:f.id,title:qt(f),source:m,revalidate:Be(f),isApp:f.isApp??jn(f,m),isSecurity:f.isSecurity,...f.file?{file:f.file,_depsDirectory:f._depsDirectory}:{}}})};for(let f of p)oI(f,e,d)&&(i=!0)}return Ii.has(e)?i:(yf(e),uf=!0,!1)}catch{return Ii.delete(e),!1}}function xt(){return _()?Promise.resolve():Mi||(Mi=(async()=>{try{do{uf=!1;let e=await ce();for(let t of e)await lI(t)&&pf()}while(uf)}finally{Mi=null}})(),Mi)}mt(e=>{yf(e)&&pf()});R$(e=>{yf(e)&&pf(),xt().catch(()=>{})});var Ei=new Map,ns=new Map,mc=new Map,wf=new Set;function cI(e){return wf.add(e),()=>wf.delete(e)}function B$(){for(let e of wf)try{e()}catch{}}function Fi(e,t){if(!e||!t)return!1;let n=!ns.has(e);ns.set(e,t),mc.delete(e);for(let[r,o]of t){if(!o)continue;let s=Ei.get(o);s||(s=new Map,Ei.set(o,s)),s.set(e,r)}return n&&B$(),n}function vf(e){let t=ns.get(e);if(ns.delete(e),mc.delete(e),!!t){for(let n of t.values()){let r=Ei.get(n);r&&(r.delete(e),r.size===0&&Ei.delete(n))}B$()}}function $f(e,t){let n=ns.get(e);if(!n||typeof t!="string"||t==="")return null;if(n.has(t))return t;let r=dI(e,n).get(D$(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 D$(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function dI(e,t){let n=mc.get(e);if(n)return n;n=new Map;for(let r of t.keys()){let o=D$(r),s=n.get(o);s?s.push(r):n.set(o,[r])}return mc.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 kf(e){return ns.has(e)}var P$="deepview.fileCounts",xf=4,uI=new Set([3,xf]),Oi=null;function hc(){if(Oi)return Oi;let e;try{e=JSON.parse(ve(P$)||"{}")}catch{e={}}return uI.has(e?.__v)?e.__v=xf:e={__v:xf},Oi=e,Oi}function Sf(){Me(P$,JSON.stringify(Oi)).catch(e=>console.warn("counts persist:",e))}function z$(e){if(e==="__v")return;let t=hc()[e];if(t!==void 0)return typeof t=="number"?{count:t}:t}function Ni(e){return z$(e)?.count}function Ie(e){return z$(e)?.source}function Ue(e,t,n){let r=hc();r[e]={count:t,source:n??null},Sf()}function os(e){let t=hc();delete t[e],Sf()}function Ve(e){let t=qn(e);return t?{count:Cl(t.groups),source:ke,recognized:!0}:Tw(e)}var Li=null,rs=null,gc=null;function pI(e,t){for(let{names:n,onUpdate:r}of gc)if(n.has(e))try{r(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function Cf(e,t){if(Li){t&&gc.push({names:new Set(e),onUpdate:t});for(let n of e)rs.add(n);return Li}return rs=new Set(e),gc=t?[{names:new Set(e),onUpdate:t}]:[],Li=(async()=>{await Promise.resolve();try{let n=hc();for(;rs.size>0;){let r=rs.values().next().value;if(rs.delete(r),n[r]===void 0)try{let o=await fe(r);if(n[r]!==void 0)continue;let{count:s,source:i}=Ve(o);n[r]=i?{count:s,source:i}:{count:s},Sf(),pI(r,s)}catch{}}}finally{Li=null,rs=null,gc=null}})(),Li}var fI=`deepview/workspace-id/v1
|
|
2
|
-
`;async function Bi(e){let t=Uint8Array.fromBase64(e),n=zo(
|
|
3
|
-
`))if(t.trim())return t.trim();return""}function RI(e){let t=new Set(e.map(r=>r.id)),n=new Map;for(let r of c.reports)for(let o of r.groups)for(let s of o){let i=s.id??String(s._id);if(!(!t.has(i)||n.has(i))&&(n.set(i,{severity:s.severity,file:s.file,line:s.line,description:Wf(s.description)}),n.size===t.size))return n}return n}var ir=new Map,Vf=new Map,$c=new Map,Hf=new Set,Gi=null,Ki=null,Uf=0,qi=!1,zt=!1;function jf(){return _()||zt}function Yi(e){return Hf.add(e),()=>Hf.delete(e)}function as(){for(let e of Hf)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function Gf(){let e=new Map;for(let t of ir.values())t&&fi(t.groups,e);Vf=e}function Kf(){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 qf(){return _()?!!Ti()?.duplicates.size:Vf.size>0}function gt(e){if(_())return[...Ti()?.duplicates.get(e)??[]];let t=Vf.get(e);return t?[...t]:[]}async function q$(e){if(ir.has(e))return!1;let t=$c.get(e)??0,n;try{n=await fe(e)}catch{return!1}if(n==null)return!1;if(($c.get(e)??0)!==t)return qi=!0,!1;let r=/^\s*\[/u.test(n)?qn(n):null;if(ir.set(e,r),r&&Ie(e)!==ke)Ue(e,Cl(r.groups),ke);else if(!r&&Ie(e)===ke){let{count:o,source:s}=Ve(n);Ue(e,o,s)}return r!==null}function Y$(){return _()?Promise.resolve():Ki||(Ki=(async()=>{try{let e,t;do{t=Uf,e=await ce(),zt&&e.some(o=>!ir.has(o))&&(zt=!1,as());let n=e.filter(o=>Ie(o)===ke);(await Promise.all(n.map(o=>q$(o)))).some(Boolean)&&(Gf(),as())}while(t!==Uf);return e}catch(e){throw zt&&(zt=!1,as()),e}finally{Ki=null}})(),Ki)}function Xi(){return _()?Promise.resolve():Gi||(Gi=(async()=>{try{do{qi=!1;let e=await Y$(),t=!1;for(let o of e)await q$(o)&&(t=!0);let n=!qi&&e.every(o=>ir.has(o)),r=zt!==n;zt=n,t&&Gf(),(t||r)&&as()}while(qi)}catch(e){throw zt&&(zt=!1,as()),e}finally{Gi=null}})(),Gi)}mt(e=>{let t=zt;zt=!1,Uf++,$c.set(e,($c.get(e)??0)+1),qi=!0;let n=ir.get(e)!=null;ir.delete(e),n&&Gf(),(n||t)&&as()});var Yf=()=>{};function Xf(e){Yf=typeof e=="function"?e:()=>{}}var J$=()=>{};function Jf(e){J$=typeof e=="function"?e:()=>{}}var Z$=()=>{};function TI(e){Z$=typeof e=="function"?e:()=>{}}var ar="deepview.triage",Mn="deepview.triage.pending",en=/^\d+$/u;async function MI(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function II(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}var AI="deepview.triage.save",X$=0;function kc(){return!_()&&lp(c.triage,c.reports)}function Zf(){kc();let e={};for(let[t,n]of c.triage){if(en.test(t))continue;let r=fl(n);r&&(e[t]=r)}return e}function xe(){if(_())return J$(),Promise.resolve();let e=++X$,t=Zf(),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(o$,{mode:"shared"},async()=>{let o=null,s=null;if(r!=null)try{let i=zo(r),a=await MI(i);s=xi(),o=(s?await s$(a):a).toBase64()}catch(i){console.warn("Failed to save triage:",i),Yf();return}await navigator.locks.request(AI,()=>{try{if(e!==X$)return;if(r!=null&&xi()!==s){queueMicrotask(()=>{xe()});return}if(n)localStorage.removeItem(ar),localStorage.removeItem(Mn);else{localStorage.setItem(ar,o);try{localStorage.removeItem(Mn)}catch{}}}catch(i){console.warn("Failed to save triage:",i)}}),Yf()})}async function xc(){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(ql(n)){if(!xi())throw new Error("triage: vault locked, cannot decrypt envelope");n=await i$(n)}let r=await II(n);return JSON.parse(Ur(r))}function Q$(e,{replace:t=!1}={}){let n=c.triage;if(t){let r=null,o=localStorage.getItem(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 ls(){if(_())return!1;if(![...c.triage.values()].some(r=>r.ignoredReports?.length))return;let{readFileFresh:e,withStoredItem:t}=await import("./chunk-WGG7KQUH.js"),n=await Aw(Object.fromEntries(c.triage),r=>t("report",r,()=>e(r)));if(!_())return lp(c.triage,n)}async function EI(){if(!_())try{let e=await xc();if(_())return;Q$(e),await ls()&&await xe()}catch(e){console.warn("Failed to load triage:",e)}}async function Ji(){if(!_())try{let e=await xc();if(_())return;Q$(e,{replace:!0}),await ls()&&await xe(),Z$()}catch(e){console.warn("Failed to reload triage:",e)}}typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==ar&&e.key!==Mn||Ji()});var FI;function ao(){return _()?Promise.resolve():FI??=EI()}kt(()=>{Ji()});kt(()=>{_()||xi()&&localStorage.getItem(Mn)&&xe()});async function Qf({seal:e}){try{localStorage.removeItem(Mn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(ql(n))return;let r=await e(n,Np());localStorage.setItem(ar,r.toBase64())}async function em({open:e}){try{localStorage.removeItem(Mn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(!ql(n))return;let r=await e(n,Np());localStorage.setItem(ar,r.toBase64())}function Sc(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function ek(e){if(typeof e!="string"||!e)return null;if(e.startsWith("r:"))try{let t=JSON.parse(e.slice(2));if(t&&typeof t.name=="string"&&t.name&&typeof t.workspaceId=="string"&&t.workspaceId)return{name:t.name,workspaceId:t.workspaceId}}catch{}return{name:e,workspaceId:null}}var tk="deepview.lastFile",Zi=null;function tm(){return Zi||(Zi=LI(),Zi.catch(()=>{Zi=null})),Zi}async function LI(){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 Jo(o)}catch(f){console.warn(`migrate: failed to rename ${o} -> ${s}`,f);continue}t.delete(o),t.add(s),r.add(o);let a=Ni(o);if(os(o),a===void 0){let{count:f,source:m}=Ve(i);Ue(s,f,m)}else{let{source:f}=Ve(i);Ue(s,a,f)}let l=Ze(o);l&&(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=ek(ve(tk));if(d?.name===o)try{await Me(tk,Sc(s,d.workspaceId))}catch{}}for(let o of Y())for(let s of o.reports){if(!s.toLowerCase().endsWith(".deepseek")||!r.has(s)&&n.has(s))continue;let i=s.slice(0,-9)+".md";await Vi(s,o.id),await so(i,o.id)}}function nm(){return{...nk,hydrateKey:a$,localContentSyncStatus:Tv,readTriageBlob:async()=>(await gl(await xc(),e=>Xl("report",e,()=>Hp(e)))).entries,reportSyncHash:e=>Xl("report",e,async()=>_v(await Cn(e)))}}var nk={hasStoredBundleBytes:c$,listBundles:Je,listFiles:ce,onBundleMutated:l$,onFileMutated:mt,readBundle:_n,readFile:Hp,withStoredItem:Xl,isEncryptionEnabled:ft,isUnlocked:Yo,onVaultStateChange:kt,unlockEncryption:Si};function rm(e=nk){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(o,s,i)=>{let a=!1,l=!1,p=e.onVaultStateChange(()=>{a=!0}),d=s==="report"?e.onFileMutated:e.onBundleMutated,f=i===void 0?null:d(m=>{m===i&&(l=!0)});return{check(){if(o?.throwIfAborted(),t()||a)throw new Error("Local data is locked or has changed. Unlock it and select the file again.");if(l)throw new Error(`This local ${s} changed. Select it again before importing.`)},unsubscribe(){p(),f?.()}}},r=async o=>o==="report"?(await e.listFiles()).map(s=>({value:s,label:s})):(await e.listBundles()).map(s=>({value:s.integrity,label:s.name,secondary:s.integrity}));return{get locked(){return t()},async hasData(o){return o==="report"?(await e.listFiles()).length>0:t()?e.hasStoredBundleBytes():(await e.listBundles()).length>0},async list(o){let s=n();try{s.check();let i=await r(o);return s.check(),i}finally{s.unsubscribe()}},unlock(o){return e.unlockEncryption(o)},subscribe(o){let s=e.onVaultStateChange(()=>o()),i=e.onFileMutated(l=>o({kind:"report",value:l})),a=e.onBundleMutated(l=>o({kind:"bundle",value:l}));return()=>{s(),i(),a()}},async importItem(o,s,i,{signal:a}={}){let l=n(a,o,s);try{l.check();let{result:p}=await e.withStoredItem(o,s,async()=>{l.check();let d=(await r(o)).find(h=>h.value===s);if(l.check(),!d)throw new Error("This file is no longer in local storage. Select another file.");let f=o==="report"?await e.readFile(s):await e.readBundle(s);l.check();let m=new File([f],d.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let h=Promise.resolve(i(m));return h.catch(()=>{}),{result:h}}finally{l.unsubscribe()}});return p}finally{l.unsubscribe()}}}}function rk(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function cs(){if(!rk()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function om(){let e={supported:rk(),persisted:null,usage:null,quota:null};if(!e.supported)return e;if(typeof navigator.storage.persisted=="function")try{e.persisted=await navigator.storage.persisted()}catch{}if(typeof navigator.storage.estimate=="function")try{let t=await navigator.storage.estimate();typeof t?.usage=="number"&&(e.usage=t.usage),typeof t?.quota=="number"&&(e.quota=t.quota)}catch{}return e}var Cc="deepview.scan.access",sm=new Set;function ok(){for(let e of sm)e()}function ds(){return ve(Cc)!=null}function im(e){try{let t=JSON.parse(ve(Cc)),n=t?.provider==="moonshotai"?"moonshot":t?.provider;return!e||t?.server!==e||typeof t.deepview!="string"||!t.deepview.trim()||![null,"anthropic","openai","moonshot","openrouter"].includes(n)||typeof t.token!="string"?null:{...t,provider:n}}catch{return null}}async function am({server:e,deepview:t,provider:n,token:r}){await Me(Cc,JSON.stringify({server:e,deepview:t,provider:n,token:r})),ok()}async function lm(){await nr(Cc),ok()}function cm(e){sm.add(e);let t=Yt(e);return()=>{sm.delete(e),t()}}var dm=1;function OI(){let e=Zf(),t=oc();return{version:dm,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function NI(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function BI(){let e=OI();return{blob:new Blob([await ci(JSON.stringify(e))]),filename:NI()}}async function DI(e){let t;try{t=await hl(new Uint8Array(await e.arrayBuffer()))}catch(r){throw new Error(`Failed to gunzip: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch(r){throw new Error(`Failed to parse JSON: ${r.message}`,{cause:r})}if(!n||typeof n!="object")throw new Error("Invalid backup file (not an object)");if(n.version!==dm)throw new Error(`Unsupported backup version: ${n.version} (expected ${dm})`);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 PI(e,t){if(!["replace","prefer-imported","prefer-current"].includes(t))throw new Error(`Unknown merge mode: ${t}`);if(!e||typeof e!="object")throw new Error("Invalid payload: not an object");if(!e.triage||typeof e.triage!="object"||Array.isArray(e.triage))throw new Error("Invalid payload: missing or non-object `triage`");if(!e.repoUrls||typeof e.repoUrls!="object"||Array.isArray(e.repoUrls))throw new Error("Invalid payload: missing or non-object `repoUrls`");let n=e.triage,r=c.triage;if(t==="replace")for(let a of[...r.keys()])en.test(a)||r.delete(a);let o=t==="prefer-current";for(let[a,l]of Object.entries(n)){if(en.test(a)||!l||typeof l!="object")continue;typeof l.color=="string"&&l.color&&(!o||!r.get(a)?.color)&&ae(r,a,{color:l.color});let p=qe(l);if(p&&(!o||!qe(r.get(a)))&&ae(r,a,{triage:p}),typeof l.comment=="string"&&l.comment&&(!o||!r.get(a)?.comment)&&ae(r,a,{comment:l.comment}),typeof l.fix=="string"&&l.fix&&(!o||!r.get(a)?.fix)&&ae(r,a,{fix:l.fix}),typeof l.flagged=="boolean"&&(!o||r.get(a)?.flagged===void 0)&&ae(r,a,{flagged:l.flagged}),Array.isArray(l.ignoredReports)&&Wr(r.get(a)))for(let d of l.ignoredReports)typeof d=="string"&&tt(r,a,d,!0,Kn(l,d))}await ls(),await xe();let s=0,i=null;try{await M$(e.repoUrls,t),s=Object.keys(e.repoUrls).length}catch(a){console.warn("applyTriageImport: repo-URL import failed:",a),i=a}return{triageEntries:Object.keys(n).length,repoUrls:s,repoUrlError:i}}function zI(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function um(e){let t=new Set;for(let n of e){let r;try{r=await fe(n)}catch(s){if(zI(s))continue;throw new Error(`Failed to read ${n}: ${s.message}`,{cause:s})}if(r==null)continue;let o=await $t(r);if(o)for(let s of o.findings)s.id&&t.add(s.id)}return t}function WI(){let e=new Set;for(let t of c.triage.keys())en.test(t)||e.add(t);return e}async function _c(e){let t=WI();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await um(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 um(i),l=0,p=0;for(let d of r)a.has(d)?p++:l++;return{orphanedCount:l,sharedCount:p}}async function Rc(){let e=new Set(c.triage.keys()),t=[];for(let[i,a]of c.triage)if(a.ignoredReports)for(let l of a.ignoredReports)t.push({id:i,report:l});let n=await ce(),r=new Set(n),o=await um(n),s=!1;for(let i of e){if(en.test(i)||o.has(i))continue;let a=c.triage.get(i);!a||!(a.color||qe(a)||a.comment||a.fix||a.flagged!==void 0)||ae(c.triage,i,{color:void 0,triage:void 0,comment:void 0,fix:void 0,flagged:void 0,deleted:void 0})&&(s=!0)}for(let{id:i,report:a}of t)en.test(i)||o.has(i)&&r.has(a)||Hr(c.triage,i,a)&&tt(c.triage,i,a,!1)&&(s=!0);s&&await xe()}var HI=1;async function UI(e){let t=new Set,n=await $t(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function pm(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function VI(e){if(!Array.isArray(e)||e.length===0)return[];let t=await Je(),n=new Map(t.map(o=>[o.integrity,o.name])),r=[];for(let o of e){let s=n.get(o);if(!s)continue;let i;try{i=await _n(o)}catch(a){console.warn(`Workspace export: failed to read bundle ${o}: ${a?.message??a}`);continue}r.push({integrity:o,name:s,data:i.toBase64()})}return r}function jI(e){let t=Ze(e);return t?{github:t}:null}async function sk(e){let t=[];for(let n of e.reports??[]){let r;try{r=await fe(n)}catch(s){console.warn(`Workspace export: skipping ${n}: ${s?.message??s}`),(s instanceof DOMException&&s.name==="NotFoundError"||typeof s?.message=="string"&&s.message.startsWith("File not found:"))&&await Ui(n,null);continue}let o=jI(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function GI(e,{includeBundleBytes:t=!1}={}){let n=await sk(e),r=new Set;for(let p of n)for(let d of await UI(p.content))r.add(d);let o=new Set(e.reports??[]),s={};for(let[p,d]of c.triage){if(!r.has(p))continue;let f=(d.ignoredReports??[]).filter(h=>o.has(h)),m=fl({...d,ignoredReports:f});m&&(s[p]=m)}let i={};for(let p of n)p.repo?.github&&(i[p.name]=p.repo.github);let a=(e.bundles??[]).filter(p=>typeof p=="string"&&p.length>0),l={version:HI,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:n,bundles:a,repoUrls:i,triage:s};if(t){let p=await VI(a);p.length>0&&(l.bundleBlobs=p)}return l}async function ik(e,{includeBundleBytes:t=!1}={}){let n=await GI(e,{includeBundleBytes:t});return{blob:new Blob([await ci(JSON.stringify(n))]),filename:`${pm(e.name)}.deepview-workspace.json.gz`}}async function KI(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await ik(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),s=await Lw(o,t);return{blob:new Blob([s],{type:"application/octet-stream"}),filename:`${pm(e.name)}.deepview-workspace.enc`}}async function fm(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await KI(e,t,{includeBundleBytes:n}):await ik(e,{includeBundleBytes:n})}async function qI(e){return{reports:await sk(e)}}async function mm(e){let t=await qI(e);return{blob:new Blob([await ci(JSON.stringify(t))]),filename:`${pm(e.name)}.deepview-reports.json.gz`}}function YI(e){return qe(e)??null}async function XI(e){let t=new Map;for(let n of e??[]){if(typeof n?.content!="string")continue;let r=await $t(n.content);if(r)for(let o of r.findings)!o.id||t.has(o.id)||t.set(o.id,{severity:o.severity,file:o.file,line:o.line,description:Wf(o.description)})}return t}async function JI(e,t,n){if(!e||typeof e!="object"||Array.isArray(e))return;let r=c.triage,o=[];for(let[s,i]of Object.entries(e)){if(!i||typeof i!="object")continue;let a=r.get(s)?.color,l=typeof i.color=="string"?i.color:void 0;l&&a&&a!==l?o.push({id:s,property:"color",local:a,imported:l}):l&&l!==a&&ae(r,s,{color:l});let p=r.get(s)?.comment??"",d=typeof i.comment=="string"?i.comment:"";d&&p&&p!==d?o.push({id:s,property:"comment",local:p,imported:d}):d&&d!==p&&ae(r,s,{comment:d});let f=r.get(s)?.fix??"",m=typeof i.fix=="string"?i.fix:"";m&&f&&f!==m?o.push({id:s,property:"fix",local:f,imported:m}):m&&m!==f&&ae(r,s,{fix:m});let h=YI(i),b=qe(r.get(s))??null;h&&b&&b!==h?o.push({id:s,property:"triage",local:b,imported:h}):h&&!b&&ae(r,s,{triage:h,...h==="ignored"?{}:{ignoredReports:void 0}});let y=r.get(s)?.flagged,w=typeof i.flagged=="boolean"?i.flagged:void 0;w!==void 0&&y!==void 0&&y!==w?o.push({id:s,property:"flagged",local:y?"flagged":"not flagged",imported:w?"flagged":"not flagged"}):w!==void 0&&w!==y&&ae(r,s,{flagged:w});let v=Array.isArray(i.ignoredReports)?i.ignoredReports:[];if(Wr(r.get(s)))for(let x of v)typeof x=="string"&&tt(r,s,x,!0,Kn(i,x))}if(o.length>0&&t){let s=await t(o,n??new Map);s&&ZI(o,s)}await xe()}function ZI(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&QI(n.id,n.property)===n.local&&(n.property==="color"?ae(c.triage,n.id,{color:n.imported}):n.property==="comment"?ae(c.triage,n.id,{comment:n.imported}):n.property==="fix"?ae(c.triage,n.id,{fix:n.imported}):n.property==="triage"?ae(c.triage,n.id,{triage:n.imported,...n.imported==="ignored"?{}:{ignoredReports:void 0}}):n.property==="flagged"&&ae(c.triage,n.id,{flagged:n.imported==="flagged"?!0:n.imported==="not flagged"?!1:void 0}))}}function QI(e,t){if(t==="color")return c.triage.get(e)?.color;if(t==="triage")return qe(c.triage.get(e))??null;if(t==="comment")return c.triage.get(e)?.comment??"";if(t==="fix")return c.triage.get(e)?.fix??"";if(t==="flagged"){let n=c.triage.get(e)?.flagged;return n===!0?"flagged":n===!1?"not flagged":""}}async function eA(e){if(Array.isArray(e))for(let t of e){let n;try{n=Uint8Array.fromBase64(t.data)}catch(r){console.warn(`Workspace import: failed to decode bundle ${t.integrity}: ${r?.message??r}`);continue}try{let r=await 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 gm(e,{conflictResolver:t}={}){let n=[];for(let f of e.reports)if(!(typeof f?.name!="string"||typeof f?.content!="string"))try{await Xt(f.name,f.content);let{count:m,source:h}=Ve(f.content);Ue(f.name,m,h??Ie(f.name)),n.push(f.name)}catch(m){console.warn(`Workspace import: failed to save ${f.name}: ${m.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await eA(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await XI(e.reports):new Map,s=await gl(e.triage,f=>e.reports.find(m=>m.name===f)?.content);await JI(s.entries,t,o);let i=Array.isArray(e.bundles),a=i?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],l=await G$({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:n,bundles:i?a:void 0,preserveBundles:!i,createdAt:e.workspace.createdAt}),p=new Set(n),d=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[f,m]of Object.entries(e.repoUrls))!p.has(f)||typeof m!="string"||!m||(d[f]=m);if(Object.keys(d).length>0)try{await sc(d)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return l}function tA(e){return!e||typeof e!="object"||Array.isArray(e)?"payload is not an object":e.version!==void 0||e.workspace!==void 0?"payload claims to be a workspace export":Array.isArray(e.reports)?e.reports.length>bl?`reports count (${e.reports.length}) exceeds cap (${bl})`:null:"reports field must be an array"}function ak(e){return tA(e)===null}async function hm(e){if(dp(e))return{kind:"encrypted"};let t;try{t=await hl(e)}catch(r){throw new Error(`gzip decompression failed: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch{return{kind:"workspace",text:t}}return ak(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}async function bm({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 Ew(zo(JSON.stringify(s)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function nA({encoded:e,password:t}){if(typeof e!="string"||!e)throw new Error("malformed share link");if(typeof t!="string"||!t)throw new TypeError("decodeShareLink: password required");let n;try{n=Uint8Array.fromBase64(e,{alphabet:"base64url"})}catch{throw new Error("malformed share link")}let r=await Fw(n,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await rA(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function rA(e){let t=JSON.parse(Ur(e));if(!t||typeof t!="object"||typeof t.n!="string"||typeof t.k!="string"||!t.n||!t.k)throw new Error("shape");if(t.i!==void 0&&(typeof t.i!="string"||!t.i))throw new Error("shape");if(typeof t.i=="string"&&t.i.length>256)throw new Error("shape");if(t.n.length>1024)throw new Error("shape");if(Uint8Array.fromBase64(t.k).length!==32)throw new Error("shape");return{id:typeof t.i=="string"?t.i:await Bi(t.k),name:t.n,privateKeyBase64:t.k}}function ym(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function oA(e){let t=typeof e=="string"?e:typeof location>"u"?"":location.hash;if(!t)return null;let n=t.replace(/^#/u,"");if(!n)return null;for(let r of n.split("&")){let o=r.indexOf("=");if(o<0||r.slice(0,o)!=="share")continue;return r.slice(o+1)||null}return null}var km="deepview.workspaceApp",lk=2,wm=new Set,vm=new Set,$m=0,xm=0,Sm=0,Mc=new Map,Ic=Promise.resolve(),ck=null;function ps(e=ve(km)){try{let t=JSON.parse(e);if(t?.version===lk&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:lk,revision:"",links:"[]",entries:{}}}function us(){for(let e of wm)e()}function dk(e){let t=Ic.then(()=>Xo(km,n=>e(ps(n))));return Ic=t.catch(n=>console.warn("workspace App cache:",n)),t}function Tc(e){return JSON.stringify(e.reports.toSorted())}function uk(){return JSON.stringify(Kf().map(({name:e,groups:t})=>({name:e,groups:t})))}function Cm(e){return jf()&&e.links===uk()}function pk(e,t){return e.workspaceRevisions?.[t]??""}function fk(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(Mc.get(t?.id)??0)&&n.workspaceRevision===pk(e,t?.id)}function mk(e,t,n){return n.reportEpoch===Sm&&n.reportRevision===(e.reportRevision??e.revision)&&fk(e,t,n)}function _m(e,t){return mk(ps(),e,t)}function gk(e,t){if($m||vm.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==Tc(e)||typeof n.appMode!="boolean"||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function Rm(e){return gk(e,ps())?.appMode??null}function lo(e){let t=ps(),n=gk(e,t);return!n||!Cm(t)?null:n}async function Qi(e,t=null){let n;do n=Ic,await n;while(n!==Ic);let r=ps(),o=r.reportRevision??r.revision;return t&&(!mk(r,e,t)||!Cm(r))?null:{epoch:xm,revision:r.revision,reportEpoch:Sm,reportRevision:o,workspaceId:e?.id,workspaceEpoch:Mc.get(e?.id)??0,workspaceRevision:pk(r,e?.id)}}async function Tm(e,t,n){let r=!1;return await dk(o=>{if(n.epoch!==xm||n.revision!==o.revision||!fk(o,e,n)||!Cm(o))return;let s=Y().find(i=>i.id===e.id);if(!(!s||Tc(s)!==Tc(e)))return o.entries[e.id]={...t,reports:Tc(e)},r=!0,JSON.stringify(o)}),r&&us(),r}function Ac(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)xm++,t===void 0&&Sm++,$m++;else for(let n of e)Mc.set(n,(Mc.get(n)??0)+1),vm.add(n);return us(),dk(n=>{if(n.reportRevision??=n.revision,e===null)n.revision=crypto.randomUUID(),t===void 0&&(n.reportRevision=n.revision),n.entries={};else{n.workspaceRevisions??={};for(let r of e)n.workspaceRevisions[r]=crypto.randomUUID(),delete n.entries[r]}return t!==void 0&&(n.links=t),JSON.stringify(n)}).finally(()=>{if(e===null)$m--;else for(let n of e)vm.delete(n);us()})}function Mm(e){return wm.add(e),()=>wm.delete(e)}Yt(()=>{let e=ve(km);e!==ck&&(ck=e,us())});zi(e=>{Ac([e]).catch(()=>{})});Pi(e=>{Ac([e]).catch(()=>{})});mt(e=>{let t=Y().filter(n=>n.reports.includes(e)).map(n=>n.id);Ac(t).catch(()=>{})});Yi(()=>{if(!jf()){us();return}let e=uk();ps().links===e?us():Ac(null,e).catch(()=>{})});var St="deepviewManagedNavigation",Ec="deepviewManagedLoginFinding";function Im(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Fc(e,t){return e?.bundleTab!=="code"||t?.bundleTab!=="code"||e.view!==t.view?!1:e.view==="npm"?e.packageName===t.packageName&&(e.packageSpec??null)===(t.packageSpec??null):e.view==="bundles"&&(e.teamSlug??null)===(t.teamSlug??null)&&e.bundleSlug===t.bundleSlug}function sA(e){let t=e.location.hash,n=zw(t),r=!1,o=null,s=0,i=null,a=null,l=!1,p=null,d=null,f=null;function m(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h($){let S=ui($),C=S?.view==="home"?pi($.hash):null;return S?{...S,...C?{finding:C}:{}}:null}function b(){try{let $=e.sessionStorage?.getItem(Ec);if(e.sessionStorage?.removeItem(Ec),!$)return null;let S=new URL($,e.location.origin),C=S.origin===e.location.origin?h(S):null;return C?.finding?C:null}catch{return null}}function y(){if(!r||!pi(e.location.hash)||p===e.location.href||e.history.state?.[St]&&e.history.state[St]!==o)return;let $=p=e.location.href,S=h(new URL($));v(S??{view:"home"},{replace:!0}).finally(()=>{p===$&&(p=null)})}function w($){m()||($=$n($,n),e.history.replaceState(r?{[St]:o}:null,"",$),a=$)}async function v($,{replace:S=!1,pop:C=!1}={}){if(!r||!i||m())return!1;$??={view:"home"};let R=Ye($);if(R===null)return!1;let L=++s,A=d={route:$,findingRoute:null,codeRoute:null},E=()=>r&&L===s&&!m(),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),Im(A.findingRoute,typeof M=="object"?M:$)&&(R=Ye(A.findingRoute)),Fc(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&&Fc(C,R)){w(Ye(C));return}}let S=$.state?.[St]===o?h(new URL(e.location.href)):null;v(S??{view:"home"},{pop:!0})}function k($){if(!r||$.defaultPrevented||$.button!==0||$.metaKey||$.ctrlKey||$.shiftKey||$.altKey)return;let S=$.composedPath().find(L=>L.matches?.("a.comment-self-ref[href]"));if(!S||S.hasAttribute("download")||S.target&&S.target!=="_self")return;let C=new URL(S.href);if(C.origin!==e.location.origin)return;let R=h(C);if(R?.finding)return $.preventDefault(),v(R)}return{get active(){return r},rememberFinding(){let $=h(new URL(e.location.href));if(!$?.finding)return;let S=$.view==="home"?`/#${jr($.finding)}`:Ye($);try{e.sessionStorage?.setItem(Ec,S)}catch{}},start($,{onCancel:S=null}={}){if(r)return;r=!0,i=$,f=S,o=typeof e.history.state?.[St]=="string"?e.history.state[St]:e.crypto.randomUUID(),l||(e.addEventListener("popstate",x),e.addEventListener("hashchange",y),e.addEventListener("click",k),e.launchQueue?.setConsumer(({targetURL:L})=>{if(!r||!L)return;let A=new URL(L);if(A.origin!==e.location.origin)return;let E=h(A);E&&v(E)}),l=!0);let C=b(),R=h(new URL(e.location.href))??{view:"home"};return C&&R.view==="home"&&!R.finding&&(R=C),v(R,{replace:!0})},navigate:v,replaceFindingRoute($){if(!r||$?.view!=="findings"||m())return;let S=Ye($);if(S!=null){if(d){(d.route.view==="home"&&d.route.finding||Im($,{...d.route,view:"findings"}))&&(d.findingRoute=$);return}Im($,ui(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceCodeRoute($){if(!r||m()||!["bundles","npm"].includes($?.view)||$.bundleTab!=="code")return;let S=Ye($);if(S!=null){if(d){Fc($,d.route)&&(d.codeRoute=$);return}Fc($,ui(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceRoute($){if(!r||!$||m())return;let S=Ye($);S!=null&&!d&&w(S)},pushRoute($){if(!r||!$||m())return;let S=Ye($);if(S==null)return;let C=d!==null;++s,d=null,S=$n(S,n),S!==a&&(e.history.pushState({[St]:o},"",S),a=S),C&&f?.()},reset({force:$=!1}={}){if(++s,d=null,r||$){try{e.sessionStorage?.removeItem(Ec)}catch{}r=!1,o=null,i=null,w("/")}}}}var te=typeof window>"u"?null:sA(window);function ea(e){return _()&&!c.managedSession?.publicShare&&Yn(c.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}function hk(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function iA(e){let[t,n,r]=e.split("/");return r===void 0&&t!==void 0&&n!==void 0&&t.length<=39&&/^[a-zA-Z\d](?:-?[a-zA-Z\d])*$/u.test(t)&&n.length<=100&&n!=="."&&n!==".."&&/^[a-zA-Z\d._-]+$/u.test(n)}function bk(e,t){if(typeof e!="string"||e.length>2048)return null;let n;try{n=new URL(e)}catch{return null}if(n.href!==e||n.origin!=="https://github.com"||n.username||n.password)return null;let r=t.exec(n.pathname);if(!r)return null;let o=`${r[1]}/${r[2]}`,s=Number(r[3]);return!iA(o)||!Number.isSafeInteger(s)||s<=0?null:{repo:o,number:s}}function Am(e){return bk(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Em(e){return bk(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function Fm(e){let t=Am(e);if(t)return{...t,kind:"pull"};let n=Em(e);return n?{...n,kind:"issue"}:null}function Lm(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}function Lc(e){return _()&&c.currentManagedTeam&&c.managedSession&&!c.managedSession.publicShare?c.managedIssues.get(e?.id)??null:null}function tn(e){return Lc(e)?.autoFix??""}function ta(e,t={},n){let r=!1;for(let o of e){if(n&&c.managedIssues.get(o)!==n.get(o))continue;let s=Object.hasOwn(t,o)?t[o]:null,i=Em(s?.url)?{url:s.url,autoFix:Am(s.autoFix)?s.autoFix:null}:null,a=c.managedIssues.get(o);a?.url===i?.url&&a?.autoFix===i?.autoFix||(i?c.managedIssues.set(o,i):c.managedIssues.delete(o),r=!0)}return r}function aA(e){let t=e?.teams?.find(n=>n.id===e.teamId);return t?!t.cacheKey||!Array.isArray(t.reports)||t.reports.some(n=>!n.cacheKey)?e.teams:JSON.stringify([t.cacheKey,t.reports.map(n=>[n.id,n.cacheKey,n.visible!==!1]).toSorted()]):null}var Oc=class{constructor({context:t,fetchWorkspace:n,changed:r=()=>{},now:o=Date.now}){this.getContext=t,this.fetchWorkspace=n,this.changed=r,this.now=o,this.entries=new Map,this.required=new Set,this.expires=0,this.context=null,this.scope=null,this.timer=null,this.run=null}reset(){this.run?.abort(),this.run=null,clearTimeout(this.timer),this.timer=null,this.entries.clear(),this.required.clear(),this.expires=0,this.context=null,this.scope=null}syncContext(){let t=this.getContext();if(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||t?.teams!==this.context?.teams){let n=aA(t);(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||n!==this.scope)&&this.reset(),this.context=t,this.scope=n}return this.scope===null?null:this.context}schedule(){!this.timer&&!this.run&&(this.timer=setTimeout(()=>{this.timer=null,this.flush()},0))}read(t,{refreshIfMissing:n=!1}={}){let o=this.syncContext()?.teamId&&Fm(t);if(!o)return null;let s=Lm(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=Fm(s?.url);if(i&&typeof s.title=="string"&&["open","draft","closed","merged"].includes(s.status)){let a=i.kind==="issue"&&s.status==="closed"?hk(s.stateReason):null;this.entries.set(Lm(i),{title:s.title,description:typeof s.description=="string"?s.description:null,status:s.status,stateReason:a})}}this.expires=this.now()+6e4,this.run=null;let o=[...this.required].some(s=>!this.entries.has(s));this.required.clear(),o&&(this.expires=0,this.schedule()),this.changed()}};var Nc=new Set,Om=new Oc({context:()=>{let e=c.managedSession;return _()&&e?.id&&c.currentManagedTeam?{key:JSON.stringify([e.id,e.role,e.csrfToken]),teamId:c.currentManagedTeam,reportId:c.managedTeams.find(t=>t.id===c.currentManagedTeam)?.reports.find(t=>t.id===c.currentManagedReport&&t.visible===!1)?.id??null,teams:c.managedTeams}:null},fetchWorkspace:yk,changed:()=>{for(let e of Nc)e()}});function K4(e){return Nc.add(e),()=>Nc.delete(e)}function Nm(){Om.reset();for(let e of Nc)e()}function fs(e){c.currentManagedTeam===e&&Nm()}function Bm(e,t,n){if(c.currentManagedTeam!==e)return;let r=[...t].map(s=>({id:s,issue:c.managedIssues.get(s)}));r.some(({id:s,issue:i})=>i?.url!==n.get(s)?.url)&&fs(e);for(let{id:s,issue:i}of r)i?.autoFix&&i.autoFix!==n.get(s)?.autoFix&&Om.read(i.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:s})=>s?.url)?.issue.url;o&&Om.read(o)}var na=null,nn=null;function Dm(){return nn?.getPreviewRole()??null}function wk(){nn?.setPreviewRole(null)}function vk(){nn?.resetManagedAppState()}function $k(e){nn?.setManagedAppSession(e)}function kk(e){return nn?.setManagedReportCatalog(e)??new Set}function Bc(e,t=c.currentManagedTeam){return nn?.readReportSources(e,t)}function xk(){nn?.clearReportSources(),nn?.clearFindingHistory()}async function Sk(e,t=c.currentManagedTeam){return(await P()).fetchReportSources(e,t)}function P(){return na||(na=(async()=>{let e="./client-managed.js";try{return nn=await import(e),nn}catch(t){throw na=null,t}})(),na)}async function Ck(e){return(await P()).probeSession(e)}async function _k(e){return(await P()).probeTeams(e)}async function Pm(e){return(await P()).fetchManagedBundleCatalog(e)}async function Rk(e,t,n){return(await P()).fetchNpmPackage(e,t,n)}async function Tk(e,t){return(await P()).fetchNpmVersions(e,t)}async function Mk(e,t){return(await P()).fetchNpmStats(e,t)}async function Ik(e,t){return(await P()).fetchNpmAdvisories(e,t)}async function Ak(e,t,n){return(await P()).fetchNpmTags(e,t,n)}async function Ek(e,t,n,r){return(await P()).fetchNpmRisk(e,t,n,r)}async function Fk(e,t,n){return(await P()).fetchNpmSocket(e,t,n)}async function Lk(e,t,n){return(await P()).fetchNpmProvenance(e,t,n)}async function Ok(e,t,n,r){return(await P()).fetchPrettyBundleFile(e,t,n,r)}async function Nk(e,t,n,r){return(await P()).fetchPrettyNpmFiles(e,t,n,r)}async function Bk(e,t,n,r,o){return(await P()).fetchPrettyNpmFile(e,t,n,r,o)}async function Dk(e,t,n,r){return(await P()).fetchPrettyBundleChanges(e,t,n,r)}async function Pk(e,t,n,r,o){return(await P()).fetchPrettyNpmChanges(e,t,n,r,o)}async function ez(e,t,n,r){return(await P()).fetchBundleRenameDiff(e,t,n,r)}async function tz(e,t,n,r,o){return(await P()).fetchNpmRenameDiff(e,t,n,r,o)}async function nz(e,t,n,r){return(await P()).fetchBundleRenameDiffs(e,t,n,r)}async function rz(e,t,n,r,o){return(await P()).fetchNpmRenameDiffs(e,t,n,r,o)}async function oz(e,t,n,r){return(await P()).fetchBundleTypeOnly(e,t,n,r)}async function sz(e,t,n,r,o){return(await P()).fetchNpmTypeOnly(e,t,n,r,o)}async function zk(e){return(await P()).openManagedShareDialog(e,"",c.managedSession)}async function iz(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([P(),import("./chunk-45WIN3SW.js")]);return t()?n.openManagedIssueDialog({...e,isCurrent:t,onCreated:o=>{if(!t())return;let s=e.context.findingId,i=c.managedIssues.get(s),a=ta([s],{[s]:{url:o,autoFix:i?.url===o?i.autoFix:null}});fs(e.teamId),a&&r()}}):null}async function az(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 P();return o()?s.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:o}):null}async function Wk(e,t){return(await P()).fetchTeamAnnotations(e,t)}async function zm(e,t=c.currentManagedTeam,n){return(await P()).fetchReportTriage(e,t,n)}async function yk(e,t,n){return(await P()).fetchFixes(e,t,n)}async function Hk(e,t=c.currentManagedTeam,n){return(await P()).fetchReportComments(e,t,n)}async function Uk(e,t,n,r=c.currentManagedTeam){return(await P()).saveReportComment(e,t,n,r)}async function Vk(e,t,n,r,o=c.currentManagedTeam){return(await P()).deleteReportComment(e,t,n,r,o)}async function jk(e,t,n,r=c.currentManagedTeam){return(await P()).pushReportTriage(e,t,n,r)}async function Gk(e){return e&&te?.rememberFinding(),(await P()).login(e)}async function Kk(e){return(await P()).logout(e)}async function qk(e){return(await P()).stopViewing(e)}async function Dc(e,t){return(await P()).fetchBundleMetadata(e,t)}async function Yk(e,t){return(await P()).fetchBundleContents(e,t)}async function Wm(e,t){return(await P()).fetchTeamReports(e,t)}async function Xk(e,t){return(await P()).watchTeamFeed(e,t)}async function Jk(e,t=c.currentManagedTeam,n="",r=!1,o=!1){return(await P()).fetchBundleAdvisories(e,t,n,r,o)}async function lz(...e){return(await P()).dependencyReviews(...e)}async function cz(...e){return(await P()).myDependencyReviews(...e)}async function dz(...e){return(await P()).discardDependencyReview(...e)}async function uz(...e){return(await P()).latestDependencyReview(...e)}var ye={...Ww,[ke]:yw},lA=new Set(Object.keys(Pr)),ms={...Pr,default:"DeepView"};function Pc(e){let t=e._source??e.source;return t!=="default"&&Object.hasOwn(Pe,t)?t:null}function Ae(e){return Hm(e,Ie(e))}function Hm(e,t){if(t===ke)return ke;if(t!==void 0)return lA.has(t)?t:"default";let n=e.toLowerCase();return n.endsWith(".generic-md")?"markdown-generic":n.endsWith(".codex")?"codex-security":n.endsWith(".md")?"claude-security":"default"}function zc(e){return Ie(e)===ke}var rn=`dialog{max-width:520px;width:min(94vw,520px)}.wsl-field{display:block;margin-top:.6rem;color:var(--text);font-size:.78rem;>span{display:block;margin-bottom:.25rem;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}}.wsl-ack{display:flex;align-items:flex-start;gap:.5rem;margin-top:.6rem;color:var(--text);font-size:.8rem;line-height:1.4;>input[type=checkbox]{flex:0 0 auto;margin-top:.15rem}>span{flex:1 1 auto}}.wsl-link{display:block;width:100%;box-sizing:border-box;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.78rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;word-break:break-all}.wsl-error{margin:.55rem 0 0;color:var(--critical, #f87171);font-size:.74rem;line-height:1.4}.wsl-warning{padding:.55rem .65rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 6px);background:rgb(from var(--critical, #f87171) r g b / .08);>p+p{margin-top:.45rem}}.wsl-optout{display:flex;align-items:center;gap:.5rem;margin-top:.7rem;color:var(--text);font-size:.78rem}.nwd-input:disabled{opacity:.5}.nwd-actions button.primary.danger{background:var(--critical, #f87171);border-color:var(--critical, #f87171);color:var(--surface);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--surface);filter:brightness(1.08)}}
|
|
1
|
+
import{b as Cv}from"./chunk-K3X5EJBQ.js";import{a as ut,b as be,d as pv,e as Al,f as fv,g as N,h as re,i as El}from"./chunk-CVVJAXVY.js";import{A as mt,B as ce,C as Xt,D as fe,E as Cn,F as Hp,G as Up,H as Jo,I as l$,J as Je,K as Vp,L as c$,M as Zr,N as jp,O as _n,P as Gp,Q as Kp,R as qp,S as Yp,T as Xp,U as Jp,a as ql,b as o$,d as ft,e as Yo,f as tr,g as Yl,h as xi,i as Np,j as kt,k as Si,l as Bp,m as Dp,n as Pp,o as s$,p as i$,q as Yt,r as ve,s as Me,t as nr,u as Ci,v as a$,w as zp,x as Wp,y as Xo,z as Xl}from"./chunk-VIHGO77Y.js";import{m as e$,o as t$,q as n$,w as r$,x as Lp,y as Op}from"./chunk-RFZQQXSG.js";import{a as Iw,b as ct,c as Te,e as lp,f as Aw,g as gl,h as Ew,i as Fw,j as dp,k as Lw,l as bl,m as yl,n as wl,o as vl,p as ke,q as qn,r as Cl,s as fi,t as Bw}from"./chunk-RSHMVYNS.js";import{$ as $v,A as xn,B as ev,C as gp,D as Ot,E as tv,F as Xn,G as Tl,H as nv,I as gi,J as rv,K as hi,L as hp,M as Vo,N as sv,O as iv,P as av,Q as Ml,R as lv,S as Il,T as cv,U as dv,V as uv,X as bv,Y as yv,Z as wv,_ as vv,a as Ww,aa as Fl,b as Pe,ba as yi,c as oe,ca as jo,d as Uw,da as Go,ea as Nt,f as Vw,fa as kv,ga as bp,h as jw,ha as yp,i as Gw,ia as Ll,ja as Ol,k as mi,ka as qr,l as Kw,la as wp,m as Ho,ma as xv,n as kn,na as Sv,p as qw,q as _l,r as Yw,s as mp,t as Xw,u as Jw,v as Lt,w as Zw,x as Rl,y as we,z as Qw}from"./chunk-XYDGU6BM.js";import{a as Dw,b as Pw,c as Yn,d as fp,e as zw,f as vn,h as $n}from"./chunk-UYAXVRVL.js";import{g as _v,h as Rv,i as vp,j as wi,k as Bl,l as Jn,m as Ko,n as $p,o as kp,q as Dl,r as xp,s as pt,t as Sp,w as Tv}from"./chunk-VQJCXGIY.js";import{a as qe,b as Wr,c as Hr,d as Kn,e as fl,f as ae,g as ml,h as tt}from"./chunk-W4J3MGLB.js";import{b as cp,c as ci,d as hl}from"./chunk-PNHBZGDD.js";import{$ as ee,A as Zn,B as Hl,C as Ul,D as Qn,E as Nv,F as Jr,H as nt,I as Mp,J as Vl,K as Bv,L as er,M as Dv,N as Pv,O as ki,P as zv,Q as Wv,R as Hv,S as Uv,T as Vv,U as jv,V as Gv,X as Kv,Y as jl,Z as Gl,_ as qv,a as q,aa as Bt,b as le,ba as Yv,c as j,ca as Xv,d as Mv,fa as Sn,ga as Ip,h as Cp,ha as Ap,i as _p,ia as Ep,j as Rp,ja as Kl,k as Iv,ka as Fp,l as Av,m as Ev,ma as Jv,n as Pl,o as vi,oa as Zv,p as Tp,pa as Qv,q as Yr,s as zl,t as Fv,u as $i,v as Xr,w as Lv,x as Ov,y as Wl,z as qo}from"./chunk-UXNUAIIC.js";import{a as Nl}from"./chunk-R5O6FAW4.js";import{a as mv,b as gv,d as bi,e as hv}from"./chunk-CMQA4DM6.js";import{b as pl,c as dt,d as Sl,e as jr,f as pp,g as pi}from"./chunk-4F6JSF57.js";import{a as ge,e as Kr,g as ov,h as Uo}from"./chunk-YVZH5SHP.js";import{a as Gr}from"./chunk-3BZ7JERB.js";import{a as Z}from"./chunk-TZ5KB2Y5.js";import{a as Hw}from"./chunk-XYFXXB2G.js";import{a as W}from"./chunk-DIJJNTRH.js";import{a as up,c as Vr,d as $l,e as Ow,g as kl,h as Wo,i as di,j as Ye,k as xl,l as ui,m as Nw,n as Xe}from"./chunk-WZDTZE64.js";import{A as Cw,B as Do,C as Po,D as De,E as Ft,G as _w,H as Gn,J as yn,K as Rw,L as ap,M as Tw,N as Mw,O as $t,a as Dr,f as vw,h as Pr,i as _e,j as et,k as ai,l as Bo,m as de,n as $w,o as kw,p as Be,q as jn,r as cl,t as zr,u as li,v as qt,w as xw,x as dl,y as Sw,z as ul}from"./chunk-GNXOKIGP.js";import{a as gw,b as ip,c as hw}from"./chunk-C4Z6ZBXV.js";import{a as D,b as sp,c as u,d as Un,g,i as J,j as Et}from"./chunk-2XUEZHIP.js";import{a as zo,b as wn,c as Ur}from"./chunk-TUII34K2.js";import{a as bw,c as Lo,d as Oo,e as No,j as il,k as yw,l as Vn,m as ww,p as Kt,q as al,r as ll}from"./chunk-V5O7M2YT.js";var tf=new WeakMap,f$=Symbol("iteration key");function MM(e){tf.set(e,new Map)}function IM(e,{target:t,key:n,type:r}){r==="iterate"&&(n=f$);let o=tf.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 AM({target:e,key:t,type:n}){let r=tf.get(e),o=new Set;if(n==="clear"?r.forEach((s,i)=>{Zp(o,r,i)}):Zp(o,r,t),n==="add"||n==="delete"||n==="clear"){let s=Array.isArray(e)?"length":f$;Zp(o,r,s)}return o}function Zp(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function m$(e){e.cleaners&&e.cleaners.forEach(EM,e),e.cleaners=[]}function EM(e){e.delete(this)}var Zo=[],Qp=!1;function FM(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(Zo.indexOf(e)===-1){m$(e);try{return Zo.push(e),Reflect.apply(t,n,r)}finally{Zo.pop()}}}function Dt(e){let t=Zo[Zo.length-1];t&&(g$(t,e),IM(t,e))}function rr(e){AM(e).forEach(LM,e)}function LM(e){g$(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function g$(e,t){if(e.debugger&&!Qp)try{Qp=!0,e.debugger(t)}finally{Qp=!1}}function h$(){return Zo.length>0}var d$=Symbol("is reaction");function b$(e,t={}){let n=e[d$]?e:function r(){return FM(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[d$]=!0,t.lazy||n(),n}function nf(e){e.unobserved||(e.unobserved=!0,m$(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}var He=new WeakMap,Ql=new WeakMap,OM=Object.prototype.hasOwnProperty;function Zl(e){let t=Ql.get(e);return h$()&&typeof e=="object"&&e!==null?t||ec(e):t||e}function ef(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=Zl(o[1]):o=Zl(o)),{done:r,value:o}},e}var u$={has(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Dt({target:t,key:e,type:"has"}),n.has.apply(t,arguments)},get(e){let t=He.get(this),n=Reflect.getPrototypeOf(this);return Dt({target:t,key:e,type:"get"}),Zl(n.get.apply(t,arguments))},add(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.add.apply(t,arguments);return r||rr({target:t,key:e,value:e,type:"add"}),o},set(e,t){let n=He.get(this),r=Reflect.getPrototypeOf(this),o=r.has.call(n,e),s=r.get.call(n,e),i=r.set.apply(n,arguments);return o?t!==s&&rr({target:n,key:e,value:t,oldValue:s,type:"set"}):rr({target:n,key:e,value:t,type:"add"}),i},delete(e){let t=He.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.get?n.get.call(t,e):void 0,s=n.delete.apply(t,arguments);return r&&rr({target:t,key:e,oldValue:o,type:"delete"}),s},clear(){let e=He.get(this),t=Reflect.getPrototypeOf(this),n=e.size!==0,r=e instanceof Map?new Map(e):new Set(e),o=t.clear.apply(e,arguments);return n&&rr({target:e,oldTarget:r,type:"clear"}),o},forEach(e,...t){let n=He.get(this),r=Reflect.getPrototypeOf(this);Dt({target:n,type:"iterate"});let o=(s,...i)=>e(Zl(s),...i);return r.forEach.call(n,o,...t)},keys(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Dt({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t.values.apply(e,arguments);return ef(n,!1)},entries(){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t.entries.apply(e,arguments);return ef(n,!0)},[Symbol.iterator](){let e=He.get(this),t=Reflect.getPrototypeOf(this);Dt({target:e,type:"iterate"});let n=t[Symbol.iterator].apply(e,arguments);return ef(n,e instanceof Map)},get size(){let e=He.get(this),t=Reflect.getPrototypeOf(this);return Dt({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Jl={get(e,t,n){return e=OM.call(u$,t)?u$:e,Reflect.get(e,t,n)}},p$=typeof window=="object"?window:Function("return this")(),y$=new Map([[Map,Jl],[Set,Jl],[WeakMap,Jl],[WeakSet,Jl],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function NM({constructor:e}){return!(typeof e=="function"&&e.name in p$&&p$[e.name]===e)||y$.has(e)}function BM(e){return y$.get(e.constructor)}var w$=Object.prototype.hasOwnProperty,DM=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));function PM(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&DM.has(t))return r;Dt({target:e,key:t,receiver:n,type:"get"});let o=Ql.get(r);if(h$()&&typeof r=="object"&&r!==null){if(o)return o;let s=Reflect.getOwnPropertyDescriptor(e,t);if(!s||!(s.writable===!1&&s.configurable===!1))return ec(r)}return o||r}function zM(e,t){let n=Reflect.has(e,t);return Dt({target:e,key:t,type:"has"}),n}function WM(e){return Dt({target:e,type:"iterate"}),Reflect.ownKeys(e)}function HM(e,t,n,r){typeof n=="object"&&n!==null&&(n=He.get(n)||n);let o=w$.call(e,t),s=e[t],i=Reflect.set(e,t,n,r);return e!==He.get(r)||(o?n!==s&&rr({target:e,key:t,value:n,oldValue:s,receiver:r,type:"set"}):rr({target:e,key:t,value:n,receiver:r,type:"add"})),i}function UM(e,t){let n=w$.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&rr({target:e,key:t,oldValue:r,type:"delete"}),o}var VM={get:PM,has:zM,ownKeys:WM,set:HM,deleteProperty:UM};function ec(e={}){return He.has(e)||!NM(e)?e:Ql.get(e)||jM(e)}function jM(e){let t=BM(e)||VM,n=new Proxy(e,t);return Ql.set(e,n),He.set(n,e),MM(e),n}var rt=ec;function Rn(e){let t=!0,n=b$(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw nf(n),r}return()=>nf(n)}var $$="deepview.viewMode",k$="deepview.severityMode",Ri="deepview.repoUrls",x$="deepview.focusSplit",S$="deepview.kanbanDetailFullscreen",C$="deepview.bundleSourceWrap",GM=new Set(["corrected","original"]),of=50,tc=20,nc=80;try{localStorage.removeItem($$)}catch{}function KM(){try{let e=localStorage.getItem(k$);return e!==null&&GM.has(e)?e:null}catch{return null}}function qM(){try{let e=localStorage.getItem(S$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function YM(){try{let e=localStorage.getItem(C$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function _$(e){if(!Number.isFinite(e))return of;let t=Math.round(e*10)/10;return Math.min(Math.max(t,tc),nc)}function XM(){try{let e=localStorage.getItem(x$);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?_$(t):null}catch{return null}}function rc(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function oc(){return rc(ve(Ri))}function Ze(e){return e?oc()[e]??"":""}var rf=new Set;function R$(e){return rf.add(e),()=>{rf.delete(e)}}function T$(e){for(let t of rf)try{t(e)}catch(n){console.warn("repo-url listener:",n)}}function Qr(e,t){if(_()||!e)return;let n=oc();t?n[e]=t:delete n[e],Me(Ri,JSON.stringify(n)).catch(r=>console.warn("saveRepoUrlFor:",r)),Xo(Ri,r=>{let o=rc(r);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(r=>console.warn("saveRepoUrlFor cross-tab merge:",r)),T$(e)}async function M$(e,t){await Xo(Ri,n=>{let r=rc(n),o=t==="replace"?{...e}:t==="prefer-imported"?{...r,...e}:{...e,...r};return JSON.stringify(o)}),lf()}async function sc(e){if(!e||typeof e!="object")return[];let t=[];if(await Xo(Ri,n=>{let r=rc(n);t=[];for(let[o,s]of Object.entries(e))!o||typeof s!="string"||!s||r[o]||(r[o]=s,t.push(o));return t.length===0?n:JSON.stringify(r)}),t.length===0)return t;lf();for(let n of t)T$(n);return t}async function sf(e,t){return!e||!t?!1:(await sc({[e]:t})).length>0}var _i=pt(),v$=Ko(_i?.mode??"e2e",globalThis.location?.pathname??"")?"managed":null,c=rt({reports:[],workspaceMerges:[],currentFile:null,currentWorkspace:null,workspaceContentFileCount:0,currentManagedTeam:null,currentManagedReport:null,currentReportWorkspace:null,currentView:"findings",currentLinks:null,bundles:[],storedFiles:[],selectedBundle:null,selectedBundleWorkspace:null,scanSelection:null,bundleCreationRepoId:null,bundleDetails:null,bundleDetailsTab:"overview",selectedPackage:null,selectedPackageVersion:null,packageDetailsTab:"overview",packageSlideTriage:null,packageSlideTransient:!1,packagesSearchQuery:"",packagesSortBy:"findings-desc",expandedPackages:new Set,selectedRepository:null,repositoryDetailsTab:"overview",repositorySlideTriage:null,repositorySlideTransient:!1,repositoriesSearchQuery:"",repositoriesSortBy:"findings-desc",bundleSourceFile:null,bundleSourceFindingIdx:null,bundleSourceTargetLine:null,bundleSourceWrap:YM()??!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:KM()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:qM()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:XM()??of,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:$p(_i?.mode??"e2e",v$),serverModeConfig:_i?.mode??null,serverModeSelection:v$,deepviewScanServer:null,githubNewIssueLabels:_i?.githubNewIssueLabels??"",localMode:!1,managed:_i?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map,managedIssues:new Map});function _(){return c.serverMode==="managed"&&!c.localMode}function Tn(e){c.localMode=!!e}function ic(e,t=globalThis.location?.pathname??""){let n=Ko(e,t);n&&(c.serverModeSelection="managed"),c.serverModeConfig=e,c.serverMode=$p(e,c.serverModeSelection),c.serverModeSelection!==c.serverMode&&(c.serverModeSelection=null),(n||c.serverMode==="e2e"||Jn(e))&&Tn(!1)}function af(){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 lf(){_()||c.repoEditing||c.currentFile&&(c.repoUrl=Ze(c.currentFile))}Yt(()=>{lf()});var Qo=null;function I$(){Qo=null}function Ti(){return _()&&Qo?.teamId===c.currentManagedTeam&&Qo?.userId===c.managedSession?.id&&Qo?.role===c.managedSession?.role?Qo:null}function A$(e,t){let n=new Map,r=new Map,o=[],s=[];fi(t.links??[],r);for(let i of t){let a=i.data;if(a.source==="links"&&Array.isArray(a.links)){o.push({id:i.id,name:i.filename,groups:a.links,skipped:0}),fi(a.links,r);continue}let l=yn(a)??[],p=pl([{groups:[l.flat().filter(d=>d&&typeof d=="object")],tree:a.tree}]);for(let[d,f]of l.entries()){let m=(Array.isArray(f)?f:[f]).filter(b=>b&&typeof b=="object").map(b=>{let y={...b,_managedReportId:i.id,_reportName:i.filename,_repoFallback:i.repo.github,_repoDirectory:i.repo.directory,_source:b.source??a.source??null,_bundleHashes:a.bundleHashes??[],_depsDirectory:p};return Po(y,a),y._analyzer=y._source??y.type??null,"isApp"in y||(y.isApp=jn(y,y._source)),y}),h={report:i.filename,managedReportId:i.id,index:d,members:m};s.push(h);for(let b of m)n.has(b.id)||n.set(b.id,[]),n.get(b.id).push(h)}}Qo={teamId:e,userId:c.managedSession?.id,role:c.managedSession?.role,links:o,rows:s,byId:n,duplicates:r},c.linksTick++,c.findingIndexTick++}function ac(e){let t=Ti();return[...new Set(e.flatMap(n=>t?.byId.get(n)??[]))]}function E$(e){for(let t of ac([e])){let n=qt(t.members.find(r=>r.id===e));if(n)return n}return""}var JM="solidity-bundle",ZM="0.0.0";function or(e){if(e?.name!==JM)return!1;let t=e.version;return!t||t===ZM}function L$(e){let t=e?.package?.npm,n=t?.version;if(typeof n=="string"&&n&&!or(t))return n;let r=e?.file;if(!r)return null;let o=/(?:^|\/)node_modules\/\.pnpm\/([^/]+)\/node_modules\//u.exec(r);if(!o)return null;let s=o[1],i=s.indexOf("_");i>0&&(s=s.slice(0,i));let a=s.lastIndexOf("@");return a<=0?null:s.slice(a+1)||null}function lc(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function cc(e,t,n,r){e.reports.add(n);let o=e._keyReports.get(t);o||e._keyReports.set(t,o=new Set);let s=!o.has(n);return o.add(n),e.keys.has(t)||(e.keys.add(t),e.findings.push(r),e.files.has(r.file)||e.files.set(r.file,[]),e.files.get(r.file).push(r)),s}function dc(e,t,n,r){e._keyReports.delete(t),e.keys.delete(t);let o=e.findings.findIndex(a=>r(a)===t);o>=0&&e.findings.splice(o,1);let s=e.files.get(n);if(!s)return;let i=s.findIndex(a=>r(a)===t);i>=0&&s.splice(i,1),s.length===0&&e.files.delete(n)}function uc(e){let t=new Set;for(let n of e._keyReports.values())for(let r of n)t.add(r);e.reports=t}function O$(e,t,n,r,o){let s=e.byVersion.get(t);s||(s=lc(),e.byVersion.set(t,s)),cc(s,r,o,n)}function N$(e,t,n,r,o,s){let i=e.byVersion.get(t);if(!i)return;let a=i._keyReports.get(n);if(a&&(a.delete(o),a.size===0&&dc(i,n,r,s)),i._keyReports.size===0){e.byVersion.delete(t);return}uc(i)}function cf(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[n,r=""]=F$(e,"-"),[o,s=""]=F$(t,"-"),i=n.split("."),a=o.split("."),l=Math.max(i.length,a.length);for(let p=0;p<l;p++){let d=i[p]??"0",f=a[p]??"0",m=/^\d+$/u.test(d),h=/^\d+$/u.test(f);if(m&&h){let b=Number(f)-Number(d);if(b!==0)return b}else{let b=f.localeCompare(d);if(b!==0)return b}}return r===""&&s!==""?-1:r!==""&&s===""?1:s.localeCompare(r)}function F$(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+1)]}var eo=new Map,es=new Map,ts=new Map,to=new Map,pc=new Map;function QM(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 eI(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function tI(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,df=new Set,Mi=null,uf=!1;function nI(e){return df.add(e),()=>df.delete(e)}function pf(){for(let e of df)try{e()}catch{}}function ff(e){return eo.get(e)?.list??[]}function mf(){let e=0;for(let t of eo.values())e+=t.list.length;return e}function Zt(){return es}function no(){return ts}function Ai(e,t){let n=eo.get(e);if(!n)return[];let r=n.reports.get(sr(t));return r?[...r]:[]}function gf(e,t){let n=es.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function hf(e,t){let n=ts.get(e);if(!n)return[];let r=n._keyReports.get(sr(t));return r?[...r]:[]}function ro(e){return _()?[...new Set(ac([e]).map(t=>t.report))]:[...to.get(e)?.reports.keys()??[]]}function bf(e){if(_())return E$(e);for(let{title:t}of to.get(e)?.reports.values()??[])if(t)return t;return""}function Qt(e){if(_())return ac(e);let t=new Set;for(let n of e)for(let r of 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 fc(e,t,n){let r=pc.get(e);r||(r={hash:[],pkg:[],repo:[],id:[]},pc.set(e,r)),r[t].push(n)}function rI(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])}),fc(t,"id",e.id),!0)}function oI(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&&fc(n,"hash",{hash:e.fileHash,key:t}),r.keys.has(t)?s:(r.keys.add(t),r.list.push(e),!0)}function sI(e,t,n){let r=QM(e);if(!r)return!1;let o=L$(e),s=es.get(r);if(s||(s={...lc(),repos:new Set,byVersion:new Map,_repoReports:new Map},es.set(r,s)),typeof e.repo?.github=="string"&&e.repo.github){s.repos.add(e.repo.github);let a=s._repoReports.get(e.repo.github);a||s._repoReports.set(e.repo.github,a=new Set),a.add(n)}O$(s,o,e,t,n);let i=cc(s,t,n,e);return fc(n,"pkg",{pkg:r,key:t,file:e.file,version:o}),i}function iI(e,t,n,r){if(eI(e))return!1;let o=tI(e,r);if(!o)return!1;let s=ts.get(o);s||(s=lc(),ts.set(o,s));let i=cc(s,t,n,e);return i&&fc(n,"repo",{repo:o,key:t,file:e.file}),i}function yf(e){let t=pc.get(e);if(pc.delete(e),Ii.delete(e),!t)return!1;let n=!1;for(let{hash:o,key:s}of t.hash){let i=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=es.get(o);if(!l)continue;let p=l._keyReports.get(s);if(p){if(p.delete(e)&&(n=!0),p.size===0&&dc(l,s,i,sr),N$(l,a,s,i,e,sr),!r.has(o)){r.add(o);for(let d of[...l._repoReports.keys()]){let f=l._repoReports.get(d);f?.delete(e)&&f.size===0&&(l._repoReports.delete(d),l.repos.delete(d),n=!0)}}l._keyReports.size===0?es.delete(o):uc(l)}}for(let{repo:o,key:s,file:i}of t.repo){let a=ts.get(o);if(!a)continue;let l=a._keyReports.get(s);l&&(l.delete(e)&&(n=!0),l.size===0&&dc(a,s,i,sr),a._keyReports.size===0?ts.delete(o):uc(a))}for(let o of t.id){let s=to.get(o);s&&(s.reports.delete(e)&&(n=!0),s.reports.size===0&&to.delete(o))}return n}async function aI(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;Iw(o,r),Gn(yn(r).map(a=>Array.isArray(a)?a:[a]),{source:r.source});let s=De(r)??"";if(!s)try{s=Ze(e)}catch{}let i=!1;for(let a of o){let l=sr(a);a.fileHash&&oI(a,l,e)&&(i=!0),a.file&&sI(a,l,e)&&(i=!0),a.file&&iI(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)rI(f,e,d)&&(i=!0)}return Ii.has(e)?i:(yf(e),uf=!0,!1)}catch{return Ii.delete(e),!1}}function xt(){return _()?Promise.resolve():Mi||(Mi=(async()=>{try{do{uf=!1;let e=await ce();for(let t of e)await aI(t)&&pf()}while(uf)}finally{Mi=null}})(),Mi)}mt(e=>{yf(e)&&pf()});R$(e=>{yf(e)&&pf(),xt().catch(()=>{})});var Ei=new Map,ns=new Map,mc=new Map,wf=new Set;function lI(e){return wf.add(e),()=>wf.delete(e)}function B$(){for(let e of wf)try{e()}catch{}}function Fi(e,t){if(!e||!t)return!1;let n=!ns.has(e);ns.set(e,t),mc.delete(e);for(let[r,o]of t){if(!o)continue;let s=Ei.get(o);s||(s=new Map,Ei.set(o,s)),s.set(e,r)}return n&&B$(),n}function vf(e){let t=ns.get(e);if(ns.delete(e),mc.delete(e),!!t){for(let n of t.values()){let r=Ei.get(n);r&&(r.delete(e),r.size===0&&Ei.delete(n))}B$()}}function $f(e,t){let n=ns.get(e);if(!n||typeof t!="string"||t==="")return null;if(n.has(t))return t;let r=cI(e,n).get(D$(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 D$(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function cI(e,t){let n=mc.get(e);if(n)return n;n=new Map;for(let r of t.keys()){let o=D$(r),s=n.get(o);s?s.push(r):n.set(o,[r])}return mc.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 kf(e){return ns.has(e)}var P$="deepview.fileCounts",xf=4,dI=new Set([3,xf]),Oi=null;function hc(){if(Oi)return Oi;let e;try{e=JSON.parse(ve(P$)||"{}")}catch{e={}}return dI.has(e?.__v)?e.__v=xf:e={__v:xf},Oi=e,Oi}function Sf(){Me(P$,JSON.stringify(Oi)).catch(e=>console.warn("counts persist:",e))}function z$(e){if(e==="__v")return;let t=hc()[e];if(t!==void 0)return typeof t=="number"?{count:t}:t}function Ni(e){return z$(e)?.count}function Ie(e){return z$(e)?.source}function Ue(e,t,n){let r=hc();r[e]={count:t,source:n??null},Sf()}function os(e){let t=hc();delete t[e],Sf()}function Ve(e){let t=qn(e);return t?{count:Cl(t.groups),source:ke,recognized:!0}:Tw(e)}var Li=null,rs=null,gc=null;function uI(e,t){for(let{names:n,onUpdate:r}of gc)if(n.has(e))try{r(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function Cf(e,t){if(Li){t&&gc.push({names:new Set(e),onUpdate:t});for(let n of e)rs.add(n);return Li}return rs=new Set(e),gc=t?[{names:new Set(e),onUpdate:t}]:[],Li=(async()=>{await Promise.resolve();try{let n=hc();for(;rs.size>0;){let r=rs.values().next().value;if(rs.delete(r),n[r]===void 0)try{let o=await fe(r);if(n[r]!==void 0)continue;let{count:s,source:i}=Ve(o);n[r]=i?{count:s,source:i}:{count:s},Sf(),uI(r,s)}catch{}}}finally{Li=null,rs=null,gc=null}})(),Li}var pI=`deepview/workspace-id/v1
|
|
2
|
+
`;async function Bi(e){let t=Uint8Array.fromBase64(e),n=zo(pI),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 Di(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 W$=Di("create"),H$=Di("delete"),U$=Di("privateKey"),V$=Di("report-membership"),j$=Di("bundle-membership"),fI=W$.on,Pi=H$.on,_f=U$.on,zi=V$.on,Rf=j$.on,bc=W$.fire,Tf=H$.fire,Mf=U$.fire,yc=V$.fire,wc=j$.fire;var Af="deepview.workspaces",mI=1;function Wi(){try{let e=ve(Af);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 gI(e){await Me(Af,JSON.stringify({version:mI,workspaces:e}))}var hI=Af;function is(e){return navigator.locks.request(hI,async()=>{await Ci();let t=Wi(),n=await e(t);if(n!==!1)return await gI(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 Pt=Wi().map(Hi);function Ef(){Pt=Wi().map(Hi)}function Ff(e){Pt=Pt.filter(t=>t.id!==e.id),Pt.push(Hi(e))}function bI(e,t){let n=Array.isArray(e[t])?[...e[t]]:[],r=Pt.find(o=>o.id===e.id);if(r){r[t]=n;return}Pt.push(Hi(e))}function yI(e){Pt=Pt.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 wI=200;function ss(e){let t=(e??"").trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,"").slice(0,wI)||null}async function Lf(e){let t=ss(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 is(i=>i.some(a=>a.id===o.id)?!1:(i.push(o),o))?(Ff(o),o):null}async function Of(e){await is(n=>{let r=n.findIndex(o=>o.id===e);return r<0?!1:(n.splice(r,1),!0)})&&(Tf(e),yI(e))}async function Nf(e,t){let n=ss(t);return!(!n||!await is(o=>{let s=o.find(i=>i.id===e);return!s||s.name===n?!1:(s.name=n,s)}))}async function G$(e){let t=await is(o=>{let s=o.findIndex(d=>d.id===e.id),i=s>=0?o[s]:null,a=ss(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=Pt.find(o=>o.id===n.id)??null;return r==null?bc(n.id):(r.privateKey!==n.privateKey&&Mf(n.id),vc(r.reports,n.reports)||yc(n.id),vc(r.bundles,n.bundles)||wc(n.id)),Ff(n),n}async function vI({id:e,name:t,privateKey:n,createdAt:r}){let o=null;return await is(s=>{let i=ss(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=>ss(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"&&(bc(o.workspace.id),Ff(o.workspace)),o}function vc(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 If({identifier:e,workspaceId:t,field:n,fire:r,additive:o=!1,from:s=void 0}){let i=await is(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&&bI(d,n)}}function K$(e,t){return{move:(n,r)=>If({identifier:n,workspaceId:r,field:e,fire:t}),add:(n,r)=>If({identifier:n,workspaceId:r,field:e,fire:t,additive:!0}),remove:(n,r)=>If({identifier:n,field:e,fire:t,from:r})}}var Bf=K$("reports",yc),Df=K$("bundles",wc),Ui=Bf.move,so=Bf.add,Vi=Bf.remove,Pf=Df.move,io=Df.add,zf=Df.remove;function $I(){let e=Wi().map(Hi),t=Pt,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)||Tf(o);for(let[o,s]of r){let i=n.get(o);if(!i){bc(o);continue}i.privateKey!==s.privateKey&&Mf(o),vc(i.reports,s.reports)||yc(o),vc(i.bundles,s.bundles)||wc(o)}Pt=e}Yt(()=>{$I()});async function kI(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 xI(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 SI(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 CI(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 SI(o,e))return o;return null}function ji(e){return e?Y().filter(t=>t.reports.includes(e)):[]}function Wf(e){if(!e)return"";for(let t of e.split(`
|
|
3
|
+
`))if(t.trim())return t.trim();return""}function _I(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:Wf(s.description)}),n.size===t.size))return n}return n}var ir=new Map,Vf=new Map,$c=new Map,Hf=new Set,Gi=null,Ki=null,Uf=0,qi=!1,zt=!1;function jf(){return _()||zt}function Yi(e){return Hf.add(e),()=>Hf.delete(e)}function as(){for(let e of Hf)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function Gf(){let e=new Map;for(let t of ir.values())t&&fi(t.groups,e);Vf=e}function Kf(){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 qf(){return _()?!!Ti()?.duplicates.size:Vf.size>0}function gt(e){if(_())return[...Ti()?.duplicates.get(e)??[]];let t=Vf.get(e);return t?[...t]:[]}async function q$(e){if(ir.has(e))return!1;let t=$c.get(e)??0,n;try{n=await fe(e)}catch{return!1}if(n==null)return!1;if(($c.get(e)??0)!==t)return qi=!0,!1;let r=/^\s*\[/u.test(n)?qn(n):null;if(ir.set(e,r),r&&Ie(e)!==ke)Ue(e,Cl(r.groups),ke);else if(!r&&Ie(e)===ke){let{count:o,source:s}=Ve(n);Ue(e,o,s)}return r!==null}function Y$(){return _()?Promise.resolve():Ki||(Ki=(async()=>{try{let e,t;do{t=Uf,e=await ce(),zt&&e.some(o=>!ir.has(o))&&(zt=!1,as());let n=e.filter(o=>Ie(o)===ke);(await Promise.all(n.map(o=>q$(o)))).some(Boolean)&&(Gf(),as())}while(t!==Uf);return e}catch(e){throw zt&&(zt=!1,as()),e}finally{Ki=null}})(),Ki)}function Xi(){return _()?Promise.resolve():Gi||(Gi=(async()=>{try{do{qi=!1;let e=await Y$(),t=!1;for(let o of e)await q$(o)&&(t=!0);let n=!qi&&e.every(o=>ir.has(o)),r=zt!==n;zt=n,t&&Gf(),(t||r)&&as()}while(qi)}catch(e){throw zt&&(zt=!1,as()),e}finally{Gi=null}})(),Gi)}mt(e=>{let t=zt;zt=!1,Uf++,$c.set(e,($c.get(e)??0)+1),qi=!0;let n=ir.get(e)!=null;ir.delete(e),n&&Gf(),(n||t)&&as()});var Yf=()=>{};function Xf(e){Yf=typeof e=="function"?e:()=>{}}var J$=()=>{};function Jf(e){J$=typeof e=="function"?e:()=>{}}var Z$=()=>{};function RI(e){Z$=typeof e=="function"?e:()=>{}}var ar="deepview.triage",Mn="deepview.triage.pending",en=/^\d+$/u;async function TI(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function MI(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}var II="deepview.triage.save",X$=0;function kc(){return!_()&&lp(c.triage,c.reports)}function Zf(){kc();let e={};for(let[t,n]of c.triage){if(en.test(t))continue;let r=fl(n);r&&(e[t]=r)}return e}function xe(){if(_())return J$(),Promise.resolve();let e=++X$,t=Zf(),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(o$,{mode:"shared"},async()=>{let o=null,s=null;if(r!=null)try{let i=zo(r),a=await TI(i);s=xi(),o=(s?await s$(a):a).toBase64()}catch(i){console.warn("Failed to save triage:",i),Yf();return}await navigator.locks.request(II,()=>{try{if(e!==X$)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)}}),Yf()})}async function xc(){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(ql(n)){if(!xi())throw new Error("triage: vault locked, cannot decrypt envelope");n=await i$(n)}let r=await MI(n);return JSON.parse(Ur(r))}function Q$(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 ls(){if(_())return!1;if(![...c.triage.values()].some(r=>r.ignoredReports?.length))return;let{readFileFresh:e,withStoredItem:t}=await import("./chunk-WGG7KQUH.js"),n=await Aw(Object.fromEntries(c.triage),r=>t("report",r,()=>e(r)));if(!_())return lp(c.triage,n)}async function AI(){if(!_())try{let e=await xc();if(_())return;Q$(e),await ls()&&await xe()}catch(e){console.warn("Failed to load triage:",e)}}async function Ji(){if(!_())try{let e=await xc();if(_())return;Q$(e,{replace:!0}),await ls()&&await xe(),Z$()}catch(e){console.warn("Failed to reload triage:",e)}}typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==ar&&e.key!==Mn||Ji()});var EI;function ao(){return _()?Promise.resolve():EI??=AI()}kt(()=>{Ji()});kt(()=>{_()||xi()&&localStorage.getItem(Mn)&&xe()});async function Qf({seal:e}){try{localStorage.removeItem(Mn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(ql(n))return;let r=await e(n,Np());localStorage.setItem(ar,r.toBase64())}async function em({open:e}){try{localStorage.removeItem(Mn)}catch{}let t=localStorage.getItem(ar);if(!t)return;let n=Uint8Array.fromBase64(t);if(!ql(n))return;let r=await e(n,Np());localStorage.setItem(ar,r.toBase64())}function Sc(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function ek(e){if(typeof e!="string"||!e)return null;if(e.startsWith("r:"))try{let t=JSON.parse(e.slice(2));if(t&&typeof t.name=="string"&&t.name&&typeof t.workspaceId=="string"&&t.workspaceId)return{name:t.name,workspaceId:t.workspaceId}}catch{}return{name:e,workspaceId:null}}var tk="deepview.lastFile",Zi=null;function tm(){return Zi||(Zi=FI(),Zi.catch(()=>{Zi=null})),Zi}async function FI(){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 Jo(o)}catch(f){console.warn(`migrate: failed to rename ${o} -> ${s}`,f);continue}t.delete(o),t.add(s),r.add(o);let a=Ni(o);if(os(o),a===void 0){let{count:f,source:m}=Ve(i);Ue(s,f,m)}else{let{source:f}=Ve(i);Ue(s,a,f)}let l=Ze(o);l&&(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=ek(ve(tk));if(d?.name===o)try{await Me(tk,Sc(s,d.workspaceId))}catch{}}for(let o of Y())for(let s of o.reports){if(!s.toLowerCase().endsWith(".deepseek")||!r.has(s)&&n.has(s))continue;let i=s.slice(0,-9)+".md";await Vi(s,o.id),await so(i,o.id)}}function nm(){return{...nk,hydrateKey:a$,localContentSyncStatus:Tv,readTriageBlob:async()=>(await gl(await xc(),e=>Xl("report",e,()=>Hp(e)))).entries,reportSyncHash:e=>Xl("report",e,async()=>_v(await Cn(e)))}}var nk={hasStoredBundleBytes:c$,listBundles:Je,listFiles:ce,onBundleMutated:l$,onFileMutated:mt,readBundle:_n,readFile:Hp,withStoredItem:Xl,isEncryptionEnabled:ft,isUnlocked:Yo,onVaultStateChange:kt,unlockEncryption:Si};function rm(e=nk){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(o,s,i)=>{let a=!1,l=!1,p=e.onVaultStateChange(()=>{a=!0}),d=s==="report"?e.onFileMutated:e.onBundleMutated,f=i===void 0?null:d(m=>{m===i&&(l=!0)});return{check(){if(o?.throwIfAborted(),t()||a)throw new Error("Local data is locked or has changed. Unlock it and select the file again.");if(l)throw new Error(`This local ${s} changed. Select it again before importing.`)},unsubscribe(){p(),f?.()}}},r=async o=>o==="report"?(await e.listFiles()).map(s=>({value:s,label:s})):(await e.listBundles()).map(s=>({value:s.integrity,label:s.name,secondary:s.integrity}));return{get locked(){return t()},async hasData(o){return o==="report"?(await e.listFiles()).length>0:t()?e.hasStoredBundleBytes():(await e.listBundles()).length>0},async list(o){let s=n();try{s.check();let i=await r(o);return s.check(),i}finally{s.unsubscribe()}},unlock(o){return e.unlockEncryption(o)},subscribe(o){let s=e.onVaultStateChange(()=>o()),i=e.onFileMutated(l=>o({kind:"report",value:l})),a=e.onBundleMutated(l=>o({kind:"bundle",value:l}));return()=>{s(),i(),a()}},async importItem(o,s,i,{signal:a}={}){let l=n(a,o,s);try{l.check();let{result:p}=await e.withStoredItem(o,s,async()=>{l.check();let d=(await r(o)).find(h=>h.value===s);if(l.check(),!d)throw new Error("This file is no longer in local storage. Select another file.");let f=o==="report"?await e.readFile(s):await e.readBundle(s);l.check();let m=new File([f],d.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let h=Promise.resolve(i(m));return h.catch(()=>{}),{result:h}}finally{l.unsubscribe()}});return p}finally{l.unsubscribe()}}}}function rk(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function cs(){if(!rk()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function om(){let e={supported:rk(),persisted:null,usage:null,quota:null};if(!e.supported)return e;if(typeof navigator.storage.persisted=="function")try{e.persisted=await navigator.storage.persisted()}catch{}if(typeof navigator.storage.estimate=="function")try{let t=await navigator.storage.estimate();typeof t?.usage=="number"&&(e.usage=t.usage),typeof t?.quota=="number"&&(e.quota=t.quota)}catch{}return e}var Cc="deepview.scan.access",sm=new Set;function ok(){for(let e of sm)e()}function ds(){return ve(Cc)!=null}function im(e){try{let t=JSON.parse(ve(Cc)),n=t?.provider==="moonshotai"?"moonshot":t?.provider;return!e||t?.server!==e||typeof t.deepview!="string"||!t.deepview.trim()||![null,"anthropic","openai","moonshot","openrouter"].includes(n)||typeof t.token!="string"?null:{...t,provider:n}}catch{return null}}async function am({server:e,deepview:t,provider:n,token:r}){await Me(Cc,JSON.stringify({server:e,deepview:t,provider:n,token:r})),ok()}async function lm(){await nr(Cc),ok()}function cm(e){sm.add(e);let t=Yt(e);return()=>{sm.delete(e),t()}}var dm=1;function LI(){let e=Zf(),t=oc();return{version:dm,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function OI(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function NI(){let e=LI();return{blob:new Blob([await ci(JSON.stringify(e))]),filename:OI()}}async function BI(e){let t;try{t=await hl(new Uint8Array(await e.arrayBuffer()))}catch(r){throw new Error(`Failed to gunzip: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch(r){throw new Error(`Failed to parse JSON: ${r.message}`,{cause:r})}if(!n||typeof n!="object")throw new Error("Invalid backup file (not an object)");if(n.version!==dm)throw new Error(`Unsupported backup version: ${n.version} (expected ${dm})`);if(!n.triage||typeof n.triage!="object")throw new Error("Backup is missing the `triage` map");if(!n.repoUrls||typeof n.repoUrls!="object")throw new Error("Backup is missing the `repoUrls` map");return n}async function DI(e,t){if(!["replace","prefer-imported","prefer-current"].includes(t))throw new Error(`Unknown merge mode: ${t}`);if(!e||typeof e!="object")throw new Error("Invalid payload: not an object");if(!e.triage||typeof e.triage!="object"||Array.isArray(e.triage))throw new Error("Invalid payload: missing or non-object `triage`");if(!e.repoUrls||typeof e.repoUrls!="object"||Array.isArray(e.repoUrls))throw new Error("Invalid payload: missing or non-object `repoUrls`");let n=e.triage,r=c.triage;if(t==="replace")for(let a of[...r.keys()])en.test(a)||r.delete(a);let o=t==="prefer-current";for(let[a,l]of Object.entries(n)){if(en.test(a)||!l||typeof l!="object")continue;typeof l.color=="string"&&l.color&&(!o||!r.get(a)?.color)&&ae(r,a,{color:l.color});let p=qe(l);if(p&&(!o||!qe(r.get(a)))&&ae(r,a,{triage:p}),typeof l.comment=="string"&&l.comment&&(!o||!r.get(a)?.comment)&&ae(r,a,{comment:l.comment}),typeof l.fix=="string"&&l.fix&&(!o||!r.get(a)?.fix)&&ae(r,a,{fix:l.fix}),typeof l.flagged=="boolean"&&(!o||r.get(a)?.flagged===void 0)&&ae(r,a,{flagged:l.flagged}),Array.isArray(l.ignoredReports)&&Wr(r.get(a)))for(let d of l.ignoredReports)typeof d=="string"&&tt(r,a,d,!0,Kn(l,d))}await ls(),await xe();let s=0,i=null;try{await M$(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 PI(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function um(e){let t=new Set;for(let n of e){let r;try{r=await fe(n)}catch(s){if(PI(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 zI(){let e=new Set;for(let t of c.triage.keys())en.test(t)||e.add(t);return e}async function _c(e){let t=zI();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await um(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 um(i),l=0,p=0;for(let d of r)a.has(d)?p++:l++;return{orphanedCount:l,sharedCount:p}}async function Rc(){let e=new Set(c.triage.keys()),t=[];for(let[i,a]of c.triage)if(a.ignoredReports)for(let l of a.ignoredReports)t.push({id:i,report:l});let n=await ce(),r=new Set(n),o=await um(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 WI=1;async function HI(e){let t=new Set,n=await $t(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function pm(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function UI(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 VI(e){let t=Ze(e);return t?{github:t}:null}async function sk(e){let t=[];for(let n of e.reports??[]){let r;try{r=await fe(n)}catch(s){console.warn(`Workspace export: skipping ${n}: ${s?.message??s}`),(s instanceof DOMException&&s.name==="NotFoundError"||typeof s?.message=="string"&&s.message.startsWith("File not found:"))&&await Ui(n,null);continue}let o=VI(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function jI(e,{includeBundleBytes:t=!1}={}){let n=await sk(e),r=new Set;for(let p of n)for(let d of await HI(p.content))r.add(d);let o=new Set(e.reports??[]),s={};for(let[p,d]of c.triage){if(!r.has(p))continue;let f=(d.ignoredReports??[]).filter(h=>o.has(h)),m=fl({...d,ignoredReports:f});m&&(s[p]=m)}let i={};for(let p of n)p.repo?.github&&(i[p.name]=p.repo.github);let a=(e.bundles??[]).filter(p=>typeof p=="string"&&p.length>0),l={version:WI,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 UI(a);p.length>0&&(l.bundleBlobs=p)}return l}async function ik(e,{includeBundleBytes:t=!1}={}){let n=await jI(e,{includeBundleBytes:t});return{blob:new Blob([await ci(JSON.stringify(n))]),filename:`${pm(e.name)}.deepview-workspace.json.gz`}}async function GI(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await ik(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),s=await Lw(o,t);return{blob:new Blob([s],{type:"application/octet-stream"}),filename:`${pm(e.name)}.deepview-workspace.enc`}}async function fm(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await GI(e,t,{includeBundleBytes:n}):await ik(e,{includeBundleBytes:n})}async function KI(e){return{reports:await sk(e)}}async function mm(e){let t=await KI(e);return{blob:new Blob([await ci(JSON.stringify(t))]),filename:`${pm(e.name)}.deepview-reports.json.gz`}}function qI(e){return qe(e)??null}async function YI(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:Wf(o.description)})}return t}async function XI(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=qI(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&&JI(o,s)}await xe()}function JI(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&ZI(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 ZI(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 QI(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 gm(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 QI(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await YI(e.reports):new Map,s=await gl(e.triage,f=>e.reports.find(m=>m.name===f)?.content);await XI(s.entries,t,o);let i=Array.isArray(e.bundles),a=i?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],l=await G$({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:n,bundles:i?a:void 0,preserveBundles:!i,createdAt:e.workspace.createdAt}),p=new Set(n),d=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[f,m]of Object.entries(e.repoUrls))!p.has(f)||typeof m!="string"||!m||(d[f]=m);if(Object.keys(d).length>0)try{await sc(d)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return l}function eA(e){return!e||typeof e!="object"||Array.isArray(e)?"payload is not an object":e.version!==void 0||e.workspace!==void 0?"payload claims to be a workspace export":Array.isArray(e.reports)?e.reports.length>bl?`reports count (${e.reports.length}) exceeds cap (${bl})`:null:"reports field must be an array"}function ak(e){return eA(e)===null}async function hm(e){if(dp(e))return{kind:"encrypted"};let t;try{t=await hl(e)}catch(r){throw new Error(`gzip decompression failed: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch{return{kind:"workspace",text:t}}return ak(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}async function bm({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 Ew(zo(JSON.stringify(s)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function tA({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 Fw(n,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await nA(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function nA(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 ym(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function rA(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 km="deepview.workspaceApp",lk=2,wm=new Set,vm=new Set,$m=0,xm=0,Sm=0,Mc=new Map,Ic=Promise.resolve(),ck=null;function ps(e=ve(km)){try{let t=JSON.parse(e);if(t?.version===lk&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:lk,revision:"",links:"[]",entries:{}}}function us(){for(let e of wm)e()}function dk(e){let t=Ic.then(()=>Xo(km,n=>e(ps(n))));return Ic=t.catch(n=>console.warn("workspace App cache:",n)),t}function Tc(e){return JSON.stringify(e.reports.toSorted())}function uk(){return JSON.stringify(Kf().map(({name:e,groups:t})=>({name:e,groups:t})))}function Cm(e){return jf()&&e.links===uk()}function pk(e,t){return e.workspaceRevisions?.[t]??""}function fk(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(Mc.get(t?.id)??0)&&n.workspaceRevision===pk(e,t?.id)}function mk(e,t,n){return n.reportEpoch===Sm&&n.reportRevision===(e.reportRevision??e.revision)&&fk(e,t,n)}function _m(e,t){return mk(ps(),e,t)}function gk(e,t){if($m||vm.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==Tc(e)||typeof n.appMode!="boolean"||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function Rm(e){return gk(e,ps())?.appMode??null}function lo(e){let t=ps(),n=gk(e,t);return!n||!Cm(t)?null:n}async function Qi(e,t=null){let n;do n=Ic,await n;while(n!==Ic);let r=ps(),o=r.reportRevision??r.revision;return t&&(!mk(r,e,t)||!Cm(r))?null:{epoch:xm,revision:r.revision,reportEpoch:Sm,reportRevision:o,workspaceId:e?.id,workspaceEpoch:Mc.get(e?.id)??0,workspaceRevision:pk(r,e?.id)}}async function Tm(e,t,n){let r=!1;return await dk(o=>{if(n.epoch!==xm||n.revision!==o.revision||!fk(o,e,n)||!Cm(o))return;let s=Y().find(i=>i.id===e.id);if(!(!s||Tc(s)!==Tc(e)))return o.entries[e.id]={...t,reports:Tc(e)},r=!0,JSON.stringify(o)}),r&&us(),r}function Ac(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)xm++,t===void 0&&Sm++,$m++;else for(let n of e)Mc.set(n,(Mc.get(n)??0)+1),vm.add(n);return us(),dk(n=>{if(n.reportRevision??=n.revision,e===null)n.revision=crypto.randomUUID(),t===void 0&&(n.reportRevision=n.revision),n.entries={};else{n.workspaceRevisions??={};for(let r of e)n.workspaceRevisions[r]=crypto.randomUUID(),delete n.entries[r]}return t!==void 0&&(n.links=t),JSON.stringify(n)}).finally(()=>{if(e===null)$m--;else for(let n of e)vm.delete(n);us()})}function Mm(e){return wm.add(e),()=>wm.delete(e)}Yt(()=>{let e=ve(km);e!==ck&&(ck=e,us())});zi(e=>{Ac([e]).catch(()=>{})});Pi(e=>{Ac([e]).catch(()=>{})});mt(e=>{let t=Y().filter(n=>n.reports.includes(e)).map(n=>n.id);Ac(t).catch(()=>{})});Yi(()=>{if(!jf()){us();return}let e=uk();ps().links===e?us():Ac(null,e).catch(()=>{})});var St="deepviewManagedNavigation",Ec="deepviewManagedLoginFinding";function Im(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Fc(e,t){return e?.bundleTab!=="code"||t?.bundleTab!=="code"||e.view!==t.view?!1:e.view==="npm"?e.packageName===t.packageName&&(e.packageSpec??null)===(t.packageSpec??null):e.view==="bundles"&&(e.teamSlug??null)===(t.teamSlug??null)&&e.bundleSlug===t.bundleSlug}function oA(e){let t=e.location.hash,n=zw(t),r=!1,o=null,s=0,i=null,a=null,l=!1,p=null,d=null,f=null;function m(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h($){let S=ui($),C=S?.view==="home"?pi($.hash):null;return S?{...S,...C?{finding:C}:{}}:null}function b(){try{let $=e.sessionStorage?.getItem(Ec);if(e.sessionStorage?.removeItem(Ec),!$)return null;let S=new URL($,e.location.origin),C=S.origin===e.location.origin?h(S):null;return C?.finding?C:null}catch{return null}}function y(){if(!r||!pi(e.location.hash)||p===e.location.href||e.history.state?.[St]&&e.history.state[St]!==o)return;let $=p=e.location.href,S=h(new URL($));v(S??{view:"home"},{replace:!0}).finally(()=>{p===$&&(p=null)})}function w($){m()||($=$n($,n),e.history.replaceState(r?{[St]:o}:null,"",$),a=$)}async function v($,{replace:S=!1,pop:C=!1}={}){if(!r||!i||m())return!1;$??={view:"home"};let R=Ye($);if(R===null)return!1;let L=++s,A=d={route:$,findingRoute:null,codeRoute:null},E=()=>r&&L===s&&!m(),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),Im(A.findingRoute,typeof M=="object"?M:$)&&(R=Ye(A.findingRoute)),Fc(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&&Fc(C,R)){w(Ye(C));return}}let S=$.state?.[St]===o?h(new URL(e.location.href)):null;v(S??{view:"home"},{pop:!0})}function k($){if(!r||$.defaultPrevented||$.button!==0||$.metaKey||$.ctrlKey||$.shiftKey||$.altKey)return;let S=$.composedPath().find(L=>L.matches?.("a.comment-self-ref[href]"));if(!S||S.hasAttribute("download")||S.target&&S.target!=="_self")return;let C=new URL(S.href);if(C.origin!==e.location.origin)return;let R=h(C);if(R?.finding)return $.preventDefault(),v(R)}return{get active(){return r},rememberFinding(){let $=h(new URL(e.location.href));if(!$?.finding)return;let S=$.view==="home"?`/#${jr($.finding)}`:Ye($);try{e.sessionStorage?.setItem(Ec,S)}catch{}},start($,{onCancel:S=null}={}){if(r)return;r=!0,i=$,f=S,o=typeof e.history.state?.[St]=="string"?e.history.state[St]:e.crypto.randomUUID(),l||(e.addEventListener("popstate",x),e.addEventListener("hashchange",y),e.addEventListener("click",k),e.launchQueue?.setConsumer(({targetURL:L})=>{if(!r||!L)return;let A=new URL(L);if(A.origin!==e.location.origin)return;let E=h(A);E&&v(E)}),l=!0);let C=b(),R=h(new URL(e.location.href))??{view:"home"};return C&&R.view==="home"&&!R.finding&&(R=C),v(R,{replace:!0})},navigate:v,replaceFindingRoute($){if(!r||$?.view!=="findings"||m())return;let S=Ye($);if(S!=null){if(d){(d.route.view==="home"&&d.route.finding||Im($,{...d.route,view:"findings"}))&&(d.findingRoute=$);return}Im($,ui(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceCodeRoute($){if(!r||m()||!["bundles","npm"].includes($?.view)||$.bundleTab!=="code")return;let S=Ye($);if(S!=null){if(d){Fc($,d.route)&&(d.codeRoute=$);return}Fc($,ui(new URL(e.location.href)))&&$n(S,n)!==a&&w(S)}},replaceRoute($){if(!r||!$||m())return;let S=Ye($);S!=null&&!d&&w(S)},pushRoute($){if(!r||!$||m())return;let S=Ye($);if(S==null)return;let C=d!==null;++s,d=null,S=$n(S,n),S!==a&&(e.history.pushState({[St]:o},"",S),a=S),C&&f?.()},reset({force:$=!1}={}){if(++s,d=null,r||$){try{e.sessionStorage?.removeItem(Ec)}catch{}r=!1,o=null,i=null,w("/")}}}}var te=typeof window>"u"?null:oA(window);function ea(e){return _()&&!c.managedSession?.publicShare&&Yn(c.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}function hk(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function sA(e){let[t,n,r]=e.split("/");return r===void 0&&t!==void 0&&n!==void 0&&t.length<=39&&/^[a-zA-Z\d](?:-?[a-zA-Z\d])*$/u.test(t)&&n.length<=100&&n!=="."&&n!==".."&&/^[a-zA-Z\d._-]+$/u.test(n)}function bk(e,t){if(typeof e!="string"||e.length>2048)return null;let n;try{n=new URL(e)}catch{return null}if(n.href!==e||n.origin!=="https://github.com"||n.username||n.password)return null;let r=t.exec(n.pathname);if(!r)return null;let o=`${r[1]}/${r[2]}`,s=Number(r[3]);return!sA(o)||!Number.isSafeInteger(s)||s<=0?null:{repo:o,number:s}}function Am(e){return bk(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Em(e){return bk(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function Fm(e){let t=Am(e);if(t)return{...t,kind:"pull"};let n=Em(e);return n?{...n,kind:"issue"}:null}function Lm(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}function Lc(e){return _()&&c.currentManagedTeam&&c.managedSession&&!c.managedSession.publicShare?c.managedIssues.get(e?.id)??null:null}function tn(e){return Lc(e)?.autoFix??""}function ta(e,t={},n){let r=!1;for(let o of e){if(n&&c.managedIssues.get(o)!==n.get(o))continue;let s=Object.hasOwn(t,o)?t[o]:null,i=Em(s?.url)?{url:s.url,autoFix:Am(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 iA(e){let t=e?.teams?.find(n=>n.id===e.teamId);return t?!t.cacheKey||!Array.isArray(t.reports)||t.reports.some(n=>!n.cacheKey)?e.teams:JSON.stringify([t.cacheKey,t.reports.map(n=>[n.id,n.cacheKey,n.visible!==!1]).toSorted()]):null}var Oc=class{constructor({context:t,fetchWorkspace:n,changed:r=()=>{},now:o=Date.now}){this.getContext=t,this.fetchWorkspace=n,this.changed=r,this.now=o,this.entries=new Map,this.required=new Set,this.expires=0,this.context=null,this.scope=null,this.timer=null,this.run=null}reset(){this.run?.abort(),this.run=null,clearTimeout(this.timer),this.timer=null,this.entries.clear(),this.required.clear(),this.expires=0,this.context=null,this.scope=null}syncContext(){let t=this.getContext();if(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.reportId!==this.context?.reportId||t?.teams!==this.context?.teams){let n=iA(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&&Fm(t);if(!o)return null;let s=Lm(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=Fm(s?.url);if(i&&typeof s.title=="string"&&["open","draft","closed","merged"].includes(s.status)){let a=i.kind==="issue"&&s.status==="closed"?hk(s.stateReason):null;this.entries.set(Lm(i),{title:s.title,description:typeof s.description=="string"?s.description:null,status:s.status,stateReason:a})}}this.expires=this.now()+6e4,this.run=null;let o=[...this.required].some(s=>!this.entries.has(s));this.required.clear(),o&&(this.expires=0,this.schedule()),this.changed()}};var Nc=new Set,Om=new Oc({context:()=>{let e=c.managedSession;return _()&&e?.id&&c.currentManagedTeam?{key:JSON.stringify([e.id,e.role,e.csrfToken]),teamId:c.currentManagedTeam,reportId:c.managedTeams.find(t=>t.id===c.currentManagedTeam)?.reports.find(t=>t.id===c.currentManagedReport&&t.visible===!1)?.id??null,teams:c.managedTeams}:null},fetchWorkspace:yk,changed:()=>{for(let e of Nc)e()}});function K4(e){return Nc.add(e),()=>Nc.delete(e)}function Nm(){Om.reset();for(let e of Nc)e()}function fs(e){c.currentManagedTeam===e&&Nm()}function Bm(e,t,n){if(c.currentManagedTeam!==e)return;let r=[...t].map(s=>({id:s,issue:c.managedIssues.get(s)}));r.some(({id:s,issue:i})=>i?.url!==n.get(s)?.url)&&fs(e);for(let{id:s,issue:i}of r)i?.autoFix&&i.autoFix!==n.get(s)?.autoFix&&Om.read(i.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:s})=>s?.url)?.issue.url;o&&Om.read(o)}var na=null,nn=null;function Dm(){return nn?.getPreviewRole()??null}function wk(){nn?.setPreviewRole(null)}function vk(){nn?.resetManagedAppState()}function $k(e){nn?.setManagedAppSession(e)}function kk(e){return nn?.setManagedReportCatalog(e)??new Set}function Bc(e,t=c.currentManagedTeam){return nn?.readReportSources(e,t)}function xk(){nn?.clearReportSources(),nn?.clearFindingHistory()}async function Sk(e,t=c.currentManagedTeam){return(await P()).fetchReportSources(e,t)}function P(){return na||(na=(async()=>{let e="./client-managed.js";try{return nn=await import(e),nn}catch(t){throw na=null,t}})(),na)}async function Ck(e){return(await P()).probeSession(e)}async function _k(e){return(await P()).probeTeams(e)}async function Pm(e){return(await P()).fetchManagedBundleCatalog(e)}async function Rk(e,t,n){return(await P()).fetchNpmPackage(e,t,n)}async function Tk(e,t){return(await P()).fetchNpmVersions(e,t)}async function Mk(e,t){return(await P()).fetchNpmStats(e,t)}async function Ik(e,t){return(await P()).fetchNpmAdvisories(e,t)}async function Ak(e,t,n){return(await P()).fetchNpmTags(e,t,n)}async function Ek(e,t,n,r){return(await P()).fetchNpmRisk(e,t,n,r)}async function Fk(e,t,n){return(await P()).fetchNpmSocket(e,t,n)}async function Lk(e,t,n){return(await P()).fetchNpmProvenance(e,t,n)}async function Ok(e,t,n,r){return(await P()).fetchPrettyBundleFile(e,t,n,r)}async function Nk(e,t,n,r){return(await P()).fetchPrettyNpmFiles(e,t,n,r)}async function Bk(e,t,n,r,o){return(await P()).fetchPrettyNpmFile(e,t,n,r,o)}async function Dk(e,t,n,r){return(await P()).fetchPrettyBundleChanges(e,t,n,r)}async function Pk(e,t,n,r,o){return(await P()).fetchPrettyNpmChanges(e,t,n,r,o)}async function ez(e,t,n,r){return(await P()).fetchBundleRenameDiff(e,t,n,r)}async function tz(e,t,n,r,o){return(await P()).fetchNpmRenameDiff(e,t,n,r,o)}async function nz(e,t,n,r){return(await P()).fetchBundleRenameDiffs(e,t,n,r)}async function rz(e,t,n,r,o){return(await P()).fetchNpmRenameDiffs(e,t,n,r,o)}async function oz(e,t,n,r){return(await P()).fetchBundleTypeOnly(e,t,n,r)}async function sz(e,t,n,r,o){return(await P()).fetchNpmTypeOnly(e,t,n,r,o)}async function zk(e){return(await P()).openManagedShareDialog(e,"",c.managedSession)}async function iz(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([P(),import("./chunk-AQ75QITE.js")]);return t()?n.openManagedIssueDialog({...e,isCurrent:t,onCreated:o=>{if(!t())return;let s=e.context.findingId,i=c.managedIssues.get(s),a=ta([s],{[s]:{url:o,autoFix:i?.url===o?i.autoFix:null}});fs(e.teamId),a&&r()}}):null}async function az(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 P();return o()?s.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:o}):null}async function Wk(e,t){return(await P()).fetchTeamAnnotations(e,t)}async function zm(e,t=c.currentManagedTeam,n){return(await P()).fetchReportTriage(e,t,n)}async function yk(e,t,n){return(await P()).fetchFixes(e,t,n)}async function Hk(e,t=c.currentManagedTeam,n){return(await P()).fetchReportComments(e,t,n)}async function Uk(e,t,n,r=c.currentManagedTeam){return(await P()).saveReportComment(e,t,n,r)}async function Vk(e,t,n,r,o=c.currentManagedTeam){return(await P()).deleteReportComment(e,t,n,r,o)}async function jk(e,t,n,r=c.currentManagedTeam){return(await P()).pushReportTriage(e,t,n,r)}async function Gk(e){return e&&te?.rememberFinding(),(await P()).login(e)}async function Kk(e){return(await P()).logout(e)}async function qk(e){return(await P()).stopViewing(e)}async function Dc(e,t){return(await P()).fetchBundleMetadata(e,t)}async function Yk(e,t){return(await P()).fetchBundleContents(e,t)}async function Wm(e,t){return(await P()).fetchTeamReports(e,t)}async function Xk(e,t){return(await P()).watchTeamFeed(e,t)}async function Jk(e,t=c.currentManagedTeam,n="",r=!1,o=!1){return(await P()).fetchBundleAdvisories(e,t,n,r,o)}async function lz(...e){return(await P()).dependencyReviews(...e)}async function cz(...e){return(await P()).myDependencyReviews(...e)}async function dz(...e){return(await P()).discardDependencyReview(...e)}async function uz(...e){return(await P()).latestDependencyReview(...e)}var ye={...Ww,[ke]:yw},aA=new Set(Object.keys(Pr)),ms={...Pr,default:"DeepView"};function Pc(e){let t=e._source??e.source;return t!=="default"&&Object.hasOwn(Pe,t)?t:null}function Ae(e){return Hm(e,Ie(e))}function Hm(e,t){if(t===ke)return ke;if(t!==void 0)return aA.has(t)?t:"default";let n=e.toLowerCase();return n.endsWith(".generic-md")?"markdown-generic":n.endsWith(".codex")?"codex-security":n.endsWith(".md")?"claude-security":"default"}function zc(e){return Ie(e)===ke}var rn=`dialog{max-width:520px;width:min(94vw,520px)}.wsl-field{display:block;margin-top:.6rem;color:var(--text);font-size:.78rem;>span{display:block;margin-bottom:.25rem;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}}.wsl-ack{display:flex;align-items:flex-start;gap:.5rem;margin-top:.6rem;color:var(--text);font-size:.8rem;line-height:1.4;>input[type=checkbox]{flex:0 0 auto;margin-top:.15rem}>span{flex:1 1 auto}}.wsl-link{display:block;width:100%;box-sizing:border-box;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.78rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;word-break:break-all}.wsl-error{margin:.55rem 0 0;color:var(--critical, #f87171);font-size:.74rem;line-height:1.4}.wsl-warning{padding:.55rem .65rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 6px);background:rgb(from var(--critical, #f87171) r g b / .08);>p+p{margin-top:.45rem}}.wsl-optout{display:flex;align-items:center;gap:.5rem;margin-top:.7rem;color:var(--text);font-size:.78rem}.nwd-input:disabled{opacity:.5}.nwd-actions button.primary.danger{background:var(--critical, #f87171);border-color:var(--critical, #f87171);color:var(--surface);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--surface);filter:brightness(1.08)}}
|
|
4
4
|
`;var Um=class extends N{static styles=[...N.styles,D(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",Um);function Wc({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return El("workspace-unlock-bundle-dialog",{_tryPassword:e},t=>{t._tryPassword=null})}var Hc=`.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
5
|
`;var Zk=`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 Qk({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 Uc(e){if(!e)return g;let t=e.replaceAll("_"," ");return u`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function
|
|
6
|
+
`;function Qk({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 Uc(e){if(!e)return g;let t=e.replaceAll("_"," ");return u`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function uA(e){return`bundle-${e.slice(7,19)}\u2026`}function lr(e){return e.kind==="bundle"?e.label??uA(e.identifier):e.identifier}function e0(e){return e.kind==="bundle"?"bundle":zc(e.identifier)?"links file":"report"}function Vc(e){let t=e.length,n=t===1,r=new Set(e.map(e0)),o="items";if(r.size===1){let s=[...r][0];o=n?s:`${s}s`}return{count:t,singular:n,kindLabel:o}}function jc(e){return u`<ul class="lwd-list">${e.map(t=>{let n=e0(t);return u`<li>${lr(t)}${n==="report"?g:u`<span class="lwd-kind-tag">${n}</span>`}</li>`})}</ul>`}function Gc(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 pA(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 fA(e){return u`<span class="comment-text">${e||u`<em>empty</em>`}</span>`}function mA(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 gA(e){return e?u`<span class="${`triage triage-${e}`}">${e}</span>`:u`<em>none</em>`}function hA(e){return e?u`<span class="${`flag-badge${e==="flagged"?" on":""}`}">${e}</span>`:u`<em>none</em>`}function t0(e,t){return e==="color"?pA(t):e==="comment"?fA(t):e==="fix"?mA(t):e==="triage"?gA(t):e==="flagged"?hA(t):u`${String(t)}`}function bA(e,t){let n=e?.file?e.line?`${e.file}:${e.line}`:e.file:"";return u`<div class="card-head">${Uc(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 r0={title:"Triage conflicts",intro:"disagree with your local triage on",trailingNote:"",applyButton:"Apply",importedSideLabel:"Apply imported"},n0={color:0,comment:1,fix:2,triage:3,flagged:4},yA={color:"Color",comment:"Comment",fix:"Fix",triage:"Triage state",flagged:"Flag"},Vm=class extends N{static styles=[...N.styles,D(Hc),D(Zk)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...r0},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)=>(n0[f.property]??99)-(n0[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}">${bA(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">${yA[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">${t0(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">${t0(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",Vm);function Kc(e,t,n={}){return new Promise((r,o)=>{let s=document.createElement("triage-conflict-dialog");s.conflicts=e,s.findingLookup=t,s.labels={...r0,...n},s.addEventListener("resolve",i=>{s.remove(),r(i.detail)}),s.addEventListener("modal-conflict",i=>{s.remove(),o(Al(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
7
|
`;var Ee=class extends N{static styles=[...N.styles,D(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 jm=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",jm);function o0(e){return re("local-triage-import-dialog",e)}var s0=`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
8
|
`;var Gm=class extends Ee{static styles=[...Ee.styles,D(s0)];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",Gm);function i0(e){return re("local-content-import-dialog",e)}var a0=`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
|
|
10
|
-
`)}`:e==="flagged"?t?"Flagged":"Not flagged":e==="triage"?
|
|
11
|
-
`)[0]||i}</h4>${a.file?u`<p class="location">${a.file}${a.line?`:${a.line}`:""}</p>`:g}<p class="finding-id"><code>${i}</code> · ${a.reports.join(", ")}</p><div class="table-scroll"><table><thead><tr><th scope="col">Field</th><th scope="col">Local</th><th scope="col">Managed</th></tr></thead><tbody>${l.map(p=>u`<tr class="${p.kind}"><th scope="row">${xA[p.property]}<span class="difference-kind">${l0[p.kind]}</span></th><td class="${p.kind==="managed-only"?"":"highlight"}">${c0(p.property,p.local)}</td><td class="${p.kind==="local-only"?"":"highlight"}">${c0(p.property,p.managed)}</td></tr>`)}</tbody></table></div></section>`)} ${r.length===0?u`<p class="empty">${t>0?"No triage differences in the shared findings.":n===0?"No findings were found in the readable local reports.":"No findings are present in both local and managed reports."}</p>`:g}</div><footer class="nwd-actions"><span class="nwd-spacer"></span><button type="button" data-role="cancel" @click="${this._onCancel}">Close</button></footer></dialog>`}};customElements.define("triage-comparison-dialog",Km);var d0=e=>re("triage-comparison-dialog",e);var CA={get state(){return c},listWorkspaces:Y,addReportToWorkspace:so,addBundleToWorkspace:io,onReportMembershipChanged:zi,onBundleMembershipChanged:Rf,onWorkspaceDeleted:Pi,onWorkspacePrivateKeyChanged:_f,analyzeContent:Ve,setCount:Ue,gunzipBytes:cp,listBundles:Je,listFiles:ce,readBundle:_n,readFileBytes:Cn,saveBundle:Zr,saveFileBytes:Up,onFileMutated:mt,async saveTriage(){return await ls(),xe()},getSecureItem:ve,setSecureItem:Me,removeSecureItem:nr,onSecureStorageHydrated:Yt};function u0(e){e.installSyncHost(CA),Xf(()=>e.triageSync.notify())}var X=null,co=null;function g0(){try{return ve("deepview.sync.userEnabled")!=="0"}catch{return!0}}var h0=!1;function Xc(e){h0=!!e}function Yc(){if(h0||c.serverMode!=="e2e")return!0;try{return pt()?.mode==="managed"}catch{return!1}}function ra(){return co||(Yc()&&!X?Promise.resolve(null):(co=(async()=>{let e="./client-sync.js";try{let t=await import(e);return u0(t),X=t,_A(),t}catch(t){throw co=null,t}})(),co))}var b0=[];function oa(e){X?e(X):b0.push(e)}function _A(){let e=b0.splice(0);for(let t of e)try{t(X)}catch(n){console.warn("client-sync: deferred apply failed:",n)}}function 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 qm(e,t){return X?X.isInRemote(e,t):!1}function y0(e,t){return X?X.isBundleInRemote(e,t):!1}var RA="deepview.objstore-presence.";function w0(e){try{let t=localStorage.getItem(RA+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function gs(e,t){if(X&&X.isInRemote(e,t))return!0;let n=w0(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function Ym(e,t){if(X&&X.isBundleInRemote(e,t))return!0;let n=w0(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function Xm(e){return X?X.remoteCount(e):0}function v0(e){return X?X.differingReports(e):[]}function mW(e){return uo(e,(t,n)=>t.onAutoDownloaded(n))}function gW(e){return uo(e,(t,n)=>t.onBundleAutoDownloaded(n))}function hW(e){return uo(e,(t,n)=>t.onChange(n))}var p0=null,f0=null,m0=null,qc=[];function bW(e){if(X){X.setRedraw(e);return}p0=e,oa(t=>{p0===e&&t.setRedraw(e)})}function yW(e){if(X){X.setAuthenticationResolver(e);return}f0=e,oa(t=>{f0===e&&t.setAuthenticationResolver(e)})}function wW(e){if(X){X.setHydrationConflictResolver(e);return}m0=e,oa(t=>{m0===e&&t.setHydrationConflictResolver(e)})}async function on(e,t){if(Yc()||!g0()&&!X)return;let n=await ra();if(!(!n||Yc()))return n[e](...t)}function $0(...e){return on("downloadFileFromRemote",e)}function k0(...e){return on("fetchBundleFromRemote",e)}function Jc(...e){return on("putFile",e)}function x0(...e){return on("holdLocalChangeChecks",e)}function S0(...e){return on("putBundleToRemote",e)}function Zc(...e){return on("deleteFromRemote",e)}function Qc(...e){return on("deleteBundleFromRemote",e)}function sa(...e){return on("openWorkspace",e)}async function Jm(...e){return(X??(co?await co:null))?.closeWorkspace(...e)}function C0(...e){return on("recheckRemoteStorage",e)}function _0(...e){return on("resolveReportDifference",e)}function In(e,t){if(X)return X.triageSync[e](...t);oa(n=>{n.triageSync[e](...t)})}var G={get status(){return X?X.triageSync.status:"off"},get openSessions(){return X?X.triageSync.openSessions:[]},get persistenceDegraded(){return X?X.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return X?X.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return Yc()?Promise.resolve(null):ra().then(t=>{t.triageSync.setEnabled(!0);let n=qc;qc=[];for(let r of n)try{t.openWorkspace(r)}catch(o){console.warn(`client-sync: openWorkspace(${r}) failed during re-enable:`,o)}return null}).catch(t=>(console.warn("client-sync: setEnabled load failed:",t),null));if(X){qc=X.openWorkspaceIds();for(let t of qc)try{X.closeWorkspace(t)}catch(n){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,n)}X.triageSync.setEnabled(!1);return}In("setEnabled",[e])},isEnabled(){return X?X.triageSync.isEnabled():g0()},openSession(e){In("openSession",[e])},closeSession(e){In("closeSession",[e])},refreshSession(e){In("refreshSession",[e])},dismissError(e){In("dismissError",[e])},setForcedOff(e){In("setForcedOff",[e])},setProtocolLocked(e){In("setProtocolLocked",[e])},setServerUrl(e){In("setServerUrl",[e])},getServerUrl(){return X?X.triageSync.getServerUrl():null},notify(){In("notify",[])},onStatusChange(e){return 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 ed(){let e=new Set;if(c.currentWorkspace||!qf())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 hs="\0",Qm="",bs="";function ia(e){return cl(e.model)||null}function eg(e){let t=cr();if(t.filterAnalyzer){let n=e._analyzer??null,r=t.filterAnalyzer===hs?null:t.filterAnalyzer;if(n!==r)return!1}if(t.filterModel){let n=ia(e),r=t.filterModel===bs?null:t.filterModel;if(n!==r)return!1}return!0}function tg(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 M0(e){let t=new Set;for(let n of e)for(let r of n)t.add(tg(r));return t}function td(){c.filterSeverities=new Set,c.filterColors=new Set,c.filterSources=new Set,c.filterAnalyzer="",c.filterModel="",c.filterRepo="",c.filterConfMin=0,c.filterConfMax=10,c.filterInclude="",c.filterIncludeNegate=!1,c.filterComment="",c.filterFix="",c.filterFlagged="",c.filterDuplicates="",c.filterCrossContext="",c.filterAppStacked="",c.filterSecurity="",c.filterRevalidate="",c.filterPartial="",c.sortBy="severity"}var TA=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];function MW(){let e={};for(let t of TA){let n=c[t];e[t]=n instanceof Set?new Set(n):n}return e}var ng=null;function IW(e){ng=e}function AW(){ng=null}function cr(){return ng??c}function I0(e){return Yr(e)||(e._source&&!e._sourcePass?"revalidation":"")}function A0(e){let t=Cp("confirmed","");return e.some(n=>t.includes(I0(n)))}function MA(e,t){let n=e.map(Ct).filter(r=>r.length>0);return Ev(n,t,Av(e,Ct,Yr),Yr)?"confirmed":""}function IA(e,t=Ct){return Iv(e,t)}function AA(e,{tabs:t=Ct,kindOf:n=Yr,severityMode:r=c.severityMode}={}){return Pl(e,{tabs:t,kindOf:n,severityMode:r})}function nd(e){return c.showRevalidation===!1||c.upstreamOnly||po()?!1:AA(e)}function aa(e,{resetSort:t=!0}={}){c.filterConfMin=IA(e),c.filterConfMax=10,c.filterRevalidate=MA(e,c.filterConfMin),c.filterPartial="",t&&(c.sortBy=rg(e)?"priority-desc":"severity")}function rg(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(E0(t)===void 0)return!1;let n=t.filter(o=>o.isApp);if(n.length===0)return!0;let r=t.some(o=>o.priority!==void 0);return n.some(o=>o.priority!==void 0||!r&&Xr(o))})}function E0(e){let t=e.find(n=>n.priority!==void 0);return t?t.priority:e.some(Xr)?0:void 0}function F0(e){let t=cr();if(t.filterSources.size===1){let n=t.filterSources.has("own");if(n&&Zn(e.file)||!n&&!Zn(e.file))return!1}if(t.filterRevalidate){let n=Cp(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(I0(e)))return!1}if(!t.filterRevalidate){let n=Lv(e)?0:_p(e);if(n===void 0){if(t.filterConfMin>0)return!1}else if(n<t.filterConfMin||t.filterConfMax<10&&n>t.filterConfMax)return!1}return!0}function EA(e){if(!F0(e))return!1;let t=cr(),n=t.filterInclude.toLowerCase();if(t.filterSeverities.size>0&&!t.filterSeverities.has(de(e,c.severityMode)))return!1;if(t.filterColors.size>0){let r=he(e)?.color??"none";if(!t.filterColors.has(r))return!1}if(!eg(e))return!1;if(t.filterRepo){let r=tg(e),o=t.filterRepo===Qm?null:t.filterRepo;if(r!==o)return!1}if(n){let r=he(e),o=Nv(e).includes(n)||(r?.comment??"").toLowerCase().includes(n)||(r?.fix??"").toLowerCase().includes(n)||n.length>=6&&n.split(/\s+/u).some(s=>s.length>=6&&e.id?.toLowerCase().includes(s));return t.filterIncludeNegate?!o:o}return!0}function FA(e){let t=cr();if(!t.filterComment&&!t.filterFix&&!t.filterFlagged)return!0;let n=r=>e.some(o=>r(he(o)));if(t.filterComment){let r=n(o=>!!o?.comment);if(t.filterComment==="with"?!r:r)return!1}if(t.filterFix){let r=e.some(o=>!!(he(o)?.fix||tn(o)));if(t.filterFix==="with"?!r:r)return!1}if(t.filterFlagged){let r=n(o=>o?.flagged===!0);if(t.filterFlagged==="with"?!r:r)return!1}return!0}function LA(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!or(t))return t.name;let n=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(n)?.[1]??null}function L0(){return c.showRevalidation!==!1&&!c.upstreamOnly}function og(e){if(L0())return!1;let t=Ct(e);if(t.length<2)return!1;let n=new Set,r=new Set;for(let o of t){let s=tg(o);s&&n.add(s);let i=LA(o);i&&r.add(i)}return n.size>1||r.size>1}function sg(e){if(!L0()||Ct(e).length===0)return!1;let n=e.filter(r=>r.isApp);return n.length>0&&n.length>1}function Zm(e){return e.some(t=>t.isSecurity===!0)}function O0(e){return e.some(Zm)&&e.some(t=>!Zm(t))}function N0(e){return e.filter(t=>t.some(F0)).map(Ct)}function rd(e){let t=!c.currentWorkspace&&cr().filterDuplicates,n=t?ed():null,r=cr().filterCrossContext,o=cr().filterAppStacked,s=cr().filterSecurity;return e.filter(i=>i.some(EA)&&FA(i)&&(!t||t==="with"===i.some(a=>n.has(j(a))))&&(!r||r==="with"===og(i))&&(!o||o==="with"===sg(i))&&(!s||s==="with"===Zm(i)))}function R0(e,t){let n=t==="desc"?-1:11;return(r,o)=>{let s=r[e]??n,i=o[e]??n;return(t==="desc"?i-s:s-i)||r.file.localeCompare(o.file)}}function B0(e){let t=e==="desc"?-1:11;return(n,r)=>{let o=n.confidence===void 0&&n.critical===!0,s=r.confidence===void 0&&r.critical===!0,i=n.confidence??(o?10:t),a=r.confidence??(s?10:t);return(e==="desc"?a-i:i-a)||(o===s?0:o?-1:1)||n.file.localeCompare(r.file)}}var T0=B0("desc"),OA={severity:(e,t)=>(_e[de(t,c.severityMode)]||0)-(_e[de(e,c.severityMode)]||0)||T0(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":T0,"confidence-asc":B0("asc"),"priority-desc":R0("priority","desc"),"priority-asc":R0("priority","asc")};function D0(e){let t=OA[c.sortBy];if(!t)return[...e];if(c.sortBy==="priority-desc"||c.sortBy==="priority-asc"){let n=c.sortBy==="priority-desc"?"desc":"asc",r=n==="desc"?-1:11;return e.map(o=>({p:E0(o),g:o})).toSorted((o,s)=>{let i=o.p??r,a=s.p??r;return(n==="desc"?a-i:i-a)||An(o.g).file.localeCompare(An(s.g).file)}).map(o=>o.g)}return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}function P0(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.startsWith("revalidate")&&n!=null))}function z0(e,t,n){let r=P0(t);if(!e._revalidationCopies){let o=P0(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 OW(e){let t=new Map,n=new Set(kw);for(let{reportName:r,fields:o}of e)for(let[s,i]of Object.entries(o)){if(i==null)continue;let a=s==="revalidate"?Be(o)||String(i).trim().toLowerCase():String(i).trim();if(s==="revalidate"&&!a||s==="revalidate"&&!n.has(a))continue;t.has(s)||t.set(s,new Map);let l=t.get(s);l.has(a)||l.set(a,new Set),l.get(a).add(r)}return[...t].filter(([,r])=>r.size>1).map(([r,o])=>({field:r,variants:[...o].map(([s,i])=>({value:s,reports:[...i]}))}))}var NA=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"]);function W0(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,o]of Object.entries(t)){if(r.startsWith("_")||NA.has(r)||o==null)continue;if(r==="revalidate"){let i=Be(t);if(!i)continue;let a=Be(e);a?a!==i&&(n=!0):e[r]=o;continue}let s=e[r];if(s==null){e[r]=o;continue}r.startsWith("revalidate")&&String(s).trim()!==String(o).trim()&&(n=!0)}return n}function ig(e,t,n,r){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:ai(e),reason:e.correctedSeverityReason}},e._correctedByReport[n]={severity:ai(t),reason:t.correctedSeverityReason});let o=z0(e,t,n);(W0(e,t)||r.has(e.id))&&r.set(e.id,{finding:e,copies:o})}function la(e,t=null){let n=t??e.filter(d=>d.isApp),r=e.filter(d=>!d.isApp);if(n.length===0||r.length===0)return[e];if(t&&e.some(d=>d.isApp))return[e];if(r.some(d=>typeof d.id!="string"||!d.id))return[e];let o=new Set(r.map(d=>d.id)),s=new Map,i=new Set;for(let d of n){let f=d.revalidateInputs===void 0?[]:d.revalidateInputs;if(!Array.isArray(f))return[e];for(let m of f){if(!o.has(m))return[e];i.add(m)}s.set(d,f)}if(i.size!==o.size)return[e];let a=new Map([...o].map(d=>[d,d])),l=d=>{let f=d;for(;a.get(f)!==f;)f=a.get(f);for(;a.get(d)!==f;){let m=a.get(d);a.set(d,f),d=m}return f};for(let d of s.values()){if(d.length===0)continue;let f=l(d[0]);for(let m of d)a.set(l(m),f)}let p=new Map;for(let d of e){let f=s.get(d),m=f?f.length>0?l(f[0]):d:l(d.id);p.has(m)||p.set(m,[]),p.get(m).push(d)}return p.size===1?[e]:[...p.values()]}function od(e,{showRevalidation:t=!0,upstreamOnly:n=!1,hideRuledOut:r=!1,merges:o=[]}={}){let s=[],i=new Set;for(let y=0;y<e.length;y++){let w=e[y];for(let v of w.groups){for(let $ of v)$.id&&["refuted","unreachable"].includes(Be($))&&i.add($.id);let x=n?v.filter($=>$.isUpstream&&Be($)!=="revalidation").map(H0):t?r?v.filter($=>!["refuted","unreachable"].includes(Be($))):v:v.filter($=>Be($)!=="revalidation").map(H0),k=x.length===v.length&&x.every(($,S)=>$===v[S])?v:x;k.length>0&&s.push({group:k,sourceGroup:v,reportIndex:y,reportName:w.fileName??"",hasApp:k.some($=>$.isApp)})}}let a=s.map((y,w)=>w),l=s.map(y=>y.hasApp),p=y=>{let w=y;for(;a[w]!==w;)w=a[w];for(;a[y]!==w;){let v=a[y];a[y]=w,y=v}return w},d=(y,w)=>{y=p(y),w=p(w),y!==w&&(a[w]=y,l[y]||=l[w])},f=new Map;for(let y=0;y<s.length;y++)for(let w of s[y].group)w.id&&(f.has(w.id)||f.set(w.id,[]),f.get(w.id).push({index:y,app:w.isApp}));for(let y of f.values()){let w=new Map,v=y.find(x=>x.app);for(let{index:x}of y){v&&d(v.index,x);let k=s[x].reportIndex;w.has(k)?d(w.get(k),x):w.set(k,x)}}for(let y of f.values()){let w=null;for(let{index:v}of y)l[p(v)]||(w===null?w=v:d(w,v))}for(let y of o){let w=null;for(let v of y)for(let{index:x}of f.get(v)??[])w===null?w=x:d(w,x)}let m=new Map;for(let y=0;y<s.length;y++){let w=p(y);m.has(w)||m.set(w,[]),m.get(w).push(s[y])}let h=new Map,b=[];for(let y of m.values()){let w=y[0].group,v=w.map(R=>R.id).filter(Boolean);if(y.length===1&&new Set(v).size===v.length&&o.length===0){let R=e.length>1&&w.find(L=>L.isApp);if(R){let L=[...w];L.workspaceKey=R.id??String(R._id),b.push(...ag(y,L,t,n))}else b.push(...ag(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))ig(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(...ag(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 ag(e,t,n,r){if(n)return[t];if(r){let s=e.flatMap(d=>d.sourceGroup),i=la(s);if(i.length===1)return[t];let a=[],l=new Set;for(let d of i){let f=new Set(d.filter(h=>!h.isApp&&h.id).map(h=>h.id)),m=t.filter(h=>f.has(h.id));if(m.length>0){a.push(m);for(let h of m)l.add(h.id)}}let p=new Set(t.map(d=>d.id).filter(Boolean));return l.size===p.size?a:[t]}let o=e.flatMap(s=>s.sourceGroup.filter(i=>i.isApp));return la(t,o)}function H0(e){let t=Object.keys(e).filter(r=>r.startsWith("revalidate")||r==="_revalidationCopies");if(t.length===0)return e;let n={...e};for(let r of t)delete n[r];return n}var fo=null,lg=0;function ys(){return c.currentView==="links"&&fo?.owner===c.currentLinks?fo:null}function U0(){lg++,fo=null}async function qW(e,t,n,r){if(c.currentView!=="links"||!c.currentLinks)return;let o=rt(c.currentLinks),s=++lg;fo={owner:o,id:e,reportName:t,group:null,error:""},c.focusCodeStack=[],c.focusCodeAt=0;let i=()=>s===lg&&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:De(f)??Ze(t),_repoDirectory:Ft(f?.repo),_bundleHashes:f.bundleHashes??[],_source:h.source??f.source??null};return Po(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=jn(b,b._source)),b});await Promise.all([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 sd(e,t,n,r=n){let o=e.map((f,m)=>m),s=f=>{for(;o[f]!==f;)o[f]=o[o[f]],f=o[f];return f},i=e.map(n),a=new Map;for(let f=0;f<i.length;f++)for(let m of i[f])m.id&&(a.has(m.id)||a.set(m.id,[]),a.get(m.id).push(f));for(let[f,m]of a)for(let h of t(f))if(h!==f)for(let b of m)for(let y of a.get(h)??[]){let w=s(b),v=s(y);w!==v&&(o[v]=w)}let l=new Map;for(let f=0;f<e.length;f++){let m=s(f);l.has(m)||l.set(m,[]),l.get(m).push(f)}if(l.size===e.length)return e;let p=f=>f.id??String(f._id),d=[...l.values()].map(f=>{if(f.length===1)return e[f[0]];let m=new Map;for(let w of f)for(let v of r(e[w]))m.has(p(v))||m.set(p(v),v);let h=new Map;for(let w of f)for(let v of e[w])h.has(p(v))||h.set(p(v),m.get(p(v))??v);let b=[...h.values()],y=e[f[0]];return b.workspaceKey=y.workspaceKey??p(y[0]),b.linkedTabs=[...m.values()],b});return Object.defineProperty(d,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),d}function ie(e){return e.workspaceKey??j(e[0])}function id(e){return Array.isArray(e)?e:[e]}function po(){return c.revalidationDetailed===!0}function BA(e){return e?._reportName??""}var V0=null,j0=!0;function DA(){let e=c.reports;return!Array.isArray(e)||e.length===0?!0:(e!==V0&&(V0=e,j0=zl(e)),j0)}function dr(e){return!e.isUpstream||c.showRevalidation===!1||c.upstreamOnly===!0||!DA()}function PA(){let e=c.managedSession;return _()&&(e?.publicShare===!0||!Yn(e?.role,"triage"))}function _t(e){return dr(e)&&!PA()}function he(e){if(!dr(e))return;let t=c.triage.get(j(e)),n=t?.triage==="ignored"&&ct(e,qo())?{...t,triage:void 0}:t;if(!_())return n;let r=c.managedComments?.get(e.id)??[];return r.length===0&&!n?.comment?n:{...n,comment:r.map(o=>o.authorLogin?`${o.authorLogin}: ${o.body}`:o.body).join(`
|
|
9
|
+
`;var kA={triage:"Triage state",color:"Color",fix:"Fix",flagged:"Flag",comment:"Comments",ignoredReports:"Per-report ignores"},l0={"managed-only":"Only managed","local-only":"Only local",mismatch:"Different"},xA={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"};function c0(e,t){return t===void 0||Array.isArray(t)&&t.length===0?u`<em class="unset">Not set</em>`:e==="comment"?t.map(n=>u`<div class="${`comment${n.different?" changed":""}`}">${n.text}</div>`):e==="ignoredReports"?u`${t.join(`
|
|
10
|
+
`)}`:e==="flagged"?t?"Flagged":"Not flagged":e==="triage"?xA[t]??t:t}var Km=class extends Ee{static styles=[...Ee.styles,D(a0)];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(l0).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">${kA[p.property]}<span class="difference-kind">${l0[p.kind]}</span></th><td class="${p.kind==="managed-only"?"":"highlight"}">${c0(p.property,p.local)}</td><td class="${p.kind==="local-only"?"":"highlight"}">${c0(p.property,p.managed)}</td></tr>`)}</tbody></table></div></section>`)} ${r.length===0?u`<p class="empty">${t>0?"No triage differences in the shared findings.":n===0?"No findings were found in the readable local reports.":"No findings are present in both local and managed reports."}</p>`:g}</div><footer class="nwd-actions"><span class="nwd-spacer"></span><button type="button" data-role="cancel" @click="${this._onCancel}">Close</button></footer></dialog>`}};customElements.define("triage-comparison-dialog",Km);var d0=e=>re("triage-comparison-dialog",e);var SA={get state(){return c},listWorkspaces:Y,addReportToWorkspace:so,addBundleToWorkspace:io,onReportMembershipChanged:zi,onBundleMembershipChanged:Rf,onWorkspaceDeleted:Pi,onWorkspacePrivateKeyChanged:_f,analyzeContent:Ve,setCount:Ue,gunzipBytes:cp,listBundles:Je,listFiles:ce,readBundle:_n,readFileBytes:Cn,saveBundle:Zr,saveFileBytes:Up,onFileMutated:mt,async saveTriage(){return await ls(),xe()},getSecureItem:ve,setSecureItem:Me,removeSecureItem:nr,onSecureStorageHydrated:Yt};function u0(e){e.installSyncHost(SA),Xf(()=>e.triageSync.notify())}var X=null,co=null;function g0(){try{return ve("deepview.sync.userEnabled")!=="0"}catch{return!0}}var h0=!1;function Xc(e){h0=!!e}function Yc(){if(h0||c.serverMode!=="e2e")return!0;try{return pt()?.mode==="managed"}catch{return!1}}function ra(){return co||(Yc()&&!X?Promise.resolve(null):(co=(async()=>{let e="./client-sync.js";try{let t=await import(e);return u0(t),X=t,CA(),t}catch(t){throw co=null,t}})(),co))}var b0=[];function oa(e){X?e(X):b0.push(e)}function CA(){let e=b0.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 qm(e,t){return X?X.isInRemote(e,t):!1}function y0(e,t){return X?X.isBundleInRemote(e,t):!1}var _A="deepview.objstore-presence.";function w0(e){try{let t=localStorage.getItem(_A+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function gs(e,t){if(X&&X.isInRemote(e,t))return!0;let n=w0(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function Ym(e,t){if(X&&X.isBundleInRemote(e,t))return!0;let n=w0(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function Xm(e){return X?X.remoteCount(e):0}function v0(e){return X?X.differingReports(e):[]}function mW(e){return uo(e,(t,n)=>t.onAutoDownloaded(n))}function gW(e){return uo(e,(t,n)=>t.onBundleAutoDownloaded(n))}function hW(e){return uo(e,(t,n)=>t.onChange(n))}var p0=null,f0=null,m0=null,qc=[];function bW(e){if(X){X.setRedraw(e);return}p0=e,oa(t=>{p0===e&&t.setRedraw(e)})}function yW(e){if(X){X.setAuthenticationResolver(e);return}f0=e,oa(t=>{f0===e&&t.setAuthenticationResolver(e)})}function wW(e){if(X){X.setHydrationConflictResolver(e);return}m0=e,oa(t=>{m0===e&&t.setHydrationConflictResolver(e)})}async function on(e,t){if(Yc()||!g0()&&!X)return;let n=await ra();if(!(!n||Yc()))return n[e](...t)}function $0(...e){return on("downloadFileFromRemote",e)}function k0(...e){return on("fetchBundleFromRemote",e)}function Jc(...e){return on("putFile",e)}function x0(...e){return on("holdLocalChangeChecks",e)}function S0(...e){return on("putBundleToRemote",e)}function Zc(...e){return on("deleteFromRemote",e)}function Qc(...e){return on("deleteBundleFromRemote",e)}function sa(...e){return on("openWorkspace",e)}async function Jm(...e){return(X??(co?await co:null))?.closeWorkspace(...e)}function C0(...e){return on("recheckRemoteStorage",e)}function _0(...e){return on("resolveReportDifference",e)}function In(e,t){if(X)return X.triageSync[e](...t);oa(n=>{n.triageSync[e](...t)})}var G={get status(){return X?X.triageSync.status:"off"},get openSessions(){return X?X.triageSync.openSessions:[]},get persistenceDegraded(){return X?X.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return X?X.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return Yc()?Promise.resolve(null):ra().then(t=>{t.triageSync.setEnabled(!0);let n=qc;qc=[];for(let r of n)try{t.openWorkspace(r)}catch(o){console.warn(`client-sync: openWorkspace(${r}) failed during re-enable:`,o)}return null}).catch(t=>(console.warn("client-sync: setEnabled load failed:",t),null));if(X){qc=X.openWorkspaceIds();for(let t of qc)try{X.closeWorkspace(t)}catch(n){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,n)}X.triageSync.setEnabled(!1);return}In("setEnabled",[e])},isEnabled(){return X?X.triageSync.isEnabled():g0()},openSession(e){In("openSession",[e])},closeSession(e){In("closeSession",[e])},refreshSession(e){In("refreshSession",[e])},dismissError(e){In("dismissError",[e])},setForcedOff(e){In("setForcedOff",[e])},setProtocolLocked(e){In("setProtocolLocked",[e])},setServerUrl(e){In("setServerUrl",[e])},getServerUrl(){return X?X.triageSync.getServerUrl():null},notify(){In("notify",[])},onStatusChange(e){return 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 ed(){let e=new Set;if(c.currentWorkspace||!qf())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 hs="\0",Qm="",bs="";function ia(e){return cl(e.model)||null}function eg(e){let t=cr();if(t.filterAnalyzer){let n=e._analyzer??null,r=t.filterAnalyzer===hs?null:t.filterAnalyzer;if(n!==r)return!1}if(t.filterModel){let n=ia(e),r=t.filterModel===bs?null:t.filterModel;if(n!==r)return!1}return!0}function tg(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 M0(e){let t=new Set;for(let n of e)for(let r of n)t.add(tg(r));return t}function td(){c.filterSeverities=new Set,c.filterColors=new Set,c.filterSources=new Set,c.filterAnalyzer="",c.filterModel="",c.filterRepo="",c.filterConfMin=0,c.filterConfMax=10,c.filterInclude="",c.filterIncludeNegate=!1,c.filterComment="",c.filterFix="",c.filterFlagged="",c.filterDuplicates="",c.filterCrossContext="",c.filterAppStacked="",c.filterSecurity="",c.filterRevalidate="",c.filterPartial="",c.sortBy="severity"}var RA=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];function MW(){let e={};for(let t of RA){let n=c[t];e[t]=n instanceof Set?new Set(n):n}return e}var ng=null;function IW(e){ng=e}function AW(){ng=null}function cr(){return ng??c}function I0(e){return Yr(e)||(e._source&&!e._sourcePass?"revalidation":"")}function A0(e){let t=Cp("confirmed","");return e.some(n=>t.includes(I0(n)))}function TA(e,t){let n=e.map(Ct).filter(r=>r.length>0);return Ev(n,t,Av(e,Ct,Yr),Yr)?"confirmed":""}function MA(e,t=Ct){return Iv(e,t)}function IA(e,{tabs:t=Ct,kindOf:n=Yr,severityMode:r=c.severityMode}={}){return Pl(e,{tabs:t,kindOf:n,severityMode:r})}function nd(e){return c.showRevalidation===!1||c.upstreamOnly||po()?!1:IA(e)}function aa(e,{resetSort:t=!0}={}){c.filterConfMin=MA(e),c.filterConfMax=10,c.filterRevalidate=TA(e,c.filterConfMin),c.filterPartial="",t&&(c.sortBy=rg(e)?"priority-desc":"severity")}function rg(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(E0(t)===void 0)return!1;let n=t.filter(o=>o.isApp);if(n.length===0)return!0;let r=t.some(o=>o.priority!==void 0);return n.some(o=>o.priority!==void 0||!r&&Xr(o))})}function E0(e){let t=e.find(n=>n.priority!==void 0);return t?t.priority:e.some(Xr)?0:void 0}function F0(e){let t=cr();if(t.filterSources.size===1){let n=t.filterSources.has("own");if(n&&Zn(e.file)||!n&&!Zn(e.file))return!1}if(t.filterRevalidate){let n=Cp(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(I0(e)))return!1}if(!t.filterRevalidate){let n=Lv(e)?0:_p(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 AA(e){if(!F0(e))return!1;let t=cr(),n=t.filterInclude.toLowerCase();if(t.filterSeverities.size>0&&!t.filterSeverities.has(de(e,c.severityMode)))return!1;if(t.filterColors.size>0){let r=he(e)?.color??"none";if(!t.filterColors.has(r))return!1}if(!eg(e))return!1;if(t.filterRepo){let r=tg(e),o=t.filterRepo===Qm?null:t.filterRepo;if(r!==o)return!1}if(n){let r=he(e),o=Nv(e).includes(n)||(r?.comment??"").toLowerCase().includes(n)||(r?.fix??"").toLowerCase().includes(n)||n.length>=6&&n.split(/\s+/u).some(s=>s.length>=6&&e.id?.toLowerCase().includes(s));return t.filterIncludeNegate?!o:o}return!0}function EA(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 FA(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!or(t))return t.name;let n=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(n)?.[1]??null}function L0(){return c.showRevalidation!==!1&&!c.upstreamOnly}function og(e){if(L0())return!1;let t=Ct(e);if(t.length<2)return!1;let n=new Set,r=new Set;for(let o of t){let s=tg(o);s&&n.add(s);let i=FA(o);i&&r.add(i)}return n.size>1||r.size>1}function sg(e){if(!L0()||Ct(e).length===0)return!1;let n=e.filter(r=>r.isApp);return n.length>0&&n.length>1}function Zm(e){return e.some(t=>t.isSecurity===!0)}function O0(e){return e.some(Zm)&&e.some(t=>!Zm(t))}function N0(e){return e.filter(t=>t.some(F0)).map(Ct)}function rd(e){let t=!c.currentWorkspace&&cr().filterDuplicates,n=t?ed():null,r=cr().filterCrossContext,o=cr().filterAppStacked,s=cr().filterSecurity;return e.filter(i=>i.some(AA)&&EA(i)&&(!t||t==="with"===i.some(a=>n.has(j(a))))&&(!r||r==="with"===og(i))&&(!o||o==="with"===sg(i))&&(!s||s==="with"===Zm(i)))}function R0(e,t){let n=t==="desc"?-1:11;return(r,o)=>{let s=r[e]??n,i=o[e]??n;return(t==="desc"?i-s:s-i)||r.file.localeCompare(o.file)}}function B0(e){let t=e==="desc"?-1:11;return(n,r)=>{let o=n.confidence===void 0&&n.critical===!0,s=r.confidence===void 0&&r.critical===!0,i=n.confidence??(o?10:t),a=r.confidence??(s?10:t);return(e==="desc"?a-i:i-a)||(o===s?0:o?-1:1)||n.file.localeCompare(r.file)}}var T0=B0("desc"),LA={severity:(e,t)=>(_e[de(t,c.severityMode)]||0)-(_e[de(e,c.severityMode)]||0)||T0(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":T0,"confidence-asc":B0("asc"),"priority-desc":R0("priority","desc"),"priority-asc":R0("priority","asc")};function D0(e){let t=LA[c.sortBy];if(!t)return[...e];if(c.sortBy==="priority-desc"||c.sortBy==="priority-asc"){let n=c.sortBy==="priority-desc"?"desc":"asc",r=n==="desc"?-1:11;return e.map(o=>({p:E0(o),g:o})).toSorted((o,s)=>{let i=o.p??r,a=s.p??r;return(n==="desc"?a-i:i-a)||An(o.g).file.localeCompare(An(s.g).file)}).map(o=>o.g)}return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}function P0(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.startsWith("revalidate")&&n!=null))}function z0(e,t,n){let r=P0(t);if(!e._revalidationCopies){let o=P0(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 OW(e){let t=new Map,n=new Set(kw);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 OA=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"]);function W0(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,o]of Object.entries(t)){if(r.startsWith("_")||OA.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 ig(e,t,n,r){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:ai(e),reason:e.correctedSeverityReason}},e._correctedByReport[n]={severity:ai(t),reason:t.correctedSeverityReason});let o=z0(e,t,n);(W0(e,t)||r.has(e.id))&&r.set(e.id,{finding:e,copies:o})}function la(e,t=null){let n=t??e.filter(d=>d.isApp),r=e.filter(d=>!d.isApp);if(n.length===0||r.length===0)return[e];if(t&&e.some(d=>d.isApp))return[e];if(r.some(d=>typeof d.id!="string"||!d.id))return[e];let o=new Set(r.map(d=>d.id)),s=new Map,i=new Set;for(let d of n){let f=d.revalidateInputs===void 0?[]:d.revalidateInputs;if(!Array.isArray(f))return[e];for(let m of f){if(!o.has(m))return[e];i.add(m)}s.set(d,f)}if(i.size!==o.size)return[e];let a=new Map([...o].map(d=>[d,d])),l=d=>{let f=d;for(;a.get(f)!==f;)f=a.get(f);for(;a.get(d)!==f;){let m=a.get(d);a.set(d,f),d=m}return f};for(let d of s.values()){if(d.length===0)continue;let f=l(d[0]);for(let m of d)a.set(l(m),f)}let p=new Map;for(let d of e){let f=s.get(d),m=f?f.length>0?l(f[0]):d:l(d.id);p.has(m)||p.set(m,[]),p.get(m).push(d)}return p.size===1?[e]:[...p.values()]}function od(e,{showRevalidation:t=!0,upstreamOnly:n=!1,hideRuledOut:r=!1,merges:o=[]}={}){let s=[],i=new Set;for(let y=0;y<e.length;y++){let w=e[y];for(let v of w.groups){for(let $ of v)$.id&&["refuted","unreachable"].includes(Be($))&&i.add($.id);let x=n?v.filter($=>$.isUpstream&&Be($)!=="revalidation").map(H0):t?r?v.filter($=>!["refuted","unreachable"].includes(Be($))):v:v.filter($=>Be($)!=="revalidation").map(H0),k=x.length===v.length&&x.every(($,S)=>$===v[S])?v:x;k.length>0&&s.push({group:k,sourceGroup:v,reportIndex:y,reportName:w.fileName??"",hasApp:k.some($=>$.isApp)})}}let a=s.map((y,w)=>w),l=s.map(y=>y.hasApp),p=y=>{let w=y;for(;a[w]!==w;)w=a[w];for(;a[y]!==w;){let v=a[y];a[y]=w,y=v}return w},d=(y,w)=>{y=p(y),w=p(w),y!==w&&(a[w]=y,l[y]||=l[w])},f=new Map;for(let y=0;y<s.length;y++)for(let w of s[y].group)w.id&&(f.has(w.id)||f.set(w.id,[]),f.get(w.id).push({index:y,app:w.isApp}));for(let y of f.values()){let w=new Map,v=y.find(x=>x.app);for(let{index:x}of y){v&&d(v.index,x);let k=s[x].reportIndex;w.has(k)?d(w.get(k),x):w.set(k,x)}}for(let y of f.values()){let w=null;for(let{index:v}of y)l[p(v)]||(w===null?w=v:d(w,v))}for(let y of o){let w=null;for(let v of y)for(let{index:x}of f.get(v)??[])w===null?w=x:d(w,x)}let m=new Map;for(let y=0;y<s.length;y++){let w=p(y);m.has(w)||m.set(w,[]),m.get(w).push(s[y])}let h=new Map,b=[];for(let y of m.values()){let w=y[0].group,v=w.map(R=>R.id).filter(Boolean);if(y.length===1&&new Set(v).size===v.length&&o.length===0){let R=e.length>1&&w.find(L=>L.isApp);if(R){let L=[...w];L.workspaceKey=R.id??String(R._id),b.push(...ag(y,L,t,n))}else b.push(...ag(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))ig(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(...ag(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 ag(e,t,n,r){if(n)return[t];if(r){let s=e.flatMap(d=>d.sourceGroup),i=la(s);if(i.length===1)return[t];let a=[],l=new Set;for(let d of i){let f=new Set(d.filter(h=>!h.isApp&&h.id).map(h=>h.id)),m=t.filter(h=>f.has(h.id));if(m.length>0){a.push(m);for(let h of m)l.add(h.id)}}let p=new Set(t.map(d=>d.id).filter(Boolean));return l.size===p.size?a:[t]}let o=e.flatMap(s=>s.sourceGroup.filter(i=>i.isApp));return la(t,o)}function H0(e){let t=Object.keys(e).filter(r=>r.startsWith("revalidate")||r==="_revalidationCopies");if(t.length===0)return e;let n={...e};for(let r of t)delete n[r];return n}var fo=null,lg=0;function ys(){return c.currentView==="links"&&fo?.owner===c.currentLinks?fo:null}function U0(){lg++,fo=null}async function qW(e,t,n,r){if(c.currentView!=="links"||!c.currentLinks)return;let o=rt(c.currentLinks),s=++lg;fo={owner:o,id:e,reportName:t,group:null,error:""},c.focusCodeStack=[],c.focusCodeAt=0;let i=()=>s===lg&&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:De(f)??Ze(t),_repoDirectory:Ft(f?.repo),_bundleHashes:f.bundleHashes??[],_source:h.source??f.source??null};return Po(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=jn(b,b._source)),b});await Promise.all([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 sd(e,t,n,r=n){let o=e.map((f,m)=>m),s=f=>{for(;o[f]!==f;)o[f]=o[o[f]],f=o[f];return f},i=e.map(n),a=new Map;for(let f=0;f<i.length;f++)for(let m of i[f])m.id&&(a.has(m.id)||a.set(m.id,[]),a.get(m.id).push(f));for(let[f,m]of a)for(let h of t(f))if(h!==f)for(let b of m)for(let y of a.get(h)??[]){let w=s(b),v=s(y);w!==v&&(o[v]=w)}let l=new Map;for(let f=0;f<e.length;f++){let m=s(f);l.has(m)||l.set(m,[]),l.get(m).push(f)}if(l.size===e.length)return e;let p=f=>f.id??String(f._id),d=[...l.values()].map(f=>{if(f.length===1)return e[f[0]];let m=new Map;for(let w of f)for(let v of r(e[w]))m.has(p(v))||m.set(p(v),v);let h=new Map;for(let w of f)for(let v of e[w])h.has(p(v))||h.set(p(v),m.get(p(v))??v);let b=[...h.values()],y=e[f[0]];return b.workspaceKey=y.workspaceKey??p(y[0]),b.linkedTabs=[...m.values()],b});return Object.defineProperty(d,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),d}function ie(e){return e.workspaceKey??j(e[0])}function id(e){return Array.isArray(e)?e:[e]}function po(){return c.revalidationDetailed===!0}function NA(e){return e?._reportName??""}var V0=null,j0=!0;function BA(){let e=c.reports;return!Array.isArray(e)||e.length===0?!0:(e!==V0&&(V0=e,j0=zl(e)),j0)}function dr(e){return!e.isUpstream||c.showRevalidation===!1||c.upstreamOnly===!0||!BA()}function DA(){let e=c.managedSession;return _()&&(e?.publicShare===!0||!Yn(e?.role,"triage"))}function _t(e){return dr(e)&&!DA()}function he(e){if(!dr(e))return;let t=c.triage.get(j(e)),n=t?.triage==="ignored"&&ct(e,qo())?{...t,triage:void 0}:t;if(!_())return n;let r=c.managedComments?.get(e.id)??[];return r.length===0&&!n?.comment?n:{...n,comment:r.map(o=>o.authorLogin?`${o.authorLogin}: ${o.body}`:o.body).join(`
|
|
12
12
|
|
|
13
|
-
`)}}function zA(e){return dr(e)&&(Te(e,c.triage.get(j(e)),qo())==="ignored"||ct(e,qo())&&Hr(c.triage,j(e),BA(e)))}function ca(e,t=he(e)){if(dr(e))return Te(e,t,qo())??(zA(e)?"ignored":void 0)}function Ct(e){return ys()?.group===e?e:e.linkedTabs?e.linkedTabs:po()?e:G0(e)}function G0(e){return e.length<=1||!e.some($i)?e:e.filter($i)}function ur(e){let t=Ct(e);return t.length<=1?t:[...t].toSorted((n,r)=>{let o=$i(n)?1:0,s=$i(r)?1:0;if(o!==s)return s-o;let i=he(n)?.color?1:0,a=he(r)?.color?1:0;if(i!==a)return a-i;let l=_e[de(n,c.severityMode)]||0,p=_e[de(r,c.severityMode)]||0;if(l!==p)return p-l;let d=n.confidence??-1;return(r.confidence??-1)-d})}function An(e){return e.length===1?e[0]:ur(e)[0]}function K0(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function WA(e){let t=he(e);return!!t?.comment||!!(t?.fix||tn(e))||t?.flagged===!0}function je(e){if(e.length===1)return e[0];let t=ur(e);if(t.length===1)return t[0];let n=c.activeTabByGroup.get(ie(e));if(n){let o=t.find(s=>j(s)===n);if(o)return o}let r=t;if(c.filterAnalyzer||c.filterModel){let o=t.filter(eg);o.length>0&&(r=o)}return r.find(WA)??r[0]}function q0(e){return e?._repoFallback||c.repoUrl||""}function En(e){return{github:q0(e),directory:e?._repoDirectory??""}}function Y0(e){for(let t of Zt().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||q0(e)||null}function ws(e){if(!Array.isArray(e))return[];let t=e.filter(n=>!n.isUpstream);return t.length===0||t.length===e.length?e:t}function Fe(e){let t=ws(e),n=0,r=!1,o,s=!1,i=!1,a,l=!1,p=null,d=!1,f=!0;for(let w of t){let v=he(w),x=ca(w,v),k=v?.color;k===void 0&&x===void 0||(n++,k!==void 0&&(s?k!==o&&(r=!0):(s=!0,o=k)),l?x!==a&&(i=!0):(l=!0,a=x),x?(p===null&&(p=x),x==="ignored"&&v?.triage!=="ignored"?f=!1:d=!0):f=!1)}let m=r||i,h=!m&&s?o:null,b=n>0&&f,y=!m&&p!==null?p:null;return{hasConflict:m,commonColor:h,anyTriage:d,allTriaged:b,commonTriage:y,allIgnored:y==="ignored"&&n===t.length,isInProgress:y==="inprogress",isFixed:y==="fixed",isInvalid:y==="invalid",isDeleted:y==="deleted",isIgnored:y==="ignored"}}function c6(e,t){if(!Array.isArray(e)||e.length<2)return!1;let n=e.filter(_t);if(n.length<2)return!1;let r=(t??"").trim();return n.every(o=>HA(o,r))}function HA(e,t){if(!_t(e))return!1;let n=(he(e)?.fix??"").trim();return n===""||n===(t??"").trim()}function d6(e,t){if(!_t(je(e)))return{targets:[],clearing:!1};let n=Fe(e);return{targets:da(e,n),clearing:t==="restore"||cg(e,n)===t}}function da(e,t=Fe(e)){let n=ws(e),r=e.linkedTabs||n!==e&&e.some(o=>o.isApp)?n:t.hasConflict?[je(e)]:n;return r.every(_t)?r:r.filter(_t)}function cg(e,t=Fe(e),n=null){return e.linkedTabs||e.some(r=>r.isApp)&&ws(e)!==e||!t.hasConflict?t.commonTriage??null:ca(n??je(e))??null}function u6(e){let t=ws(e);if(t.length<2)return!1;let r=Fe(e).commonTriage;if(!r||r==="ignored"&&!t.some(s=>he(s)?.triage==="ignored"))return!1;let o=!1;for(let s of t){if(!_t(s))continue;let i=j(s),a=c.triage.get(i);ca(s,a)!==r&&(r==="ignored"&&ct(s,qo())||r!=="ignored"&&a?.ignoredReports?.length||ae(c.triage,i,{triage:r})&&(o=!0))}return o}var ht=null;function pr(){ht=null}function ad(e,t=!1,n=!1){let r=c.reports,o=c.workspaceMerges,s=_();(!ht||ht.reports.length!==r.length||ht.reports.some((a,l)=>a!==r[l])||ht.merges!==o||ht.mergeCount!==o.length||ht.securityLinksTick!==c.linksTick||ht.findingIndexTick!==c.findingIndexTick||ht.managed!==s)&&(Gn(r.flatMap(a=>a.groups??[]),{linkedIds:gt,knownRows:Qt}),ht={reports:[...r],merges:o,mergeCount:o.length,managed:s,securityLinksTick:c.linksTick,findingIndexTick:c.findingIndexTick});let i=t?"upstream":e?n?"workspace-app":"app":"code";return ht[i]||(ht[i]=od(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:o})),ht[i]}function X0(){return ad(c.showRevalidation!==!1).groups}function dg(){return ad(!0).groups}function J0(){return ad(!0,!1,!!c.currentWorkspace).conflicts}function fr(){let e=ad(c.showRevalidation!==!1,c.upstreamOnly===!0,!!c.currentWorkspace),t=e.groups;if(c.showRevalidation===!1||c.upstreamOnly)return t;if(c.currentWorkspace){let n=po();return(!e.linkedGroups||e.linksTick!==c.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=sd(t,gt,G0,Ct),e.linksTick=c.linksTick,e.linkedDetailed=n),e.linkedGroups}return 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 p6(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 dg())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 f6(e){let t=ys()?.group;if(t&&ie(t)===e)return t;for(let n of fr())if(ie(n)===e)return n;return null}var ld=class extends Et{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Rn(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,n=Rn(r=>{if(!r){n(),this._dispose===n&&(this._dispose=null),this.updateComplete.then(()=>this.requestUpdate());return}t=this._render()});return this._dispose=n,t}),this._disposers.push(()=>this._dispose&&this._dispose())}disconnectedCallback(){for(super.disconnectedCallback();this._disposers.length>0;)this._disposers.pop()()}};var pg=Pr;function Z0(e){return e==null?"(none)":pg[e]??e}function Q0(e){return e??"(no model)"}var ug=class extends ld{static properties={analyzers:{attribute:!1},models:{attribute:!1},groups:{attribute:!1},_open:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.analyzers=[],this.models=[],this.groups=[],this._open=!1}render(){let t=this.analyzers.length>1,n=this.models.length>1;if(!t&&!n)return g;let r=c.filterAnalyzer===""?void 0:c.filterAnalyzer===hs?null:c.filterAnalyzer,o=c.filterModel===""?void 0:c.filterModel===bs?null:c.filterModel,s=new Map,i=new Map;for(let f of this.groups){let m=new Set,h=new Set;for(let b of f){let y=b._analyzer??null,w=ia(b);(o===void 0||w===o)&&m.add(y),(r===void 0||y===r)&&h.add(w)}for(let b of m)s.set(b,(s.get(b)??0)+1);for(let b of h)i.set(b,(i.get(b)??0)+1)}let a=r===void 0?null:Z0(r),l=o===void 0?null:Q0(o),p=a!=null&&l!=null?`${a} \xB7 ${l}`:a??l??(t?"All analyzers":"All models"),d=a!=null||l!=null;return u`<button type="button" class="${q({"analyzer-btn":!0,active:d})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${p}`}"><span class="analyzer-btn-label">${p}</span> <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="analyzer-select-menu" class="analyzer-menu" @beforetoggle="${this._onToggle}">${t?this._column({dim:"analyzer",heading:"Analyzer",allLabel:"All analyzers",values:this.analyzers,sentinel:hs,labelOf:Z0,counts:s,current:c.filterAnalyzer}):g} ${t&&n?u`<div class="analyzer-menu-sep"></div>`:g} ${n?this._column({dim:"model",heading:"Model",allLabel:"All models",values:this.models,sentinel:bs,labelOf:Q0,counts:i,current:c.filterModel}):g}</div>`}_column({dim:t,heading:n,allLabel:r,values:o,sentinel:s,labelOf:i,counts:a,current:l}){return u`<div class="analyzer-menu-col" role="group" aria-label="${`Filter by ${t}`}"><div class="analyzer-menu-head">${n}</div><button type="button" aria-pressed="${String(l==="")}" class="${q({"analyzer-menu-item":!0,active:l===""})}" @click="${()=>this._pick(t,"")}"><span class="analyzer-menu-label">${r}</span></button> ${o.map(p=>{let d=p??s,f=a.get(p)??0,m=l===d;return u`<button type="button" aria-pressed="${String(m)}" class="${q({"analyzer-menu-item":!0,active:m,zero:f===0})}" @click="${()=>this._pick(t,d)}"><span class="analyzer-menu-label">${i(p)}</span><span class="analyzer-menu-count">${f}</span></button>`})}</div>`}_pick(t,n){let r=t==="analyzer"?c.filterAnalyzer:c.filterModel,o=n!==""&&r===n?"":n;this.dispatchEvent(new CustomEvent("analyzer-change",{detail:{analyzer:t==="analyzer"?o:c.filterAnalyzer,model:t==="model"?o:c.filterModel},bubbles:!0,composed:!0}))}_onToggle=t=>{this._open=t.newState==="open",this._open&&this._position()};_position(){let t=this.querySelector(".analyzer-menu"),n=this.querySelector(".analyzer-btn");if(!t||!n)return;let r=n.getBoundingClientRect(),o=t.offsetWidth||240,s=t.offsetHeight||200,i=4,a=r.left;a+o>window.innerWidth-4&&(a=window.innerWidth-o-4),a<4&&(a=4);let l=r.bottom+i;l+s>window.innerHeight-4&&r.top>s+i&&(l=r.top-s-i),t.style.top=`${l}px`,t.style.left=`${a}px`}updated(){this._open&&this.querySelector(".analyzer-menu")?.matches(":popover-open")&&this._position()}};customElements.define("analyzer-select",ug);var cd=["type","model","effort","exportsMode"],ex=["security","correctness"],UA=["max","xhigh","high","medium","low","minimal"],VA=["list","isolate"];function fg(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}var jA={type:e=>e==="terminal"?ex.length+2:fg(ex,e),model:e=>e==null?1:0,effort:e=>fg(UA,e),exportsMode:e=>fg(VA,e)};function GA(e,t,n){for(let r of n){let o=jA[r],s=o(e[r])-o(t[r]);if(s!==0)return s;let i=String(e[r]??"").localeCompare(String(t[r]??""));if(i!==0)return i}return 0}function tx(e,t,{typePrefix:n=!0}={}){return e==="type"?n?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function KA(e,t){let n=t.filter(s=>s!=="exportsMode"),r=[],o=new Map;for(let s of e){if(s.exportsMode==null){r.push({...s});continue}let i=n.map(p=>s[p]??"").join("|"),a=o.get(i);if(a){a.exportsMode=`${a.exportsMode}+${s.exportsMode}`;continue}let l={...s};o.set(i,l),r.push(l)}return r}function nx(e,t=cd){let n=new Map;for(let m of e){let h={};for(let y of t)h[y]=y==="model"?cl(m.model)??null:m[y]??null;let b=t.map(y=>h[y]??"").join("|");n.has(b)||n.set(b,h)}let r=[...n.values()].toSorted((m,h)=>GA(m,h,t));if(r.length===0)return[];let o={};for(let m of t)o[m]=new Set(r.map(h=>h[m])).size===1;let s=t.filter(m=>!o[m]),i=s.includes("exportsMode")?KA(r,t):r,a=i.length>2&&s.includes("type")&&s.length>1,l=["model","effort"].filter(m=>t.includes(m)&&o[m]),p=[...l,...t.filter(m=>!l.includes(m))],d=[],f=!1;for(let m of p)if(o[m]){let h=tx(m,i[0][m]);h!=null&&d.push(h)}else if(!f){for(let h of i){let b=s.map(y=>tx(y,h[y],{typePrefix:!a})).filter(y=>y!=null);b.length>0&&d.push(b.join(" \xB7 "))}f=!0}return d}function rx(e=!1,t=""){let n=new Set;return["deepview",...e?["security"]:[],...t.split(",")].map(r=>r.trim()).filter(r=>{let o=r.toLowerCase();return!r||n.has(o)?!1:(n.add(o),!0)})}var dd=null;function qA(){return dd||(dd=(async()=>await import("./prism.js"))(),dd)}var ox=1024*1024;function YA(e){return e.length<=ox&&wn(e)<=ox}var XA={__proto__:null,js:"javascript",javascript:"javascript",mjs:"javascript",cjs:"javascript",node:"javascript",jsx:"jsx",ts:"typescript",typescript:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",markup:"markup",yaml:"yaml",yml:"yaml",sh:"bash",bash:"bash",shell:"bash",zsh:"bash",console:"bash",md:"markdown",markdown:"markdown",sol:"solidity",solidity:"solidity",rs:"rust",rust:"rust",rb:"ruby",ruby:"ruby",py:"python",python:"python",py3:"python",python3:"python",php:"php",phtml:"php",java:"java",cpp:"cpp","c++":"cpp",cc:"cpp",cxx:"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp","h++":"cpp",h:"cpp",c:"c",objc:"objectivec",objectivec:"objectivec","objective-c":"objectivec",m:"objectivec",mm:"objectivec"};function sx(e){return typeof e!="string"?null:XA[e.toLowerCase()]??null}async function vs(e,t,n=null){if(!t||!YA(e))return null;try{return(await qA()).highlight(e,t,n)}catch{return null}}function B6(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 mg=new Map,gg=new Set,hg=!1;function JA(){hg||(hg=!0,queueMicrotask(()=>{hg=!1,c.codeBlockTick++,O()}))}function bg(e,t){let n=sx(t);if(!n||!e)return null;let r=`${n}\0${e}`;return mg.has(r)?mg.get(r):(gg.has(r)||(gg.add(r),(async()=>{let o=await vs(e,n);mg.set(r,o??null),gg.delete(r),JA()})()),null)}var ud=null,pd=null;function ZA(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function QA(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function eE(){if("serviceWorker"in navigator)try{let e=await navigator.serviceWorker.getRegistrations();for(let t of e){let n=t.active?.scriptURL??t.installing?.scriptURL??t.waiting?.scriptURL;n&&n.endsWith("/brotli-sw.js")&&await t.unregister()}}catch{}}var ix="./brotli-fallback.js",fd=Symbol("brotli worker unavailable"),sn=null,yg=!1,tE=0,$s=new Map;function nE(){return pd||(pd=(async()=>await import(ix))(),pd)}function wg(){yg=!0,sn&&(sn.terminate(),sn=null);let e=[...$s.values()];$s.clear();for(let t of e)t.resolve(fd)}function rE(e){let{id:t,bytes:n,error:r}=e.data??{},o=$s.get(t);o&&($s.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function oE(){if(sn)return sn;if(yg||typeof Worker>"u")return null;try{sn=new Worker(new URL(ix,import.meta.url),{type:"module"})}catch{return yg=!0,null}return sn.addEventListener("message",rE),sn.addEventListener("error",wg),sn.addEventListener("messageerror",wg),sn}function sE(e){let t=oE();return t?new Promise((n,r)=>{let o=++tE;$s.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{$s.delete(o),wg(),n(fd)}}):Promise.resolve(fd)}async function iE(){await eE();let e=ZA();return e?{kind:"native",format:e}:{kind:"fallback"}}function ax(){return ud||(ud=iE(),ud)}async function lx(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await ax();if(n(),r.kind==="native")return QA(r.format,e);let o=await sE(e);return n(),o!==fd?o:(await nE()).brotliDecompress(e)}ax().catch(()=>{});var cx=0,vg=new AbortController;function me(){return cx}function Le(){return vg.signal}function Oe(){return vg.abort(),vg=new AbortController,++cx}var aE=new Map,lE=new Map,ua=new Map,md=new WeakMap;async function $g(e){try{let t=await Gp(e);return t?hi(t,e):null}catch{return null}}var mr=null;function tH(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 nH(e){mr===e&&(mr=null)}function kg(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?aE:lE,o=t.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis",s=c.bundleDetails;if(s?.integrity===e&&s.kind===o&&s.managedId===t.managedId&&!s.error&&(!n||!s.metadataOnly))return Promise.resolve(s);let i=kg(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?hp(await Yk(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 $g(e);return h?.kind===o&&!h.stale?h:go(e,t)}let[f,m]=await Promise.all([cE(e,t),$g(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||rv(f).then(b=>Kp(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 rH(e,{preserveSource:t=!1}={}){Xn(c.bundleDetailsTab,c.bundleSourceFile)&&!Xn(e,t?c.bundleSourceFile:null)&&Oe(),c.bundleDetailsTab=e,c.bundleCodeFileRequest=null,t||(c.bundleSourceFile=null,c.bundleCodeHistory=null),c.bundleSourceFindingIdx=null}async function cE(e,t){try{let n=await _n(e);if(_())throw new DOMException("Local bundle closed","AbortError");let r=t.name.toLowerCase().endsWith(".map"),o=r?"sourcemap":"stasis";try{if(r)return hp(Ur(n),{integrity:e,kind:o,size:n.byteLength});let s=Ur(await lx(n,()=>!_())),i=Xw.parse(s);return{integrity:e,kind:o,size:n.byteLength,bundle:i}}catch(s){if(s.name==="AbortError")throw s;return{integrity:e,kind:o,size:n.byteLength,error:s.message}}}catch(n){if(n.name==="AbortError")throw n;return{integrity:e,error:n.message,size:0}}}function dE(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Fi(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Tl(e);if(Fi(e.integrity,t),c.bundleDetails!==e)return;e.fileHashes=t,O()}catch{}})()}}function uE(e){if(kf(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 $g(e);if(!(!r?.json&&!r?.bundle))try{let o=await Tl(r);Fi(e,o)}catch{}})();return ua.set(e,n),n.finally(()=>{ua.get(e)===n&&ua.delete(e)}).catch(()=>{}),n}async function xg(e,t=()=>!0){let n=new Set(e);if(n.size!==0){await new Promise(r=>{let o=()=>setTimeout(r,0);typeof requestAnimationFrame=="function"?requestAnimationFrame(o):o()});for(let r of n){if(!t())return;await uE(r)}}}async function gd(e){let t=(c.bundles??[]).find(r=>r.integrity===e);if(!t)return;let n;try{n=await 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(),dE(n),t.managedId||xt().catch(()=>{}))}function Sg(e=c.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Le():void 0,n=md.get(e);if(n&&n.signal===t)return n.job;let r=(c.bundles??[]).find(s=>s.integrity===e.integrity);if(!r)return Promise.resolve(null);let o=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 md.set(e,{job:o,signal:t}),o.finally(()=>{md.get(e)?.job===o&&md.delete(e)}).catch(()=>{}),o}var hd=new WeakMap,dx=new WeakMap;function ks(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??"",r=t?.[2]??e,o=r.startsWith("/"),s=[];for(let i of r.split("/"))if(!(!i||i==="."))if(i===".."&&s.length>0&&s.at(-1)!=="..")s.pop();else{if(i===".."&&o&&s.length===0)return null;s.push(i)}return n+(o?"/":"")+s.join("/")}function ux(e){let t=new Map;for(let n of e.keys()){let r=ks(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function pE(e,t,n,r){let o=ks(n);if(o===null)return null;let s=typeof r=="string"?ks(`${r}/package.json`):null,i=o.slice(0,o.lastIndexOf("/")+1),a=dx.get(e);for(a||(a=new Map,dx.set(e,a));;){if(i.endsWith("node_modules/"))return null;let l=`${i}package.json`;if(t.has(l)){if(!a.has(l)){let d=e.get(t.get(l)),f=null;try{f=typeof d=="string"?JSON.parse(d.replace(/^\uFEFF/u,""))?.imports??null:null}catch{}a.set(l,f&&typeof f=="object"&&!Array.isArray(f)?f:null)}return{directory:i,imports:a.get(l)}}if(l===s||!i||i==="/"||i.endsWith("../")||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(i))return null;let p=i.slice(0,-1);i=p.slice(0,p.lastIndexOf("/")+1)}}function fE(e,t){if(!e)return null;if(Object.hasOwn(e,t)&&!t.includes("*"))return{value:e[t],wildcard:null};let n=null;for(let r of Object.keys(e)){let o=r.indexOf("*");if(!r.startsWith("#")||o===-1||r.indexOf("*",o+1)!==-1)continue;let s=r.slice(0,o),i=r.slice(o+1);t.length<=s.length+i.length||!t.startsWith(s)||!t.endsWith(i)||(!n||o>n.star||o===n.star&&r.length>n.pattern.length)&&(n={pattern:r,star:o,suffix:i})}return n?{value:e[n.pattern],wildcard:t.slice(n.star,t.length-n.suffix.length)}:null}function fx(e,t,n=0){return n>16?[null]:typeof e=="string"?[t===null?e:e.replaceAll("*",t)]:e&&typeof e=="object"?Object.values(e).flatMap(r=>fx(r,t,n+1)):[null]}function mE(e,t,n,r,o,s){if(typeof e!="string"||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let i=e.startsWith("./"),a=null;if(i){let f;try{f=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(f)||f.split("/").some(m=>[".","..","node_modules"].includes(m.toLowerCase())))return null;a=ks(t.directory+f)}else if(e.startsWith("../")||e.startsWith("/")||e.startsWith("#")||e.includes(":"))return null;let l=new Set([e]);if(i)for(let f of o?.keys()??[])(f.startsWith("./")||f.startsWith("../"))&&ks(s+f)===a&&l.add(f);let p=!1,d=null;for(let f of l){if(!o?.has(f))continue;let m=o.get(f);if(typeof m!="string"||!n.has(m)||p&&m!==d)return null;p=!0,d=m}return p?d:i?r.get(a)??null:null}function gE(e,t,n,r,o,s){let i=fE(e?.imports,t);if(!i)return null;let a=fx(i.value,i.wildcard),l=null;for(let p of a){let d=mE(p,e,n,r,o,s);if(!d||l&&d!==l)return null;l=d}return l}function Cg(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 Jw(e))t.has(r)&&n.set(r,new Map([...o].map(([s,i])=>[s,t.has(i)?i:null])));return n}function bd(e,t,n=null,r=e,o=null){let s=hd.get(e);s||(s=ux(e),hd.set(e,s));let i=hd.get(r);i||(i=ux(r),hd.set(r,i));let a=n?.get(t),l=t.slice(0,t.lastIndexOf("/")+1),p=n?pE(r,i,t,o?.get(t)):null;return d=>{if(typeof d!="string"||/\p{Cc}/u.test(d))return null;if(a?.has(d)){let h=a.get(d);return typeof h=="string"&&e.has(h)?h:null}if(d.startsWith("#"))return gE(p,d,e,s,a,l);if(!d.startsWith("./")&&!d.startsWith("../"))return null;let f=d.slice(d.lastIndexOf("/")+1),m=f.lastIndexOf(".");return m<=0||m===f.length-1?null:s.get(ks(l+d))??null}}var px=new WeakMap;function _g(e,t){let n=Lt(e),r=px.get(n);return r||(r={imports:Cg(e,n),packageDirs:Ot(e)},px.set(n,r)),bd(n,t,r.imports,we(e),r.packageDirs)}var gx=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u2800\u3000\p{Cf}\p{Cs}\p{Co}\p{Cn}\p{Default_Ignorable_Code_Point}]/u,yd=new RegExp(gx.source,"gu"),hE=new Map(`
|
|
13
|
+
`)}}function PA(e){return dr(e)&&(Te(e,c.triage.get(j(e)),qo())==="ignored"||ct(e,qo())&&Hr(c.triage,j(e),NA(e)))}function ca(e,t=he(e)){if(dr(e))return Te(e,t,qo())??(PA(e)?"ignored":void 0)}function Ct(e){return ys()?.group===e?e:e.linkedTabs?e.linkedTabs:po()?e:G0(e)}function G0(e){return e.length<=1||!e.some($i)?e:e.filter($i)}function ur(e){let t=Ct(e);return t.length<=1?t:[...t].toSorted((n,r)=>{let o=$i(n)?1:0,s=$i(r)?1:0;if(o!==s)return s-o;let i=he(n)?.color?1:0,a=he(r)?.color?1:0;if(i!==a)return a-i;let l=_e[de(n,c.severityMode)]||0,p=_e[de(r,c.severityMode)]||0;if(l!==p)return p-l;let d=n.confidence??-1;return(r.confidence??-1)-d})}function An(e){return e.length===1?e[0]:ur(e)[0]}function K0(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function zA(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(eg);o.length>0&&(r=o)}return r.find(zA)??r[0]}function q0(e){return e?._repoFallback||c.repoUrl||""}function En(e){return{github:q0(e),directory:e?._repoDirectory??""}}function Y0(e){for(let t of Zt().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||q0(e)||null}function ws(e){if(!Array.isArray(e))return[];let t=e.filter(n=>!n.isUpstream);return t.length===0||t.length===e.length?e:t}function Fe(e){let t=ws(e),n=0,r=!1,o,s=!1,i=!1,a,l=!1,p=null,d=!1,f=!0;for(let w of t){let v=he(w),x=ca(w,v),k=v?.color;k===void 0&&x===void 0||(n++,k!==void 0&&(s?k!==o&&(r=!0):(s=!0,o=k)),l?x!==a&&(i=!0):(l=!0,a=x),x?(p===null&&(p=x),x==="ignored"&&v?.triage!=="ignored"?f=!1:d=!0):f=!1)}let m=r||i,h=!m&&s?o:null,b=n>0&&f,y=!m&&p!==null?p:null;return{hasConflict:m,commonColor:h,anyTriage:d,allTriaged:b,commonTriage:y,allIgnored:y==="ignored"&&n===t.length,isInProgress:y==="inprogress",isFixed:y==="fixed",isInvalid:y==="invalid",isDeleted:y==="deleted",isIgnored:y==="ignored"}}function c6(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=>WA(o,r))}function WA(e,t){if(!_t(e))return!1;let n=(he(e)?.fix??"").trim();return n===""||n===(t??"").trim()}function d6(e,t){if(!_t(je(e)))return{targets:[],clearing:!1};let n=Fe(e);return{targets:da(e,n),clearing:t==="restore"||cg(e,n)===t}}function da(e,t=Fe(e)){let n=ws(e),r=e.linkedTabs||n!==e&&e.some(o=>o.isApp)?n:t.hasConflict?[je(e)]:n;return r.every(_t)?r:r.filter(_t)}function cg(e,t=Fe(e),n=null){return e.linkedTabs||e.some(r=>r.isApp)&&ws(e)!==e||!t.hasConflict?t.commonTriage??null:ca(n??je(e))??null}function u6(e){let t=ws(e);if(t.length<2)return!1;let r=Fe(e).commonTriage;if(!r||r==="ignored"&&!t.some(s=>he(s)?.triage==="ignored"))return!1;let o=!1;for(let s of t){if(!_t(s))continue;let i=j(s),a=c.triage.get(i);ca(s,a)!==r&&(r==="ignored"&&ct(s,qo())||r!=="ignored"&&a?.ignoredReports?.length||ae(c.triage,i,{triage:r})&&(o=!0))}return o}var ht=null;function pr(){ht=null}function ad(e,t=!1,n=!1){let r=c.reports,o=c.workspaceMerges,s=_();(!ht||ht.reports.length!==r.length||ht.reports.some((a,l)=>a!==r[l])||ht.merges!==o||ht.mergeCount!==o.length||ht.securityLinksTick!==c.linksTick||ht.findingIndexTick!==c.findingIndexTick||ht.managed!==s)&&(Gn(r.flatMap(a=>a.groups??[]),{linkedIds:gt,knownRows:Qt}),ht={reports:[...r],merges:o,mergeCount:o.length,managed:s,securityLinksTick:c.linksTick,findingIndexTick:c.findingIndexTick});let i=t?"upstream":e?n?"workspace-app":"app":"code";return ht[i]||(ht[i]=od(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:o})),ht[i]}function X0(){return ad(c.showRevalidation!==!1).groups}function dg(){return ad(!0).groups}function J0(){return ad(!0,!1,!!c.currentWorkspace).conflicts}function fr(){let e=ad(c.showRevalidation!==!1,c.upstreamOnly===!0,!!c.currentWorkspace),t=e.groups;if(c.showRevalidation===!1||c.upstreamOnly)return t;if(c.currentWorkspace){let n=po();return(!e.linkedGroups||e.linksTick!==c.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=sd(t,gt,G0,Ct),e.linksTick=c.linksTick,e.linkedDetailed=n),e.linkedGroups}return 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 p6(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 dg())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 f6(e){let t=ys()?.group;if(t&&ie(t)===e)return t;for(let n of fr())if(ie(n)===e)return n;return null}var ld=class extends Et{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Rn(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,n=Rn(r=>{if(!r){n(),this._dispose===n&&(this._dispose=null),this.updateComplete.then(()=>this.requestUpdate());return}t=this._render()});return this._dispose=n,t}),this._disposers.push(()=>this._dispose&&this._dispose())}disconnectedCallback(){for(super.disconnectedCallback();this._disposers.length>0;)this._disposers.pop()()}};var pg=Pr;function Z0(e){return e==null?"(none)":pg[e]??e}function Q0(e){return e??"(no model)"}var ug=class extends ld{static properties={analyzers:{attribute:!1},models:{attribute:!1},groups:{attribute:!1},_open:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.analyzers=[],this.models=[],this.groups=[],this._open=!1}render(){let t=this.analyzers.length>1,n=this.models.length>1;if(!t&&!n)return g;let r=c.filterAnalyzer===""?void 0:c.filterAnalyzer===hs?null:c.filterAnalyzer,o=c.filterModel===""?void 0:c.filterModel===bs?null:c.filterModel,s=new Map,i=new Map;for(let f of this.groups){let m=new Set,h=new Set;for(let b of f){let y=b._analyzer??null,w=ia(b);(o===void 0||w===o)&&m.add(y),(r===void 0||y===r)&&h.add(w)}for(let b of m)s.set(b,(s.get(b)??0)+1);for(let b of h)i.set(b,(i.get(b)??0)+1)}let a=r===void 0?null:Z0(r),l=o===void 0?null:Q0(o),p=a!=null&&l!=null?`${a} \xB7 ${l}`:a??l??(t?"All analyzers":"All models"),d=a!=null||l!=null;return u`<button type="button" class="${q({"analyzer-btn":!0,active:d})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${p}`}"><span class="analyzer-btn-label">${p}</span> <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="analyzer-select-menu" class="analyzer-menu" @beforetoggle="${this._onToggle}">${t?this._column({dim:"analyzer",heading:"Analyzer",allLabel:"All analyzers",values:this.analyzers,sentinel:hs,labelOf:Z0,counts:s,current:c.filterAnalyzer}):g} ${t&&n?u`<div class="analyzer-menu-sep"></div>`:g} ${n?this._column({dim:"model",heading:"Model",allLabel:"All models",values:this.models,sentinel:bs,labelOf:Q0,counts:i,current:c.filterModel}):g}</div>`}_column({dim:t,heading:n,allLabel:r,values:o,sentinel:s,labelOf:i,counts:a,current:l}){return u`<div class="analyzer-menu-col" role="group" aria-label="${`Filter by ${t}`}"><div class="analyzer-menu-head">${n}</div><button type="button" aria-pressed="${String(l==="")}" class="${q({"analyzer-menu-item":!0,active:l===""})}" @click="${()=>this._pick(t,"")}"><span class="analyzer-menu-label">${r}</span></button> ${o.map(p=>{let d=p??s,f=a.get(p)??0,m=l===d;return u`<button type="button" aria-pressed="${String(m)}" class="${q({"analyzer-menu-item":!0,active:m,zero:f===0})}" @click="${()=>this._pick(t,d)}"><span class="analyzer-menu-label">${i(p)}</span><span class="analyzer-menu-count">${f}</span></button>`})}</div>`}_pick(t,n){let r=t==="analyzer"?c.filterAnalyzer:c.filterModel,o=n!==""&&r===n?"":n;this.dispatchEvent(new CustomEvent("analyzer-change",{detail:{analyzer:t==="analyzer"?o:c.filterAnalyzer,model:t==="model"?o:c.filterModel},bubbles:!0,composed:!0}))}_onToggle=t=>{this._open=t.newState==="open",this._open&&this._position()};_position(){let t=this.querySelector(".analyzer-menu"),n=this.querySelector(".analyzer-btn");if(!t||!n)return;let r=n.getBoundingClientRect(),o=t.offsetWidth||240,s=t.offsetHeight||200,i=4,a=r.left;a+o>window.innerWidth-4&&(a=window.innerWidth-o-4),a<4&&(a=4);let l=r.bottom+i;l+s>window.innerHeight-4&&r.top>s+i&&(l=r.top-s-i),t.style.top=`${l}px`,t.style.left=`${a}px`}updated(){this._open&&this.querySelector(".analyzer-menu")?.matches(":popover-open")&&this._position()}};customElements.define("analyzer-select",ug);var cd=["type","model","effort","exportsMode"],ex=["security","correctness"],HA=["max","xhigh","high","medium","low","minimal"],UA=["list","isolate"];function fg(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}var VA={type:e=>e==="terminal"?ex.length+2:fg(ex,e),model:e=>e==null?1:0,effort:e=>fg(HA,e),exportsMode:e=>fg(UA,e)};function jA(e,t,n){for(let r of n){let o=VA[r],s=o(e[r])-o(t[r]);if(s!==0)return s;let i=String(e[r]??"").localeCompare(String(t[r]??""));if(i!==0)return i}return 0}function tx(e,t,{typePrefix:n=!0}={}){return e==="type"?n?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function GA(e,t){let n=t.filter(s=>s!=="exportsMode"),r=[],o=new Map;for(let s of e){if(s.exportsMode==null){r.push({...s});continue}let i=n.map(p=>s[p]??"").join("|"),a=o.get(i);if(a){a.exportsMode=`${a.exportsMode}+${s.exportsMode}`;continue}let l={...s};o.set(i,l),r.push(l)}return r}function nx(e,t=cd){let n=new Map;for(let m of e){let h={};for(let y of t)h[y]=y==="model"?cl(m.model)??null:m[y]??null;let b=t.map(y=>h[y]??"").join("|");n.has(b)||n.set(b,h)}let r=[...n.values()].toSorted((m,h)=>jA(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")?GA(r,t):r,a=i.length>2&&s.includes("type")&&s.length>1,l=["model","effort"].filter(m=>t.includes(m)&&o[m]),p=[...l,...t.filter(m=>!l.includes(m))],d=[],f=!1;for(let m of p)if(o[m]){let h=tx(m,i[0][m]);h!=null&&d.push(h)}else if(!f){for(let h of i){let b=s.map(y=>tx(y,h[y],{typePrefix:!a})).filter(y=>y!=null);b.length>0&&d.push(b.join(" \xB7 "))}f=!0}return d}function rx(e=!1,t=""){let n=new Set;return["deepview",...e?["security"]:[],...t.split(",")].map(r=>r.trim()).filter(r=>{let o=r.toLowerCase();return!r||n.has(o)?!1:(n.add(o),!0)})}var dd=null;function KA(){return dd||(dd=(async()=>await import("./prism.js"))(),dd)}var ox=1024*1024;function qA(e){return e.length<=ox&&wn(e)<=ox}var YA={__proto__:null,js:"javascript",javascript:"javascript",mjs:"javascript",cjs:"javascript",node:"javascript",jsx:"jsx",ts:"typescript",typescript:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",markup:"markup",yaml:"yaml",yml:"yaml",sh:"bash",bash:"bash",shell:"bash",zsh:"bash",console:"bash",md:"markdown",markdown:"markdown",sol:"solidity",solidity:"solidity",rs:"rust",rust:"rust",rb:"ruby",ruby:"ruby",py:"python",python:"python",py3:"python",python3:"python",php:"php",phtml:"php",java:"java",cpp:"cpp","c++":"cpp",cc:"cpp",cxx:"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp","h++":"cpp",h:"cpp",c:"c",objc:"objectivec",objectivec:"objectivec","objective-c":"objectivec",m:"objectivec",mm:"objectivec"};function sx(e){return typeof e!="string"?null:YA[e.toLowerCase()]??null}async function vs(e,t,n=null){if(!t||!qA(e))return null;try{return(await KA()).highlight(e,t,n)}catch{return null}}function B6(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 mg=new Map,gg=new Set,hg=!1;function XA(){hg||(hg=!0,queueMicrotask(()=>{hg=!1,c.codeBlockTick++,O()}))}function bg(e,t){let n=sx(t);if(!n||!e)return null;let r=`${n}\0${e}`;return mg.has(r)?mg.get(r):(gg.has(r)||(gg.add(r),(async()=>{let o=await vs(e,n);mg.set(r,o??null),gg.delete(r),XA()})()),null)}var ud=null,pd=null;function JA(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function ZA(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function QA(){if("serviceWorker"in navigator)try{let e=await navigator.serviceWorker.getRegistrations();for(let t of e){let n=t.active?.scriptURL??t.installing?.scriptURL??t.waiting?.scriptURL;n&&n.endsWith("/brotli-sw.js")&&await t.unregister()}}catch{}}var ix="./brotli-fallback.js",fd=Symbol("brotli worker unavailable"),sn=null,yg=!1,eE=0,$s=new Map;function tE(){return pd||(pd=(async()=>await import(ix))(),pd)}function wg(){yg=!0,sn&&(sn.terminate(),sn=null);let e=[...$s.values()];$s.clear();for(let t of e)t.resolve(fd)}function nE(e){let{id:t,bytes:n,error:r}=e.data??{},o=$s.get(t);o&&($s.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function rE(){if(sn)return sn;if(yg||typeof Worker>"u")return null;try{sn=new Worker(new URL(ix,import.meta.url),{type:"module"})}catch{return yg=!0,null}return sn.addEventListener("message",nE),sn.addEventListener("error",wg),sn.addEventListener("messageerror",wg),sn}function oE(e){let t=rE();return t?new Promise((n,r)=>{let o=++eE;$s.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{$s.delete(o),wg(),n(fd)}}):Promise.resolve(fd)}async function sE(){await QA();let e=JA();return e?{kind:"native",format:e}:{kind:"fallback"}}function ax(){return ud||(ud=sE(),ud)}async function lx(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await ax();if(n(),r.kind==="native")return ZA(r.format,e);let o=await oE(e);return n(),o!==fd?o:(await tE()).brotliDecompress(e)}ax().catch(()=>{});var cx=0,vg=new AbortController;function me(){return cx}function Le(){return vg.signal}function Oe(){return vg.abort(),vg=new AbortController,++cx}var iE=new Map,aE=new Map,ua=new Map,md=new WeakMap;async function $g(e){try{let t=await Gp(e);return t?hi(t,e):null}catch{return null}}var mr=null;function tH(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 nH(e){mr===e&&(mr=null)}function kg(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?iE:aE,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=kg(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?hp(await Yk(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 $g(e);return h?.kind===o&&!h.stale?h:go(e,t)}let[f,m]=await Promise.all([lE(e,t),$g(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||rv(f).then(b=>Kp(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 rH(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 lE(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 hp(Ur(n),{integrity:e,kind:o,size:n.byteLength});let s=Ur(await lx(n,()=>!_())),i=Xw.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 cE(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Fi(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Tl(e);if(Fi(e.integrity,t),c.bundleDetails!==e)return;e.fileHashes=t,O()}catch{}})()}}function dE(e){if(kf(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 $g(e);if(!(!r?.json&&!r?.bundle))try{let o=await Tl(r);Fi(e,o)}catch{}})();return ua.set(e,n),n.finally(()=>{ua.get(e)===n&&ua.delete(e)}).catch(()=>{}),n}async function xg(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 dE(r)}}}async function gd(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(),cE(n),t.managedId||xt().catch(()=>{}))}function Sg(e=c.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Le():void 0,n=md.get(e);if(n&&n.signal===t)return n.job;let r=(c.bundles??[]).find(s=>s.integrity===e.integrity);if(!r)return Promise.resolve(null);let o=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 md.set(e,{job:o,signal:t}),o.finally(()=>{md.get(e)?.job===o&&md.delete(e)}).catch(()=>{}),o}var hd=new WeakMap,dx=new WeakMap;function ks(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??"",r=t?.[2]??e,o=r.startsWith("/"),s=[];for(let i of r.split("/"))if(!(!i||i==="."))if(i===".."&&s.length>0&&s.at(-1)!=="..")s.pop();else{if(i===".."&&o&&s.length===0)return null;s.push(i)}return n+(o?"/":"")+s.join("/")}function ux(e){let t=new Map;for(let n of e.keys()){let r=ks(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function uE(e,t,n,r){let o=ks(n);if(o===null)return null;let s=typeof r=="string"?ks(`${r}/package.json`):null,i=o.slice(0,o.lastIndexOf("/")+1),a=dx.get(e);for(a||(a=new Map,dx.set(e,a));;){if(i.endsWith("node_modules/"))return null;let l=`${i}package.json`;if(t.has(l)){if(!a.has(l)){let d=e.get(t.get(l)),f=null;try{f=typeof d=="string"?JSON.parse(d.replace(/^\uFEFF/u,""))?.imports??null:null}catch{}a.set(l,f&&typeof f=="object"&&!Array.isArray(f)?f:null)}return{directory:i,imports:a.get(l)}}if(l===s||!i||i==="/"||i.endsWith("../")||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(i))return null;let p=i.slice(0,-1);i=p.slice(0,p.lastIndexOf("/")+1)}}function pE(e,t){if(!e)return null;if(Object.hasOwn(e,t)&&!t.includes("*"))return{value:e[t],wildcard:null};let n=null;for(let r of Object.keys(e)){let o=r.indexOf("*");if(!r.startsWith("#")||o===-1||r.indexOf("*",o+1)!==-1)continue;let s=r.slice(0,o),i=r.slice(o+1);t.length<=s.length+i.length||!t.startsWith(s)||!t.endsWith(i)||(!n||o>n.star||o===n.star&&r.length>n.pattern.length)&&(n={pattern:r,star:o,suffix:i})}return n?{value:e[n.pattern],wildcard:t.slice(n.star,t.length-n.suffix.length)}:null}function fx(e,t,n=0){return n>16?[null]:typeof e=="string"?[t===null?e:e.replaceAll("*",t)]:e&&typeof e=="object"?Object.values(e).flatMap(r=>fx(r,t,n+1)):[null]}function fE(e,t,n,r,o,s){if(typeof e!="string"||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let i=e.startsWith("./"),a=null;if(i){let f;try{f=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(f)||f.split("/").some(m=>[".","..","node_modules"].includes(m.toLowerCase())))return null;a=ks(t.directory+f)}else if(e.startsWith("../")||e.startsWith("/")||e.startsWith("#")||e.includes(":"))return null;let l=new Set([e]);if(i)for(let f of o?.keys()??[])(f.startsWith("./")||f.startsWith("../"))&&ks(s+f)===a&&l.add(f);let p=!1,d=null;for(let f of l){if(!o?.has(f))continue;let m=o.get(f);if(typeof m!="string"||!n.has(m)||p&&m!==d)return null;p=!0,d=m}return p?d:i?r.get(a)??null:null}function mE(e,t,n,r,o,s){let i=pE(e?.imports,t);if(!i)return null;let a=fx(i.value,i.wildcard),l=null;for(let p of a){let d=fE(p,e,n,r,o,s);if(!d||l&&d!==l)return null;l=d}return l}function Cg(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 Jw(e))t.has(r)&&n.set(r,new Map([...o].map(([s,i])=>[s,t.has(i)?i:null])));return n}function bd(e,t,n=null,r=e,o=null){let s=hd.get(e);s||(s=ux(e),hd.set(e,s));let i=hd.get(r);i||(i=ux(r),hd.set(r,i));let a=n?.get(t),l=t.slice(0,t.lastIndexOf("/")+1),p=n?uE(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 mE(p,d,e,s,a,l);if(!d.startsWith("./")&&!d.startsWith("../"))return null;let f=d.slice(d.lastIndexOf("/")+1),m=f.lastIndexOf(".");return m<=0||m===f.length-1?null:s.get(ks(l+d))??null}}var px=new WeakMap;function _g(e,t){let n=Lt(e),r=px.get(n);return r||(r={imports:Cg(e,n),packageDirs:Ot(e)},px.set(n,r)),bd(n,t,r.imports,we(e),r.packageDirs)}var gx=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u2800\u3000\p{Cf}\p{Cs}\p{Co}\p{Cn}\p{Default_Ignorable_Code_Point}]/u,yd=new RegExp(gx.source,"gu"),gE=new Map(`
|
|
15
15
|
0000 NUL NULL
|
|
16
16
|
0001 SOH START OF HEADING
|
|
17
17
|
0002 STX START OF TEXT
|
|
@@ -128,40 +128,42 @@ E0001 LANG LANGUAGE TAG
|
|
|
128
128
|
E0020 SP TAG SPACE
|
|
129
129
|
E007F CANCEL CANCEL TAG
|
|
130
130
|
`.trim().split(`
|
|
131
|
-
`).map(e=>{let[,t,n,r]=/^(\S+) (\S+) (.+)$/u.exec(e);return[Number.parseInt(t,16),{label:n,name:r}]})),pa=e=>`U+${e.toString(16).toUpperCase().padStart(4,"0")}`;function hx(e){let t=hE.get(e);if(t)return{label:t.label,title:`${pa(e)} ${t.name}`};if(e>917536&&e<917631){let r=String.fromCodePoint(e-917504);return{label:r,title:`${pa(e)} TAG ${r}`}}let n=e>=65024&&e<=65039?e-65024+1:e>=917760&&e<=917999?e-917760+17:0;return n?{label:`VS${n}`,title:`${pa(e)} VARIATION SELECTOR-${n}`}:{label:pa(e),title:`${pa(e)} ${vE(e)}`}}var bE=/\p{Cf}/u,yE=/\p{Default_Ignorable_Code_Point}/u,wE=/\p{Cn}/u;function vE(e){if(e>=55296&&e<57344)return"lone surrogate";if((e&65534)===65534||e>=64976&&e<=65007)return"noncharacter";if(e>=57344&&e<=63743||e>=983040)return"private use character";let t=String.fromCodePoint(e);return bE.test(t)?"format character":yE.test(t)&&!wE.test(t)?"invisible character":"unassigned code point"}function bx(e,t){let n=[];yd.lastIndex=0;for(let r=yd.exec(e);r;r=yd.exec(e)){let o=r[0].codePointAt(0),s=bv(e,r.index,o,t);s===-1?n.push([r.index,o]):yd.lastIndex=s}return n}function xs(e){return gx.test(e)}var $E=e=>{let{label:t,title:n}=hx(e);return u`<span class="code-control" data-tooltip="${n}">${t}</span>`};function yx(e,t=!1){if(!xs(e))return[e];let n=[],r=0;for(let[o,s]of bx(e,t))o>r&&n.push(e.slice(r,o)),n.push($E(s)),r=o+(s>65535?2:1);return r<e.length&&n.push(e.slice(r)),n}var mx=e=>e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""");function wd(e,t=!1){if(!xs(e))return e;let n="",r=[];for(let a=0;a<e.length;){let l=e.indexOf("<",a),p=l===-1?e.length:l;if(p>a&&(r.push({text:n.length,markup:a}),n+=e.slice(a,p)),l===-1)break;let d=e.indexOf(">",l);a=d===-1?e.length:d+1}let o="",s=0,i=0;for(let[a,l]of bx(n,t)){for(;r[i+1]?.text<=a;)i++;let p=r[i].markup+a-r[i].text,{label:d,title:f}=hx(l);o+=`${e.slice(s,p)}<span class="code-control" data-tooltip="${mx(f)}">${mx(d)}</span>`,s=p+(l>65535?2:1)}return o+e.slice(s)}function vd(e,t){return!!e&&!!t&&e.integrity===t.integrity&&e.file===t.file&&(e.range?.start??null)===(t.range?.start??null)&&(e.range?.end??null)===(t.range?.end??null)}var kE=[];function Rg(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!vd(e[0],n))return{stack:kE,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function uH({stack:e,at:t,base:n},r){let o=e.length>0?e[t]:n;if(vd(o,r))return null;let s=e.length>0?e.slice(0,t+1):[n];return{stack:[...s,r],at:s.length}}function pH(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}function wx(e,t){if(!e||!t||t.length===0)return;let n=e.getBoundingClientRect().top,r=t[0].getBoundingClientRect(),o=t.item(t.length-1).getBoundingClientRect(),s=r.top-n+e.scrollTop,i=o.bottom-n+e.scrollTop,a=s+(i-s)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(a,s-r.height)),behavior:"instant"})}var fa=new Map,Mg=new Map,xE=new Set,vx=new WeakMap,Tg=new Set;function $x(e,t,n,r,o,s=Mg,i=xE){let a=`${e}\0${t}`;if(s.has(a)||i.has(a))return;let l=mi(t,r,n);if(!l){s.set(a,null);return}i.add(a),(async()=>{let p=await vs(n,l,o);s.set(a,typeof p=="string"?wd(p):null),i.delete(a),c.focusCodeTick++,queueMicrotask(O)})()}async function SE(e){let t=fa.get(e);if(t&&(t.loading||t.sources))return;let n=(c.bundles??[]).find(r=>r.integrity===e);if(n){fa.set(e,{sources:null,loading:!0,error:null});try{let r=await go(e,n),o=Lt(r);fa.set(e,{sources:o,packageFiles:we(r),packageDirs:Ot(r),imports:Cg(r,o),formats:r.kind==="stasis"?r.bundle?.formats:null,loading:!1,error:r.error??null})}catch(r){fa.set(e,{sources:null,loading:!1,error:r.message})}c.focusCodeTick++,queueMicrotask(O),queueMicrotask(kx)}}function kx(){let e=be.querySelectorAll(".focus-code-line-active");e.length!==0&&wx(e[0].closest(".focus-code-body"),e)}function ma(e){if(_()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;c.focusCodeTick;let n=Bc(e._managedReportId);if(n?.data===null||n?.error)return null;let r={integrity:n?.data?.integrity??null,reportId:e._managedReportId},o=[e,...Array.isArray(e.evidence)?e.evidence:[]];for(let s of o){let i=ga(r,s?.file);if(i)return{...r,file:i,line:s.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null: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 $f(e.integrity,t);let n=Bc(e.reportId);if(!n||n.data===void 0&&!n.error)return t;let r=n.data;return r?.paths.get(t)??(r?.sources.has(t)?t:null)}function xx(e,t,n){if(!_())return null;let r=Bc(e);if(!r||r.data===void 0&&!r.error)return n&&!Tg.has(e)&&(Tg.add(e),Sk(e).catch(()=>{}).finally(()=>{Tg.delete(e),c.focusCodeTick++,queueMicrotask(O),queueMicrotask(kx)})),n?{loading:!0}:null;let o=r.data;if(!o)return null;t=o.paths.get(t)??t;let s=o.sources.get(t);if(typeof s!="string")return null;let i=vx.get(o);return i||(i={cache:new Map,pending:new Set},vx.set(o,i)),$x(o.integrity,t,s,o.formats?.get(t),bd(o.sources,t,o.imports,o.sources,o.packageDirs),i.cache,i.pending),{content:s,highlighted:i.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function ho(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return xx(r,t,n);if(_())return null;let o=fa.get(e);if(!o)return n?(SE(e),{loading:!0}):null;if(o.loading&&!n)return null;if(o.loading)return{loading:!0};if(!o.sources)return null;let s=o.sources.get(t);if(typeof s!="string")return null;$x(e,t,s,o.formats?.get(t),bd(o.sources,t,o.imports,o.packageFiles,o.packageDirs));let i=`${e}\0${t}`;return{content:s,highlighted:Mg.has(i)?Mg.get(i):void 0,loading:!1}}function Sx(e){let t=ma(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:ki(t.reportId?t.line:e.line)}:null}function CE(e){return e?Sx(je(e)):null}function $d(e){let t=CE(e);return t?{base:t,...Rg(c.focusCodeStack,c.focusCodeAt,t)}:null}function Cx(e){let t=Sx(e);return t?Rg(c.focusCodeStack,c.focusCodeAt,t).pos:null}function TH(e,t,n,r){let o=$d(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let s=je(e),i=ho(t,r,{kick:!1,reportId:s?._managedReportId});return i&&!i.loading?{integrity:t,file:r,range:null}:null}function _x(e){let t=e&&je(e),n=ma(t);if(n?.reportId&&!n.integrity)return xx(n.reportId,n.file,!0);let r=$d(e);if(!r)return null;let{pos:o}=r,s=ho(o.integrity,o.file,{reportId:t?._managedReportId});return!s||s.loading?s:{...s,file:o.file,integrity:o.integrity,range:o.range}}function kd(e,{teamOnly:t=!1,reportId:n}={}){if(!e)return null;let r=j(e);if(!Vr(r))return null;if(_()){let i=t?null:n??(c.currentView==="links"?e._managedReportId:c.currentManagedReport),a=Ye(Xe({view:"findings",teamId:c.currentManagedTeam,reportId:i,finding:{id:r}},c.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||c.currentFile||"",s=c.currentWorkspace||Ss(o);return pp({id:r,report:c.currentWorkspace?null:Sl("report",o),workspace:Sl("workspace",s??"")})}function Ss(e,t=c.currentReportWorkspace||c.currentWorkspace){let n=ji(e);return n.some(r=>r.id===t)?t:n.length===1?n[0].id:null}function NH(e){for(let t of[fr(),X0()])for(let n of t)for(let r of n)if(j(r)===e)return{group:n,finding:r};return null}function _E(e,t){c.currentView="findings",c.viewMode==="graph"&&(c.viewMode="table",Bt());let n=Fe(e).commonTriage;if(c.viewMode==="kanban"){let i=n??"untriaged";c.kanbanExpandedColumn!==null&&c.kanbanExpandedColumn!==i&&(c.kanbanExpandedColumn=null)}else n!==c.shownTriage&&(c.shownTriage=n);c.upstreamOnly&&!e.every(i=>i.isUpstream)&&(c.upstreamOnly=!1),vi(c.showRevalidation,c.upstreamOnly);let r=e.find(i=>j(i)===t);if(Xr(r)||nd(mo())&&!A0(e)||!ur(e).some(i=>j(i)===t))if(c.currentWorkspace){r?.isUpstream?c.upstreamOnly=!0:c.showRevalidation=!1,vi(c.showRevalidation,c.upstreamOnly);let i=fr().find(a=>a.some(l=>j(l)===t));if(i)return _E(i,t)}else c.revalidationDetailed=!0;if(rd([e]).length===0){let i=c.sortBy;td(),c.sortBy=i}let s=ie(e);return e.length>1&&c.activeTabByGroup.set(s,t),c.viewMode==="table"?c.tableSelectedGid=s:c.viewMode==="focus"?c.focusGid=s:c.viewMode==="kanban"&&(c.kanbanPopoverGid=s),s}function Rx(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function Tx(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 UH(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 Ig(e,t){c.managedComments.set(e,t);for(let n of ha.get(e)??[])n()}function Mx(e){return _()?c.managedComments?.get(e?.id)??[]:[]}function Ix(){return _()&&c.managedSession!=null&&Yn(c.managedSession.role,"triage")}function RE(e){return Ix()&&Rx(e,c.managedSession)}function Ag(e){let t=c.reports,n=c.managedSession?.id;return()=>_()&&n!=null&&c.managedSession?.id===n&&c.reports===t&&c.managedReports.some(r=>r.id===e)}async function xd(e,{signal:t,readAnnotations:n}={}){let r=Ag(e);if(!r())return!1;let o=new Set(c.reports.filter(l=>l._managedReportId===e).flatMap(l=>l.groups.flatMap(p=>p.map(d=>d.id)))),s=new Map([...o].map(l=>[l,c.managedComments.get(l)])),i=n?(await n(e))?.comments:await Hk(e,c.currentManagedTeam,{signal:t});if(!r()||i==null||t?.aborted)return!1;let a=new Map([...o].map(l=>[l,[]]));for(let l of i)a.has(l.findingId)&&a.get(l.findingId).push(l);for(let[l,p]of a)c.managedComments.get(l)===s.get(l)&&Ig(l,p);return!0}async function VH(e,t,n=null){let r=e?._managedReportId,o=Ag(r);if(!o()||!Ix())return{status:403};if(n&&n.authorId!==c.managedSession.id)return{status:403};let s=await Uk(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},c.managedSession.csrfToken);if(!o())return{status:0};if(s.comment){let a=(c.managedComments.get(e.id)??[]).filter(l=>l.id!==s.comment.id);a.push(s.comment),a.sort(Tx),Ig(e.id,a)}return s}async function jH(e,t){let n=e?._managedReportId,r=Ag(n);if(!r()||!RE(t))return 403;let o=await Vk(n,t.id,t.version,c.managedSession.csrfToken);if(!r())return 0;if(o===204){let s=c.managedComments.get(e.id)??[];Ig(e.id,s.filter(i=>i.id!==t.id))}return o}function Sd(e){return qv(e,{managed:_()}).map(t=>typeof t=="string"?t:t.self?u`<a class="comment-self-ref" href="${t.url}">${t.label}</a>`:u`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Cd=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Cs=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 3 5 8l5 5"/></svg>`,_s=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3 11 8l-5 5"/></svg>`,Ax=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 3.5h12M2 8h9a2.5 2.5 0 0 1 0 5H8.5M10 11.5 8.5 13l1.5 1.5M2 13h3.5"/></svg>`,Ex=u`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M5 2h8a1 1 0 0 1 1 1v8M3 5h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1ZM4.5 9.5h4"/></svg>`,ZH=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>`,QH=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 Eg(e,{variant:t="full"}={}){let n=c.severityMode,r=de(e,n),o=u`<span class="${`badge ${r}`}">${st(r)}</span>`,s=Bo(e),i=t==="tab"?null:$w(e);if(!s&&!i)return o;let a=i?`Corrected severity varies across reports \u2014 ${Object.entries(i).map(([k,$])=>`${k||"(this report)"}: ${st($.severity)}`).join("; ")}`:null,l=i?u`<span class="badge-varies" data-tooltip="${a}" aria-label="${a}">varies</span>`:g;if(!s)return u`<span class="${`badge-pair badge-pair-${t}`}">${o}${l}</span>`;let p=de(e,"original"),d=ai(e),f=e.correctedSeverityReason,m=(_e[d]??0)>(_e[p]??0),h=m?"up":"down",b=m?"\u25B2":"\u25BC",y=n!=="original",w=(y?`Corrected ${h} from ${st(p)}`:`Original severity \u2014 corrected ${h} to ${st(d)}`)+(f?` \u2014 ${f}`:""),v=`Severity ${st(r)}; ${y?`corrected ${h} from ${st(p)}`:`original, corrected to ${st(d)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return u`<span class="badge-pair badge-pair-tab" data-tooltip="${w}" aria-label="${v}">${o}<span class="${`badge-corr-mark ${h}`}" aria-hidden="true">${b}</span></span>`;let x=y?p:d;return u`<span class="${`badge-pair badge-pair-${t}`}" data-tooltip="${w}" aria-label="${v}">${o}<span class="badge-orig-wrap"><span class="${`badge-arrow ${h}`}" aria-hidden="true">${b}</span>${y?u`<span class="badge-pre" aria-hidden="true">was</span>`:g}<span class="${`badge-orig ${x}${y?" struck":""}`}">${st(x)}</span></span>${l}</span>`}var Fx=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;function ya(e){Fx.lastIndex=0;let t=[],n=0,r;for(;(r=Fx.exec(e))!==null;){r.index>n&&t.push(e.slice(n,r.index));let o=r[0].codePointAt(0);if(o===91){let s=Vv(r[0]);t.push(s?u`<a href="${s.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${s.url}">${s.label}</a>`:r[0])}else o===42?t.push(u`<strong>${r[0].slice(2,-2)}</strong>`):o===96?t.push(u`<span class="inline-code">${r[0].slice(1,-1)}</span>`):t.push(u`<span class="inline-quote">${r[0]}</span>`);n=r.index+r[0].length}return n===0?e:(n<e.length&&t.push(e.slice(n)),t)}function TE({lang:e,code:t}){c.codeBlockTick;let n=bg(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 ME(e,{wrap:t=!1}={}){let n=e.split(/\n{2,}/u).filter(r=>r.trim());return n.length<2?t?u`<div class="para">${ya(e)}</div>`:ya(e):n.map(r=>u`<div class="para">${ya(r)}</div>`)}function IE({ordered:e,start:t,items:n}){let r=n.map(o=>u`<li>${it(o)}</li>`);return e?u`<ol class="md-list" start="${t>1?t:g}">${r}</ol>`:u`<ul class="md-list">${r}</ul>`}function it(e,{paragraphs:t=!0}={}){if(!e)return e;let n=t?Pv(e):[e],r=n.length>1,o=i=>t?ME(i,{wrap:r}):ya(i),s=i=>{let a=Dv(i);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(l=>typeof l=="string"?o(l):TE(l))};return n.length===1&&typeof n[0]=="string"?s(n[0]):n.map(i=>typeof i=="string"?s(i):IE(i))}function AE(e){let t=new Set;for(let n of e)t.add(Ae(n));return[...t]}function EE(e){let t=Ae(e);return ms[t]??t}function FE(e,t){c.linksTick,c.findingIndexTick;let n=j(e),r=Vr(n)?gt(n).filter(o=>!t.has(o)):[];return r.length===0?g:u`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${r.map(o=>{let s=Gl(o),i=ro(o),a=c.currentView==="links"&&c.currentLinks?.managedId?Qt([o])[0]:null,l=i.length===0?"":` \u2014 in ${i.map(p=>`${oe(p)} (${EE(p)})`).join(", ")}`;return u`<a class="duplicate-ref" href="${_()?kd({id:o},{teamOnly:!0}):`#${jr({id:o})}`}" data-links-preview="${a?o:g}" data-preview-report="${a?.report??g}" data-preview-row="${a?.index??g}" data-preview-managed-report="${a?.managedReportId??g}" data-tooltip="${`${s}${l}`}">${AE(i).map(p=>W(ye[p]??ye.default))}<span class="duplicate-ref-id">${jl(o)??s}</span></a>`})}</div>`}function LE(e){let t=Fv(e);return t?u`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:g}function OE(e){let t=Tp()?zr(e.revalidateVerdict,e):"";return t?u`<div class="revalidate-verdict">${it(er(t))}</div>`:g}function ba(e,t,n="section",{collapsible:r=!1}={}){let o=t?u`<div class="section-body">${it(er(t))}</div>`:g;return!r||!t?u`<div class="${n}"><div class="section-label">${e}</div>${o}</div>`:u`<details class="${n}"><summary class="section-label">${e}</summary>${o}</details>`}function NE(e,t,n){let r=e?.integrity&&t?.file?ga(e,t.file):null;return r?u`<span class="evidence-ref" role="link" tabindex="0" data-code-nav-integrity="${e.integrity}" data-code-nav-file="${r}" data-code-nav-line="${t?.line??""}">${n}</span>`:u`<span class="evidence-ref">${n}</span>`}function BE(e,t){let n=Array.isArray(e.evidence)?e.evidence:[];if(n.length===0)return g;let r=En(e),o=ma(e),s=t==="focus"&&o!==null,i=s?Cx(e):null;return u`<details class="evidence"><summary class="section-label">Evidence<span class="evidence-count">(${n.length})</span></summary><ol class="evidence-list">${n.map((a,l)=>{let p=ul(a),d=Hv(a,e,r,l),f=Cw(a),m=Nx(e,`ev${l}`,o,a?.file,a?.line),h=Fg(d),b=s&&vd(i,{integrity:o.integrity,file:ga(o,a?.file),range:ki(a?.line)});return u`<li class="${q({current:b})}">${s?NE(o,a,p):d?u`<a class="evidence-ref" href="${d}" target="_blank" rel="noopener">${p}</a>`:u`<span class="evidence-ref">${p}</span>`} ${m?.mark??g} ${h} ${m?.tip??g} ${f?u`<div class="evidence-note">${it(er(f))}</div>`:g} ${m?.body??g}</li>`})}</ol></details>`}function Ox(e,t){let n=ul(e);return t?u`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function DE(e,t){if(!t)return g;let n=t.slice(0,7),r=Gv(e,t);return r?u`<a href="${r}" target="_blank" rel="noopener" data-tooltip="${t}">${n}</a>`:u`<span data-tooltip="${t}">${n}</span>`}var Rd=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Ts=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>`,PE=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"><path d="M6.2 11.2H4.8a3.2 3.2 0 0 1 0-6.4h1.4"/><path d="M9.8 4.8h1.4a3.2 3.2 0 0 1 0 6.4H9.8"/><path d="M5.6 8h4.8"/></g></svg>`,zE=u`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><path d="M4.4 4.6 1.3 8l3.1 3.4"/><path d="m11.6 4.6 3.1 3.4-3.1 3.4"/><path d="M9.8 2.6 6.2 13.4"/></g></svg>`,WE=W(Kt);function Fg(e){let t=Bv(e);return t?u`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${WE}</a>`:g}function HE(e,t,n,r){return`${j(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:""}`}var Rs={key:null,host:null};function _d(e,t){if(Rs.key===e)return;let n=Rs.host,r=e===null?null:t?.getRootNode?.()?.host??null;Rs={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function Lx(e,t,n){c.codeBlockTick;let{text:r,lines:o,startLine:s}=Wv(e,t);if(o.length===0)return g;let i=n.lastIndexOf("."),a=bg(r,i<0?"":n.slice(i+1)),l=s+o.length-1;return u`<div class="code-preview" style="${le({"--lineno-width":`${String(l).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${o.map((p,d)=>{let f=s+d,m=!!t&&f>=t.start&&f<=t.end;return u`<div class="${q({"code-preview-lineno":!0,cited:m})}">${f}</div>`})}</aside><pre class="code-preview-source"><code>${a?W(a):r}</code></pre></div>`}function Nx(e,t,n,r,o){if(c.bundleHashTick,!n||!r)return null;let s=ga(n,r);if(!s)return null;let i=ki(o),a=HE(e,t,r,i),l=c.codePreviews.has(a);c.focusCodeTick;let p=u`<button type="button" class="${q({"code-preview-btn":!0,open:l})}" data-code-preview="${a}" aria-expanded="${String(l)}" aria-label="${l?`Hide the source at ${r}`:`Show the source at ${r}`}" @mouseenter="${m=>{_d(a,m.currentTarget),ho(n.integrity,s,{reportId:n.reportId})}}" @mouseleave="${m=>{Rs.key===a&&_d(null,m.currentTarget)}}" @focus="${m=>{_d(a,m.currentTarget),ho(n.integrity,s,{reportId:n.reportId})}}" @blur="${m=>{Rs.key===a&&_d(null,m.currentTarget)}}">${zE}</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>`:Lx(m.content,i,s);return{mark:p,tip:g,body:h}}if(Rs.key!==a)return{mark:p,tip:g,body:g};let d=ho(n.integrity,s,{kick:!1,reportId:n.reportId}),f=d&&!d.loading?u`<div class="code-preview-tip" role="tooltip">${Lx(d.content,i,s)}</div>`:g;return{mark:p,tip:f,body:g}}var UE=u`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${bw}"/></svg>`,VE=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.2"/><circle cx="8" cy="8" r="1.7" fill="currentColor"/></svg>`,Td=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`;function jE(e,t=!1){let n=he(e)?.flagged===!0,r=n?"Remove flag":"Flag this finding";return u`<button type="button" class="${q({"mark-flag":!0,flagged:n})}" data-flag-toggle="${j(e)}" ?disabled="${!_t(e)}" aria-label="${r}" aria-pressed="${String(n)}">${Td}${t?u`<span class="mark-btn-label">${n?"Flagged":"Flag"}</span>`:g}</button>`}function GE(e){let t=qt(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function KE(e){let t=Vl(e,En(e)),n=ul(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let o=Uv(e);return o&&r.push(o),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
|
|
131
|
+
`).map(e=>{let[,t,n,r]=/^(\S+) (\S+) (.+)$/u.exec(e);return[Number.parseInt(t,16),{label:n,name:r}]})),pa=e=>`U+${e.toString(16).toUpperCase().padStart(4,"0")}`;function hx(e){let t=gE.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)} ${wE(e)}`}}var hE=/\p{Cf}/u,bE=/\p{Default_Ignorable_Code_Point}/u,yE=/\p{Cn}/u;function wE(e){if(e>=55296&&e<57344)return"lone surrogate";if((e&65534)===65534||e>=64976&&e<=65007)return"noncharacter";if(e>=57344&&e<=63743||e>=983040)return"private use character";let t=String.fromCodePoint(e);return hE.test(t)?"format character":bE.test(t)&&!yE.test(t)?"invisible character":"unassigned code point"}function bx(e,t){let n=[];yd.lastIndex=0;for(let r=yd.exec(e);r;r=yd.exec(e)){let o=r[0].codePointAt(0),s=bv(e,r.index,o,t);s===-1?n.push([r.index,o]):yd.lastIndex=s}return n}function xs(e){return gx.test(e)}var vE=e=>{let{label:t,title:n}=hx(e);return u`<span class="code-control" data-tooltip="${n}">${t}</span>`};function yx(e,t=!1){if(!xs(e))return[e];let n=[],r=0;for(let[o,s]of bx(e,t))o>r&&n.push(e.slice(r,o)),n.push(vE(s)),r=o+(s>65535?2:1);return r<e.length&&n.push(e.slice(r)),n}var mx=e=>e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""");function wd(e,t=!1){if(!xs(e))return e;let n="",r=[];for(let a=0;a<e.length;){let l=e.indexOf("<",a),p=l===-1?e.length:l;if(p>a&&(r.push({text:n.length,markup:a}),n+=e.slice(a,p)),l===-1)break;let d=e.indexOf(">",l);a=d===-1?e.length:d+1}let o="",s=0,i=0;for(let[a,l]of bx(n,t)){for(;r[i+1]?.text<=a;)i++;let p=r[i].markup+a-r[i].text,{label:d,title:f}=hx(l);o+=`${e.slice(s,p)}<span class="code-control" data-tooltip="${mx(f)}">${mx(d)}</span>`,s=p+(l>65535?2:1)}return o+e.slice(s)}function vd(e,t){return!!e&&!!t&&e.integrity===t.integrity&&e.file===t.file&&(e.range?.start??null)===(t.range?.start??null)&&(e.range?.end??null)===(t.range?.end??null)}var $E=[];function Rg(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!vd(e[0],n))return{stack:$E,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function uH({stack:e,at:t,base:n},r){let o=e.length>0?e[t]:n;if(vd(o,r))return null;let s=e.length>0?e.slice(0,t+1):[n];return{stack:[...s,r],at:s.length}}function pH(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}function wx(e,t){if(!e||!t||t.length===0)return;let n=e.getBoundingClientRect().top,r=t[0].getBoundingClientRect(),o=t.item(t.length-1).getBoundingClientRect(),s=r.top-n+e.scrollTop,i=o.bottom-n+e.scrollTop,a=s+(i-s)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(a,s-r.height)),behavior:"instant"})}var fa=new Map,Mg=new Map,kE=new Set,vx=new WeakMap,Tg=new Set;function $x(e,t,n,r,o,s=Mg,i=kE){let a=`${e}\0${t}`;if(s.has(a)||i.has(a))return;let l=mi(t,r,n);if(!l){s.set(a,null);return}i.add(a),(async()=>{let p=await vs(n,l,o);s.set(a,typeof p=="string"?wd(p):null),i.delete(a),c.focusCodeTick++,queueMicrotask(O)})()}async function xE(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:Cg(r,o),formats:r.kind==="stasis"?r.bundle?.formats:null,loading:!1,error:r.error??null})}catch(r){fa.set(e,{sources:null,loading:!1,error:r.message})}c.focusCodeTick++,queueMicrotask(O),queueMicrotask(kx)}}function kx(){let e=be.querySelectorAll(".focus-code-line-active");e.length!==0&&wx(e[0].closest(".focus-code-body"),e)}function ma(e){if(_()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;c.focusCodeTick;let n=Bc(e._managedReportId);if(n?.data===null||n?.error)return null;let r={integrity:n?.data?.integrity??null,reportId:e._managedReportId},o=[e,...Array.isArray(e.evidence)?e.evidence:[]];for(let s of o){let i=ga(r,s?.file);if(i)return{...r,file:i,line:s.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null: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 $f(e.integrity,t);let n=Bc(e.reportId);if(!n||n.data===void 0&&!n.error)return t;let r=n.data;return r?.paths.get(t)??(r?.sources.has(t)?t:null)}function xx(e,t,n){if(!_())return null;let r=Bc(e);if(!r||r.data===void 0&&!r.error)return n&&!Tg.has(e)&&(Tg.add(e),Sk(e).catch(()=>{}).finally(()=>{Tg.delete(e),c.focusCodeTick++,queueMicrotask(O),queueMicrotask(kx)})),n?{loading:!0}:null;let o=r.data;if(!o)return null;t=o.paths.get(t)??t;let s=o.sources.get(t);if(typeof s!="string")return null;let i=vx.get(o);return i||(i={cache:new Map,pending:new Set},vx.set(o,i)),$x(o.integrity,t,s,o.formats?.get(t),bd(o.sources,t,o.imports,o.sources,o.packageDirs),i.cache,i.pending),{content:s,highlighted:i.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function ho(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return xx(r,t,n);if(_())return null;let o=fa.get(e);if(!o)return n?(xE(e),{loading:!0}):null;if(o.loading&&!n)return null;if(o.loading)return{loading:!0};if(!o.sources)return null;let s=o.sources.get(t);if(typeof s!="string")return null;$x(e,t,s,o.formats?.get(t),bd(o.sources,t,o.imports,o.packageFiles,o.packageDirs));let i=`${e}\0${t}`;return{content:s,highlighted:Mg.has(i)?Mg.get(i):void 0,loading:!1}}function Sx(e){let t=ma(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:ki(t.reportId?t.line:e.line)}:null}function SE(e){return e?Sx(je(e)):null}function $d(e){let t=SE(e);return t?{base:t,...Rg(c.focusCodeStack,c.focusCodeAt,t)}:null}function Cx(e){let t=Sx(e);return t?Rg(c.focusCodeStack,c.focusCodeAt,t).pos:null}function TH(e,t,n,r){let o=$d(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let s=je(e),i=ho(t,r,{kick:!1,reportId:s?._managedReportId});return i&&!i.loading?{integrity:t,file:r,range:null}:null}function _x(e){let t=e&&je(e),n=ma(t);if(n?.reportId&&!n.integrity)return xx(n.reportId,n.file,!0);let r=$d(e);if(!r)return null;let{pos:o}=r,s=ho(o.integrity,o.file,{reportId:t?._managedReportId});return!s||s.loading?s:{...s,file:o.file,integrity:o.integrity,range:o.range}}function kd(e,{teamOnly:t=!1,reportId:n}={}){if(!e)return null;let r=j(e);if(!Vr(r))return null;if(_()){let i=t?null:n??(c.currentView==="links"?e._managedReportId:c.currentManagedReport),a=Ye(Xe({view:"findings",teamId:c.currentManagedTeam,reportId:i,finding:{id:r}},c.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||c.currentFile||"",s=c.currentWorkspace||Ss(o);return pp({id:r,report:c.currentWorkspace?null:Sl("report",o),workspace:Sl("workspace",s??"")})}function Ss(e,t=c.currentReportWorkspace||c.currentWorkspace){let n=ji(e);return n.some(r=>r.id===t)?t:n.length===1?n[0].id:null}function NH(e){for(let t of[fr(),X0()])for(let n of t)for(let r of n)if(j(r)===e)return{group:n,finding:r};return null}function CE(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)||nd(mo())&&!A0(e)||!ur(e).some(i=>j(i)===t))if(c.currentWorkspace){r?.isUpstream?c.upstreamOnly=!0:c.showRevalidation=!1,vi(c.showRevalidation,c.upstreamOnly);let i=fr().find(a=>a.some(l=>j(l)===t));if(i)return CE(i,t)}else c.revalidationDetailed=!0;if(rd([e]).length===0){let i=c.sortBy;td(),c.sortBy=i}let s=ie(e);return e.length>1&&c.activeTabByGroup.set(s,t),c.viewMode==="table"?c.tableSelectedGid=s:c.viewMode==="focus"?c.focusGid=s:c.viewMode==="kanban"&&(c.kanbanPopoverGid=s),s}function Rx(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function Tx(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 UH(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 Ig(e,t){c.managedComments.set(e,t);for(let n of ha.get(e)??[])n()}function Mx(e){return _()?c.managedComments?.get(e?.id)??[]:[]}function Ix(){return _()&&c.managedSession!=null&&Yn(c.managedSession.role,"triage")}function _E(e){return Ix()&&Rx(e,c.managedSession)}function Ag(e){let t=c.reports,n=c.managedSession?.id;return()=>_()&&n!=null&&c.managedSession?.id===n&&c.reports===t&&c.managedReports.some(r=>r.id===e)}async function xd(e,{signal:t,readAnnotations:n}={}){let r=Ag(e);if(!r())return!1;let o=new Set(c.reports.filter(l=>l._managedReportId===e).flatMap(l=>l.groups.flatMap(p=>p.map(d=>d.id)))),s=new Map([...o].map(l=>[l,c.managedComments.get(l)])),i=n?(await n(e))?.comments:await Hk(e,c.currentManagedTeam,{signal:t});if(!r()||i==null||t?.aborted)return!1;let a=new Map([...o].map(l=>[l,[]]));for(let l of i)a.has(l.findingId)&&a.get(l.findingId).push(l);for(let[l,p]of a)c.managedComments.get(l)===s.get(l)&&Ig(l,p);return!0}async function VH(e,t,n=null){let r=e?._managedReportId,o=Ag(r);if(!o()||!Ix())return{status:403};if(n&&n.authorId!==c.managedSession.id)return{status:403};let s=await Uk(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},c.managedSession.csrfToken);if(!o())return{status:0};if(s.comment){let a=(c.managedComments.get(e.id)??[]).filter(l=>l.id!==s.comment.id);a.push(s.comment),a.sort(Tx),Ig(e.id,a)}return s}async function jH(e,t){let n=e?._managedReportId,r=Ag(n);if(!r()||!_E(t))return 403;let o=await Vk(n,t.id,t.version,c.managedSession.csrfToken);if(!r())return 0;if(o===204){let s=c.managedComments.get(e.id)??[];Ig(e.id,s.filter(i=>i.id!==t.id))}return o}function Sd(e){return qv(e,{managed:_()}).map(t=>typeof t=="string"?t:t.self?u`<a class="comment-self-ref" href="${t.url}">${t.label}</a>`:u`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Cd=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Cs=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 3 5 8l5 5"/></svg>`,_s=u`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3 11 8l-5 5"/></svg>`,Ax=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 3.5h12M2 8h9a2.5 2.5 0 0 1 0 5H8.5M10 11.5 8.5 13l1.5 1.5M2 13h3.5"/></svg>`,Ex=u`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M5 2h8a1 1 0 0 1 1 1v8M3 5h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1ZM4.5 9.5h4"/></svg>`,ZH=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>`,QH=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 Eg(e,{variant:t="full"}={}){let n=c.severityMode,r=de(e,n),o=u`<span class="${`badge ${r}`}">${st(r)}</span>`,s=Bo(e),i=t==="tab"?null:$w(e);if(!s&&!i)return o;let a=i?`Corrected severity varies across reports \u2014 ${Object.entries(i).map(([k,$])=>`${k||"(this report)"}: ${st($.severity)}`).join("; ")}`:null,l=i?u`<span class="badge-varies" data-tooltip="${a}" aria-label="${a}">varies</span>`:g;if(!s)return u`<span class="${`badge-pair badge-pair-${t}`}">${o}${l}</span>`;let p=de(e,"original"),d=ai(e),f=e.correctedSeverityReason,m=(_e[d]??0)>(_e[p]??0),h=m?"up":"down",b=m?"\u25B2":"\u25BC",y=n!=="original",w=(y?`Corrected ${h} from ${st(p)}`:`Original severity \u2014 corrected ${h} to ${st(d)}`)+(f?` \u2014 ${f}`:""),v=`Severity ${st(r)}; ${y?`corrected ${h} from ${st(p)}`:`original, corrected to ${st(d)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return u`<span class="badge-pair badge-pair-tab" data-tooltip="${w}" aria-label="${v}">${o}<span class="${`badge-corr-mark ${h}`}" aria-hidden="true">${b}</span></span>`;let x=y?p:d;return u`<span class="${`badge-pair badge-pair-${t}`}" data-tooltip="${w}" aria-label="${v}">${o}<span class="badge-orig-wrap"><span class="${`badge-arrow ${h}`}" aria-hidden="true">${b}</span>${y?u`<span class="badge-pre" aria-hidden="true">was</span>`:g}<span class="${`badge-orig ${x}${y?" struck":""}`}">${st(x)}</span></span>${l}</span>`}var Fx=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;function ya(e){Fx.lastIndex=0;let t=[],n=0,r;for(;(r=Fx.exec(e))!==null;){r.index>n&&t.push(e.slice(n,r.index));let o=r[0].codePointAt(0);if(o===91){let s=Vv(r[0]);t.push(s?u`<a href="${s.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${s.url}">${s.label}</a>`:r[0])}else o===42?t.push(u`<strong>${r[0].slice(2,-2)}</strong>`):o===96?t.push(u`<span class="inline-code">${r[0].slice(1,-1)}</span>`):t.push(u`<span class="inline-quote">${r[0]}</span>`);n=r.index+r[0].length}return n===0?e:(n<e.length&&t.push(e.slice(n)),t)}function RE({lang:e,code:t}){c.codeBlockTick;let n=bg(t,e);return u`<div class="code-block" data-lang="${e||g}">${e?u`<div class="code-block-lang">${e}</div>`:g}<pre><code>${n?W(n):t}</code></pre></div>`}function TE(e,{wrap:t=!1}={}){let n=e.split(/\n{2,}/u).filter(r=>r.trim());return n.length<2?t?u`<div class="para">${ya(e)}</div>`:ya(e):n.map(r=>u`<div class="para">${ya(r)}</div>`)}function ME({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?Pv(e):[e],r=n.length>1,o=i=>t?TE(i,{wrap:r}):ya(i),s=i=>{let a=Dv(i);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(l=>typeof l=="string"?o(l):RE(l))};return n.length===1&&typeof n[0]=="string"?s(n[0]):n.map(i=>typeof i=="string"?s(i):ME(i))}function IE(e){let t=new Set;for(let n of e)t.add(Ae(n));return[...t]}function AE(e){let t=Ae(e);return ms[t]??t}function EE(e,t){c.linksTick,c.findingIndexTick;let n=j(e),r=Vr(n)?gt(n).filter(o=>!t.has(o)):[];return r.length===0?g:u`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${r.map(o=>{let s=Gl(o),i=ro(o),a=c.currentView==="links"&&c.currentLinks?.managedId?Qt([o])[0]:null,l=i.length===0?"":` \u2014 in ${i.map(p=>`${oe(p)} (${AE(p)})`).join(", ")}`;return u`<a class="duplicate-ref" href="${_()?kd({id:o},{teamOnly:!0}):`#${jr({id:o})}`}" data-links-preview="${a?o:g}" data-preview-report="${a?.report??g}" data-preview-row="${a?.index??g}" data-preview-managed-report="${a?.managedReportId??g}" data-tooltip="${`${s}${l}`}">${IE(i).map(p=>W(ye[p]??ye.default))}<span class="duplicate-ref-id">${jl(o)??s}</span></a>`})}</div>`}function FE(e){let t=Fv(e);return t?u`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:g}function LE(e){let t=Tp()?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 OE(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 NE(e,t){let n=Array.isArray(e.evidence)?e.evidence:[];if(n.length===0)return g;let r=En(e),o=ma(e),s=t==="focus"&&o!==null,i=s?Cx(e):null;return u`<details class="evidence"><summary class="section-label">Evidence<span class="evidence-count">(${n.length})</span></summary><ol class="evidence-list">${n.map((a,l)=>{let p=ul(a),d=Hv(a,e,r,l),f=Cw(a),m=Nx(e,`ev${l}`,o,a?.file,a?.line),h=Fg(d),b=s&&vd(i,{integrity:o.integrity,file:ga(o,a?.file),range:ki(a?.line)});return u`<li class="${q({current:b})}">${s?OE(o,a,p):d?u`<a class="evidence-ref" href="${d}" target="_blank" rel="noopener">${p}</a>`:u`<span class="evidence-ref">${p}</span>`} ${m?.mark??g} ${h} ${m?.tip??g} ${f?u`<div class="evidence-note">${it(er(f))}</div>`:g} ${m?.body??g}</li>`})}</ol></details>`}function Ox(e,t){let n=ul(e);return t?u`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function BE(e,t){if(!t)return g;let n=t.slice(0,7),r=Gv(e,t);return r?u`<a href="${r}" target="_blank" rel="noopener" data-tooltip="${t}">${n}</a>`:u`<span data-tooltip="${t}">${n}</span>`}var Rd=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Ts=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,DE=u`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"><path d="M6.2 11.2H4.8a3.2 3.2 0 0 1 0-6.4h1.4"/><path d="M9.8 4.8h1.4a3.2 3.2 0 0 1 0 6.4H9.8"/><path d="M5.6 8h4.8"/></g></svg>`,PE=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>`,zE=W(Kt);function Fg(e){let t=Bv(e);return t?u`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${zE}</a>`:g}function WE(e,t,n,r){return`${j(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:""}`}var Rs={key:null,host:null};function _d(e,t){if(Rs.key===e)return;let n=Rs.host,r=e===null?null:t?.getRootNode?.()?.host??null;Rs={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function Lx(e,t,n){c.codeBlockTick;let{text:r,lines:o,startLine:s}=Wv(e,t);if(o.length===0)return g;let i=n.lastIndexOf("."),a=bg(r,i<0?"":n.slice(i+1)),l=s+o.length-1;return u`<div class="code-preview" style="${le({"--lineno-width":`${String(l).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${o.map((p,d)=>{let f=s+d,m=!!t&&f>=t.start&&f<=t.end;return u`<div class="${q({"code-preview-lineno":!0,cited:m})}">${f}</div>`})}</aside><pre class="code-preview-source"><code>${a?W(a):r}</code></pre></div>`}function Nx(e,t,n,r,o){if(c.bundleHashTick,!n||!r)return null;let s=ga(n,r);if(!s)return null;let i=ki(o),a=WE(e,t,r,i),l=c.codePreviews.has(a);c.focusCodeTick;let p=u`<button type="button" class="${q({"code-preview-btn":!0,open:l})}" data-code-preview="${a}" aria-expanded="${String(l)}" aria-label="${l?`Hide the source at ${r}`:`Show the source at ${r}`}" @mouseenter="${m=>{_d(a,m.currentTarget),ho(n.integrity,s,{reportId:n.reportId})}}" @mouseleave="${m=>{Rs.key===a&&_d(null,m.currentTarget)}}" @focus="${m=>{_d(a,m.currentTarget),ho(n.integrity,s,{reportId:n.reportId})}}" @blur="${m=>{Rs.key===a&&_d(null,m.currentTarget)}}">${PE}</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>`:Lx(m.content,i,s);return{mark:p,tip:g,body:h}}if(Rs.key!==a)return{mark:p,tip:g,body:g};let d=ho(n.integrity,s,{kick:!1,reportId:n.reportId}),f=d&&!d.loading?u`<div class="code-preview-tip" role="tooltip">${Lx(d.content,i,s)}</div>`:g;return{mark:p,tip:f,body:g}}var HE=u`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${bw}"/></svg>`,UE=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>`,Td=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 VE(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)}">${Td}${t?u`<span class="mark-btn-label">${n?"Flagged":"Flag"}</span>`:g}</button>`}function jE(e){let t=qt(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function GE(e){let t=Vl(e,En(e)),n=ul(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let o=Uv(e);return o&&r.push(o),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
|
|
132
132
|
|
|
133
|
-
`)}function qE(e){if(!c.currentWorkspace)return g;let t=e._reportName;if(!t)return g;if(_()&&!e._managedReportId)return g;let n=Pe[Ae(t)]??Pe.default,r=u`${W(n)}<span class="report-chip-label report-button-label">${oe(t)}</span>`;if(_()){let o=kd(e,{reportId:e._managedReportId});if(o)return u`<a class="report-chip report-button comment-self-ref" href="${$n(o)}">${r}</a>`}return u`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${j(e)}" data-managed-report="${_()?e._managedReportId:g}">${r}</button>`}function Bx(e,t,n,r,o=null){let s=o==="table"?g:qE(r),i=he(r),a=!dr(r),l=!_t(r),p=i?.color??null,d=i?.comment??"",f=i?.fix??"",m=_()?"View comments":d?`Edit comment: ${d}`:"Add comment",h=f?`Edit fix link: ${f}`:"Add fix link (PR URL, etc.)",b=o==="focus"&&s===g,y=_()?"Comments":d?"Edit comment":"Comment",w=f?"Edit fix link":"Fix link",v=u`<button type="button" ?disabled="${a}" class="${q({"mark-comment":!0,"has-comment":d})}" data-tooltip="${d&&!_()?m:g}" aria-label="${m}">${Rd}${b?u`<span class="mark-btn-label">${y}</span>`:g}</button>`,x=u`<button type="button" ?disabled="${l}" class="${q({"mark-fix":!0,"has-fix":f})}" data-tooltip="${f?h:g}" aria-label="${h}">${Ts}${b?u`<span class="mark-btn-label">${w}</span>`:g}</button>`,k=jE(r,b),$=u`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${Cd}${b?u`<span class="mark-btn-label">Copy</span>`:g}</button>`,S=kd(r)?u`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${PE}${b?u`<span class="mark-btn-label">Link</span>`:g}</button>`:g,C=_()?De({repo:{github:r.repo?.github||r._repoFallback}}):Y0(r),R=Kv(C,{title:GE(r),body:KE(r),labels:rx(r.isSecurity===!0,c.githubNewIssueLabels)}),L=_()&&c.managedSession&&!c.managedSession.publicShare&&c.currentManagedTeam,A=u`${VE}${b?u`<span class="mark-btn-label">Issue</span>`:g}`,E=Lc(r)?g:R?L?u`<button type="button" class="mark-issue" data-issue-form="${R}" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</button>`:u`<a class="mark-issue" href="${R}" target="_blank" rel="noopener" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</a>`:g,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">${UE}${b?u`<span class="mark-btn-label">Claude</span>`:g}</button>`,I=u`<color-marker .selected="${p}" .disabled="${l}"></color-marker>`,U=ws(e)!==e,K=e.linkedTabs?"change triage state for linked findings":U?"change triage state for App and own-source findings":n.hasConflict?"change triage state (colors mismatch \u2014 acts per-tab)":t.length>1?"change triage state for the whole group":"change triage state";return u`<div class="finding-actions">${s}<div class="finding-action-controls"><span class="mark-action-group">${v}${x}${k}</span><span class="mark-action-group">${$}${S}${E}${M}</span>${I}${XE(e,K,o,n,r)}</div></div>`}function YE(e){if(e.newState!=="open")return;let t=e.currentTarget,r=t.getRootNode().querySelector?.(`[popovertarget="${t.id}"]`);if(!r)return;let o=r.getBoundingClientRect(),s=t.offsetWidth||110,i=t.offsetHeight||100,a=4,l=o.right-s;l<4&&(l=4),l+s>window.innerWidth-4&&(l=window.innerWidth-s-4);let p=o.bottom+a;p+i>window.innerHeight-4&&o.top>i+a&&(p=o.top-i-a),t.style.top=`${p}px`,t.style.left=`${l}px`}function XE(e,t,n,r,o){let s=ie(e),i=!_t(o)||da(e,r).length===0,a=i?null:cg(e,r,o),l={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},p={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Delete",ignored:"Ignore"},d=!!c.shownTriage,f=d?l[c.shownTriage]:null,m=["inprogress","fixed","invalid","deleted","ignored"],b=d&&!(n==="focus")?[{key:"restore",label:"Restore"},...m.filter(v=>v!==c.shownTriage).map(v=>({key:v,label:p[v]}))]:m.map(v=>({key:v,label:p[v]})),y=["mark-triage-menu"];d&&y.push("with-label",`triage-state-${c.shownTriage}`);let w=`triage-menu-${s.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return u`<div class="triage-menu-wrap"><button type="button" class="${y.join(" ")}" popovertarget="${w}" popovertargetaction="toggle" aria-label="${t}" ?disabled="${i}">${f?u`<span class="mark-triage-label">${f}</span>`:g} <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="${w}" class="triage-menu" data-gid="${s}" role="menu" @beforetoggle="${YE}">${b.map(v=>u`<button type="button" class="${q({"triage-menu-item":!0,[`triage-menu-${v.key}`]:!0,active:a===v.key})}" data-triage-action="${v.key}" ?disabled="${i}" role="menuitem">${v.label}</button>`)}</div></div>`}function JE(e,t){let n=!!e?.comment,r=!!(e?.fix||tn(t)),o=e?.flagged===!0;return!n&&!r&&!o?g:u`<span class="tab-marks">${n?u`<span class="has-comment" role="img" aria-label="Has a comment">${Rd}</span>`:g}${r?u`<span class="has-fix" role="img" aria-label="Has a fix link">${Ts}</span>`:g}${o?u`<span class="flagged" role="img" aria-label="Flagged">${Td}</span>`:g}</span>`}function Dx(e,t,n){let{app:r,source:o}=K0(e),s=i=>ZE(i,j(i)===t,n);return u`<div class="tabs">${r.map(s)} ${r.length>0&&o.length>0?u`<span class="tab-level-separator" aria-hidden="true">•</span>`:g} ${o.map(s)}</div>`}function ZE(e,t,n){let r=j(e),o=he(e),s=o?.color,i=ca(e,o),a=["tab",`tab-severity-${de(e,c.severityMode)}`];t&&a.push("active"),s&&a.push(`tab-mark-${s}`),i==="ignored"&&!n.allIgnored?a.push("tab-ignored"):i&&i!=="ignored"&&n.commonTriage===null&&a.push(`tab-${i}`);let l=Pc(e),p=l?Pe[l]:null,d=!p&&e.confidence!=null;p?a.push("tab-with-analyzer"):d&&a.push("tab-with-confidence");let f=p?u`<span class="tab-analyzer" role="img" aria-label="${ms[l]}">${W(p)}</span>`:d?u`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:g;return u`<button type="button" class="${a.join(" ")}" data-tid="${r}" aria-pressed="${t}" aria-description="${s?`${s} color label`:g}"><span class="tab-label"><span class="tab-severity">${Eg(e,{variant:"tab"})}</span><span class="tab-indicators">${JE(o,e)}</span></span>${f}</button>`}function QE(e){if(c.viewMode==="table"||c.viewMode==="focus"){let t=e.confidence*10;return u`<div class="${`conf-ring ${de(e,c.severityMode)}`}"><svg viewBox="0 0 36 36" aria-hidden="true"><circle class="conf-ring-track" cx="18" cy="18" r="15.9155"/><circle class="conf-ring-arc" cx="18" cy="18" r="15.9155" style="stroke-dasharray: ${t} 100"/></svg> <span>${e.confidence}<small>/10</small></span></div><div class="value-label">Confidence</div>`}return u`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}var eF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function tF(e){if(or(e))return g;let t=e?.name;if(typeof t!="string"||!eF.test(t))return g;let n=e?.version,r=typeof n=="string"&&n.length>0,o=r?`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`:`https://www.npmjs.com/package/${t}`,s=r?`${t}@${n}`:t;return u`<span class="line-num"><a class="npm-link" href="${o}" target="_blank" rel="noopener noreferrer">npm: ${s}</a></span>`}function nF(e,t,n,r,o,s){let i=j(e),a=he(e),l=a?.comment??"",p=a?.fix??"",d=tn(e),f=Lc(e),m=Vl(e,En(e)),h=Ox(e,m),b=li(e),y=ma(e),w=Nx(e,"loc",y,e.file,e.line),v=Fg(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"?tF(e.package?.npm):g,R=g;if(o!=="focus"&&_()&&w)R=u`<button type="button" class="finding-code-btn" data-finding-code-report="${y.reportId}" data-finding-code-file="${e.file}" data-finding-code-line="${e.line??""}" aria-label="${`Open full source for ${e.file}`}">Code</button>`;else if(o!=="focus"&&!_()&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){c.bundleHashTick;let K=new Set(e._bundleHashes),Q=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}=xw(e),E=Sw(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} ${Eg(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?g:QE(e)} ${LE(e)} ${R}</div><div class="finding-body"><div class="line-row">${x} ${w?.tip??g} ${C} ${S?u`<span class="line-num discovered-in">(found analyzing ${S})</span>`:g} ${k?u`<span class="run-meta">${k}</span>`:g}</div>${w?.body??g} ${L?u`<div class="desc-title">${ya(L)}</div>`:g} ${I.map(K=>u`<div class="desc">${it(er(K.body))}</div>`)} ${BE(e,o)} ${U.map(K=>K.label===null?u`<div class="desc">${it(er(K.body))}</div>`:ba(K.label,K.body))} ${e.impact?ba("Impact",zr(e.impact,e)):g} ${e.reproduction?ba("Reproduction",zr(e.reproduction,e),"section",{collapsible:!0}):g} ${e.recommendation?ba("Recommendation",zr(e.recommendation,e),"recommendation",{collapsible:!0}):g} ${e.confidenceReason?u`<div class="conf-reason">${it(zr(e.confidenceReason,e))}</div>`:g} ${OE(e)} ${e.revalidateRecommendation&&Tp()?ba("Revalidation recommendation",zr(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):g} ${Bo(e)&&e.correctedSeverityReason?u`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${it(e.correctedSeverityReason)}</div>`:g} ${FE(e,s)} ${_()?Mx(e).map(K=>u`<div class="comment-block">${Cv(K,Sd(K.body))}</div>`):l?u`<div class="comment-block"><span class="comment-label">Comment:</span> ${Sd(l)}</div>`:g} ${f?u`<div class="fix-block"><span class="fix-label">Issue:</span><managed-fix-link .url="${f.url}"></managed-fix-link></div>`:g} ${p?u`<div class="fix-block"><span class="fix-label">Fix:</span> ${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 kU(e){let t=["finding",...rF(e)];return ur(e).length>1&&t.push("multi-case"),t}function xU(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 ${DE(i.repo?.github,i.commitHash)}</div>`:g,p=c.currentWorkspace&&l!==g;return u`${o.map((d,f)=>nF(d,j(d)===a,f,o.length,n,s))} ${p?u`<div class="marks-commit-row">${l}</div>`:g}<div class="marks"><div class="marks-left">${p?g:l} ${o.length>1?Dx(o,a,r):g}</div>${Bx(e,o,r,i,n)}</div>`}function rF(e){let t=Fe(e),n=e.some(o=>o.critical||de(o,c.severityMode)==="critical"),r=[];return n&&r.push("is-critical"),t.hasConflict?r.push("has-conflict"):t.commonColor&&r.push(`mark-${t.commonColor}`),c.shownTriage&&r.push(`triage-${c.shownTriage}`),r}function SU(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=Vl(s,En(s));return u`<div class="row-score">${Eg(s,{variant:"compact"})} ${s.confidence===void 0?g:u`<span class="row-conf"><strong>${s.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${i}</span> ${a?u`<span class="row-type">${a}</span>`:g}</div><div class="meta-row"><span class="row-loc">${Ox(s,d)}${p}</span> ${Fg(d)}<div class="marks">${Bx(e,n,t,r,"table")}</div></div>${n.length>1?u`<div class="tabs-row">${Dx(n,o,t)}</div>`:g}</div>`}function Px(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 zx(e,t){let n=Object.keys(e).toSorted(),r=new Map;for(let d of n)for(let f of e[d].imports??[]){let m=r.get(f)??[];m.push(d),r.set(f,m)}let o=c.filesSearch.trim().toLowerCase(),s=o?n.filter(d=>d.toLowerCase().includes(o)):n,i=d=>e[d]?u`<a href="${`#${Ip(d)}`}"><span class="name">${d}</span></a>`:u`<span class="name">${d}</span>`,a=d=>{let f=t.get(d);if(!f)return null;let m=et.filter(h=>(f[h]??0)>0);return m.length===0?null:u`<span class="tree-count-chips">${m.map(h=>u`<span class="${`tree-count-chip ${h}`}">${f[h]} ${h.replaceAll("_"," ")}</span>`)}</span>`},l=d=>{let f=t.get(d);return f?et.reduce((m,h)=>m+(f[h]??0),0):0},p=u`<div class="tree-toolbar"><view-mode-buttons modes="table,list" kind="files"></view-mode-buttons><div class="search-row"><toolbar-search kind="files"></toolbar-search><span class="result-count">${s.length} of ${n.length}</span></div></div>`;if(c.filesViewMode==="table"){let d=c.filesSelectedFile&&e[c.filesSelectedFile]&&s.includes(c.filesSelectedFile)?c.filesSelectedFile:null;return u`<div class="${d?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${p}<div class="${d?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(h=>{let b=l(h),y=h===d,w=Ul(e[h].size);return u`<div class="${`tree-table-row${y?" selected":""}${b===0?" clean":""}`}" data-tree-select="${h}"><span class="tree-table-name" data-tooltip-truncated data-tooltip="${h}">${h}</span> ${a(h)??u`<span class="tree-table-clean-marker">—</span>`} ${w?u`<span class="tree-table-size">${w}</span>`:g}</div>`})}</div>${d?u`<aside class="tree-table-details" id="tree-table-details"><header class="tree-table-details-bar"><span class="tree-table-details-label">Details</span> <button type="button" class="tree-table-details-close" data-tree-deselect aria-label="Close details">×</button></header><div class="tree-table-details-body">${oF(e[d],d,r.get(d)??[],i)}</div></aside>`:g}</div></div>`}return u`<div class="tree-view">${p} ${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(d=>{let f=e[d],m=r.get(d)??[],h=Ul(f.size);return u`<section class="tree-file" id="${Ip(d)}"><div class="tree-file-header"><span class="name">${d}</span> ${a(d)} ${h?u`<span class="tree-file-size">${h}</span>`:g} ${Px(f.fileHash)}</div>${Wx(f,m,i)}</section>`})}</div>`}function Wx(e,t,n){return u`${e.fileHash||e.treeHash?u`<div class="tree-hashes hashes">${e.fileHash?u`<div class="tree-hash">file: ${e.fileHash}</div>`:g} ${e.treeHash?u`<div class="tree-hash">tree: ${e.treeHash}</div>`:g}</div>`:g} ${e.imports?.length>0?u`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${t.length>0?u`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${e.exports?.length>0?u`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(r=>u`<li><span class="name">${r}</span></li>`)}</ul></div>`:g}`}function oF(e,t,n,r){let o=Ul(e.size);return u`<div class="tree-detail-name"><span class="name">${t}</span> ${o?u`<span class="tree-detail-size">${o}</span>`:g} ${Px(e.fileHash)}</div>${Wx(e,n,r)}`}var wa=null,Hx=null;function Ms(){return Hx}function sF(){return wa||(wa=(async()=>{let e="./graph.js";try{let t=await import(e);return Hx=t,t}catch(t){throw wa=null,t}})(),wa)}async function Lg(e,t,n,r,o){try{let s=await sF(),i=s.buildGraphFromPrep(t);J(u`<graph-layout .graph="${i}" .options="${n}"></graph-layout>`,e);let a=e.querySelector("graph-layout");return await a.updateComplete,r(),o(),s.attachGraph2Interaction(e,i,r,o),a}catch(s){let i=s instanceof Error?s.message:String(s);return e.textContent=`Graph failed to load: ${i}`,null}}var va=null,hr=null;function Ux(){hr=null}function iF(){return va||(va=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw va=null,t}})(),va)}function aF(e){let t=we(e);if(t.size===0)return t;let n=[...t.keys()],{stripped:r}=Qn(n),o=new Map;for(let s=0;s<n.length;s++)o.set(r[s],t.get(n[s]));return o}async function Vx(e,t){let n=t?.integrity??"";(!hr||hr.integrity!==n||(t?.managedId||hr.managedId)&&hr.details!==t)&&(hr={integrity:n,managedId:t?.managedId,details:t?.managedId?t:null,promise:lF(t,n)});try{let r=await hr.promise;return!e.isConnected||e.contains(r)||e.replaceChildren(r),r}catch(r){hr=null;let o=r instanceof Error?r.message:String(r);return e.textContent=`Terminal failed to load: ${o}`,null}}async function lF(e,t){return(await iF()).createTerminalElement(aF(e),t)}function Is(e,t){let n=e.find(r=>r.integrity===t);return e.filter(r=>r.integrity!==t&&(n?.managedId?r.managedId&&n.repoId!=null&&r.repoId===n.repoId:!r.managedId))}function br(e){return{managedId:e.id,slug:e.slug,integrity:e.integrity,kind:e.kind,summary:e.summary,commitInfo:e.commitInfo??null,name:e.filename,size:e.byteSize,repoId:e.repoId,repoFullName:e.repoFullName,repoDirectory:e.repoDirectory??""}}function yr(e){return e.currentView!=="bundles"?null:e.bundleDetails?e.bundleDetails.managedId??null:e.bundles?.find(t=>t.integrity===e.selectedBundle)?.managedId??null}function wr(e,t,n,r="overview",o=null,s=[t]){if(!t?.managedId)return null;let i=e.find(l=>l.id===n&&l.bundles?.some(p=>p.id===t.managedId));if(n!=null&&!i)return null;let a=[t,...s.filter(l=>l.managedId&&l.managedId===o?.compareId)];return Xe({view:"bundles",teamId:i?.id??null,bundleId:t.managedId,bundleTab:r,...o},e,a.map(l=>({id:l.managedId,slug:l.slug})))}function Md(e,t=e.bundleDetailsTab){if(t!=="code")return null;let n=e.bundleCodeFileRequest;if(n?.bundle===e.selectedBundle){if(n.file==null)return null;let{bundle:s,...i}=n;return i}if(!e.bundleSourceFile||e.bundleDetails?.integrity!==e.selectedBundle)return null;let r=Rl(Lt(e.bundleDetails)).numbers.get(e.bundleSourceFile);if(r==null)return null;let o=e.bundleSourceTargetLine;return o?.bundle!==e.selectedBundle||o.path!==e.bundleSourceFile?{file:r}:{file:r,line:o.line,...o.end>o.line?{endLine:o.end}:{}}}function Og(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,...Wo(n.mode)};let r=Is(e.bundles??[],e.selectedBundle).find(o=>o.integrity===n.target);return r?.managedId?{compareId:r.managedId,...Wo(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,...Wo(o?.mode??"code")};if(t==="review"&&r){let{bundle:s,started:i,user:a,resume:l,...p}=r;return p}return Md(e,t)??Og(e,t)}function WU(e,t,n=()=>null){let r=e.bundles?.find(a=>a.integrity===e.selectedBundle)?.npm;if(!r||t===e.bundleDetailsTab)return;let o=vr(e,t);if(t==="review"){let a=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.started&&e.npmReview.user===e.managedSession?.id;e.npmReview={...a?e.npmReview:{bundle:e.selectedBundle,...o},resume:!0}}if(t!=="compare")return;let s=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.reviewPackage===r.name?e.npmReview:null,i=o?.compareSpec??s?.reviewSpec??n(r);i&&(e.bundleDetailsTab==="review"||!o?.compareSpec)&&(e.bundleCompare={bundle:e.selectedBundle,target:i,mode:o?.compareMode??"overview"})}function As(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,br(t)])).values()]}var Ng=(e,t,n)=>{for(let r of t)if(r[0]===e)return(0,r[1])();return n?.()};var $a=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let r of n)r._$AO?.(t,!1),$a(r,t);return!0},Id=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},jx=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),uF(t)}};function cF(e){this._$AN!==void 0?(Id(this),this._$AM=e,jx(this)):this._$AM=e}function dF(e,t=!1,n=0){let r=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(r))for(let s=n;s<r.length;s++)$a(r[s],!1),Id(r[s]);else r!=null&&($a(r,!1),Id(r));else $a(this,e)}var uF=e=>{e.type==gw.CHILD&&(e._$AP??=dF,e._$AQ??=cF)},Ad=class extends hw{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,n,r){super._$AT(t,n,r),jx(this),this.isConnected=t._$AU}_$AO(t,n=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),n&&($a(this,t),Id(this))}setValue(t){if(Hw(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 Bg=new WeakMap,Gx=ip(class extends Ad{render(e){return g}update(e,[t]){let n=t!==this.G;return n&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),g}rt(e){if(this.G!==void 0)if(this.isConnected||(e=void 0),typeof this.G=="function"){let t=this.ht??globalThis,n=Bg.get(t);n===void 0&&(n=new WeakMap,Bg.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"?Bg.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var Ed=2**20,Kx=Math.floor(2**25/15);function pF(e){let t=[];for(let n=0;n<e.length;){let r=Math.min(n+Ed,e.length);r<e.length&&e.codePointAt(r-1)>65535&&r--,t.push(e.slice(n,r)),n=r}return t}function Fd(e,t=!1){return e.length<=Ed&&!xs(e)?e:yx(e,t).flatMap(n=>typeof n=="string"?pF(n):[n])}var fF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu,qx=200;function mF(e){let t=[...e];return t.length>qx?`${t.slice(0,qx-1).join("").trimEnd()}\u2026`:e}var Ld=e=>e.split("/").map(encodeURIComponent).join("/"),Dg=(e,t)=>`https://github.com/${Ld(e)}/releases/tag/${Ld(t)}`;function Yx(e,t){return t&&e?.sha===t&&Array.isArray(e.tags)?e.tags.filter(n=>typeof n=="string"&&n):[]}function Es(e,t,n=null){let o=typeof e?.github=="string"&&typeof n=="string"&&n.toLowerCase()===e.github.toLowerCase()?Yx(e,t):[],s=t&&e?.sha===t&&typeof e.details?.subject=="string"?e.details:null;if(!(!s&&o.length===0))return JSON.stringify({tags:o,...s?{title:mF(s.subject),authorName:s.authorName,authorLogin:s.authorLogin,date:s.committedAt??s.authoredAt}:{}})}function Od(e,t="",n=null){let r=[],o=De(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=De({repo:{github:n?.github}}),f=d?Yx(n,a):[];r.push({label:"GitHub",text:o+(i?`/${i}`:""),href:a||i?`${p}/tree/${a??"HEAD"}${l?`/${l}`:""}`:p,...a?{commit:{hash:a,text:a.slice(0,7),href:`${p}/commit/${a}`,...f.length>0?{tags:f.map(m=>({name:m,href:Dg(d,m)}))}:{}}}:{}})}let s=e?.package?.npm;if(typeof s?.name=="string"&&fF.test(s.name)){let i=typeof s.version=="string"?s.version.trim():"";r.push({label:"npm",text:s.name+(i?`@${i}`:""),href:`https://www.npmjs.com/package/${s.name}${i?`/v/${encodeURIComponent(i)}`:""}`})}return r}var gF=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,Xx=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,zg=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,Pg=e=>JSON.stringify(e).replaceAll(gF,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);function $e(e){let t=Xx(e,64);return t===e?Pg(e):`${Pg(t)}...`}var Nd=class extends Error{constructor(t,n){super(n===void 0?t:`${t} at line ${n+1}`),this.name=new.target.name,this.line=n}};var Wt=class extends Nd{};function se(e,t,n){if(!e)throw new Wt(typeof n=="function"?n():n,t.line)}function $r(e,t){t.lastIndex=e.pos;let n=t.exec(e.text);return n!==null&&(e.pos=t.lastIndex),n}var w8=2**20;var hF=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,bF=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,yF=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,wF=[31,28,31,30,31,30,31,31,30,31,30,31];function Wg(e){let t=hF.exec(e);if(t===null)return;let[n,r,o,s,i,a]=[Number(t[1]),Number(t[2]),Number(t[3]),Number(t[5]),Number(t[6]),Number(t[7])],l=n%4===0&&n%100!==0||n%400===0;if(r<1||r>12||o<1||o>(r===2&&l?29:wF[r-1])||s>23||i>59||a>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let p=[];(t[4]==="t"||t[9]==="z")&&p.push('a date-time with a lower-case "t" or "z" is not supported'),n===0&&p.push("the year 0000 is not supported"),a===60&&p.push("a leap second is not supported");let d=t[10]===void 0?0:(t[10]==="-"?-1:1)*(Number(t[11])*60+Number(t[12]));return{year:n,month:r,day:o,hour:s,minute:i,second:a,fraction:t[8]?.slice(1)??"",offset:d,unsupported:p}}var Bd=class{constructor(t){if(typeof t!="string"||Wg(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}=Wg(this.text),p=new Date(0);return p.setUTCFullYear(t,n-1,r),p.setUTCHours(o,s-l,i,Number(a.padEnd(3,"0").slice(0,3))),p}};function Zx(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let n=Wg(e);if(n?.unsupported.length===0)return new Bd(e);let r=/^\d{4}-\d\d-\d\d$/u.test(e)&&/^ \d\d:/u.test(t.text.slice(t.pos,t.pos+4));throw se(!r,t,'a date-time with a space in place of "T" is not supported'),se(!bF.test(e),t,()=>`local dates and times are not supported: ${$e(e)}`),se(!yF.test(e),t,()=>`a date-time or a time without seconds is not supported: ${$e(e)}`),se(n?.unsupported.length!==1,t,()=>`${n.unsupported[0]}: ${$e(e)}`),new Wt(`${$e(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,t.line)}var vF=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,$F=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,kF=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,Qx=2n**63n,eS=BigInt(Number.MAX_SAFE_INTEGER),xF={__proto__:null,x:16,o:21,b:63};function nS(e,t){let n=vF.test(e);if(!n&&!$F.test(e))return;let r=e.replaceAll("_",""),o=n?r.replace(/^[+-]/u,""):r.slice(2).replace(/^0+/u,""),i=o.length<=(n?19:xF[r[1]])?BigInt(n?r:`${r.slice(0,2)}${o||"0"}`):void 0;return se(i!==void 0&&i>=-Qx&&i<Qx,t,()=>`integer out of range ${$e(e)}`),i>=-eS&&i<=eS?Number(i):i}var tS={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};function rS(e){if(typeof e!="string"||!kF.test(e))return;if(e in tS)return tS[e];let t=Number(e.replaceAll("_","")),n=!/[1-9]/u.test(e.split(/[Ee]/u)[0]);return Number.isFinite(t)&&(t!==0||n)?t:null}var Dd=class{constructor(t){let n=rS(t);if(n==null)throw new TypeError("expected a TOML float that a double can hold");this.text=t,this.value=n,Object.freeze(this)}valueOf(){return this.value}toString(){return this.text}toJSON(){return this.value}};function oS(e,t){let n=rS(e);if(n!==void 0)return se(n!==null,t,()=>`float out of range ${$e(e)}`),new Dd(e)}var aS=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 lS="a carriage return must be followed by a line feed";function cS(e,t,n){throw new Wt(t==="\r"?lS:`${zg(t)} is not allowed in ${n}`,e.line)}var zd=e=>e.pos>=e.text.length||e.text[e.pos]===`
|
|
133
|
+
`)}function KE(e){if(!c.currentWorkspace)return g;let t=e._reportName;if(!t)return g;if(_()&&!e._managedReportId)return g;let n=Pe[Ae(t)]??Pe.default,r=u`${W(n)}<span class="report-chip-label report-button-label">${oe(t)}</span>`;if(_()){let o=kd(e,{reportId:e._managedReportId});if(o)return u`<a class="report-chip report-button comment-self-ref" href="${$n(o)}">${r}</a>`}return u`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${j(e)}" data-managed-report="${_()?e._managedReportId:g}">${r}</button>`}function Bx(e,t,n,r,o=null){let s=o==="table"?g:KE(r),i=he(r),a=!dr(r),l=!_t(r),p=i?.color??null,d=i?.comment??"",f=i?.fix??"",m=_()?"View comments":d?`Edit comment: ${d}`:"Add comment",h=f?`Edit fix link: ${f}`:"Add fix link (PR URL, etc.)",b=o==="focus"&&s===g,y=_()?"Comments":d?"Edit comment":"Comment",w=f?"Edit fix link":"Fix link",v=u`<button type="button" ?disabled="${a}" class="${q({"mark-comment":!0,"has-comment":d})}" data-tooltip="${d&&!_()?m:g}" aria-label="${m}">${Rd}${b?u`<span class="mark-btn-label">${y}</span>`:g}</button>`,x=u`<button type="button" ?disabled="${l}" class="${q({"mark-fix":!0,"has-fix":f})}" data-tooltip="${f?h:g}" aria-label="${h}">${Ts}${b?u`<span class="mark-btn-label">${w}</span>`:g}</button>`,k=VE(r,b),$=u`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${Cd}${b?u`<span class="mark-btn-label">Copy</span>`:g}</button>`,S=kd(r)?u`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${DE}${b?u`<span class="mark-btn-label">Link</span>`:g}</button>`:g,C=_()?De({repo:{github:r.repo?.github||r._repoFallback}}):Y0(r),R=Kv(C,{title:jE(r),body:GE(r),labels:rx(r.isSecurity===!0,c.githubNewIssueLabels)}),L=_()&&c.managedSession&&!c.managedSession.publicShare&&c.currentManagedTeam,A=u`${UE}${b?u`<span class="mark-btn-label">Issue</span>`:g}`,E=Lc(r)?g:R?L?u`<button type="button" class="mark-issue" data-issue-form="${R}" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</button>`:u`<a class="mark-issue" href="${R}" target="_blank" rel="noopener" data-tooltip="${b?g:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${A}</a>`:g,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">${HE}${b?u`<span class="mark-btn-label">Claude</span>`:g}</button>`,I=u`<color-marker .selected="${p}" .disabled="${l}"></color-marker>`,U=ws(e)!==e,K=e.linkedTabs?"change triage state for linked findings":U?"change triage state for App and own-source findings":n.hasConflict?"change triage state (colors mismatch \u2014 acts per-tab)":t.length>1?"change triage state for the whole group":"change triage state";return u`<div class="finding-actions">${s}<div class="finding-action-controls"><span class="mark-action-group">${v}${x}${k}</span><span class="mark-action-group">${$}${S}${E}${M}</span>${I}${YE(e,K,o,n,r)}</div></div>`}function qE(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 YE(e,t,n,r,o){let s=ie(e),i=!_t(o)||da(e,r).length===0,a=i?null:cg(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="${qE}">${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 XE(e,t){let n=!!e?.comment,r=!!(e?.fix||tn(t)),o=e?.flagged===!0;return!n&&!r&&!o?g:u`<span class="tab-marks">${n?u`<span class="has-comment" role="img" aria-label="Has a comment">${Rd}</span>`:g}${r?u`<span class="has-fix" role="img" aria-label="Has a fix link">${Ts}</span>`:g}${o?u`<span class="flagged" role="img" aria-label="Flagged">${Td}</span>`:g}</span>`}function Dx(e,t,n){let{app:r,source:o}=K0(e),s=i=>JE(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 JE(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=Pc(e),p=l?Pe[l]:null,d=!p&&e.confidence!=null;p?a.push("tab-with-analyzer"):d&&a.push("tab-with-confidence");let f=p?u`<span class="tab-analyzer" role="img" aria-label="${ms[l]}">${W(p)}</span>`:d?u`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:g;return u`<button type="button" class="${a.join(" ")}" data-tid="${r}" aria-pressed="${t}" aria-description="${s?`${s} color label`:g}"><span class="tab-label"><span class="tab-severity">${Eg(e,{variant:"tab"})}</span><span class="tab-indicators">${XE(o,e)}</span></span>${f}</button>`}function ZE(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 QE=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function eF(e){if(or(e))return g;let t=e?.name;if(typeof t!="string"||!QE.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 tF(e,t,n,r,o,s){let i=j(e),a=he(e),l=a?.comment??"",p=a?.fix??"",d=tn(e),f=Lc(e),m=Vl(e,En(e)),h=Ox(e,m),b=li(e),y=ma(e),w=Nx(e,"loc",y,e.file,e.line),v=Fg(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"?eF(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}=xw(e),E=Sw(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} ${Eg(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?g:ZE(e)} ${FE(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>`)} ${NE(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} ${LE(e)} ${e.revalidateRecommendation&&Tp()?ba("Revalidation recommendation",zr(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):g} ${Bo(e)&&e.correctedSeverityReason?u`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${it(e.correctedSeverityReason)}</div>`:g} ${EE(e,s)} ${_()?Mx(e).map(K=>u`<div class="comment-block">${Cv(K,Sd(K.body))}</div>`):l?u`<div class="comment-block"><span class="comment-label">Comment:</span> ${Sd(l)}</div>`:g} ${f?u`<div class="fix-block"><span class="fix-label">Issue:</span><managed-fix-link .url="${f.url}"></managed-fix-link></div>`:g} ${p?u`<div class="fix-block"><span class="fix-label">Fix:</span> ${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 kU(e){let t=["finding",...nF(e)];return ur(e).length>1&&t.push("multi-case"),t}function xU(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 ${BE(i.repo?.github,i.commitHash)}</div>`:g,p=c.currentWorkspace&&l!==g;return u`${o.map((d,f)=>tF(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?Dx(o,a,r):g}</div>${Bx(e,o,r,i,n)}</div>`}function nF(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 SU(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=Vl(s,En(s));return u`<div class="row-score">${Eg(s,{variant:"compact"})} ${s.confidence===void 0?g:u`<span class="row-conf"><strong>${s.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${i}</span> ${a?u`<span class="row-type">${a}</span>`:g}</div><div class="meta-row"><span class="row-loc">${Ox(s,d)}${p}</span> ${Fg(d)}<div class="marks">${Bx(e,n,t,r,"table")}</div></div>${n.length>1?u`<div class="tabs-row">${Dx(n,o,t)}</div>`:g}</div>`}function Px(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 zx(e,t){let n=Object.keys(e).toSorted(),r=new Map;for(let d of n)for(let f of e[d].imports??[]){let m=r.get(f)??[];m.push(d),r.set(f,m)}let o=c.filesSearch.trim().toLowerCase(),s=o?n.filter(d=>d.toLowerCase().includes(o)):n,i=d=>e[d]?u`<a href="${`#${Ip(d)}`}"><span class="name">${d}</span></a>`:u`<span class="name">${d}</span>`,a=d=>{let f=t.get(d);if(!f)return null;let m=et.filter(h=>(f[h]??0)>0);return m.length===0?null:u`<span class="tree-count-chips">${m.map(h=>u`<span class="${`tree-count-chip ${h}`}">${f[h]} ${h.replaceAll("_"," ")}</span>`)}</span>`},l=d=>{let f=t.get(d);return f?et.reduce((m,h)=>m+(f[h]??0),0):0},p=u`<div class="tree-toolbar"><view-mode-buttons modes="table,list" kind="files"></view-mode-buttons><div class="search-row"><toolbar-search kind="files"></toolbar-search><span class="result-count">${s.length} of ${n.length}</span></div></div>`;if(c.filesViewMode==="table"){let d=c.filesSelectedFile&&e[c.filesSelectedFile]&&s.includes(c.filesSelectedFile)?c.filesSelectedFile:null;return u`<div class="${d?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${p}<div class="${d?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(h=>{let b=l(h),y=h===d,w=Ul(e[h].size);return u`<div class="${`tree-table-row${y?" selected":""}${b===0?" clean":""}`}" data-tree-select="${h}"><span class="tree-table-name" data-tooltip-truncated data-tooltip="${h}">${h}</span> ${a(h)??u`<span class="tree-table-clean-marker">—</span>`} ${w?u`<span class="tree-table-size">${w}</span>`:g}</div>`})}</div>${d?u`<aside class="tree-table-details" id="tree-table-details"><header class="tree-table-details-bar"><span class="tree-table-details-label">Details</span> <button type="button" class="tree-table-details-close" data-tree-deselect aria-label="Close details">×</button></header><div class="tree-table-details-body">${rF(e[d],d,r.get(d)??[],i)}</div></aside>`:g}</div></div>`}return u`<div class="tree-view">${p} ${s.length===0?u`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(d=>{let f=e[d],m=r.get(d)??[],h=Ul(f.size);return u`<section class="tree-file" id="${Ip(d)}"><div class="tree-file-header"><span class="name">${d}</span> ${a(d)} ${h?u`<span class="tree-file-size">${h}</span>`:g} ${Px(f.fileHash)}</div>${Wx(f,m,i)}</section>`})}</div>`}function Wx(e,t,n){return u`${e.fileHash||e.treeHash?u`<div class="tree-hashes hashes">${e.fileHash?u`<div class="tree-hash">file: ${e.fileHash}</div>`:g} ${e.treeHash?u`<div class="tree-hash">tree: ${e.treeHash}</div>`:g}</div>`:g} ${e.imports?.length>0?u`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${t.length>0?u`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(r=>u`<li>${n(r)}</li>`)}</ul></div>`:g} ${e.exports?.length>0?u`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(r=>u`<li><span class="name">${r}</span></li>`)}</ul></div>`:g}`}function rF(e,t,n,r){let o=Ul(e.size);return u`<div class="tree-detail-name"><span class="name">${t}</span> ${o?u`<span class="tree-detail-size">${o}</span>`:g} ${Px(e.fileHash)}</div>${Wx(e,n,r)}`}var wa=null,Hx=null;function Ms(){return Hx}function oF(){return wa||(wa=(async()=>{let e="./graph.js";try{let t=await import(e);return Hx=t,t}catch(t){throw wa=null,t}})(),wa)}async function Lg(e,t,n,r,o){try{let s=await oF(),i=s.buildGraphFromPrep(t);J(u`<graph-layout .graph="${i}" .options="${n}"></graph-layout>`,e);let a=e.querySelector("graph-layout");return await a.updateComplete,r(),o(),s.attachGraph2Interaction(e,i,r,o),a}catch(s){let i=s instanceof Error?s.message:String(s);return e.textContent=`Graph failed to load: ${i}`,null}}var va=null,hr=null;function Ux(){hr=null}function sF(){return va||(va=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw va=null,t}})(),va)}function iF(e){let t=we(e);if(t.size===0)return t;let n=[...t.keys()],{stripped:r}=Qn(n),o=new Map;for(let s=0;s<n.length;s++)o.set(r[s],t.get(n[s]));return o}async function Vx(e,t){let n=t?.integrity??"";(!hr||hr.integrity!==n||(t?.managedId||hr.managedId)&&hr.details!==t)&&(hr={integrity:n,managedId:t?.managedId,details:t?.managedId?t:null,promise:aF(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 aF(e,t){return(await sF()).createTerminalElement(iF(e),t)}function Is(e,t){let n=e.find(r=>r.integrity===t);return e.filter(r=>r.integrity!==t&&(n?.managedId?r.managedId&&n.repoId!=null&&r.repoId===n.repoId:!r.managedId))}function br(e){return{managedId:e.id,slug:e.slug,integrity:e.integrity,kind:e.kind,summary:e.summary,commitInfo:e.commitInfo??null,name:e.filename,size:e.byteSize,repoId:e.repoId,repoFullName:e.repoFullName,repoDirectory:e.repoDirectory??""}}function yr(e){return e.currentView!=="bundles"?null:e.bundleDetails?e.bundleDetails.managedId??null:e.bundles?.find(t=>t.integrity===e.selectedBundle)?.managedId??null}function wr(e,t,n,r="overview",o=null,s=[t]){if(!t?.managedId)return null;let i=e.find(l=>l.id===n&&l.bundles?.some(p=>p.id===t.managedId));if(n!=null&&!i)return null;let a=[t,...s.filter(l=>l.managedId&&l.managedId===o?.compareId)];return Xe({view:"bundles",teamId:i?.id??null,bundleId:t.managedId,bundleTab:r,...o},e,a.map(l=>({id:l.managedId,slug:l.slug})))}function Md(e,t=e.bundleDetailsTab){if(t!=="code")return null;let n=e.bundleCodeFileRequest;if(n?.bundle===e.selectedBundle){if(n.file==null)return null;let{bundle:s,...i}=n;return i}if(!e.bundleSourceFile||e.bundleDetails?.integrity!==e.selectedBundle)return null;let r=Rl(Lt(e.bundleDetails)).numbers.get(e.bundleSourceFile);if(r==null)return null;let o=e.bundleSourceTargetLine;return o?.bundle!==e.selectedBundle||o.path!==e.bundleSourceFile?{file:r}:{file:r,line:o.line,...o.end>o.line?{endLine:o.end}:{}}}function Og(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,...Wo(n.mode)};let r=Is(e.bundles??[],e.selectedBundle).find(o=>o.integrity===n.target);return r?.managedId?{compareId:r.managedId,...Wo(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,...Wo(o?.mode??"code")};if(t==="review"&&r){let{bundle:s,started:i,user:a,resume:l,...p}=r;return p}return Md(e,t)??Og(e,t)}function WU(e,t,n=()=>null){let r=e.bundles?.find(a=>a.integrity===e.selectedBundle)?.npm;if(!r||t===e.bundleDetailsTab)return;let o=vr(e,t);if(t==="review"){let a=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.started&&e.npmReview.user===e.managedSession?.id;e.npmReview={...a?e.npmReview:{bundle:e.selectedBundle,...o},resume:!0}}if(t!=="compare")return;let s=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.reviewPackage===r.name?e.npmReview:null,i=o?.compareSpec??s?.reviewSpec??n(r);i&&(e.bundleDetailsTab==="review"||!o?.compareSpec)&&(e.bundleCompare={bundle:e.selectedBundle,target:i,mode:o?.compareMode??"overview"})}function As(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,br(t)])).values()]}var Ng=(e,t,n)=>{for(let r of t)if(r[0]===e)return(0,r[1])();return n?.()};var $a=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let r of n)r._$AO?.(t,!1),$a(r,t);return!0},Id=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},jx=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),dF(t)}};function lF(e){this._$AN!==void 0?(Id(this),this._$AM=e,jx(this)):this._$AM=e}function cF(e,t=!1,n=0){let r=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(r))for(let s=n;s<r.length;s++)$a(r[s],!1),Id(r[s]);else r!=null&&($a(r,!1),Id(r));else $a(this,e)}var dF=e=>{e.type==gw.CHILD&&(e._$AP??=cF,e._$AQ??=lF)},Ad=class extends hw{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,n,r){super._$AT(t,n,r),jx(this),this.isConnected=t._$AU}_$AO(t,n=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),n&&($a(this,t),Id(this))}setValue(t){if(Hw(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 Bg=new WeakMap,Gx=ip(class extends Ad{render(e){return g}update(e,[t]){let n=t!==this.G;return n&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),g}rt(e){if(this.G!==void 0)if(this.isConnected||(e=void 0),typeof this.G=="function"){let t=this.ht??globalThis,n=Bg.get(t);n===void 0&&(n=new WeakMap,Bg.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"?Bg.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var Ed=2**20,Kx=Math.floor(2**25/15);function uF(e){let t=[];for(let n=0;n<e.length;){let r=Math.min(n+Ed,e.length);r<e.length&&e.codePointAt(r-1)>65535&&r--,t.push(e.slice(n,r)),n=r}return t}function Fd(e,t=!1){return e.length<=Ed&&!xs(e)?e:yx(e,t).flatMap(n=>typeof n=="string"?uF(n):[n])}var pF=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu,qx=200;function fF(e){let t=[...e];return t.length>qx?`${t.slice(0,qx-1).join("").trimEnd()}\u2026`:e}var Ld=e=>e.split("/").map(encodeURIComponent).join("/"),Dg=(e,t)=>`https://github.com/${Ld(e)}/releases/tag/${Ld(t)}`;function Yx(e,t){return t&&e?.sha===t&&Array.isArray(e.tags)?e.tags.filter(n=>typeof n=="string"&&n):[]}function Es(e,t,n=null){let o=typeof e?.github=="string"&&typeof n=="string"&&n.toLowerCase()===e.github.toLowerCase()?Yx(e,t):[],s=t&&e?.sha===t&&typeof e.details?.subject=="string"?e.details:null;if(!(!s&&o.length===0))return JSON.stringify({tags:o,...s?{title:fF(s.subject),authorName:s.authorName,authorLogin:s.authorLogin,date:s.committedAt??s.authoredAt}:{}})}function Od(e,t="",n=null){let r=[],o=De(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=De({repo:{github:n?.github}}),f=d?Yx(n,a):[];r.push({label:"GitHub",text:o+(i?`/${i}`:""),href:a||i?`${p}/tree/${a??"HEAD"}${l?`/${l}`:""}`:p,...a?{commit:{hash:a,text:a.slice(0,7),href:`${p}/commit/${a}`,...f.length>0?{tags:f.map(m=>({name:m,href:Dg(d,m)}))}:{}}}:{}})}let s=e?.package?.npm;if(typeof s?.name=="string"&&pF.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 mF=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,Xx=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,zg=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,Pg=e=>JSON.stringify(e).replaceAll(mF,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);function $e(e){let t=Xx(e,64);return t===e?Pg(e):`${Pg(t)}...`}var Nd=class extends Error{constructor(t,n){super(n===void 0?t:`${t} at line ${n+1}`),this.name=new.target.name,this.line=n}};var Wt=class extends Nd{};function se(e,t,n){if(!e)throw new Wt(typeof n=="function"?n():n,t.line)}function $r(e,t){t.lastIndex=e.pos;let n=t.exec(e.text);return n!==null&&(e.pos=t.lastIndex),n}var w8=2**20;var gF=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,hF=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,bF=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,yF=[31,28,31,30,31,30,31,31,30,31,30,31];function Wg(e){let t=gF.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:yF[r-1])||s>23||i>59||a>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let p=[];(t[4]==="t"||t[9]==="z")&&p.push('a date-time with a lower-case "t" or "z" is not supported'),n===0&&p.push("the year 0000 is not supported"),a===60&&p.push("a leap second is not supported");let d=t[10]===void 0?0:(t[10]==="-"?-1:1)*(Number(t[11])*60+Number(t[12]));return{year:n,month:r,day:o,hour:s,minute:i,second:a,fraction:t[8]?.slice(1)??"",offset:d,unsupported:p}}var Bd=class{constructor(t){if(typeof t!="string"||Wg(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}=Wg(this.text),p=new Date(0);return p.setUTCFullYear(t,n-1,r),p.setUTCHours(o,s-l,i,Number(a.padEnd(3,"0").slice(0,3))),p}};function Zx(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let n=Wg(e);if(n?.unsupported.length===0)return new Bd(e);let r=/^\d{4}-\d\d-\d\d$/u.test(e)&&/^ \d\d:/u.test(t.text.slice(t.pos,t.pos+4));throw se(!r,t,'a date-time with a space in place of "T" is not supported'),se(!hF.test(e),t,()=>`local dates and times are not supported: ${$e(e)}`),se(!bF.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 wF=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,vF=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,$F=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,Qx=2n**63n,eS=BigInt(Number.MAX_SAFE_INTEGER),kF={__proto__:null,x:16,o:21,b:63};function nS(e,t){let n=wF.test(e);if(!n&&!vF.test(e))return;let r=e.replaceAll("_",""),o=n?r.replace(/^[+-]/u,""):r.slice(2).replace(/^0+/u,""),i=o.length<=(n?19:kF[r[1]])?BigInt(n?r:`${r.slice(0,2)}${o||"0"}`):void 0;return se(i!==void 0&&i>=-Qx&&i<Qx,t,()=>`integer out of range ${$e(e)}`),i>=-eS&&i<=eS?Number(i):i}var tS={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};function rS(e){if(typeof e!="string"||!$F.test(e))return;if(e in tS)return tS[e];let t=Number(e.replaceAll("_","")),n=!/[1-9]/u.test(e.split(/[Ee]/u)[0]);return Number.isFinite(t)&&(t!==0||n)?t:null}var Dd=class{constructor(t){let n=rS(t);if(n==null)throw new TypeError("expected a TOML float that a double can hold");this.text=t,this.value=n,Object.freeze(this)}valueOf(){return this.value}toString(){return this.text}toJSON(){return this.value}};function oS(e,t){let n=rS(e);if(n!==void 0)return se(n!==null,t,()=>`float out of range ${$e(e)}`),new Dd(e)}var aS=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 lS="a carriage return must be followed by a line feed";function cS(e,t,n){throw new Wt(t==="\r"?lS:`${zg(t)} is not allowed in ${n}`,e.line)}var zd=e=>e.pos>=e.text.length||e.text[e.pos]===`
|
|
134
134
|
`||e.text.startsWith(`\r
|
|
135
|
-
`,e.pos),
|
|
135
|
+
`,e.pos),xF=/#[^[\p{Cc}--[\t\u0080-\u009F]]]*/vy;function dS(e){e.text[e.pos]==="#"&&($r(e,xF),zd(e)||cS(e,e.text[e.pos],"a comment"))}function Pd(e){if(e.text[e.pos]===`
|
|
136
136
|
`)e.pos+=1;else if(e.text.startsWith(`\r
|
|
137
137
|
`,e.pos))e.pos+=2;else return!1;return e.line++,!0}function Hg(e){do kr(e),dS(e);while(Pd(e))}var sS={__proto__:null,b:"\b",t:" ",n:`
|
|
138
|
-
`,f:"\f",r:"\r",'"':'"',"\\":"\\"},
|
|
139
|
-
`).length-1,"")}var pS=(e,t)=>e.text[e.pos+1]===t&&e.text[e.pos+2]===t,
|
|
140
|
-
`;continue}se(!zd(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?
|
|
141
|
-
`).length-1;throw new Wt(VF[t[0]]??"a lone surrogate is not well-formed Unicode",n)}function jg(e){jF(e);let t=Object.create(null),n={text:e,pos:0,line:0},r={root:t,current:t,implicit:new Set,pending:new Set,arrays:new Set,fixed:new Set};for(;n.pos<e.length;){let o=bS(n);o?.header===!0?WF(r,n,o.keys,o.array):o!==void 0&&UF(r,n,o.keys,o.value),yS(n)}return t}function GF(e){if(typeof e!="string")return null;let t=/^(?:github:|(?:git\+)?(?:(?:https?|ssh|git):\/\/(?:[\w.~%!$&'()*+,;=:-]*@)?(?:www\.)?github\.com(?::\d+)?\/|ssh:\/\/(?:[\w.~%!$&'()*+,;=-]*@)?(?:www\.)?github\.com:|(?:[^@/:]+@)?(?:www\.)?github\.com:))?([\w.-]+)\/([\w.-]+?)(?:\.git)?\/?$/iu.exec(e.trim().replace(/#.*$/su,"")),n=t&&`${t[1]}/${t[2]}`;return n&&mp("github",n)?n:null}function KF(e,t){if(typeof e!="string")return;let n=/^https?:\/\/(?:www\.)?github\.com\/([^/]+\/[^/]+)\/tree\/[^/#?]+\/([^#?]+)/iu.exec(e.trim());if(!(!n||n[1].toLowerCase()!==t.toLowerCase()))try{return decodeURIComponent(n[2])}catch{return}}var qF=e=>e.replaceAll("\\","/").split("/").every(t=>t===""||t===".");function YF(e){if(typeof e!="string")return{};let t=e.replaceAll("\\","/").split("/");if(t.includes(".."))return{};let n=t.filter(r=>r!==""&&r!==".").join("/");return mp("directory",n)?{directory:n}:{}}function vS(e){let t=e?.repository,n=typeof t=="string"?t:t?.url,r=GF(n);if(!r)return;let o=t.directory;return typeof o!="string"&&(o=KF(e.homepage,r),o!==void 0&&qF(o)&&(o=void 0)),{github:r,...YF(o)}}function Gg(e,t){let n=e?.[t];if(typeof n!="string")return null;try{return t.endsWith(".toml")?jg(n):JSON.parse(n.replace(/^\uFEFF/u,""))}catch{return null}}function XF(e){let t=typeof e=="string"?e:e?.url;if(typeof t!="string")return null;let n=t.trim().replace(/#.*$/su,"").replace(/^github:/iu,"").replace(/^git\+/iu,"").replace(/^(?:ssh|git):\/\/(?:git@)?github\.com\//iu,"https://github.com/").replace(/^git@github\.com:/iu,"https://github.com/");return/^(?:https?:\/\/)?(?:www\.)?github\.com\//iu.test(n)?De({repo:{github:n}}):null}function Hd(e,t,n){let r=t?.ecosystem??e.ecosystem??"npm",o=r==="composer"?Gg(t?.files,"composer.json"):r==="cargo"?Gg(t?.files,"Cargo.toml")?.package:Gg(t?.files,"package.json"),s=t?.name??e.name,i=t?.version??e.version??o?.version,a=De(t),l=a?{github:a,directory:t.repo.directory}:r==="npm"||r==="soldeer"?vS(o):{github:[o?.repository,o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(f=>XF(f)).find(Boolean)},p=typeof l?.directory=="string"?l.directory:void 0,d=a?Gr(t.repo.commit):null;return{ecosystem:r,name:s,version:typeof i=="string"?i:void 0,github:l?.github??null,...p===void 0?{}:{directory:p},...d?{commit:d}:{},fileCount:n}}var $S=new WeakMap;function kS(e,t){let n=$S.get(e);if(n||$S.set(e,n=new Map),!n.has(t)){let r=`${t}/`,o=0,s=0;for(let[i,a]of e)i.startsWith(r)&&(o+=wn(a),s+=nv(a));n.set(t,{bytes:o,loc:s})}return n.get(t)}var Ud=new Set(["cargo","composer","soldeer"]);function Vd(e,t,n){if(t?.ecosystem!==void 0)return t.ecosystem;if(!t?.name||/(?:^|\/)vendor\/([^/]+\/[^/]+)$/u.exec(e)?.[1]!==t.name)return;let r=Object.entries(t.files??{}).filter(([o,s])=>typeof s=="string"&&(!n||n.has(`${e}/${o}`)));return r.length>0&&r.every(([o])=>/\.(?:php|phtml)$/iu.test(o))?"composer":void 0}function xS(e,t=e,n=null){let r={path:"",files:new Map,dirs:new Map};for(let s=0;s<e.length;s++){let i=e[s].split("/"),a=r,l=t[s].split("/");for(let[p,d]of i.slice(0,-1).entries())a.dirs.has(d)||a.dirs.set(d,{path:i.slice(0,p+1).join("/"),sourcePath:l.slice(0,-(i.length-p-1)).join("/"),files:new Map,dirs:new Map}),a=a.dirs.get(d);a.files.set(i.at(-1),t[s])}CS(r,n,n?new Set(t):null);let o=s=>{s.package&&(s.packageInfo=Hd(s.package,n?.get(s.sourcePath),s.fileCount));for(let i of s.dirs.values())o(i)};return o(r),r}function SS(e,t=null,n=null){let r=/(?:^|\/)node_modules\//u.exec(e),o=r?r.index+(r[0].startsWith("/")?1:0):e.length,s=n?new Set(n):null;for(let[i,a]of t??[]){let l=Vd(i,a,s);if(!Ud.has(l)||!a.name||i==="."||!e.startsWith(`${i}/`)&&!i.startsWith(e))continue;let p=(l==="soldeer"?/(?:^|\/)dependencies\//u:/(?:^|\/)vendor\//u).exec(`${i}/`),d=p?p.index+(p[0].startsWith("/")?1:0):i.lastIndexOf("/")+1;o=Math.min(o,d)}return e.slice(0,o)}function CS(e,t,n){for(let s of e.dirs.values())CS(s,t,n);e.fileCount=e.files.size+[...e.dirs.values()].reduce((s,i)=>s+i.fileCount,0);let r=t?.get(e.sourcePath),o=Vd(e.sourcePath,r,n);if(Ud.has(o)&&r.name&&(e.boundary=!0,e.package={name:r.name,version:r.version,ecosystem:o},e.hideSrc=e.dirs.size===1&&e.dirs.has("src"),e.hideSrc&&(e.srcNameConflicts=new Set([...e.dirs.get("src").files.keys()].filter(s=>e.files.has(s))))),/(?:^|\/)dependencies$/u.test(e.path)&&[...e.dirs.values()].some(s=>s.package?.ecosystem==="soldeer")&&(e.boundary=!0),/(?:^|\/)vendor$/u.test(e.path)){let s=new Map;for(let[i,a]of e.dirs)if(!a.package&&a.files.size===0&&a.dirs.size>0&&[...a.dirs.values()].every(l=>l.package?.ecosystem==="composer")){e.boundary=!0;for(let[l,p]of a.dirs)s.set(`${i}/${l}`,p)}else Ud.has(a.package?.ecosystem)&&(e.boundary=!0),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs)if(a.boundary=!0,i.startsWith("@")&&a.files.size===0&&[...a.dirs.keys()].every(l=>!l.startsWith(".")&&!l.startsWith("@")))for(let[l,p]of a.dirs)p.boundary=!0,p.package??={name:`${i}/${l}`},s.set(`${i}/${l}`,p);else!i.startsWith(".")&&!i.startsWith("@")&&(a.package??={name:i}),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules\/\.pnpm$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs){if(a.boundary=!0,a.files.size>0||a.dirs.size!==1)continue;let l=a.dirs.get("node_modules");if(!l||l.files.size>0||l.dirs.size!==1)continue;let p=l.dirs.values().next().value;if(!p.package)continue;let d=`${p.package.name.replace("/","+")}@`;if(!i.startsWith(d))continue;let f=/^(\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?)([_(].*)?$/iu.exec(i.slice(d.length));if(!f)continue;p.package={...p.package,version:f[1]},e.dirs.set(i,p);let m=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?`${Ud.has(n.ecosystem)?" - ":"@"}${n.version}`:""}`:e}function _S(e,t,n="",r=null){let o=t.toLowerCase(),s=(i,a,l=null)=>{let p=new Map([...i.files].filter(([f,m])=>{let h=n&&m.startsWith(n)?m.slice(n.length):m,b=l?.srcNameConflicts.has(f)?`src/${f}`:f;return(!r||r(m))&&(h.toLowerCase().includes(o)||`${a}/${b}`.toLowerCase().includes(o))})),d=new Map;for(let[f,m]of i.dirs){let h=i.hideSrc&&f==="src",b=s(m,h?a:`${a}/${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 Kg(e,t,n){let r=[e];if(t.hideSrc&&t.dirs.has("src")){let s=t.dirs.get("src"),i=new Map(t.files);for(let[a,l]of s.files)i.set(t.srcNameConflicts.has(a)?`src/${a}`:a,l);return{names:r,node:{...t,sourcePath:s.sourcePath,files:i,dirs:s.dirs}}}if(e==="node_modules"&&t.files.size===0&&t.dirs.size===1&&t.dirs.has(".pnpm"))return{names:["node_modules",".pnpm"],node:t.dirs.get(".pnpm")};let o=Math.max(12,24-Math.max(0,n-1)*2);for(;!t.boundary&&t.files.size===0&&t.dirs.size===1&&r.length<3;){let[s,i]=t.dirs.entries().next().value;if(i.boundary||[...r,s].join("/").length>o)break;r.push(s),t=i}return{names:r,node:t}}function RS(e){if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.currentTarget,n=e.target.closest("summary, .bundle-code-tree-link");if(!n||!t.contains(n)||!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Home","End"].includes(e.key))return;e.preventDefault(),e.stopPropagation();let o=[...t.querySelectorAll("summary, .bundle-code-tree-link")].filter(l=>{let p=l.parentElement;return l.tagName==="SUMMARY"&&(p=p.parentElement),!p.closest("details:not([open])")}),s=o.indexOf(n),i=n.tagName==="SUMMARY"?n.parentElement:null,a=n;e.key==="ArrowDown"&&(a=o[Math.min(s+1,o.length-1)]),e.key==="ArrowUp"&&(a=o[Math.max(s-1,0)]),e.key==="Home"&&(a=o[0]),e.key==="End"&&(a=o.at(-1)),e.key==="ArrowRight"&&i&&(i.open?a=o[s+1]??n:n.click()),e.key==="ArrowLeft"&&(i?.open?n.click():a=(i??n).parentElement.closest("details")?.querySelector("summary")??n),a?.focus()}function JF([e,t],[n,r]){return yo(e,t).localeCompare(yo(n,r))||t.path.localeCompare(r.path)}function ZF(e,t=0,n=[]){for(let[r,o]of[...e.dirs.entries()].toSorted(JF))ZF(Kg(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 qg(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 TS(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?qg(r.github.github,Ft({directory:r.github.directory??""}),t,f,null):null}if(e?.kind!=="stasis")return null;let o=e.bundle,s=null;for(let[f,m]of o?.modules??[]){let h=f==="."?t:t.startsWith(`${f}/`)?t.slice(f.length+1):null;if(h!==null&&Object.hasOwn(m.files,h)){s={dir:f,info:m,rel:h};break}}if(!s)return null;let{dir:i,info:a,rel:l}=s,p=i==="."?void 0:Vd(i,a,null)??(i.split("/").includes("node_modules")?"npm":void 0);if(p===void 0){let f=De(o),m=De({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 qg(h,b,t,f?o.repo?.commit:void 0,null)}let d=Hd({name:a.name,ecosystem:p},a,0);return d.github?qg(d.github,d.directory??"",l,d.commit,d):null}function MS(e,t=null){return u`<a class="bundle-code-github-link" href="${e.href}" target="_blank" rel="noopener noreferrer" aria-label="Open on GitHub" data-tooltip="${e.path}" data-tooltip-repo="${e.github}" data-tooltip-commit="${e.commit??g}" data-tooltip-commit-info="${Es(t,e.commit,e.github)??g}" data-tooltip-package="${e.package?.name??g}" data-tooltip-ecosystem="${e.package?.ecosystem??g}" data-tooltip-version="${e.package?.version??g}">${W(Kt)}${e.package?u`<span hidden data-tooltip-package-icon>${_l(e.package.ecosystem)}</span>`:g}</a>`}var ES=".bundle-code-main, .bundle-source-modal, .bundle-search-side",jd=new Map,Xg=new WeakMap,Yg=null;function Jg(e){if(!e){queueMicrotask(IS);return}if(IS(),jd.has(e))return;if(!e.isConnected){queueMicrotask(()=>{e.isConnected&&Jg(e)});return}let t=e.querySelector(":scope > .bundle-source-code");if(!t)return;let n=new ResizeObserver(()=>{Xg.get(e)?.width!==FS(e)&&AS(e)});n.observe(t),n.observe(e.parentElement);let r=new MutationObserver(()=>AS(e));r.observe(t,{childList:!0,subtree:!0,characterData:!0}),r.observe(e,{attributes:!0,attributeFilter:["class"]}),jd.set(e,()=>{n.disconnect(),r.disconnect()})}function IS(){for(let[e,t]of jd)e.isConnected||(t(),jd.delete(e))}function FS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col");if(!t||!n)return 0;let r=getComputedStyle(t);return e.parentElement.clientWidth-n.getBoundingClientRect().width-parseFloat(r.paddingLeft)-parseFloat(r.paddingRight)}function AS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col"),r=FS(e);if(!t||!n||!e.isConnected||r<=0)return;let o=e.classList.contains("is-wrapped"),s=Xg.get(e)?.rows??new Map,i=null;for(let m of n.children)if((!i||(s.get(m)??1)<s.get(i))&&(i=m),!s.has(m))break;let a=i?parseFloat(getComputedStyle(i).height)/(s.get(i)??1):parseFloat(getComputedStyle(t).lineHeight),{rows:l,toggles:p}=QF(t,r,o,a),d=new Map;for(let[m,h]of l){let b=n.children[m];if(!b)continue;let y=`"${"\\A ".repeat(h-1)} "`;b.style.getPropertyValue("--wrap-breaks")!==y&&b.style.setProperty("--wrap-breaks",y),d.set(b,h)}for(let m of s.keys())d.has(m)||m.style.removeProperty("--wrap-breaks");Xg.set(e,{rows:d,width:r});let f=e.closest(ES)?.querySelector("[data-bundle-source-wrap]");f&&(f.hidden=!p)}function QF(e,t,n,r){let o=getComputedStyle(e);Yg??=document.createElement("canvas").getContext("2d"),Yg.font=`${o.fontSize} ${o.fontFamily}`;let s=t/(2*Yg.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 dV(e){let t=e.closest(ES)?.querySelector(".bundle-source-code-wrap"),n=t?.querySelectorAll(".bundle-source-lineno-row");if(!n?.length)return()=>{};let r=t.getBoundingClientRect().top,o=n.length-1,s=0;for(;s<o;){let l=s+o>>1;n[l].getBoundingClientRect().bottom<=r?s=l+1:o=l}let i=n[s],a=i.getBoundingClientRect().top-r;return()=>{i.isConnected&&(t.scrollTop+=i.getBoundingClientRect().top-r-a)}}var eL=new Set(["js","mjs","cjs","jsx","ts","mts","cts","tsx","css","json"]),tL=4*1024*1024;function nL(e){let t=/\.([a-z]+)$/iu.exec(e)?.[1]?.toLowerCase();return eL.has(t)?t:null}function LS(e,t,n=()=>Fl(e,t)){return nL(e)!==null&&wn(t)<=tL&&n().category==="minified"}var OS=e=>e.bundle??e.json??e,NS=new WeakMap;function Zg(e,t){let n=NS.get(OS(e));if(n||NS.set(OS(e),n=new Map),!n.has(t)){let r=we(e).get(t);n.set(t,Sv(t,typeof r=="string"?r:null,xn(e).get(t)))}return n.get(t)}var Ls=(e,t=n=>n)=>e?new Map(Object.entries(e).map(([n,r])=>[t(n),r])):null,rL=({stamps:e,readability:t,runsCode:n,exfiltration:r,hosts:o})=>({stamps:e,runsCode:Ls(n),exfiltration:Ls(r),hosts:Ls(o),readability:t&&{...t,controls:Ls(t.controls,Number)}});function oL(e){switch(e.id){case"held-runs-code":case"held-exfiltration":case"held-remote":case"held-ip-lookup":return{...e,files:e.files.map(t=>({...t,found:Ls(t.found),...t.added?{added:Ls(t.added)}:{}}))};case"popularity":return{...e,tier:e.tier??1/0};default:return e}}var BS=e=>({oldVersion:e.oldVersion??null,findings:e.findings.map(oL),files:new Map(Object.entries(e.files).map(([t,n])=>[t,rL(n)])),dependencies:e.dependencies}),Gd=e=>e?.npm?e.risk?.()?.files??null:null,sL={stamps:[],readability:null,runsCode:null,exfiltration:null,hosts:null};function Fn(e,t){return e?.npm?Gd(e)?.get(t)??sL:Zg(e,t)}var Qg=({names:e,loop:t})=>[e>=vv&&`${e.toLocaleString("en")}${e===$v?" or more":""} names such as _0x1a2b`,t&&"while(!![])"].filter(Boolean).join(", and ");function PS(e,t,n){return n===we(e).get(t)&&typeof n=="string"?Fn(e,t).readability:eh(e,t,n)}var DS=new WeakMap;function eh(e,t,n){let r=DS.get(e);r||DS.set(e,r=new Map);let o=r.get(t);if(o?.text===n)return o.read;let s=Fl(t,n);return r.set(t,{text:n,read:s}),s}function iL(e,t){let n=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 zS=({longLines:e,longest:t})=>`${e.toLocaleString("en")} ${e===1?"line":"lines"} over ${wv} characters, the longest ${t.toLocaleString("en")}`;function aL(e){let{average:t,category:n,longLines:r,inlineMap:o}=e,s=()=>zS(e);switch(n){case"binary":return"Not UTF-8 text, or holding a NUL: there is no text to read";case"map":return"A source map";case"inline-map":return`Inline source map, ${ge(o)}${r>0?`; minified: ${s()}`:""}`;case"minified":return`Minified: ${r>0?s():`its lines of code ${t.toLocaleString("en")} characters long on average, strings and comments aside, with few spaces`}`;default:return g}}function WS(e,t=!1){if(!e)return g;let n=yi(e),{tag:r,short:o,mark:s}=Nt.get(n);return u`<span class="${`npm-encoding-tag${s?` is-${s}`:""}`}" data-tooltip="${aL({...e,category:n})}">${t?o??r:r}</span>`}function CV(e){let t=e?.kind;return t!=="ascii"&&t!=="utf8"||yi(e)===t?g:WS({...e,category:t})}function HS(e,t=null){let n=e?jo(e).filter(o=>["controls","invisible","long"].includes(o)&&(t===null||t.includes(Go(e,o)))):[];if(n.length===0)return g;let r=o=>o==="long"?`${zS(e)}${e.category==="long"?", among readable ones":""}`:iL(e.controls,o);return n.map(o=>u`<span class="${`npm-flag-tag is-${Go(e,o)}`}" data-tooltip="${r(o)}">${Nt.get(o).tag}</span>`)}function US(e){if(!e)return g;let t=yi(e);return t==="ascii"||t==="map"?HS(e):lL(e)}var lL=e=>e?u`${HS(e)}${WS(e)}`:g;function VS(e,t,n,r=!0){let{stamps:o,readability:s}=Fn(e,t),i=r&&o.some(({name:l})=>l==="Large"),a=s?.obfuscation;return!i&&!a?g:u`${i?u`<span class="npm-flag-tag is-notice" data-tooltip="${`A code file of ${ge(n)}, 256 KiB or more`}">Large</span>`:g}${a?u`<span class="npm-flag-tag is-warn" data-tooltip="${`An obfuscator's fingerprint: ${Qg(a)}`}">Obfuscated</span>`:g}`}var YS=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 2.5c-1.4 0-2 .6-2 2v1.6c0 .9-.5 1.6-1.5 1.9 1 .3 1.5 1 1.5 1.9v1.6c0 1.4.6 2 2 2M10.5 2.5c1.4 0 2 .6 2 2v1.6c0 .9.5 1.6 1.5 1.9-1 .3-1.5 1-1.5 1.9v1.6c0 1.4-.6 2-2 2"/></svg>`,XS=e=>e?.status==="loading"?"Pretty-printing\u2026":e?.status==="error"?`Couldn't pretty-print${e.of>1?` ${e.failed} of ${e.of} files`:""}: ${e.message}`:"Pretty-print",cL=8,dL=4,uL=2,pL=30,fL=2,ka="The server's copy is of another file than the one open.",mL="The server didn't pretty-print this file.",Ns=e=>!(e>=400&&e<500&&e!==429),gL=5e3,hL=5*6e4,th=new Map;function JS(e,t,n,r){if(!t?.retry){th.delete(e);return}let o=th.get(e)??0;th.set(e,o+1),setTimeout(()=>{n()&&r()?.()},Math.min(gL*2**o,hL))?.unref?.()}var at=new Map,Bs=0,OV=()=>Bs,Os=new Map,bL=(e,t)=>`${e.integrity}\0${t}`,an=new Map,Rt=new Map,jS=new WeakMap;function ZS(e,t,n,r){if(!(t?.managedId||t?.npm)||typeof r!="string")return!1;let o=jS.get(e);return o||jS.set(e,o=new Map),o.has(n)||o.set(n,LS(n,r,()=>eh(e,n,r))),o.get(n)}var nh=!1,qd=new Set,QS=new Set;function yL(e,t){at.delete(e),at.set(e,t),nh||(nh=!0,QS=qd,qd=new Set,setTimeout(()=>{nh=!1})),qd.add(e),e1()}function e1(){for(let[e,t]of at){if(at.size<=cL)break;qd.has(e)||QS.has(e)||t.status==="loading"||(at.delete(e),Os.delete(e))}}var rh=0,GS=[];async function wL(e){rh<fL?rh++:await new Promise(t=>{GS.push(t)});try{return await e()}finally{let t=GS.shift();t?t():rh--}}async function vL(e,t,n,r,o,s){let i;try{let p=s??await Dr(o),{text:d,source:f}=await wL(()=>n.npm?Bk(n.npm.name,n.npm.version,r,p):Ok(n.managedId,r,p));i=f===p&&typeof d=="string"?{status:"ready",text:d,hash:await Dr(d)}:{status:"error",message:ka,retry:!0}}catch(p){if(p?.name==="AbortError"){at.get(e)===t&&(at.delete(e),Os.delete(e));return}i={status:"error",message:p?.message??String(p),retry:Ns(p?.status)}}if(at.get(e)!==t)return;at.set(e,i),Bs++;let a=Os.get(e),l=i.status==="error"&&i.retry;l||Os.delete(e),JS(`file ${e}`,l?i:null,()=>at.get(e)===i&&at.delete(e),()=>Os.get(e)),a?.(),e1()}function t1(){for(let[e,t]of an){if(an.size<=dL)break;t.rest&&an.delete(e)}}function KS(e,t){let n=e.notifiers.get(t);e.notifiers.delete(t),n?.()}async function $L(e,t,n,{npm:r}){let o=we(n),s;try{await Nk(r.name,r.version,async({path:i,source:a,text:l,status:p,message:d})=>{let f=o.get(i),h=typeof l=="string"&&typeof f=="string"&&a===await Dr(f)?{status:"ready",text:l,hash:await Dr(l)}:typeof l=="string"?{status:"error",message:ka,retry:!0}:{status:"error",message:d,retry:Ns(p)};t.copies.set(i,h),Bs++,KS(t,i)}),s={status:"error",message:mL,retry:!1}}catch(i){if(i?.name==="AbortError"){an.get(e)===t&&an.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}t.rest=s,Bs++;for(let i of[...t.notifiers.keys()])KS(t,i);t1()}function kL(e,t,n,r,o){let s=e.integrity,i=an.get(s);if(an.delete(s),i||(i={copies:new Map,notifiers:new Map,rest:null},$L(s,i,e,t)),an.set(s,i),t1(),r!==we(e).get(n))return{status:"error",message:ka,retry:!1};let a=i.copies.get(n)??i.rest;return a||(i.notifiers.set(n,o),{status:"loading"})}function n1(e,t,n,r,o){return c.bundleSourcePretty?t.npm?kL(e,t,n,r,o):r1(e,n,r,o,t):null}function r1(e,t,n,r,o=e){let s=bL(e,t),i=at.get(s),a=i??{status:"loading"};return yL(s,a),(a.status==="loading"||a.retry)&&Os.set(s,r),i||vL(s,a,o,t,n,e.fileHashes?.get(t)),a}var Kd=new Set;function qS(e){e&&(Kd.size===0&&setTimeout(()=>{let t=[...Kd];Kd.clear();for(let n of t)n()},pL),Kd.add(e))}function o1(){for(let[e,t]of Rt){if(Rt.size<=uL)break;t.ended&&Rt.delete(e)}}async function xL(e,t,n,r){let o={base:n,other:r},s=null;try{let i=async({side:a,path:l,source:p,text:d,status:f,message:m})=>{if(typeof d!="string"&&Ns(f))return;let h=Object.hasOwn(o,a)?o[a]:null,b=h&&we(h).get(l),y=typeof d=="string"&&typeof b=="string"&&p===(h.fileHashes?.get(l)??await Dr(b));t.copies.set(`${a}\0${l}`,y?{status:"ready",text:d,hash:await Dr(d)}:typeof d=="string"?{status:"error",message:ka,retry:!0}:{status:"error",message:m,retry:Ns(f)}),Bs++,qS(t.notify)};await(n.npm?Pk(n.npm.name,n.npm.version,r.npm.version,i):Dk(n.managedId,r.managedId,i))}catch(i){if(i?.name==="AbortError"){Rt.get(e)===t&&Rt.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}Object.assign(t,{ended:!0,rest:s}),Bs++,JS(`comparison ${e}`,s,()=>Rt.get(e)===t&&Rt.delete(e),()=>t.notify),qS(t.notify),o1()}function NV(e,t,n,r,o,s){let i=`${e.integrity}\0${t.integrity}`,a=Rt.get(i);Rt.delete(i),a||(a={copies:new Map,notify:null,ended:!1,rest:null},xL(i,a,e,t)),Rt.set(i,a),o1();let l=n==="base"?e:t;return o!==we(l).get(r)?{status:"error",message:ka,retry:!1}:(a.notify=s,a.copies.get(`${n}\0${r}`)??a.rest??(a.ended?r1(l,r,o,s):{status:"loading"}))}function BV(){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 oh(e,t,n){return e?.bundle===t&&e.files[e.at]===n?e:{bundle:t,files:n?[n]:[],at:0}}function PV(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 zV(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 sh=1024,s1=1024*sh,i1=["tiny","small","medium","large","gigantic"],SL={dependencies:[1,4,11,26],files:[3,24,192,1536],lines:[400,3200,25600,204800],unpacked:[16*sh,128*sh,s1,8*s1]};function CL(e,t){let n=SL[e].findIndex(r=>t<r);return i1[n===-1?i1.length-1:n]}function Yd(e,t,n){return u`<span class="${`npm-sized is-${CL(e,t)}`}">${n}</span>`}var _L=["preinstall","install","postinstall"];function a1(e,t=!1){let n={...e};return!n.preinstall&&!n.install&&t&&(n.install="node-gyp rebuild"),_L.filter(r=>typeof n[r]=="string").map(r=>[r,n[r]])}function xa(e,t=[]){return a1(e?.installScripts,!!(t&&(t instanceof Set?t.has("binding.gyp"):t.includes("binding.gyp"))))}function GV(e,t=!1){let n=null;try{n=typeof e=="string"?JSON.parse(e.replace(/^\uFEFF/u,"")):null}catch{}let r=n&&typeof n=="object"&&n.scripts&&typeof n.scripts=="object"?n.scripts:{};return a1(r,t)}var Xd=(e,t)=>new Date(Date.parse(e)+t*864e5);function ih(e){let t=[];if(!e?.days)return t;for(let n=e.days.length-1;n>=6;n-=7){let r=0;for(let o=n-6;o<=n;o++)r+=e.days[o];t.push({from:Xd(e.start,n-6),to:Xd(e.start,n),total:r})}return t.toReversed()}function ah(e){let t=[];if(!e?.days)return t;let n=Date.parse(e.start),r=null;e.days.forEach((s,i)=>{let a=new Date(n+i*864e5);a.getUTCDate()===1&&(r={from:a,to:a,total:0},t.push(r)),r&&(r.total+=s,r.to=a)});let o=t.at(-1);return o&&new Date(o.to.getTime()+864e5).getUTCDate()!==1&&t.pop(),t}var RL=[[10,55e7],[20,405e6],[50,285e6],[100,225e6],[200,165e6],[500,95e6],[1e3,5e7],[2e3,2e7],[5e3,4e6],[1e4,85e4],[2e4,155e3],[5e4,18e3],[1e5,2e3],[1/0,0]];function lh(e){let t=ih(e).slice(-6);if(t.length===0)return null;let n=Math.max(...t.map(r=>r.total));return RL.find(([,r])=>n>=r)[0]}var ch=e=>e<=200?"is-solid":e<=5e3?"is-top":e<=2e4?"is-mid":e<=1e5?"is-low":"is-unpopular";var dh=e=>e>2e4;var uh=14*864e5,ph=(e,{minimumReleaseAge:t=uh,now:n=Date.now()}={})=>t>0&&typeof e=="string"&&n-Date.parse(e)<t,JV=90*864e5;var wo=72,Qe={top:6,right:0,bottom:18,left:40},TL=24,ML=4,Sa=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),l1=new Intl.NumberFormat("en"),Zd=e=>new Intl.DateTimeFormat("en",{...e,timeZone:"UTC"}).format,IL=Zd({month:"short",day:"numeric"}),Ps=Zd({month:"short",day:"numeric",year:"numeric"}),fh=Zd({month:"short",year:"numeric"}),c1=Zd({month:"long",year:"numeric"}),hh=e=>e===1/0?"unpopular":`top ${e.toLocaleString("en")}`,AL=(e,t)=>{let n=t&&dh(e);return u`<dd class="${`npm-downloads-tier ${n?"is-mid":ch(e)}`}" data-tooltip="${n?t:g}">${hh(e)}</dd>`},Ds={week:{label:"Weekly",of:e=>ih(e).slice(-52),name:e=>`${IL(e.from)} \u2013 ${Ps(e.to)}`},month:{label:"Monthly",of:ah,name:e=>c1(e.from)}},mh=(e,t)=>`${l1.format(e)} downloads, ${t}`;function d1(e){let t=ah(e).at(-1);return t?bh(t):null}var bh=({total:e,from:t})=>({total:e,month:c1(t)});function EL(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 gh=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&&mh(p.total,l(p))}]})),this._tier=lh(r);let o=r?.days.slice(-365),s=o?.reduce((i,a)=>i+a,0);this._year=r==null?null:{total:s,tooltip:mh(s,`${Ps(Xd(r.start,r.days.length-o.length))} \u2013 ${Ps(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=EL(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=fh(n[0].from),y=n.at(-1),w;if(p){let v=Math.min(TL,d*.7)/2;w={bars:n.map(({total:x},k)=>{let[$,S,C]=[f(k)-v,f(k)+v,a(x)],R=Math.min(ML,v,s-C);return`M${l($)},${s}V${l(C+R)}Q${l($)},${l(C)} ${l($+R)},${l(C)}H${l(S-R)}Q${l(S)},${l(C)} ${l(S)},${l(C+R)}V${s}Z`})}}else{let v=n.map((x,k)=>`${k===0?"M":"L"}${l(f(k))},${l(a(x.total))}`).join("");w={line:v,area:`${v}L${l(f(m))},${s}L${l(f(0))},${s}Z`}}return{x:f,y:a,bottom:s,indexAt:h,first:b,last:fh(y.to),...w,ticks:[[0,Sa.format(0)],[i,Sa.format(i)]],label:`${t.label} downloads over the last year, from ${b} to ${fh(y.to)}; the latest ${this._unit}: ${mh(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>${l1.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>${AL(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>
|
|
138
|
+
`,f:"\f",r:"\r",'"':'"',"\\":"\\"},SF={__proto__:null,'"':/[^"\\[\p{Cc}--[\t\u0080-\u009F]]]*/vy,"'":/[^'[\p{Cc}--[\t\u0080-\u009F]]]*/vy},CF=/u([\dA-Fa-f]{4})|U([\dA-Fa-f]{8})/uy;function uS(e){let t=e.text[e.pos];if(t in sS)return sS[e.text[e.pos++]];let n=$r(e,CF);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 _F=/[\t ]*\r?\n(?:[\t ]|\r?\n)*/uy;function RF(e){let t=$r(e,_F);return t===null?uS(e):(e.line+=t[0].split(`
|
|
139
|
+
`).length-1,"")}var pS=(e,t)=>e.text[e.pos+1]===t&&e.text[e.pos+2]===t,TF={__proto__:null,'"':/"/uy,"'":/'/uy,'"""':/"{3,5}/uy,"'''":/'{3,5}/uy};function fS(e,t){let n=pS(e,t),r=TF[n?t.repeat(3):t];e.pos+=n?3:1,n&&Pd(e);let o="";for(;;){if(o+=$r(e,SF[t])[0],n&&Pd(e)){o+=`
|
|
140
|
+
`;continue}se(!zd(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?RF(e):uS(e):cS(e,i,"a string")}}var MF=/[\w-]+/uy;function iS(e){let t=e.text[e.pos];if(t==='"'||t==="'")return se(!pS(e,t),e,"a multi-line string cannot be a key"),fS(e,t);let n=$r(e,MF);return se(n!==null,e,()=>`expected a key, found ${bo(e)}`),n[0]}function mS(e){let t=[iS(e)];for(;;){if(kr(e),e.text[e.pos]!==".")return t;e.pos++,kr(e),t.push(iS(e)),se(t.length<=aS,e,"a key with too many parts")}}var IF=/[\w+.:-]+/uy;function AF(e){let t=$r(e,IF);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=nS(n,e)??oS(n,e)??Zx(n,e);return se(r!==void 0,e,()=>`expected a value, found ${$e(n)}`),r}function EF(e,t,n,r){se(t[n]===void 0,e,()=>`duplicate key ${$e(n)}`),t[n]=r}function gS(e,t){let n=mS(e);return se(e.text[e.pos]==="=",e,()=>`expected "=" after the key, found ${bo(e)}`),e.pos++,kr(e),{header:!1,keys:n,value:hS(e,t)}}function FF(e,t){e.pos++;let n=[];for(Hg(e);e.text[e.pos]!=="]"&&(n.push(hS(e,t+1)),Hg(e),e.text[e.pos]!=="]");Hg(e))se(e.text[e.pos]===",",e,()=>`expected "," or "]", found ${bo(e)}`),e.pos++;return e.pos++,n}var Fs=e=>typeof e=="object"&&e!==null&&Object.getPrototypeOf(e)===null,LF=new WeakSet;function Vg(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}EF(e,i,r.at(-1),o)}var OF=e=>Array.isArray(e)?"an array":Fs(e)?"an inline table":"a value",NF=(e,t)=>`${$e(e)} is ${OF(t)}, which a dotted key cannot add to`;function Ug(e){kr(e),se(!zd(e)&&e.text[e.pos]!=="#",e,"an inline table across lines is not supported")}function BF(e,t){e.pos++;let n=Object.create(null);LF.add(n);let r=new Set;if(Ug(e),e.text[e.pos]==="}")e.pos++;else do{Ug(e),se(e.text[e.pos]!=="}",e,"a trailing comma in an inline table is not supported");let{keys:o,value:s}=gS(e,t+1);Vg(e,n,r,o,s,NF),Ug(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 hS(e,t){se(t<=aS,e,"nested too deep");let n=e.text[e.pos];return n==='"'||n==="'"?fS(e,n):n==="["?FF(e,t):n==="{"?BF(e,t):AF(e)}function DF(e){let t=e.text.startsWith("[[",e.pos);e.pos+=t?2:1,kr(e);let n=mS(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 bS(e){kr(e);let t=e.text[e.pos];if(t==="[")return DF(e);if(!(t==="#"||t==="\r"||zd(e)))return gS(e,0)}function yS(e){if(kr(e),dS(e),!(Pd(e)||e.pos===e.text.length))throw se(e.text[e.pos]!=="\r",e,lS),new Wt(`expected the end of the line, found ${bo(e)}`,e.line)}function Wd(e,t){return e.arrays.has(t)?"an array of tables":Array.isArray(t)?"an array":Fs(t)?e.fixed.has(t)?"an inline table":"a table":"a value"}var wS=e=>$e(e.join("."));function PF(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(Fs(s)&&!e.fixed.has(s),t,()=>`${$e(o)} is ${Wd(e,s)}, which a header cannot add to`),r=s}return r}function zF(e,t,n,r){e.pending.clear();let o=PF(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,()=>`${wS(n)} is ${Wd(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,()=>`${wS(n)} is ${Wd(e,o[s])} already`):o[s]=Object.create(null),e.current=o[s]}function WF(e,t,n){return!Fs(n)||e.fixed.has(n)?`${$e(t)} is ${Wd(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 HF(e,t,n,r){Vg(t,e.current,e.pending,n,r,(o,s)=>WF(e,o,s)),Fs(r)&&e.fixed.add(r)}var UF={__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 VF(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(UF[t[0]]??"a lone surrogate is not well-formed Unicode",n)}function jg(e){VF(e);let t=Object.create(null),n={text:e,pos:0,line:0},r={root:t,current:t,implicit:new Set,pending:new Set,arrays:new Set,fixed:new Set};for(;n.pos<e.length;){let o=bS(n);o?.header===!0?zF(r,n,o.keys,o.array):o!==void 0&&HF(r,n,o.keys,o.value),yS(n)}return t}function jF(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&&mp("github",n)?n:null}function GF(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 KF=e=>e.replaceAll("\\","/").split("/").every(t=>t===""||t===".");function qF(e){if(typeof e!="string")return{};let t=e.replaceAll("\\","/").split("/");if(t.includes(".."))return{};let n=t.filter(r=>r!==""&&r!==".").join("/");return mp("directory",n)?{directory:n}:{}}function vS(e){let t=e?.repository,n=typeof t=="string"?t:t?.url,r=jF(n);if(!r)return;let o=t.directory;return typeof o!="string"&&(o=GF(e.homepage,r),o!==void 0&&KF(o)&&(o=void 0)),{github:r,...qF(o)}}function Gg(e,t){let n=e?.[t];if(typeof n!="string")return null;try{return t.endsWith(".toml")?jg(n):JSON.parse(n.replace(/^\uFEFF/u,""))}catch{return null}}function YF(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)?De({repo:{github:n}}):null}function Hd(e,t,n){let r=t?.ecosystem??e.ecosystem??"npm",o=r==="composer"?Gg(t?.files,"composer.json"):r==="cargo"?Gg(t?.files,"Cargo.toml")?.package:Gg(t?.files,"package.json"),s=t?.name??e.name,i=t?.version??e.version??o?.version,a=De(t),l=a?{github:a,directory:t.repo.directory}:r==="npm"||r==="soldeer"?vS(o):{github:[o?.repository,o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(f=>YF(f)).find(Boolean)},p=typeof l?.directory=="string"?l.directory:void 0,d=a?Gr(t.repo.commit):null;return{ecosystem:r,name:s,version:typeof i=="string"?i:void 0,github:l?.github??null,...p===void 0?{}:{directory:p},...d?{commit:d}:{},fileCount:n}}var $S=new WeakMap;function kS(e,t){let n=$S.get(e);if(n||$S.set(e,n=new Map),!n.has(t)){let r=`${t}/`,o=0,s=0;for(let[i,a]of e)i.startsWith(r)&&(o+=wn(a),s+=nv(a));n.set(t,{bytes:o,loc:s})}return n.get(t)}var Ud=new Set(["cargo","composer","soldeer"]);function Vd(e,t,n){if(t?.ecosystem!==void 0)return t.ecosystem;if(!t?.name||/(?:^|\/)vendor\/([^/]+\/[^/]+)$/u.exec(e)?.[1]!==t.name)return;let r=Object.entries(t.files??{}).filter(([o,s])=>typeof s=="string"&&(!n||n.has(`${e}/${o}`)));return r.length>0&&r.every(([o])=>/\.(?:php|phtml)$/iu.test(o))?"composer":void 0}function xS(e,t=e,n=null){let r={path:"",files:new Map,dirs:new Map};for(let s=0;s<e.length;s++){let i=e[s].split("/"),a=r,l=t[s].split("/");for(let[p,d]of i.slice(0,-1).entries())a.dirs.has(d)||a.dirs.set(d,{path:i.slice(0,p+1).join("/"),sourcePath:l.slice(0,-(i.length-p-1)).join("/"),files:new Map,dirs:new Map}),a=a.dirs.get(d);a.files.set(i.at(-1),t[s])}CS(r,n,n?new Set(t):null);let o=s=>{s.package&&(s.packageInfo=Hd(s.package,n?.get(s.sourcePath),s.fileCount));for(let i of s.dirs.values())o(i)};return o(r),r}function SS(e,t=null,n=null){let r=/(?:^|\/)node_modules\//u.exec(e),o=r?r.index+(r[0].startsWith("/")?1:0):e.length,s=n?new Set(n):null;for(let[i,a]of t??[]){let l=Vd(i,a,s);if(!Ud.has(l)||!a.name||i==="."||!e.startsWith(`${i}/`)&&!i.startsWith(e))continue;let p=(l==="soldeer"?/(?:^|\/)dependencies\//u:/(?:^|\/)vendor\//u).exec(`${i}/`),d=p?p.index+(p[0].startsWith("/")?1:0):i.lastIndexOf("/")+1;o=Math.min(o,d)}return e.slice(0,o)}function CS(e,t,n){for(let s of e.dirs.values())CS(s,t,n);e.fileCount=e.files.size+[...e.dirs.values()].reduce((s,i)=>s+i.fileCount,0);let r=t?.get(e.sourcePath),o=Vd(e.sourcePath,r,n);if(Ud.has(o)&&r.name&&(e.boundary=!0,e.package={name:r.name,version:r.version,ecosystem:o},e.hideSrc=e.dirs.size===1&&e.dirs.has("src"),e.hideSrc&&(e.srcNameConflicts=new Set([...e.dirs.get("src").files.keys()].filter(s=>e.files.has(s))))),/(?:^|\/)dependencies$/u.test(e.path)&&[...e.dirs.values()].some(s=>s.package?.ecosystem==="soldeer")&&(e.boundary=!0),/(?:^|\/)vendor$/u.test(e.path)){let s=new Map;for(let[i,a]of e.dirs)if(!a.package&&a.files.size===0&&a.dirs.size>0&&[...a.dirs.values()].every(l=>l.package?.ecosystem==="composer")){e.boundary=!0;for(let[l,p]of a.dirs)s.set(`${i}/${l}`,p)}else Ud.has(a.package?.ecosystem)&&(e.boundary=!0),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs)if(a.boundary=!0,i.startsWith("@")&&a.files.size===0&&[...a.dirs.keys()].every(l=>!l.startsWith(".")&&!l.startsWith("@")))for(let[l,p]of a.dirs)p.boundary=!0,p.package??={name:`${i}/${l}`},s.set(`${i}/${l}`,p);else!i.startsWith(".")&&!i.startsWith("@")&&(a.package??={name:i}),s.set(i,a);e.dirs=s}if(/(?:^|\/)node_modules\/\.pnpm$/u.test(e.path)){e.boundary=!0;let s=new Map;for(let[i,a]of e.dirs){if(a.boundary=!0,a.files.size>0||a.dirs.size!==1)continue;let l=a.dirs.get("node_modules");if(!l||l.files.size>0||l.dirs.size!==1)continue;let p=l.dirs.values().next().value;if(!p.package)continue;let d=`${p.package.name.replace("/","+")}@`;if(!i.startsWith(d))continue;let f=/^(\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?)([_(].*)?$/iu.exec(i.slice(d.length));if(!f)continue;p.package={...p.package,version:f[1]},e.dirs.set(i,p);let m=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?`${Ud.has(n.ecosystem)?" - ":"@"}${n.version}`:""}`:e}function _S(e,t,n="",r=null){let o=t.toLowerCase(),s=(i,a,l=null)=>{let p=new Map([...i.files].filter(([f,m])=>{let h=n&&m.startsWith(n)?m.slice(n.length):m,b=l?.srcNameConflicts.has(f)?`src/${f}`:f;return(!r||r(m))&&(h.toLowerCase().includes(o)||`${a}/${b}`.toLowerCase().includes(o))})),d=new Map;for(let[f,m]of i.dirs){let h=i.hideSrc&&f==="src",b=s(m,h?a:`${a}/${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 Kg(e,t,n){let r=[e];if(t.hideSrc&&t.dirs.has("src")){let s=t.dirs.get("src"),i=new Map(t.files);for(let[a,l]of s.files)i.set(t.srcNameConflicts.has(a)?`src/${a}`:a,l);return{names:r,node:{...t,sourcePath:s.sourcePath,files:i,dirs:s.dirs}}}if(e==="node_modules"&&t.files.size===0&&t.dirs.size===1&&t.dirs.has(".pnpm"))return{names:["node_modules",".pnpm"],node:t.dirs.get(".pnpm")};let o=Math.max(12,24-Math.max(0,n-1)*2);for(;!t.boundary&&t.files.size===0&&t.dirs.size===1&&r.length<3;){let[s,i]=t.dirs.entries().next().value;if(i.boundary||[...r,s].join("/").length>o)break;r.push(s),t=i}return{names:r,node:t}}function RS(e){if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.currentTarget,n=e.target.closest("summary, .bundle-code-tree-link");if(!n||!t.contains(n)||!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Home","End"].includes(e.key))return;e.preventDefault(),e.stopPropagation();let o=[...t.querySelectorAll("summary, .bundle-code-tree-link")].filter(l=>{let p=l.parentElement;return l.tagName==="SUMMARY"&&(p=p.parentElement),!p.closest("details:not([open])")}),s=o.indexOf(n),i=n.tagName==="SUMMARY"?n.parentElement:null,a=n;e.key==="ArrowDown"&&(a=o[Math.min(s+1,o.length-1)]),e.key==="ArrowUp"&&(a=o[Math.max(s-1,0)]),e.key==="Home"&&(a=o[0]),e.key==="End"&&(a=o.at(-1)),e.key==="ArrowRight"&&i&&(i.open?a=o[s+1]??n:n.click()),e.key==="ArrowLeft"&&(i?.open?n.click():a=(i??n).parentElement.closest("details")?.querySelector("summary")??n),a?.focus()}function XF([e,t],[n,r]){return yo(e,t).localeCompare(yo(n,r))||t.path.localeCompare(r.path)}function JF(e,t=0,n=[]){for(let[r,o]of[...e.dirs.entries()].toSorted(XF))JF(Kg(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 qg(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 TS(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?qg(r.github.github,Ft({directory:r.github.directory??""}),t,f,null):null}if(e?.kind!=="stasis")return null;let o=e.bundle,s=null;for(let[f,m]of o?.modules??[]){let h=f==="."?t:t.startsWith(`${f}/`)?t.slice(f.length+1):null;if(h!==null&&Object.hasOwn(m.files,h)){s={dir:f,info:m,rel:h};break}}if(!s)return null;let{dir:i,info:a,rel:l}=s,p=i==="."?void 0:Vd(i,a,null)??(i.split("/").includes("node_modules")?"npm":void 0);if(p===void 0){let f=De(o),m=De({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 qg(h,b,t,f?o.repo?.commit:void 0,null)}let d=Hd({name:a.name,ecosystem:p},a,0);return d.github?qg(d.github,d.directory??"",l,d.commit,d):null}function MS(e,t=null){return u`<a class="bundle-code-github-link" href="${e.href}" target="_blank" rel="noopener noreferrer" aria-label="Open on GitHub" data-tooltip="${e.path}" data-tooltip-repo="${e.github}" data-tooltip-commit="${e.commit??g}" data-tooltip-commit-info="${Es(t,e.commit,e.github)??g}" data-tooltip-package="${e.package?.name??g}" data-tooltip-ecosystem="${e.package?.ecosystem??g}" data-tooltip-version="${e.package?.version??g}">${W(Kt)}${e.package?u`<span hidden data-tooltip-package-icon>${_l(e.package.ecosystem)}</span>`:g}</a>`}var ES=".bundle-code-main, .bundle-source-modal, .bundle-search-side",jd=new Map,Xg=new WeakMap,Yg=null;function Jg(e){if(!e){queueMicrotask(IS);return}if(IS(),jd.has(e))return;if(!e.isConnected){queueMicrotask(()=>{e.isConnected&&Jg(e)});return}let t=e.querySelector(":scope > .bundle-source-code");if(!t)return;let n=new ResizeObserver(()=>{Xg.get(e)?.width!==FS(e)&&AS(e)});n.observe(t),n.observe(e.parentElement);let r=new MutationObserver(()=>AS(e));r.observe(t,{childList:!0,subtree:!0,characterData:!0}),r.observe(e,{attributes:!0,attributeFilter:["class"]}),jd.set(e,()=>{n.disconnect(),r.disconnect()})}function IS(){for(let[e,t]of jd)e.isConnected||(t(),jd.delete(e))}function FS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col");if(!t||!n)return 0;let r=getComputedStyle(t);return e.parentElement.clientWidth-n.getBoundingClientRect().width-parseFloat(r.paddingLeft)-parseFloat(r.paddingRight)}function AS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col"),r=FS(e);if(!t||!n||!e.isConnected||r<=0)return;let o=e.classList.contains("is-wrapped"),s=Xg.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}=ZF(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");Xg.set(e,{rows:d,width:r});let f=e.closest(ES)?.querySelector("[data-bundle-source-wrap]");f&&(f.hidden=!p)}function ZF(e,t,n,r){let o=getComputedStyle(e);Yg??=document.createElement("canvas").getContext("2d"),Yg.font=`${o.fontSize} ${o.fontFamily}`;let s=t/(2*Yg.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 dV(e){let t=e.closest(ES)?.querySelector(".bundle-source-code-wrap"),n=t?.querySelectorAll(".bundle-source-lineno-row");if(!n?.length)return()=>{};let r=t.getBoundingClientRect().top,o=n.length-1,s=0;for(;s<o;){let l=s+o>>1;n[l].getBoundingClientRect().bottom<=r?s=l+1:o=l}let i=n[s],a=i.getBoundingClientRect().top-r;return()=>{i.isConnected&&(t.scrollTop+=i.getBoundingClientRect().top-r-a)}}var QF=new Set(["js","mjs","cjs","jsx","ts","mts","cts","tsx","css","json"]),eL=4*1024*1024;function tL(e){let t=/\.([a-z]+)$/iu.exec(e)?.[1]?.toLowerCase();return QF.has(t)?t:null}function LS(e,t,n=()=>Fl(e,t)){return tL(e)!==null&&wn(t)<=eL&&n().category==="minified"}var OS=e=>e.bundle??e.json??e,NS=new WeakMap;function Zg(e,t){let n=NS.get(OS(e));if(n||NS.set(OS(e),n=new Map),!n.has(t)){let r=we(e).get(t);n.set(t,Sv(t,typeof r=="string"?r:null,xn(e).get(t)))}return n.get(t)}var Ls=(e,t=n=>n)=>e?new Map(Object.entries(e).map(([n,r])=>[t(n),r])):null,nL=({stamps:e,readability:t,runsCode:n,exfiltration:r,hosts:o})=>({stamps:e,runsCode:Ls(n),exfiltration:Ls(r),hosts:Ls(o),readability:t&&{...t,controls:Ls(t.controls,Number)}});function rL(e){switch(e.id){case"held-runs-code":case"held-exfiltration":case"held-remote":case"held-ip-lookup":return{...e,files:e.files.map(t=>({...t,found:Ls(t.found),...t.added?{added:Ls(t.added)}:{}}))};case"popularity":return{...e,tier:e.tier??1/0};default:return e}}var BS=e=>({oldVersion:e.oldVersion??null,findings:e.findings.map(rL),files:new Map(Object.entries(e.files).map(([t,n])=>[t,nL(n)])),dependencies:e.dependencies}),Gd=e=>e?.npm?e.risk?.()?.files??null:null,oL={stamps:[],readability:null,runsCode:null,exfiltration:null,hosts:null};function Fn(e,t){return e?.npm?Gd(e)?.get(t)??oL:Zg(e,t)}var Qg=({names:e,loop:t})=>[e>=vv&&`${e.toLocaleString("en")}${e===$v?" or more":""} names such as _0x1a2b`,t&&"while(!![])"].filter(Boolean).join(", and ");function PS(e,t,n){return n===we(e).get(t)&&typeof n=="string"?Fn(e,t).readability:eh(e,t,n)}var DS=new WeakMap;function eh(e,t,n){let r=DS.get(e);r||DS.set(e,r=new Map);let o=r.get(t);if(o?.text===n)return o.read;let s=Fl(t,n);return r.set(t,{text:n,read:s}),s}function sL(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 zS=({longLines:e,longest:t})=>`${e.toLocaleString("en")} ${e===1?"line":"lines"} over ${wv} characters, the longest ${t.toLocaleString("en")}`;function iL(e){let{average:t,category:n,longLines:r,inlineMap:o}=e,s=()=>zS(e);switch(n){case"binary":return"Not UTF-8 text, or holding a NUL: there is no text to read";case"map":return"A source map";case"inline-map":return`Inline source map, ${ge(o)}${r>0?`; minified: ${s()}`:""}`;case"minified":return`Minified: ${r>0?s():`its lines of code ${t.toLocaleString("en")} characters long on average, strings and comments aside, with few spaces`}`;default:return g}}function WS(e,t=!1){if(!e)return g;let n=yi(e),{tag:r,short:o,mark:s}=Nt.get(n);return u`<span class="${`npm-encoding-tag${s?` is-${s}`:""}`}" data-tooltip="${iL({...e,category:n})}">${t?o??r:r}</span>`}function CV(e){let t=e?.kind;return t!=="ascii"&&t!=="utf8"||yi(e)===t?g:WS({...e,category:t})}function HS(e,t=null){let n=e?jo(e).filter(o=>["controls","invisible","long"].includes(o)&&(t===null||t.includes(Go(e,o)))):[];if(n.length===0)return g;let r=o=>o==="long"?`${zS(e)}${e.category==="long"?", among readable ones":""}`:sL(e.controls,o);return n.map(o=>u`<span class="${`npm-flag-tag is-${Go(e,o)}`}" data-tooltip="${r(o)}">${Nt.get(o).tag}</span>`)}function US(e){if(!e)return g;let t=yi(e);return t==="ascii"||t==="map"?HS(e):aL(e)}var aL=e=>e?u`${HS(e)}${WS(e)}`:g;function VS(e,t,n,r=!0){let{stamps:o,readability:s}=Fn(e,t),i=r&&o.some(({name:l})=>l==="Large"),a=s?.obfuscation;return!i&&!a?g:u`${i?u`<span class="npm-flag-tag is-notice" data-tooltip="${`A code file of ${ge(n)}, 256 KiB or more`}">Large</span>`:g}${a?u`<span class="npm-flag-tag is-warn" data-tooltip="${`An obfuscator's fingerprint: ${Qg(a)}`}">Obfuscated</span>`:g}`}var YS=u`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 2.5c-1.4 0-2 .6-2 2v1.6c0 .9-.5 1.6-1.5 1.9 1 .3 1.5 1 1.5 1.9v1.6c0 1.4.6 2 2 2M10.5 2.5c1.4 0 2 .6 2 2v1.6c0 .9.5 1.6 1.5 1.9-1 .3-1.5 1-1.5 1.9v1.6c0 1.4-.6 2-2 2"/></svg>`,XS=e=>e?.status==="loading"?"Pretty-printing\u2026":e?.status==="error"?`Couldn't pretty-print${e.of>1?` ${e.failed} of ${e.of} files`:""}: ${e.message}`:"Pretty-print",lL=8,cL=4,dL=2,uL=30,pL=2,ka="The server's copy is of another file than the one open.",fL="The server didn't pretty-print this file.",Ns=e=>!(e>=400&&e<500&&e!==429),mL=5e3,gL=5*6e4,th=new Map;function JS(e,t,n,r){if(!t?.retry){th.delete(e);return}let o=th.get(e)??0;th.set(e,o+1),setTimeout(()=>{n()&&r()?.()},Math.min(mL*2**o,gL))?.unref?.()}var at=new Map,Bs=0,OV=()=>Bs,Os=new Map,hL=(e,t)=>`${e.integrity}\0${t}`,an=new Map,Rt=new Map,jS=new WeakMap;function ZS(e,t,n,r){if(!(t?.managedId||t?.npm)||typeof r!="string")return!1;let o=jS.get(e);return o||jS.set(e,o=new Map),o.has(n)||o.set(n,LS(n,r,()=>eh(e,n,r))),o.get(n)}var nh=!1,qd=new Set,QS=new Set;function bL(e,t){at.delete(e),at.set(e,t),nh||(nh=!0,QS=qd,qd=new Set,setTimeout(()=>{nh=!1})),qd.add(e),e1()}function e1(){for(let[e,t]of at){if(at.size<=lL)break;qd.has(e)||QS.has(e)||t.status==="loading"||(at.delete(e),Os.delete(e))}}var rh=0,GS=[];async function yL(e){rh<pL?rh++:await new Promise(t=>{GS.push(t)});try{return await e()}finally{let t=GS.shift();t?t():rh--}}async function wL(e,t,n,r,o,s){let i;try{let p=s??await Dr(o),{text:d,source:f}=await yL(()=>n.npm?Bk(n.npm.name,n.npm.version,r,p):Ok(n.managedId,r,p));i=f===p&&typeof d=="string"?{status:"ready",text:d,hash:await Dr(d)}:{status:"error",message:ka,retry:!0}}catch(p){if(p?.name==="AbortError"){at.get(e)===t&&(at.delete(e),Os.delete(e));return}i={status:"error",message:p?.message??String(p),retry:Ns(p?.status)}}if(at.get(e)!==t)return;at.set(e,i),Bs++;let a=Os.get(e),l=i.status==="error"&&i.retry;l||Os.delete(e),JS(`file ${e}`,l?i:null,()=>at.get(e)===i&&at.delete(e),()=>Os.get(e)),a?.(),e1()}function t1(){for(let[e,t]of an){if(an.size<=cL)break;t.rest&&an.delete(e)}}function KS(e,t){let n=e.notifiers.get(t);e.notifiers.delete(t),n?.()}async function vL(e,t,n,{npm:r}){let o=we(n),s;try{await Nk(r.name,r.version,async({path:i,source:a,text:l,status:p,message:d})=>{let f=o.get(i),h=typeof l=="string"&&typeof f=="string"&&a===await Dr(f)?{status:"ready",text:l,hash:await Dr(l)}:typeof l=="string"?{status:"error",message:ka,retry:!0}:{status:"error",message:d,retry:Ns(p)};t.copies.set(i,h),Bs++,KS(t,i)}),s={status:"error",message:fL,retry:!1}}catch(i){if(i?.name==="AbortError"){an.get(e)===t&&an.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}t.rest=s,Bs++;for(let i of[...t.notifiers.keys()])KS(t,i);t1()}function $L(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},vL(s,i,e,t)),an.set(s,i),t1(),r!==we(e).get(n))return{status:"error",message:ka,retry:!1};let a=i.copies.get(n)??i.rest;return a||(i.notifiers.set(n,o),{status:"loading"})}function n1(e,t,n,r,o){return c.bundleSourcePretty?t.npm?$L(e,t,n,r,o):r1(e,n,r,o,t):null}function r1(e,t,n,r,o=e){let s=hL(e,t),i=at.get(s),a=i??{status:"loading"};return bL(s,a),(a.status==="loading"||a.retry)&&Os.set(s,r),i||wL(s,a,o,t,n,e.fileHashes?.get(t)),a}var Kd=new Set;function qS(e){e&&(Kd.size===0&&setTimeout(()=>{let t=[...Kd];Kd.clear();for(let n of t)n()},uL),Kd.add(e))}function o1(){for(let[e,t]of Rt){if(Rt.size<=dL)break;t.ended&&Rt.delete(e)}}async function kL(e,t,n,r){let o={base:n,other:r},s=null;try{let i=async({side:a,path:l,source:p,text:d,status:f,message:m})=>{if(typeof d!="string"&&Ns(f))return;let h=Object.hasOwn(o,a)?o[a]:null,b=h&&we(h).get(l),y=typeof d=="string"&&typeof b=="string"&&p===(h.fileHashes?.get(l)??await Dr(b));t.copies.set(`${a}\0${l}`,y?{status:"ready",text:d,hash:await Dr(d)}:typeof d=="string"?{status:"error",message:ka,retry:!0}:{status:"error",message:m,retry:Ns(f)}),Bs++,qS(t.notify)};await(n.npm?Pk(n.npm.name,n.npm.version,r.npm.version,i):Dk(n.managedId,r.managedId,i))}catch(i){if(i?.name==="AbortError"){Rt.get(e)===t&&Rt.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}Object.assign(t,{ended:!0,rest:s}),Bs++,JS(`comparison ${e}`,s,()=>Rt.get(e)===t&&Rt.delete(e),()=>t.notify),qS(t.notify),o1()}function NV(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},kL(i,a,e,t)),Rt.set(i,a),o1();let l=n==="base"?e:t;return o!==we(l).get(r)?{status:"error",message:ka,retry:!1}:(a.notify=s,a.copies.get(`${n}\0${r}`)??a.rest??(a.ended?r1(l,r,o,s):{status:"loading"}))}function BV(){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 oh(e,t,n){return e?.bundle===t&&e.files[e.at]===n?e:{bundle:t,files:n?[n]:[],at:0}}function PV(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 zV(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 sh=1024,s1=1024*sh,i1=["tiny","small","medium","large","gigantic"],xL={dependencies:[1,4,11,26],files:[3,24,192,1536],lines:[400,3200,25600,204800],unpacked:[16*sh,128*sh,s1,8*s1]};function SL(e,t){let n=xL[e].findIndex(r=>t<r);return i1[n===-1?i1.length-1:n]}function Yd(e,t,n){return u`<span class="${`npm-sized is-${SL(e,t)}`}">${n}</span>`}var CL=["preinstall","install","postinstall"];function a1(e,t=!1){let n={...e};return!n.preinstall&&!n.install&&t&&(n.install="node-gyp rebuild"),CL.filter(r=>typeof n[r]=="string").map(r=>[r,n[r]])}function xa(e,t=[]){return a1(e?.installScripts,!!(t&&(t instanceof Set?t.has("binding.gyp"):t.includes("binding.gyp"))))}function GV(e,t=!1){let n=null;try{n=typeof e=="string"?JSON.parse(e.replace(/^\uFEFF/u,"")):null}catch{}let r=n&&typeof n=="object"&&n.scripts&&typeof n.scripts=="object"?n.scripts:{};return a1(r,t)}var Xd=(e,t)=>new Date(Date.parse(e)+t*864e5);function ih(e){let t=[];if(!e?.days)return t;for(let n=e.days.length-1;n>=6;n-=7){let r=0;for(let o=n-6;o<=n;o++)r+=e.days[o];t.push({from:Xd(e.start,n-6),to:Xd(e.start,n),total:r})}return t.toReversed()}function ah(e){let t=[];if(!e?.days)return t;let n=Date.parse(e.start),r=null;e.days.forEach((s,i)=>{let a=new Date(n+i*864e5);a.getUTCDate()===1&&(r={from:a,to:a,total:0},t.push(r)),r&&(r.total+=s,r.to=a)});let o=t.at(-1);return o&&new Date(o.to.getTime()+864e5).getUTCDate()!==1&&t.pop(),t}var _L=[[10,55e7],[20,405e6],[50,285e6],[100,225e6],[200,165e6],[500,95e6],[1e3,5e7],[2e3,2e7],[5e3,4e6],[1e4,85e4],[2e4,155e3],[5e4,18e3],[1e5,2e3],[1/0,0]];function lh(e){let t=ih(e).slice(-6);if(t.length===0)return null;let n=Math.max(...t.map(r=>r.total));return _L.find(([,r])=>n>=r)[0]}var ch=e=>e<=200?"is-solid":e<=5e3?"is-top":e<=2e4?"is-mid":e<=1e5?"is-low":"is-unpopular";var dh=e=>e>2e4;var uh=14*864e5,ph=(e,{minimumReleaseAge:t=uh,now:n=Date.now()}={})=>t>0&&typeof e=="string"&&n-Date.parse(e)<t,JV=90*864e5;var wo=72,Qe={top:6,right:0,bottom:18,left:40},RL=24,TL=4,Sa=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),l1=new Intl.NumberFormat("en"),Zd=e=>new Intl.DateTimeFormat("en",{...e,timeZone:"UTC"}).format,ML=Zd({month:"short",day:"numeric"}),Ps=Zd({month:"short",day:"numeric",year:"numeric"}),fh=Zd({month:"short",year:"numeric"}),c1=Zd({month:"long",year:"numeric"}),hh=e=>e===1/0?"unpopular":`top ${e.toLocaleString("en")}`,IL=(e,t)=>{let n=t&&dh(e);return u`<dd class="${`npm-downloads-tier ${n?"is-mid":ch(e)}`}" data-tooltip="${n?t:g}">${hh(e)}</dd>`},Ds={week:{label:"Weekly",of:e=>ih(e).slice(-52),name:e=>`${ML(e.from)} \u2013 ${Ps(e.to)}`},month:{label:"Monthly",of:ah,name:e=>c1(e.from)}},mh=(e,t)=>`${l1.format(e)} downloads, ${t}`;function d1(e){let t=ah(e).at(-1);return t?bh(t):null}var bh=({total:e,from:t})=>({total:e,month:c1(t)});function AL(e){if(!(e>0))return 1;let t=10**Math.floor(Math.log10(e));return[1,2,2.5,5,10].map(n=>n*t).find(n=>n>=e)}var gh=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&&mh(p.total,l(p))}]})),this._tier=lh(r);let o=r?.days.slice(-365),s=o?.reduce((i,a)=>i+a,0);this._year=r==null?null:{total:s,tooltip:mh(s,`${Ps(Xd(r.start,r.days.length-o.length))} \u2013 ${Ps(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=AL(Math.max(...n.map(v=>v.total))),a=v=>s-v/i*(s-Qe.top),l=v=>v.toFixed(1),p=this._unit==="month",d=o/(p?n.length:Math.max(n.length-1,1)),f=p?v=>Qe.left+(v+.5)*d:v=>Qe.left+(n.length>1?v*d:o/2),m=n.length-1,h=v=>Math.min(m,Math.max(0,(p?Math.floor:Math.round)((v-Qe.left)/d))),b=fh(n[0].from),y=n.at(-1),w;if(p){let v=Math.min(RL,d*.7)/2;w={bars:n.map(({total:x},k)=>{let[$,S,C]=[f(k)-v,f(k)+v,a(x)],R=Math.min(TL,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:fh(y.to),...w,ticks:[[0,Sa.format(0)],[i,Sa.format(i)]],label:`${t.label} downloads over the last year, from ${b} to ${fh(y.to)}; the latest ${this._unit}: ${mh(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>${l1.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>${IL(this._tier,this.known)}</div>`:g}</dl>${t?this._controls(n):g}</div>${t?this._plot(n):g}`}_plot(t){let n=this._shape;if(!n)return u`<div class="npm-downloads-plot" style="height: ${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
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",gh);function yh(e,t){let n=wh(e);return[n,`${n}.js`,`${n}.cjs`,`${n}.mjs`,`${n}/index.js`].find(r=>r&&t?.has(r))}var wh=e=>e.replace(/^(?:\.\/)+/u,"").replace(/\/+$/u,""),Ca=/^licen[cs]e(?:-[\w.]+)?(?:\.(?:md|txt))?$/iu;function u1(e,t){let n=t.filter(o=>Ca.test(o)),r=o=>{let s=o.toLowerCase().match(/^[a-z]+/u)?.[0]??"";return n.find(a=>{let l=a.toLowerCase().match(/^licen[cs]e-([a-z]+)/u)?.[1];return l!==void 0&&s!==""&&(l.startsWith(s)||s.startsWith(l))})??(n.length===1?n[0]:null)};return e.split(/(\s+(?:OR|AND|WITH)\s+|[()])/u).filter(Boolean).map(o=>({text:o,file:/^[\w.+-]+$/u.test(o)&&!/^(?:OR|AND|WITH)$/u.test(o)?r(o):null}))}var On=e=>e?.replace(/\.git$/u,""),vh=new Map([["github",{label:"GitHub",domain:"github.com",protocols:["git:","http:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o,s]=e.split("/",5);return(!o||o==="tree")&&n&&On(r)?[n,On(r),o?s:t.slice(1)]:null}}],["bitbucket",{label:"Bitbucket",domain:"bitbucket.org",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="get"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}],["gitlab",{label:"GitLab",domain:"gitlab.com",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let n=e.slice(1),r=n.lastIndexOf("/");return n.includes("/-/")||n.includes("/archive.tar.gz")?null:n.slice(0,Math.max(r,0))&&On(n.slice(r+1))?[n.slice(0,r),On(n.slice(r+1)),t.slice(1)]:null}}],["gist",{label:"Gist",domain:"gist.github.com",protocols:["git:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="raw"&&(n||r)?[r?n:null,On(r||n),t.slice(1)]:null}}],["sourcehut",{label:"SourceHut",domain:"git.sr.ht",protocols:["git+ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="archive"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}]]),FL=new Map([...vh.values()].map(e=>[e.domain,e])),LL=new Set(["git+ssh:","ssh:","git+https:","git:","http:","https:","git+http:",...[...vh.keys()].map(e=>`${e}:`)]);function OL(e){let t=e.indexOf("#"),n=e.indexOf("/"),r=o=>o>-1&&!(t>-1&&o>t);return n>0&&!e.startsWith(".")&&(t>-1?e[t-1]!=="/":!e.endsWith("/"))&&![/\s/u.exec(e)?.index??-1,e.indexOf("@"),e.indexOf(":"),e.indexOf("/",n+1)].some(r)}var Qd=e=>{try{return new URL(e)}catch{return null}};function NL(e){let t=e.indexOf("@"),n=e.indexOf(":"),r=LL.has(e.slice(0,n+1))||t>-1&&t<n?e:t>-1?`git+ssh://${e}`:e.indexOf("//")===n+1?e:`${e.slice(0,n+1)}//${e.slice(n+1)}`;if(Qd(r))return Qd(r);let o=i=>{let a=r.indexOf("#");return r.lastIndexOf(i,a>-1?a:1/0)},s=o(":")>o("@")?`${r.slice(0,o(":"))}/${r.slice(o(":")+1)}`:r;return s.lastIndexOf(":",s.indexOf("#")>-1?s.indexOf("#"):1/0)===-1&&!s.includes("//")&&(s=`git+ssh://${s}`),Qd(s)}function BL(e){if(!e)return null;let t=NL(OL(e)?`github:${e}`:e);if(!t)return null;let n=vh.get(t.protocol.slice(0,-1)),r=n??FL.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 DL(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=BL(t);if(n)return n.label;if(/^(?:git\+)?[a-z]+:/iu.test(t)){let r=/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#.*)?$/iu.exec(t);if(t.startsWith("git+ssh:")&&r&&!/:\d+(?:\/|$)/u.test(r[1]))return"git";let o=Qd(t)?.protocol;return/^(?:git|git\+(?:https?|rsync|ftp|file|ssh)):$/u.test(o)?"git":/^https?:$/u.test(o)?"URL":null}return/\/|[.](?:tgz|tar\.gz|tar)$/iu.test(t)?"path":"registry"}function zs(e){let[,t,n=""]=/^npm:((?:@[^/@]+\/)?[^/@]+)(?:@(.*))?$/iu.exec(String(e??"").trim())??[];return t?{name:t,spec:n}:null}var p1=e=>DL(e)==="registry";var PL=[["dependencies",null],["peerDependencies","peer"],["optionalDependencies","optional"]];function Ws(e){let t=[];for(let[n,r]of PL)for(let[o,s]of Object.entries(e?.[n]??{})){let i=zs(s)?.name??o;t.push({name:o,range:s,kind:r,opens:$l(i)&&p1(s)?i:null})}return t.toSorted((n,r)=>n.name.localeCompare(r.name)||(n.kind??"").localeCompare(r.kind??""))}function $h(e,t){let n=l=>new Map(Ws(l).map(p=>[`${p.kind??""}\0${p.name}`,p])),r=n(t),o=n(e),s=[],i=[],a=[];for(let[l,{name:p,kind:d,range:f,opens:m}]of o){let h=r.get(l);h?h.range!==f&&i.push({key:l,name:p,kind:d,from:f,to:h.range,opens:h.opens}):a.push({key:l,name:p,kind:d,range:f,opens:m})}for(let[l,{name:p,kind:d,range:f,opens:m}]of r)o.has(l)||s.push({key:l,name:p,kind:d,range:f,opens:m});return{removed:a,added:s,changed:i}}var eu=(e=[])=>e.map(({check:t,label:n,tooltip:r})=>u`<span class="${`npm-dependency-flag is-${t}`}" data-tooltip="${r}">${n}</span>`);function ln(e,t=null){let n=Nn("risk",`${e.name}@${e.version}${t===null?"":`..${t}`}`,()=>Ek(e.name,e.version,t),BS);return n.status==="ready"?n:null}var zL=/^https?:\/\/(?:www\.)?npmjs\.(?:com|org)\/package\/((?:@[^/]+\/)?[^/?#]+)(?:\/v\/([^/?#]+))?\/?(?:[?#].*)?$/u;function v1(e){let t=String(e??"").trim(),n=zL.exec(t),r,o=null;if(n)try{[r,o]=[decodeURIComponent(n[1]),n[2]?decodeURIComponent(n[2]):null]}catch{return null}else{let s=t.indexOf("@",1);[r,o]=s===-1?[t,null]:[t.slice(0,s),t.slice(s+1)]}return!$l(r)||o!==null&&!Ow(o)?null:{name:r,spec:o}}function WL(e,t){let n=new Set(t),r=[];for(let o of[e?.main,e?.module,"index.js"]){if(typeof o!="string")continue;let s=yh(o,n);s&&!r.includes(s)&&r.push(s)}return r}function HL(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 UL(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:WL(e.npm.manifest,r),risk:()=>ln(e.npm)}}function Ra(e,t="overview",n=null){return e?.npm?{view:"npm",packageName:e.npm.name,packageSpec:e.npm.version,bundleTab:xl.has(t)?t:"overview",...n}:null}var VL=3,f1=new Map,Bn=new Map,jL=1e4,GL=5*6e4,m1=null;function tu(){let e=c.managedSession?`${c.managedSession.id}\0${c.managedSession.role}`:null;return e!==m1&&(f1.clear(),Bn.clear(),m1=e),f1}function g1(e,t){let n=tu();for(n.delete(e.name),n.set(e.name,{entry:e,details:t});n.size>VL;)n.delete(n.keys().next().value)}async function $1(e,t,n){let r=tu().get(`${e}@${t}`);if(r)return g1(r.entry,r.details),r;let o=await Rk(e,t,n),s=HL(o),i=UL(s,o);return s.npm.private||g1(s,i),KL(o),{entry:s,details:i}}function KL({name:e,version:t,known:n}){if(!n||typeof n!="object")return;let r={stats:e,advisories:e,tags:`${e}@${t}`,socket:`${e}@${t}`,provenance:`${e}@${t}`};for(let[o,s]of Object.entries(r)){let i=`${o}\0${s}`;n[o]&&Bn.get(i)?.status!=="ready"&&Bn.set(i,{status:"known",data:n[o]})}}function Nn(e,t,n,r){tu();let o=`${e}\0${t}`,s=Bn.get(o);if(s?.status==="known"){let a={status:"ready",...r(s.data)};return Bn.set(o,a),a}if(s&&!(s.status==="error"&&Date.now()>=s.retryAt))return s;let i={status:"loading",failures:s?.failures??0};return Bn.set(o,i),n().then(a=>({status:"ready",...r(a)}),()=>{let a=i.failures+1,l=Math.min(jL*2**(a-1),GL);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?.(),qL()),null)).catch(()=>{}),i}var kh=!1;function qL(){kh||(kh=!0,queueMicrotask(()=>{kh=!1,O()}))}function nu(e){return Nn("versions",e,()=>Tk(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 YL(e={}){let t=new Map;for(let[n,r]of Object.entries(e))t.set(r,[...t.get(r)??[],n]);return t}function k1(e,t,n=Date.now()){let r=YL(e.distTags);return(e.versions?.includes(t)?e.versions:[t,...e.versions??[]]).map(s=>{let i=e.times?.[s];return{id:s,detail:r.get(s)?.join(", ")??"",...i&&{date:i.slice(0,10)},...i&&x1(e,i,n)&&{age:Rh(i,n)}}})}function x1(e,t,n=Date.now()){return e.status==="ready"&&ph(t,{minimumReleaseAge:e.teamScoped?0:uh,now:n})}var xh=new Intl.RelativeTimeFormat("en",{numeric:"auto"});function h1(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/864e5),r=n<60?xh.format(-n,"day"):n<730?xh.format(-Math.floor(n/30.44),"month"):xh.format(-Math.floor(n/365.25),"year");return`${Ps(Date.parse(e))} \xB7 ${r}`}var Sh=new Intl.RelativeTimeFormat("en",{numeric:"always"});function Rh(e,t=Date.now()){let n=Math.max(0,Math.floor((t-Date.parse(e))/6e4));return n<60?Sh.format(-n,"minute"):n<1440?Sh.format(-Math.floor(n/60),"hour"):Sh.format(-Math.floor(n/1440),"day")}var Th=e=>Ps(Date.parse(e)),S1=e=>`Published on ${Th(e)}`;function C1(e){let{name:t,version:n}=e.npm,r=nu(t),o=k1(r,n).map(({id:s,detail:i,date:a,age:l})=>({id:s,name:`${t}@${s}`,displayLabel:s,format:"npm",detail:i,...a&&{date:a},...l&&{dateWarning:l}}));return{noun:"version",base:n,widest:{name:`${t}@10.90.90`,detail:"latest"},pending:r.status==="loading",error:r.status==="error"?`Couldn't list the versions of ${t}.`:null,options:o.filter(s=>s.id!==n),choices:o,name:s=>s===e.integrity||s===n?e.name:`${t}@${s}`,load:async s=>(await $1(t,s)).details,dependencies:QL,openDependency:tO,open:(s,i,a)=>xr(t,s,"compare",i?{compareSpec:i,...Wo(a)}:{})}}function xr(e=null,t=null,n="overview",r={}){!_()||!te?.active||te.navigate(e==null?{view:"npm"}:{view:"npm",packageName:e,packageSpec:t,bundleTab:n,...r})}function Ch(e){c.currentView="npm",c.npmLookup=e,c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1})}async function _1(e,t,n){let{packageName:r,packageSpec:o=null,bundleTab:s="overview"}=e;if(r==null)return Ch({input:c.npmLookup?.input??"",pending:!1,error:null}),n(),{view:"npm"};let i=`${r}${o==null?"":`@${o}`}`,a=c.currentView==="bundles"&&c.bundleDetails?.npm,l=a&&c.bundles?.[0]?.npm?.name===r&&c.bundles[0].npm.version===o?c.bundles[0]:null,p=l?c.bundleDetails:null;if(!l){let f=o!=null&&tu().has(`${r}@${o}`);!a&&!f&&(Ch({input:i,pending:!0,error:null}),n());try{({entry:l,details:p}=await $1(r,o??"latest",{signal:Le()}))}catch(m){return m?.name==="AbortError"||!t()?!1:(_a=null,Ch({input:i,pending:!1,error:m.message}),{view:"npm"})}if(!t()||!_())return!1}_a?.name===r&&_a.spec===o&&(T1([i,...Mh().filter(f=>f!==i)]),_a=null),Bt();let d=c.bundleCompare?.bundle===l.integrity?c.bundleCompare:null;return s==="review"&&(c.npmReview={bundle:l.integrity,...e.reviewPackage?{reviewPackage:e.reviewPackage,reviewSpec:e.reviewSpec??null}:{}}),c.bundles=[l],gr(l.integrity,s),s==="code"&&e.file!=null&&(c.bundleCodeFileRequest={bundle:l.integrity,file:e.file,...e.line==null?{}:{line:e.line},...e.endLine==null?{}:{endLine:e.endLine}}),s==="compare"&&e.compareSpec!=null?c.bundleCompare={bundle:l.integrity,target:e.compareSpec,mode:kl(e.compareMode)}:d&&(c.bundleCompare=d),c.bundleDetails=p,c.npmLookup={input:l.name,pending:!1,error:null},c.currentManagedTeam=null,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),n(),document.querySelector("#main-content")?.scrollTo({top:0}),Ra(l,c.bundleDetailsTab,vr(c))}var XL=10,R1=()=>`deepview.npm.recent.${c.managedSession?.id??"anonymous"}`,_a=null;function Mh(){try{let e=JSON.parse(localStorage.getItem(R1())??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"&&v1(t)):[]}catch{return[]}}function T1(e){try{localStorage.setItem(R1(),JSON.stringify(e.slice(0,XL)))}catch{}}function JL(e){T1(Mh().filter(t=>t!==e)),O()}function M1(e){let t=v1(e);if(!t){c.npmLookup={input:e??"",pending:!1,error:"Enter a package name, like lodash, @scope/name or name@1.2.3."},O();return}_a=t,xr(t.name,t.spec)}function ZL(e){e.preventDefault(),M1(e.currentTarget.querySelector('input[name="package"]')?.value)}function I1(){let e=c.npmLookup??{input:"",pending:!1,error:null},t=["admin","manage"].includes(c.managedSession?.role),n=Mh();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(Oo)}</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="${ZL}"><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="${()=>M1(r)}">${r}</button> <button type="button" class="npm-lookup-recent-remove" aria-label="${`Remove ${r} from recent searches`}" @click="${()=>JL(r)}">×</button></li>`)}</ul></section>`:g}</section>`}function QL(e,t){let n=$h(e?.npm?.manifest,t?.npm?.manifest),r=e?.npm&&t?.npm?ln(t.npm,e.npm.version)?.dependencies:null,o=[e?.npm,t?.npm],s=(i,a)=>i.map(l=>({flags:[],...a?.find(({key:p})=>p===l.key),...l}));return{removed:n.removed,added:s(n.added,r?.added).map(i=>({...i,compared:o})),changed:s(n.changed,r?.changed)}}var A1=e=>{let t=ln(e)?.dependencies;return new Map((t?.held??t?.added??[]).map(({key:n,flags:r})=>[n,r]))},E1=({kind:e,name:t})=>`${e??""}\0${t}`,eO=/^(?:[\^~]|=)?v?(\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?)$/u,b1=e=>eO.exec(zs(e)?.spec??e.trim())?.[1]??null,y1=e=>zs(e)?.name??null;function tO({opens:e,from:t,to:n}){if(!e)return;let r=n&&b1(n),o=t&&b1(t);!o||!r||o===r||y1(t)!==y1(n)?xr(e):xr(e,r,"compare",{compareSpec:o})}function F1(e){let t=Ws(e.npm.manifest);if(t.length===0)return g;let n=A1(e.npm);return Ln({title:"Dependencies",count:t.length,list:!0,body:u`<ul class="bundles-sources-list npm-dependency-list">${t.map(r=>{let{name:o,range:s,kind:i,opens:a}=r,l=n.get(E1(r))??[],p=u`<span class="npm-dependency-name"><span class="bundles-source-path" data-tooltip-truncated data-tooltip="${o}">${o}</span>${eu(l)}</span> ${i?u`<span class="npm-dependency-kind">${i}</span>`:g} <span class="bundles-source-size" data-tooltip-truncated data-tooltip="${s}">${s}</span>`;return u`<li>${a?u`<button type="button" class="bundles-source-row npm-dependency-row" data-npm-dependency="${a}" @click="${()=>xr(a)}">${p}</button>`:u`<div class="bundles-source-row npm-dependency-row is-resource">${p}</div>`}</li>`})}</ul>`})}var nO=[["source","Non-registry",()=>"From elsewhere than npm's registry"],["unimported","Unimported",e=>`Imported by nothing of ${e}`]];function rO(e){let t=A1(e),n=Map.groupBy(Ws(e.manifest).flatMap(r=>(t.get(E1(r))??[]).map(({check:o})=>({...r,check:o}))),({check:r})=>r);return nO.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 oO(e,t){let{name:n,version:r}=e.npm,o=Nn("tags",`${n}@${r}`,()=>Ak(n,r),s=>({tags:Array.isArray(s.tags)?s.tags.filter(i=>typeof i=="string"&&i):[]}));return o.status!=="ready"||o.tags.length===0?g:u`<span class="bundle-origin-tags">${o.tags.map(s=>u`<a class="bundle-origin-link bundle-tag-link" href="${Dg(t,s)}" target="_blank" rel="noopener noreferrer">${W(ll)}<span>${s}</span></a>`)}</span>`}function Hs(e,t,n=e){let r=n===e||n===`./${e}`?g:`./${e}`;return t?.has(e)?u`<button type="button" class="bundle-entry-point" data-bundle-view-source="${e}" data-tooltip="${r}">${n}</button>`:n}function w1(e,t,n){let r=e.knownAccounts?.includes(t);return u`<a class="${`bundle-origin-link npm-account ${r?"is-known":"is-unknown"}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(t)}`}" data-tooltip="${r?"Publishes one of npm's most downloaded packages":"Unknown publisher"}" target="_blank" rel="noopener noreferrer"><span>${n}</span></a>`}var sO=/^\s*(Package no longer supported\.)\s+Contact Support at https:\/\/www\.npmjs\.com\/support for more info\.\s*$/u,Ih=e=>e.replace(sO,"$1");function Ah(e,{prefix:t="",githubFigures:n=g,provenance:r=g,provenanceNamesBuilder:o=!1,files:s=null}={}){let{manifest:i}=e.npm,a=i.github?.github,l=a?Od({repo:{github:a,directory:i.github.directory??"",commit:i.gitHead}})[0]:null,p=nu(e.npm.name),d=e.npm.published??p.times?.[e.npm.version];return u`<dl class="bundles-detail-meta npm-facts">${e.npm.private?u`<dt>Access</dt><dd>Private</dd>`:g} ${i.deprecated?u`<dt>Deprecated</dt><dd class="npm-deprecated">${Ih(i.deprecated)}</dd>`:g} ${i.description?u`<dt>Description</dt><dd>${i.description}</dd>`:g} ${i.license?u`<dt>License</dt><dd>${u1(i.license,[...s??[]]).map(({text:f,file:m})=>Hs(m,s,f))}</dd>`:g} ${i.author?u`<dt>Author</dt><dd class="bundle-origin-row">${i.authorAccount?u`${w1(i,i.authorAccount,i.author)}${i.author===i.authorAccount?g:u`<span class="npm-publisher">~${i.authorAccount}</span>`}`:i.author}</dd>`:g} ${i.publisher&&i.publisher!==i.authorAccount?u`<dt>Publisher</dt><dd class="bundle-origin-row">${w1(i,i.publisher,`~${i.publisher}`)}</dd>`:i.trustedPublisher&&!o?u`<dt>Publisher</dt><dd class="npm-trusted-publisher">${i.trustedPublisher}</dd>`:g} ${d?u`<dt>Published</dt><dd>${x1(p,d)?u`<span class="npm-recent">${h1(d)}</span>`:h1(d)}</dd>`:g} ${l?u`<dt>GitHub</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${l.href}" target="_blank" rel="noopener noreferrer">${W(Kt)}<span>${l.text}</span></a> ${n}</dd><dt>Commit</dt><dd class="bundle-origin-row">${l.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${l.commit.href}" data-tooltip="${l.commit.hash}" data-tooltip-icon="commit" target="_blank" rel="noopener noreferrer">${W(al)}<span>${l.commit.text}</span></a> ${oO(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 iO=(e,t)=>e.split(/(\s+)/u).map(n=>{let r=n.replace(/^\.\//u,"");return t?.has(r)?Hs(r,t,n):n});function L1(e,t=null,n=null){let{manifest:r}=e.npm,o=["main","module","types"].filter(d=>typeof r[d]=="string").map(d=>({label:`${d[0].toUpperCase()}${d.slice(1)}`,path:r[d],file:yh(r[d],t)??wh(r[d])})),s=o.find(d=>d.label==="Main"),i=o.find(d=>d.label==="Module");s&&i&&s.file===i.file&&(s.label="Main, Module",o.splice(o.indexOf(i),1));let a=Object.keys(r.bin??{}),l=xa(r,t),p=Ws(r).length;return u`${o.map(({label:d,path:f,file:m})=>u`<dt>${d}</dt><dd class="mono"><span class="npm-entry-point">${kn(m,Ho(n,m))}${Hs(m,t,f)}</span></dd>`)} ${r.type?u`<dt>Type</dt><dd class="mono">${r.type}</dd>`:g} ${a.length>0?u`<dt>Bin</dt><dd class="mono">${a.join(", ")}</dd>`:g} ${r.engines?u`<dt>Engines</dt><dd class="mono">${Object.entries(r.engines).map(([d,f])=>`${d} ${f}`).join(", ")}</dd>`:g} ${l.length>0||r.hasInstallScript?u`<dt>Install scripts</dt><dd class="npm-install-scripts">${l.length===0?"Yes":l.map(([d,f])=>u`<div class="npm-install-script"><span class="npm-install-script-name">${d}</span><code>${iO(f,t)}</code></div>`)}</dd>`:g}<dt>Dependencies</dt><dd class="npm-dependencies-fact">${Yd("dependencies",p,p===0?"None":p)}${rO(e.npm)}</dd>`}var _h=class extends Et{static properties={name:{},version:{},tab:{},list:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.name="",this.version="",this.tab="overview",this.list=null}render(){let t=this.list?.status==="ready"?this.list:{versions:[],distTags:{}},n=k1(t,this.version).map(({id:r,detail:o,date:s,age:i})=>({value:r,label:r,detail:o,secondary:s,...i&&{secondaryWarning:i}}));return u`<bundle-selector .options="${n}" .value="${this.version}" noun="version" versions label="${`Version of ${this.name}`}" placeholder="${this.version}" ?disabled="${n.length<=1}" aria-busy="${this.list?.status==="loading"?"true":g}" @bundle-change="${r=>{r.detail.value!==this.version&&xr(this.name,r.detail.value,this.tab)}}"></bundle-selector>`}};customElements.get("npm-version-select")||customElements.define("npm-version-select",_h);var O1=u`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" aria-hidden="true" viewBox="0 75 405 400"><path fill="currentColor" d="m62 447.6 65.8-68.2c2.2-.9 22.7 12 28.2 14.1C295.4 446.8 399.2 263.6 285.1 172 184.3 91.1 41.1 191.5 82 315.6c3.9 12 10.8 21.7 15.4 33.2l-47.1 47C-32 294.9 7.4 142.3 126.3 91.3 241.3 42 374.4 112 398 234.5c29.4 152.7-116.5 274.9-262.7 223.6-15.9-5.6-17-10.6-34.9-10.6H62Z"/><path fill="#e02129" d="M190.1 181.8c128.8-15 141.2 170.8 26 182.6-126.4 12.9-137.9-169.5-26-182.6M209 236c-7.4 5.6-10.8-5.4-13-7.7-9.6-10.3-19.4-.8-14 1.7s9.5-.3 10.1 5.6-9 9.9-7.9 16.4c13.2-5.9 25.9-6.4 39.1 0 3.2-7.1-7.9-12.1-7.8-14.8.1-9.4 11.6-6.2 12.6-7.2 4.3-4.3-8.9-11.7-17.1-.6-1.3 1.8-1.4 6.3-1.9 6.6zm-7.6 14.3c-10.1-1.5-19.3 10-25 11.8s-23.2 1.5-14.9 16.3c3.9.8 5.1-13.1 13.3-9.4 1.9 13.1-2.8 8.7-9 12.2-10 5.7-8.1 20.2-1.3 12.8 2.7-3 1.5-9.6 10.3-7.7 1.3 15.9-.8 8.4-7.9 11.7-11.5 5.3-9 20.2-1.7 14.8s0-10.8 8.6-9.3c1 .2 5.8 10.8 12.4 14.5 13.7 7.9 35 5.5 44.8-7.6s1.6-6.5 1.8-6.7c4-3.1 11.3 4.6 11 9.2l5.5-1.5c2.2-3.1-1.6-8.2-3.9-10.3-7.6-6.8-13.5.9-11-14.8 9-2.6 8.4 8.7 9.4 9.4 6 4.2 8.4-7.8 1.5-13.2-7.4-5.8-13.2 3.6-10.9-13.4 7.4-1.3 8.3 3.2 9.4 9.4 8.3 1.4 6.9-7.2 3.1-11.8-4.5-5.5-10.5-2.6-15.7-4.7-1.3-.5-25.1-18.8-25.1-9.4v52.5c-1.5.6-4.7-1.4-4.7-2.3z"/><ellipse cx="206.6" cy="270" fill="#e02129" rx="74.6" ry="66.5"/><path fill="#fff" d="M200.6 250v55.5s.4 1 .5 1.1c1.1 1.8 3.7 1.8 4.9 0 .1-.2.5-1.1.5-1.3v-55.4a34 34 0 0 1 17.2 5.8c3.1 2.2 5.6 5.1 7.7 8.3 3.8.1 7.6-.5 11.3.8 5.2 1.8 9.6 7.5 9.6 13.1 0 4.2-5.8 5.3-7.3 1.5-.7-1.8-.3-3.2-1.7-5-.8-1-3-2.7-4.3-2.7h-4.5c1.1 4.1.8 8.4.8 12.6.1.1 1.7-.1 2-.1 7.3 0 13.9 6 14.4 13.5.3 5.3-6.3 6-7.5 1.8-.6-2.1-.3-3.5-2-5.3-.8-.9-2.9-2.2-4.2-2.2h-3c.2 1 .2 2.2.1 3.2 0 2.1-.4 4.3-.9 6.4-.2.9-.5 1.8-.7 2.6 5.5-.7 10.5.7 14.1 5 1.7 2 3.4 5.6 3.6 8.3.5 5.4-6.6 6.7-7.8 1.2-.5-2.3-.7-3.8-2.7-5.4-3.1-2.5-7-1.2-10.7-1.4-1.9 3.2-4.5 6.1-7.5 8.4-14.4 10.8-36.9 7.2-46.2-8.4-.4-.2-2.4 0-2.9 0-3.2 0-6-.6-8.4 2.1-1.6 1.8-1.5 3.2-2.1 5.3-1.2 4.5-7.9 3.6-7.7-1.4.3-5.5 4.9-11.3 10.1-13 1.7-.5 5.7-1 7.4-.6.1 0 .1.1.1-.1 0-1.1-.7-2.8-.9-4.1-.4-2.7-.6-5.4-.4-8.1-2.8-.1-5.3.2-7.2 2.5-1.4 1.7-1.3 2.9-1.8 4.9-1.1 4.4-7.9 3.8-7.6-1.5.2-4.1 2.9-8.7 6.3-11 3-2.1 6.5-2.7 10.1-2.6v-5.8c.2-2.2.3-4.5.9-6.6h-4.5c-1.8 0-4.2 2.2-4.9 3.7-1.1 2.3-.4 6-4.1 6.3-3.4.3-4.5-2.3-4.1-5.2.9-6.1 5.1-11 11.3-12.2 3.1-.6 6.2 0 9.3-.4 2.2-3.1 4.8-6 7.9-8.3 4.9-3.5 10.9-5.1 16.8-5.8Z"/><path fill="#fff" d="M197.3 235.1c4.1-.7 8.3-.9 12.4 0 1.1-7.6 7-14.6 15.2-14 3.3.2 5.7 3.1 3.6 6.1-1.5 2-4.1 1-6.2 1.7s-3.7 2.5-4.5 4.4c-.3.7-1.2 3.8-.9 4.3 0 .1 1.3 1 1.6 1.2 3.4 3.1 6.2 7.4 6.6 12 0 .6-.1 1.2.1 1.8-.1.1-2.6-1.5-2.9-1.8-10.5-6-27.5-5.7-37.9.4-.2.1-2.3 1.6-2.4 1.5-.2-5.5 2.8-10.5 6.8-14 .3-.3 1.3-.9 1.5-1.1.1-.1.1-.2.1-.3 0-.5-.3-1.8-.5-2.3-.9-3.3-3-6-6.6-6.3h-2.2c-4.2-.4-4.5-6.5-.2-7.4 2.3-.5 5.2 0 7.3 1 5.2 2.2 8.5 7.4 9.1 12.9Z"/></svg>`;var aO=new Map([["registry",{label:"Source: npm registry",icon:qw}],["repository",{label:"Source: GitHub repository",icon:W(Kt)}],["osv",{label:"Source: OSV",icon:O1}]]);function lO(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function cO(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var ru=u`<svg class="external-link-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 13L13 3"/><path d="M5 3h8v8"/></svg>`;function dO(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 uO(e,t){return u`<div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${e}`}">${lO(e)}</span> ${typeof t=="number"?u`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${t.toFixed(1)}</span></span>`:g}</div>`}function pO(e){let t=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,n=e.ghsa??cO(t)??(typeof e.id=="string"?e.id:null),r=aO.get(e.source);return!r&&!(n&&t)?g:u`<span class="bundle-advisory-reference">${r?u`<span class="bundle-advisory-source" role="img" aria-label="${r.label}">${r.icon}</span>`:g} ${n&&t?u`<a class="bundle-advisory-ghsa" href="${t}" target="_blank" rel="noopener noreferrer">${n}${ru}</a>`:g}</span>`}function fO(e){let t=Array.isArray(e)?e.filter(n=>typeof n=="string"):[];return t.length>0?u`<span class="bundle-advisory-cwes">${t.map((n,r)=>u`${r===0?"":", "}${dO(n)}`)}</span>`:g}function ou(e,t=null){let n=typeof e.cvss?.vectorString=="string"?e.cvss.vectorString:"",r=typeof e.vulnerable_versions=="string"?e.vulnerable_versions:null,o=Array.isArray(e.versions)?e.versions.filter(s=>typeof s=="string"):[];return u`<li class="bundle-advisory-row">${uO(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>`} ${pO(e)}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${e.informational?u`<span>${e.informational}</span>`:g} ${r?u`<span>Affected <span class="mono">${r}</span></span>`:g} ${o.length>0?u`<span>Matches <span class="mono">${o.join(", ")}</span></span>`:g} ${fO(e.cwe)}</div>${n?u`<div class="bundle-advisory-cvss-vector mono">${n}</div>`:g}</div></div></li>`}function Eh(e){if(typeof e!="string")throw new TypeError(`a text must be a string, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a text must be a well-formed string");return{proven:!1,reason:"unsupported",at:null}}var mO=e=>e.subarray(0,8e3).includes(0),N1=(e,t)=>(e+Math.imul(t,97)>>>0)%107927;function B1(e){let t=!mO(e),n=new Map,r=(l,p)=>n.set(l,(n.get(l)??0)+p),o=0,s=0,i=0;for(let l=0;l<e.length;l++){let p=e[l];if(t&&p===13&&e[l+1]===10)continue;let d=o;o=(o<<7^s>>>25)+p>>>0,s=(s<<7^d>>>25)>>>0,!(++i<64&&p!==10)&&(r(N1(o,s),i),i=0,o=0,s=0)}i>0&&r(N1(o,s),i);let a=Uint32Array.from(n.keys()).sort();return{hashes:a,bytes:Float64Array.from(a,l=>n.get(l))}}function D1(e,t,n,r){if(e===null||t===null||t.length===0)return 0;let o=Math.abs(e.length-t.length),s=Math.max(e.length,t.length);if(s*(6e4-n)<o*6e4)return 0;let i=r(e),a=r(t),l=0;for(let p=0,d=0;p<i.hashes.length&&d<a.hashes.length;)i.hashes[p]<a.hashes[d]?p++:i.hashes[p]>a.hashes[d]?d++:l+=Math.min(i.bytes[p++],a.bytes[d++]);return Math.trunc(l*6e4/s)}function P1(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 gO=new Set(["file","contiguous-file"]),hO=new Set(["fifo","character-device","block-device"]),bO=/(?:^|\/)\.{0,2}(?:\/|$)/u;function yO(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 wO(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==="":bO.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 vO(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 $O(e){if(e===void 0)return new Uint8Array(0);if(e instanceof Uint8Array)return e;if(typeof e!="string")throw new TypeError(`a file's data must be a string or a Uint8Array, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a file's text must be well-formed Unicode");return e}var su=e=>typeof e=="string"?e$(e):e;function kO(e,t,n){if(typeof e!="object"||e===null)throw new TypeError(`an entry must be an object, not ${e===null?"null":typeof e}`);let{name:r,type:o="file",mode:s,linkname:i,data:a}=e;if(wO(r,o,t,n),s!==void 0&&yO(s),gO.has(o))return{path:r,type:"file",mode:s??420,data:$O(a)};if(o==="symlink"||o==="hardlink")return{path:r,type:o,target:vO(i,r,t)};if(o==="directory")return{path:r,type:o};throw hO.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:P1(su(e.data),su(t.data))}function xO(e,t,n){let r=new Set([e.path]),o=t.get(e.target);for(;o?.type==="hardlink";){if(r.has(o.path))throw new bt("a hard link leads back to itself",e.path,n);r.add(o.path),o=t.get(o.target)}if(o===void 0||o.type==="directory")throw new bt("a hard link must name a file or a link in the tree",e.path,n);return{...o,path:e.path}}function Fh(e,t,n){let r=new Map;for(let s of e){let i=kO(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,xO(i,r,t)):i.type!=="directory"&&o.set(s,i)}return o}var SO=100,CO=4,z1=e=>e.slice(e.lastIndexOf("/")+1);function W1(e,t){if(e.type==="symlink")return`l${e.target}`;let n=t(e);return`f${n.length}:${n$(n)}`}function _O({sources:e,dests:t,sourceNames:n,destNames:r,used:o,record:s,bytes:i}){let a=Map.groupBy(e.keys(),l=>W1(e[l],i));for(let l=0;l<t.length;l++){let p=-1,d=SO;for(let f of a.get(W1(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 RO=new Map([[".ts",".js"],[".mts",".mjs"],[".cts",".cjs"],[".tsx",".jsx"]]),TO=new Map([...[".js",".mjs",".cjs",".jsx",".ts",".mts",".cts",".tsx"].map(e=>[e,"script"]),...[".css",".scss",".sass",".less"].map(e=>[e,"style"])]);function V1(e){let t=e.split("/"),n=t.pop(),r=n.lastIndexOf(".");return r>0?{dirs:t,stem:n.slice(0,r),extension:n.slice(r)}:{dirs:t,stem:n,extension:""}}function H1(e){let{dirs:t,stem:n,extension:r}=V1(e);return JSON.stringify([t.map(o=>o==="lib"||o==="src"?null:o),n,RO.get(r)??r])}function MO(e){let{dirs:t,stem:n,extension:r}=V1(e),o=[n,TO.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 IO(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=Map.groupBy(t.remaining.filter(m=>o[m].type==="file"),m=>H1(o[m].path)),f=t.open.filter(m=>s[m].type==="file").flatMap(m=>(d.get(H1(s[m].path))??[]).map(h=>({s:h,d:m,score:p(h,m,0)})));for(let m of f.sort((h,b)=>b.score-h.score))!i.has(m.d)&&!a.has(m.s)&&!(n&&j1(e,t,m,r))&&l(m.d,m.s,m.score)}function AO(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=new Map,f=(y,w,v)=>new Map(w.filter(x=>y[x].type==="file").map(x=>{let k=MO(y[x].path);for(let $ of k)(d.get($)??d.set($,{sources:[],dests:[]}).get($))[v].push(x);return[x,k]})),m=f(s,t.open.filter(y=>!i.has(y)),"dests"),h=f(o,t.remaining.filter(y=>!a.has(y)),"sources"),b=(y,w)=>{let v=new Set(y.flatMap(x=>d.get(x)[w]));return v.size===1?[...v][0]:-1};for(let[y,w]of h){let v=b(w,"dests");if(v===-1||b(m.get(v),"sources")!==y)continue;let x={s:y,d:v,score:p(y,v,0)};n&&j1(e,t,x,r)||l(v,y,x.score)}}function EO(e,t,n){let r=Oh(e),o=t<6e4&&r.remaining.length*r.open.length<=n*n;IO(e,r,o,t),AO(e,r,o,t)}function U1(e,t){let n=new Map;for(let r of t)n.set(e[r],n.has(e[r])?-1:r);return n}function FO({sourceNames:e,destNames:t,record:n,scoreOf:r},{remaining:o,open:s},i){let a=U1(t,s),l=U1(e,o);for(let p of o){let d=a.get(e[p]);if(d===void 0||d===-1||l.get(e[p])===-1)continue;let f=r(p,d,i);f>=i&&n(d,p,f)}}var Lh=(e,t)=>t.score-e.score||t.nameScore-e.nameScore;function LO(e,t){if(e.length<CO){e.push(t);return}let n=0;for(let r=1;r<e.length;r++)Lh(e[r],e[n])>0&&(n=r);Lh(e[n],t)>0&&(e[n]=t)}function OO({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)LO(f,{score:s(m,d,l),nameScore:e[m]===t[d]?1:0,dst:d,src:m});p.push(...f)}for(let{dst:d,src:f,score:m}of p.sort(Lh)){if(m<l)break;!n.has(d)&&!r.has(f)&&o(d,f,m)}}var Oh=({sources:e,dests:t,pairs:n,used:r})=>({remaining:e.keys().filter(o=>!r.has(o)).toArray(),open:t.keys().filter(o=>!n.has(o)).toArray()});function Nh(e,t,{minimum:n,limit:r,byPath:o}){let s=new Map,i=new Set;if(e.length===0||t.length===0)return s;let a=new Map,l=new Map,p=h=>h.type==="file"?l.get(h)??l.set(h,su(h.data)).get(h):null,d=h=>a.get(h)??a.set(h,B1(h)).get(h),f={sources:e,dests:t,pairs:s,used:i,sourceNames:e.map(h=>z1(h.path)),destNames:t.map(h=>z1(h.path)),record(h,b,y){s.set(h,{source:b,score:y}),i.add(b)},bytes:p,scoreOf:(h,b,y)=>D1(p(e[h]),p(t[b]),y,d)};if(_O(f),o&&EO(f,n,r),n>=6e4)return s;FO(f,Oh(f),n+Math.trunc(.5*(6e4-n)));let m=Oh(f);return m.remaining.length*m.open.length<=r*r&&OO(f,m,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 t$(t)}catch{return}}var NO=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(!NO.has(t))throw new RangeError(`whitespace must be 'none', 'all', 'change' or 'trailing', not ${t}`);if(typeof n!="boolean")throw new TypeError(`ignoreCase must be a boolean, not ${typeof n}`);return{horizon:e,whitespace:t,ignoreCase:n}}function G1(e,t,n){let r=Ma(e),o=Ma(t);if(r===void 0||o===void 0)return{binary:!0,blocks:[],insertions:null,deletions:null};let s=r===o?[]:Lp(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 BO=50,DO=1e3;function Bh(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r++)if(e[r]!==t[r])return e.codePointAt(r)-t.codePointAt(r);return e.length-t.length}function PO(e){if(e===!1)return null;let t=e===!0?BO: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 zO({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 WO=(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}),HO=/\.d\.(?:[^./]+\.)?[cm]?ts$/u,K1=e=>e.endsWith(".mts")?"module":e.endsWith(".cts")?"commonjs":null;function q1(e){if(e===null)return{proven:!0,inert:!1};let t=Ma(e);try{return t===void 0?{proven:!1}:Eh(t)}catch{return{proven:!1}}}function UO(e){if(![e.old,e.new].filter(o=>o!==null).every(o=>o.type==="file"&&HO.test(o.path))||e.old&&e.new&&e.old.mode!==e.new.mode)return e;let n=q1(e.new),r=q1(e.old);if(!r.proven||!n.proven||!!r.inert!=!!n.inert)return e;if(r.inert){let o=K1(e.old.path);if(o===null||o!==K1(e.new.path))return e}return{...e,typeOnly:!0}}function VO(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)):WO(i,a)||r.push(Aa("modified",i,a))}for(let[s,i]of t)e.has(s)||n.push(i);return o.sort((s,i)=>Bh(s.path,i.path)),n.sort((s,i)=>Bh(s.path,i.path)),{changes:r,deleted:o,added:n}}function jO(e,t,{group:n,...r}){if(n===null)return Nh(e,t,r);let o=new Map,s=a=>Map.groupBy(a.keys(),l=>n(a[l].path)),i=s(e);for(let[a,l]of s(t)){let p=i.get(a);if(p!==void 0)for(let[d,{source:f,score:m}]of Nh(p.map(h=>e[h]),l.map(h=>t[h]),r))o.set(l[d],{source:p[f],score:m})}return o}function Dh(e,t,{renames:n=!0,renamesByPath:r=!0,renameLimit:o=DO,renameGroup:s=null,paths:i="tree",lines:a=!0,horizon:l,whitespace:p,ignoreCase:d}={}){let f=PO(n);zO({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}=VO(Fh(e,"old",h),Fh(t,"new",h)),v=f===null?new Map:jO(y,w,{minimum:f,limit:o,byPath:r,group:s});for(let[k,$]of w.entries()){let S=v.get(k);b.push(S===void 0?Aa("added",null,$):Aa("renamed",y[S.source],$,Math.trunc(S.score*100/6e4)))}let x=new Set(v.values().map(({source:k})=>k));for(let[k,$]of y.entries())x.has(k)||b.push(Aa("deleted",$,null));return b.sort((k,$)=>Bh((k.new??k.old).path,($.new??$.old).path)),(a?b.map(k=>({...k,...G1(k.old,k.new,m)})):b).map(UO)}var iu=(e,{lo:t,start:n},r)=>e[n+(r-t)/2];function Y1(e,t,{low:n,high:r},o,s){return e===-t||e-1<n||e!==t&&e+1<=r&&iu(o,s,e-1)<iu(o,s,e+1)?e+1:e-1}function GO(e,t,n,{first:r,n:o,m:s,d:i,...a}){e.a.fill(1,0,r).fill(1,o),e.b.fill(1,0,r).fill(1,s);let l=o,p=s;for(let d=i;d>0;d--){let f=l-p,m=Y1(f,d,a,t,n[d]),h=iu(t,n[d],m);for(let b=m>f?h:h+1;b<l;b++)e.a[b]=e.b[b-f]=1;l=h,p=l-m}for(let d=r;d<l;d++)e.a[d]=e.b[d]=1}function X1(e,t,n){let r=0,o=t.length,s=e.length,i=2*(s+o);for(;r<s&&r<o&&e[r]===t[r];)r++;for(;s>r&&o>r&&e[s-1]===t[o-1];)s--,o--;let a={high:s-r,low:r-o},l=[r],p=[{lo:1,start:0}];for(let d=0;d<=a.high-a.low;d++){let f=p[d],m=Math.min(d,a.high),h=Math.max(-d,a.low+(a.low+d&1));p.push({lo:h,start:l.length});for(let b=h;b<=m;b+=2){let y=Y1(b,d,a,l,f),w=iu(l,f,y),v=y>b?w:w+1,x=v;for(;v<s&&v-b<o&&e[v]===t[v-b];)v++;if(i+=2+v-x,l.push(v),v>=s&&v-b>=o)return GO(n,l,p,{first:r,n:s,m:o,d,...a}),i}}throw new Error("no edit script between two lines")}var KO=/[\p{L}\p{N}_$]+|\s+|[^\p{L}\p{N}_$\s]/gu,qO=2e3,YO=800,lu=.6;function au(e,t){if(e.length>qO)return null;let n=e.match(KO)??[];return n.length>YO?null:{line:e,tokens:n,words:n.map(r=>(t.has(r)||t.set(r,t.size),t.get(r)))}}function J1({tokens:e,line:t},n){let r=[];for(let o=0,s=0;s<e.length;o+=e[s++].length){if(n[s])continue;let i=r.at(-1);i&&/^\s*$/u.test(t.slice(i[1],o))?i[1]=o+e[s].length:r.push([o,o+e[s].length])}return r}var Z1=(e,t)=>e.reduce((n,[r,o])=>n+o-r,0)/Math.max(1,t.length);function Ph(e,t){let n={a:e.words.map(()=>0),b:t.words.map(()=>0)},r=X1(e.words,t.words,n),o={a:J1(e,n.a),b:J1(t,n.b)};return{ranges:o,share:n.a.includes(1)?Math.min(Z1(o.a,e.line),Z1(o.b,t.line)):1,steps:r}}function XO(e,t){if(e===t)return{a:[],b:[]};let n=new Map,r=au(e,n),o=au(t,n);if(r===null||o===null)return null;let{ranges:s,share:i}=Ph(r,o);return i<=lu?s:null}var Q1=200,JO=5e6,ZO=6,QO=60,eN=3;function tN(e){let t=new Map;for(let n of e?.tokens??[])t.set(n,(t.get(n)??0)+1);return t}function nN(e,t){let n=new Map,r=[e,t].map(f=>f.map(m=>au(m,n))),o=r.map(f=>f.map(tN)),s=0,i=(f,m,h)=>{let b=0;for(let[y,w]of f)if(s+=eN,(b+=y.length*Math.max(0,w-(m.get(y)??0)))>lu*h.length)return 1/0;return b/Math.max(1,h.length)},a=(f,m)=>r[0][f]===null||r[1][m]===null?1/0:Math.min(i(o[0][f],o[1][m],e[f]),i(o[1][m],o[0][f],t[m])),l=(f,m)=>{if(s+=QO,a(f,m)===1/0)return 1/0;let{share:h,steps:b}=Ph(r[0][f],r[1][m]);return s+=b,h<=lu?h:1/0},p=new Float64Array(e.length*t.length).fill(Number.NaN);return{share:(f,m)=>{let h=f*t.length+m;return Number.isNaN(p[h])&&(p[h]=e[f]===t[m]?0:l(f,m)),p[h]},floor:a,spent:()=>s}}function rN(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()>JO)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 oN(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+ZO)-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 sN(e,t){if(e.length>Q1||t.length>Q1)return[];let n=nN(e,t);return rN(e.length,t.length,n)??oN(e.length,t.length,n)}function eC(e,t,n,r){let{whitespace:o,ignoreCase:s}=Ia(r);try{return Op(e,t,n,{format:"normal",whitespace:o,ignoreCase:s}),!0}catch(i){if(i instanceof r$)return!1;throw i}}var tC=/[ \t\n\v\f\r]/u,nC=e=>{let t=e.split(`
|
|
145
|
-
`);return t.at(-1)===""&&t.pop(),t};function iN(e,t){for(let n=0,r=0;;n++,r++){let o="",s="";for(;n<e.length&&tC.test(e[n]);)o+=e[n++];for(;r<t.length&&tC.test(t[r]);)s+=t[r++];if(o!==s&&new Set(o+s).size>1)return!0;if(n>=e.length||r>=t.length)return!1}}function aN(e,t,n){try{if(!eC(e,t,n,{whitespace:"all"}))return!0}catch{return!0}let r=nC(e),o=nC(t),s=0,i=0;for(let a=0;a<=n.length;a++){let l=a<n.length?n[a].a0:r.length;for(;s<l;s++,i++)if(r[s]!==o[i]&&iN(r[s],o[i]))return!0;a<n.length&&({a1:s,b1:i}=n[a])}return!1}function lN(e,t,{extension:n=!0}={}){let r=e.split("/"),o=t.split("/"),s=0;for(;s<r.length-1&&s<o.length-1&&r[s]===o[s];)s++;let i=0;for(;i<r.length-s-1&&i<o.length-s-1&&r.at(-1-i)===o.at(-1-i);)i++;let a={head:s?`${r.slice(0,s).join("/")}/`:"",from:r.slice(s,r.length-i).join("/"),to:o.slice(s,o.length-i).join("/"),tail:i?`/${r.slice(-i).join("/")}`:""},l=a.from.lastIndexOf(".");return n&&!a.from.includes("/")&&!a.to.includes("/")&&l>0&&a.to.lastIndexOf(".")===l&&a.from.slice(0,l)===a.to.slice(0,l)?{...a,head:a.head+a.from.slice(0,l),from:a.from.slice(l),to:a.to.slice(l)}:a}function zh(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}var rC=(e,t)=>`${"../".repeat(e.base.split("/").length-1)}${t}`;function Wh(e,t,n){let r=new Map,o=new Set,s=0;for(let a of e){let l=zh(n,a);l===null||!t.has(l)||(r.set(a,l),o.add(l),l!==a&&s++)}for(let a of e)r.has(a)||!t.has(a)||o.has(a)||(r.set(a,a),o.add(a));let i=r.size;for(let a of e){if(r.has(a))continue;let l=zh(n,a)??rC(n,a);for(;t.has(l)||o.has(l);)l=`../${l}`;r.set(a,l),o.add(l)}return{paths:r,paired:i,moved:s}}function cN(e,t){let n=new Set(e),r=new Set(t),o=(a,l)=>{let p=new Map;for(let m of a)for(let h=m.indexOf("/");h!==-1;h=m.indexOf("/",h+1))l.has(m.slice(h+1))&&p.set(m.slice(0,h+1),(p.get(m.slice(0,h+1))??0)+1);let d=null,f=!1;for(let[m,h]of p)h>(p.get(d)??0)?[d,f]=[m,!1]:h===p.get(d)&&(f=!0);return f?null:d},s=Wh(n,r,null).paired,i=[[{base:"",other:o(r,n)},n],[{base:o(n,r),other:""},r]].filter(([a])=>a.base!==null&&a.other!==null).map(([a,l])=>({root:a,side:l,...Wh(n,r,a)})).filter(({side:a,paired:l,moved:p})=>l>s&&p*2>=a.size);return i.length===2&&i[0].paired===i[1].paired?null:i.toSorted((a,l)=>l.paired-a.paired)[0]?.root??null}function Hh(e,t){let n=[...e],r=new Set(t),o=cN(n,r);return{root:o,paths:Wh(n,r,o).paths}}function oC({root:e,paths:t},n,r){if(!e||n===".")return n;for(let s of r){let i=t.get(`${n}/${s}`);if(i?.endsWith(`/${s}`))return i.slice(0,-s.length-1)}let o=zh(e,`${n}/`);return o===null?rC(e,n):o.slice(0,-1)||"."}function dN(e,t,n){if(!e&&!t)return null;let r=Map.groupBy([...e??[]],([,s])=>s),o=new Map([...r].map(([s,i])=>[s,oC(n,s,i.map(([a])=>a.slice(s.length+1)))]));return new Map([...[...e??[]].map(([s,i])=>[n.paths.get(s)??s,o.get(i)]),...t??[]])}function uN(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 JG(...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 pN(e,t=""){let n=we(e);if(!t||e?.kind!=="stasis")return n;let r=e?.bundle?.reason?.[t.replace(/^reason:/u,"")],o=new Set(Array.isArray(r)?r:[]);return new Map([...n].filter(([s])=>o.has(s)))}function Uh(e,t,n,r){return JSON.stringify([e,t,n,r])}function ZG(e,t=""){let n=new Map;if(e?.kind!=="stasis"||!e.bundle)return n;let r=t?we(e):null,o=t?pN(e,t):null;for(let[s,i]of e.bundle.imports)for(let[a,l]of i)for(let[p,d]of l){let f=typeof d=="string"?[[null,d]]:d;for(let[m,h]of f){if(o&&!o.has(a)&&(r.has(a)||!o.has(h)))continue;let b=Uh(a,p,s,m);n.set(b,{key:b,parent:a,specifier:p,conditions:s,platform:m,target:h})}}return n}function r7(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,bN(o,a)??a])]:[l]},i=[];for(let a of e.values()){let l=s(a.parent).map(p=>t.get(Uh(p,a.specifier,a.conditions,a.platform))).find(Boolean);if(l&&!s(a.target).includes(l.target)){let{target:p,...d}=l;i.push({...d,baseTarget:r.get(a.target)??a.target,otherTarget:p})}}return i.sort((a,l)=>a.key.localeCompare(l.key)),{changed:i,totalChanges:i.length}}function Us(e){return Qw(e)??0}function sC(e,t){return e===t||e?.format==="base64"&&t?.format==="base64"&&e.data===t.data||e?.format==="digest"&&t?.format==="digest"&&e.digest===t.digest}function o7(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 fN(e,t){return!e||!t?[]:["format","executable","entry"].filter(n=>e[n]!==t[n]).map(n=>({field:n,from:e[n],to:t[n]}))}function iC(e){return(t,n)=>Math.abs(n.delta)-Math.abs(t.delta)||t[e].localeCompare(n[e])}function cu(e){return(t,n)=>n.bytes-t.bytes||t[e].localeCompare(n[e])}function mN(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 gN=250;function hN(e,t,n,r,o){let s=(l,p,d)=>l.filter(({path:f})=>f!==""&&f.isWellFormed()).map(({path:f},m)=>({name:f,data:mN(p.get(f),`${d}${m}`)})),i={paths:"keys",renameGroup:o,renameLimit:gN,lines:!1},a=Dh(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 bN(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}function yN(){return{baseBytes:0,otherBytes:0,onlyBaseFiles:0,onlyOtherFiles:0,changedFiles:0}}function s7(e,t,n,r=Hh(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=fN(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=yN(),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=sC(Q,ze),Ke=p(a.get(M),M),Ce=Us(Q),yt=We?Ce:Us(ze);if(h+=Ce,b+=yt,K.baseBytes+=Ce,K.otherBytes+=yt,We&&!Ke.meta)x++;else{let Nr=yt-Ce;m.push({path:M,...l(M),baseBytes:Ce,otherBytes:yt,delta:Nr,...Ke,...We?{modified:!1}:{}}),v+=Nr,K.changedFiles++}}else if(I){let Q=Us(e.get(M));h+=Q,y+=Q,K.baseBytes+=Q,K.onlyBaseFiles++,d.push({path:M,...l(M),bytes:Q})}else{let Q=Us(t.get(M));b+=Q,w+=Q,K.otherBytes+=Q,K.onlyOtherFiles++,f.push({path:M,bytes:Q})}}let C=hN(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=sC(K,Q),We=Us(K),Ke=ze?We:Us(Q);y-=We,w-=Ke,m.push({path:U,renamedFrom:I,basePath:a.get(I),baseBytes:We,otherBytes:Ke,delta:Ke-We,modified:!ze,...p(a.get(I),U)}),v+=Ke-We;let Ce=$(I);Ce.onlyBaseFiles--,Ce.onlyOtherFiles--,Ce.changedFiles++}d.splice(0,d.length,...d.filter(I=>!C.has(I.path))),f.splice(0,f.length,...f.filter(I=>!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(cu("path")),f.sort(cu("path")),m.sort(iC("path")),R.sort(cu("pkg")),L.sort(cu("pkg")),A.sort(iC("pkg")),{totals:{baseFiles:e.size,baseBytes:h,otherFiles:t.size,otherBytes:b,onlyBaseFiles:d.length,onlyBaseBytes:y,onlyOtherFiles:f.length,onlyOtherBytes:w,changedFiles:m.length,renamedFiles:C.size,changedDelta:v,unchangedFiles:x,fileDelta:t.size-e.size,byteDelta:b-h,identical:d.length===0&&f.length===0&&m.length===0},files:{onlyBase:d,onlyOther:f,changed:m,root:s,basePaths:i},packages:{onlyBase:R,onlyOther:L,changed:A,unchanged:E}}}function i7(e,t,n){let r=new Map;for(let d of e.onlyBase)r.set(d.pkg,{base:d.bytes,other:null});for(let d of e.onlyOther)r.set(d.pkg,{base:null,other:d.bytes});for(let d of e.changed)r.set(d.pkg,{base:d.baseBytes,other:d.otherBytes});for(let d of e.unchanged??[])r.set(d.pkg,{base:d.bytes,other:d.bytes});let o=(d,f)=>[...d.get(f)??[]].toSorted(Ht),s=new Set([...e.onlyBase,...e.onlyOther,...e.changed].map(d=>d.pkg));for(let d of new Set([...t.keys(),...n.keys()]))Vh(o(t,d),o(n,d))||s.add(d);let i=[],a=[],l=[];for(let d of s){let f=r.get(d)??{base:null,other:null},m=o(n,d),h=o(t,d),b=f.base!==null||h.length>0,y=f.other!==null||m.length>0;b&&!y?l.push({pkg:d,bytes:f.base,versions:h}):y&&!b?i.push({pkg:d,bytes:f.other,versions:m}):a.push({pkg:d,baseBytes:f.base,otherBytes:f.other,delta:f.base!==null&&f.other!==null?f.other-f.base:null,baseVersions:h,otherVersions:m,direction:h.length>0&&m.length>0&&!Vh(h,m)?lC(h,m):null})}let p=(d,f)=>d.pkg.localeCompare(f.pkg);return{removed:l.toSorted(p),added:i.toSorted(p),changed:a.toSorted(p)}}function aC(e){let n=String(e).trim().split("+",1)[0],r=n.indexOf("-");return r===-1?{core:n,pre:""}:{core:n.slice(0,r),pre:n.slice(r+1)}}function Ht(e,t){if(e===t)return 0;let n=aC(e),r=aC(t),o=n.core.split("."),s=r.core.split(".");for(let l=0;l<Math.max(o.length,s.length);l++){let p=Number(o[l]??0),d=Number(s[l]??0);if(Number.isNaN(p)||Number.isNaN(d))return e<t?-1:1;if(p!==d)return p<d?-1:1}if(n.pre===r.pre)return 0;if(!n.pre)return 1;if(!r.pre)return-1;let i=n.pre.split("."),a=r.pre.split(".");for(let l=0;l<Math.max(i.length,a.length);l++){let p=i[l],d=a[l];if(p===void 0)return-1;if(d===void 0)return 1;if(p===d)continue;let f=/^\d+$/u.test(p),m=/^\d+$/u.test(d);return f&&m?Number(p)<Number(d)?-1:1:f!==m?f?-1:1:p<d?-1:1}return 0}function Vh(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function lC(e,t){let n=e.filter(l=>!t.includes(l)).toSorted(Ht),r=t.filter(l=>!e.includes(l)).toSorted(Ht),o=e.filter(l=>t.includes(l)).toSorted(Ht),[s,i]=n.length>0&&r.length>0?[n,r]:n.length>0?[n,o]:[o,r];if(s.length===0||i.length===0)return"changed";let a=(l,p)=>Ht(l.at(-1),p[0])<0;return a(s,i)?"up":a(i,s)?"down":"changed"}function a7(e,t){let n=[],r=[],o=[],s=new Set([...e.keys(),...t.keys()]);for(let a of s){let l=e.get(a),p=t.get(a);if(l&&p){let d=[...l].toSorted(Ht),f=[...p].toSorted(Ht);if(Vh(d,f))continue;n.push({pkg:a,baseVersions:d,otherVersions:f,direction:lC(d,f)})}else l?o.push({pkg:a,versions:[...l].toSorted(Ht)}):r.push({pkg:a,versions:[...p].toSorted(Ht)})}let i=(a,l)=>a.pkg.localeCompare(l.pkg);return n.sort(i),r.sort(i),o.sort(i),{updated:n,added:r,removed:o,totals:{baseDeps:e.size,otherDeps:t.size}}}var cC=`.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.code-block:not(.token){white-space:normal;margin:.4rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.4rem .55rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.95em;line-height:1.5;color:var(--text)}& code{font:inherit}}
|
|
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",gh);function yh(e,t){let n=wh(e);return[n,`${n}.js`,`${n}.cjs`,`${n}.mjs`,`${n}/index.js`].find(r=>r&&t?.has(r))}var wh=e=>e.replace(/^(?:\.\/)+/u,"").replace(/\/+$/u,""),Ca=/^licen[cs]e(?:-[\w.]+)?(?:\.(?:md|txt))?$/iu;function u1(e,t){let n=t.filter(o=>Ca.test(o)),r=o=>{let s=o.toLowerCase().match(/^[a-z]+/u)?.[0]??"";return n.find(a=>{let l=a.toLowerCase().match(/^licen[cs]e-([a-z]+)/u)?.[1];return l!==void 0&&s!==""&&(l.startsWith(s)||s.startsWith(l))})??(n.length===1?n[0]:null)};return e.split(/(\s+(?:OR|AND|WITH)\s+|[()])/u).filter(Boolean).map(o=>({text:o,file:/^[\w.+-]+$/u.test(o)&&!/^(?:OR|AND|WITH)$/u.test(o)?r(o):null}))}var On=e=>e?.replace(/\.git$/u,""),vh=new Map([["github",{label:"GitHub",domain:"github.com",protocols:["git:","http:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o,s]=e.split("/",5);return(!o||o==="tree")&&n&&On(r)?[n,On(r),o?s:t.slice(1)]:null}}],["bitbucket",{label:"Bitbucket",domain:"bitbucket.org",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="get"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}],["gitlab",{label:"GitLab",domain:"gitlab.com",protocols:["git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let n=e.slice(1),r=n.lastIndexOf("/");return n.includes("/-/")||n.includes("/archive.tar.gz")?null:n.slice(0,Math.max(r,0))&&On(n.slice(r+1))?[n.slice(0,r),On(n.slice(r+1)),t.slice(1)]:null}}],["gist",{label:"Gist",domain:"gist.github.com",protocols:["git:","git+ssh:","git+https:","ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="raw"&&(n||r)?[r?n:null,On(r||n),t.slice(1)]:null}}],["sourcehut",{label:"SourceHut",domain:"git.sr.ht",protocols:["git+ssh:","https:"],repo({pathname:e,hash:t}){let[,n,r,o]=e.split("/",4);return o!=="archive"&&n&&On(r)?[n,On(r),t.slice(1)]:null}}]]),EL=new Map([...vh.values()].map(e=>[e.domain,e])),FL=new Set(["git+ssh:","ssh:","git+https:","git:","http:","https:","git+http:",...[...vh.keys()].map(e=>`${e}:`)]);function LL(e){let t=e.indexOf("#"),n=e.indexOf("/"),r=o=>o>-1&&!(t>-1&&o>t);return n>0&&!e.startsWith(".")&&(t>-1?e[t-1]!=="/":!e.endsWith("/"))&&![/\s/u.exec(e)?.index??-1,e.indexOf("@"),e.indexOf(":"),e.indexOf("/",n+1)].some(r)}var Qd=e=>{try{return new URL(e)}catch{return null}};function OL(e){let t=e.indexOf("@"),n=e.indexOf(":"),r=FL.has(e.slice(0,n+1))||t>-1&&t<n?e:t>-1?`git+ssh://${e}`:e.indexOf("//")===n+1?e:`${e.slice(0,n+1)}//${e.slice(n+1)}`;if(Qd(r))return Qd(r);let o=i=>{let a=r.indexOf("#");return r.lastIndexOf(i,a>-1?a:1/0)},s=o(":")>o("@")?`${r.slice(0,o(":"))}/${r.slice(o(":")+1)}`:r;return s.lastIndexOf(":",s.indexOf("#")>-1?s.indexOf("#"):1/0)===-1&&!s.includes("//")&&(s=`git+ssh://${s}`),Qd(s)}function NL(e){if(!e)return null;let t=OL(LL(e)?`github:${e}`:e);if(!t)return null;let n=vh.get(t.protocol.slice(0,-1)),r=n??EL.get(t.hostname.replace(/^www\./u,"")),o=n?[t.pathname.replace(/^\/?[^@]*@|^\//u,""),t.hash.slice(1)]:r?.protocols.includes(t.protocol)&&r.repo(t);try{return o?(o.forEach(s=>s&&decodeURIComponent(s)),r):null}catch{return null}}function BL(e){let t=String(e??"").trim();if(/^(?:[.]|~\/|\/|[a-z]:|file:)/iu.test(t))return"path";if(/^npm:/iu.test(t)||!/[/:]|[.](?:tgz|tar\.gz|tar)$/iu.test(t))return"registry";let n=NL(t);if(n)return n.label;if(/^(?:git\+)?[a-z]+:/iu.test(t)){let r=/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#.*)?$/iu.exec(t);if(t.startsWith("git+ssh:")&&r&&!/:\d+(?:\/|$)/u.test(r[1]))return"git";let o=Qd(t)?.protocol;return/^(?:git|git\+(?:https?|rsync|ftp|file|ssh)):$/u.test(o)?"git":/^https?:$/u.test(o)?"URL":null}return/\/|[.](?:tgz|tar\.gz|tar)$/iu.test(t)?"path":"registry"}function zs(e){let[,t,n=""]=/^npm:((?:@[^/@]+\/)?[^/@]+)(?:@(.*))?$/iu.exec(String(e??"").trim())??[];return t?{name:t,spec:n}:null}var p1=e=>BL(e)==="registry";var DL=[["dependencies",null],["peerDependencies","peer"],["optionalDependencies","optional"]];function Ws(e){let t=[];for(let[n,r]of DL)for(let[o,s]of Object.entries(e?.[n]??{})){let i=zs(s)?.name??o;t.push({name:o,range:s,kind:r,opens:$l(i)&&p1(s)?i:null})}return t.toSorted((n,r)=>n.name.localeCompare(r.name)||(n.kind??"").localeCompare(r.kind??""))}function $h(e,t){let n=l=>new Map(Ws(l).map(p=>[`${p.kind??""}\0${p.name}`,p])),r=n(t),o=n(e),s=[],i=[],a=[];for(let[l,{name:p,kind:d,range:f,opens:m}]of o){let h=r.get(l);h?h.range!==f&&i.push({key:l,name:p,kind:d,from:f,to:h.range,opens:h.opens}):a.push({key:l,name:p,kind:d,range:f,opens:m})}for(let[l,{name:p,kind:d,range:f,opens:m}]of r)o.has(l)||s.push({key:l,name:p,kind:d,range:f,opens:m});return{removed:a,added:s,changed:i}}var eu=(e=[])=>e.map(({check:t,label:n,tooltip:r})=>u`<span class="${`npm-dependency-flag is-${t}`}" data-tooltip="${r}">${n}</span>`);function ln(e,t=null){let n=Nn("risk",`${e.name}@${e.version}${t===null?"":`..${t}`}`,()=>Ek(e.name,e.version,t),BS);return n.status==="ready"?n:null}var PL=/^https?:\/\/(?:www\.)?npmjs\.(?:com|org)\/package\/((?:@[^/]+\/)?[^/?#]+)(?:\/v\/([^/?#]+))?\/?(?:[?#].*)?$/u;function v1(e){let t=String(e??"").trim(),n=PL.exec(t),r,o=null;if(n)try{[r,o]=[decodeURIComponent(n[1]),n[2]?decodeURIComponent(n[2]):null]}catch{return null}else{let s=t.indexOf("@",1);[r,o]=s===-1?[t,null]:[t.slice(0,s),t.slice(s+1)]}return!$l(r)||o!==null&&!Ow(o)?null:{name:r,spec:o}}function zL(e,t){let n=new Set(t),r=[];for(let o of[e?.main,e?.module,"index.js"]){if(typeof o!="string")continue;let s=yh(o,n);s&&!r.includes(s)&&r.push(s)}return r}function WL(e){return{integrity:e.integrity,kind:"sourcemap",name:`${e.name}@${e.version}`,size:e.tarballSize,npm:{name:e.name,version:e.version,private:e.private===!0,published:typeof e.published=="string"?e.published:null,manifest:e.manifest??{}}}}function HL(e,t){let n=Array.isArray(t.files)?t.files:[],r=n.map(([o])=>o);return{integrity:e.integrity,kind:"sourcemap",size:e.size,npm:e.npm,json:{version:3,sources:r,sourcesContent:n.map(([,,o])=>typeof o=="string"?o:null)},fileSizes:new Map(n.map(([o,s])=>[o,s])),npmBinaries:new Map(n.filter(([,,o,s])=>typeof o!="string"&&typeof s=="string").map(([o,s,,i])=>[o,{size:s,digest:i}])),npmEntries:zL(e.npm.manifest,r),risk:()=>ln(e.npm)}}function Ra(e,t="overview",n=null){return e?.npm?{view:"npm",packageName:e.npm.name,packageSpec:e.npm.version,bundleTab:xl.has(t)?t:"overview",...n}:null}var UL=3,f1=new Map,Bn=new Map,VL=1e4,jL=5*6e4,m1=null;function tu(){let e=c.managedSession?`${c.managedSession.id}\0${c.managedSession.role}`:null;return e!==m1&&(f1.clear(),Bn.clear(),m1=e),f1}function g1(e,t){let n=tu();for(n.delete(e.name),n.set(e.name,{entry:e,details:t});n.size>UL;)n.delete(n.keys().next().value)}async function $1(e,t,n){let r=tu().get(`${e}@${t}`);if(r)return g1(r.entry,r.details),r;let o=await Rk(e,t,n),s=WL(o),i=HL(s,o);return s.npm.private||g1(s,i),GL(o),{entry:s,details:i}}function GL({name:e,version:t,known:n}){if(!n||typeof n!="object")return;let r={stats:e,advisories:e,tags:`${e}@${t}`,socket:`${e}@${t}`,provenance:`${e}@${t}`};for(let[o,s]of Object.entries(r)){let i=`${o}\0${s}`;n[o]&&Bn.get(i)?.status!=="ready"&&Bn.set(i,{status:"known",data:n[o]})}}function Nn(e,t,n,r){tu();let o=`${e}\0${t}`,s=Bn.get(o);if(s?.status==="known"){let a={status:"ready",...r(s.data)};return Bn.set(o,a),a}if(s&&!(s.status==="error"&&Date.now()>=s.retryAt))return s;let i={status:"loading",failures:s?.failures??0};return Bn.set(o,i),n().then(a=>({status:"ready",...r(a)}),()=>{let a=i.failures+1,l=Math.min(VL*2**(a-1),jL);return{status:"error",failures:a,wait:l,retryAt:Date.now()+l}}).then(a=>(Bn.get(o)!==i||(Bn.set(o,a),a.status==="error"&&setTimeout(()=>{Bn.get(o)===a&&O()},a.wait).unref?.(),KL()),null)).catch(()=>{}),i}var kh=!1;function KL(){kh||(kh=!0,queueMicrotask(()=>{kh=!1,O()}))}function nu(e){return Nn("versions",e,()=>Tk(e),t=>({versions:t.versions??[],distTags:t.distTags??{},times:t.times??{},created:typeof t.created=="string"?t.created:null,private:t.private===!0,teamScoped:t.teamScoped===!0}))}function qL(e={}){let t=new Map;for(let[n,r]of Object.entries(e))t.set(r,[...t.get(r)??[],n]);return t}function k1(e,t,n=Date.now()){let r=qL(e.distTags);return(e.versions?.includes(t)?e.versions:[t,...e.versions??[]]).map(s=>{let i=e.times?.[s];return{id:s,detail:r.get(s)?.join(", ")??"",...i&&{date:i.slice(0,10)},...i&&x1(e,i,n)&&{age:Rh(i,n)}}})}function x1(e,t,n=Date.now()){return e.status==="ready"&&ph(t,{minimumReleaseAge:e.teamScoped?0:uh,now:n})}var xh=new Intl.RelativeTimeFormat("en",{numeric:"auto"});function h1(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/864e5),r=n<60?xh.format(-n,"day"):n<730?xh.format(-Math.floor(n/30.44),"month"):xh.format(-Math.floor(n/365.25),"year");return`${Ps(Date.parse(e))} \xB7 ${r}`}var Sh=new Intl.RelativeTimeFormat("en",{numeric:"always"});function Rh(e,t=Date.now()){let n=Math.max(0,Math.floor((t-Date.parse(e))/6e4));return n<60?Sh.format(-n,"minute"):n<1440?Sh.format(-Math.floor(n/60),"hour"):Sh.format(-Math.floor(n/1440),"day")}var Th=e=>Ps(Date.parse(e)),S1=e=>`Published on ${Th(e)}`;function C1(e){let{name:t,version:n}=e.npm,r=nu(t),o=k1(r,n).map(({id:s,detail:i,date:a,age:l})=>({id:s,name:`${t}@${s}`,displayLabel:s,format:"npm",detail:i,...a&&{date:a},...l&&{dateWarning:l}}));return{noun:"version",base:n,widest:{name:`${t}@10.90.90`,detail:"latest"},pending:r.status==="loading",error:r.status==="error"?`Couldn't list the versions of ${t}.`:null,options:o.filter(s=>s.id!==n),choices:o,name:s=>s===e.integrity||s===n?e.name:`${t}@${s}`,load:async s=>(await $1(t,s)).details,dependencies:ZL,openDependency:eO,open:(s,i,a)=>xr(t,s,"compare",i?{compareSpec:i,...Wo(a)}:{})}}function xr(e=null,t=null,n="overview",r={}){!_()||!te?.active||te.navigate(e==null?{view:"npm"}:{view:"npm",packageName:e,packageSpec:t,bundleTab:n,...r})}function Ch(e){c.currentView="npm",c.npmLookup=e,c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1})}async function _1(e,t,n){let{packageName:r,packageSpec:o=null,bundleTab:s="overview"}=e;if(r==null)return Ch({input:c.npmLookup?.input??"",pending:!1,error:null}),n(),{view:"npm"};let i=`${r}${o==null?"":`@${o}`}`,a=c.currentView==="bundles"&&c.bundleDetails?.npm,l=a&&c.bundles?.[0]?.npm?.name===r&&c.bundles[0].npm.version===o?c.bundles[0]:null,p=l?c.bundleDetails:null;if(!l){let f=o!=null&&tu().has(`${r}@${o}`);!a&&!f&&(Ch({input:i,pending:!0,error:null}),n());try{({entry:l,details:p}=await $1(r,o??"latest",{signal:Le()}))}catch(m){return m?.name==="AbortError"||!t()?!1:(_a=null,Ch({input:i,pending:!1,error:m.message}),{view:"npm"})}if(!t()||!_())return!1}_a?.name===r&&_a.spec===o&&(T1([i,...Mh().filter(f=>f!==i)]),_a=null),Bt();let d=c.bundleCompare?.bundle===l.integrity?c.bundleCompare:null;return s==="review"&&(c.npmReview={bundle:l.integrity,...e.reviewPackage?{reviewPackage:e.reviewPackage,reviewSpec:e.reviewSpec??null}:{}}),c.bundles=[l],gr(l.integrity,s),s==="code"&&e.file!=null&&(c.bundleCodeFileRequest={bundle:l.integrity,file:e.file,...e.line==null?{}:{line:e.line},...e.endLine==null?{}:{endLine:e.endLine}}),s==="compare"&&e.compareSpec!=null?c.bundleCompare={bundle:l.integrity,target:e.compareSpec,mode:kl(e.compareMode)}:d&&(c.bundleCompare=d),c.bundleDetails=p,c.npmLookup={input:l.name,pending:!1,error:null},c.currentManagedTeam=null,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),n(),document.querySelector("#main-content")?.scrollTo({top:0}),Ra(l,c.bundleDetailsTab,vr(c))}var YL=10,R1=()=>`deepview.npm.recent.${c.managedSession?.id??"anonymous"}`,_a=null;function Mh(){try{let e=JSON.parse(localStorage.getItem(R1())??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"&&v1(t)):[]}catch{return[]}}function T1(e){try{localStorage.setItem(R1(),JSON.stringify(e.slice(0,YL)))}catch{}}function XL(e){T1(Mh().filter(t=>t!==e)),O()}function M1(e){let t=v1(e);if(!t){c.npmLookup={input:e??"",pending:!1,error:"Enter a package name, like lodash, @scope/name or name@1.2.3."},O();return}_a=t,xr(t.name,t.spec)}function JL(e){e.preventDefault(),M1(e.currentTarget.querySelector('input[name="package"]')?.value)}function I1(){let e=c.npmLookup??{input:"",pending:!1,error:null},t=["admin","manage"].includes(c.managedSession?.role),n=Mh();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(Oo)}</span><h1 id="npm-lookup-title">npm packages</h1></header><p class="npm-lookup-intro">Open a published version to read its files, as its tarball has them. ${t?g:"You can open public packages, and private ones in npm scopes your teams list."}</p><form class="npm-lookup-form" @submit="${JL}"><input name="package" type="text" aria-label="Package" autocomplete="off" spellcheck="false" maxlength="500" placeholder="lodash, @scope/name@1.2.3 or an npmjs.com link" .value="${e.input??""}" ?disabled="${e.pending}"> <button type="submit" ?disabled="${e.pending}">Open</button></form><div class="npm-lookup-message"><p class="npm-lookup-status" role="status">${e.pending?`Opening ${e.input}\u2026`:g}</p>${e.error?u`<p class="npm-lookup-error" role="alert">${e.error}</p>`:g}</div>${n.length>0?u`<section class="npm-lookup-recent" aria-labelledby="npm-lookup-recent-title"><h2 id="npm-lookup-recent-title">Recent searches</h2><ul>${n.map(r=>u`<li><button type="button" class="npm-lookup-recent-open" ?disabled="${e.pending}" @click="${()=>M1(r)}">${r}</button> <button type="button" class="npm-lookup-recent-remove" aria-label="${`Remove ${r} from recent searches`}" @click="${()=>XL(r)}">×</button></li>`)}</ul></section>`:g}</section>`}function ZL(e,t){let n=$h(e?.npm?.manifest,t?.npm?.manifest),r=e?.npm&&t?.npm?ln(t.npm,e.npm.version)?.dependencies:null,o=[e?.npm,t?.npm],s=(i,a)=>i.map(l=>({flags:[],...a?.find(({key:p})=>p===l.key),...l}));return{removed:n.removed,added:s(n.added,r?.added).map(i=>({...i,compared:o})),changed:s(n.changed,r?.changed)}}var A1=e=>{let t=ln(e)?.dependencies;return new Map((t?.held??t?.added??[]).map(({key:n,flags:r})=>[n,r]))},E1=({kind:e,name:t})=>`${e??""}\0${t}`,QL=/^(?:[\^~]|=)?v?(\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?)$/u,b1=e=>QL.exec(zs(e)?.spec??e.trim())?.[1]??null,y1=e=>zs(e)?.name??null;function eO({opens:e,from:t,to:n}){if(!e)return;let r=n&&b1(n),o=t&&b1(t);!o||!r||o===r||y1(t)!==y1(n)?xr(e):xr(e,r,"compare",{compareSpec:o})}function F1(e){let t=Ws(e.npm.manifest);if(t.length===0)return g;let n=A1(e.npm);return Ln({title:"Dependencies",count:t.length,list:!0,body:u`<ul class="bundles-sources-list npm-dependency-list">${t.map(r=>{let{name:o,range:s,kind:i,opens:a}=r,l=n.get(E1(r))??[],p=u`<span class="npm-dependency-name"><span class="bundles-source-path" data-tooltip-truncated data-tooltip="${o}">${o}</span>${eu(l)}</span> ${i?u`<span class="npm-dependency-kind">${i}</span>`:g} <span class="bundles-source-size" data-tooltip-truncated data-tooltip="${s}">${s}</span>`;return u`<li>${a?u`<button type="button" class="bundles-source-row npm-dependency-row" data-npm-dependency="${a}" @click="${()=>xr(a)}">${p}</button>`:u`<div class="bundles-source-row npm-dependency-row is-resource">${p}</div>`}</li>`})}</ul>`})}var tO=[["source","Non-registry",()=>"From elsewhere than npm's registry"],["unimported","Unimported",e=>`Imported by nothing of ${e}`]];function nO(e){let t=A1(e),n=Map.groupBy(Ws(e.manifest).flatMap(r=>(t.get(E1(r))??[]).map(({check:o})=>({...r,check:o}))),({check:r})=>r);return tO.filter(([r])=>n.has(r)).map(([r,o,s])=>u`<span class="npm-extension is-warn npm-dependency-check" data-tooltip="${`${s(e.version)}: ${n.get(r).map(({name:i,range:a})=>`${i} ${a}`).join(", ")}`}"><span>${o}</span><span class="npm-extension-count">${n.get(r).length}</span></span>`)}function rO(e,t){let{name:n,version:r}=e.npm,o=Nn("tags",`${n}@${r}`,()=>Ak(n,r),s=>({tags:Array.isArray(s.tags)?s.tags.filter(i=>typeof i=="string"&&i):[]}));return o.status!=="ready"||o.tags.length===0?g:u`<span class="bundle-origin-tags">${o.tags.map(s=>u`<a class="bundle-origin-link bundle-tag-link" href="${Dg(t,s)}" target="_blank" rel="noopener noreferrer">${W(ll)}<span>${s}</span></a>`)}</span>`}function Hs(e,t,n=e){let r=n===e||n===`./${e}`?g:`./${e}`;return t?.has(e)?u`<button type="button" class="bundle-entry-point" data-bundle-view-source="${e}" data-tooltip="${r}">${n}</button>`:n}function w1(e,t,n){let r=e.knownAccounts?.includes(t);return u`<a class="${`bundle-origin-link npm-account ${r?"is-known":"is-unknown"}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(t)}`}" data-tooltip="${r?"Publishes one of npm's most downloaded packages":"Unknown publisher"}" target="_blank" rel="noopener noreferrer"><span>${n}</span></a>`}var oO=/^\s*(Package no longer supported\.)\s+Contact Support at https:\/\/www\.npmjs\.com\/support for more info\.\s*$/u,Ih=e=>e.replace(oO,"$1");function Ah(e,{prefix:t="",githubFigures:n=g,provenance:r=g,provenanceNamesBuilder:o=!1,files:s=null}={}){let{manifest:i}=e.npm,a=i.github?.github,l=a?Od({repo:{github:a,directory:i.github.directory??"",commit:i.gitHead}})[0]:null,p=nu(e.npm.name),d=e.npm.published??p.times?.[e.npm.version];return u`<dl class="bundles-detail-meta npm-facts">${e.npm.private?u`<dt>Access</dt><dd>Private</dd>`:g} ${i.deprecated?u`<dt>Deprecated</dt><dd class="npm-deprecated">${Ih(i.deprecated)}</dd>`:g} ${i.description?u`<dt>Description</dt><dd>${i.description}</dd>`:g} ${i.license?u`<dt>License</dt><dd>${u1(i.license,[...s??[]]).map(({text:f,file:m})=>Hs(m,s,f))}</dd>`:g} ${i.author?u`<dt>Author</dt><dd class="bundle-origin-row">${i.authorAccount?u`${w1(i,i.authorAccount,i.author)}${i.author===i.authorAccount?g:u`<span class="npm-publisher">~${i.authorAccount}</span>`}`:i.author}</dd>`:g} ${i.publisher&&i.publisher!==i.authorAccount?u`<dt>Publisher</dt><dd class="bundle-origin-row">${w1(i,i.publisher,`~${i.publisher}`)}</dd>`:i.trustedPublisher&&!o?u`<dt>Publisher</dt><dd class="npm-trusted-publisher">${i.trustedPublisher}</dd>`:g} ${d?u`<dt>Published</dt><dd>${x1(p,d)?u`<span class="npm-recent">${h1(d)}</span>`:h1(d)}</dd>`:g} ${l?u`<dt>GitHub</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${l.href}" target="_blank" rel="noopener noreferrer">${W(Kt)}<span>${l.text}</span></a> ${n}</dd><dt>Commit</dt><dd class="bundle-origin-row">${l.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${l.commit.href}" data-tooltip="${l.commit.hash}" data-tooltip-icon="commit" target="_blank" rel="noopener noreferrer">${W(al)}<span>${l.commit.text}</span></a> ${rO(e,a)}`:u`<span class="npm-commit-missing">Not recorded at publish</span>`}</dd>`:g} ${r===g?g:u`<dt>Provenance</dt><dd class="bundle-origin-row">${r}</dd>`} ${i.homepage&&/^https?:\/\//iu.test(i.homepage)?u`<dt>Homepage</dt><dd><a class="bundle-origin-link" href="${i.homepage}" target="_blank" rel="noopener noreferrer"><span>${i.homepage}</span></a></dd>`:g}<dt>Integrity</dt><dd class="mono bundle-integrity" data-tooltip-truncated data-tooltip="${e.integrity}">${e.integrity}</dd>${t?u`<dt>Prefix</dt><dd class="mono">${t}</dd>`:g}</dl>`}var sO=(e,t)=>e.split(/(\s+)/u).map(n=>{let r=n.replace(/^\.\//u,"");return t?.has(r)?Hs(r,t,n):n});function L1(e,t=null,n=null){let{manifest:r}=e.npm,o=["main","module","types"].filter(d=>typeof r[d]=="string").map(d=>({label:`${d[0].toUpperCase()}${d.slice(1)}`,path:r[d],file:yh(r[d],t)??wh(r[d])})),s=o.find(d=>d.label==="Main"),i=o.find(d=>d.label==="Module");s&&i&&s.file===i.file&&(s.label="Main, Module",o.splice(o.indexOf(i),1));let a=Object.keys(r.bin??{}),l=xa(r,t),p=Ws(r).length;return u`${o.map(({label:d,path:f,file:m})=>u`<dt>${d}</dt><dd class="mono"><span class="npm-entry-point">${kn(m,Ho(n,m))}${Hs(m,t,f)}</span></dd>`)} ${r.type?u`<dt>Type</dt><dd class="mono">${r.type}</dd>`:g} ${a.length>0?u`<dt>Bin</dt><dd class="mono">${a.join(", ")}</dd>`:g} ${r.engines?u`<dt>Engines</dt><dd class="mono">${Object.entries(r.engines).map(([d,f])=>`${d} ${f}`).join(", ")}</dd>`:g} ${l.length>0||r.hasInstallScript?u`<dt>Install scripts</dt><dd class="npm-install-scripts">${l.length===0?"Yes":l.map(([d,f])=>u`<div class="npm-install-script"><span class="npm-install-script-name">${d}</span><code>${sO(f,t)}</code></div>`)}</dd>`:g}<dt>Dependencies</dt><dd class="npm-dependencies-fact">${Yd("dependencies",p,p===0?"None":p)}${nO(e.npm)}</dd>`}var _h=class extends Et{static properties={name:{},version:{},tab:{},list:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.name="",this.version="",this.tab="overview",this.list=null}render(){let t=this.list?.status==="ready"?this.list:{versions:[],distTags:{}},n=k1(t,this.version).map(({id:r,detail:o,date:s,age:i})=>({value:r,label:r,detail:o,secondary:s,...i&&{secondaryWarning:i}}));return u`<bundle-selector .options="${n}" .value="${this.version}" noun="version" versions label="${`Version of ${this.name}`}" placeholder="${this.version}" ?disabled="${n.length<=1}" aria-busy="${this.list?.status==="loading"?"true":g}" @bundle-change="${r=>{r.detail.value!==this.version&&xr(this.name,r.detail.value,this.tab)}}"></bundle-selector>`}};customElements.get("npm-version-select")||customElements.define("npm-version-select",_h);var O1=u`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" aria-hidden="true" viewBox="0 75 405 400"><path fill="currentColor" d="m62 447.6 65.8-68.2c2.2-.9 22.7 12 28.2 14.1C295.4 446.8 399.2 263.6 285.1 172 184.3 91.1 41.1 191.5 82 315.6c3.9 12 10.8 21.7 15.4 33.2l-47.1 47C-32 294.9 7.4 142.3 126.3 91.3 241.3 42 374.4 112 398 234.5c29.4 152.7-116.5 274.9-262.7 223.6-15.9-5.6-17-10.6-34.9-10.6H62Z"/><path fill="#e02129" d="M190.1 181.8c128.8-15 141.2 170.8 26 182.6-126.4 12.9-137.9-169.5-26-182.6M209 236c-7.4 5.6-10.8-5.4-13-7.7-9.6-10.3-19.4-.8-14 1.7s9.5-.3 10.1 5.6-9 9.9-7.9 16.4c13.2-5.9 25.9-6.4 39.1 0 3.2-7.1-7.9-12.1-7.8-14.8.1-9.4 11.6-6.2 12.6-7.2 4.3-4.3-8.9-11.7-17.1-.6-1.3 1.8-1.4 6.3-1.9 6.6zm-7.6 14.3c-10.1-1.5-19.3 10-25 11.8s-23.2 1.5-14.9 16.3c3.9.8 5.1-13.1 13.3-9.4 1.9 13.1-2.8 8.7-9 12.2-10 5.7-8.1 20.2-1.3 12.8 2.7-3 1.5-9.6 10.3-7.7 1.3 15.9-.8 8.4-7.9 11.7-11.5 5.3-9 20.2-1.7 14.8s0-10.8 8.6-9.3c1 .2 5.8 10.8 12.4 14.5 13.7 7.9 35 5.5 44.8-7.6s1.6-6.5 1.8-6.7c4-3.1 11.3 4.6 11 9.2l5.5-1.5c2.2-3.1-1.6-8.2-3.9-10.3-7.6-6.8-13.5.9-11-14.8 9-2.6 8.4 8.7 9.4 9.4 6 4.2 8.4-7.8 1.5-13.2-7.4-5.8-13.2 3.6-10.9-13.4 7.4-1.3 8.3 3.2 9.4 9.4 8.3 1.4 6.9-7.2 3.1-11.8-4.5-5.5-10.5-2.6-15.7-4.7-1.3-.5-25.1-18.8-25.1-9.4v52.5c-1.5.6-4.7-1.4-4.7-2.3z"/><ellipse cx="206.6" cy="270" fill="#e02129" rx="74.6" ry="66.5"/><path fill="#fff" d="M200.6 250v55.5s.4 1 .5 1.1c1.1 1.8 3.7 1.8 4.9 0 .1-.2.5-1.1.5-1.3v-55.4a34 34 0 0 1 17.2 5.8c3.1 2.2 5.6 5.1 7.7 8.3 3.8.1 7.6-.5 11.3.8 5.2 1.8 9.6 7.5 9.6 13.1 0 4.2-5.8 5.3-7.3 1.5-.7-1.8-.3-3.2-1.7-5-.8-1-3-2.7-4.3-2.7h-4.5c1.1 4.1.8 8.4.8 12.6.1.1 1.7-.1 2-.1 7.3 0 13.9 6 14.4 13.5.3 5.3-6.3 6-7.5 1.8-.6-2.1-.3-3.5-2-5.3-.8-.9-2.9-2.2-4.2-2.2h-3c.2 1 .2 2.2.1 3.2 0 2.1-.4 4.3-.9 6.4-.2.9-.5 1.8-.7 2.6 5.5-.7 10.5.7 14.1 5 1.7 2 3.4 5.6 3.6 8.3.5 5.4-6.6 6.7-7.8 1.2-.5-2.3-.7-3.8-2.7-5.4-3.1-2.5-7-1.2-10.7-1.4-1.9 3.2-4.5 6.1-7.5 8.4-14.4 10.8-36.9 7.2-46.2-8.4-.4-.2-2.4 0-2.9 0-3.2 0-6-.6-8.4 2.1-1.6 1.8-1.5 3.2-2.1 5.3-1.2 4.5-7.9 3.6-7.7-1.4.3-5.5 4.9-11.3 10.1-13 1.7-.5 5.7-1 7.4-.6.1 0 .1.1.1-.1 0-1.1-.7-2.8-.9-4.1-.4-2.7-.6-5.4-.4-8.1-2.8-.1-5.3.2-7.2 2.5-1.4 1.7-1.3 2.9-1.8 4.9-1.1 4.4-7.9 3.8-7.6-1.5.2-4.1 2.9-8.7 6.3-11 3-2.1 6.5-2.7 10.1-2.6v-5.8c.2-2.2.3-4.5.9-6.6h-4.5c-1.8 0-4.2 2.2-4.9 3.7-1.1 2.3-.4 6-4.1 6.3-3.4.3-4.5-2.3-4.1-5.2.9-6.1 5.1-11 11.3-12.2 3.1-.6 6.2 0 9.3-.4 2.2-3.1 4.8-6 7.9-8.3 4.9-3.5 10.9-5.1 16.8-5.8Z"/><path fill="#fff" d="M197.3 235.1c4.1-.7 8.3-.9 12.4 0 1.1-7.6 7-14.6 15.2-14 3.3.2 5.7 3.1 3.6 6.1-1.5 2-4.1 1-6.2 1.7s-3.7 2.5-4.5 4.4c-.3.7-1.2 3.8-.9 4.3 0 .1 1.3 1 1.6 1.2 3.4 3.1 6.2 7.4 6.6 12 0 .6-.1 1.2.1 1.8-.1.1-2.6-1.5-2.9-1.8-10.5-6-27.5-5.7-37.9.4-.2.1-2.3 1.6-2.4 1.5-.2-5.5 2.8-10.5 6.8-14 .3-.3 1.3-.9 1.5-1.1.1-.1.1-.2.1-.3 0-.5-.3-1.8-.5-2.3-.9-3.3-3-6-6.6-6.3h-2.2c-4.2-.4-4.5-6.5-.2-7.4 2.3-.5 5.2 0 7.3 1 5.2 2.2 8.5 7.4 9.1 12.9Z"/></svg>`;var iO=new Map([["registry",{label:"Source: npm registry",icon:qw}],["repository",{label:"Source: GitHub repository",icon:W(Kt)}],["osv",{label:"Source: OSV",icon:O1}]]);function aO(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function lO(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var ru=u`<svg class="external-link-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 13L13 3"/><path d="M5 3h8v8"/></svg>`;function cO(e){let t=/^CWE-(\d+)$/u.exec(e);if(!t)return u`<span>${e}</span>`;let n=`https://cwe.mitre.org/data/definitions/${t[1]}.html`;return u`<a class="bundle-advisory-cwe" href="${n}" target="_blank" rel="noopener noreferrer">${e}</a>`}function dO(e,t){return u`<div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${e}`}">${aO(e)}</span> ${typeof t=="number"?u`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${t.toFixed(1)}</span></span>`:g}</div>`}function uO(e){let t=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,n=e.ghsa??lO(t)??(typeof e.id=="string"?e.id:null),r=iO.get(e.source);return!r&&!(n&&t)?g:u`<span class="bundle-advisory-reference">${r?u`<span class="bundle-advisory-source" role="img" aria-label="${r.label}">${r.icon}</span>`:g} ${n&&t?u`<a class="bundle-advisory-ghsa" href="${t}" target="_blank" rel="noopener noreferrer">${n}${ru}</a>`:g}</span>`}function pO(e){let t=Array.isArray(e)?e.filter(n=>typeof n=="string"):[];return t.length>0?u`<span class="bundle-advisory-cwes">${t.map((n,r)=>u`${r===0?"":", "}${cO(n)}`)}</span>`:g}function ou(e,t=null){let n=typeof e.cvss?.vectorString=="string"?e.cvss.vectorString:"",r=typeof e.vulnerable_versions=="string"?e.vulnerable_versions:null,o=Array.isArray(e.versions)?e.versions.filter(s=>typeof s=="string"):[];return u`<li class="bundle-advisory-row">${dO(e.severity,e.cvss?.score)}<div class="bundle-advisory-body"><div class="bundle-advisory-header">${t&&typeof e.details=="string"&&e.details.trim()?u`<button type="button" class="bundle-advisory-title" aria-haspopup="dialog" @click="${()=>t(e)}">${e.title}</button>`:u`<span class="bundle-advisory-title">${e.title}</span>`} ${uO(e)}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${e.informational?u`<span>${e.informational}</span>`:g} ${r?u`<span>Affected <span class="mono">${r}</span></span>`:g} ${o.length>0?u`<span>Matches <span class="mono">${o.join(", ")}</span></span>`:g} ${pO(e.cwe)}</div>${n?u`<div class="bundle-advisory-cvss-vector mono">${n}</div>`:g}</div></div></li>`}function Eh(e){if(typeof e!="string")throw new TypeError(`a text must be a string, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a text must be a well-formed string");return{proven:!1,reason:"unsupported",at:null}}var fO=e=>e.subarray(0,8e3).includes(0),N1=(e,t)=>(e+Math.imul(t,97)>>>0)%107927;function B1(e){let t=!fO(e),n=new Map,r=(l,p)=>n.set(l,(n.get(l)??0)+p),o=0,s=0,i=0;for(let l=0;l<e.length;l++){let p=e[l];if(t&&p===13&&e[l+1]===10)continue;let d=o;o=(o<<7^s>>>25)+p>>>0,s=(s<<7^d>>>25)>>>0,!(++i<64&&p!==10)&&(r(N1(o,s),i),i=0,o=0,s=0)}i>0&&r(N1(o,s),i);let a=Uint32Array.from(n.keys()).sort();return{hashes:a,bytes:Float64Array.from(a,l=>n.get(l))}}function D1(e,t,n,r){if(e===null||t===null||t.length===0)return 0;let o=Math.abs(e.length-t.length),s=Math.max(e.length,t.length);if(s*(6e4-n)<o*6e4)return 0;let i=r(e),a=r(t),l=0;for(let p=0,d=0;p<i.hashes.length&&d<a.hashes.length;)i.hashes[p]<a.hashes[d]?p++:i.hashes[p]>a.hashes[d]?d++:l+=Math.min(i.bytes[p++],a.bytes[d++]);return Math.trunc(l*6e4/s)}function P1(e,t){let n=e.length;if(n!==t.length)return!1;let r=0;if(n>=32&&(e.byteOffset&3)===(t.byteOffset&3)){for(let a=4-(e.byteOffset&3)&3;r<a;r++)if(e[r]!==t[r])return!1;let o=n-r>>>2,s=new Int32Array(e.buffer,e.byteOffset+r,o),i=new Int32Array(t.buffer,t.byteOffset+r,o);for(let a=0;a<o;a++)if(s[a]!==i[a])return!1;r+=o*4}for(;r<n;r++)if(e[r]!==t[r])return!1;return!0}var bt=class extends Error{constructor(t,n,r){let o=r===void 0?"":` in the ${r} tree`;super(n===void 0?t:`${t}: ${JSON.stringify(n)}${o}`),this.name="CompareError",this.path=n,this.tree=r}};var mO=new Set(["file","contiguous-file"]),gO=new Set(["fifo","character-device","block-device"]),hO=/(?:^|\/)\.{0,2}(?:\/|$)/u;function bO(e){if(!Number.isInteger(e)||e<0||e>4095)throw new RangeError(`a mode must be an integer from 0 to 0o7777, not ${e}`)}function yO(e,t,n,r){if(typeof e!="string")throw new TypeError(`an entry's name must be a string, not ${typeof e}`);if(!(e==="."&&t==="directory")){if(r?e==="":hO.test(e))throw new bt(r?"a name must not be empty":"a name must be a relative path with no empty, `.` or `..` segment",e,n);if(!e.isWellFormed())throw new bt("a name must be well-formed Unicode",e,n)}}function wO(e,t,n){if(typeof e!="string"||e==="")throw new bt("a link must name its target",t,n);if(!e.isWellFormed())throw new bt("a link target must be well-formed Unicode",t,n);return e}function vO(e){if(e===void 0)return new Uint8Array(0);if(e instanceof Uint8Array)return e;if(typeof e!="string")throw new TypeError(`a file's data must be a string or a Uint8Array, not ${typeof e}`);if(!e.isWellFormed())throw new TypeError("a file's text must be well-formed Unicode");return e}var su=e=>typeof e=="string"?e$(e):e;function $O(e,t,n){if(typeof e!="object"||e===null)throw new TypeError(`an entry must be an object, not ${e===null?"null":typeof e}`);let{name:r,type:o="file",mode:s,linkname:i,data:a}=e;if(yO(r,o,t,n),s!==void 0&&bO(s),mO.has(o))return{path:r,type:"file",mode:s??420,data:vO(a)};if(o==="symlink"||o==="hardlink")return{path:r,type:o,target:wO(i,r,t)};if(o==="directory")return{path:r,type:o};throw gO.has(o)?new bt(`a ${o} is neither a file nor a link`,r,t):new TypeError(`${JSON.stringify(o)} is not an entry type`)}function 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:P1(su(e.data),su(t.data))}function kO(e,t,n){let r=new Set([e.path]),o=t.get(e.target);for(;o?.type==="hardlink";){if(r.has(o.path))throw new bt("a hard link leads back to itself",e.path,n);r.add(o.path),o=t.get(o.target)}if(o===void 0||o.type==="directory")throw new bt("a hard link must name a file or a link in the tree",e.path,n);return{...o,path:e.path}}function Fh(e,t,n){let r=new Map;for(let s of e){let i=$O(s,t,n);if(!(i.type==="directory"&&i.path===".")){if(r.has(i.path))throw new bt("a name is given twice",i.path,t);r.set(i.path,i)}}let o=new Map;for(let[s,i]of r){for(let a=n?-1:s.lastIndexOf("/");a>0;a=s.lastIndexOf("/",a-1)){let l=r.get(s.slice(0,a));if(l!==void 0&&l.type!=="directory")throw new bt(`a path lies under a ${l.type==="symlink"?"link":"file"}`,s,t)}i.type==="hardlink"?o.set(s,kO(i,r,t)):i.type!=="directory"&&o.set(s,i)}return o}var xO=100,SO=4,z1=e=>e.slice(e.lastIndexOf("/")+1);function W1(e,t){if(e.type==="symlink")return`l${e.target}`;let n=t(e);return`f${n.length}:${n$(n)}`}function CO({sources:e,dests:t,sourceNames:n,destNames:r,used:o,record:s,bytes:i}){let a=Map.groupBy(e.keys(),l=>W1(e[l],i));for(let l=0;l<t.length;l++){let p=-1,d=xO;for(let f of a.get(W1(t[l],i))??[])if(!(o.has(f)||!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 _O=new Map([[".ts",".js"],[".mts",".mjs"],[".cts",".cjs"],[".tsx",".jsx"]]),RO=new Map([...[".js",".mjs",".cjs",".jsx",".ts",".mts",".cts",".tsx"].map(e=>[e,"script"]),...[".css",".scss",".sass",".less"].map(e=>[e,"style"])]);function V1(e){let t=e.split("/"),n=t.pop(),r=n.lastIndexOf(".");return r>0?{dirs:t,stem:n.slice(0,r),extension:n.slice(r)}:{dirs:t,stem:n,extension:""}}function H1(e){let{dirs:t,stem:n,extension:r}=V1(e);return JSON.stringify([t.map(o=>o==="lib"||o==="src"?null:o),n,_O.get(r)??r])}function TO(e){let{dirs:t,stem:n,extension:r}=V1(e),o=[n,RO.get(r)??r],s=t.lastIndexOf("node_modules"),i=s===-1?0:s+(t[s+1]?.startsWith("@")?3:2),a=[JSON.stringify([...o,t])];for(let l=i;l<t.length;l++)a.push(JSON.stringify([...o,t.toSpliced(l,1,null)]));return a}function j1({pairs:e,used:t,scoreOf:n},{remaining:r,open:o},{s,d:i,score:a},l){let p=Math.max(l,a+Math.trunc((6e4-a)/2));return o.some(d=>d!==i&&!e.has(d)&&n(s,d,p)>=p)||r.some(d=>d!==s&&!t.has(d)&&n(d,i,p)>=p)}function MO(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=Map.groupBy(t.remaining.filter(m=>o[m].type==="file"),m=>H1(o[m].path)),f=t.open.filter(m=>s[m].type==="file").flatMap(m=>(d.get(H1(s[m].path))??[]).map(h=>({s:h,d:m,score:p(h,m,0)})));for(let m of f.sort((h,b)=>b.score-h.score))!i.has(m.d)&&!a.has(m.s)&&!(n&&j1(e,t,m,r))&&l(m.d,m.s,m.score)}function IO(e,t,n,r){let{sources:o,dests:s,pairs:i,used:a,record:l,scoreOf:p}=e,d=new Map,f=(y,w,v)=>new Map(w.filter(x=>y[x].type==="file").map(x=>{let k=TO(y[x].path);for(let $ of k)(d.get($)??d.set($,{sources:[],dests:[]}).get($))[v].push(x);return[x,k]})),m=f(s,t.open.filter(y=>!i.has(y)),"dests"),h=f(o,t.remaining.filter(y=>!a.has(y)),"sources"),b=(y,w)=>{let v=new Set(y.flatMap(x=>d.get(x)[w]));return v.size===1?[...v][0]:-1};for(let[y,w]of h){let v=b(w,"dests");if(v===-1||b(m.get(v),"sources")!==y)continue;let x={s:y,d:v,score:p(y,v,0)};n&&j1(e,t,x,r)||l(v,y,x.score)}}function AO(e,t,n){let r=Oh(e),o=t<6e4&&r.remaining.length*r.open.length<=n*n;MO(e,r,o,t),IO(e,r,o,t)}function U1(e,t){let n=new Map;for(let r of t)n.set(e[r],n.has(e[r])?-1:r);return n}function EO({sourceNames:e,destNames:t,record:n,scoreOf:r},{remaining:o,open:s},i){let a=U1(t,s),l=U1(e,o);for(let p of o){let d=a.get(e[p]);if(d===void 0||d===-1||l.get(e[p])===-1)continue;let f=r(p,d,i);f>=i&&n(d,p,f)}}var Lh=(e,t)=>t.score-e.score||t.nameScore-e.nameScore;function FO(e,t){if(e.length<SO){e.push(t);return}let n=0;for(let r=1;r<e.length;r++)Lh(e[r],e[n])>0&&(n=r);Lh(e[n],t)>0&&(e[n]=t)}function LO({sourceNames:e,destNames:t,pairs:n,used:r,record:o,scoreOf:s},{remaining:i,open:a},l){let p=[];for(let d of a){let f=[];for(let m of i)FO(f,{score:s(m,d,l),nameScore:e[m]===t[d]?1:0,dst:d,src:m});p.push(...f)}for(let{dst:d,src:f,score:m}of p.sort(Lh)){if(m<l)break;!n.has(d)&&!r.has(f)&&o(d,f,m)}}var Oh=({sources:e,dests:t,pairs:n,used:r})=>({remaining:e.keys().filter(o=>!r.has(o)).toArray(),open:t.keys().filter(o=>!n.has(o)).toArray()});function Nh(e,t,{minimum:n,limit:r,byPath:o}){let s=new Map,i=new Set;if(e.length===0||t.length===0)return s;let a=new Map,l=new Map,p=h=>h.type==="file"?l.get(h)??l.set(h,su(h.data)).get(h):null,d=h=>a.get(h)??a.set(h,B1(h)).get(h),f={sources:e,dests:t,pairs:s,used:i,sourceNames:e.map(h=>z1(h.path)),destNames:t.map(h=>z1(h.path)),record(h,b,y){s.set(h,{source:b,score:y}),i.add(b)},bytes:p,scoreOf:(h,b,y)=>D1(p(e[h]),p(t[b]),y,d)};if(CO(f),o&&AO(f,n,r),n>=6e4)return s;EO(f,Oh(f),n+Math.trunc(.5*(6e4-n)));let m=Oh(f);return m.remaining.length*m.open.length<=r*r&&LO(f,m,n),s}function 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 t$(t)}catch{return}}var OO=new Set(["none","all","change","trailing"]);function Ia({horizon:e=1/0,whitespace:t="none",ignoreCase:n=!1}={}){if(e!==1/0&&!(Number.isSafeInteger(e)&&e>=0))throw new RangeError(`horizon must be a whole number or Infinity, not ${e}`);if(!OO.has(t))throw new RangeError(`whitespace must be 'none', 'all', 'change' or 'trailing', not ${t}`);if(typeof n!="boolean")throw new TypeError(`ignoreCase must be a boolean, not ${typeof n}`);return{horizon:e,whitespace:t,ignoreCase:n}}function G1(e,t,n){let r=Ma(e),o=Ma(t);if(r===void 0||o===void 0)return{binary:!0,blocks:[],insertions:null,deletions:null};let s=r===o?[]:Lp(r,o,n),i=(a,l)=>s.reduce((p,d)=>p+d[l]-d[a],0);return{binary:!1,blocks:s,insertions:i("b0","b1"),deletions:i("a0","a1")}}var NO=50,BO=1e3;function Bh(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r++)if(e[r]!==t[r])return e.codePointAt(r)-t.codePointAt(r);return e.length-t.length}function DO(e){if(e===!1)return null;let t=e===!0?NO:e;if(typeof t!="number")throw new TypeError(`renames must be a boolean or a percentage, not ${typeof e}`);if(!(t>0&&t<=100))throw new RangeError(`renames must be a percentage above 0 and at most 100, not ${e}`);return Math.max(1,Math.trunc(6e4*t/100))}function PO({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}),WO=/\.d\.(?:[^./]+\.)?[cm]?ts$/u,K1=e=>e.endsWith(".mts")?"module":e.endsWith(".cts")?"commonjs":null;function q1(e){if(e===null)return{proven:!0,inert:!1};let t=Ma(e);try{return t===void 0?{proven:!1}:Eh(t)}catch{return{proven:!1}}}function HO(e){if(![e.old,e.new].filter(o=>o!==null).every(o=>o.type==="file"&&WO.test(o.path))||e.old&&e.new&&e.old.mode!==e.new.mode)return e;let n=q1(e.new),r=q1(e.old);if(!r.proven||!n.proven||!!r.inert!=!!n.inert)return e;if(r.inert){let o=K1(e.old.path);if(o===null||o!==K1(e.new.path))return e}return{...e,typeOnly:!0}}function UO(e,t){let n=[],r=[],o=[];for(let[s,i]of e){let a=t.get(s);a===void 0?o.push(i):a.type!==i.type?r.push(Aa("type-changed",i,a)):zO(i,a)||r.push(Aa("modified",i,a))}for(let[s,i]of t)e.has(s)||n.push(i);return o.sort((s,i)=>Bh(s.path,i.path)),n.sort((s,i)=>Bh(s.path,i.path)),{changes:r,deleted:o,added:n}}function VO(e,t,{group:n,...r}){if(n===null)return Nh(e,t,r);let o=new Map,s=a=>Map.groupBy(a.keys(),l=>n(a[l].path)),i=s(e);for(let[a,l]of s(t)){let p=i.get(a);if(p!==void 0)for(let[d,{source:f,score:m}]of Nh(p.map(h=>e[h]),l.map(h=>t[h]),r))o.set(l[d],{source:p[f],score:m})}return o}function Dh(e,t,{renames:n=!0,renamesByPath:r=!0,renameLimit:o=BO,renameGroup:s=null,paths:i="tree",lines:a=!0,horizon:l,whitespace:p,ignoreCase:d}={}){let f=DO(n);PO({renamesByPath:r,renameLimit:o,renameGroup:s,paths:i,lines:a});let m=Ia({horizon:l,whitespace:p,ignoreCase:d}),h=i==="keys",{changes:b,deleted:y,added:w}=UO(Fh(e,"old",h),Fh(t,"new",h)),v=f===null?new Map:VO(y,w,{minimum:f,limit:o,byPath:r,group:s});for(let[k,$]of w.entries()){let S=v.get(k);b.push(S===void 0?Aa("added",null,$):Aa("renamed",y[S.source],$,Math.trunc(S.score*100/6e4)))}let x=new Set(v.values().map(({source:k})=>k));for(let[k,$]of y.entries())x.has(k)||b.push(Aa("deleted",$,null));return b.sort((k,$)=>Bh((k.new??k.old).path,($.new??$.old).path)),(a?b.map(k=>({...k,...G1(k.old,k.new,m)})):b).map(HO)}var iu=(e,{lo:t,start:n},r)=>e[n+(r-t)/2];function Y1(e,t,{low:n,high:r},o,s){return e===-t||e-1<n||e!==t&&e+1<=r&&iu(o,s,e-1)<iu(o,s,e+1)?e+1:e-1}function jO(e,t,n,{first:r,n:o,m:s,d:i,...a}){e.a.fill(1,0,r).fill(1,o),e.b.fill(1,0,r).fill(1,s);let l=o,p=s;for(let d=i;d>0;d--){let f=l-p,m=Y1(f,d,a,t,n[d]),h=iu(t,n[d],m);for(let b=m>f?h:h+1;b<l;b++)e.a[b]=e.b[b-f]=1;l=h,p=l-m}for(let d=r;d<l;d++)e.a[d]=e.b[d]=1}function X1(e,t,n){let r=0,o=t.length,s=e.length,i=2*(s+o);for(;r<s&&r<o&&e[r]===t[r];)r++;for(;s>r&&o>r&&e[s-1]===t[o-1];)s--,o--;let a={high:s-r,low:r-o},l=[r],p=[{lo:1,start:0}];for(let d=0;d<=a.high-a.low;d++){let f=p[d],m=Math.min(d,a.high),h=Math.max(-d,a.low+(a.low+d&1));p.push({lo:h,start:l.length});for(let b=h;b<=m;b+=2){let y=Y1(b,d,a,l,f),w=iu(l,f,y),v=y>b?w:w+1,x=v;for(;v<s&&v-b<o&&e[v]===t[v-b];)v++;if(i+=2+v-x,l.push(v),v>=s&&v-b>=o)return jO(n,l,p,{first:r,n:s,m:o,d,...a}),i}}throw new Error("no edit script between two lines")}var GO=/[\p{L}\p{N}_$]+|\s+|[^\p{L}\p{N}_$\s]/gu,KO=2e3,qO=800,lu=.6;function au(e,t){if(e.length>KO)return null;let n=e.match(GO)??[];return n.length>qO?null:{line:e,tokens:n,words:n.map(r=>(t.has(r)||t.set(r,t.size),t.get(r)))}}function J1({tokens:e,line:t},n){let r=[];for(let o=0,s=0;s<e.length;o+=e[s++].length){if(n[s])continue;let i=r.at(-1);i&&/^\s*$/u.test(t.slice(i[1],o))?i[1]=o+e[s].length:r.push([o,o+e[s].length])}return r}var Z1=(e,t)=>e.reduce((n,[r,o])=>n+o-r,0)/Math.max(1,t.length);function Ph(e,t){let n={a:e.words.map(()=>0),b:t.words.map(()=>0)},r=X1(e.words,t.words,n),o={a:J1(e,n.a),b:J1(t,n.b)};return{ranges:o,share:n.a.includes(1)?Math.min(Z1(o.a,e.line),Z1(o.b,t.line)):1,steps:r}}function YO(e,t){if(e===t)return{a:[],b:[]};let n=new Map,r=au(e,n),o=au(t,n);if(r===null||o===null)return null;let{ranges:s,share:i}=Ph(r,o);return i<=lu?s:null}var Q1=200,XO=5e6,JO=6,ZO=60,QO=3;function eN(e){let t=new Map;for(let n of e?.tokens??[])t.set(n,(t.get(n)??0)+1);return t}function tN(e,t){let n=new Map,r=[e,t].map(f=>f.map(m=>au(m,n))),o=r.map(f=>f.map(eN)),s=0,i=(f,m,h)=>{let b=0;for(let[y,w]of f)if(s+=QO,(b+=y.length*Math.max(0,w-(m.get(y)??0)))>lu*h.length)return 1/0;return b/Math.max(1,h.length)},a=(f,m)=>r[0][f]===null||r[1][m]===null?1/0:Math.min(i(o[0][f],o[1][m],e[f]),i(o[1][m],o[0][f],t[m])),l=(f,m)=>{if(s+=ZO,a(f,m)===1/0)return 1/0;let{share:h,steps:b}=Ph(r[0][f],r[1][m]);return s+=b,h<=lu?h:1/0},p=new Float64Array(e.length*t.length).fill(Number.NaN);return{share:(f,m)=>{let h=f*t.length+m;return Number.isNaN(p[h])&&(p[h]=e[f]===t[m]?0:l(f,m)),p[h]},floor:a,spent:()=>s}}function nN(e,t,{share:n,spent:r}){let o=Array.from({length:e+1},()=>new Float64Array(t+1)),s=(a,l)=>n(a,l)===1/0?-1/0:1e3-n(a,l)+o[a][l];for(let a=0;a<e;a++)for(let l=0;l<t;l++)if(o[a+1][l+1]=Math.max(o[a][l+1],o[a+1][l],s(a,l)),r()>XO)return null;let i=[];for(let a=e,l=t;a>0&&l>0;)o[a][l]===o[a][l-1]?l--:o[a][l]===o[a-1][l]?a--:i.push([--a,--l]);return i.toReversed()}function rN(e,t,{share:n,floor:r}){let o=[];for(let s=0,i=0;s<e&&i<t;s++){let a=null,l=1/0,p=Array.from({length:Math.min(t,i+JO)-i},(d,f)=>[i+f,r(s,i+f)]);for(let[d,f]of p.toSorted((m,h)=>m[1]-h[1]||m[0]-h[0])){if(f>l)break;(n(s,d)<l||n(s,d)===l&&d<a)&&([a,l]=[d,n(s,d)])}a!==null&&(o.push([s,a]),i=a+1)}return o}function oN(e,t){if(e.length>Q1||t.length>Q1)return[];let n=tN(e,t);return nN(e.length,t.length,n)??rN(e.length,t.length,n)}function eC(e,t,n,r){let{whitespace:o,ignoreCase:s}=Ia(r);try{return Op(e,t,n,{format:"normal",whitespace:o,ignoreCase:s}),!0}catch(i){if(i instanceof r$)return!1;throw i}}var tC=/[ \t\n\v\f\r]/u,nC=e=>{let t=e.split(`
|
|
145
|
+
`);return t.at(-1)===""&&t.pop(),t};function sN(e,t){for(let n=0,r=0;;n++,r++){let o="",s="";for(;n<e.length&&tC.test(e[n]);)o+=e[n++];for(;r<t.length&&tC.test(t[r]);)s+=t[r++];if(o!==s&&new Set(o+s).size>1)return!0;if(n>=e.length||r>=t.length)return!1}}function iN(e,t,n){try{if(!eC(e,t,n,{whitespace:"all"}))return!0}catch{return!0}let r=nC(e),o=nC(t),s=0,i=0;for(let a=0;a<=n.length;a++){let l=a<n.length?n[a].a0:r.length;for(;s<l;s++,i++)if(r[s]!==o[i]&&sN(r[s],o[i]))return!0;a<n.length&&({a1:s,b1:i}=n[a])}return!1}function aN(e,t,{extension:n=!0}={}){let r=e.split("/"),o=t.split("/"),s=0;for(;s<r.length-1&&s<o.length-1&&r[s]===o[s];)s++;let i=0;for(;i<r.length-s-1&&i<o.length-s-1&&r.at(-1-i)===o.at(-1-i);)i++;let a={head:s?`${r.slice(0,s).join("/")}/`:"",from:r.slice(s,r.length-i).join("/"),to:o.slice(s,o.length-i).join("/"),tail:i?`/${r.slice(-i).join("/")}`:""},l=a.from.lastIndexOf(".");return n&&!a.from.includes("/")&&!a.to.includes("/")&&l>0&&a.to.lastIndexOf(".")===l&&a.from.slice(0,l)===a.to.slice(0,l)?{...a,head:a.head+a.from.slice(0,l),from:a.from.slice(l),to:a.to.slice(l)}:a}function zh(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}var rC=(e,t)=>`${"../".repeat(e.base.split("/").length-1)}${t}`;function Wh(e,t,n){let r=new Map,o=new Set,s=0;for(let a of e){let l=zh(n,a);l===null||!t.has(l)||(r.set(a,l),o.add(l),l!==a&&s++)}for(let a of e)r.has(a)||!t.has(a)||o.has(a)||(r.set(a,a),o.add(a));let i=r.size;for(let a of e){if(r.has(a))continue;let l=zh(n,a)??rC(n,a);for(;t.has(l)||o.has(l);)l=`../${l}`;r.set(a,l),o.add(l)}return{paths:r,paired:i,moved:s}}function lN(e,t){let n=new Set(e),r=new Set(t),o=(a,l)=>{let p=new Map;for(let m of a)for(let h=m.indexOf("/");h!==-1;h=m.indexOf("/",h+1))l.has(m.slice(h+1))&&p.set(m.slice(0,h+1),(p.get(m.slice(0,h+1))??0)+1);let d=null,f=!1;for(let[m,h]of p)h>(p.get(d)??0)?[d,f]=[m,!1]:h===p.get(d)&&(f=!0);return f?null:d},s=Wh(n,r,null).paired,i=[[{base:"",other:o(r,n)},n],[{base:o(n,r),other:""},r]].filter(([a])=>a.base!==null&&a.other!==null).map(([a,l])=>({root:a,side:l,...Wh(n,r,a)})).filter(({side:a,paired:l,moved:p})=>l>s&&p*2>=a.size);return i.length===2&&i[0].paired===i[1].paired?null:i.toSorted((a,l)=>l.paired-a.paired)[0]?.root??null}function Hh(e,t){let n=[...e],r=new Set(t),o=lN(n,r);return{root:o,paths:Wh(n,r,o).paths}}function oC({root:e,paths:t},n,r){if(!e||n===".")return n;for(let s of r){let i=t.get(`${n}/${s}`);if(i?.endsWith(`/${s}`))return i.slice(0,-s.length-1)}let o=zh(e,`${n}/`);return o===null?rC(e,n):o.slice(0,-1)||"."}function cN(e,t,n){if(!e&&!t)return null;let r=Map.groupBy([...e??[]],([,s])=>s),o=new Map([...r].map(([s,i])=>[s,oC(n,s,i.map(([a])=>a.slice(s.length+1)))]));return new Map([...[...e??[]].map(([s,i])=>[n.paths.get(s)??s,o.get(i)]),...t??[]])}function dN(e,t){if(!e)return{prefix:t,from:null,to:null};let n=t.startsWith(e.other)?t:"";return{prefix:n,from:`./${e.base}${n.slice(e.other.length)}`,to:`./${n||e.other}`}}function JG(...e){let t=new Set;for(let r of e){let o=we(r);for(let[s,i]of Object.entries(r?.bundle?.reason??{}))Array.isArray(i)&&i.some(a=>o.has(a))&&t.add(s)}let n=r=>e.some(o=>{if(o?.kind!=="stasis")return!1;let s=we(o),i=o?.bundle?.reason?.[r];return new Set(Array.isArray(i)?i.filter(a=>s.has(a)):[]).size<s.size});return[...t].some(n)?[...t].toSorted().map(r=>({id:`reason:${r}`,label:r})):[]}function uN(e,t=""){let n=we(e);if(!t||e?.kind!=="stasis")return n;let r=e?.bundle?.reason?.[t.replace(/^reason:/u,"")],o=new Set(Array.isArray(r)?r:[]);return new Map([...n].filter(([s])=>o.has(s)))}function Uh(e,t,n,r){return JSON.stringify([e,t,n,r])}function ZG(e,t=""){let n=new Map;if(e?.kind!=="stasis"||!e.bundle)return n;let r=t?we(e):null,o=t?uN(e,t):null;for(let[s,i]of e.bundle.imports)for(let[a,l]of i)for(let[p,d]of l){let f=typeof d=="string"?[[null,d]]:d;for(let[m,h]of f){if(o&&!o.has(a)&&(r.has(a)||!o.has(h)))continue;let b=Uh(a,p,s,m);n.set(b,{key:b,parent:a,specifier:p,conditions:s,platform:m,target:h})}}return n}function r7(e,t,n=new Map,r=new Map,o=null){let s=a=>{let l=n.get(a)??r.get(a);return l===void 0?[...new Set([a,hN(o,a)??a])]:[l]},i=[];for(let a of e.values()){let l=s(a.parent).map(p=>t.get(Uh(p,a.specifier,a.conditions,a.platform))).find(Boolean);if(l&&!s(a.target).includes(l.target)){let{target:p,...d}=l;i.push({...d,baseTarget:r.get(a.target)??a.target,otherTarget:p})}}return i.sort((a,l)=>a.key.localeCompare(l.key)),{changed:i,totalChanges:i.length}}function Us(e){return Qw(e)??0}function sC(e,t){return e===t||e?.format==="base64"&&t?.format==="base64"&&e.data===t.data||e?.format==="digest"&&t?.format==="digest"&&e.digest===t.digest}function o7(e){if(e?.kind!=="stasis"||!e.bundle)return null;let{formats:t,executable:n,entries:r}=e.bundle;return o=>({format:t?.get(o),executable:n?.has(o)??!1,entry:r?.has(o)??!1})}function pN(e,t){return!e||!t?[]:["format","executable","entry"].filter(n=>e[n]!==t[n]).map(n=>({field:n,from:e[n],to:t[n]}))}function iC(e){return(t,n)=>Math.abs(n.delta)-Math.abs(t.delta)||t[e].localeCompare(n[e])}function cu(e){return(t,n)=>n.bytes-t.bytes||t[e].localeCompare(n[e])}function fN(e,t){return typeof e=="string"?`\0text\0${e.toWellFormed()}`:e?.format==="base64"?`\0base64\0${e.data}`:e?.format==="digest"?`\0digest\0${e.digest}`:`\0none\0${t}`}var mN=250;function gN(e,t,n,r,o){let s=(l,p,d)=>l.filter(({path:f})=>f!==""&&f.isWellFormed()).map(({path:f},m)=>({name:f,data:fN(p.get(f),`${d}${m}`)})),i={paths:"keys",renameGroup:o,renameLimit:mN,lines:!1},a=Dh(s(e,n,"a"),s(t,r,"b"),i);return new Map(a.filter(({status:l})=>l==="renamed").map(l=>[l.old.path,l.new.path]))}function hN(e,t){return e?e.base===""?`${e.other}${t}`:t.startsWith(e.base)?t.slice(e.base.length):null:t}function bN(){return{baseBytes:0,otherBytes:0,onlyBaseFiles:0,onlyOtherFiles:0,changedFiles:0}}function s7(e,t,n,r=Hh(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=pN(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=bN(),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=sC(Q,ze),Ke=p(a.get(M),M),Ce=Us(Q),yt=We?Ce:Us(ze);if(h+=Ce,b+=yt,K.baseBytes+=Ce,K.otherBytes+=yt,We&&!Ke.meta)x++;else{let Nr=yt-Ce;m.push({path:M,...l(M),baseBytes:Ce,otherBytes:yt,delta:Nr,...Ke,...We?{modified:!1}:{}}),v+=Nr,K.changedFiles++}}else if(I){let Q=Us(e.get(M));h+=Q,y+=Q,K.baseBytes+=Q,K.onlyBaseFiles++,d.push({path:M,...l(M),bytes:Q})}else{let Q=Us(t.get(M));b+=Q,w+=Q,K.otherBytes+=Q,K.onlyOtherFiles++,f.push({path:M,bytes:Q})}}let C=gN(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=sC(K,Q),We=Us(K),Ke=ze?We:Us(Q);y-=We,w-=Ke,m.push({path:U,renamedFrom:I,basePath:a.get(I),baseBytes:We,otherBytes:Ke,delta:Ke-We,modified:!ze,...p(a.get(I),U)}),v+=Ke-We;let Ce=$(I);Ce.onlyBaseFiles--,Ce.onlyOtherFiles--,Ce.changedFiles++}d.splice(0,d.length,...d.filter(I=>!C.has(I.path))),f.splice(0,f.length,...f.filter(I=>!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(cu("path")),f.sort(cu("path")),m.sort(iC("path")),R.sort(cu("pkg")),L.sort(cu("pkg")),A.sort(iC("pkg")),{totals:{baseFiles:e.size,baseBytes:h,otherFiles:t.size,otherBytes:b,onlyBaseFiles:d.length,onlyBaseBytes:y,onlyOtherFiles:f.length,onlyOtherBytes:w,changedFiles:m.length,renamedFiles:C.size,changedDelta:v,unchangedFiles:x,fileDelta:t.size-e.size,byteDelta:b-h,identical:d.length===0&&f.length===0&&m.length===0},files:{onlyBase:d,onlyOther:f,changed:m,root:s,basePaths:i},packages:{onlyBase:R,onlyOther:L,changed:A,unchanged:E}}}function i7(e,t,n){let r=new Map;for(let d of e.onlyBase)r.set(d.pkg,{base:d.bytes,other:null});for(let d of e.onlyOther)r.set(d.pkg,{base:null,other:d.bytes});for(let d of e.changed)r.set(d.pkg,{base:d.baseBytes,other:d.otherBytes});for(let d of e.unchanged??[])r.set(d.pkg,{base:d.bytes,other:d.bytes});let o=(d,f)=>[...d.get(f)??[]].toSorted(Ht),s=new Set([...e.onlyBase,...e.onlyOther,...e.changed].map(d=>d.pkg));for(let d of new Set([...t.keys(),...n.keys()]))Vh(o(t,d),o(n,d))||s.add(d);let i=[],a=[],l=[];for(let d of s){let f=r.get(d)??{base:null,other:null},m=o(n,d),h=o(t,d),b=f.base!==null||h.length>0,y=f.other!==null||m.length>0;b&&!y?l.push({pkg:d,bytes:f.base,versions:h}):y&&!b?i.push({pkg:d,bytes:f.other,versions:m}):a.push({pkg:d,baseBytes:f.base,otherBytes:f.other,delta:f.base!==null&&f.other!==null?f.other-f.base:null,baseVersions:h,otherVersions:m,direction:h.length>0&&m.length>0&&!Vh(h,m)?lC(h,m):null})}let p=(d,f)=>d.pkg.localeCompare(f.pkg);return{removed:l.toSorted(p),added:i.toSorted(p),changed:a.toSorted(p)}}function aC(e){let n=String(e).trim().split("+",1)[0],r=n.indexOf("-");return r===-1?{core:n,pre:""}:{core:n.slice(0,r),pre:n.slice(r+1)}}function Ht(e,t){if(e===t)return 0;let n=aC(e),r=aC(t),o=n.core.split("."),s=r.core.split(".");for(let l=0;l<Math.max(o.length,s.length);l++){let p=Number(o[l]??0),d=Number(s[l]??0);if(Number.isNaN(p)||Number.isNaN(d))return e<t?-1:1;if(p!==d)return p<d?-1:1}if(n.pre===r.pre)return 0;if(!n.pre)return 1;if(!r.pre)return-1;let i=n.pre.split("."),a=r.pre.split(".");for(let l=0;l<Math.max(i.length,a.length);l++){let p=i[l],d=a[l];if(p===void 0)return-1;if(d===void 0)return 1;if(p===d)continue;let f=/^\d+$/u.test(p),m=/^\d+$/u.test(d);return f&&m?Number(p)<Number(d)?-1:1:f!==m?f?-1:1:p<d?-1:1}return 0}function Vh(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function lC(e,t){let n=e.filter(l=>!t.includes(l)).toSorted(Ht),r=t.filter(l=>!e.includes(l)).toSorted(Ht),o=e.filter(l=>t.includes(l)).toSorted(Ht),[s,i]=n.length>0&&r.length>0?[n,r]:n.length>0?[n,o]:[o,r];if(s.length===0||i.length===0)return"changed";let a=(l,p)=>Ht(l.at(-1),p[0])<0;return a(s,i)?"up":a(i,s)?"down":"changed"}function a7(e,t){let n=[],r=[],o=[],s=new Set([...e.keys(),...t.keys()]);for(let a of s){let l=e.get(a),p=t.get(a);if(l&&p){let d=[...l].toSorted(Ht),f=[...p].toSorted(Ht);if(Vh(d,f))continue;n.push({pkg:a,baseVersions:d,otherVersions:f,direction:lC(d,f)})}else l?o.push({pkg:a,versions:[...l].toSorted(Ht)}):r.push({pkg:a,versions:[...p].toSorted(Ht)})}let i=(a,l)=>a.pkg.localeCompare(l.pkg);return n.sort(i),r.sort(i),o.sort(i),{updated:n,added:r,removed:o,totals:{baseDeps:e.size,otherDeps:t.size}}}var cC=`.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.code-block:not(.token){white-space:normal;margin:.4rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.4rem .55rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.95em;line-height:1.5;color:var(--text)}& code{font:inherit}}
|
|
146
146
|
`;var dC=`.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
147
|
`;var du=`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
148
|
`;var jh=class extends N{static styles=[...N.styles,D(cC),D(dC),D(Hc),D(du)];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">${Uc(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",jh);function uu(e){return re("advisory-details-dialog",e)}var uC=`.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
149
|
`;var pC=`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 Gh=class extends N{static styles=[...N.styles,D(uC),D(du),D(pC)];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",Gh);function fC(e){return re("npm-compare-advisories-dialog",e)}var mC=(e,t)=>Fn(e,t).runsCode,pu=e=>e.length===1?`line ${e[0]}`:`lines ${e.slice(0,5).join(", ")}${e.length>5?` and ${(e.length-5).toLocaleString("en")}${e.length>=yv?"+":""} more`:""}`,gC=(e,t=null)=>[...e].map(([n,r])=>`${qr.get(n).name??qr.get(n).tag} (${pu(r)}${t?.has(n)?", new":""})`).join(", "),Kh=e=>{let t=new Set(e.flat());return t.size===1?[...t][0]:void 0},qh=(e,t)=>t===void 0?{path:g,line:g}:{path:e,line:t};function hC(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,pu(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=qh(n,n===void 0?void 0:Kh(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 Yh=(e,t)=>Fn(e,t).exfiltration,bC=e=>[...yp].filter(([t])=>e.some(n=>n.has(t))).map(([,{name:t}])=>t).join(", "),Xh=(e,t)=>[...e].map(([n,r])=>`${yp.get(n).name} (${pu(r)}${t!==void 0&&!t?.has(n)?", new":""})`).join(", "),
|
|
150
|
+
`;var Gh=class extends N{static styles=[...N.styles,D(uC),D(du),D(pC)];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",Gh);function fC(e){return re("npm-compare-advisories-dialog",e)}var mC=(e,t)=>Fn(e,t).runsCode,pu=e=>e.length===1?`line ${e[0]}`:`lines ${e.slice(0,5).join(", ")}${e.length>5?` and ${(e.length-5).toLocaleString("en")}${e.length>=yv?"+":""} more`:""}`,gC=(e,t=null)=>[...e].map(([n,r])=>`${qr.get(n).name??qr.get(n).tag} (${pu(r)}${t?.has(n)?", new":""})`).join(", "),Kh=e=>{let t=new Set(e.flat());return t.size===1?[...t][0]:void 0},qh=(e,t)=>t===void 0?{path:g,line:g}:{path:e,line:t};function hC(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,pu(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=qh(n,n===void 0?void 0:Kh(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 Yh=(e,t)=>Fn(e,t).exfiltration,bC=e=>[...yp].filter(([t])=>e.some(n=>n.has(t))).map(([,{name:t}])=>t).join(", "),Xh=(e,t)=>[...e].map(([n,r])=>`${yp.get(n).name} (${pu(r)}${t!==void 0&&!t?.has(n)?", new":""})`).join(", "),xN=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 yC(e,t,n){return e?Ll(e).map(([r,o])=>{let s=qh(n,n===void 0?void 0:Kh([...o.values()]));return u`<span data-bundle-view-source="${s.path}" data-bundle-view-line="${s.line}" class="${`npm-exfiltration is-${Ol(r,o,t)}`}" data-tooltip="${`${xN.get(r)}: ${Xh(o,t)}`}">${r}</span>`}):g}var Jh=e=>e.toLowerCase().replaceAll(" ","-");var wC=({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 Zh={accept:"Accept","accept-with-nits":"Accept with nits (non-blocking)","request-changes":"Request changes",reject:"Reject"};function tK(e,t){return[e,t].every(n=>n===void 0||typeof n=="string")&&[e,t].some(n=>typeof n=="string")}function $C(e,t,n=[]){let r=Object.keys(Zh),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 nK(e,t="accept"){let n=Object.keys(Zh);return n.slice(Math.max(n.indexOf(t),n.indexOf($C(e,null).verdictLimit)))}function fu({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 kC(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")||fu({npm:e})||i.some(a=>a.type==="malware")||s.some(a=>wC(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 rK(e,t,n=[]){return $C(e,t,n).coverage==="partial"&&(n===null||n.includes("package.json")||!e.some(r=>r.file==="package.json"&&Object.keys(Zh).includes(r.status)))}var SN=e=>e.replaceAll(/[\\`*_{}[\]<>]/gu,"\\$&").replaceAll(/\r\n?/gu,`
|
|
151
151
|
`).replaceAll(`
|
|
152
152
|
`,`
|
|
153
153
|
`);function CN(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 vC(e,t=""){return CN(e).map(n=>`* ${t}${
|
|
154
|
+
`).split(/(?:^|\n)[\t ]*\*[\t ]+/u).map((t,n)=>({text:t.trim(),bullet:n>0})).filter(t=>t.text)}function vC(e,t=""){return CN(e).map(n=>`* ${t}${n.text.replaceAll(`
|
|
155
|
+
`,`
|
|
156
|
+
`)}`)}function oK(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=>vC(o.comment,`In ${SN(o.file)}: `)),...vC(e.comment)];return`Audited:
|
|
155
157
|
\`\`\`
|
|
156
158
|
${n}
|
|
157
159
|
\`\`\`${r.length>0?`
|
|
158
160
|
|
|
159
161
|
Notes:
|
|
160
162
|
${r.join(`
|
|
161
|
-
`)}`:""}`}var La=["critical","high","moderate","low","unknown"],ib=e=>La.includes(e.severity)?e.severity:"unknown",_N=[["affects",e=>`Affects ${e}`],["later",()=>"Later versions"],["fixed",e=>`Fixed in ${e}`]];function ab(e){return Nn("stats",e,()=>Mk(e),t=>({downloads:t.downloads??null,github:t.github??null}))}function lb(e){return Nn("advisories",e,()=>Ik(e),t=>({versions:t.versions??[],advisories:t.advisories??[],repository:t.repository!==!1,keptAt:t.keptAt??null}))}function cb(e){let{name:t,version:n}=e.npm,r=(o,s)=>u`<a class="npm-package-link" href="${o}" target="_blank" rel="noopener noreferrer">${s}${ru}</a>`;return u`<span class="npm-package-links">${r(`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`,"npmjs")} ${e.npm.private?g:r(hu(e),"socket.dev")}</span>`}var hu=e=>`https://socket.dev/npm/package/${e.npm.name}/overview/${encodeURIComponent(e.npm.version)}`;function Na(e){let{name:t,version:n}=e.npm;if(e.npm.private)return null;let r=Nn("socket",`${t}@${n}`,()=>Fk(t,n),o=>({socket:o.socket??null}));return r.status==="ready"?r.socket:null}var MC=[["supplyChain","Supply chain",85,85],["vulnerability","Vulnerability",85,85],["quality","Quality",70,80],["maintenance","Maintenance",70,80],["license","License",80,80]],RN=50,tb=(e,t)=>e===100?"is-good is-max":e>=t?"is-good":e>=50?"is-fair":"is-poor",nb=e=>u`<svg class="npm-socket-gauge" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="6" pathLength="100"></circle><circle class="npm-socket-gauge-fill" cx="8" cy="8" r="6" pathLength="100" stroke-dasharray="${`${e} 100`}"></circle></svg>`;function TN(e){let t=Na(e)?.scores;return t?u`<ul class="npm-extensions npm-socket-scores" aria-label="Socket scores">${MC.map(([n,r,,o])=>{let s=Math.round(t[n]*100);return u`<li><a class="${`npm-extension npm-socket-score ${tb(s,o)}`}" href="${hu(e)}" target="_blank" rel="noopener noreferrer">${nb(s)}<span>${r}</span><span class="npm-extension-count">${s}</span></a></li>`})}</ul>`:g}var db=new Map([["critical","critical"],["high","high"],["middle","moderate"],["low","low"]]),mu=e=>e.replaceAll(/(?<=[a-z])(?=[A-Z])/gu," ").toLowerCase().replace(/^./u,t=>t.toUpperCase()),MN=new Map,Qh=new WeakMap;function ub(e){let t=e?Na({npm:e}):null;return t?(Qh.has(t)||Qh.set(t,Map.groupBy(t.alerts.filter(n=>n.file),n=>n.file)),Qh.get(t)):MN}var pb=(e=[])=>e.map(t=>{let n=db.get(t.severity)??"low";return u`<span class="${`npm-socket-file-alert sev-${n}`}" data-tooltip="${`Socket: ${mu(t.type)}, ${n}${t.note?` \xB7 ${t.note}`:""}`}">${mu(t.type)}</span>`});function IC(e,t){return kC(e.npm,lb(e.npm.name),Na(e),ln(e.npm,t?t.npm?.version??"(empty)":null))}function AC(e,t){let n=fu(e),o=n&&t!==null&&[...t].every(Oa)?[]:Na(e)?.alerts??[];if(!n&&o.length===0)return g;let s=[...t??[]].find(i=>/^readme(?:\.md)?$/iu.test(i));return u`<div class="npm-alerts">${n?u`<p class="npm-alert" role="note"><strong>Taken down by npm.</strong> npm's security team removed this package's versions, as it does for malicious code, and serves this placeholder in their place${s?u`: ${Hs(s,t,"its readme")}`:""}.</p>`:g} ${o.length>0?IN(e,o,t):g}</div>`}function IN(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="${hu(e)}" target="_blank" rel="noopener noreferrer">socket.dev${ru}</a></span><ul>${t.map(r=>{let o=db.get(r.severity)??"info";return u`<li><span class="${`bundle-advisory-severity sev-${o}`}">${o}</span> <span class="npm-socket-alert-type">${mu(r.type)}</span> ${r.file?u`<span class="npm-socket-alert-file">in ${Hs(r.file,n)}</span>`:g} ${r.note?u`<p class="npm-socket-alert-note">${r.note}</p>`:g}</li>`})}</ul></div>`}function EC(e,t,n=g){let r=ab(e.npm.name),o=t_(ln(e.npm)?.findings.find(({id:s})=>s==="popularity"));return u`<div class="npm-figures"><npm-downloads-chart role="region" aria-label="Downloads" .downloads="${r.downloads}" .status="${r.status}" .known="${o}"></npm-downloads-chart><div class="npm-figures-actions">${cb(e)}${t}</div>${n}</div>`}var AN=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>`,EN=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>`,FN=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>`,LN=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 fb(e){if(!e.npm.manifest.github?.github)return g;let t=ab(e.npm.name),n=t.status==="ready"?t.github:null;if(!n)return g;let r=(i,a,l,p)=>u`<a class="bundle-origin-link npm-github-figure" href="${`https://github.com/${Ld(n.repo)}/${p}`}" data-tooltip="${`${a.toLocaleString("en")} ${l}`}" target="_blank" rel="noopener noreferrer">${i}<span>${Sa.format(a)}</span></a>`,o=typeof n.openPulls=="number"?n.openPulls:null,s=o===null?n.openIssues:Math.max(n.openIssues-o,0);return u`${r(AN,n.stars,n.stars===1?"star":"stars","stargazers")} ${r(LN,n.forks,n.forks===1?"fork":"forks","forks")} ${r(EN,s,o===null?"open issues and pull requests":s===1?"open issue":"open issues","issues")} ${o===null?g:r(FN,o,o===1?"open pull request":"open pull requests","pulls")} ${n.archived?u`<span class="npm-github-archived">Archived</span>`:g}`}var FC=({name:e,version:t,private:n,manifest:r})=>n||!r.provenance?null:Nn("provenance",`${e}@${t}`,()=>Lk(e,t),o=>({provenance:o.provenance??null}));function mb(e){let t=FC(e);return t!==null&&(t.status==="loading"||!!t.provenance?.builder)}function ON(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 NN=(e,t)=>t?t==="github-hosted"||t==="gitlab-hosted":e==="GitHub Actions";function gb(e){if(e.npm.private)return g;let t=FC(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=ON(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="${NN(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 BN(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 LC(){let e=c.managedSession?.id;return()=>c.managedSession?.id===e}function OC(e,t){return ou({...e,title:e.title??e.id,severity:ib(e),cvss:{score:e.cvss},vulnerable_versions:e.range},({title:n,severity:r,details:o})=>uu({heading:n,severity:r,markdown:o,isCurrent:t}))}function NC(e){let{name:t,version:n}=e.npm,r=lb(t),o=LC(),s=r.status==="ready",i=s?r.advisories:[],a=i.map(m=>BN(m,r.versions,n)),l=_N.map(([m,h])=>({status:m,heading:h(n),advisories:i.filter((b,y)=>a[y]===m)})).filter(m=>m.advisories.length>0),p=a.filter(m=>m==="affects").length,d=s&&r.keptAt?u`<p class="npm-advisories-note">GitHub's repository advisories are as of ${r_(Date.now()-Date.parse(r.keptAt))} ago: they couldn't be checked now.</p>`:s&&!r.repository?u`<p class="npm-advisories-note">GitHub's repository advisories couldn't be checked; npm's are shown.</p>`:g,f=r.status==="loading"?u`<p class="bundles-overview-col-empty">Checking advisories…</p>`:r.status==="error"?u`<p class="bundles-overview-col-empty">Couldn't check advisories.</p>`:l.length===0?u`${d}<p class="bundles-overview-col-empty">No advisories for any version.</p>`:u`${d}${l.map(m=>u`<section class="${`npm-advisory-group is-${m.status}`}"><h4 class="npm-advisory-group-head">${m.heading} <span class="bundles-overview-col-count">${m.advisories.length}</span></h4><ul class="bundle-advisories-rows">${m.advisories.map(h=>OC(h,o))}</ul></section>`)}`;return Ln({title:"Advisories",count:s?i.length:"\u2026",body:f,className:"npm-advisories-col",extra:s?u`<span class="${`npm-advisories-active${p>0?" is-active":""}`}">${p} active</span>`:g})}var DN=[...Nt].filter(([,{mark:e}])=>e!==null).map(([e])=>e),PN=[...Nt].filter(([,{mark:e}])=>e===null).map(([e])=>e),SC=[null,"notice","warn"];function BC(e){let t=new Map,n=new Map,r=0;for(let o of e){let s=jo(o);for(let i of s){t.set(i,(t.get(i)??0)+1);let a=Go(o,i);SC.indexOf(a)>SC.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 CC=new WeakMap;function Cr(e){let t=e.npm?Gd(e):e,n=CC.get(e);if(n?.of!==t){let{sources:r,sourcesContent:o}=e.json,s=new Map(r.map((h,b)=>[h,PS(e,h,o[b])]).filter(([,h])=>h)),i=new Set(r.filter((h,b)=>typeof o[b]!="string")),{counts:a,marks:l,unreadable:p}=BC(s.values()),d=gi(e),f=xn(e),m={files:0,lines:0,unpacked:0};for(let h of r.filter(b=>!Oa(b)))i.has(h)||m.files++,m.lines+=d.get(h)??0,m.unpacked+=f.get(h)??0;n={of:t,paths:new Set(r),byPath:s,counts:a,marks:l,unreadable:p,sizes:f,extensions:new Map(r.map(h=>[h,vb(h)])),binaries:new Set([...i].toSorted((h,b)=>h.localeCompare(b))),types:cB(r,f,d),content:m},CC.set(e,n)}return n}var gu={key:null,chip:null},DC=e=>`${e.npm.name}@${e.npm.version}`,PC=e=>gu.key===DC(e)?gu.chip:null;function zC(e){let t=PC(e);return t&&{label:t.label,keeps:t.keeps,clear:()=>{gu={key:null,chip:null},O()}}}function rb(e,t,n,r,{classes:o="",tooltip:s=g}={}){let i=PC(e)?.id===t.id;return u`<li><button type="button" class="${`npm-extension npm-category${o}`}" aria-pressed="${String(i)}" data-tooltip="${s}" @click="${()=>{gu={key:DC(e),chip:i?null:t},O()}}">${n}<span class="npm-extension-count">${r.toLocaleString("en")}</span></button></li>`}function WC(e,t,n){let{name:r}=Nt.get(n),{byPath:o,counts:s,marks:i}=Cr(t),a=i.get(n);return rb(e,{id:`category:${n}`,label:r,keeps:l=>o.has(l)&&jo(o.get(l)).includes(n)},u`<span>${r}</span>`,s.get(n),{classes:a?` is-${a}`:""})}function HC({counts:e,marks:t,unreadable:n},r,o,s){let i=DN.filter(l=>e.has(l));if(i.length===0)return g;let a=i.some(l=>t.get(l)==="warn");return u`<div class="${`npm-readability-warning${a?" is-warn":""}`}" role="note"><span class="npm-readability-warning-text"><strong>${n.toLocaleString("en")} of ${r.toLocaleString("en")} ${o}</strong> can be hard to review by reading them:</span><ul class="npm-extensions">${i.map(s)}</ul></div>`}function UC(e,t){return HC(Cr(t),t.json.sources.length,"files",n=>WC(e,t,n))}function hb(e,t,n=!1,r=void 0){let{byPath:o,sizes:s}=Cr(e),i=n?t:void 0;return u`${hC(mC(e,t),void 0,i)}${yC(Yh(e,t),VC(r),i)}${VS(e,t,s.get(t))}${US(o.get(t))}`}var VC=e=>e===void 0||e?.details.npm&&!Gd(e.details)?void 0:e&&Yh(e.details,e.path);function bb(e,t,n=[],r=void 0){let{stamps:o,exfiltration:s}=Fn(e,t),i=VC(r),a=i===void 0?null:new Map(Ll(s).map(([l,p])=>[l,Ol(l,p,i)]));return[...n.map(l=>({name:mu(l.type),severity:db.get(l.severity)??"low"})),...o.map(l=>a?.has(l.name)?{...l,severity:a.get(l.name)}:l)]}var eb=new WeakMap;function zN(e,t){let n=e&&t?.npm?ln(t.npm,e.npm?.version??"(empty)"):null;if(!n)return null;if(!eb.has(n)){let r=new Map;for(let{host:o,places:s}of yb(n).get("new-hosts")?.hosts??[])for(let{path:i,line:a}of s)r.set(i,[...r.get(i)??[],{host:o,line:a,was:e.npm?.version??null}]);eb.set(n,r)}return eb.get(n)}function WN(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])=>Ho(n,r)).find(Kw)),alerts:e=>ub(e?.npm),alertTags:pb,newHosts:zN,newHostTag:WN,tag:(e,t,n)=>hb(e,t,!1,n),flags:(e,t,n)=>bb(e,t,[],n),warning(e,t){let{byPath:n}=Cr(e),r=BC(t.filter(i=>n.has(i)).map(i=>n.get(i))),{counts:o,marks:s}=r;return HC(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>`})}},GC=(e,t)=>[VN(t.get("malware")),jN(t.get("deprecated")),qN(e,t.get("publisher")),YN(e,t.get("provenance-lost")),XN(e,t.get("held-install-scripts")),...QN(e,t),...JN(e,t),ZN(t.get("new-hosts")),eB(t.get("too-new"))],yb=e=>new Map((e?.findings??[]).map(t=>[t.id,t]));function KC(e,t){if(!e||!t?.npm)return g;let n=[e.npm??{name:t.npm.name,version:"Empty package",private:!0},t.npm],r=YC(n),o=yb(ln(t.npm,e.npm?.version??"(empty)")),s=[...GC(n,o),QC(n,r),...e_(n,r,o.get("malware")),oB(t.npm.name,o.get("popularity"))].filter(i=>i!==g);return s.length===0?g:u`<ul class="npm-extensions npm-compare-badges" aria-label="Versions at a glance">${s}</ul>`}function qC(e){let{npm:t}=e,n=YC([t]),r=ln(t),o=yb(r),s=r?.oldVersion?[{name:t.name,version:r.oldVersion},t]:[t],i=[...GC(s,o),QC([t],n),...e_([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 HN(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?ob("npm-compare-unreadable","Now unreadable",t,n):Vs(`${wb[e.severity]} npm-held-file npm-compare-unreadable`,"Now unreadable",t,n)}var wb={critical:"is-critical",high:"is-warn",moderate:"is-moderate"},UN=e=>[...bp.keys()].map(t=>{let n=e.get(`held-${Jh(t)}`),r=n?.files??[],o=s=>s.added?new Map([...s.found].filter(([i])=>!s.added.has(i))):void 0;return Vs(`${wb[n?.severity]} npm-held-file npm-files-${Jh(t)}`,t,r,s=>Xh(s.found,o(s)),bC(r.map(s=>s.found)))});function YC(e){let t=lb(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 XC=(e,t)=>e===t?`${t??"\u2013"}`:`${e??"\u2013"} \u2192 ${t??"\u2013"}`,JC=e=>La.find(t=>e.some(n=>ib(n)===t));function VN(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(`
|
|
162
|
-
`)}">Malware</span></li>`}function jN(e){return e?u`<li><span class="npm-extension npm-compare-deprecated" data-tooltip="${Ih(e.message)}">Deprecated</span></li>`:g}var GN={critical:"is-from-known",high:"is-to-unknown"},KN={known:"is-known",maintainer:"is-maintainer"},_C={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 qN([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 ${KN[y]??"is-unknown"}`}">~${b}</span>`,m=GN[a]??"is-to-known",h=u`A different npm account published the open version,<br>${_C[d]},<br>after ${_C[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="${vo("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 YN([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="${vo("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 XN(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>`:sb(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="${vo("Install scripts",i,a.map((d,f)=>l(d,f===a.length-1?r:[])))}"><span>${n.length===1?"Install script":"Install scripts"}</span><span class="npm-extension-count">${p}</span></span></li>`}var ZC=8;function JN(e,t){let n=o=>t.get(o)?.files??[],r=(o,s)=>`${wb[t.get(o)?.severity]} npm-held-file ${s}`;return[Vs(r("held-runs-code","npm-files-runs"),"Runs code",n("held-runs-code"),o=>gC(o.found,o.added),wp(n("held-runs-code").map(o=>o.found)),null,!1),...UN(t),ob("npm-compare-large","Large new code",n("large-code"),o=>ge(o.bytes)),HN(t.get("now-unreadable")),Vs(r("held-obfuscated","npm-files-obfuscated"),"Obfuscated",n("held-obfuscated"),o=>`${Qg(o.found)}${o.added?`, new since ${e[0].version}`:""}`),ob("npm-compare-binary","Binary code",n("binary-code"),o=>`${ge(o.bytes)}, not UTF-8 or holding a NUL`)]}function ZN(e){let t=e?.hosts??[],n=t.map(({host:s,places:i})=>{let a=i.slice(0,ZC).map(({path:l,line:p})=>`${l}, line ${p}`);return{path:s,at:i.length>a.length?[...a,`and ${(i.length-a.length).toLocaleString("en")} more files`]:a}}),[r]=t,o=t.length===1&&r.places.length===1?{path:r.path,line:r.line,query:r.host}:null;return Vs("is-warn npm-compare-hosts",n.length===1?"New host":"New hosts",n,s=>s.at,n.length===1?n[0].path:null,o&&(s=>s.currentTarget.dispatchEvent(new CustomEvent("compare-open-line",{detail:o,bubbles:!0,composed:!0}))))}function ob(e,...t){return Vs(`npm-compare-file ${e}`,...t)}function Vs(e,t,n,r,o=null,s=null,i=!0){if(n.length===0)return g;let a=n.slice(0,ZC),l=n.length>a.length?`and ${(n.length-a.length).toLocaleString("en")} more`:null,p=h=>[r(h)].flat(),d=`${t}: ${[...a.map(h=>`${h.path} (${p(h).join("; ")})`),...l?[l]:[]].join(", ")}`,f=u`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${a.map(h=>u`<span class="compare-tip-path">${h.path}</span><span class="compare-tip-said">${p(h).length>1?u`<span class="compare-tip-lines">${p(h).map(b=>u`<span>${b}</span>`)}</span>`:r(h)}</span>`)}</div>${l?u`<div class="compare-tip-note">${l}</div>`:g}</div>`,m=u`${i?u`<span>${t}</span>`:u`<span class="sr-only">${t}</span>`}${o!==null||n.length>1?u`<span class="npm-extension-count">${o??n.length.toLocaleString("en")}</span>`:g}`;return s?u`<li><button type="button" class="${`npm-extension is-open ${e}`}" data-tooltip="${d}" .tooltipContent="${f}" @click="${s}">${m}</button></li>`:u`<li><span class="${`npm-extension ${e}`}" data-tooltip="${d}" .tooltipContent="${f}">${m}</span></li>`}function QN(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="${vo("From elsewhere than npm's registry",[e.at(-1)],[sb(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="${vo(`Nothing imports ${a}`,[e.at(-1)],[sb(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 eB(e){return e?u`<li><span class="npm-extension is-warn npm-compare-published" data-tooltip="${S1(e.published)}">${Rh(e.published)}</span></li>`:g}function QC(e,t){if(!t)return g;let n=t.at(-1),r=e.length>1?t[0]:n;if(r.length===0&&n.length===0)return g;let o=n.length===0?"is-cleared":`sev-${JC(n)}`,s=n.filter(d=>!r.includes(d)).length,i=r.filter(d=>!n.includes(d)).length,a=vo("Advisories affecting",e,t.map(d=>d.length===0?u`<span class="compare-tip-none">none</span>`:u`<span class="compare-tip-count">${d.length}</span><span class="compare-tip-severities">${La.map(f=>[f,d.filter(m=>ib(m)===f).length]).filter(([,f])=>f>0).map(([f,m])=>u`<span class="${`compare-tip-severity sev-${f}`}">${m} ${f}</span>`)}</span>`),e.length>1?`${s} new \xB7 ${i} fixed`:null),l=`Advisories affecting ${e.map(({version:d},f)=>`${d}: ${t[f].length}`).join(", ")}`,p=u`<span>Advisories</span><span class="npm-extension-count">${XC(r.length,n.length)}</span>`;return e.length>1?u`<li><button type="button" class="${`npm-extension npm-compare-advisories ${o}`}" aria-haspopup="dialog" data-tooltip="${l}" .tooltipContent="${a}" @click="${()=>tB(e,t)}">${p}</button></li>`:u`<li><span class="${`npm-extension npm-compare-advisories ${o}`}" data-tooltip="${l}" .tooltipContent="${a}">${p}</span></li>`}var sb=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>`,vo=(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 tB([e,t],[n,r]){let o=LC(),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=>OC(p,o))}));fC({heading:`Advisories \xB7 ${e.name} ${e.version} \u2192 ${t.version}`,groups:s,isCurrent:o})}function nB(e,t,n){if(e===null||e>=n)return!1;let r=JC(t);return r===void 0||La.indexOf(e<=25?"critical":"high")<La.indexOf(r)}function e_(e,t,n=null){let r=e.at(-1),o=e.map(s=>Na({npm:s})?.scores??null);return!o.at(-1)||n?[]:MC.flatMap(([s,i,a,l])=>{let p=o.map(m=>m?Math.round(m[s]*100):null),d=p.at(-1),f=e.length>1?p[0]:d;return d===null||d>=a?[]:s==="vulnerability"&&!(t&&nB(d,t.at(-1),a))?[]:s==="maintenance"&&r.manifest?.deprecated&&d>=RN?[]:[u`<li><a class="${`npm-extension npm-socket-score ${tb(d,l)}`}" href="${hu({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="${vo(`Socket's ${i.toLowerCase()} score`,e,p.map(m=>m===null?u`<span class="compare-tip-none">none</span>`:u`<span class="${`compare-tip-score ${tb(m,l)}`}">${nb(m)}${m}</span>`),s==="vulnerability"?`Shown under ${a}, where worse than the advisories found`:`Shown under ${a}`)}">${nb(d)}<span>${i}</span><span class="npm-extension-count">${XC(f,d)}</span></a></li>`]})}var rB={critical:"is-unpopular",high:"is-low",moderate:"is-mid"};function t_({known:e,scope:t,account:n}={}){return e?n?`Published with provenance in ${t}, the scope of ~${n}, an account that publishes one of npm's most downloaded packages`:t?`Published with provenance in ${t}, the scope of one of npm's most downloaded packages, which only its owner publishes in`:"Published by an account that publishes one of npm's most downloaded packages":null}function n_(e,t=null,n=!1){let{tier:r,level:o,severity:s}=e,i=t?.total.toLocaleString("en"),a=n?`npm-extension npm-popularity npm-downloads-tier ${rB[s]??"is-low"}`:`npm-downloads-tier ${o}`,l=n?t_(e):null,p=[t&&`${i} downloads/month, ${t.month}`,l].filter(Boolean).join(" \xB7 ");return u`<span class="${a}" data-tooltip="${p||g}" .tooltipContent="${t||l?u`${t?u`<div><strong>${i}</strong> downloads/month</div><div class="compare-tip-note">${t.month}</div>`:g}${l?u`<div class="compare-tip-note">${l}</div>`:g}`:null}">${hh(r??1/0)}</span>`}function oB(e,t){let n=ab(e);return t?u`<li>${n_(t,n.status==="ready"&&n.downloads?d1(n.downloads):null,!0)}</li>`:g}var sB=u`<span class="npm-downloads-tier is-unpopular" data-tooltip="No downloads counted by npm, which counts a package's from the day after it was first published">unpopular</span>`,Ea=e=>new Intl.NumberFormat("en",{style:"unit",unit:e,unitDisplay:"long"}),Fa={minute:Ea("minute"),hour:Ea("hour"),day:Ea("day"),month:Ea("month"),year:Ea("year")};function r_(e){let t=Math.max(0,Math.floor(e/6e4)),n=Math.floor(t/1440);return t<60?Fa.minute.format(t):t<1440?Fa.hour.format(Math.floor(t/60)):n<60?Fa.day.format(n):n<730?Fa.month.format(Math.floor(n/30.44)):Fa.year.format(Math.floor(n/365.25))}function iB({compared:e},{created:t,gap:n}){if(!t)return g;let[r,o]=e,s=r_(Math.abs(n)),i=[`First published on ${Th(t)}`,`${s} ${n>=0?"before":"after"} ${o.version} was`],a=`npm had no package by its name when ${n>=0?r.version:"either version"} was published`;return u`<span class="npm-dependency-flag is-new" data-tooltip="${[...i,a].join(" \xB7 ")}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">New package</div>${i.map(l=>u`<div>${l}</div>`)}<div class="compare-tip-note">${a}</div></div>`}">${n>=0?`${s} old`:"published later"}</span>`}function o_(e,t){let n=eu(e.flags);if(t!=="added"||!e.level)return[n,g];let r=e.month?bh({total:e.month.total,from:new Date(e.month.from)}):null;return[n,e.uncounted?sB:n_(e,r),e.compared?iB(e,e):g]}function aB(e,t){let{counts:n}=Cr(t),r=PN.filter(o=>n.has(o));return r.length===0?g:u`<ul class="npm-extensions" aria-label="Readable files">${r.map(o=>WC(e,t,o))}</ul>`}function vb(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 RC(e,t,n=new Map){let r=new Map;for(let o of e){let s=vb(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 lB=/^(?:package\.json|readme(?:\.md)?)$/iu,Oa=e=>lB.test(e)||Ca.test(e);function cB(e,t,n=new Map){let r=e.filter(Oa),o=new Set(e.filter(l=>!Oa(l)).map(vb)),{files:s,bytes:i,lines:a}=RC(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:RC(e,t,n).filter(l=>o.has(l.extension))}}var TC=({bytes:e,lines:t})=>t===null?ge(e):`${ge(e)} \xB7 ${t.toLocaleString("en")} LoC`;function dB(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?rb(e,{id:"package",label:"Package",keeps:Oa},u`<span>Package</span>`,n.package.files,{tooltip:`package.json, readme and license: ${TC(n.package)}`}):g} ${n.extensions.map(o=>rb(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:TC(o)}))}</ul>`}function s_(e,t,n){let r=[["languages","Languages",t],["readable","Readable",aB(e,n)],["types","File types",dB(e,n)],["socket","Socket",TN(e)]].filter(([,,o])=>o!==g);return r.length===0?g:u`<dl class="npm-contents" aria-label="Contents">${r.map(([o,s,i])=>u`<div class="${`npm-contents-${o}`}"><dt>${s}</dt><dd>${i}</dd></div>`)}</dl>`}function i_(e,t){return e.size===0?g:Ln({title:"Binary files",count:e.size,list:!0,body:u`<ul class="bundles-sources-list">${[...e].map(n=>u`<li><div class="bundles-source-row is-resource">${kn(n,"binary")}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${n}">${n}</span> ${t.has(n)?u`<span class="bundles-source-size">${ge(t.get(n))}</span>`:g}</div></li>`)}</ul>`})}var bu=({severity:e})=>xv.indexOf(e),uB=(e,t)=>e.reduce((n,r,o)=>n||r.name.localeCompare(t[o].name),0);function a_(e,t,n){return e.map(r=>({row:r,path:n(r),flags:t(r).toSorted((o,s)=>bu(o)-bu(s)||o.name.localeCompare(s.name))})).toSorted((r,o)=>(o.flags.length>0)-(r.flags.length>0)||r.flags.length>0&&(bu(r.flags[0])-bu(o.flags[0])||o.flags.length-r.flags.length||uB(r.flags,o.flags))||r.path.localeCompare(o.path)).map(({row:r})=>r)}function $b(e){return{...C1(e),files:jC,badges:KC,dependencyTags:o_,reviewVerdictLimit:IC}}var kb=class extends N{static styles=[...N.styles,D(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",kb);function l_({name:e,workspaceNames:t,existingNames:n}={}){let r=n instanceof Set?n:new Set(n??[]);return new Promise(o=>{let s=document.createElement("import-conflict-dialog");Object.assign(s,{reportName:e??"",workspaceNames:Array.isArray(t)?t:[],existingNames:r,_newName:pB(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 pB(e,t){if(typeof e!="string"||e.length===0)return"";let n=e.lastIndexOf("."),r=n>0?e.slice(0,n):e,o=n>0?e.slice(n):"",s=r.replace(/-\d+$/u,"");for(let i=2;i<1e3;i++){let a=`${s}-${i}${o}`;if(!t.has(a))return a}return""}var cn=null,Ba=null,yu=0;function fB(){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=fB(),o=++yu;clearTimeout(Ba),Ba=null,r.className=t,r.textContent=e,requestAnimationFrame(()=>{yu===o&&r.classList.add("visible")});let s=()=>{yu===o&&mB()};return n>0&&(Ba=setTimeout(s,n)),s}function mB(){yu++,cn&&(clearTimeout(Ba),Ba=null,cn.classList.remove("visible"))}function c_(e,t,n){if(e.currentView!=="findings"&&e.currentView!=="files"&&e.currentView!=="links"||!e.currentManagedTeam)return!1;let r=t.find(i=>i.id===e.currentManagedTeam);if(n.has(`team:${e.currentManagedTeam}`)||!r||e.managedReports.some(i=>n.has(i.id)))return!0;let o=new Set(r.reports.filter(i=>e.currentManagedReport!==null||i.visible!==!1).map(i=>i.id));if(e.currentManagedReport!==null)return!o.has(e.currentManagedReport);let s=new Set(e.managedReports.map(i=>i.id));return o.size!==s.size||[...o].some(i=>!s.has(i))}async function d_(e,t,{fetchCatalog:n,isCurrent:r,render:o,replaceRoute:s}){let i=yr(e);if(!i||!r())return!0;let a=["admin","manage"].includes(e.managedSession?.role),l,p=null;if(e.currentManagedTeam!=null||!a){let f=m=>m.bundles?.some(h=>h.id===i);p=t.find(m=>m.id===e.currentManagedTeam&&f(m))??t.find(f)}if(p)l=As(t);else if(a)try{l=(await n()).map(br)}catch(f){if(f.status!==401&&f.status!==403)throw f;l=[]}else l=[];if(!r())return!0;let d=l.find(f=>f.managedId===i);return d?(e.bundles=l,e.currentManagedTeam=p?.id??null,o(),s(wr(t,d,e.currentManagedTeam,e.bundleDetailsTab,vr(e),l)),!0):!1}async function u_({bundleId:e,teamId:t,bundleTab:n,file:r,line:o,endLine:s,compareId:i,compareMode:a},l,p,d){let f=l.find(k=>k.managedId===e);if(!f||!p()||!_())return!1;let m=kg(f.integrity,k=>k.managedId===e),h=c.bundleDetails?.managedId===e&&c.bundleDetails.integrity===f.integrity&&!c.bundleDetails.error?c.bundleDetails:null;try{c.bundles=l,Bt(),gr(f.integrity,n),n==="code"&&r!=null&&(c.bundleCodeFileRequest={bundle:f.integrity,file:r,...o==null?{}:{line:o},...s==null?{}:{endLine:s}});let k=n==="compare"&&i!=null?Is(l,f.integrity).find($=>$.managedId===i):null;k&&(c.bundleCompare={bundle:f.integrity,target:k.integrity,mode:kl(a)}),c.bundleDetails=m??h,c.currentManagedTeam=t,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),d(),document.querySelector("#main-content")?.scrollTo({top:0})}catch(k){return p()&&k.name!=="AbortError"&&Ge(`Couldn't open bundle: ${k.message}`,{kind:"error"}),!1}let b=c.bundleDetails,y=()=>_()&&c.currentView==="bundles"&&c.selectedBundle===f.integrity&&c.bundles.some(k=>k.managedId===e&&k.integrity===f.integrity)&&c.bundleDetails===b,w=(k,$)=>(k?.name==="AbortError"||(p()?$&&Ge(`Couldn't open bundle: ${k.message}`,{kind:"error"}):y()&&(c.bundleDetails={integrity:f.integrity,kind:f.kind,size:f.size,managedId:e,error:k.message},O())),!1),v=me(),x;for(;;){let k=Le();try{x=await 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 gB(e){let t=1/0,n=Date.now()+5e3;for(let r of e)for(let o of r.bundles??[])["stasis","sourcemap"].includes(o.kind)&&o.summary==null&&(t=Math.min(t,Math.max(n,o.summaryRetryAt??0)));return t}function p_(e){let t=null,n=null,r=null;return async({generation:o,session:s,signal:i,reuse:a=!1,revision:l=null})=>{if(i.aborted)return null;let p=JSON.stringify([o,s?.id,s?.role,s?.csrfToken]);if(r!==p&&(t?.controller.abort(),t=null,n=null,r=p),n&&Date.now()<n.expiresAt&&(a||l!==null&&l===n.revision))return n.teams;if(!t||t.signal.aborted||l!==null&&t.revision!==l){t?.controller.abort(),n=null;let m=new AbortController,h=AbortSignal.any([i,m.signal]),b={controller:m,signal:h,promise:null,revision:l};t=b;let y=null;b.promise=e({fallback:null,signal:h,onRevision:w=>{y=w}}).then(w=>h.aborted||r!==p?null:(w!==null&&(n={teams:w,revision:y,expiresAt:gB(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 xb(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function f_(e){let t=e.summary,n=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&n.push(ge(e.byteSize)),t&&[t.files,t.lines].every(r=>Number.isSafeInteger(r)&&r>=0)&&n.push(`${t.files.toLocaleString()} files`,`${t.lines.toLocaleString()} LoC`),n.join(" \xB7 ")}function m_(e,t=""){let n=t.trim().toLowerCase(),r=o=>String(o??"").toLowerCase().includes(n);return(Array.isArray(e)?e:[]).flatMap(o=>{let s=(o.reports??[]).filter(a=>r(a.filename)||r(oe(a.filename??""))),i=(o.bundles??[]).filter(a=>r(a.filename));return r(o.name)||s.length>0||i.length>0?[{team:o,reports:s,bundles:i}]:[]})}var wu=class{constructor(){this.expanded=new Map}sync(t,n=!1){let r=JSON.stringify([t.managedSession?.id,t.managedSession?.role,t.managedSession?.csrfToken]);r!==this.owner&&(this.expanded.clear(),this.focus="",this.owner=r);let o=t.managedTeams??[];for(let d of this.expanded.keys())o.some(f=>f.id===d)||this.expanded.delete(d);let s=yr(t),i=["findings","files","links"].includes(t.currentView)?t.currentManagedReport:null,a=s?"bundles":"reports",l=o.find(d=>d.id===t.currentManagedTeam&&(s?d.bundles?.some(f=>f.id===s):d.reports?.some(f=>f.id===i))),p=JSON.stringify([a,s||i,l?.id]);if(!(!n&&p===this.focus)&&(this.focus=p,l)){let d=this.expanded.get(l.id)??new Set;d.add(a),this.expanded.set(l.id,d)}}toggle(t,n){let r=this.expanded.get(t)??new Set;r.has(n)?r.delete(n):r.add(n),this.expanded.set(t,r)}shown(t,n,r,o){return!r||o||this.expanded.get(t)?.has(n)===!0}};function g_(e){let t=String(e??"").split(/[\s\-_/.]+/u).filter(Boolean);if(t.length<2)return Array.from(t[0]??"").slice(0,2).join("");let n=t.slice(0,2).map(r=>Array.from(r)[0]).join("");return/^\p{Ll}/u.test(n)?n:n.toUpperCase()}var Dn=null,b_=()=>Promise.resolve(!0);function y_(e){b_=e}function $o(){Dn?.controller.abort(),Dn=null}function hB(e,t,n){let{promise:r,resolve:o}=Promise.withResolvers(),s=!1,i=d=>{clearTimeout(p),t.removeEventListener("abort",a),o(d)},a=()=>i(!1),l=()=>(!s&&!t.aborted&&(s=!0,clearTimeout(p),Promise.resolve().then(()=>n()&&e(t)).then(d=>i(!!d&&n()),()=>i(!1))),r),p=setTimeout(l,1e3);return t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),{promise:r,start:l}}function w_(e,t){return t.aborted?Promise.resolve(!1):new Promise(n=>{let r=s=>{t.removeEventListener("abort",o),n(s)},o=()=>r(!1);t.addEventListener("abort",o,{once:!0}),e.then(r,()=>r(!1))})}function _r({catalogOnly:e=!1,hydrate:t}={}){let n=c.managedSession,r=Le(),o=["findings","files","links"].includes(c.currentView),s=["workspace-reports","workspace-bundles"].includes(c.currentView),i=s||o&&(!e||Dn?.teamId===c.currentManagedTeam&&!Dn.signal.aborted)?c.currentManagedTeam:null;if(!_()||!n||n.role==="none"||n.publicShare&&!i)return $o(),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(Dn?.key!==l||Dn.signal.aborted){$o();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&&Dn===w&&_()&&c.managedSession?.id===n.id&&c.managedSession?.role===n.role&&c.managedSession?.csrfToken===n.csrfToken&&!!c.managedSession?.publicShare==!!n.publicShare,Dn=w,bB(w)}let p=Dn;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?hB(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&&Cb(p,b,p.signal).then(y=>(!y&&b.current()&&($o(),_r()),y))),b.ready}function bB(e){let{signal:t,controller:n,current:r}=e;Xk(e.teamId,{signal:t,reportId:e.reportId,onTeams:async(o,s)=>{let i=()=>r(o);return i()?await b_(i,o,s)&&i():!1},onUpdate:o=>r(o)?(e.version++,Cb(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 Cb(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=yB(e,t,p).catch(()=>!1).finally(()=>{t.refresh===l&&(t.refresh=null)})}let r=t.refresh,o=AbortSignal.any([n,t.signal,r.controller.signal]),s=()=>r.controller.abort();n.addEventListener("abort",s,{once:!0});let i;try{i=await w_(r.promise,o)}finally{n.removeEventListener("abort",s)}return e.current(n)?t.current()?i?t.version<e.version?Cb(e,t,n):!0:!1:!0:!1}async function yB(e,t,n){if(t.hydration&&!await w_(t.hydration.start(),n))return!1;for(;t.current()&&!n.aborted&&t.version<e.version;){let r=e.version,o=h_(e.teamId,n),s=c.managedReports.filter(a=>t.reports.some(l=>l._managedReportId===a.id));if(!(await Promise.all(s.flatMap(a=>[Sb(a.id,{signal:n,readAnnotations:o}),xd(a.id,{signal:n,readAnnotations:o})]))).every(Boolean)||!t.current()||n.aborted)return!1;t.version=r}return!n.aborted&&t.current()}var v_=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{width:260px;flex-shrink:0;height:100%;background:var(--surface);backdrop-filter:var(--glass-blur);border-right:1px solid var(--border);display:flex;flex-direction:column;transition:width .15s ease-out;overflow:hidden}:host(.collapsed){width:32px}:host([inert]) .brand-tag,:host([inert]) .sidebar-search,:host([inert]) .sidebar-actions,:host([inert]) #file-list,:host([inert]) #sidebar-toggle,:host([inert]) #sidebar-home,:host([inert]) #sidebar-rail,:host([inert]) #encryption-toggle,:host([inert]) #storage-status{visibility:hidden}:host(.collapsed) .brand,:host(.collapsed) .sidebar-search,:host(.collapsed) #encryption-toggle,:host(.collapsed) #file-list{display:none}:host(.collapsed) .sidebar-header{padding:.5rem 0;justify-content:center}:host(.collapsed) .sidebar-actions{padding:.35rem 0;flex-direction:column;justify-content:center}:host(.collapsed) sidebar-delete-current,:host(.collapsed) #storage-status,:host(.collapsed) #sync-status .sync-label{display:none}:host(.collapsed) #sync-status{padding:.25rem;border:0}:host(.collapsed) #view-as-status,:host(.collapsed) #public-status,:host(.collapsed) .auth-login{display:none}:host(.collapsed) #auth-status[data-authed="1"]{padding:.2rem}:host(.collapsed[data-view-as]) #auth-status .user-avatar{box-shadow:0 0 0 1.5px var(--surface),0 0 0 3px var(--accent)}#sidebar-home,#sidebar-rail{display:none}:host(.collapsed) #sidebar-home{display:grid;margin:0 auto;padding:.3rem 0}:host(.collapsed) #sidebar-rail{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.35rem 0;list-style:none;overflow-y:auto;overscroll-behavior:none;scrollbar-width:none}.rail-item{width:26px;padding:.25rem 0 .2rem;display:grid;justify-items:center;gap:.15rem;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);font:inherit;font-size:.58rem;font-weight:600;line-height:1;white-space:nowrap;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.current{color:var(--accent);background:rgb(from var(--text) r g b / .1)}&:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}}:host([data-mode="managed"]:not([data-workspace-access])) .sidebar-search,:host([data-mode="managed"]:not([data-authenticated])) .sidebar-actions{display:none}.sidebar-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem .4rem;.brand{flex:1;min-width:0;display:flex;align-items:center;gap:.4rem;font-size:.95rem;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;user-select:none}.brand-button{display:inline-flex;align-items:center;gap:.5rem;background:transparent;border:0;padding:0;margin:0;font:inherit;color:inherit;border-radius:var(--ui-radius, 4px);&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}.brand-tag{padding:.08rem .25rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;font:inherit;font-size:.65rem;font-weight:500;color:var(--muted);text-transform:lowercase;letter-spacing:.02em;&[role=button]{cursor:default}&[role=button]:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}}@media(display-mode:window-controls-overlay){.sidebar-header{min-height:env(titlebar-area-height,0px);padding-left:max(.75rem,env(titlebar-area-x,0px));-webkit-app-region:drag;app-region:drag;.brand-button,.brand-tag,#encryption-toggle{-webkit-app-region:no-drag;app-region:no-drag}#sidebar-toggle{display:none}}}#sidebar-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}}#encryption-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.encrypted{color:var(--accent)}&.locked-pending{color:light-dark(#b25b00,#f0a060);outline:1px dashed currentcolor;outline-offset:-2px}}#encryption-toggle[hidden]{display:none!important}.sidebar-search{display:flex;align-items:center;margin:0 .55rem .25rem;padding:0 .25rem 0 .55rem;background:rgb(from var(--bg) r g b / .45);border:1px solid var(--border);border-radius:var(--ui-radius, 7px);transition:background .12s,border-color .12s;-webkit-app-region:no-drag;app-region:no-drag;&:has(input:focus){border-color:var(--accent);background:rgb(from var(--text) r g b / .06)}.sidebar-search-icon{flex-shrink:0;color:var(--muted);pointer-events:none;margin-right:.4rem}& input{flex:1;min-width:0;padding:.3rem 0;background:transparent;color:var(--text);border:0;outline:none;font:inherit;font-size:.78rem;&::placeholder{color:var(--muted)}&:focus::placeholder{color:transparent}&::-webkit-search-cancel-button{display:none}}}sidebar-view-button{display:contents}sidebar-view-button[hidden]{display:none!important}.sidebar-view-btn{position:relative;flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 3px);padding:0;margin-left:2px;transition:background .12s,color .12s;sidebar-view-button+sidebar-view-button>&{margin-left:.4rem}sidebar-view-button:last-of-type>&{margin-right:.1rem}& svg{width:14px;height:14px}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.active{color:var(--accent);background:rgb(from var(--text) r g b / .1)}.view-btn-count{position:absolute;top:-4px;right:-4px;background:var(--bg);color:color-mix(in srgb,var(--muted),var(--text) 15%);font-size:8.5px;font-weight:600;border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px;font-variant-numeric:tabular-nums;pointer-events:none}&.active .view-btn-count{color:var(--accent)}}#file-list{list-style:none;flex:1;overflow-y:auto;overscroll-behavior:none;scrollbar-gutter:stable;-webkit-app-region:no-drag;app-region:no-drag;padding:0 .35rem .25rem 0;margin:0;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:5px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.file-group-header{display:flex;align-items:center;justify-content:space-between;padding:.45rem .35rem .2rem .55rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);user-select:none;&:first-child{padding-top:.25rem}}.file-group-header.workspace-header .workspace-header-actions{display:flex;align-items:center;gap:.35rem}.workspace-add{width:18px;height:18px;display:grid;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);border-color:var(--accent)}}.file-item:is(.workspace-item,.team-item){display:block;border-radius:var(--ui-radius, 0 5px 5px 0)}.workspace-heading{display:flex;align-items:stretch;gap:.15rem}.workspace-meta{display:flex;align-items:center;justify-content:space-between;gap:.35rem;padding:0 .3rem .2rem calc(2rem - 3px);color:var(--muted);font-size:.68rem;line-height:1.3;white-space:nowrap;user-select:none}.workspace-findings{min-width:0;overflow:hidden;text-overflow:ellipsis}.workspace-sections{display:inline-flex;flex-shrink:0;margin-left:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.workspace-sections button{padding:.06rem .25rem;border:0;background:transparent;color:var(--muted);font:inherit;font-size:.64rem;line-height:1.4;font-variant-numeric:tabular-nums;+button{border-left:1px solid var(--border)}&:hover:not(:disabled){background:var(--surface-active);color:var(--text)}&[aria-expanded=true]{background:rgb(from var(--accent) r g b / .1);color:var(--accent)}&:disabled{background:var(--surface-active);color:var(--muted)}}.workspace-share,.workspace-export,.workspace-leave{flex-shrink:0;width:22px;align-self:center;height:22px;display:none;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06);border-color:var(--accent)}}.file-item.team-item:focus-within .workspace-share{display:grid}@media(hover:none){.file-item.team-item .workspace-share{display:grid}}.workspace-leave:hover:not(:disabled){color:var(--critical, #f87171);border-color:var(--critical, #f87171)}@media(hover:hover){.file-item.team-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-export,.file-item.workspace-item:hover .workspace-leave{display:grid}}.workspace-rename-input{width:100%;box-sizing:border-box;background:var(--surface);color:var(--text);border:1px solid var(--accent);border-radius:var(--ui-radius, 3px);padding:0 .25rem;margin:-1px 0;font:inherit;font-size:.76rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;outline:none}.file-item.team-item .team-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item>.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;background:none;border:0;padding:.2rem .3rem .2rem 1.3rem;font-family:inherit;font-size:.78rem;text-align:left}.file-item.team-bundle-item .file-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item .file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}.file-item{list-style:none;position:relative}.file-item.current:after{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;background:var(--accent);border-radius:var(--ui-radius, 0 2px 2px 0);pointer-events:none}.file-item button.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;padding:.2rem .3rem .2rem .55rem;background:transparent;color:var(--text);border:1px solid transparent;border-radius:var(--ui-radius, 0 5px 5px 0);font-family:inherit;font-size:.78rem;text-align:left;&:hover{background:rgb(from var(--text) r g b / .04)}.file-icon{flex-shrink:0;color:var(--muted)}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}.file-item:is(.workspace-item,.team-item) button.file-name{flex:1;min-width:0;padding-left:calc(.55rem - 3px)}.file-item .file-count{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);opacity:.65;font-size:.68rem;font-weight:500;font-variant-numeric:tabular-nums}.file-item.current button.file-name{background:rgb(from var(--accent) r g b / .09);border-color:rgb(from var(--accent) r g b / .16);.file-icon,.file-count{color:var(--text)}}.file-item.content-hidden button.file-name .file-label{color:var(--muted)}.file-item:is(.workspace-item,.team-item):hover{background:rgb(from var(--text) r g b / .04)}.file-item:is(.workspace-item,.team-item) button.file-name:hover{background:transparent}.file-item:is(.workspace-item,.team-item).current{background:rgb(from var(--accent) r g b / .09);border-radius:var(--ui-radius, 0 5px 5px 0);box-shadow:inset 0 0 0 1px rgb(from var(--accent) r g b / .16)}.file-item:is(.workspace-item,.team-item).current button.file-name{background:transparent;border-color:transparent}:host-context(body.theme-paper) .file-item.current{background:transparent;box-shadow:none;& button.file-name{background:transparent;border-color:transparent}.file-name:after{content:"";position:absolute;inset:0;border:1px dashed var(--border);border-left:0;pointer-events:none}}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(prefers-reduced-motion:reduce){:host,*,*:before,*:after{transition:none!important}}.file-item.indented button.file-name{padding-left:1.3rem}.file-item.indented:before{content:"";position:absolute;left:.85rem;top:0;bottom:0;width:1px;background:var(--border)}.file-item.bundle-missing>.file-name,.file-item.report-missing>.file-name{display:flex;align-items:center;gap:.5rem;padding:.2rem .3rem .2rem 1.4rem;color:var(--muted);font-size:.78rem;font-style:italic;cursor:default;.file-icon{flex-shrink:0;color:var(--muted);font-style:normal}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}:host-context(body.theme-pink) .workspace-rename-input,:host-context(body.theme-pink) .file-item button.file-name .file-label,:host-context(body.theme-pink) .file-item.bundle-missing .file-label,:host-context(body.theme-pink) .file-item.report-missing .file-label{font-family:inherit}.file-item.dragging button.file-name{opacity:.4}.file-item.workspace-item.drag-over button.file-name,.file-item.indented.drag-over button.file-name{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent)}.file-group-header.drag-over{background:rgb(from var(--accent) r g b / .12);border-radius:var(--ui-radius, 4px)}.sidebar-actions{padding:.35rem .55rem .45rem;border-top:1px solid var(--border);display:flex;gap:.35rem;align-items:center;justify-content:space-between;& button{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 4px);padding:.2rem .5rem;font-size:.72rem;font-family:inherit;-webkit-app-region:no-drag;app-region:no-drag;&:hover{color:var(--text);border-color:var(--accent)}&.danger:hover{color:var(--critical);border-color:var(--critical)}&[disabled]{opacity:.4;border-color:var(--border)!important;color:var(--muted)!important}}}sidebar-delete-current{display:contents}sidebar-delete-current[hidden]{display:none!important}sidebar-delete-current button{display:inline-flex;align-items:center;gap:.35rem;.trash-icon{flex-shrink:0}}#sync-status{display:inline-flex;align-items:center;gap:.35rem;border-color:transparent;&:hover{border-color:var(--accent)}.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .15)}&[data-status=online] .sync-dot{background:var(--green)}&[data-status=connecting] .sync-dot{background:var(--medium)}&[data-status=offline] .sync-dot{background:var(--critical)}}#sync-status[data-proxy-auth] .sync-dot{box-shadow:0 0 0 2px var(--accent)}#sync-status[data-degraded] .sync-dot{box-shadow:0 0 0 2px var(--medium)}#sync-status[hidden]{display:none}#storage-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .55rem;background:rgb(from var(--medium) r g b / .12);border:1px solid rgb(from var(--medium) r g b / .3);border-radius:var(--ui-radius, 5px);color:light-dark(#b25b00,#f0a060);font-size:.72rem;font-family:inherit;cursor:default;text-align:left;-webkit-app-region:no-drag;app-region:no-drag;&:hover{background:rgb(from var(--medium) r g b / .18);border-color:rgb(from var(--medium) r g b / .5)}.storage-dot{width:7px;height:7px;border-radius:50%;background:var(--medium);flex-shrink:0}}#storage-status[hidden]{display:none}#view-as-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .3rem .3rem .55rem;background:rgb(from var(--accent) r g b / .12);border:1px solid rgb(from var(--accent) r g b / .35);border-radius:var(--ui-radius, 5px);color:var(--text);font-size:.72rem;user-select:none;-webkit-app-region:no-drag;app-region:no-drag;.view-as-label{flex:1;display:grid;gap:.05rem;min-width:0}.view-as-label>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.view-as-note{color:var(--muted);font-size:.66rem}.view-as-stop{flex-shrink:0;padding:.15rem .5rem;font:inherit;font-weight:500}}#view-as-status[hidden]{display:none}#auth-status[hidden],#manage-status[hidden]{display:none!important}#auth-status{display:inline-flex;align-items:center}#auth-status[data-authed="1"]{display:inline-flex;align-items:center;gap:.4rem;max-width:12rem;padding:.2rem .35rem;border-color:transparent;border-radius:var(--ui-radius, 5px)}#auth-status[data-authed="1"]:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#manage-status[hidden]{display:none}#manage-status{display:inline-grid;place-items:center;width:1.8rem;height:1.8rem;padding:.25rem;border-color:transparent;color:var(--muted)}#manage-status:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#public-status{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:.2rem 0;color:var(--muted);font-size:.72rem;user-select:none}#public-status[hidden]{display:none}.auth-login{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font:inherit;font-size:.72rem;font-weight:400}.user-avatar{position:relative;flex-shrink:0;width:22px;height:22px;border-radius:50%;overflow:hidden;background:var(--accent);display:inline-grid;place-items:center;user-select:none}.user-avatar-lg{width:38px;height:38px}.user-avatar-fallback{font-size:.72rem;font-weight:600;line-height:1;color:var(--bg);text-transform:uppercase}.user-avatar-lg .user-avatar-fallback{font-size:1.05rem}.user-avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.user-avatar img.broken{display:none}.user-menu[popover]{position:fixed;inset:auto;margin:0;min-width:11rem;flex-direction:column;gap:.1rem;background:var(--surface, var(--bg));border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.3rem;box-shadow:0 4px 14px #00000047}.user-menu[popover]:not(:popover-open){display:none}.user-menu[popover]:popover-open{display:flex}.user-card{display:flex;align-items:center;gap:.5rem;padding:.3rem .35rem .45rem;border-bottom:1px solid var(--border);margin-bottom:.2rem}.user-id{display:flex;flex-direction:column;min-width:0}.user-login{font-weight:600;font-size:.82rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-name{font-size:.74rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-menu-row{display:block;width:100%;text-align:left;background:transparent;border:0;border-radius:var(--ui-radius, 4px);padding:.4rem .5rem;font:inherit;font-size:.82rem;color:var(--text)}.user-menu-row.logout-row{display:inline-flex;align-items:center;gap:.4rem;font-size:.76rem}.logout-row svg{flex:0 0 auto}.user-menu-row:hover{background:rgb(from var(--text) r g b / .08)}
|
|
163
|
-
`;var
|
|
164
|
-
`;var _b=class extends N{static styles=[...N.styles,D(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=Yl(),this._vaultStateUnsub=kt(()=>{if(this._settled)return;let t=Yl();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 Pp({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 Bp({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 zp({seal:n}),this._phase="Encrypting triage data\u2026",await Qf({seal:n}),this._phase="Encrypting report files\u2026",await qp({seal:n}),this._phase="Encrypting bundles\u2026",await Xp({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",_b);function vu(){return re("passkey-setup-dialog")}var Rb=class extends N{static styles=[...N.styles,D(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",Rb);function $u(){return re("passkey-unlock-dialog")}var
|
|
163
|
+
`)}`:""}`}var La=["critical","high","moderate","low","unknown"],ib=e=>La.includes(e.severity)?e.severity:"unknown",_N=[["affects",e=>`Affects ${e}`],["later",()=>"Later versions"],["fixed",e=>`Fixed in ${e}`]];function ab(e){return Nn("stats",e,()=>Mk(e),t=>({downloads:t.downloads??null,github:t.github??null}))}function lb(e){return Nn("advisories",e,()=>Ik(e),t=>({versions:t.versions??[],advisories:t.advisories??[],repository:t.repository!==!1,keptAt:t.keptAt??null}))}function cb(e){let{name:t,version:n}=e.npm,r=(o,s)=>u`<a class="npm-package-link" href="${o}" target="_blank" rel="noopener noreferrer">${s}${ru}</a>`;return u`<span class="npm-package-links">${r(`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`,"npmjs")} ${e.npm.private?g:r(hu(e),"socket.dev")}</span>`}var hu=e=>`https://socket.dev/npm/package/${e.npm.name}/overview/${encodeURIComponent(e.npm.version)}`;function Na(e){let{name:t,version:n}=e.npm;if(e.npm.private)return null;let r=Nn("socket",`${t}@${n}`,()=>Fk(t,n),o=>({socket:o.socket??null}));return r.status==="ready"?r.socket:null}var TC=[["supplyChain","Supply chain",85,85],["vulnerability","Vulnerability",85,85],["quality","Quality",70,80],["maintenance","Maintenance",70,80],["license","License",80,80]],RN=50,tb=(e,t)=>e===100?"is-good is-max":e>=t?"is-good":e>=50?"is-fair":"is-poor",nb=e=>u`<svg class="npm-socket-gauge" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="6" pathLength="100"></circle><circle class="npm-socket-gauge-fill" cx="8" cy="8" r="6" pathLength="100" stroke-dasharray="${`${e} 100`}"></circle></svg>`;function TN(e){let t=Na(e)?.scores;return t?u`<ul class="npm-extensions npm-socket-scores" aria-label="Socket scores">${TC.map(([n,r,,o])=>{let s=Math.round(t[n]*100);return u`<li><a class="${`npm-extension npm-socket-score ${tb(s,o)}`}" href="${hu(e)}" target="_blank" rel="noopener noreferrer">${nb(s)}<span>${r}</span><span class="npm-extension-count">${s}</span></a></li>`})}</ul>`:g}var db=new Map([["critical","critical"],["high","high"],["middle","moderate"],["low","low"]]),mu=e=>e.replaceAll(/(?<=[a-z])(?=[A-Z])/gu," ").toLowerCase().replace(/^./u,t=>t.toUpperCase()),MN=new Map,Qh=new WeakMap;function ub(e){let t=e?Na({npm:e}):null;return t?(Qh.has(t)||Qh.set(t,Map.groupBy(t.alerts.filter(n=>n.file),n=>n.file)),Qh.get(t)):MN}var pb=(e=[])=>e.map(t=>{let n=db.get(t.severity)??"low";return u`<span class="${`npm-socket-file-alert sev-${n}`}" data-tooltip="${`Socket: ${mu(t.type)}, ${n}${t.note?` \xB7 ${t.note}`:""}`}">${mu(t.type)}</span>`});function MC(e,t){return kC(e.npm,lb(e.npm.name),Na(e),ln(e.npm,t?t.npm?.version??"(empty)":null))}function IC(e,t){let n=fu(e),o=n&&t!==null&&[...t].every(Oa)?[]:Na(e)?.alerts??[];if(!n&&o.length===0)return g;let s=[...t??[]].find(i=>/^readme(?:\.md)?$/iu.test(i));return u`<div class="npm-alerts">${n?u`<p class="npm-alert" role="note"><strong>Taken down by npm.</strong> npm's security team removed this package's versions, as it does for malicious code, and serves this placeholder in their place${s?u`: ${Hs(s,t,"its readme")}`:""}.</p>`:g} ${o.length>0?IN(e,o,t):g}</div>`}function IN(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="${hu(e)}" target="_blank" rel="noopener noreferrer">socket.dev${ru}</a></span><ul>${t.map(r=>{let o=db.get(r.severity)??"info";return u`<li><span class="${`bundle-advisory-severity sev-${o}`}">${o}</span> <span class="npm-socket-alert-type">${mu(r.type)}</span> ${r.file?u`<span class="npm-socket-alert-file">in ${Hs(r.file,n)}</span>`:g} ${r.note?u`<p class="npm-socket-alert-note">${r.note}</p>`:g}</li>`})}</ul></div>`}function AC(e,t,n=g){let r=ab(e.npm.name),o=e_(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">${cb(e)}${t}</div>${n}</div>`}var AN=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>`,EN=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>`,FN=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>`,LN=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 fb(e){if(!e.npm.manifest.github?.github)return g;let t=ab(e.npm.name),n=t.status==="ready"?t.github:null;if(!n)return g;let r=(i,a,l,p)=>u`<a class="bundle-origin-link npm-github-figure" href="${`https://github.com/${Ld(n.repo)}/${p}`}" data-tooltip="${`${a.toLocaleString("en")} ${l}`}" target="_blank" rel="noopener noreferrer">${i}<span>${Sa.format(a)}</span></a>`,o=typeof n.openPulls=="number"?n.openPulls:null,s=o===null?n.openIssues:Math.max(n.openIssues-o,0);return u`${r(AN,n.stars,n.stars===1?"star":"stars","stargazers")} ${r(LN,n.forks,n.forks===1?"fork":"forks","forks")} ${r(EN,s,o===null?"open issues and pull requests":s===1?"open issue":"open issues","issues")} ${o===null?g:r(FN,o,o===1?"open pull request":"open pull requests","pulls")} ${n.archived?u`<span class="npm-github-archived">Archived</span>`:g}`}var EC=({name:e,version:t,private:n,manifest:r})=>n||!r.provenance?null:Nn("provenance",`${e}@${t}`,()=>Lk(e,t),o=>({provenance:o.provenance??null}));function mb(e){let t=EC(e);return t!==null&&(t.status==="loading"||!!t.provenance?.builder)}function ON(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 NN=(e,t)=>t?t==="github-hosted"||t==="gitlab-hosted":e==="GitHub Actions";function gb(e){if(e.npm.private)return g;let t=EC(e.npm);if(!t)return u`<span class="npm-commit-missing">None</span>`;if(t.status==="loading")return u`<span class="npm-commit-missing">Checking…</span>`;if(t.status==="error")return u`<span class="npm-commit-missing">Couldn't be read</span>`;if(!t.provenance)return u`<span class="npm-provenance-warning" data-tooltip="npm lists provenance for this version, but no statement naming its tarball could be read">Listed, but none for this tarball</span>`;let{manifest:n}=e.npm,{repository:r,commit:o,workflow:s,ref:i,builder:a,run:l,logIndex:p,runner:d}=t.provenance,f=($,S,C=g)=>u`<a class="bundle-origin-link" href="${$}" data-tooltip="${C}" target="_blank" rel="noopener noreferrer"><span>${S}</span></a>`,m=/^https:\/\/github\.com\/([^/]+\/[^/]+)$/u.exec(r)?.[1]??null,h=ON(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="${NN(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 BN(e,t,n){let r=e.affected.map(o=>t[o]).filter(Boolean);return r.includes(n)?"affects":r.length>0&&r.every(o=>Ht(o,n)<0)?"fixed":"later"}function FC(){let e=c.managedSession?.id;return()=>c.managedSession?.id===e}function LC(e,t){return ou({...e,title:e.title??e.id,severity:ib(e),cvss:{score:e.cvss},vulnerable_versions:e.range},({title:n,severity:r,details:o})=>uu({heading:n,severity:r,markdown:o,isCurrent:t}))}function OC(e){let{name:t,version:n}=e.npm,r=lb(t),o=FC(),s=r.status==="ready",i=s?r.advisories:[],a=i.map(m=>BN(m,r.versions,n)),l=_N.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 ${n_(Date.now()-Date.parse(r.keptAt))} ago: they couldn't be checked now.</p>`:s&&!r.repository?u`<p class="npm-advisories-note">GitHub's repository advisories couldn't be checked; npm's are shown.</p>`:g,f=r.status==="loading"?u`<p class="bundles-overview-col-empty">Checking advisories…</p>`:r.status==="error"?u`<p class="bundles-overview-col-empty">Couldn't check advisories.</p>`:l.length===0?u`${d}<p class="bundles-overview-col-empty">No advisories for any version.</p>`:u`${d}${l.map(m=>u`<section class="${`npm-advisory-group is-${m.status}`}"><h4 class="npm-advisory-group-head">${m.heading} <span class="bundles-overview-col-count">${m.advisories.length}</span></h4><ul class="bundle-advisories-rows">${m.advisories.map(h=>LC(h,o))}</ul></section>`)}`;return Ln({title:"Advisories",count:s?i.length:"\u2026",body:f,className:"npm-advisories-col",extra:s?u`<span class="${`npm-advisories-active${p>0?" is-active":""}`}">${p} active</span>`:g})}var DN=[...Nt].filter(([,{mark:e}])=>e!==null).map(([e])=>e),PN=[...Nt].filter(([,{mark:e}])=>e===null).map(([e])=>e),xC=[null,"notice","warn"];function NC(e){let t=new Map,n=new Map,r=0;for(let o of e){let s=jo(o);for(let i of s){t.set(i,(t.get(i)??0)+1);let a=Go(o,i);xC.indexOf(a)>xC.indexOf(n.get(i)??null)&&n.set(i,a)}s.some(i=>Nt.get(i).mark)&&r++}return{counts:t,marks:n,unreadable:r}}var SC=new WeakMap;function Cr(e){let t=e.npm?Gd(e):e,n=SC.get(e);if(n?.of!==t){let{sources:r,sourcesContent:o}=e.json,s=new Map(r.map((h,b)=>[h,PS(e,h,o[b])]).filter(([,h])=>h)),i=new Set(r.filter((h,b)=>typeof o[b]!="string")),{counts:a,marks:l,unreadable:p}=NC(s.values()),d=gi(e),f=xn(e),m={files:0,lines:0,unpacked:0};for(let h of r.filter(b=>!Oa(b)))i.has(h)||m.files++,m.lines+=d.get(h)??0,m.unpacked+=f.get(h)??0;n={of:t,paths:new Set(r),byPath:s,counts:a,marks:l,unreadable:p,sizes:f,extensions:new Map(r.map(h=>[h,vb(h)])),binaries:new Set([...i].toSorted((h,b)=>h.localeCompare(b))),types:cB(r,f,d),content:m},SC.set(e,n)}return n}var gu={key:null,chip:null},BC=e=>`${e.npm.name}@${e.npm.version}`,DC=e=>gu.key===BC(e)?gu.chip:null;function PC(e){let t=DC(e);return t&&{label:t.label,keeps:t.keeps,clear:()=>{gu={key:null,chip:null},O()}}}function rb(e,t,n,r,{classes:o="",tooltip:s=g}={}){let i=DC(e)?.id===t.id;return u`<li><button type="button" class="${`npm-extension npm-category${o}`}" aria-pressed="${String(i)}" data-tooltip="${s}" @click="${()=>{gu={key:BC(e),chip:i?null:t},O()}}">${n}<span class="npm-extension-count">${r.toLocaleString("en")}</span></button></li>`}function zC(e,t,n){let{name:r}=Nt.get(n),{byPath:o,counts:s,marks:i}=Cr(t),a=i.get(n);return rb(e,{id:`category:${n}`,label:r,keeps:l=>o.has(l)&&jo(o.get(l)).includes(n)},u`<span>${r}</span>`,s.get(n),{classes:a?` is-${a}`:""})}function WC({counts:e,marks:t,unreadable:n},r,o,s){let i=DN.filter(l=>e.has(l));if(i.length===0)return g;let a=i.some(l=>t.get(l)==="warn");return u`<div class="${`npm-readability-warning${a?" is-warn":""}`}" role="note"><span class="npm-readability-warning-text"><strong>${n.toLocaleString("en")} of ${r.toLocaleString("en")} ${o}</strong> can be hard to review by reading them:</span><ul class="npm-extensions">${i.map(s)}</ul></div>`}function HC(e,t){return WC(Cr(t),t.json.sources.length,"files",n=>zC(e,t,n))}function hb(e,t,n=!1,r=void 0){let{byPath:o,sizes:s}=Cr(e),i=n?t:void 0;return u`${hC(mC(e,t),void 0,i)}${yC(Yh(e,t),UC(r),i)}${VS(e,t,s.get(t))}${US(o.get(t))}`}var UC=e=>e===void 0||e?.details.npm&&!Gd(e.details)?void 0:e&&Yh(e.details,e.path);function bb(e,t,n=[],r=void 0){let{stamps:o,exfiltration:s}=Fn(e,t),i=UC(r),a=i===void 0?null:new Map(Ll(s).map(([l,p])=>[l,Ol(l,p,i)]));return[...n.map(l=>({name:mu(l.type),severity:db.get(l.severity)??"low"})),...o.map(l=>a?.has(l.name)?{...l,severity:a.get(l.name)}:l)]}var eb=new WeakMap;function zN(e,t){let n=e&&t?.npm?ln(t.npm,e.npm?.version??"(empty)"):null;if(!n)return null;if(!eb.has(n)){let r=new Map;for(let{host:o,places:s}of yb(n).get("new-hosts")?.hosts??[])for(let{path:i,line:a}of s)r.set(i,[...r.get(i)??[],{host:o,line:a,was:e.npm?.version??null}]);eb.set(n,r)}return eb.get(n)}function WN(e){if(!e?.length)return g;let t=e.length===1?"New host":"New hosts",{was:n}=e[0],r=`${n?`None of ${n}'s files`:"No file of the version compared with"} named ${e.length===1?"it":"them"}`;return u`<span class="npm-new-host" data-tooltip="${`${t}: ${e.map(({host:o,line:s})=>`${o}, line ${s}`).join("; ")} \xB7 ${r}`}" .tooltipContent="${u`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${e.map(({host:o,line:s})=>u`<span class="compare-tip-path">${o}</span><span class="compare-tip-said">line ${s}</span>`)}</div><div class="compare-tip-note">${r}</div></div>`}">${t}</span>`}var VC={icon:(e,t)=>kn(e,t.map(([n,r])=>Ho(n,r)).find(Kw)),alerts:e=>ub(e?.npm),alertTags:pb,newHosts:zN,newHostTag:WN,tag:(e,t,n)=>hb(e,t,!1,n),flags:(e,t,n)=>bb(e,t,[],n),warning(e,t){let{byPath:n}=Cr(e),r=NC(t.filter(i=>n.has(i)).map(i=>n.get(i))),{counts:o,marks:s}=r;return WC(r,t.length,t.length===1?"file added or changed":"files added or changed",i=>{let{name:a}=Nt.get(i),l=s.get(i);return u`<li><span class="${`npm-extension is-${l}`}"><span>${a}</span><span class="npm-extension-count">${o.get(i).toLocaleString("en")}</span></span></li>`})}},jC=(e,t)=>[VN(t.get("malware")),jN(t.get("deprecated")),qN(e,t.get("publisher")),YN(e,t.get("provenance-lost")),XN(e,t.get("held-install-scripts")),...QN(e,t),...JN(e,t),ZN(t.get("new-hosts")),eB(t.get("too-new"))],yb=e=>new Map((e?.findings??[]).map(t=>[t.id,t]));function GC(e,t){if(!e||!t?.npm)return g;let n=[e.npm??{name:t.npm.name,version:"Empty package",private:!0},t.npm],r=qC(n),o=yb(ln(t.npm,e.npm?.version??"(empty)")),s=[...jC(n,o),ZC(n,r),...QC(n,r,o.get("malware")),oB(t.npm.name,o.get("popularity"))].filter(i=>i!==g);return s.length===0?g:u`<ul class="npm-extensions npm-compare-badges" aria-label="Versions at a glance">${s}</ul>`}function KC(e){let{npm:t}=e,n=qC([t]),r=ln(t),o=yb(r),s=r?.oldVersion?[{name:t.name,version:r.oldVersion},t]:[t],i=[...jC(s,o),ZC([t],n),...QC([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 HN(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?ob("npm-compare-unreadable","Now unreadable",t,n):Vs(`${wb[e.severity]} npm-held-file npm-compare-unreadable`,"Now unreadable",t,n)}var wb={critical:"is-critical",high:"is-warn",moderate:"is-moderate"},UN=e=>[...bp.keys()].map(t=>{let n=e.get(`held-${Jh(t)}`),r=n?.files??[],o=s=>s.added?new Map([...s.found].filter(([i])=>!s.added.has(i))):void 0;return Vs(`${wb[n?.severity]} npm-held-file npm-files-${Jh(t)}`,t,r,s=>Xh(s.found,o(s)),bC(r.map(s=>s.found)))});function qC(e){let t=lb(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 YC=(e,t)=>e===t?`${t??"\u2013"}`:`${e??"\u2013"} \u2192 ${t??"\u2013"}`,XC=e=>La.find(t=>e.some(n=>ib(n)===t));function VN(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(`
|
|
164
|
+
`)}">Malware</span></li>`}function jN(e){return e?u`<li><span class="npm-extension npm-compare-deprecated" data-tooltip="${Ih(e.message)}">Deprecated</span></li>`:g}var GN={critical:"is-from-known",high:"is-to-unknown"},KN={known:"is-known",maintainer:"is-maintainer"},CC={known:"one that publishes one of npm's most downloaded packages",maintainer:"one of the package's maintainers",new:"an unknown publisher, new to the package",unknown:"an unknown publisher"};function qN([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 ${KN[y]??"is-unknown"}`}">~${b}</span>`,m=GN[a]??"is-to-known",h=u`A different npm account published the open version,<br>${CC[d]},<br>after ${CC[p]}${l?u`<br>in a major release`:g}`;return u`<li><a class="${`npm-extension npm-compare-publisher ${m}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(o)}`}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Published by ~${r} (${e.version}), then ~${o} (${t.version})`}" .tooltipContent="${vo("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 YN([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="${vo("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 XN(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>`:sb(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="${vo("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 JC=8;function JN(e,t){let n=o=>t.get(o)?.files??[],r=(o,s)=>`${wb[t.get(o)?.severity]} npm-held-file ${s}`;return[Vs(r("held-runs-code","npm-files-runs"),"Runs code",n("held-runs-code"),o=>gC(o.found,o.added),wp(n("held-runs-code").map(o=>o.found)),null,!1),...UN(t),ob("npm-compare-large","Large new code",n("large-code"),o=>ge(o.bytes)),HN(t.get("now-unreadable")),Vs(r("held-obfuscated","npm-files-obfuscated"),"Obfuscated",n("held-obfuscated"),o=>`${Qg(o.found)}${o.added?`, new since ${e[0].version}`:""}`),ob("npm-compare-binary","Binary code",n("binary-code"),o=>`${ge(o.bytes)}, not UTF-8 or holding a NUL`)]}function ZN(e){let t=e?.hosts??[],n=t.map(({host:s,places:i})=>{let a=i.slice(0,JC).map(({path:l,line:p})=>`${l}, line ${p}`);return{path:s,at:i.length>a.length?[...a,`and ${(i.length-a.length).toLocaleString("en")} more files`]:a}}),[r]=t,o=t.length===1&&r.places.length===1?{path:r.path,line:r.line,query:r.host}:null;return Vs("is-warn npm-compare-hosts",n.length===1?"New host":"New hosts",n,s=>s.at,n.length===1?n[0].path:null,o&&(s=>s.currentTarget.dispatchEvent(new CustomEvent("compare-open-line",{detail:o,bubbles:!0,composed:!0}))))}function ob(e,...t){return Vs(`npm-compare-file ${e}`,...t)}function Vs(e,t,n,r,o=null,s=null,i=!0){if(n.length===0)return g;let a=n.slice(0,JC),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 QN(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="${vo("From elsewhere than npm's registry",[e.at(-1)],[sb(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="${vo(`Nothing imports ${a}`,[e.at(-1)],[sb(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 eB(e){return e?u`<li><span class="npm-extension is-warn npm-compare-published" data-tooltip="${S1(e.published)}">${Rh(e.published)}</span></li>`:g}function ZC(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-${XC(n)}`,s=n.filter(d=>!r.includes(d)).length,i=r.filter(d=>!n.includes(d)).length,a=vo("Advisories affecting",e,t.map(d=>d.length===0?u`<span class="compare-tip-none">none</span>`:u`<span class="compare-tip-count">${d.length}</span><span class="compare-tip-severities">${La.map(f=>[f,d.filter(m=>ib(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">${YC(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="${()=>tB(e,t)}">${p}</button></li>`:u`<li><span class="${`npm-extension npm-compare-advisories ${o}`}" data-tooltip="${l}" .tooltipContent="${a}">${p}</span></li>`}var sb=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>`,vo=(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 tB([e,t],[n,r]){let o=FC(),s=[["new",`New in ${t.version}`,r.filter(i=>!n.includes(i))],["kept",`Still affecting ${t.version}`,r.filter(i=>n.includes(i))],["fixed",`Fixed in ${t.version}`,n.filter(i=>!r.includes(i))]].filter(([,,i])=>i.length>0).map(([i,a,l])=>({status:i,heading:a,rows:l.map(p=>LC(p,o))}));fC({heading:`Advisories \xB7 ${e.name} ${e.version} \u2192 ${t.version}`,groups:s,isCurrent:o})}function nB(e,t,n){if(e===null||e>=n)return!1;let r=XC(t);return r===void 0||La.indexOf(e<=25?"critical":"high")<La.indexOf(r)}function QC(e,t,n=null){let r=e.at(-1),o=e.map(s=>Na({npm:s})?.scores??null);return!o.at(-1)||n?[]:TC.flatMap(([s,i,a,l])=>{let p=o.map(m=>m?Math.round(m[s]*100):null),d=p.at(-1),f=e.length>1?p[0]:d;return d===null||d>=a?[]:s==="vulnerability"&&!(t&&nB(d,t.at(-1),a))?[]:s==="maintenance"&&r.manifest?.deprecated&&d>=RN?[]:[u`<li><a class="${`npm-extension npm-socket-score ${tb(d,l)}`}" href="${hu({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="${vo(`Socket's ${i.toLowerCase()} score`,e,p.map(m=>m===null?u`<span class="compare-tip-none">none</span>`:u`<span class="${`compare-tip-score ${tb(m,l)}`}">${nb(m)}${m}</span>`),s==="vulnerability"?`Shown under ${a}, where worse than the advisories found`:`Shown under ${a}`)}">${nb(d)}<span>${i}</span><span class="npm-extension-count">${YC(f,d)}</span></a></li>`]})}var rB={critical:"is-unpopular",high:"is-low",moderate:"is-mid"};function e_({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 t_(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 ${rB[s]??"is-low"}`:`npm-downloads-tier ${o}`,l=n?e_(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}">${hh(r??1/0)}</span>`}function oB(e,t){let n=ab(e);return t?u`<li>${t_(t,n.status==="ready"&&n.downloads?d1(n.downloads):null,!0)}</li>`:g}var sB=u`<span class="npm-downloads-tier is-unpopular" data-tooltip="No downloads counted by npm, which counts a package's from the day after it was first published">unpopular</span>`,Ea=e=>new Intl.NumberFormat("en",{style:"unit",unit:e,unitDisplay:"long"}),Fa={minute:Ea("minute"),hour:Ea("hour"),day:Ea("day"),month:Ea("month"),year:Ea("year")};function n_(e){let t=Math.max(0,Math.floor(e/6e4)),n=Math.floor(t/1440);return t<60?Fa.minute.format(t):t<1440?Fa.hour.format(Math.floor(t/60)):n<60?Fa.day.format(n):n<730?Fa.month.format(Math.floor(n/30.44)):Fa.year.format(Math.floor(n/365.25))}function iB({compared:e},{created:t,gap:n}){if(!t)return g;let[r,o]=e,s=n_(Math.abs(n)),i=[`First published on ${Th(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 r_(e,t){let n=eu(e.flags);if(t!=="added"||!e.level)return[n,g];let r=e.month?bh({total:e.month.total,from:new Date(e.month.from)}):null;return[n,e.uncounted?sB:t_(e,r),e.compared?iB(e,e):g]}function aB(e,t){let{counts:n}=Cr(t),r=PN.filter(o=>n.has(o));return r.length===0?g:u`<ul class="npm-extensions" aria-label="Readable files">${r.map(o=>zC(e,t,o))}</ul>`}function vb(e){let t=e.slice(e.lastIndexOf("/")+1),n=/\.d\.[cm]?ts$/iu.exec(t);if(n&&n.index>0)return n[0].toLowerCase();let r=t.lastIndexOf(".");return r>0?t.slice(r).toLowerCase():""}function _C(e,t,n=new Map){let r=new Map;for(let o of e){let s=vb(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 lB=/^(?:package\.json|readme(?:\.md)?)$/iu,Oa=e=>lB.test(e)||Ca.test(e);function cB(e,t,n=new Map){let r=e.filter(Oa),o=new Set(e.filter(l=>!Oa(l)).map(vb)),{files:s,bytes:i,lines:a}=_C(r,t,n).reduce((l,p)=>({files:l.files+p.files,bytes:l.bytes+p.bytes,lines:p.lines===null?l.lines:(l.lines??0)+p.lines}),{files:0,bytes:0,lines:null});return{package:r.length>0?{files:s,bytes:i,lines:a}:null,extensions:_C(e,t,n).filter(l=>o.has(l.extension))}}var RC=({bytes:e,lines:t})=>t===null?ge(e):`${ge(e)} \xB7 ${t.toLocaleString("en")} LoC`;function dB(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?rb(e,{id:"package",label:"Package",keeps:Oa},u`<span>Package</span>`,n.package.files,{tooltip:`package.json, readme and license: ${RC(n.package)}`}):g} ${n.extensions.map(o=>rb(e,{id:`extension:${o.extension}`,label:o.extension||"No extension",keeps:s=>r.get(s)===o.extension},u`<span class="npm-extension-name">${o.extension||"no extension"}</span>`,o.files,{tooltip:RC(o)}))}</ul>`}function o_(e,t,n){let r=[["languages","Languages",t],["readable","Readable",aB(e,n)],["types","File types",dB(e,n)],["socket","Socket",TN(e)]].filter(([,,o])=>o!==g);return r.length===0?g:u`<dl class="npm-contents" aria-label="Contents">${r.map(([o,s,i])=>u`<div class="${`npm-contents-${o}`}"><dt>${s}</dt><dd>${i}</dd></div>`)}</dl>`}function s_(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 bu=({severity:e})=>xv.indexOf(e),uB=(e,t)=>e.reduce((n,r,o)=>n||r.name.localeCompare(t[o].name),0);function i_(e,t,n){return e.map(r=>({row:r,path:n(r),flags:t(r).toSorted((o,s)=>bu(o)-bu(s)||o.name.localeCompare(s.name))})).toSorted((r,o)=>(o.flags.length>0)-(r.flags.length>0)||r.flags.length>0&&(bu(r.flags[0])-bu(o.flags[0])||o.flags.length-r.flags.length||uB(r.flags,o.flags))||r.path.localeCompare(o.path)).map(({row:r})=>r)}function $b(e){return{...C1(e),files:VC,badges:GC,dependencyTags:r_,reviewVerdictLimit:MC}}var kb=class extends N{static styles=[...N.styles,D(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",kb);function a_({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:pB(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 pB(e,t){if(typeof e!="string"||e.length===0)return"";let n=e.lastIndexOf("."),r=n>0?e.slice(0,n):e,o=n>0?e.slice(n):"",s=r.replace(/-\d+$/u,"");for(let i=2;i<1e3;i++){let a=`${s}-${i}${o}`;if(!t.has(a))return a}return""}var cn=null,Ba=null,yu=0;function fB(){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=fB(),o=++yu;clearTimeout(Ba),Ba=null,r.className=t,r.textContent=e,requestAnimationFrame(()=>{yu===o&&r.classList.add("visible")});let s=()=>{yu===o&&mB()};return n>0&&(Ba=setTimeout(s,n)),s}function mB(){yu++,cn&&(clearTimeout(Ba),Ba=null,cn.classList.remove("visible"))}function l_(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 c_(e,t,{fetchCatalog:n,isCurrent:r,render:o,replaceRoute:s}){let i=yr(e);if(!i||!r())return!0;let a=["admin","manage"].includes(e.managedSession?.role),l,p=null;if(e.currentManagedTeam!=null||!a){let f=m=>m.bundles?.some(h=>h.id===i);p=t.find(m=>m.id===e.currentManagedTeam&&f(m))??t.find(f)}if(p)l=As(t);else if(a)try{l=(await n()).map(br)}catch(f){if(f.status!==401&&f.status!==403)throw f;l=[]}else l=[];if(!r())return!0;let d=l.find(f=>f.managedId===i);return d?(e.bundles=l,e.currentManagedTeam=p?.id??null,o(),s(wr(t,d,e.currentManagedTeam,e.bundleDetailsTab,vr(e),l)),!0):!1}async function d_({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=kg(f.integrity,k=>k.managedId===e),h=c.bundleDetails?.managedId===e&&c.bundleDetails.integrity===f.integrity&&!c.bundleDetails.error?c.bundleDetails:null;try{c.bundles=l,Bt(),gr(f.integrity,n),n==="code"&&r!=null&&(c.bundleCodeFileRequest={bundle:f.integrity,file:r,...o==null?{}:{line:o},...s==null?{}:{endLine:s}});let k=n==="compare"&&i!=null?Is(l,f.integrity).find($=>$.managedId===i):null;k&&(c.bundleCompare={bundle:f.integrity,target:k.integrity,mode:kl(a)}),c.bundleDetails=m??h,c.currentManagedTeam=t,c.currentManagedReport=null,c.reports=[],document.body.classList.remove("report-fullscreen"),O({animate:!1}),d(),document.querySelector("#main-content")?.scrollTo({top:0})}catch(k){return p()&&k.name!=="AbortError"&&Ge(`Couldn't open bundle: ${k.message}`,{kind:"error"}),!1}let b=c.bundleDetails,y=()=>_()&&c.currentView==="bundles"&&c.selectedBundle===f.integrity&&c.bundles.some(k=>k.managedId===e&&k.integrity===f.integrity)&&c.bundleDetails===b,w=(k,$)=>(k?.name==="AbortError"||(p()?$&&Ge(`Couldn't open bundle: ${k.message}`,{kind:"error"}):y()&&(c.bundleDetails={integrity:f.integrity,kind:f.kind,size:f.size,managedId:e,error:k.message},O())),!1),v=me(),x;for(;;){let k=Le();try{x=await 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 gB(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 u_(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:gB(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 xb(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function p_(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 f_(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 wu=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 m_(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 Dn=null,h_=()=>Promise.resolve(!0);function b_(e){h_=e}function $o(){Dn?.controller.abort(),Dn=null}function hB(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 y_(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||Dn?.teamId===c.currentManagedTeam&&!Dn.signal.aborted)?c.currentManagedTeam:null;if(!_()||!n||n.role==="none"||n.publicShare&&!i)return $o(),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(Dn?.key!==l||Dn.signal.aborted){$o();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&&Dn===w&&_()&&c.managedSession?.id===n.id&&c.managedSession?.role===n.role&&c.managedSession?.csrfToken===n.csrfToken&&!!c.managedSession?.publicShare==!!n.publicShare,Dn=w,bB(w)}let p=Dn;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?hB(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&&Cb(p,b,p.signal).then(y=>(!y&&b.current()&&($o(),_r()),y))),b.ready}function bB(e){let{signal:t,controller:n,current:r}=e;Xk(e.teamId,{signal:t,reportId:e.reportId,onTeams:async(o,s)=>{let i=()=>r(o);return i()?await h_(i,o,s)&&i():!1},onUpdate:o=>r(o)?(e.version++,Cb(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 Cb(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=yB(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 y_(r.promise,o)}finally{n.removeEventListener("abort",s)}return e.current(n)?t.current()?i?t.version<e.version?Cb(e,t,n):!0:!1:!0:!1}async function yB(e,t,n){if(t.hydration&&!await y_(t.hydration.start(),n))return!1;for(;t.current()&&!n.aborted&&t.version<e.version;){let r=e.version,o=g_(e.teamId,n),s=c.managedReports.filter(a=>t.reports.some(l=>l._managedReportId===a.id));if(!(await Promise.all(s.flatMap(a=>[Sb(a.id,{signal:n,readAnnotations:o}),xd(a.id,{signal:n,readAnnotations:o})]))).every(Boolean)||!t.current()||n.aborted)return!1;t.version=r}return!n.aborted&&t.current()}var w_=`*,*: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)}
|
|
165
|
+
`;var v_=`: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)}
|
|
166
|
+
`;var _b=class extends N{static styles=[...N.styles,D(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=Yl(),this._vaultStateUnsub=kt(()=>{if(this._settled)return;let t=Yl();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 Pp({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 Bp({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 zp({seal:n}),this._phase="Encrypting triage data\u2026",await Qf({seal:n}),this._phase="Encrypting report files\u2026",await qp({seal:n}),this._phase="Encrypting bundles\u2026",await Xp({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",_b);function vu(){return re("passkey-setup-dialog")}var Rb=class extends N{static styles=[...N.styles,D(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",Rb);function $u(){return re("passkey-unlock-dialog")}var $_=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>`,$B=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 Tb(){if(!Ne)return;if(await Tt(),_()){Ne.hidden=!0;return}if(!tr()){Ne.hidden=!0;return}let e=ft();Ne.hidden=!1;let t=Yo();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($_,Ne)):e?(Ne.dataset.tooltip="Encryption on, locked \u2014 click to unlock",Ne.setAttribute("aria-label","Unlock encrypted data"),J($_,Ne)):(Ne.dataset.tooltip="Encryption off \u2014 click to enable",Ne.setAttribute("aria-label","Enable encryption"),J($B,Ne))}async function kB(){if(confirm(`Disable encryption?
|
|
165
167
|
|
|
166
168
|
Your local triage and report data will be rewritten as plaintext.
|
|
167
169
|
|
|
@@ -171,32 +173,32 @@ To complete cleanup, remove the DeepView passkey from your password manager / OS
|
|
|
171
173
|
\u2022 macOS / iOS: Settings \u2192 Passwords
|
|
172
174
|
\u2022 Windows: Settings \u2192 Accounts \u2192 Sign-in options \u2192 Passkeys
|
|
173
175
|
\u2022 Chrome: chrome://settings/passkeys
|
|
174
|
-
\u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function
|
|
175
|
-
`;function Ib(){let e=navigator.userAgent;return/AppleWebKit/u.test(e)&&!/Chrome\/|Chromium|Edg\/|OPR\/|Android/u.test(e)?"webkit":/Firefox\//u.test(e)?"firefox":"chromium"}var Mb=class extends N{static styles=[...N.styles,D(C_)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await cs()){this._finish("granted");return}this._retryDenied=!0};_chromiumBody(){let t=location.hostname==="localhost"?u`Plain <code>localhost</code> can never qualify — for local testing open the app via <code>127.0.0.1</code> instead.`:g;return u`<p class="nwd-intro">Chromium-based browsers (Chrome, Edge, Brave, …) never show a prompt — persistence is granted silently, and only to sites the browser considers important. Any of these qualifies it:</p><ul class="spd-list"><li><strong>Install the app</strong> — the install icon at the right end of the address bar, or the browser menu's Install entry.</li><li><strong>Bookmark</strong> this page.</li><li>Keep using the site — regular visits raise its engagement score.</li></ul><p class="nwd-note ui-hint">The browser re-evaluates on every request, so after any of the above press <strong>Try again</strong>.${t}</p>`}_firefoxBody(){return u`<p class="nwd-intro">Firefox asks with a permission prompt. A dismissed or blocked prompt is remembered, and the site can't re-ask until the old answer is cleared:</p><ol class="spd-list"><li>Click the permissions icon next to the address bar.</li><li>Clear the <strong>Store Data in Persistent Storage</strong> entry if it's blocked.</li><li>Press <strong>Try again</strong> below and choose <strong>Allow</strong>.</li></ol>`}_webkitBody(){return u`<p class="nwd-intro">Safari — and every iOS browser — additionally deletes a site's storage after <strong>7 days</strong> of browser use without interacting with the site, and no permission exempts a normal tab. Installing the app is what does:</p><ul class="spd-list"><li>On iPhone / iPad: open the <strong>Share</strong> menu, choose <strong>Add to Home Screen</strong>, and use the app from that icon.</li><li>In Safari on macOS: choose <strong>File → Add to Dock…</strong> and use the app from the Dock.</li><li>Installed web apps are exempt from the 7-day cleanup. Otherwise, use the site at least once a week.</li></ul>`}render(){let t=Ib(),n=t==="webkit"?this._webkitBody():t==="firefox"?this._firefoxBody():this._chromiumBody();return u`<dialog @close="${this._onClose}"><header><h3>Protect stored data</h3></header><p class="nwd-intro">Reports, bundles and triage live in the browser's <strong>best-effort storage</strong> — the browser is allowed to delete all of it at once under disk pressure or after long inactivity, without asking. The persistent-storage request that would prevent this was just declined.</p>${n}<footer class="nwd-actions">${this._retryDenied?u`<span class="spd-denied" role="status">Still not granted.</span>`:g} <span class="nwd-spacer"></span> ${t==="webkit"?g:u`<button type="button" @click="${this._onRetry}">Try again</button>`} <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("storage-persist-dialog",Mb);function __(){return new Promise(e=>{let t=document.createElement("storage-persist-dialog"),n=r=>{t.remove(),e(r)};t.addEventListener("resolve",r=>n(r.detail)),t.addEventListener("modal-conflict",()=>n(null)),document.body.append(t)})}var un=null,dn=null,Fb=!1,ku=!1,Ab=0;function Eb(){return Ib()==="webkit"}function R_(e){return e>=1e9?`${(e/1e9).toFixed(1)} GB`:e>=1e6?`${(e/1e6).toFixed(1)} MB`:e>=1e3?`${(e/1e3).toFixed(1)} kB`:`${e} B`}function T_(){if(!un)return;if(_()||!dn||dn.persisted!==!1||!Fb){un.hidden=!0;return}un.hidden=!1;let e=dn.usage===null||dn.quota===null?"":` Using ${R_(dn.usage)} of ${R_(dn.quota)}.`;un.querySelector(".storage-label").textContent="Storage at risk",un.dataset.tooltip="Reports, bundles and triage are in best-effort storage \u2014 the browser may delete them all under disk pressure or after long inactivity. "+(Eb()?"Click for how to protect them (on Safari and iOS browsers this needs the app installed to the Home Screen or Dock).":"Click to request persistent storage \u2014 if the browser declines, instructions for enabling it follow.")+e}function I_(e,t){let n=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!Eb()&&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 `+(Eb()?"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 xu(){if(await Tt(),!un||_()){T_();return}let[e,t]=await Promise.all([om(),(async()=>{try{return(await ce()).length>0||await Vp()}catch{return!1}})()]);dn=e,Fb=t,T_()}function Lb(){!un||Ab||(Ab=setTimeout(()=>{Ab=0,xu()},1e3))}async function M_(){if(ku||(await xu(),_()||dn?.persisted!==!1||!Fb||ku))return;ku=!0;let e=await cs();I_(e,!1),await xu()}async function SB(){if(dn&&dn.persisted===!1){ku=!0;let e=await cs();I_(e,!0),e||await __()}await xu()}function A_(e){un=e,un&&(un.addEventListener("click",()=>{SB()}),mt((t,n)=>{Lb(),n==="save"&&M_()}),M_())}function Ob(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(No)} <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 Nb(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(n=>Be(n)==="revalidation");return t.length>0?t:e}function Bb(e,t=()=>[]){let{groups:n,conflicts:r}=od(e,{hideRuledOut:!0});if(r.size>0)return{appMode:!1};let o=sd(n,t,Nb);return Pl(o,{tabs:Nb,kindOf:Be,severityMode:"corrected"})?{appMode:!0,appFindings:o.filter(s=>Nb(s).some(i=>i.isApp)).length}:{appMode:!1}}var Mt=null,Db=0;Yi(()=>{Db++});function E_(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 F_(e){return!Mt||Mt.id!==e.id||!Mt.isCurrent()||Mt.membership!==JSON.stringify(e.reports.toSorted())||!_m(e,Mt.token)?null:(Mt.linksRevision!==Db&&(Mt.metadata=Mt.complete?Bb(Mt.reports,gt):{appMode:!1},Mt.linksRevision=Db),Mt.metadata)}async function L_(e,t,n,{complete:r,isCurrent:o,onReady:s}){if(!o()||(await Xi(),!o()))return;let i=await Qi(e,n);if(!i||!o())return;let a=r?Bb(t,gt):{appMode:!1};await Tm(e,a,i)&&o()&&await s(a)}var Rr=null;function Pb(e){let{serverMode:t,session:n,sessionPending:r=!1,teamsPending:o=!1,teams:s=[],alternateMode:i="local",onSwitchMode:a}=e,l=document.querySelector("#drop-zone"),p=l?.querySelector(".managed-landing");if(!p)return;let d=t==="managed",f=t==="local",m=d&&(n?n.role!=="none"&&o:r);m?Rr?Rr.options=e:Rr={options:e,elapsed:!1,timer:setTimeout(()=>{Rr.elapsed=!0,Pb(Rr.options)},1e3)}:(clearTimeout(Rr?.timer),Rr=null);let h=m&&!Rr.elapsed;l.dataset.serverMode=d?"managed":"local",l.setAttribute("aria-label",d?h?n?"Loading teams":"Loading session":n?.role==="none"?"No workspace access":n?"Team findings":"Log in":"Drop reports here");let b=l.querySelector(".drop-local-copy");if(b&&(b.textContent=f?"Review locally in your browser.":"Review locally in your browser. Sync across devices when you need it."),!d||h){J(g,p);return}let y=n?.role==="admin"||n?.role==="manage",w=s.filter(v=>v.reports.length>0||v.bundles?.length>0);if(vn()&&!n){J(u`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,p);return}J(n==null?u`<section class="managed-login"><button type="button" class="managed-login-button" data-managed-login><svg viewBox="0 0 16 16" width="20" height="20" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> <span>Continue with GitHub</span></button><div class="managed-login-alternative"><span>or continue to</span> <button type="button" @click="${a}">${i} mode</button></div></section>`:n.role==="none"?u`<section class="managed-login" aria-labelledby="managed-no-access-title"><h1 id="managed-no-access-title">No workspace access</h1><p>Ask an administrator to grant access to this workspace.</p></section>`:u`<div class="managed-landing-hero"><p class="drop-eyebrow">Your security workspace</p><h1>Your team's findings, in focus.</h1><p class="drop-prompt-intro">${w.length>0?"Review the security findings shared with your account and turn them into clear next steps.":"Reports shared with your teams will appear here."}</p></div>${w.length>0?u`<nav class="managed-team-list" aria-label="Teams">${Z(w,v=>v.id,v=>u`<button type="button" class="managed-team-button" data-managed-team="${v.id}"><span class="managed-team-icon" aria-hidden="true">${W(No)}</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",Lo],["manage-scans","Scans",Vn],["manage-reports","Reports",ww]]:[],["npm","npm packages",Oo]].map(([v,x,k])=>u`<button type="button" class="managed-content-card" data-managed-page="${v}"><span class="managed-content-icon" aria-hidden="true">${W(k)}</span> <span>${x}</span></button>`)}</nav>${y?u`<div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${W(il)}</span><span>Manage</span></button></div>`:g}`,p)}var O_=`.dlg-tabs{display:flex;gap:.1rem;margin:0 0 .55rem;border-bottom:1px solid var(--border)}.dlg-tab{display:inline-flex;align-items:center;gap:.35rem;background:transparent;border:none;color:var(--muted);padding:.1rem .6rem .4rem;font:inherit;font-size:.85rem;font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s,border-color .12s;&:first-child{padding-left:0}&:hover:not(:disabled){color:var(--text)}&[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}&:disabled{opacity:.5}& svg{display:block}}
|
|
176
|
-
`;var _B=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],zb=class extends N{static styles=[...N.styles,D(rn),D(
|
|
176
|
+
\u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function k_(){Tb()}function x_(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 vu();return}if(!Yo()){await $u();return}await kB()}finally{t=!1}}}),kt(Tb),Tb()}var S_=`.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}
|
|
177
|
+
`;function Ib(){let e=navigator.userAgent;return/AppleWebKit/u.test(e)&&!/Chrome\/|Chromium|Edg\/|OPR\/|Android/u.test(e)?"webkit":/Firefox\//u.test(e)?"firefox":"chromium"}var Mb=class extends N{static styles=[...N.styles,D(S_)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await cs()){this._finish("granted");return}this._retryDenied=!0};_chromiumBody(){let t=location.hostname==="localhost"?u`Plain <code>localhost</code> can never qualify — for local testing open the app via <code>127.0.0.1</code> instead.`:g;return u`<p class="nwd-intro">Chromium-based browsers (Chrome, Edge, Brave, …) never show a prompt — persistence is granted silently, and only to sites the browser considers important. Any of these qualifies it:</p><ul class="spd-list"><li><strong>Install the app</strong> — the install icon at the right end of the address bar, or the browser menu's Install entry.</li><li><strong>Bookmark</strong> this page.</li><li>Keep using the site — regular visits raise its engagement score.</li></ul><p class="nwd-note ui-hint">The browser re-evaluates on every request, so after any of the above press <strong>Try again</strong>.${t}</p>`}_firefoxBody(){return u`<p class="nwd-intro">Firefox asks with a permission prompt. A dismissed or blocked prompt is remembered, and the site can't re-ask until the old answer is cleared:</p><ol class="spd-list"><li>Click the permissions icon next to the address bar.</li><li>Clear the <strong>Store Data in Persistent Storage</strong> entry if it's blocked.</li><li>Press <strong>Try again</strong> below and choose <strong>Allow</strong>.</li></ol>`}_webkitBody(){return u`<p class="nwd-intro">Safari — and every iOS browser — additionally deletes a site's storage after <strong>7 days</strong> of browser use without interacting with the site, and no permission exempts a normal tab. Installing the app is what does:</p><ul class="spd-list"><li>On iPhone / iPad: open the <strong>Share</strong> menu, choose <strong>Add to Home Screen</strong>, and use the app from that icon.</li><li>In Safari on macOS: choose <strong>File → Add to Dock…</strong> and use the app from the Dock.</li><li>Installed web apps are exempt from the 7-day cleanup. Otherwise, use the site at least once a week.</li></ul>`}render(){let t=Ib(),n=t==="webkit"?this._webkitBody():t==="firefox"?this._firefoxBody():this._chromiumBody();return u`<dialog @close="${this._onClose}"><header><h3>Protect stored data</h3></header><p class="nwd-intro">Reports, bundles and triage live in the browser's <strong>best-effort storage</strong> — the browser is allowed to delete all of it at once under disk pressure or after long inactivity, without asking. The persistent-storage request that would prevent this was just declined.</p>${n}<footer class="nwd-actions">${this._retryDenied?u`<span class="spd-denied" role="status">Still not granted.</span>`:g} <span class="nwd-spacer"></span> ${t==="webkit"?g:u`<button type="button" @click="${this._onRetry}">Try again</button>`} <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("storage-persist-dialog",Mb);function C_(){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,Fb=!1,ku=!1,Ab=0;function Eb(){return Ib()==="webkit"}function __(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 R_(){if(!un)return;if(_()||!dn||dn.persisted!==!1||!Fb){un.hidden=!0;return}un.hidden=!1;let e=dn.usage===null||dn.quota===null?"":` Using ${__(dn.usage)} of ${__(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. "+(Eb()?"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 M_(e,t){let n=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!Eb()&&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 `+(Eb()?"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 xu(){if(await Tt(),!un||_()){R_();return}let[e,t]=await Promise.all([om(),(async()=>{try{return(await ce()).length>0||await Vp()}catch{return!1}})()]);dn=e,Fb=t,R_()}function Lb(){!un||Ab||(Ab=setTimeout(()=>{Ab=0,xu()},1e3))}async function T_(){if(ku||(await xu(),_()||dn?.persisted!==!1||!Fb||ku))return;ku=!0;let e=await cs();M_(e,!1),await xu()}async function SB(){if(dn&&dn.persisted===!1){ku=!0;let e=await cs();M_(e,!0),e||await C_()}await xu()}function I_(e){un=e,un&&(un.addEventListener("click",()=>{SB()}),mt((t,n)=>{Lb(),n==="save"&&T_()}),T_())}function Ob(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(No)} <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 Nb(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(n=>Be(n)==="revalidation");return t.length>0?t:e}function Bb(e,t=()=>[]){let{groups:n,conflicts:r}=od(e,{hideRuledOut:!0});if(r.size>0)return{appMode:!1};let o=sd(n,t,Nb);return Pl(o,{tabs:Nb,kindOf:Be,severityMode:"corrected"})?{appMode:!0,appFindings:o.filter(s=>Nb(s).some(i=>i.isApp)).length}:{appMode:!1}}var Mt=null,Db=0;Yi(()=>{Db++});function A_(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 E_(e){return!Mt||Mt.id!==e.id||!Mt.isCurrent()||Mt.membership!==JSON.stringify(e.reports.toSorted())||!_m(e,Mt.token)?null:(Mt.linksRevision!==Db&&(Mt.metadata=Mt.complete?Bb(Mt.reports,gt):{appMode:!1},Mt.linksRevision=Db),Mt.metadata)}async function F_(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?Bb(t,gt):{appMode:!1};await Tm(e,a,i)&&o()&&await s(a)}var Rr=null;function Pb(e){let{serverMode:t,session:n,sessionPending:r=!1,teamsPending:o=!1,teams:s=[],alternateMode:i="local",onSwitchMode:a}=e,l=document.querySelector("#drop-zone"),p=l?.querySelector(".managed-landing");if(!p)return;let d=t==="managed",f=t==="local",m=d&&(n?n.role!=="none"&&o:r);m?Rr?Rr.options=e:Rr={options:e,elapsed:!1,timer:setTimeout(()=>{Rr.elapsed=!0,Pb(Rr.options)},1e3)}:(clearTimeout(Rr?.timer),Rr=null);let h=m&&!Rr.elapsed;l.dataset.serverMode=d?"managed":"local",l.setAttribute("aria-label",d?h?n?"Loading teams":"Loading session":n?.role==="none"?"No workspace access":n?"Team findings":"Log in":"Drop reports here");let b=l.querySelector(".drop-local-copy");if(b&&(b.textContent=f?"Review locally in your browser.":"Review locally in your browser. Sync across devices when you need it."),!d||h){J(g,p);return}let y=n?.role==="admin"||n?.role==="manage",w=s.filter(v=>v.reports.length>0||v.bundles?.length>0);if(vn()&&!n){J(u`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,p);return}J(n==null?u`<section class="managed-login"><button type="button" class="managed-login-button" data-managed-login><svg viewBox="0 0 16 16" width="20" height="20" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> <span>Continue with GitHub</span></button><div class="managed-login-alternative"><span>or continue to</span> <button type="button" @click="${a}">${i} mode</button></div></section>`:n.role==="none"?u`<section class="managed-login" aria-labelledby="managed-no-access-title"><h1 id="managed-no-access-title">No workspace access</h1><p>Ask an administrator to grant access to this workspace.</p></section>`:u`<div class="managed-landing-hero"><p class="drop-eyebrow">Your security workspace</p><h1>Your team's findings, in focus.</h1><p class="drop-prompt-intro">${w.length>0?"Review the security findings shared with your account and turn them into clear next steps.":"Reports shared with your teams will appear here."}</p></div>${w.length>0?u`<nav class="managed-team-list" aria-label="Teams">${Z(w,v=>v.id,v=>u`<button type="button" class="managed-team-button" data-managed-team="${v.id}"><span class="managed-team-icon" aria-hidden="true">${W(No)}</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",Lo],["manage-scans","Scans",Vn],["manage-reports","Reports",ww]]:[],["npm","npm packages",Oo]].map(([v,x,k])=>u`<button type="button" class="managed-content-card" data-managed-page="${v}"><span class="managed-content-icon" aria-hidden="true">${W(k)}</span> <span>${x}</span></button>`)}</nav>${y?u`<div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${W(il)}</span><span>Manage</span></button></div>`:g}`,p)}var L_=`.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}}
|
|
178
|
+
`;var _B=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],zb=class extends N{static styles=[...N.styles,D(rn),D(L_)];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 mm(this.workspace):await fm(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;pv(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 Qk({tabs:_B,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",zb);function O_({workspace:e}={}){return El("workspace-export-dialog",{workspace:e??null},t=>{t.workspace=null})}async function N_(e){await O_({workspace:e})}var D_="deepview.passkey.firstImportPrompted";function RB(){try{return localStorage.getItem(D_)==="1"}catch{return!1}}function B_(){try{localStorage.setItem(D_,"1")}catch{}}async function Su(){if(ft()||!tr()||RB())return;if(!confirm(`Encrypt your DeepView data with a passkey?
|
|
177
179
|
|
|
178
180
|
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.
|
|
179
181
|
|
|
180
|
-
You can change this anytime from the lock icon in the sidebar header.`)){D_();return}await vu(),ft()&&D_()}var Wb=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",Wb);function z_(){return re("new-workspace-dialog")}var Hb=class extends N{static styles=[...N.styles,D(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",Hb);function W_({name:e,reportCount:t,bundleCount:n,triageImpact:r}={}){return re("leave-workspace-dialog",{workspaceName:e??"",reportCount:t??0,bundleCount:n??0,orphanedTriage:r?.orphanedCount??0,sharedTriage:r?.sharedCount??0})}var Ub=class extends N{static styles=[...N.styles,D(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 bm({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=ym(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",Ub);function H_({id:e,name:t,privateKeyBase64:n}={}){return new Promise((r,o)=>{let s=document.createElement("workspace-share-link-dialog");s.workspaceId=e??"",s.initialName=t??"",s.privateKeyBase64=n??"",s.addEventListener("resolve",()=>{s.remove(),r()}),s.addEventListener("modal-conflict",i=>{s.privateKeyBase64="",s.remove(),o(Al(i.detail?.cause))}),document.body.append(s)})}var Vb=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",Vb);function U_({name:e,kindLabel:t,triageImpact:n,inRemote:r}={}){return re("delete-report-dialog",{reportName:e??"",kindLabel:t||"report",orphanedTriage:n?.orphanedCount??0,sharedTriage:n?.sharedCount??0,inRemote:!!r})}var jb=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",jb);function V_({name:e,inRemote:t}={}){return re("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var Gb=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",Gb);function j_({name:e,workspaceName:t}={}){return re("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var Kb=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",Kb);function G_({name:e,workspaceName:t}={}){return re("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var qb=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",qb);function K_(){return new Promise(e=>{let t=document.createElement("persistence-degraded-dialog");t.exclusive=!0;let n=r=>{t.remove(),e({shown:r})};t.addEventListener("resolve",()=>n(!0)),t.addEventListener("modal-conflict",()=>n(!1)),document.body.append(t)})}var Yb=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",Yb);function q_(){return new Promise(e=>{let t=document.createElement("proxy-auth-dialog");t.exclusive=!0;let n=(r,o)=>{t.remove(),e({shown:r,reload:o})};t.addEventListener("resolve",r=>n(!0,r.detail==="reload")),t.addEventListener("modal-conflict",()=>n(!1,!1)),document.body.append(t)})}var Ar=null,B=null,ty=null;function Cu(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}hv();function TB(){return Zt().size}function MB(){return no().size}var Pa=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,dy="application/x-deepview-report",ny="application/x-deepview-source-ws",za="application/x-deepview-bundle",_u=!1,Ru=!1,IB={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[ke]:"Links"},Y_=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",ke],Tr="",Ut=!1,Wa=new Map,X_="",Ha=new wu;function AB(e,t){let n=c.currentView==="bundles"?c.selectedBundle:null,r=["findings","files","links"].includes(c.currentView)?c.currentFile:null,o=n?"bundles":"reports",s=r?Ss(r):null,i=e.filter(l=>n?l.bundles.includes(n):l.id===s),a=JSON.stringify([o,n||r,i.map(l=>l.id)]);if(!(!t&&a===X_)){X_=a;for(let l of i){let p=Wa.get(l.id)??new Set;p.add(o),Wa.set(l.id,p)}}}function J_(e,t={}){let r=`file-item${cR(e,t.workspaceId??null)?" current":""}${t.indented?" indented":""}`,o=oe(e),s=Ni(e),i=ye[Ae(e)]??ye.default;return u`<li class="${r}" data-file="${e}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${o}">${W(i)}<span class="file-label">${o}</span>${s===void 0?g:u`<span class="file-count">${s}</span>`}</button></li>`}function cR(e,t){return e===c.currentFile&&t===Ss(e)&&(c.currentView==="findings"||c.currentView==="files"||c.currentView==="links")}function dR(e,t={}){let n=`file-group-header${t.dropTarget?" default-reports":""}`;return u`<li class="${n}" data-default-reports="${t.dropTarget?"true":g}"><span class="group-label">${e}</span></li>`}var EB=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>`,FB=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 LB(){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">${EB}</button></span></li>`}function OB(){let e=m_(c.managedTeams,Tr);return e.length===0?g:u`${dR("Teams")} ${Z(e,({team:t})=>t.id,({team:t,reports:n,bundles:r})=>{let o=t.app,s=o?.appMode===!0,i=Ha.shown(t.id,"reports",s,Ut),a=Ha.shown(t.id,"bundles",s,Ut),l=n.filter(p=>p.analyzer!==ke).length;return u`<li class="${`file-item team-item${pR(t)?" current":""}`}" data-team-id="${t.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{Ir(t)}}">${yR}<span class="file-label">${t.name}</span></button> ${c.managed?.allowShare&&["admin","manage"].includes(c.managedSession?.role)?u`<button type="button" class="workspace-share" aria-label="${`Share ${t.name} publicly`}" @click="${()=>{zk(t)}}">${wR}</button>`:g}</div>${s?u`<div class="workspace-meta"><span class="workspace-findings">${o.appFindings.toLocaleString()} finding${o.appFindings===1?"":"s"}</span> <span class="workspace-sections" role="group" aria-label="Team files"><button type="button" data-team-section="reports" aria-expanded="${String(i)}" ?disabled="${Ut}">${l.toLocaleString()} report${l===1?"":"s"}</button> ${r.length>0?u`<button type="button" data-team-section="bundles" aria-expanded="${String(a)}" ?disabled="${Ut}">${r.length.toLocaleString()} bundle${r.length===1?"":"s"}</button>`:g}</span></div>`:g}</li>${i?Z(n,p=>p.id,p=>DB(t,p)):g} ${a?Z(r,p=>p.id,p=>zB(t,p)):g}`})}`}function uR(e,t,n,r){return u`<li><button type="button" class="${n?"rail-item current":"rail-item"}" aria-label="${e}" aria-current="${n?"true":g}" data-tooltip="${e}" @click="${r}">${t}<span aria-hidden="true">${g_(e)}</span></button></li>`}function NB(){return Z(c.managedTeams??[],e=>e.id,e=>uR(e.name,yR,pR(e)||(e.reports??[]).some(t=>fR(e,t))||(e.bundles??[]).some(t=>mR(e,t)),()=>{Ir(e)}))}function BB(e){return Z(e,t=>t.id,t=>uR(t.name,bR,vR(t)||t.reports.some(n=>cR(n,t.id))||t.bundles.some(n=>hR(n,t.id)),()=>xR(t.id)))}function pR(e){return c.currentManagedTeam===e.id&&!!c.currentWorkspace&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function fR(e,t){return c.currentManagedTeam===e.id&&c.currentManagedReport===t.id&&["findings","links"].includes(c.currentView)}function mR(e,t){return c.currentManagedTeam===e.id&&yr(c)===t.id}function DB(e,t){let n=oe(t.filename),r=fR(e,t);return u`<li class="${`file-item indented team-report-item${t.visible===!1?" content-hidden":""}${r?" current":""}`}"><button type="button" class="file-name" aria-label="${t.visible===!1?`${n} (hidden from teams)`:g}" data-tooltip="${n}" data-tooltip-repo="${xb(t)||g}" data-tooltip-placement="right-start" @click="${()=>{PB(e,t)}}">${W(ye[Hm(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function PB(e,t){return Ir(e,t.id)}function zB(e,t){let n=mR(e,t);return u`<li class="${`file-item indented team-bundle-item${t.visible===!1?" content-hidden":""}${n?" current":""}`}"><button type="button" class="file-name" aria-label="${t.visible===!1?`${t.filename} (hidden from teams)`:g}" data-managed-bundle="${t.id}" data-managed-team="${e.id}" data-tooltip="${t.filename}" data-tooltip-repo="${xb(t)||g}" data-tooltip-bundle="${t.kind||g}" data-tooltip-built="${t.provenance==="build"?"true":g}" data-tooltip-stats="${f_(t)||g}" data-tooltip-commit="${t.summary?.commit||g}" data-tooltip-commit-info="${Es(t.commitInfo,t.summary?.commit,t.repoFullName)??g}" data-tooltip-placement="right-start">${gR}<span class="file-label">${t.filename}</span></button></li>`}function WB(){return u`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var gR=u`${W(Lo)}`;function hR(e,t){return c.selectedBundle===e&&c.currentView==="bundles"&&t===c.selectedBundleWorkspace}function Z_(e,t={}){let{integrity:n,name:r}=e,o=hR(n,t.workspaceId??null),i=`file-item bundle-item${t.workspaceId!=null?" indented":""}${o?" current":""}`;return u`<li class="${i}" data-bundle-integrity="${n}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${`${r}
|
|
181
|
-
${n}`}">${gR}<span class="file-label">${r}</span></button></li>`}function HB(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 UB(e,t){return u`<li class="file-item indented report-missing" data-workspace-id="${t}" data-tooltip="Report not on this device — it re-downloads automatically if a workspace member has uploaded it."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${oe(e)}</em></span></span></li>`}var bR=u`${W(No)}`,yR=u`<svg class="team-icon" viewBox="0 0 16 16" width="13" height="13" fill="currentColor" aria-hidden="true"><path d="M5.5 8a2.25 2.25 0 1 0 0-4.5 2.25 2.25 0 0 0 0 4.5Zm0 1C3.2 9 1.75 10.2 1.75 11.6V13h7.5v-1.4C9.25 10.2 7.8 9 5.5 9Zm5.25-1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm.25 1c-.43 0-.83.05-1.2.15.86.62 1.45 1.5 1.45 2.45V13h3.25v-1.3C14.5 10.1 13.15 9 11 9Z"/></svg>`,VB=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>`,jB=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3H4v10h5"/><path d="M7 8h7M11 5l3 3-3 3"/></svg>`,wR=u`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 9.5L9 7.5"/><path d="M9.5 5.5L10.5 4.5a2.1 2.1 0 1 1 3 3l-1 1"/><path d="M6.5 11.5L5.5 12.5a2.1 2.1 0 1 1-3-3l1-1"/></svg>`;function vR(e){return c.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function GB(e,{app:t,compact:n,reports:r,bundles:o,showReports:s,showBundles:i}){let l=`file-item workspace-item${vR(e)?" current":""}`;return u`<li class="${l}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${bR}<span class="file-label" .textContent="${e.name}"></span></button> <button type="button" class="workspace-share" data-action="share-workspace" aria-label="Share workspace by link">${wR}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${VB}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${jB}</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 Xb=(e,t)=>oe(e).localeCompare(oe(t));async function H({revealSelection:e=!1}={}){await Tt();let t=Jt();if(Pb({serverMode:t,session:c.managedSession,teams:c.managedTeams,sessionPending:So,teamsPending:Co,alternateMode:Jn(c.serverModeConfig)?"e2e":"local",onSwitchMode:kR}),Mu(),_()){if(Ha.sync(c,e),!So&&!Co&&!Gs&&!pn&&_r({catalogOnly:!0}),c.bundles=(c.bundles??[]).filter(w=>w.managedId||w.npm),c.storedFiles=[],Ob([]),!B)return;J(u`${OB()}`,ty);let y=B.querySelector("#sidebar-rail");y?.setAttribute("aria-label","Teams"),y&&J(NB(),y),B.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),B.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),B.querySelector("#storage-status")?.setAttribute("hidden",""),fn();return}if(Ha.sync({managedTeams:[]}),B?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),B?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await tm(),t!==Jt()){await H();return}xt().catch(()=>{}),Xi().catch(()=>{});let n=await ce();if(t!==Jt()){await H();return}let r=Y();AB(r,e),Ob(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,Lb(),!B)return;let s=new Set(n),i=new Set;for(let y of r)for(let w of y.reports)s.has(w)&&i.add(w);let a=new Map(o.map(y=>[y.integrity,y])),l=new Set;for(let y of r)for(let w of y.bundles)a.has(w)&&l.add(w);let p=new Map;for(let y of Y_)p.set(y,[]);for(let y of n){if(i.has(y)||!js(y))continue;let w=Ae(y);p.has(w)||p.set(w,[]),p.get(w).push(y)}let d=r.filter(y=>!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`${LB()} ${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(Xb),v.sort(Xb);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 $=F_(y)??lo(y),S=$?.appMode??Rm(y)===!0,C=Wa.get(y.id),R=!S||Ut||C?.has("reports")===!0,L=!S||Ut||C?.has("bundles")===!0,A=[...w,...v].filter(M=>Ie(M)!==ke).length,E=x.length+k.length;return u`${GB(y,{app:$,compact:S,reports:A,bundles:E,showReports:R,showBundles:L})} ${R?u`${w.map(M=>J_(M,{indented:!0,workspaceId:y.id}))}${v.map(M=>UB(M,y.id))}`:g} ${L?u`${x.map(M=>Z_(M,{workspaceId:y.id}))}${k.map(M=>HB(M,y.id))}`:g}`})} ${Y_.map(y=>{let w=(p.get(y)??[]).toSorted(Xb),v=y==="default";return w.length===0&&!(v&&_u)?null:u`${dR(IB[y]??y,{dropTarget:v})} ${w.map(x=>J_(x))}`})} ${f.length>0||Ru?WB():null} ${Z(f,y=>y.integrity,y=>Z_(y))}`,ty);let m=B.querySelector("#sidebar-rail");m?.setAttribute("aria-label","Workspaces"),m&&J(BB(r),m);let h=B.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=TB());let b=B.querySelector('sidebar-view-button[kind="repositories"]');b&&(b.count=MB()),fn(),Cf(n,$R)}var Jb=!1;function $R(){Jb||(Jb=!0,requestAnimationFrame(()=>{Jb=!1,H().catch(e=>console.warn("counts repaint:",e))}))}kt(()=>{H()});Mm($R);async function kR(){B?.querySelector("#user-menu")?.hidePopover?.(),It?await s2():af()&&await Au()}function xR(e){let t=c.currentView==="findings"||c.currentView==="files";(e!==c.currentWorkspace||!t)&&Ks(e)}async function Q_(e){let t=e.target.closest("[data-team-section]");if(t){if(Ut||t.disabled)return;let f=t.closest("[data-team-id]")?.dataset.teamId;f&&Ha.toggle(f,t.dataset.teamSection),await H();return}let n=e.target.closest("[data-workspace-section]");if(n){if(Ut||n.disabled)return;let f=n.closest("[data-workspace-id]")?.dataset.workspaceId;if(!f)return;let m=n.dataset.workspaceSection,h=Wa.get(f)??new Set;h.has(m)?h.delete(m):h.add(m),Wa.set(f,h),await H();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await kR();return}if(e.target.closest('[data-action="go-home"]')){await At();return}let r=e.target.closest("[data-managed-bundle]");if(r){te.navigate(Xe({view:"bundles",teamId:r.dataset.managedTeam,bundleId:r.dataset.managedBundle,bundleTab:c.currentView==="bundles"?c.bundleDetailsTab:"overview"},c.managedTeams));return}let o=e.target.closest(".file-item[data-bundle-integrity]");if(o){if(o.classList.contains("bundle-missing"))return;let f=o.dataset.bundleIntegrity,m=o.dataset.workspaceId??null;if(c.selectedBundle===f&&c.currentView==="bundles"&&c.selectedBundleWorkspace===m)return;gr(f,void 0,{workspaceId:m}),ly(f,c.bundleDetailsTab),O(),H(),gd(f);return}let s=e.target.closest("sidebar-view-button");if(s){let f=s.getAttribute("kind");(f==="packages"||f==="repositories")&&(c.currentView=f,O(),H());return}if(e.target.closest('[data-action="new-workspace"]')){if(_())return;let f=await z_();f&&(await Su(),await Lf(f),H());return}let i=e.target.closest('[data-action="share-workspace"]');if(i){let f=i.closest("[data-workspace-id]"),m=f?Y().find(h=>h.id===f.dataset.workspaceId):null;m&&H_({id:m.id,name:m.name,privateKeyBase64:m.privateKey}).catch(h=>alert(`Failed to open share dialog: ${h.message}`));return}let a=e.target.closest('[data-action="export-workspace"]');if(a){let f=a.closest("[data-workspace-id]"),m=f?Y().find(h=>h.id===f.dataset.workspaceId):null;m&&B_(m).catch(h=>alert(`Failed to open export dialog: ${h.message}`));return}let l=e.target.closest('[data-action="leave-workspace"]');if(l){let f=l.closest("[data-workspace-id]"),m=f?Y().find(x=>x.id===f.dataset.workspaceId):null;if(!m)return;let h=Array.isArray(m.reports)?m.reports:[],b;try{b=await _c(h)}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let{confirmed:y,mode:w,triage:v}=await W_({name:m.name,reportCount:h.length,bundleCount:m.bundles.length,triageImpact:b});if(!y)return;if(!Y().some(x=>x.id===m.id)){alert(`Workspace "${m.name}" was removed elsewhere; nothing to leave.`);return}try{await lR(m.id,w,{triage:v})}catch(x){alert(`Failed to leave workspace: ${x.message}`)}return}let p=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(p){let f=p.dataset.workspaceId;f&&xR(f);return}let d=e.target.closest(".file-item[data-file]");if(d){let f=d.dataset.file,m=c.currentView==="findings"||c.currentView==="links",h=d.dataset.workspaceId??null;f&&(f!==c.currentFile||h!==c.currentReportWorkspace||!m)&&Ua(f,void 0,{workspaceId:h});return}if(e.target.closest("sidebar-delete-current")){if(c.currentView==="bundles"&&c.selectedBundle){let x=c.selectedBundle,k=(c.bundles??[]).find(C=>C.integrity===x)?.name??x,$=Y().filter(C=>Array.isArray(C.bundles)&&C.bundles.includes(x)).filter(C=>Ym(C.id,x)).map(C=>C.id),{confirmed:S}=await V_({name:k,inRemote:$.length>0});if(!S)return;if(c.selectedBundle!==x){alert(`Active bundle changed during confirmation; aborting delete of "${k}".`);return}try{await aR({deleteFromRemoteWorkspaceIds:$})}catch(C){alert(`Failed to delete bundle: ${C.message}`)}return}if(!c.currentFile)return;let f=c.currentFile,m;try{m=await _c([f])}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let h=Y().filter(x=>Array.isArray(x.reports)&&x.reports.includes(f)).filter(x=>gs(x.id,f)).map(x=>x.id),b=h.length>0,y=zc(f)?"links file":"report",{confirmed:w,triage:v}=await U_({name:f,kindLabel:y,triageImpact:m,inRemote:b});if(!w)return;if(c.currentFile!==f){alert(`Active file changed during confirmation; aborting delete of "${f}".`);return}try{await sR({triage:v,deleteFromRemoteWorkspaceIds:h})}catch(x){alert(`Failed to delete ${y}: ${x.message}`)}return}if(e.target.closest("#sync-status")){G.status==="error"?G.dismissError():G.status==="off"?(!G.getServerUrl()&&Pa&&G.setServerUrl(Pa),G.setEnabled(!0)):G.setEnabled(!1);return}if(e.target.closest('[data-action="manage"]')){B?.querySelector("#user-menu")?.hidePopover?.(),Ro("manage");return}if(e.target.closest('[data-action="view-as-stop"]')){B?.querySelector("#user-menu")?.hidePopover?.(),qk(c.managedSession?.csrfToken);return}if(e.target.closest('[data-action="my-reviews"]')){B?.querySelector("#user-menu")?.hidePopover?.(),te.navigate({view:"reviews"});return}if(e.target.closest('[data-action="managed-logout"]')){Kk(c.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){Ar.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",Ar.classList.contains("collapsed")?"1":"0")}catch{}}}var KB={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 qB(e){Ut=e.target.value.length>0,Tr=e.target.value.trim().toLowerCase(),H()}var YB={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};function SR(){return G.getServerUrl()||Pa?Y().length>0:!1}function CR(){let e=B?.querySelector("#auth-status");if(!e)return;let t=B?.querySelector("#manage-status"),n=B?.querySelector("#user-menu"),r=c.managedSession;Ar?.toggleAttribute("data-authenticated",r!=null),Ar?.toggleAttribute("data-workspace-access",r!=null&&r.role!=="none"),XB(r);let o=B?.querySelector("#public-status");if(o&&(o.hidden=!r?.publicShare),e.hidden=r==null||r.publicShare===!0,r==null){t&&(t.hidden=!0),e.dataset.authed="0",e.removeAttribute("popovertarget"),e.removeAttribute("aria-label"),J(g,e),n&&J(g,n);return}if(r.publicShare){t&&(t.hidden=!0),e.removeAttribute("popovertarget"),n&&J(g,n);return}let s=(r.login[0]??"?").toUpperCase(),i=typeof r.name=="string"&&/\s/u.test(r.name.trim())?r.name.trim():`@${r.login}`;if(e.dataset.authed="1",e.setAttribute("popovertarget","user-menu"),e.setAttribute("aria-label",`Account: ${r.login}`),J(u`${eR(s,r.id)}<span class="auth-login">${i}</span>`,e),t){let a=_()&&(r.role==="admin"||r.role==="manage");t.hidden=!a}n&&J(u`<div class="user-card">${eR(s,r.id,!0)} <span class="user-id"><span class="user-login">${r.login}</span> ${r.name?u`<span class="user-name">${r.name}</span>`:g}</span></div>${r.viewer?u`<button type="button" class="user-menu-row" data-action="view-as-stop">Return to @${r.viewer.login}</button>`:g} ${r.role==="none"?g:u`<button type="button" class="user-menu-row" data-action="my-reviews">My reviews</button>`} <button type="button" class="user-menu-row" data-action="toggle-client-mode">${Jn(c.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${FB}<span>Log out</span></button>`,n)}function XB(e){let t=B?.querySelector("#view-as-status");t&&(t.hidden=!e?.viewer,Ar?.toggleAttribute("data-view-as",e?.viewer!=null),J(e?.viewer?u`<span class="view-as-label"><span>Viewing as <strong>@${e.login}</strong></span> <span class="view-as-note">Read only · changes are not saved</span></span> <button type="button" class="view-as-stop" data-action="view-as-stop" aria-label="${`Stop viewing as ${e.login}`}">Stop</button>`:g,t))}document.addEventListener("managed-view-only",()=>{let e=c.managedSession;e?.viewer&&Ge(`Viewing as @${e.login} is read only: changes are not saved.`,{kind:"error"})});function eR(e,t,n=!1){let r=`/api/avatar/${encodeURIComponent(t)}`;return u`<span class="${n?"user-avatar user-avatar-lg":"user-avatar"}"><span class="user-avatar-fallback">${e}</span> ${Dm()||c.managedSession?.role==="none"?g:u`<img alt="" src="${r}" @error="${JB}">`}</span>`}function JB(e){e.currentTarget.classList.add("broken")}function _R(){let e=B?.querySelector(".brand-tag");if(e){let t=c.serverMode==="managed"||Jn(c.serverModeConfig);e.textContent=Jt(),t?(e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Switch from ${Jt()} mode`)):(e.removeAttribute("role"),e.removeAttribute("tabindex"),e.removeAttribute("aria-label"))}}function ZB(){Ar&&(Ar.dataset.mode=Jt()),_()?(B?.querySelector("sidebar-delete-current")?.setAttribute("hidden",""),B?.querySelector("#encryption-toggle")?.setAttribute("hidden",""),B?.querySelector("#auth-status")?.removeAttribute("hidden")):(B?.querySelector("sidebar-delete-current")?.removeAttribute("hidden"),B?.querySelector("#encryption-toggle")?.removeAttribute("hidden"),B?.querySelector("#manage-status")?.setAttribute("hidden",""),B?.querySelector("#auth-status")?.setAttribute("hidden",""),B?.querySelector("#public-status")?.setAttribute("hidden",""),B?.querySelector("#view-as-status")?.setAttribute("hidden","")),x_()}function fn(e){let t=B?.querySelector("#sync-status");if(!t)return;if(_R(),ZB(),c.serverMode==="managed"&&c.localMode){t.hidden=!0,G.setForcedOff(!0);let d=B?.querySelector("#auth-status");d&&(d.hidden=!0),B?.querySelector("#public-status")?.setAttribute("hidden","");return}if(_()){t.hidden=!0,G.setForcedOff(!0),CR();return}if(c.serverMode==="standalone"){t.hidden=!0;let d=B?.querySelector("#auth-status");d&&(d.hidden=!0);return}let n=B?.querySelector("#auth-status");n&&(n.hidden=!0);let r=SR(),o=pt()!=null;if(r&&o&&G.isEnabled()&&ra().catch(d=>{console.warn("sync: load failed",d)}),r&&o&&!G.getServerUrl()&&Pa&&G.isEnabled()&&G.setServerUrl(Pa),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=YB[s]??"")}G.onStatusChange(fn);var Zb=!1,ry=!1;async function RR(){if(!G.persistenceDegraded||ry||Zb)return;Zb=!0;let{shown:e}=await K_();if(Zb=!1,e){ry=!0;return}G.persistenceDegraded&&setTimeout(RR,1500)}G.onPersistenceDegraded(e=>{fn(),e?RR():ry=!1});var Qb=!1,oy=!1;async function TR(){if(!G.proxyAuthRequired||oy||Qb)return;Qb=!0;let{shown:e,reload:t}=await q_();if(Qb=!1,!e){G.proxyAuthRequired&&setTimeout(TR,1500);return}oy=!0,t&&location.reload()}G.onProxyAuthRequired(e=>{fn(),e?TR():oy=!1});function QB(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 Nf(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 Iu(){for(let e of B.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function MR(e){return e.dataTransfer.types.includes(dy)||e.dataTransfer.types.includes(za)}function e2(e){let t=e.target.closest(".file-item[data-bundle-integrity]");if(t){if(t.classList.contains("bundle-missing")){e.preventDefault();return}let r=t.dataset.bundleIntegrity;e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(za,r),e.dataTransfer.setData(ny,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r),t.classList.add("dragging"),Ru=!0,H();return}let n=e.target.closest(".file-item[data-file]");n&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(dy,n.dataset.file),e.dataTransfer.setData(ny,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),_u=!0,H())}function t2(){for(let e of B.querySelectorAll(".dragging"))e.classList.remove("dragging");Iu(),(_u||Ru)&&(_u=!1,Ru=!1,H())}function n2(e){if(!MR(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",Iu(),!s)if(t){let i=t.dataset.workspaceId;for(let a of B.querySelectorAll(`[data-workspace-id="${CSS.escape(i)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(za)?"[data-default-bundles]":"[data-default-reports]",l=B.querySelector(a);l&&l.classList.add("drag-over")}}function r2(e){B.contains(e.relatedTarget)||Iu()}async function o2(e){if(!MR(e))return;e.preventDefault(),e.stopPropagation(),Iu();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(ny)||null;if(e.dataTransfer.types.includes(za)){let i=e.dataTransfer.getData(za);if(!i)return;if(r&&r!==n&&Ym(r,i)){let a=(c.bundles??[]).find(d=>d.integrity===i)?.name??i,l=Y().find(d=>d.id===r),{confirmed:p}=await j_({name:a,workspaceName:l?.name??""});if(!p)return;try{await Qc(r,i)}catch(d){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,d)}}n&&await io(i,n),r&&r!==n&&await zf(i,r),H();return}let o=e.dataTransfer.getData(dy);if(!o)return;if(r&&r!==n&&gs(r,o)){let i=Y().find(l=>l.id===r),{confirmed:a}=await G_({name:o,workspaceName:i?.name??""});if(!a)return;try{await Zc(r,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,l)}}n&&await 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,sy=null,Se=0,tR=0,Gs=null,So=!0,Co=!0,pn=!1,Da=null;async function Au({forgetLastView:e=!0,resetNavigation:t=!0}={}){te.reset({force:t}),Da?.remove(),Da=null;let n=++Se;if(Co=!0,pn=!1,vk(),Nm(),$o(),Tu(),Xc(c.serverMode!=="e2e"),G.setForcedOff(!0),G.setProtocolLocked(c.serverMode!=="e2e"||!!It),iR({forgetLastView:e}),c.triage.clear(),_()){let r=_o();if(Dm()&&(await r,n!==Se))return}else{if(c.managedSession=null,c.managedTeams=[],await Ci(),n!==Se||(await Ji(),n!==Se))return;Ef()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),Mu(),_R(),fn(G.status),O(),await H()}async function oX(e){if(e!==void 0&&!Pw(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 P();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 Au({forgetLastView:!1}))}async function s2(){let e=It,t=sy;It=null,sy=null,wk(),Object.assign(c,e),await Au({forgetLastView:!1}),t&&ko(t)}function ko(e,{runtime:t=!0}={}){if(It){sy=e;return}Cu(!1);let n=pt()!=null,r=_(),o=c.serverMode;vn()&&e.managed&&(c.serverModeSelection="managed"),ic(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),Mu(),Xc(c.serverMode!=="e2e"),G.setProtocolLocked(c.serverMode!=="e2e"),Sp(e),r!==_()){Au({forgetLastView:!1,resetNavigation:n&&!vn()&&!Ko(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}fn(G.status),s&&c.serverMode==="e2e"&&SR()&&G.isEnabled()&&ra().then(a=>{if(!(!a||c.serverMode!=="e2e"))for(let l of a.triageSync.openSessions)a.openWorkspace(l.workspaceId)}).catch(a=>console.warn("sync: resume failed",a)),s&&H(),i&&O({animate:!1}),_()&&_o()}function _o(){if(Gs?.generation===Se)return Gs.promise;So=!0;let e={generation:Se,promise:null};return Gs=e,e.promise=i2().finally(()=>{Gs===e&&(Gs=null,H())}),e.promise}async function i2(){let e=Se,t=++tR,n=()=>e===Se&&t===tR&&_();try{let r=c.managedSession,o=await Ck({fallback:r});if(!n()||(c.managedSession=o,So=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&(Co=!0),H(),$k(o),r&&(r.id!==o?.id||r.role!==o?.role)?(c.managedTeams=[],c.bundles=[],$o(),Tu(),te.reset(),At({history:!1})):Object.hasOwn(di,c.currentView)&&Mr(c.currentView)&&O({animate:!1}),CR(),nR(),!await Eu(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(d2,{onCancel:c2})}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(So||Co)&&(So=!1,Co=!1,H())}}y_((e,t,n)=>Eu(e,{strict:!0,signal:t,revision:n}));var a2=p_(_k),ey=0;async function Eu(e,{strict:t=!1,signal:n=Le(),reuse:r=!1,revision:o=null}={}){let s=Se,i=c.managedSession,a=await a2({generation:s,session:i,signal:n,reuse:r,revision:o}),l=a??(t?null:c.managedTeams);if(n.aborted||l===null||!e()||s!==Se||!_())return!1;let p=c.managedTeams.find(h=>h.id===c.currentManagedTeam)?.name,d=kk(l);c.managedTeams=l;let f=a===null?ey:++ey;Co=!1;let m=yr(c);if(a!==null&&m&&!pn){let h=me(),b=()=>e()&&!n.aborted&&!pn&&f===ey&&h===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&_()&&yr(c)===m,y;try{y=await d_(c,l,{fetchCatalog:()=>Pm({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){xo=null;let w=At({history:!1}),v=me();return await w,v===me()&&s===Se&&e()&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&te.replaceRoute({view:"home"}),e()}}if(c_(c,l,d)){let h=l.find(x=>x.id===c.currentManagedTeam),y=h&&(c.currentManagedReport===null||h.reports.some(x=>x.id===c.currentManagedReport))?Xe({view:c.currentView==="links"?"findings":c.currentView,teamId:h.id,reportId:c.currentManagedReport},l):null;xo=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 cy(n))}var l2=new Set(["admin-users","manage-repos","manage-repo-risk","manage-teams","manage-import","manage-deduplication"]),xo=null;function Mr(e){let t=c.managedSession?.role;return e==="manage-links"&&!c.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!l2.has(e)||t==="admin")}var iy=0;function c2(){++iy,pn=!1,Oe();let e=Se;Eu(()=>e===Se&&_(),{reuse:!0})}async function d2(e,t){let n=++iy;pn=!0;try{return await u2(e,t)}finally{n===iy&&(pn=!1,H())}}async function u2(e,t){let n=xo===me()?xo:null;if(Oe(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&!await Eu(t,{reuse:!0}))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!Mr("manage-bundles")||(r=await Pm(),!t()||!_()))||(e=Nw(e,c.managedTeams,r),!e))return!1;let o=n!==null&&xo===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-7ZKDKGAH.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?(xo=me(),_r(),Xe({view:"findings",teamId:c.currentManagedTeam,reportId:c.currentManagedReport,finding:{id:e.finding.id}},c.managedTeams)):(a.reason&&Ge(a.reason),!1):!1}if(e.view==="workspace-reports"||e.view==="workspace-bundles")return oR(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let i=e.teamId==null?r.map(br):As(c.managedTeams);if(!await u_(e,i,t,H))return!1;let{compareId:a,compareMode:l,...p}=e;return Xe({...p,bundleTab:c.bundleDetailsTab,...Og(c)},c.managedTeams,r)}if(e.view==="home")return At({history:!1});if(e.view==="npm")return _1(e,t,H);if(e.view==="reviews")return c.managedSession.publicShare?!1:(Bt(),c.currentView="reviews",c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1}),H(),e);if(e.view==="manage-deduplication"&&e.linkId)return Mr(e.view)&&await rR(e.linkId);if(Object.hasOwn(di,e.view))return Ro(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}),xo=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",()=>{_o()});document.addEventListener("managed-feed-closed",()=>{So=!0,$o(),Tu(),At({history:!1}).then(()=>_o()),Ge("Workspace access changed. Refreshing your session.")});async function Ro(e,t={}){if(t.history!==!1&&_()&&(te.active||await _o(),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 P();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(),_o(),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"&&Ro(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})});var p2;function Tt(){return p2??=f2().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function f2(){let e=pt();if(e){ic(e.mode),c.managed=e.managed,Dl().then(o=>{if(o&&o!=="standalone")return ko(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Cu(!wi());let t=Dl(),n=await xp(t,wi()?0:3e3),r=pt();if(r)return n&&n!=="standalone"?ko(n):ko(r,{runtime:!1});if(n&&n!=="standalone")return ko(n);n==="standalone"&&Bl(),c.serverMode="standalone",c.serverModeConfig=null,c.serverModeSelection=null,Tn(n===null),Xc(!0),Cu(!1),fn(G.status),H(),n===null&&t.then(o=>{let s=pt(),i=o&&o!=="standalone"?o:s??o;if(i==="standalone"){if(Bl(),It){It.serverMode="standalone",It.serverModeConfig=null,It.serverModeSelection=null,It.localMode=!1;return}return Tn(!1),fn(G.status),H()}if(i)return ko(i,{runtime:i!==s})}).catch(o=>console.warn("server mode probe:",o))}function m2(){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 g2(e){Ar=e,B=e.renderRoot,ty=B.querySelector("#file-list"),S_(B.querySelector("#encryption-toggle")),A_(B.querySelector("#storage-status")),B.addEventListener("click",Q_),B.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),Q_(t))}),B.addEventListener("dblclick",QB),B.addEventListener("dragstart",e2),B.addEventListener("dragend",t2),B.addEventListener("dragover",n2),B.addEventListener("dragleave",r2),B.addEventListener("drop",o2),bi(B,KB),B.querySelector("#sidebar-search-input")?.addEventListener("input",qB),m2(),fn(G.status),pt()||Cu(!wi()),H(),G.onServerInfo(t=>{if(c.serverMode!=="e2e")return;let n=pt(),r=n&&{...n,...c.deepviewScanServer?{deepviewScanServer:c.deepviewScanServer}:{}};return ko(kp(r,t))}),Tt(),c.serverMode==="managed"&&_o()}var ay=class extends Et{static styles=[D($_),D(v_)];render(){return u`<div class="sidebar-header"><h2 class="brand"><button class="brand-button" type="button" data-action="go-home"><span class="brand-name">Triage</span></button> <span class="brand-tag" data-action="toggle-client-mode">${Jt()}</span></h2><button id="encryption-toggle" type="button" hidden></button> <button id="sidebar-toggle" type="button" aria-label="toggle sidebar"><svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M2 4h12v1.5H2zM2 7.25h12v1.5H2zM2 10.5h12V12H2z"/></svg></button></div><button id="sidebar-home" class="rail-item" type="button" data-action="go-home" aria-label="Home" data-tooltip="Home"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2.5 7.5 8 3l5.5 4.5M4 6.5V13h3V9.5h2V13h3V6.5"/></svg></button><div class="sidebar-search"><svg class="sidebar-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg> <input id="sidebar-search-input" type="search" placeholder="Search reports…" aria-label="Search reports" autocomplete="off"><sidebar-view-button kind="packages"></sidebar-view-button><sidebar-view-button kind="repositories"></sidebar-view-button></div><ul id="file-list"></ul><ul id="sidebar-rail"></ul><button id="storage-status" type="button" hidden><span class="storage-dot" aria-hidden="true"></span> <span class="storage-label"></span></button><div id="view-as-status" role="status" hidden></div><div class="sidebar-actions"><sidebar-delete-current></sidebar-delete-current><button id="sync-status" type="button" data-status="off"><span class="sync-dot" aria-hidden="true"></span> <span class="sync-label">Sync off</span></button> <button id="auth-status" type="button" hidden></button> <span id="public-status" hidden>Public access link · Read only</span> <button id="manage-status" type="button" hidden data-action="manage" aria-label="Manage">${W(il)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){g2(this)}};customElements.define("app-sidebar",ay);async function IR(e){let t=await yl(e),n=await hm(t);if(n.kind==="reports")return{kind:"reports",reports:n.reports};let r;if(n.kind==="encrypted"){if(r=await Wc({tryPassword:s=>wl(t,s)}),!r)return null}else r=vl(n.text);let o=await gm(r,{conflictResolver:async(s,i)=>{try{return await Kc(s,i,{title:"Triage conflicts on import",intro:"disagree with your local triage on",trailingNote:"Reports and non-conflicting triage were already merged; pick which side to keep for these disagreements.",importedSideLabel:"Apply imported"})}catch{let a=s.length;return alert(`Imported ${e.name}. Kept your local triage on ${a} conflicting entr${a===1?"y":"ies"} because another dialog is open \u2014 re-drop the file to pick again.`),null}}});return(c.currentFile||c.currentWorkspace)&&O(),{kind:"workspace",workspace:o}}var uy=class extends N{static styles=[...N.styles,D(ot)];static properties={workspaceId:{type:String},items:{type:Array},_running:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._running=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="download"]')?.focus()}_onClose=()=>this._finish({downloaded:[],failed:[]});_onCancel=()=>this._finish({downloaded:[],failed:[]});_fail(t,n,r,o){t.push({kind:r,identifier:n.identifier,reason:o}),this._errors=[...this._errors,{label:lr(n),reason:o}]}_onDownload=async()=>{if(this._running)return;this._running=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{if(r.kind==="bundle"){let s=await k0(this.workspaceId,r.identifier);if(!s.ok){this._fail(n,r,"bundle",s.reason??"unknown");continue}await io(r.identifier,this.workspaceId),t.push({kind:"bundle",identifier:r.identifier});continue}let o=await $0(this.workspaceId,r.identifier);if(!o||!o.ok){this._fail(n,r,"report",o?.reason??"sync is not available");continue}t.push({kind:"report",identifier:r.identifier})}catch(o){this._fail(n,r,r.kind,o?.message??String(o))}if(this._running=!1,this._done=!0,t.some(r=>r.kind==="report"))try{c.currentWorkspace===this.workspaceId&&await Ks(this.workspaceId)}catch{}n.length===0&&this._finish({downloaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Vc(this.items),o=n?u`Download <strong>"${lr(this.items[0])}"</strong> from the workspace's remote inventory?`:u`Download <strong>${t}</strong> remote ${r} into this workspace?`,s=n?g:jc(this.items),i=this._running?n?"Downloading\u2026":`Downloading ${t} ${r}\u2026`:n?"Download":`Download ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Download from remote</h3></header><p class="lwd-body">${o}</p>${s} ${Gc(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-download-dialog",uy);function Fu({workspaceId:e,items:t}={}){return re("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}function Lu(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 py(e,t){return t==="findings"?e.title:u`<button type="button" class="workspace-title-link" data-action="workspace-findings">${e.title}</button>`}function Va(e,t,n){if(!e)return g;let r=e[t].length;if(t==="bundles"&&r===0)return g;let o=n===`workspace-${t}`;return u`<button type="button" class="${`files-toggle-btn${o?" active":""}`}" data-action="${`workspace-${t}`}" aria-pressed="${String(o)}">${`${r} ${r===1?t.slice(0,-1):t}`}</button>`}function ja(e){return new Set(e.flatMap(t=>t?.source==="links"?[]:Object.keys(t?.tree??{}))).size}function fy(e,t){if(!(e>1))return g;let n=t==="files";return u`<button type="button" class="${`files-toggle-btn${n?" active":""}`}" data-action="toggle-files" aria-pressed="${String(n)}">${`${e} files`}</button>`}function AR(e,t,n=0){if(!e)return u`<p class="workspace-content-empty">This workspace is no longer available.</p>`;let r=`workspace-${t}`,o=e[t];return u`<section class="workspace-content-view"><header class="page-head"><div class="page-title"><h1>${py(e,r)}${Va(e,"reports",r)}${Va(e,"bundles",r)}${fy(n,r)}</h1></div></header>${o.length>0?u`<ul class="workspace-content-list">${o.map(s=>{let i=[s.kind==="stasis"?"Stasis":s.kind==="sourcemap"?"Sourcemap":null,Number.isFinite(s.size)?ge(s.size):null,Number.isFinite(s.summary?.files)?`${s.summary.files.toLocaleString()} files`:null,Number.isFinite(s.summary?.lines)?`${s.summary.lines.toLocaleString()} LoC`:null].filter(Boolean).join(" \xB7 "),a=s.repoFullName?`${s.repoFullName}${s.repoDirectory?`/${s.repoDirectory}`:""}`:null;return u`<li class="${s.hidden?"workspace-content-hidden":""}"><button type="button" class="workspace-content-row" data-workspace-report="${t==="reports"?s.managedId??s.name:g}" data-workspace-bundle="${t==="bundles"?s.managedId??s.integrity:g}" ?disabled="${!s.available}"><svg class="workspace-content-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="${t==="bundles"?"m12 3 9 5v8l-9 5-9-5V8zM3 8l9 5 9-5M12 13v8M7.5 5.5l9 5":"M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9zM14 3v6h6M8 13h8M8 17h5"}/"></path></svg> <span class="workspace-content-label"><span class="workspace-content-name">${s.name}${s.hidden?u`<span class="workspace-content-visibility">Hidden</span>`:g}</span> ${a?u`<span class="workspace-content-repo">${a}</span>`:g} </span><span class="workspace-content-stats">${s.available?i:"Not available locally"}</span> ${s.available?u`<span class="workspace-content-arrow" aria-hidden="true">→</span>`:g}</button></li>`})}</ul>`:u`<p class="workspace-content-empty">No ${t} in this ${e.scope}.</p>`}</section>`}async function ER(e,{fetchReports:t,signal:n,isCurrent:r,render:o}){let s=e.currentView;if(!["workspace-reports","workspace-bundles"].includes(s)||!r()||n.aborted)return!0;let i=e.managedTeams.find(d=>d.id===e.currentManagedTeam);if(!i)return!0;let a=e.managedSession,l=()=>!n.aborted&&r()&&e.currentView===s&&e.managedSession===a&&e.currentManagedTeam===i.id&&e.managedTeams.find(d=>d.id===i.id)===i,p=await new Promise(d=>{let f=h=>{n.removeEventListener("abort",m),d(h)},m=()=>f(null);n.addEventListener("abort",m,{once:!0}),Promise.resolve().then(()=>n.aborted?null:t(i.id,{signal:n})).then(f,()=>f(null))});return l()?(e.workspaceContentFileCount=p?ja(p.map(d=>d.data)):0,o(),p!==null):!0}var To="deepview.lastFile";function ly(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"&&up.has(t)?` ${t}`:"";Me(To,`b:${e}${r}`).catch(()=>{})}var ne=e=>e!==me();function h2(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Ga(e){return await h2(),e!==null&&ne(e)?!1:(O(),xg(c.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!ne(e)).catch(()=>{}),!0)}function Nu(){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),Jm(t.workspaceId))}function my(){be.classList.remove("active"),be.replaceChildren(),ut.classList.remove("hidden"),document.title="DeepView"}function FR(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function gy(e){let t=LR(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function LR(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function Ou({name:e,content:t,existingNames:n}){if(!n.has(e))return await Xt(e,t),n.add(e),{name:e,content:t};let r;try{r=await fe(e)}catch(l){if(!FR(l))throw l;return await Xt(e,t),n.add(e),{name:e,content:t}}if(r===t)return{name:e,content:t};let s=Y().filter(l=>Array.isArray(l.reports)&&l.reports.includes(e)).filter(l=>gs(l.id,e)),i=await l_({name:e,workspaceNames:s.map(l=>l.name),existingNames:n});if(i.action==="cancel")return null;if(i.action==="rename"){let l=i.newName;return await Xt(l,t),n.add(l),{name:l,content:t}}let a;if(s.length>0)try{a=await x0(e)}catch(l){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,l)}try{await Xt(e,t),s.length>0&&await y2(e,s)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function b2(e,t){let n=typeof t?.github=="string"?t.github:"";if(n)try{await sf(e,n)}catch(r){console.warn(`Import: failed to adopt the repository "${n}" for "${e}":`,r)}}async function y2(e,t){let n;try{n=await Cn(e)}catch(r){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,r);return}for(let r of t)try{await sa(r.id);let o=await Jc(r.id,e,n);o&&o.ok===!1&&console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}): ${o.reason??"unknown"}`)}catch(o){console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}):`,o)}}async function hy(e){if(e=[...e],e.length===0||(await Tt(),_())||(await Su(),_()))return;let t=null,n=null,r=new Set,o=new Set(await ce()),s=[];for(let i of e)try{let a=LR(i.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let f=await IR(i);if(f?.kind==="reports")for(let m of f.reports){if(typeof m?.name!="string"||!m.name||typeof m?.content!="string")continue;let h=Ve(m.content);if(!h.recognized){s.push(m.name);continue}let b=await Ou({name:m.name,content:m.content,existingNames:o});b&&(Ue(b.name,h.count,h.source),await b2(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(gy(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=Vw(p,i.name);if(d)for(let f of d){let{count:m,source:h}=Ve(f.content),b=await Ou({...f,existingNames:o});b&&(Ue(b.name,m,h),t={name:b.name,content:b.content})}else if(Rw(p,a)==="codex"){let f=_w(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 Ou({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 Ou({name:i.name,content:p,existingNames:o});if(!m)continue;Ue(m.name,f.count,f.source),t={name:m.name,content:m.content}}}catch(a){alert(`Failed to load ${i.name}: ${a.message}`)}if(s.length>0){let i=s.length;alert(`Skipped ${i} report${i===1?"":"s"} no parser recognised: ${s.join(", ")}`)}await H(),t?await Ua(t.name,t.content):n&&(gr(n),ly(n,c.bundleDetailsTab),O(),await H(),gd(n)),xg(r).catch(()=>{})}async function Ua(e,t,{workspaceId:n}={}){if(_())return;let r=Oe();c.currentManagedTeam=null,c.currentManagedReport=null,c.currentReportWorkspace=Ss(e,n);let o=new Set(Y().filter(i=>Array.isArray(i.reports)&&i.reports.includes(e)).map(i=>i.id));if(qs(o),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=e,c.currentWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),c.repoUrl=Ze(e),c.repoEditing=!1,Nu(),Me(To,Sc(e,c.currentReportWorkspace)).catch(()=>{}),t===void 0){try{t=await fe(e)}catch(i){if(ne(r))return;if(i&&i.message?.includes("vault locked")){if(await $u()&&!ne(r)){await Ua(e);return}ne(r)||(c.currentFile=null,await H());return}if(FR(i)){let a=Y().find(l=>Array.isArray(l.reports)&&l.reports.includes(e)&&gs(l.id,e));if(a)try{if(await sa(a.id),ne(r))return;let l=await Fu({workspaceId:a.id,items:[{kind:"report",identifier:e}]});if(ne(r))return;if(l?.downloaded?.some(p=>p.kind==="report"&&p.identifier===e)){await Ua(e);return}}catch(l){if(console.warn(`Re-download prompt for missing "${e}" failed:`,l),ne(r))return}ne(r)||(c.currentFile=null,await H());return}alert(`Failed to read ${e}: ${i.message}`),c.currentFile=null,await H();return}if(ne(r))return}let s=qn(t);if(s?(c.currentLinks={name:e,...s},c.currentView="links",O()):await Bu(e,t,r),!ne(r)){for(let i of o)G.openSession(i),G.refreshSession(i),sa(i);return await H(),!0}}function rR(e){return c.managedSession?.role!=="admin"?!1:Ir({id:null,reports:[{id:e}]},e,{history:!1,deduplication:!0})}function cy(e=Le()){let t=Le();return ER(c,{fetchReports:Wm,signal:AbortSignal.any([e,t]),isCurrent:()=>_()&&Le()===t,render:()=>O({animate:!1})})}async function oR(e,t,{history:n=!0}={}){if(t!=="reports"&&t!=="bundles")return!1;let r=`workspace-${t}`,o=_(),s=o?c.managedTeams.find(p=>p.id===e):Y().find(p=>p.id===e);if(!s)return!1;if(o&&n&&te.active)return te.navigate(Xe({view:r,teamId:e},c.managedTeams));let i=o?`managed-team:${e}`:e,a=c.currentWorkspace===i?["workspace-reports","workspace-bundles"].includes(c.currentView)?c.workspaceContentFileCount:ja(c.reports):0,l=Oe();if(qs(new Set),qa({forgetLastView:!1}),c.currentWorkspace=i,c.workspaceContentFileCount=a,c.currentManagedTeam=o?e:null,c.currentView=r,o&&(c.bundles=As(c.managedTeams)),be.classList.add("active"),ut.classList.add("hidden"),document.body.classList.remove("report-fullscreen"),O({animate:!1}),document.querySelector("#main-content")?.scrollTo({top:0}),o||Me(To,`${t==="reports"?"wrs":"wbs"}:${e}`).catch(()=>{}),await H(),ne(l))return!1;if(O({animate:!1}),o)await cy();else{let p=await Promise.all((s.reports??[]).map(async d=>{try{return ap(await fe(d)).data}catch{return null}}));if(ne(l))return!1;c.workspaceContentFileCount=ja(p),O({animate:!1})}return!ne(l)}async function Ir(e,t=null,{history:n=!0,deduplication:r=!1}={}){if(!_()||!e||!Array.isArray(e.reports))return!1;if(n&&te.active)return te.navigate(Xe({view:"findings",teamId:e.id,reportId:t},c.managedTeams));if(t!==null&&!e.reports.some(m=>m.id===t))return!1;let o=Oe(),s=e.reports.find(m=>m.id===t&&m.visible===!1),i=Le(),a;try{a=r?await(await P()).fetchManagedLinkWorkspace(t,{signal:i}):await Wm(e.id,{reportId:s?.id??null})}catch(m){return ne(o)||Ge(m.message||"Could not load link report."),!1}if(ne(o))return!1;if(xk(),a===null||t!==null&&!a.some(m=>m.id===t))return Ge("Could not load all team reports. Please try again."),!1;let l=a.find(m=>m.id===t&&m.data.source==="links"&&Array.isArray(m.data.links)),p=a.filter(m=>t===null||l||m.id===t),d=p.filter(m=>m.data.source!=="links"||!Array.isArray(m.data.links));qs(new Set);let f=document.createElement("p");f.setAttribute("role","status"),f.textContent="Loading report triage\u2026",be.replaceChildren(f),be.classList.add("active"),ut.classList.add("hidden"),c.currentView="findings",c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=t===null?null:a.find(m=>m.id===t).filename,c.currentWorkspace=t===null?`managed-team:${e.id}`:null,c.currentManagedTeam=e.id,c.currentManagedReport=t,A$(e.id,a),c.managedReports=p.map(m=>({id:m.id,filename:m.filename})),c.managedComments.clear(),c.managedIssues.clear(),c.managedReport=t===null?null:c.managedReports[0]??null,c.currentReportWorkspace=null,c.currentLinks=null,c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.repoUrl="",c.repoEditing=!1,Nu();for(let m of d)if(await Bu(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-JVBB4LZX.js");if(ne(o))return!1;let b=async w=>{let v=m(c.currentManagedTeam,w);return(await Promise.all(d.flatMap(k=>[h(k.id,{renderView:!1,signal:w,readAnnotations:v}),xd(k.id,{signal:w,readAnnotations:v})]))).every(Boolean)&&!w.aborted&&!ne(o)},y=r?await b(Le()):await _r({hydrate:b});if(ne(o))return!1;if(!y)return await At({history:!1}),Ge("Could not load report annotations. Open the team or report again to retry."),!1}if(l){if(c.currentView="links",c.currentLinks={name:l.filename,groups:l.data.links,skipped:0,...r?{managedId:t}:{}},!await Ga(o))return!1}else if(d.length===0)Du();else if(aa(mo()),!await Ga(o))return!1;return _r(),await H(),!0}async function Ks(e){if(_())return;c.currentManagedTeam=null,c.currentManagedReport=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear();let t=Y().find(f=>f.id===e);if(!t)return;let n=Oe();qs(new Set([e])),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),dt("workspace",e),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=null,c.currentWorkspace=e,c.currentReportWorkspace=null,c.currentLinks=null,c.repoUrl="",c.repoEditing=!1,Nu(),Me(To,`ws:${e}`).catch(()=>{}),t.reports.length===0&&my();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 Bu(t.reports[f],m,n,{renderView:!1})?i++:o=!1,ne(n)))return}i===0&&t.reports.length>0&&my(),o&&lo(t)?.appMode&&(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Ka());let a=c.reports.slice();E_(t,a,r,{complete:o,isCurrent:()=>!ne(n)&&c.currentWorkspace===e&&["findings","files"].includes(c.currentView)});let l=H().catch(f=>console.warn("workspace sidebar:",f));if(i>0){if(aa(mo()),!await Ga(n))return}else Du();let p=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],d=p.map(f=>c[f]);L_(t,a,r,{complete:o,isCurrent:()=>!ne(n),onReady:async f=>{!f.appMode||c.currentWorkspace!==e||!["findings","files"].includes(c.currentView)||p.some((m,h)=>c[m]!==d[h])||(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Ka(),aa(mo()),await Ga(n))}}).catch(f=>console.warn("workspace App metadata:",f)),G.openSession(e),G.refreshSession(e),sa(e),await l}async function sR({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!c.currentFile)return;let n=Oe(),r=c.currentFile;os(r),Qr(r,"");for(let o of t)try{let s=await Zc(o,r);if(ne(n))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete '${r}' from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete '${r}' from workspace ${o} remote:`,s)}if(await Jo(r),!ne(n)&&(await Ui(r,null),!ne(n))){if(e==="wipe"){try{await Rc()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(ne(n))return}ne(n)||(qa(),await H())}}function qa({forgetLastView:e=!0}={}){Ux(),c.currentManagedTeam=null,c.currentManagedReport=null,c.currentFile=null,c.currentWorkspace=null,c.workspaceContentFileCount=0,c.currentReportWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.bundleDetails=null,c.bundleDetailsTab="overview",c.bundleSourceFile=null,c.bundleSourceFindingIdx=null,c.selectedPackage=null,c.selectedPackageVersion=null,c.packageDetailsTab="overview",c.packageSlideTriage=null,c.packageSlideTransient=!1,c.expandedPackages.clear(),c.selectedRepository=null,c.repositoryDetailsTab="overview",c.repositorySlideTriage=null,c.repositorySlideTransient=!1,c.filesSelectedFile=null,c.tableSelectedGid=null,c.kanbanPopoverGid=null,c.kanbanExpandedColumn=null,c.focusGid=null,c.activeTabByGroup.clear(),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.repoUrl="",c.repoEditing=!1,c.shownTriage=null,c.currentView="findings",Nu(),e&&nr(To),my()}function iR(e){Oe(),qs(new Set),qa(e)}async function At({history:e=!0}={}){return e&&_()&&te.active?te.navigate({view:"home"}):(Oe(),qs(new Set),qa({forgetLastView:!_()}),await H(),!0)}async function aR({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!c.selectedBundle)return;let t=Oe(),n=c.selectedBundle;for(let o of e)try{let s=await Qc(o,n);if(ne(t))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete bundle from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete bundle from workspace ${o} remote:`,s)}if(await jp(n),ne(t)||(await Pf(n,null),ne(t)))return;c.selectedBundle=null,c.selectedBundleWorkspace=null,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleSourceFindingIdx=null;let r=ve(To);typeof r=="string"&&(r===`b:${n}`||r.startsWith(`b:${n} `))&&nr(To),vf(n),c.bundles=await Je(),!ne(t)&&(O(),await H())}async function lR(e,t="detach",{triage:n="keep"}={}){let r=Y().find(a=>a.id===e);if(!r)return;Oe();let o=Array.isArray(r.reports)?[...r.reports]:[];if(G.closeSession(e),Jm(e),t==="delete"){for(let a of o){try{await Jo(a)}catch{}os(a),Qr(a,"")}if(n==="wipe")try{await Rc()}catch(a){console.warn("Skipped orphan-triage GC:",a)}}let s=c.currentWorkspace===e,i=t==="delete"&&c.currentFile!=null&&o.includes(c.currentFile);(s||i)&&qa(),await Of(e),await H()}async function Bu(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?_()?Bw(t,e):ap(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(l);let p=c.reports.length===0,d=yn(a)??[],f=d.flatMap(id);if(await Mw(f),i())return;let m=new Set(f.filter(Mv).map(k=>k.source??a.source??null)),h=s??a?.repo,b=De({repo:h}),y=b??(o==null?Ze(e):""),w=Ft(h),v=pl([{groups:d.map(id),tree:a.tree}]),x=[];for(let k of d){let $=id(k);if($.length===0)continue;let S=[];for(let C of $){let R={...C,_id:c.nextFindingId++,_repoFallback:y,_repoDirectory:w,_reportName:e,_depsDirectory:v,_managedReportId:o,_bundleHashes:a.bundleHashes??[]};Po(R,a),R._source=R.source??a.source??null,"isApp"in R||(R.isApp=jn(R,R._source)),R._sourcePass=m.has(R._source),R._analyzer=R._source??R.type??null,S.push(R)}x.push(S)}return Gn(x),c.reports.push({type:a.type||"analysis",source:a.source??null,fileName:e,_managedReportId:o,groups:x,repo:b,tree:a.tree??null,bundleHashes:a.bundleHashes??[]}),Wl(c.reports),Hl(c.reports)&&pr(),c.revalidateConflicts=J0(),Ka(),p&&(td(),aa(mo())),r&&await Ga(n),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}window.__loadFile=(e,t)=>Bu(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")&&hy(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"),hy(e.dataTransfer.files)});var mn=null;function w2(){_()||(mn||(mn=document.createElement("input"),mn.type="file",mn.multiple=!0,mn.hidden=!0,mn.addEventListener("change",()=>{let e=[...mn.files];e.length>0&&hy(e),mn.value=""}),document.body.append(mn)),mn.click())}ut.addEventListener("click",e=>{let t=e.target.closest("[data-managed-page]");if(t){Ro(t.dataset.managedPage);return}if(e.target.closest("[data-managed-login]")){Gk(c.managed?.loginPath);return}let n=e.target.closest("[data-managed-team]");if(n){let o=c.managedTeams.find(s=>s.id===n.dataset.managedTeam);o&&Ir(o);return}let r=e.target.closest("[data-landing-workspace]");if(r){Ks(r.dataset.landingWorkspace);return}e.target.closest(".drop-prompt-action")&&w2()});function OR(e,t=fetch,n=""){let r=new URL(e);return(o,s={})=>{let i=new URL(o.replace(/^\/+/u,""),r);if(i.origin!==r.origin)throw new Error("Scan requests must use the configured server");let a=new Headers(s.headers);return n&&a.set("authorization",`Bearer ${n}`),t(i,{...s,headers:a,credentials:"omit",redirect:"error"})}}var Pu=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=fp(this.provider);this.loadModels=()=>Promise.resolve(t)}_disconnect(){this._controller?.abort(),this.connected=!1,this.managed=!1,this.loading=!1,this.error=null,this.catalogue=null,this._remoteModels||this._previewModels(),this.onChange()}get ready(){return this.connected&&!this.loading&&this.catalogue!=null}setKey(t){this.apiKey!==t&&(this.apiKey=t,this._disconnect())}setProvider(t){if(!(this.provider===t||this.managed)){if(this.provider=t,this.connected&&t)return this._load(t);this.connected&&(this._controller?.abort(),this.loading=!1,this.error=null,this.catalogue=null),this._remoteModels||this._previewModels(),this.onChange()}}connect(){if(this._disconnect(),!(!this.server||!this.apiKey.trim()))return this._load(null)}async _fetch(t,n){let r=OR(this.server,this.request,this.apiKey.trim()),o=t?`?${new URLSearchParams({provider:t})}`:"",s=await r(`api/models${o}`,{headers:{accept:"application/json"},cache:"no-store",signal:n});if(s.status===401)throw Object.assign(new Error("DeepView API key not recognized."),{status:401});if(!s.ok)throw new Error(`Scan server returned HTTP ${s.status}.`);let i=await s.json();if(i?.valid!==!0||typeof i.managed!="boolean")throw new Error("Invalid response from scan server.");return{managed:i.managed,catalogue:i.managed||t?jw(i):null}}async _load(t){this._controller?.abort();let n=this._controller=new AbortController;this.loading=!0,this.error=null,this.catalogue=null;let r=this._fetch(t,n.signal);this.onChange();try{let o=await r;if(n.signal.aborted)return;if(this.connected=!0,this.managed=o.managed,this.catalogue=o.catalogue,!o.managed&&!t&&this.provider)return this._load(this.provider);if(o.catalogue){let s=o.catalogue;this._remoteModels=!0,this.loadModels=()=>Promise.resolve(s)}else this._remoteModels||this._previewModels();this.loading=!1,this.onChange()}catch(o){if(n.signal.aborted)return;(!t||o.status===401)&&this._disconnect(),this.loading=!1,this.error=o instanceof TypeError?"Couldn\u2019t reach the scan server. Check your connection and try again.":String(o?.message??o),this.onChange()}}};function NR(e){let t=e.trim();return/^sk-ant-[A-Za-z0-9_-]*$/u.test(t)?"anthropic":/^sk-or-v1-[A-Za-z0-9_-]*$/u.test(t)?"openrouter":/^sk-kimi-[A-Za-z0-9_-]*$/u.test(t)?"moonshot":/^sk-(?:proj|svcacct)-[A-Za-z0-9_-]*$/u.test(t)?"openai":null}function Er(e){if(e?.throwIfAborted(),_())throw new DOMException("Local scan closed","AbortError")}async function BR(e){Er(e);let t=await Je();return Er(e),cv(t,Y())}async function DR(e,t){Er(t);let n=await go(e.integrity,{name:e.filename},{sources:!1});return Er(t),dv(e,n)}async function PR(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),uv(n,Y())}function zR({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?vp(o):vp(t)??(e==="127.0.0.1"?Rv:null)}async function WR(e,t,n){let r=Ge(e,{duration:0});t.addEventListener("abort",r,{once:!0});try{return await n()}finally{t.removeEventListener("abort",r),r()}}function Ya(){return zR({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:c.serverMode,localMode:c.localMode,deepviewScanServer:c.deepviewScanServer})}function Xa(e){return _()?!!e.managedId&&["admin","manage"].includes(c.managedSession?.role):!e.managedId&&!!Ya()}async function zu(e=null,{mode:t}={}){let n=c.selectedBundleWorkspace,r=me();if(await Tt(),r!==me()||e&&!Xa(e))return;if(_()){e&&await Ro("manage-scans",{bundleId:e.managedId,...t?{scanMode:t}:{}});return}if(!Ya())return;let o=At(),s=me();await o,!(!Ya()||s!==me())&&(c.scanSelection=e?{bundleId:e.integrity,...n?{repoId:n}:{},...t?{mode:t}:{}}:null,c.currentView="scan",O(),H())}var by=class extends Et{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=Ya(),this._access=new Pu(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>WR("Loading bundle\u2026",n,()=>DR(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=cm(()=>{this._savedAccess=ds()}),this._loadSource()}disconnectedCallback(){super.disconnectedCallback(),this._unsubscribeSavedAccess?.(),this._controller?.abort(),this._resetAccess()}async _loadSource(){this._controller?.abort();let t=this._controller=new AbortController;this._error=null;try{this._source=await WR("Loading bundles\u2026",t.signal,()=>BR(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=ds();let t=im(this._server);t&&(this._access.setKey(t.deepview),this._access.setProvider(t.provider),this._providerToken=t.token,this._access.connect())}async _saveOrForgetAccess(){if(this._savingAccess)return;let t=ds();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await lm(),this._resetAccess()):await am({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=ds()}catch{Ge(t?"Couldn\u2019t forget scan credentials. Try again.":"Couldn\u2019t save scan credentials. Try again.",{kind:"warning"})}finally{this._savingAccess=!1}}}_connect(t){t.preventDefault(),this._access.connect()}_setProvider(t){this._access.provider!==t&&(this._access.setProvider(t),this._providerToken="")}_setProviderToken(t){this._providerToken=t;let n=NR(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=sp`: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">${Gw(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="${PR}"><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",by);function Mu(){let e=document.querySelector("#drop-zone");if(!e)return;let t=e.querySelector(".local-scan-button");t||(t=document.createElement("button"),t.type="button",t.className="local-scan-button",t.innerHTML=`${Vn}<span>Scan</span>`,t.addEventListener("click",()=>{zu()}),e.append(t));let n=Ya();t.hidden=!n,document.querySelector("local-scan-page")?.setScanServer(n);let r=document.querySelector(".bundles-scan-button"),o=c.bundles?.find(s=>s.integrity===c.selectedBundle);r&&(r.hidden=!o||!Xa(o))}var HR="@preventive/triage";function yy(e,t){let n=e.toLowerCase(),r="",o=n;if(n.startsWith("@")){let i=n.indexOf("/");i>0&&(r=n.slice(0,i),o=n.slice(i+1))}return`pkg:npm/${r?`${encodeURIComponent(r)}/`:""}${encodeURIComponent(o)}@${encodeURIComponent(t)}`}function UR(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function VR(e){let t=[];if(e?.kind!=="stasis"||!e.bundle?.modules)return t;let n=new Map;for(let[r,o]of e.bundle.modules){if(!o?.name||typeof o.version!="string"||!o.version)continue;let s=`${o.name}@${o.version}`,i=n.get(s);if(i!==void 0){r==="."&&(t[i].dir=".");continue}n.set(s,t.length),t.push({name:o.name,version:o.version,dir:r})}return t}function jR(e){if(e?.kind!=="stasis"||!e.bundle?.modules)return!1;for(let[,t]of e.bundle.modules)if(t?.name&&typeof t.version=="string"&&t.version)return!0;return!1}function GR(e,t){let n=e.find(s=>s.dir===".")??null,r=n?e.filter(s=>s!==n):e;return{root:n?{name:n.name,version:n.version,purl:yy(n.name,n.version)}:{name:UR(t?.name??"bundle"),version:null,purl:null},rest:r}}function KR(e){return e??globalThis.crypto.randomUUID()}function PJ(e,t,{now:n=new Date,uuid:r}={}){let o=VR(e),{root:s,rest:i}=GR(o,t),a={type:"application","bom-ref":s.purl??`application:${s.name}`,name:s.name};s.version&&(a.version=s.version),s.purl&&(a.purl=s.purl);let l={bomFormat:"CycloneDX",specVersion:"1.5",serialNumber:`urn:uuid:${KR(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:HR}]},component:a},components:i.map(p=>{let d=yy(p.name,p.version);return{type:"library","bom-ref":d,name:p.name,version:p.version,purl:d}})};return`${JSON.stringify(l,null,2)}
|
|
182
|
-
`}function v2(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function zJ(e,t,{now:n=new Date,uuid:r}={}){let o=
|
|
182
|
+
You can change this anytime from the lock icon in the sidebar header.`)){B_();return}await vu(),ft()&&B_()}var Wb=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",Wb);function P_(){return re("new-workspace-dialog")}var Hb=class extends N{static styles=[...N.styles,D(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",Hb);function z_({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 Ub=class extends N{static styles=[...N.styles,D(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 bm({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=ym(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",Ub);function W_({id:e,name:t,privateKeyBase64:n}={}){return new Promise((r,o)=>{let s=document.createElement("workspace-share-link-dialog");s.workspaceId=e??"",s.initialName=t??"",s.privateKeyBase64=n??"",s.addEventListener("resolve",()=>{s.remove(),r()}),s.addEventListener("modal-conflict",i=>{s.privateKeyBase64="",s.remove(),o(Al(i.detail?.cause))}),document.body.append(s)})}var Vb=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",Vb);function H_({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 jb=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",jb);function U_({name:e,inRemote:t}={}){return re("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var Gb=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",Gb);function V_({name:e,workspaceName:t}={}){return re("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var Kb=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",Kb);function j_({name:e,workspaceName:t}={}){return re("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var qb=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",qb);function G_(){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 Yb=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",Yb);function K_(){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,ty=null;function Cu(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}hv();function TB(){return Zt().size}function MB(){return no().size}var Pa=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,dy="application/x-deepview-report",ny="application/x-deepview-source-ws",za="application/x-deepview-bundle",_u=!1,Ru=!1,IB={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[ke]:"Links"},q_=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",ke],Tr="",Ut=!1,Wa=new Map,Y_="",Ha=new wu;function AB(e,t){let n=c.currentView==="bundles"?c.selectedBundle:null,r=["findings","files","links"].includes(c.currentView)?c.currentFile:null,o=n?"bundles":"reports",s=r?Ss(r):null,i=e.filter(l=>n?l.bundles.includes(n):l.id===s),a=JSON.stringify([o,n||r,i.map(l=>l.id)]);if(!(!t&&a===Y_)){Y_=a;for(let l of i){let p=Wa.get(l.id)??new Set;p.add(o),Wa.set(l.id,p)}}}function X_(e,t={}){let r=`file-item${lR(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 lR(e,t){return e===c.currentFile&&t===Ss(e)&&(c.currentView==="findings"||c.currentView==="files"||c.currentView==="links")}function cR(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 EB=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>`,FB=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 LB(){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">${EB}</button></span></li>`}function OB(){let e=f_(c.managedTeams,Tr);return e.length===0?g:u`${cR("Teams")} ${Z(e,({team:t})=>t.id,({team:t,reports:n,bundles:r})=>{let o=t.app,s=o?.appMode===!0,i=Ha.shown(t.id,"reports",s,Ut),a=Ha.shown(t.id,"bundles",s,Ut),l=n.filter(p=>p.analyzer!==ke).length;return u`<li class="${`file-item team-item${uR(t)?" current":""}`}" data-team-id="${t.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{Ir(t)}}">${bR}<span class="file-label">${t.name}</span></button> ${c.managed?.allowShare&&["admin","manage"].includes(c.managedSession?.role)?u`<button type="button" class="workspace-share" aria-label="${`Share ${t.name} publicly`}" @click="${()=>{zk(t)}}">${yR}</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=>DB(t,p)):g} ${a?Z(r,p=>p.id,p=>zB(t,p)):g}`})}`}function dR(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">${m_(e)}</span></button></li>`}function NB(){return Z(c.managedTeams??[],e=>e.id,e=>dR(e.name,bR,uR(e)||(e.reports??[]).some(t=>pR(e,t))||(e.bundles??[]).some(t=>fR(e,t)),()=>{Ir(e)}))}function BB(e){return Z(e,t=>t.id,t=>dR(t.name,hR,wR(t)||t.reports.some(n=>lR(n,t.id))||t.bundles.some(n=>gR(n,t.id)),()=>kR(t.id)))}function uR(e){return c.currentManagedTeam===e.id&&!!c.currentWorkspace&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function pR(e,t){return c.currentManagedTeam===e.id&&c.currentManagedReport===t.id&&["findings","links"].includes(c.currentView)}function fR(e,t){return c.currentManagedTeam===e.id&&yr(c)===t.id}function DB(e,t){let n=oe(t.filename),r=pR(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="${xb(t)||g}" data-tooltip-placement="right-start" @click="${()=>{PB(e,t)}}">${W(ye[Hm(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function PB(e,t){return Ir(e,t.id)}function zB(e,t){let n=fR(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="${xb(t)||g}" data-tooltip-bundle="${t.kind||g}" data-tooltip-built="${t.provenance==="build"?"true":g}" data-tooltip-stats="${p_(t)||g}" data-tooltip-commit="${t.summary?.commit||g}" data-tooltip-commit-info="${Es(t.commitInfo,t.summary?.commit,t.repoFullName)??g}" data-tooltip-placement="right-start">${mR}<span class="file-label">${t.filename}</span></button></li>`}function WB(){return u`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var mR=u`${W(Lo)}`;function gR(e,t){return c.selectedBundle===e&&c.currentView==="bundles"&&t===c.selectedBundleWorkspace}function J_(e,t={}){let{integrity:n,name:r}=e,o=gR(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}
|
|
183
|
+
${n}`}">${mR}<span class="file-label">${r}</span></button></li>`}function HB(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 UB(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 hR=u`${W(No)}`,bR=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>`,VB=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>`,jB=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>`,yR=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 wR(e){return c.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(c.currentView)}function GB(e,{app:t,compact:n,reports:r,bundles:o,showReports:s,showBundles:i}){let l=`file-item workspace-item${wR(e)?" current":""}`;return u`<li class="${l}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${hR}<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">${yR}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${VB}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${jB}</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 Xb=(e,t)=>oe(e).localeCompare(oe(t));async function H({revealSelection:e=!1}={}){await Tt();let t=Jt();if(Pb({serverMode:t,session:c.managedSession,teams:c.managedTeams,sessionPending:So,teamsPending:Co,alternateMode:Jn(c.serverModeConfig)?"e2e":"local",onSwitchMode:$R}),Mu(),_()){if(Ha.sync(c,e),!So&&!Co&&!Gs&&!pn&&_r({catalogOnly:!0}),c.bundles=(c.bundles??[]).filter(w=>w.managedId||w.npm),c.storedFiles=[],Ob([]),!B)return;J(u`${OB()}`,ty);let y=B.querySelector("#sidebar-rail");y?.setAttribute("aria-label","Teams"),y&&J(NB(),y),B.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),B.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),B.querySelector("#storage-status")?.setAttribute("hidden",""),fn();return}if(Ha.sync({managedTeams:[]}),B?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),B?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await tm(),t!==Jt()){await H();return}xt().catch(()=>{}),Xi().catch(()=>{});let n=await ce();if(t!==Jt()){await H();return}let r=Y();AB(r,e),Ob(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,Lb(),!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 q_)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`${LB()} ${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(Xb),v.sort(Xb);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 $=E_(y)??lo(y),S=$?.appMode??Rm(y)===!0,C=Wa.get(y.id),R=!S||Ut||C?.has("reports")===!0,L=!S||Ut||C?.has("bundles")===!0,A=[...w,...v].filter(M=>Ie(M)!==ke).length,E=x.length+k.length;return u`${GB(y,{app:$,compact:S,reports:A,bundles:E,showReports:R,showBundles:L})} ${R?u`${w.map(M=>X_(M,{indented:!0,workspaceId:y.id}))}${v.map(M=>UB(M,y.id))}`:g} ${L?u`${x.map(M=>J_(M,{workspaceId:y.id}))}${k.map(M=>HB(M,y.id))}`:g}`})} ${q_.map(y=>{let w=(p.get(y)??[]).toSorted(Xb),v=y==="default";return w.length===0&&!(v&&_u)?null:u`${cR(IB[y]??y,{dropTarget:v})} ${w.map(x=>X_(x))}`})} ${f.length>0||Ru?WB():null} ${Z(f,y=>y.integrity,y=>J_(y))}`,ty);let m=B.querySelector("#sidebar-rail");m?.setAttribute("aria-label","Workspaces"),m&&J(BB(r),m);let h=B.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=TB());let b=B.querySelector('sidebar-view-button[kind="repositories"]');b&&(b.count=MB()),fn(),Cf(n,vR)}var Jb=!1;function vR(){Jb||(Jb=!0,requestAnimationFrame(()=>{Jb=!1,H().catch(e=>console.warn("counts repaint:",e))}))}kt(()=>{H()});Mm(vR);async function $R(){B?.querySelector("#user-menu")?.hidePopover?.(),It?await s2():af()&&await Au()}function kR(e){let t=c.currentView==="findings"||c.currentView==="files";(e!==c.currentWorkspace||!t)&&Ks(e)}async function Z_(e){let t=e.target.closest("[data-team-section]");if(t){if(Ut||t.disabled)return;let f=t.closest("[data-team-id]")?.dataset.teamId;f&&Ha.toggle(f,t.dataset.teamSection),await H();return}let n=e.target.closest("[data-workspace-section]");if(n){if(Ut||n.disabled)return;let f=n.closest("[data-workspace-id]")?.dataset.workspaceId;if(!f)return;let m=n.dataset.workspaceSection,h=Wa.get(f)??new Set;h.has(m)?h.delete(m):h.add(m),Wa.set(f,h),await H();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await $R();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}),ly(f,c.bundleDetailsTab),O(),H(),gd(f);return}let s=e.target.closest("sidebar-view-button");if(s){let f=s.getAttribute("kind");(f==="packages"||f==="repositories")&&(c.currentView=f,O(),H());return}if(e.target.closest('[data-action="new-workspace"]')){if(_())return;let f=await P_();f&&(await Su(),await Lf(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&&W_({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&&N_(m).catch(h=>alert(`Failed to open export dialog: ${h.message}`));return}let l=e.target.closest('[data-action="leave-workspace"]');if(l){let f=l.closest("[data-workspace-id]"),m=f?Y().find(x=>x.id===f.dataset.workspaceId):null;if(!m)return;let h=Array.isArray(m.reports)?m.reports:[],b;try{b=await _c(h)}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let{confirmed:y,mode:w,triage:v}=await z_({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 aR(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&&kR(f);return}let d=e.target.closest(".file-item[data-file]");if(d){let f=d.dataset.file,m=c.currentView==="findings"||c.currentView==="links",h=d.dataset.workspaceId??null;f&&(f!==c.currentFile||h!==c.currentReportWorkspace||!m)&&Ua(f,void 0,{workspaceId:h});return}if(e.target.closest("sidebar-delete-current")){if(c.currentView==="bundles"&&c.selectedBundle){let x=c.selectedBundle,k=(c.bundles??[]).find(C=>C.integrity===x)?.name??x,$=Y().filter(C=>Array.isArray(C.bundles)&&C.bundles.includes(x)).filter(C=>Ym(C.id,x)).map(C=>C.id),{confirmed:S}=await U_({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 iR({deleteFromRemoteWorkspaceIds:$})}catch(C){alert(`Failed to delete bundle: ${C.message}`)}return}if(!c.currentFile)return;let f=c.currentFile,m;try{m=await _c([f])}catch(x){alert(`Couldn't read reports to analyze triage impact: ${x.message}`);return}let h=Y().filter(x=>Array.isArray(x.reports)&&x.reports.includes(f)).filter(x=>gs(x.id,f)).map(x=>x.id),b=h.length>0,y=zc(f)?"links file":"report",{confirmed:w,triage:v}=await H_({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 oR({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()&&Pa&&G.setServerUrl(Pa),G.setEnabled(!0)):G.setEnabled(!1);return}if(e.target.closest('[data-action="manage"]')){B?.querySelector("#user-menu")?.hidePopover?.(),Ro("manage");return}if(e.target.closest('[data-action="view-as-stop"]')){B?.querySelector("#user-menu")?.hidePopover?.(),qk(c.managedSession?.csrfToken);return}if(e.target.closest('[data-action="my-reviews"]')){B?.querySelector("#user-menu")?.hidePopover?.(),te.navigate({view:"reviews"});return}if(e.target.closest('[data-action="managed-logout"]')){Kk(c.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){Ar.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",Ar.classList.contains("collapsed")?"1":"0")}catch{}}}var KB={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 qB(e){Ut=e.target.value.length>0,Tr=e.target.value.trim().toLowerCase(),H()}var YB={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};function xR(){return G.getServerUrl()||Pa?Y().length>0:!1}function SR(){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"),XB(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`${Q_(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">${Q_(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">${FB}<span>Log out</span></button>`,n)}function XB(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 Q_(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> ${Dm()||c.managedSession?.role==="none"?g:u`<img alt="" src="${r}" @error="${JB}">`}</span>`}function JB(e){e.currentTarget.classList.add("broken")}function CR(){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 ZB(){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","")),k_()}function fn(e){let t=B?.querySelector("#sync-status");if(!t)return;if(CR(),ZB(),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),SR();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=xR(),o=pt()!=null;if(r&&o&&G.isEnabled()&&ra().catch(d=>{console.warn("sync: load failed",d)}),r&&o&&!G.getServerUrl()&&Pa&&G.isEnabled()&&G.setServerUrl(Pa),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=YB[s]??"")}G.onStatusChange(fn);var Zb=!1,ry=!1;async function _R(){if(!G.persistenceDegraded||ry||Zb)return;Zb=!0;let{shown:e}=await G_();if(Zb=!1,e){ry=!0;return}G.persistenceDegraded&&setTimeout(_R,1500)}G.onPersistenceDegraded(e=>{fn(),e?_R():ry=!1});var Qb=!1,oy=!1;async function RR(){if(!G.proxyAuthRequired||oy||Qb)return;Qb=!0;let{shown:e,reload:t}=await K_();if(Qb=!1,!e){G.proxyAuthRequired&&setTimeout(RR,1500);return}oy=!0,t&&location.reload()}G.onProxyAuthRequired(e=>{fn(),e?RR():oy=!1});function QB(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 Nf(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 Iu(){for(let e of B.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function TR(e){return e.dataTransfer.types.includes(dy)||e.dataTransfer.types.includes(za)}function e2(e){let t=e.target.closest(".file-item[data-bundle-integrity]");if(t){if(t.classList.contains("bundle-missing")){e.preventDefault();return}let r=t.dataset.bundleIntegrity;e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(za,r),e.dataTransfer.setData(ny,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r),t.classList.add("dragging"),Ru=!0,H();return}let n=e.target.closest(".file-item[data-file]");n&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(dy,n.dataset.file),e.dataTransfer.setData(ny,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),_u=!0,H())}function t2(){for(let e of B.querySelectorAll(".dragging"))e.classList.remove("dragging");Iu(),(_u||Ru)&&(_u=!1,Ru=!1,H())}function n2(e){if(!TR(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),n=B.querySelector(".dragging")?.closest("[data-workspace-id]")?.dataset.workspaceId??null,s=t&&n&&t.dataset.workspaceId===n||!t&&!n;if(e.dataTransfer.dropEffect=s?"none":"move",Iu(),!s)if(t){let i=t.dataset.workspaceId;for(let a of B.querySelectorAll(`[data-workspace-id="${CSS.escape(i)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(za)?"[data-default-bundles]":"[data-default-reports]",l=B.querySelector(a);l&&l.classList.add("drag-over")}}function r2(e){B.contains(e.relatedTarget)||Iu()}async function o2(e){if(!TR(e))return;e.preventDefault(),e.stopPropagation(),Iu();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(ny)||null;if(e.dataTransfer.types.includes(za)){let i=e.dataTransfer.getData(za);if(!i)return;if(r&&r!==n&&Ym(r,i)){let a=(c.bundles??[]).find(d=>d.integrity===i)?.name??i,l=Y().find(d=>d.id===r),{confirmed:p}=await V_({name:a,workspaceName:l?.name??""});if(!p)return;try{await Qc(r,i)}catch(d){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,d)}}n&&await io(i,n),r&&r!==n&&await zf(i,r),H();return}let o=e.dataTransfer.getData(dy);if(!o)return;if(r&&r!==n&&gs(r,o)){let i=Y().find(l=>l.id===r),{confirmed:a}=await j_({name:o,workspaceName:i?.name??""});if(!a)return;try{await Zc(r,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,l)}}n&&await 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,sy=null,Se=0,eR=0,Gs=null,So=!0,Co=!0,pn=!1,Da=null;async function Au({forgetLastView:e=!0,resetNavigation:t=!0}={}){te.reset({force:t}),Da?.remove(),Da=null;let n=++Se;if(Co=!0,pn=!1,vk(),Nm(),$o(),Tu(),Xc(c.serverMode!=="e2e"),G.setForcedOff(!0),G.setProtocolLocked(c.serverMode!=="e2e"||!!It),sR({forgetLastView:e}),c.triage.clear(),_()){let r=_o();if(Dm()&&(await r,n!==Se))return}else{if(c.managedSession=null,c.managedTeams=[],await Ci(),n!==Se||(await Ji(),n!==Se))return;Ef()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),Mu(),CR(),fn(G.status),O(),await H()}async function oX(e){if(e!==void 0&&!Pw(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 P();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 Au({forgetLastView:!1}))}async function s2(){let e=It,t=sy;It=null,sy=null,wk(),Object.assign(c,e),await Au({forgetLastView:!1}),t&&ko(t)}function ko(e,{runtime:t=!0}={}){if(It){sy=e;return}Cu(!1);let n=pt()!=null,r=_(),o=c.serverMode;vn()&&e.managed&&(c.serverModeSelection="managed"),ic(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),Mu(),Xc(c.serverMode!=="e2e"),G.setProtocolLocked(c.serverMode!=="e2e"),Sp(e),r!==_()){Au({forgetLastView:!1,resetNavigation:n&&!vn()&&!Ko(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}fn(G.status),s&&c.serverMode==="e2e"&&xR()&&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}),_()&&_o()}function _o(){if(Gs?.generation===Se)return Gs.promise;So=!0;let e={generation:Se,promise:null};return Gs=e,e.promise=i2().finally(()=>{Gs===e&&(Gs=null,H())}),e.promise}async function i2(){let e=Se,t=++eR,n=()=>e===Se&&t===eR&&_();try{let r=c.managedSession,o=await Ck({fallback:r});if(!n()||(c.managedSession=o,So=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&(Co=!0),H(),$k(o),r&&(r.id!==o?.id||r.role!==o?.role)?(c.managedTeams=[],c.bundles=[],$o(),Tu(),te.reset(),At({history:!1})):Object.hasOwn(di,c.currentView)&&Mr(c.currentView)&&O({animate:!1}),SR(),tR(),!await Eu(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(d2,{onCancel:c2})}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(So||Co)&&(So=!1,Co=!1,H())}}b_((e,t,n)=>Eu(e,{strict:!0,signal:t,revision:n}));var a2=u_(_k),ey=0;async function Eu(e,{strict:t=!1,signal:n=Le(),reuse:r=!1,revision:o=null}={}){let s=Se,i=c.managedSession,a=await a2({generation:s,session:i,signal:n,reuse:r,revision:o}),l=a??(t?null:c.managedTeams);if(n.aborted||l===null||!e()||s!==Se||!_())return!1;let p=c.managedTeams.find(h=>h.id===c.currentManagedTeam)?.name,d=kk(l);c.managedTeams=l;let f=a===null?ey:++ey;Co=!1;let m=yr(c);if(a!==null&&m&&!pn){let h=me(),b=()=>e()&&!n.aborted&&!pn&&f===ey&&h===me()&&s===Se&&c.managedSession?.id===i?.id&&c.managedSession?.role===i?.role&&_()&&yr(c)===m,y;try{y=await c_(c,l,{fetchCatalog:()=>Pm({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){xo=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(l_(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;xo=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 cy(n))}var l2=new Set(["admin-users","manage-repos","manage-repo-risk","manage-teams","manage-import","manage-deduplication"]),xo=null;function Mr(e){let t=c.managedSession?.role;return e==="manage-links"&&!c.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!l2.has(e)||t==="admin")}var iy=0;function c2(){++iy,pn=!1,Oe();let e=Se;Eu(()=>e===Se&&_(),{reuse:!0})}async function d2(e,t){let n=++iy;pn=!0;try{return await u2(e,t)}finally{n===iy&&(pn=!1,H())}}async function u2(e,t){let n=xo===me()?xo:null;if(Oe(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&!await Eu(t,{reuse:!0}))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!Mr("manage-bundles")||(r=await Pm(),!t()||!_()))||(e=Nw(e,c.managedTeams,r),!e))return!1;let o=n!==null&&xo===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-IISEF2BZ.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?(xo=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 rR(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let i=e.teamId==null?r.map(br):As(c.managedTeams);if(!await d_(e,i,t,H))return!1;let{compareId:a,compareMode:l,...p}=e;return Xe({...p,bundleTab:c.bundleDetailsTab,...Og(c)},c.managedTeams,r)}if(e.view==="home")return At({history:!1});if(e.view==="npm")return _1(e,t,H);if(e.view==="reviews")return c.managedSession.publicShare?!1:(Bt(),c.currentView="reviews",c.currentManagedTeam=null,c.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),O({animate:!1}),H(),e);if(e.view==="manage-deduplication"&&e.linkId)return Mr(e.view)&&await nR(e.linkId);if(Object.hasOwn(di,e.view))return Ro(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}),xo=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",()=>{_o()});document.addEventListener("managed-feed-closed",()=>{So=!0,$o(),Tu(),At({history:!1}).then(()=>_o()),Ge("Workspace access changed. Refreshing your session.")});async function Ro(e,t={}){if(t.history!==!1&&_()&&(te.active||await _o(),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 P();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(),_o(),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"&&Ro(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})});var p2;function Tt(){return p2??=f2().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function f2(){let e=pt();if(e){ic(e.mode),c.managed=e.managed,Dl().then(o=>{if(o&&o!=="standalone")return ko(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Cu(!wi());let t=Dl(),n=await xp(t,wi()?0:3e3),r=pt();if(r)return n&&n!=="standalone"?ko(n):ko(r,{runtime:!1});if(n&&n!=="standalone")return ko(n);n==="standalone"&&Bl(),c.serverMode="standalone",c.serverModeConfig=null,c.serverModeSelection=null,Tn(n===null),Xc(!0),Cu(!1),fn(G.status),H(),n===null&&t.then(o=>{let s=pt(),i=o&&o!=="standalone"?o:s??o;if(i==="standalone"){if(Bl(),It){It.serverMode="standalone",It.serverModeConfig=null,It.serverModeSelection=null,It.localMode=!1;return}return Tn(!1),fn(G.status),H()}if(i)return ko(i,{runtime:i!==s})}).catch(o=>console.warn("server mode probe:",o))}function m2(){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 g2(e){Ar=e,B=e.renderRoot,ty=B.querySelector("#file-list"),x_(B.querySelector("#encryption-toggle")),I_(B.querySelector("#storage-status")),B.addEventListener("click",Z_),B.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),Z_(t))}),B.addEventListener("dblclick",QB),B.addEventListener("dragstart",e2),B.addEventListener("dragend",t2),B.addEventListener("dragover",n2),B.addEventListener("dragleave",r2),B.addEventListener("drop",o2),bi(B,KB),B.querySelector("#sidebar-search-input")?.addEventListener("input",qB),m2(),fn(G.status),pt()||Cu(!wi()),H(),G.onServerInfo(t=>{if(c.serverMode!=="e2e")return;let n=pt(),r=n&&{...n,...c.deepviewScanServer?{deepviewScanServer:c.deepviewScanServer}:{}};return ko(kp(r,t))}),Tt(),c.serverMode==="managed"&&_o()}var ay=class extends Et{static styles=[D(v_),D(w_)];render(){return u`<div class="sidebar-header"><h2 class="brand"><button class="brand-button" type="button" data-action="go-home"><span class="brand-name">Triage</span></button> <span class="brand-tag" data-action="toggle-client-mode">${Jt()}</span></h2><button id="encryption-toggle" type="button" hidden></button> <button id="sidebar-toggle" type="button" aria-label="toggle sidebar"><svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M2 4h12v1.5H2zM2 7.25h12v1.5H2zM2 10.5h12V12H2z"/></svg></button></div><button id="sidebar-home" class="rail-item" type="button" data-action="go-home" aria-label="Home" data-tooltip="Home"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2.5 7.5 8 3l5.5 4.5M4 6.5V13h3V9.5h2V13h3V6.5"/></svg></button><div class="sidebar-search"><svg class="sidebar-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg> <input id="sidebar-search-input" type="search" placeholder="Search reports…" aria-label="Search reports" autocomplete="off"><sidebar-view-button kind="packages"></sidebar-view-button><sidebar-view-button kind="repositories"></sidebar-view-button></div><ul id="file-list"></ul><ul id="sidebar-rail"></ul><button id="storage-status" type="button" hidden><span class="storage-dot" aria-hidden="true"></span> <span class="storage-label"></span></button><div id="view-as-status" role="status" hidden></div><div class="sidebar-actions"><sidebar-delete-current></sidebar-delete-current><button id="sync-status" type="button" data-status="off"><span class="sync-dot" aria-hidden="true"></span> <span class="sync-label">Sync off</span></button> <button id="auth-status" type="button" hidden></button> <span id="public-status" hidden>Public access link · Read only</span> <button id="manage-status" type="button" hidden data-action="manage" aria-label="Manage">${W(il)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){g2(this)}};customElements.define("app-sidebar",ay);async function MR(e){let t=await yl(e),n=await hm(t);if(n.kind==="reports")return{kind:"reports",reports:n.reports};let r;if(n.kind==="encrypted"){if(r=await Wc({tryPassword:s=>wl(t,s)}),!r)return null}else r=vl(n.text);let o=await gm(r,{conflictResolver:async(s,i)=>{try{return await Kc(s,i,{title:"Triage conflicts on import",intro:"disagree with your local triage on",trailingNote:"Reports and non-conflicting triage were already merged; pick which side to keep for these disagreements.",importedSideLabel:"Apply imported"})}catch{let a=s.length;return alert(`Imported ${e.name}. Kept your local triage on ${a} conflicting entr${a===1?"y":"ies"} because another dialog is open \u2014 re-drop the file to pick again.`),null}}});return(c.currentFile||c.currentWorkspace)&&O(),{kind:"workspace",workspace:o}}var uy=class extends N{static styles=[...N.styles,D(ot)];static properties={workspaceId:{type:String},items:{type:Array},_running:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._running=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="download"]')?.focus()}_onClose=()=>this._finish({downloaded:[],failed:[]});_onCancel=()=>this._finish({downloaded:[],failed:[]});_fail(t,n,r,o){t.push({kind:r,identifier:n.identifier,reason:o}),this._errors=[...this._errors,{label:lr(n),reason:o}]}_onDownload=async()=>{if(this._running)return;this._running=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{if(r.kind==="bundle"){let s=await k0(this.workspaceId,r.identifier);if(!s.ok){this._fail(n,r,"bundle",s.reason??"unknown");continue}await io(r.identifier,this.workspaceId),t.push({kind:"bundle",identifier:r.identifier});continue}let o=await $0(this.workspaceId,r.identifier);if(!o||!o.ok){this._fail(n,r,"report",o?.reason??"sync is not available");continue}t.push({kind:"report",identifier:r.identifier})}catch(o){this._fail(n,r,r.kind,o?.message??String(o))}if(this._running=!1,this._done=!0,t.some(r=>r.kind==="report"))try{c.currentWorkspace===this.workspaceId&&await Ks(this.workspaceId)}catch{}n.length===0&&this._finish({downloaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Vc(this.items),o=n?u`Download <strong>"${lr(this.items[0])}"</strong> from the workspace's remote inventory?`:u`Download <strong>${t}</strong> remote ${r} into this workspace?`,s=n?g:jc(this.items),i=this._running?n?"Downloading\u2026":`Downloading ${t} ${r}\u2026`:n?"Download":`Download ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Download from remote</h3></header><p class="lwd-body">${o}</p>${s} ${Gc(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-download-dialog",uy);function Fu({workspaceId:e,items:t}={}){return re("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}function Lu(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 py(e,t){return t==="findings"?e.title:u`<button type="button" class="workspace-title-link" data-action="workspace-findings">${e.title}</button>`}function Va(e,t,n){if(!e)return g;let r=e[t].length;if(t==="bundles"&&r===0)return g;let o=n===`workspace-${t}`;return u`<button type="button" class="${`files-toggle-btn${o?" active":""}`}" data-action="${`workspace-${t}`}" aria-pressed="${String(o)}">${`${r} ${r===1?t.slice(0,-1):t}`}</button>`}function ja(e){return new Set(e.flatMap(t=>t?.source==="links"?[]:Object.keys(t?.tree??{}))).size}function fy(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 IR(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>${py(e,r)}${Va(e,"reports",r)}${Va(e,"bundles",r)}${fy(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 AR(e,{fetchReports:t,signal:n,isCurrent:r,render:o}){let s=e.currentView;if(!["workspace-reports","workspace-bundles"].includes(s)||!r()||n.aborted)return!0;let i=e.managedTeams.find(d=>d.id===e.currentManagedTeam);if(!i)return!0;let a=e.managedSession,l=()=>!n.aborted&&r()&&e.currentView===s&&e.managedSession===a&&e.currentManagedTeam===i.id&&e.managedTeams.find(d=>d.id===i.id)===i,p=await new Promise(d=>{let f=h=>{n.removeEventListener("abort",m),d(h)},m=()=>f(null);n.addEventListener("abort",m,{once:!0}),Promise.resolve().then(()=>n.aborted?null:t(i.id,{signal:n})).then(f,()=>f(null))});return l()?(e.workspaceContentFileCount=p?ja(p.map(d=>d.data)):0,o(),p!==null):!0}var To="deepview.lastFile";function ly(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"&&up.has(t)?` ${t}`:"";Me(To,`b:${e}${r}`).catch(()=>{})}var ne=e=>e!==me();function h2(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Ga(e){return await h2(),e!==null&&ne(e)?!1:(O(),xg(c.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!ne(e)).catch(()=>{}),!0)}function Nu(){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),Jm(t.workspaceId))}function my(){be.classList.remove("active"),be.replaceChildren(),ut.classList.remove("hidden"),document.title="DeepView"}function ER(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function gy(e){let t=FR(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function FR(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function Ou({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(!ER(l))throw l;return await Xt(e,t),n.add(e),{name:e,content:t}}if(r===t)return{name:e,content:t};let s=Y().filter(l=>Array.isArray(l.reports)&&l.reports.includes(e)).filter(l=>gs(l.id,e)),i=await a_({name:e,workspaceNames:s.map(l=>l.name),existingNames:n});if(i.action==="cancel")return null;if(i.action==="rename"){let l=i.newName;return await Xt(l,t),n.add(l),{name:l,content:t}}let a;if(s.length>0)try{a=await x0(e)}catch(l){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,l)}try{await Xt(e,t),s.length>0&&await y2(e,s)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function b2(e,t){let n=typeof t?.github=="string"?t.github:"";if(n)try{await sf(e,n)}catch(r){console.warn(`Import: failed to adopt the repository "${n}" for "${e}":`,r)}}async function y2(e,t){let n;try{n=await Cn(e)}catch(r){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,r);return}for(let r of t)try{await sa(r.id);let o=await Jc(r.id,e,n);o&&o.ok===!1&&console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}): ${o.reason??"unknown"}`)}catch(o){console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}):`,o)}}async function hy(e){if(e=[...e],e.length===0||(await Tt(),_())||(await Su(),_()))return;let t=null,n=null,r=new Set,o=new Set(await ce()),s=[];for(let i of e)try{let a=FR(i.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let f=await MR(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 Ou({name:m.name,content:m.content,existingNames:o});b&&(Ue(b.name,h.count,h.source),await b2(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(gy(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=Vw(p,i.name);if(d)for(let f of d){let{count:m,source:h}=Ve(f.content),b=await Ou({...f,existingNames:o});b&&(Ue(b.name,m,h),t={name:b.name,content:b.content})}else if(Rw(p,a)==="codex"){let f=_w(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 Ou({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 Ou({name:i.name,content:p,existingNames:o});if(!m)continue;Ue(m.name,f.count,f.source),t={name:m.name,content:m.content}}}catch(a){alert(`Failed to load ${i.name}: ${a.message}`)}if(s.length>0){let i=s.length;alert(`Skipped ${i} report${i===1?"":"s"} no parser recognised: ${s.join(", ")}`)}await H(),t?await Ua(t.name,t.content):n&&(gr(n),ly(n,c.bundleDetailsTab),O(),await H(),gd(n)),xg(r).catch(()=>{})}async function Ua(e,t,{workspaceId:n}={}){if(_())return;let r=Oe();c.currentManagedTeam=null,c.currentManagedReport=null,c.currentReportWorkspace=Ss(e,n);let o=new Set(Y().filter(i=>Array.isArray(i.reports)&&i.reports.includes(e)).map(i=>i.id));if(qs(o),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=e,c.currentWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),c.repoUrl=Ze(e),c.repoEditing=!1,Nu(),Me(To,Sc(e,c.currentReportWorkspace)).catch(()=>{}),t===void 0){try{t=await fe(e)}catch(i){if(ne(r))return;if(i&&i.message?.includes("vault locked")){if(await $u()&&!ne(r)){await Ua(e);return}ne(r)||(c.currentFile=null,await H());return}if(ER(i)){let a=Y().find(l=>Array.isArray(l.reports)&&l.reports.includes(e)&&gs(l.id,e));if(a)try{if(await sa(a.id),ne(r))return;let l=await Fu({workspaceId:a.id,items:[{kind:"report",identifier:e}]});if(ne(r))return;if(l?.downloaded?.some(p=>p.kind==="report"&&p.identifier===e)){await Ua(e);return}}catch(l){if(console.warn(`Re-download prompt for missing "${e}" failed:`,l),ne(r))return}ne(r)||(c.currentFile=null,await H());return}alert(`Failed to read ${e}: ${i.message}`),c.currentFile=null,await H();return}if(ne(r))return}let s=qn(t);if(s?(c.currentLinks={name:e,...s},c.currentView="links",O()):await Bu(e,t,r),!ne(r)){for(let i of o)G.openSession(i),G.refreshSession(i),sa(i);return await H(),!0}}function nR(e){return c.managedSession?.role!=="admin"?!1:Ir({id:null,reports:[{id:e}]},e,{history:!1,deduplication:!0})}function cy(e=Le()){let t=Le();return AR(c,{fetchReports:Wm,signal:AbortSignal.any([e,t]),isCurrent:()=>_()&&Le()===t,render:()=>O({animate:!1})})}async function rR(e,t,{history:n=!0}={}){if(t!=="reports"&&t!=="bundles")return!1;let r=`workspace-${t}`,o=_(),s=o?c.managedTeams.find(p=>p.id===e):Y().find(p=>p.id===e);if(!s)return!1;if(o&&n&&te.active)return te.navigate(Xe({view:r,teamId:e},c.managedTeams));let i=o?`managed-team:${e}`:e,a=c.currentWorkspace===i?["workspace-reports","workspace-bundles"].includes(c.currentView)?c.workspaceContentFileCount:ja(c.reports):0,l=Oe();if(qs(new Set),qa({forgetLastView:!1}),c.currentWorkspace=i,c.workspaceContentFileCount=a,c.currentManagedTeam=o?e:null,c.currentView=r,o&&(c.bundles=As(c.managedTeams)),be.classList.add("active"),ut.classList.add("hidden"),document.body.classList.remove("report-fullscreen"),O({animate:!1}),document.querySelector("#main-content")?.scrollTo({top:0}),o||Me(To,`${t==="reports"?"wrs":"wbs"}:${e}`).catch(()=>{}),await H(),ne(l))return!1;if(O({animate:!1}),o)await cy();else{let p=await Promise.all((s.reports??[]).map(async d=>{try{return ap(await fe(d)).data}catch{return null}}));if(ne(l))return!1;c.workspaceContentFileCount=ja(p),O({animate:!1})}return!ne(l)}async function Ir(e,t=null,{history:n=!0,deduplication:r=!1}={}){if(!_()||!e||!Array.isArray(e.reports))return!1;if(n&&te.active)return te.navigate(Xe({view:"findings",teamId:e.id,reportId:t},c.managedTeams));if(t!==null&&!e.reports.some(m=>m.id===t))return!1;let o=Oe(),s=e.reports.find(m=>m.id===t&&m.visible===!1),i=Le(),a;try{a=r?await(await P()).fetchManagedLinkWorkspace(t,{signal:i}):await Wm(e.id,{reportId:s?.id??null})}catch(m){return ne(o)||Ge(m.message||"Could not load link report."),!1}if(ne(o))return!1;if(xk(),a===null||t!==null&&!a.some(m=>m.id===t))return Ge("Could not load all team reports. Please try again."),!1;let l=a.find(m=>m.id===t&&m.data.source==="links"&&Array.isArray(m.data.links)),p=a.filter(m=>t===null||l||m.id===t),d=p.filter(m=>m.data.source!=="links"||!Array.isArray(m.data.links));qs(new Set);let f=document.createElement("p");f.setAttribute("role","status"),f.textContent="Loading report triage\u2026",be.replaceChildren(f),be.classList.add("active"),ut.classList.add("hidden"),c.currentView="findings",c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=t===null?null:a.find(m=>m.id===t).filename,c.currentWorkspace=t===null?`managed-team:${e.id}`:null,c.currentManagedTeam=e.id,c.currentManagedReport=t,A$(e.id,a),c.managedReports=p.map(m=>({id:m.id,filename:m.filename})),c.managedComments.clear(),c.managedIssues.clear(),c.managedReport=t===null?null:c.managedReports[0]??null,c.currentReportWorkspace=null,c.currentLinks=null,c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.repoUrl="",c.repoEditing=!1,Nu();for(let m of d)if(await Bu(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-TGANXVTA.js");if(ne(o))return!1;let b=async w=>{let v=m(c.currentManagedTeam,w);return(await Promise.all(d.flatMap(k=>[h(k.id,{renderView:!1,signal:w,readAnnotations:v}),xd(k.id,{signal:w,readAnnotations:v})]))).every(Boolean)&&!w.aborted&&!ne(o)},y=r?await b(Le()):await _r({hydrate:b});if(ne(o))return!1;if(!y)return await At({history:!1}),Ge("Could not load report annotations. Open the team or report again to retry."),!1}if(l){if(c.currentView="links",c.currentLinks={name:l.filename,groups:l.data.links,skipped:0,...r?{managedId:t}:{}},!await Ga(o))return!1}else if(d.length===0)Du();else if(aa(mo()),!await Ga(o))return!1;return _r(),await H(),!0}async function Ks(e){if(_())return;c.currentManagedTeam=null,c.currentManagedReport=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear();let t=Y().find(f=>f.id===e);if(!t)return;let n=Oe();qs(new Set([e])),c.currentView!=="findings"&&c.currentView!=="files"&&(c.currentView="findings"),dt("workspace",e),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.currentFile=null,c.currentWorkspace=e,c.currentReportWorkspace=null,c.currentLinks=null,c.repoUrl="",c.repoEditing=!1,Nu(),Me(To,`ws:${e}`).catch(()=>{}),t.reports.length===0&&my();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 Bu(t.reports[f],m,n,{renderView:!1})?i++:o=!1,ne(n)))return}i===0&&t.reports.length>0&&my(),o&&lo(t)?.appMode&&(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Ka());let a=c.reports.slice();A_(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 Ga(n))return}else Du();let p=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],d=p.map(f=>c[f]);F_(t,a,r,{complete:o,isCurrent:()=>!ne(n),onReady:async f=>{!f.appMode||c.currentWorkspace!==e||!["findings","files"].includes(c.currentView)||p.some((m,h)=>c[m]!==d[h])||(c.showRevalidation=!0,c.upstreamOnly=!1,c.revalidationDetailed=!1,Ka(),aa(mo()),await Ga(n))}}).catch(f=>console.warn("workspace App metadata:",f)),G.openSession(e),G.refreshSession(e),sa(e),await l}async function oR({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!c.currentFile)return;let n=Oe(),r=c.currentFile;os(r),Qr(r,"");for(let o of t)try{let s=await Zc(o,r);if(ne(n))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete '${r}' from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete '${r}' from workspace ${o} remote:`,s)}if(await Jo(r),!ne(n)&&(await Ui(r,null),!ne(n))){if(e==="wipe"){try{await Rc()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(ne(n))return}ne(n)||(qa(),await H())}}function qa({forgetLastView:e=!0}={}){Ux(),c.currentManagedTeam=null,c.currentManagedReport=null,c.currentFile=null,c.currentWorkspace=null,c.workspaceContentFileCount=0,c.currentReportWorkspace=null,c.currentLinks=null,c.managedReport=null,c.managedReports=[],c.managedComments.clear(),c.managedIssues.clear(),c.selectedBundle=null,c.selectedBundleWorkspace=null,c.scanSelection=null,c.bundleDetails=null,c.bundleDetailsTab="overview",c.bundleSourceFile=null,c.bundleSourceFindingIdx=null,c.selectedPackage=null,c.selectedPackageVersion=null,c.packageDetailsTab="overview",c.packageSlideTriage=null,c.packageSlideTransient=!1,c.expandedPackages.clear(),c.selectedRepository=null,c.repositoryDetailsTab="overview",c.repositorySlideTriage=null,c.repositorySlideTransient=!1,c.filesSelectedFile=null,c.tableSelectedGid=null,c.kanbanPopoverGid=null,c.kanbanExpandedColumn=null,c.focusGid=null,c.activeTabByGroup.clear(),c.reports=[],pr(),c.workspaceMerges=[],c.revalidateConflicts=new Map,c.repoUrl="",c.repoEditing=!1,c.shownTriage=null,c.currentView="findings",Nu(),e&&nr(To),my()}function sR(e){Oe(),qs(new Set),qa(e)}async function At({history:e=!0}={}){return e&&_()&&te.active?te.navigate({view:"home"}):(Oe(),qs(new Set),qa({forgetLastView:!_()}),await H(),!0)}async function iR({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!c.selectedBundle)return;let t=Oe(),n=c.selectedBundle;for(let o of e)try{let s=await Qc(o,n);if(ne(t))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete bundle from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete bundle from workspace ${o} remote:`,s)}if(await jp(n),ne(t)||(await Pf(n,null),ne(t)))return;c.selectedBundle=null,c.selectedBundleWorkspace=null,c.bundleDetails=null,c.bundleSourceFile=null,c.bundleSourceFindingIdx=null;let r=ve(To);typeof r=="string"&&(r===`b:${n}`||r.startsWith(`b:${n} `))&&nr(To),vf(n),c.bundles=await Je(),!ne(t)&&(O(),await H())}async function aR(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),Jm(e),t==="delete"){for(let a of o){try{await Jo(a)}catch{}os(a),Qr(a,"")}if(n==="wipe")try{await Rc()}catch(a){console.warn("Skipped orphan-triage GC:",a)}}let s=c.currentWorkspace===e,i=t==="delete"&&c.currentFile!=null&&o.includes(c.currentFile);(s||i)&&qa(),await Of(e),await H()}async function Bu(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?_()?Bw(t,e):ap(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(l);let p=c.reports.length===0,d=yn(a)??[],f=d.flatMap(id);if(await Mw(f),i())return;let m=new Set(f.filter(Mv).map(k=>k.source??a.source??null)),h=s??a?.repo,b=De({repo:h}),y=b??(o==null?Ze(e):""),w=Ft(h),v=pl([{groups:d.map(id),tree:a.tree}]),x=[];for(let k of d){let $=id(k);if($.length===0)continue;let S=[];for(let C of $){let R={...C,_id:c.nextFindingId++,_repoFallback:y,_repoDirectory:w,_reportName:e,_depsDirectory:v,_managedReportId:o,_bundleHashes:a.bundleHashes??[]};Po(R,a),R._source=R.source??a.source??null,"isApp"in R||(R.isApp=jn(R,R._source)),R._sourcePass=m.has(R._source),R._analyzer=R._source??R.type??null,S.push(R)}x.push(S)}return Gn(x),c.reports.push({type:a.type||"analysis",source:a.source??null,fileName:e,_managedReportId:o,groups:x,repo:b,tree:a.tree??null,bundleHashes:a.bundleHashes??[]}),Wl(c.reports),Hl(c.reports)&&pr(),c.revalidateConflicts=J0(),Ka(),p&&(td(),aa(mo())),r&&await Ga(n),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}window.__loadFile=(e,t)=>Bu(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")&&hy(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"),hy(e.dataTransfer.files)});var mn=null;function w2(){_()||(mn||(mn=document.createElement("input"),mn.type="file",mn.multiple=!0,mn.hidden=!0,mn.addEventListener("change",()=>{let e=[...mn.files];e.length>0&&hy(e),mn.value=""}),document.body.append(mn)),mn.click())}ut.addEventListener("click",e=>{let t=e.target.closest("[data-managed-page]");if(t){Ro(t.dataset.managedPage);return}if(e.target.closest("[data-managed-login]")){Gk(c.managed?.loginPath);return}let n=e.target.closest("[data-managed-team]");if(n){let o=c.managedTeams.find(s=>s.id===n.dataset.managedTeam);o&&Ir(o);return}let r=e.target.closest("[data-landing-workspace]");if(r){Ks(r.dataset.landingWorkspace);return}e.target.closest(".drop-prompt-action")&&w2()});function LR(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 Pu=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=fp(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=LR(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?jw(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 OR(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 NR(e){Er(e);let t=await Je();return Er(e),cv(t,Y())}async function BR(e,t){Er(t);let n=await go(e.integrity,{name:e.filename},{sources:!1});return Er(t),dv(e,n)}async function DR(e){Er(e);let t=await ce(),n=[];for(let r of t){Er(e);let o=await fe(r);Er(e),n.push({name:r,content:o,fallbackRepo:Ze(r)})}return Er(e),uv(n,Y())}function PR({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?vp(o):vp(t)??(e==="127.0.0.1"?Rv:null)}async function zR(e,t,n){let r=Ge(e,{duration:0});t.addEventListener("abort",r,{once:!0});try{return await n()}finally{t.removeEventListener("abort",r),r()}}function Ya(){return PR({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:c.serverMode,localMode:c.localMode,deepviewScanServer:c.deepviewScanServer})}function Xa(e){return _()?!!e.managedId&&["admin","manage"].includes(c.managedSession?.role):!e.managedId&&!!Ya()}async function zu(e=null,{mode:t}={}){let n=c.selectedBundleWorkspace,r=me();if(await Tt(),r!==me()||e&&!Xa(e))return;if(_()){e&&await Ro("manage-scans",{bundleId:e.managedId,...t?{scanMode:t}:{}});return}if(!Ya())return;let o=At(),s=me();await o,!(!Ya()||s!==me())&&(c.scanSelection=e?{bundleId:e.integrity,...n?{repoId:n}:{},...t?{mode:t}:{}}:null,c.currentView="scan",O(),H())}var by=class extends Et{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=Ya(),this._access=new Pu(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>zR("Loading bundle\u2026",n,()=>BR(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=cm(()=>{this._savedAccess=ds()}),this._loadSource()}disconnectedCallback(){super.disconnectedCallback(),this._unsubscribeSavedAccess?.(),this._controller?.abort(),this._resetAccess()}async _loadSource(){this._controller?.abort();let t=this._controller=new AbortController;this._error=null;try{this._source=await zR("Loading bundles\u2026",t.signal,()=>NR(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=ds();let t=im(this._server);t&&(this._access.setKey(t.deepview),this._access.setProvider(t.provider),this._providerToken=t.token,this._access.connect())}async _saveOrForgetAccess(){if(this._savingAccess)return;let t=ds();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await lm(),this._resetAccess()):await am({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=ds()}catch{Ge(t?"Couldn\u2019t forget scan credentials. Try again.":"Couldn\u2019t save scan credentials. Try again.",{kind:"warning"})}finally{this._savingAccess=!1}}}_connect(t){t.preventDefault(),this._access.connect()}_setProvider(t){this._access.provider!==t&&(this._access.setProvider(t),this._providerToken="")}_setProviderToken(t){this._providerToken=t;let n=OR(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=sp`: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">${Gw(o)}</span><span>${s}</span></label>`)}</div></fieldset><label>Token<input type="password" name="provider-token" placeholder="Enter provider token" autocomplete="off" spellcheck="false" .value="${this._providerToken}" @input="${o=>this._setProviderToken(o.target.value)}"></label></div>`}</div></section>`}render(){return u`${this._error?u`<p role="alert">Couldn’t load saved bundles: ${this._error} <button @click="${()=>{this._loadSource()}}">Retry</button></p>`:g}<deepview-scan-page .selection="${this.selection}" scope-label="Workspace" .source="${this._source}" .sourceLoading="${this._source==null&&!this._error}" .loadBundle="${this._loadBundle}" .loadModels="${this._access.loadModels}" .canRun="${this._access.ready}" .loadReportSources="${DR}"><button slot="navigation" type="button" @click="${()=>{At()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",by);function Mu(){let e=document.querySelector("#drop-zone");if(!e)return;let t=e.querySelector(".local-scan-button");t||(t=document.createElement("button"),t.type="button",t.className="local-scan-button",t.innerHTML=`${Vn}<span>Scan</span>`,t.addEventListener("click",()=>{zu()}),e.append(t));let n=Ya();t.hidden=!n,document.querySelector("local-scan-page")?.setScanServer(n);let r=document.querySelector(".bundles-scan-button"),o=c.bundles?.find(s=>s.integrity===c.selectedBundle);r&&(r.hidden=!o||!Xa(o))}var WR="@preventive/triage";function yy(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 HR(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function UR(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 VR(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 jR(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:yy(n.name,n.version)}:{name:HR(t?.name??"bundle"),version:null,purl:null},rest:r}}function GR(e){return e??globalThis.crypto.randomUUID()}function PJ(e,t,{now:n=new Date,uuid:r}={}){let o=UR(e),{root:s,rest:i}=jR(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:${GR(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:WR}]},component:a},components:i.map(p=>{let d=yy(p.name,p.version);return{type:"library","bom-ref":d,name:p.name,version:p.version,purl:d}})};return`${JSON.stringify(l,null,2)}
|
|
184
|
+
`}function v2(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function zJ(e,t,{now:n=new Date,uuid:r}={}){let o=UR(e),{root:s,rest:i}=jR(o,t),a=HR(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=[v2(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,yy(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)}-${GR(r)}`,creationInfo:{created:l,creators:[`Tool: ${WR}`]},packages:f,relationships:m};return`${JSON.stringify(h,null,2)}
|
|
183
185
|
`}function $2(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 Wu(e,t,n){if(t){let s=$2(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 k2(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(`
|
|
184
|
-
`),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 x2(e,t){let n=[],r=0;for(let{path:o,lines:s,hits:i}of e.fileResults){let a=[];for(let{ln:l}of i){let p=t.ranges(s[l-1]);p.length!==0&&(a.push({ln:l,ranges:p}),r++)}a.length>0&&n.push({path:o,lines:s,hits:a})}return{fileResults:n,totalHits:r,truncated:!1}}var lt={tag:null,useRegex:!1,caseSensitive:!1,entries:[]};function qR(e,t,n,r,o,s=null){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let i=Wu(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?x2(p,i):k2(t,i,s??[...t.keys()].toSorted());return lt.entries.unshift({query:n,result:f}),lt.entries.length>8&<.entries.pop(),f}var S2=200,C2=28,_2=12;function R2(e,t){let n=t.length>0?t[0][0]:0,r=e.length-e.trimStart().length,o=n-r>C2?n-_2:0;return wy(e,t,o,S2)}function YR(e,t){let n=R2(e,t);return u`${n.clipped?u`<span class="bundle-search-clip">…</span>`:g}${vy(n.text,n.ranges)}`}function wy(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 vy(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 T2(e,t){let n=new Map(e.map(s=>[s,[...t.get(s)].map(([i,a])=>{let l=t.get(s),p=t.get(i),d=l.size<p.size?l:p,f=0,m=0;for(let h of d.keys())if(l.has(h)&&p.has(h)&&f++,++m===32)break;return{to:i,score:a*2+f}}).toSorted((i,a)=>a.score-i.score||t.get(i.to).size-t.get(a.to).size||i.to.localeCompare(a.to))])),r=[],o=new Set;for(let s of e){let i=[s];for(;i.length>0;){let a=i.pop();if(!o.has(a)){o.add(a),r.push(a);for(let{to:l}of n.get(a).toReversed())o.has(l)||i.push(l)}}}return r}function XR(e,t,n){let r=e.toSorted(),o=new Set(r),s=new Map,i=new Map(r.map(v=>[v,new Map]));for(let v of r){s.set(v,new Map);for(let x of t.get(v)??[])v===x||!o.has(x)||(s.get(v).set(x,{to:x,count:1}),i.get(v).set(x,(i.get(v).get(x)??0)+1),i.get(x).set(v,(i.get(x).get(v)??0)+1))}let a=Zv(r,s),l=r.map((v,x)=>({col:x%n,row:Math.floor(x/n)})),p=l.map(({col:v,row:x})=>({col:x%2?n-v-1:v,row:x})),d=(v,x)=>Math.abs(v.col-x.col)+Math.abs(v.row-x.row),f=v=>r.reduce((x,k)=>x+[...i.get(k)].reduce(($,[S,C])=>$+C*d(v.get(k),v.get(S)),0),0),m=new Map(r.map((v,x)=>[v,l[x]])),h=f(m);for(let v of[a,T2(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,Hu=32,Pn=20,xy=24,M2=20,$y=10;function JR(e,t){let n=d=>d&&(d.collapsed||d.members.length===1),r=e.map((d,f)=>e.length>5&&n(d)&&n(e[f+1])),o=0,s=0;e.forEach((d,f)=>{r[f]?s+=d.width:o+=d.width+(f===e.length-1?0:Pn)});let i=Math.min(t,gn*5+Pn*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:Pn),h}),width:l,height:Math.max(...e.map(d=>d.height))}}function ZR(e){let t=`M${e[0].join(",")}`;for(let n=1;n<e.length-1;n++){let[r,o]=e[n],[s,i]=e[n-1],[a,l]=e[n+1],p=Math.hypot(a-r,l-o),d=Math.hypot(r-s,o-i);if(!d||!p)continue;let f=Math.min(6,d/2,p/2);t+=` L${r-(r-s)/d*f},${o-(o-i)/d*f} Q${r},${o} ${r+(a-r)/p*f},${o+(l-o)/p*f}`}return`${t} L${e.at(-1).join(",")}`}var Sy=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1));function ky(e,t,n,r){let o=e.packages.find(d=>d.id===t),s=Sy(r),i=n?e.y-12:e.rowBottom;if(e.members.length===1||e.collapsed){let d=e.x+e.visibleWidth/2+s;return[[d,n?e.y-5:e.y+e.height],[d,i]]}let a=e.x+o.x+(n?0:gn),l=e.y+o.y+Fr/2+s/2,p=a+(n?-7-r.lane*6:3+r.lane*6);return[[a+(n?-4:0),l],[p,l],[p,i]]}function QR(e,t){let n=(a,l)=>{let p=e.get(a[l]),d=p.packages.find(f=>f.id===a[`${l}Package`]);return p.members.length===1||p.collapsed?[p.x+p.visibleWidth/2,p.y+p.height/2]:d?[p.x+d.x+gn/2,p.y+d.y+Fr/2]:[p.x+p.width/2,p.y+p.height/2]},r=(a,l,p=d=>n(d,l))=>{let d=new Map,f=Map.groupBy(t,m=>{let h=e.get(m[a]);return h.collapsed?h:m[`${a}Package`]});for(let m of f.values())m.toSorted((b,y)=>{let[w,v]=p(b),[x,k]=p(y);return(b.bypassLane??w)-(y.bypassLane??x)||v-k||b[`${l}Package`].localeCompare(y[`${l}Package`])||b[`${a}Package`].localeCompare(y[`${a}Package`])}).forEach((b,y)=>d.set(b,{count:m.length,index:y}));for(let m of Map.groupBy(t,h=>h[a]).values())m.toSorted((b,y)=>{let[w,v]=n(b,a),[x,k]=n(y,a);return w-x||v-k||Sy(d.get(b))-Sy(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=ky(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=ky(l,a.fromPackage,!1,o.get(a)),f=ky(p,a.toPackage,!0,s.get(a));return{edge:a,end:f,start:d,rowBottom:l.rowBottom,x1:d.at(-1)[0],x2:a.bypassLane??f.at(-1)[0]}});for(let a of Map.groupBy(i,l=>l.rowBottom).values())for(let l of[!0,!1]){let p=a.filter(d=>d.x2<d.x1===l).toSorted((d,f)=>(l?1:-1)*(d.x1-f.x1||d.x2-f.x2));p.forEach((d,f)=>{d.bendY=d.rowBottom+9+12*f/Math.max(1,p.length-1)})}return i.map(({edge:a,end:l,start:p,x1:d,x2:f,bendY:m})=>{let h=[[d,m],[f,m]],{bypassLane:b,...y}=a;return b!==null&&h.push([f,l.at(-1)[1]]),{...y,path:ZR([...p,...h,...l.toReversed()])}})}function I2(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+Pn){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+xy){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*(Pn/2-3),d=t.x+s/2+i*8,f=r>0||r===0&&n>0,m=t.y+(f?-10:o+10),h=t.y+(f?-4:o+4);return ZR([[a,l],[p,l],[p,m],[d,m],[d,h]])}function eT(e,t,n,r=1184,o=!1){if(o)return{id:e,members:t,collapsed:o,packages:[],internalEdges:[],width:gn+$y*2,height:Fr};let s=t.length>1,i=Math.max(1,Math.floor((r-$y*2+Pn)/(gn+Pn))),a=s?Math.min(i,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,l=s?$y:0,p=Math.ceil(t.length/a),d=s?M2:0,m=(s?XR(t,n,a):[{id:t[0],col:0,row:0}]).map(y=>({id:y.id,x:l+y.col*(gn+Pn),y:l+d+y.row*(Fr+xy)})),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:I2(h.get(y),h.get(w))});return{id:e,members:t,collapsed:o,packages:m,internalEdges:b,width:a*gn+(a-1)*Pn+l*2,height:p*Fr+(p-1)*xy+l*2+d}}function Cy(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 tT=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function nT(e,t){let n=e?.bundle?.modules.get(t);if(!t||t==="."||!n)return null;let r=Cy(t,n);return{packageKey:r.ecosystem?tT(r):r.name,packageGroup:Kr("",{packageDir:t})}}function rT(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=Vo(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,Cy(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 Ml(e))if(f.has(k))for(let S of $){if(!f.has(S))continue;let C=l.get(k),R=l.get(S);if(Jv(k,S,R===".",C==="."))m(C,R);else if(C!==R){let L=a.get(R);L.excludedImporters??=new Set,L.excludedImporters.add(C)}}let{roots:h,appImports:b}=Il(e,f,k=>l.get(k),l,p);b.length>0&&!a.has(".")&&a.set(".",Cy("."));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 $=tT(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 oT(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:o,componentOf:s}=Qv(r,e.imports),i=o.map(()=>new Set),a=[];for(let[$,S]of e.imports){let C=s.get($);for(let R of S){let L=s.get(R);C!==L&&(i[C].add(L),a.push({from:C,to:L,fromPackage:$,toPackage:R}))}}let l=o.map(()=>0),p=o.map(()=>0);for(let $ of i)for(let S of $)p[S]++;let d=o.flatMap(($,S)=>p[S]===0?[S]:[]);for(let $=0;$<d.length;$++){let S=d[$];for(let C of i[S])l[C]=Math.max(l[C],l[S]+1),--p[C]===0&&d.push(C)}let f=i.some(($,S)=>[...$].some(C=>l[C]!==l[S]+1)),m=t-Hu-24-(f?56:0),b=[...Map.groupBy(o.map(($,S)=>{let C=$.length>10;return{...eT(S,$,e.imports,m,C&&!n.has(S)),collapsible:C}}),$=>l[$.id])].toSorted(([$],[S])=>$-S).map(([,$])=>JR($,m)),y=b.reduce(($,S)=>Math.max($,S.width+24),240),w=new Map,v=12;for(let{groups:$,width:S,height:C}of b){for(let R of $)w.set(R.id,{...R,x:R.x+(y-S)/2,y:v,rowBottom:v+C});v+=C+36}let x=0,k=QR(w,a.map($=>{let S=l[$.to]===l[$.from]+1?null:y+8+x++%4*10;return{...$,bypassLane:S}}));return{boxes:[...w.values()],componentOf:s,edges:k,width:y+(x?56:0),height:Math.max(0,v-24)}}function sT(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 iT=`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}
|
|
185
|
-
`;var _y=e=>Sn(e.own?"__own__":e.name),
|
|
186
|
+
`),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 x2(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 KR(e,t,n,r,o,s=null){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let i=Wu(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?x2(p,i):k2(t,i,s??[...t.keys()].toSorted());return lt.entries.unshift({query:n,result:f}),lt.entries.length>8&<.entries.pop(),f}var S2=200,C2=28,_2=12;function R2(e,t){let n=t.length>0?t[0][0]:0,r=e.length-e.trimStart().length,o=n-r>C2?n-_2:0;return wy(e,t,o,S2)}function qR(e,t){let n=R2(e,t);return u`${n.clipped?u`<span class="bundle-search-clip">…</span>`:g}${vy(n.text,n.ranges)}`}function wy(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 vy(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 T2(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 YR(e,t,n){let r=e.toSorted(),o=new Set(r),s=new Map,i=new Map(r.map(v=>[v,new Map]));for(let v of r){s.set(v,new Map);for(let x of t.get(v)??[])v===x||!o.has(x)||(s.get(v).set(x,{to:x,count:1}),i.get(v).set(x,(i.get(v).get(x)??0)+1),i.get(x).set(v,(i.get(x).get(v)??0)+1))}let a=Zv(r,s),l=r.map((v,x)=>({col:x%n,row:Math.floor(x/n)})),p=l.map(({col:v,row:x})=>({col:x%2?n-v-1:v,row:x})),d=(v,x)=>Math.abs(v.col-x.col)+Math.abs(v.row-x.row),f=v=>r.reduce((x,k)=>x+[...i.get(k)].reduce(($,[S,C])=>$+C*d(v.get(k),v.get(S)),0),0),m=new Map(r.map((v,x)=>[v,l[x]])),h=f(m);for(let v of[a,T2(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,Hu=32,Pn=20,xy=24,M2=20,$y=10;function XR(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:Pn)});let i=Math.min(t,gn*5+Pn*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:Pn),h}),width:l,height:Math.max(...e.map(d=>d.height))}}function JR(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 Sy=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1));function ky(e,t,n,r){let o=e.packages.find(d=>d.id===t),s=Sy(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 ZR(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||Sy(d.get(b))-Sy(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=ky(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=ky(l,a.fromPackage,!1,o.get(a)),f=ky(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:JR([...p,...h,...l.toReversed()])}})}function I2(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+Pn){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+xy){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*(Pn/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 JR([[a,l],[p,l],[p,m],[d,m],[d,h]])}function QR(e,t,n,r=1184,o=!1){if(o)return{id:e,members:t,collapsed:o,packages:[],internalEdges:[],width:gn+$y*2,height:Fr};let s=t.length>1,i=Math.max(1,Math.floor((r-$y*2+Pn)/(gn+Pn))),a=s?Math.min(i,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,l=s?$y:0,p=Math.ceil(t.length/a),d=s?M2:0,m=(s?YR(t,n,a):[{id:t[0],col:0,row:0}]).map(y=>({id:y.id,x:l+y.col*(gn+Pn),y:l+d+y.row*(Fr+xy)})),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:I2(h.get(y),h.get(w))});return{id:e,members:t,collapsed:o,packages:m,internalEdges:b,width:a*gn+(a-1)*Pn+l*2,height:p*Fr+(p-1)*xy+l*2+d}}function Cy(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 eT=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function tT(e,t){let n=e?.bundle?.modules.get(t);if(!t||t==="."||!n)return null;let r=Cy(t,n);return{packageKey:r.ecosystem?eT(r):r.name,packageGroup:Kr("",{packageDir:t})}}function nT(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=Vo(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,Cy(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 Ml(e))if(f.has(k))for(let S of $){if(!f.has(S))continue;let C=l.get(k),R=l.get(S);if(Jv(k,S,R===".",C==="."))m(C,R);else if(C!==R){let L=a.get(R);L.excludedImporters??=new Set,L.excludedImporters.add(C)}}let{roots:h,appImports:b}=Il(e,f,k=>l.get(k),l,p);b.length>0&&!a.has(".")&&a.set(".",Cy("."));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 $=eT(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 rT(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:o,componentOf:s}=Qv(r,e.imports),i=o.map(()=>new Set),a=[];for(let[$,S]of e.imports){let C=s.get($);for(let R of S){let L=s.get(R);C!==L&&(i[C].add(L),a.push({from:C,to:L,fromPackage:$,toPackage:R}))}}let l=o.map(()=>0),p=o.map(()=>0);for(let $ of i)for(let S of $)p[S]++;let d=o.flatMap(($,S)=>p[S]===0?[S]:[]);for(let $=0;$<d.length;$++){let S=d[$];for(let C of i[S])l[C]=Math.max(l[C],l[S]+1),--p[C]===0&&d.push(C)}let f=i.some(($,S)=>[...$].some(C=>l[C]!==l[S]+1)),m=t-Hu-24-(f?56:0),b=[...Map.groupBy(o.map(($,S)=>{let C=$.length>10;return{...QR(S,$,e.imports,m,C&&!n.has(S)),collapsible:C}}),$=>l[$.id])].toSorted(([$],[S])=>$-S).map(([,$])=>XR($,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=ZR(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 oT(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 sT=`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}
|
|
187
|
+
`;var _y=e=>Sn(e.own?"__own__":e.name),iT=()=>Math.floor(Math.min(document.documentElement.clientWidth*.94,80*Number.parseFloat(getComputedStyle(document.documentElement).fontSize))),Ry=class extends N{static styles=[...N.styles,D(sT)];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=iT(),this.layout=rT(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=nT(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(iT()!==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":_y(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=oT(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":""}
|
|
186
188
|
style=${le({"--connection-color":_y(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}
|
|
187
189
|
class=${i?a.from===r||a.to===r?"traced":"subdued":""}
|
|
188
|
-
style=${le({"--connection-color":_y(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:Uo(this.packageGroup);return u`<dialog aria-labelledby="why-title" style="${le({"--graph-dialog-width":`${Math.max(480,this.layout.width+Hu)}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",Ry);function Uu(e){return re("why-dialog",e)}var E2=new Map,lT=new Map,cT=[];function Mo(e){if(!e?.managedId)return E2;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!==cT[s])&&(cT=r,lT=new Map),lT}var Ty=new WeakMap;function Ja(e){return Ty.has(e)||Ty.set(e,{reasons:Vo(e),selected:""}),Ty.get(e)}function Io(e,t=Ja(e).selected){return JSON.stringify([e.managedId??e.integrity,t])}var dT="deepview.advisories.proxyConsent";function My(){try{return localStorage.getItem(dT)==="1"}catch{return!1}}function TZ(){try{localStorage.setItem(dT,"1")}catch{}}function F2(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 uT(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 L2(e){if(e.bundle&&!uT(e))return!0;let t=Mo(e).get(Io(e,""));return t?.state==="ok"&&t.query.size===0&&t.skipped.length===0}function pT(e,t,n=!1){return!e||e.managedId&&!N2(e)||O2(e,t)<1||e.summary?.versionedPackages===0?!1:n?!0:gy(e.name)!=="stasis"?!1:!t||t.integrity!==e.integrity?!0:e.managedId?!t.bundle||uT(t):F2(t)}function O2(e,t){let n=t?.integrity===e.integrity&&t.bundle?t.bundle.version:e.summary?.stasisVersion;return Number.isSafeInteger(n)?n:1/0}function N2(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 B2(e){return Object.fromEntries([...e].map(([t,n])=>[t,[...n].toSorted()]))}var Iy=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function D2(e){return{...e,title:e.title||e.id,severity:e.severity??"unknown",cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function P2(e){let t=Array.isArray(e),n=t?Map.groupBy(e.map(D2),Iy):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 fT(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function z2(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(B2(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 ju(e,t){return mT(e,t)}function W2(e,t){return mT(e,t,!0)}async function mT(e,t,n=!1){if(!e?.integrity||!e.managedId&&!My())return;let r=Mo(e),o=Io(e),s=r.get(o);if(n){if(!fT(e,s))return;r.set(o,{...s,recheckingRepositories:!0,repositoryError:null}),t()}else if(s)return;let{reasons:i,selected:a}=Ja(e),l=e.managedId?new Map:tv(e,i.get(a)??null);n||r.set(o,{state:"loading",query:l});try{let p,d=[];if(e.managedId){let f=await Jk(e.managedId,void 0,a,n,n);l=Array.isArray(f.packages)?new Map(f.packages.map(m=>[Iy(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 z2(l):{};r.set(o,{state:"ok",byPackage:P2(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 MZ(e,t){if(!e?.integrity)return;let n=Mo(e),r=Io(e);n.get(r)?.state==="error"&&(n.delete(r),await ju(e,t))}var H2={critical:0,high:1,moderate:2,low:3,info:4};function Vu(e){return H2[e]??999}function U2(){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 gT(e,t=()=>{},n=null){let r=e?Ja(e):null,o=[...r?.reasons.keys()??[]].map(a=>({id:`reason:${a}`,label:a})),s=j2(e),i=!!e?.managedId&&!L2(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=ju(e,t);return t(),p}}"></bundle-scope-selector>`:g} ${i?V2(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} ${K2(e)}</div>`}function V2(e,t){if(!e?.managedId)return g;let n=Mo(e).get(Io(e)),r=!!n?.recheckingRepositories;return u`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!fT(e,n)}" aria-busy="${String(r)}" @click="${()=>W2(e,t)}">${r?"Rechecking\u2026":"Recheck against repositories"}</button>`}function j2(e){if(!e||!e.managedId&&!My())return g;let t=Mo(e).get(Io(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 G2(e,t){let n=t.query.size;return n===0&&t.skipped.length>0?u`No packages could be audited.`:u`No advisories for the ${n} ${t.skipped.length>0?"audited ":""}${n===1?"package":"packages"} in ${Ja(e).selected?"this scope":"this bundle"}.`}function K2(e){if(!e)return u`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!=="stasis"||!e.managedId&&!e.bundle)return u`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!e.managedId&&!My())return U2();let t=Mo(e).get(Io(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>${G2(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=>Vu(d.severity))),p=Math.min(...a.map(d=>Vu(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">${Iy(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:g}<ul class="bundle-advisories-list">${r.map(([o,s])=>q2(e,o,s,t.query.get(o),()=>Mo(e).get(Io(e))?.byPackage===t.byPackage))}</ul></div>`}function q2(e,t,n,r,o){let s=[...n].toSorted((a,l)=>{let p=Vu(a.severity)-Vu(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="${()=>Uu({details:e,packageKey:t,version:a,reason:Ja(e).selected,isCurrent:o})}">${a}</button>`)}</span>`:g}</div><ul class="bundle-advisories-rows">${s.map(a=>ou(a,({title:l,severity:p,details:d})=>uu({heading:l,severity:p,markdown:d,isCurrent:o})))}</ul></li>`}var Yu=e=>_()?[]:ff(e),Y2=()=>_()?0:mf(),Za=null,Ay=new WeakMap;function X2(e){if(Ay.has(e))return Ay.get(e);let t=gp(e),n=Ml(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 Ay.set(e,a),a}function CT(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 Yu(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=Yu(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 _T(e){let t=X2(e),n=Vo(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}=av(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)&&Yu(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:Kl(r,f),w=new Map;for(let[A,E]of o)w.set(E,A);let v=Ot(e),x=new Map(v?[...e.bundle.modules].map(([A,E])=>[A,{directory:A,version:typeof E.version=="string"?E.version:void 0}]):[]),k=A=>{let E=w.get(A)??A;return Kr(E,{packageDir:v?.get(E)})},$=i.filter(A=>k(A)==="__own__"),S=Il(e,o,k,v,t.origToStripped),C=new Set;for(let A of i)if(C.add(k(A)),C.size>=3)break;let R=C.size>=3,L=i;if(ee.focusedPkg){let A=i.filter(E=>k(E)===ee.focusedPkg);A.length>0?L=A:ee.focusedPkg=null}return ee.selected&&!Object.hasOwn(r,ee.selected)&&(ee.selected=null),{treeData:r,files:L,ownCounts:f,transitiveCounts:y,severitySets:m,colorSets:h,fileFindings:b,options:{pkgOf:k,packageInfoOf:A=>x.get(v?.get(w.get(A)??A))},strippedToOrig:w,canPackagesView:R,hasIssues:p,issuesShown:d,viewId:e.integrity??null,supportsLayers:!0,layerRoots:S,flowEntries:ee.bundleLayout==="flow"?lv(e,o,t.origToStripped,v):void 0,ownSourcePackages:sv(o,k,v),entryPackages:iv(e,o,k),ownSourceFiles:new Set($),reasons:[...n.keys()]}}function RT(){if(!Za)return;let e=Ms();e&&e.refreshSidebar(Za,{isBundleContext:!0,findingsJump:!_()})}function TT(){if(!Za)return;let e=Ms();e&&e.refreshTopPkgs(Za)}function MT(e){Za=e}function J2(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,nT(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)||Uo(a[0]).localeCompare(Uo(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=Uo(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="${()=>Z2(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 Z2(e,t){let n=c.currentManagedTeam,r=c.currentWorkspace,o=c.managedSession&&rt(c.managedSession);return Uu({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 Ny(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"?a_(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=J2(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 Fo of Ai(wt.fileHash,wt))Ce.set(Fo,(Ce.get(Fo)??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>`),tp=n.length>0?u`<ul class="bundles-sources-list">${I.map(V=>{let ue=n[V],wt=r[V],Fo=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">${Fo}</div>`:u`<button type="button" class="bundles-source-row" data-bundle-view-source="${ue}">${Fo}</button>`}</li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,np=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:tp,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:np,list:!0}):g} ${f}</div></div>`}var Ey=new Map,Fy=new Set,IT=()=>u`<button type="button" class="bundle-source-wrap-toggle" data-bundle-source-wrap hidden aria-pressed="${c.bundleSourceWrap?"true":"false"}" aria-label="Wrap lines" data-tooltip="Wrap lines">${Ax}</button>`;function Q2(e){let t=e?.status;return u`<button type="button" class="${q({"bundle-source-pretty-toggle":!0,"is-loading":t==="loading","is-error":t==="error"})}" data-bundle-source-pretty aria-pressed="${c.bundleSourcePretty?"true":"false"}" aria-busy="${t==="loading"?"true":g}" aria-label="Pretty-print" data-tooltip="${XS(e)}">${YS}</button>`}function Py(e,t,n,r,o,s){let i=ZS(e,t,n,r),a=i?n1(e,t,n,r,()=>{c.bundleSourceFile===n&&O()}):null,l=a?.status==="ready";return{pretty:l,toggle:i?Q2(a):g,content:l?a.text:r,fileFindings:l?[]:o,lineFindings:l?new Map:s}}var zn=null;function Gu(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function eD(e){requestAnimationFrame(()=>requestAnimationFrame(()=>{document.querySelector(`.bundle-code-main .bundle-source-lineno-row[data-line="${e}"]`)?.scrollIntoView({block:"center"})}))}function Ao(e){for(let t of et)for(let n of e)if(n.severity===t)return t;return e[0]?.severity??null}var Ly={content:"",parts:""};function tD(e){if(Ly.content===e)return Ly.parts;let t=e;if(e.length>Ed||xs(e)){let n=o=>[Fd(o)].flat();t=[];let r=0;for(let o=0;o<e.length;){let s=e.indexOf(`
|
|
190
|
+
style=${le({"--connection-color":_y(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:Uo(this.packageGroup);return u`<dialog aria-labelledby="why-title" style="${le({"--graph-dialog-width":`${Math.max(480,this.layout.width+Hu)}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",Ry);function Uu(e){return re("why-dialog",e)}var E2=new Map,aT=new Map,lT=[];function Mo(e){if(!e?.managedId)return E2;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!==lT[s])&&(lT=r,aT=new Map),aT}var Ty=new WeakMap;function Ja(e){return Ty.has(e)||Ty.set(e,{reasons:Vo(e),selected:""}),Ty.get(e)}function Io(e,t=Ja(e).selected){return JSON.stringify([e.managedId??e.integrity,t])}var cT="deepview.advisories.proxyConsent";function My(){try{return localStorage.getItem(cT)==="1"}catch{return!1}}function TZ(){try{localStorage.setItem(cT,"1")}catch{}}function F2(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 dT(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 L2(e){if(e.bundle&&!dT(e))return!0;let t=Mo(e).get(Io(e,""));return t?.state==="ok"&&t.query.size===0&&t.skipped.length===0}function uT(e,t,n=!1){return!e||e.managedId&&!N2(e)||O2(e,t)<1||e.summary?.versionedPackages===0?!1:n?!0:gy(e.name)!=="stasis"?!1:!t||t.integrity!==e.integrity?!0:e.managedId?!t.bundle||dT(t):F2(t)}function O2(e,t){let n=t?.integrity===e.integrity&&t.bundle?t.bundle.version:e.summary?.stasisVersion;return Number.isSafeInteger(n)?n:1/0}function N2(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 B2(e){return Object.fromEntries([...e].map(([t,n])=>[t,[...n].toSorted()]))}var Iy=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function D2(e){return{...e,title:e.title||e.id,severity:e.severity??"unknown",cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function P2(e){let t=Array.isArray(e),n=t?Map.groupBy(e.map(D2),Iy):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 pT(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function z2(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(B2(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 ju(e,t){return fT(e,t)}function W2(e,t){return fT(e,t,!0)}async function fT(e,t,n=!1){if(!e?.integrity||!e.managedId&&!My())return;let r=Mo(e),o=Io(e),s=r.get(o);if(n){if(!pT(e,s))return;r.set(o,{...s,recheckingRepositories:!0,repositoryError:null}),t()}else if(s)return;let{reasons:i,selected:a}=Ja(e),l=e.managedId?new Map:tv(e,i.get(a)??null);n||r.set(o,{state:"loading",query:l});try{let p,d=[];if(e.managedId){let f=await Jk(e.managedId,void 0,a,n,n);l=Array.isArray(f.packages)?new Map(f.packages.map(m=>[Iy(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 z2(l):{};r.set(o,{state:"ok",byPackage:P2(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 MZ(e,t){if(!e?.integrity)return;let n=Mo(e),r=Io(e);n.get(r)?.state==="error"&&(n.delete(r),await ju(e,t))}var H2={critical:0,high:1,moderate:2,low:3,info:4};function Vu(e){return H2[e]??999}function U2(){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 mT(e,t=()=>{},n=null){let r=e?Ja(e):null,o=[...r?.reasons.keys()??[]].map(a=>({id:`reason:${a}`,label:a})),s=j2(e),i=!!e?.managedId&&!L2(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=ju(e,t);return t(),p}}"></bundle-scope-selector>`:g} ${i?V2(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} ${K2(e)}</div>`}function V2(e,t){if(!e?.managedId)return g;let n=Mo(e).get(Io(e)),r=!!n?.recheckingRepositories;return u`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!pT(e,n)}" aria-busy="${String(r)}" @click="${()=>W2(e,t)}">${r?"Rechecking\u2026":"Recheck against repositories"}</button>`}function j2(e){if(!e||!e.managedId&&!My())return g;let t=Mo(e).get(Io(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 G2(e,t){let n=t.query.size;return n===0&&t.skipped.length>0?u`No packages could be audited.`:u`No advisories for the ${n} ${t.skipped.length>0?"audited ":""}${n===1?"package":"packages"} in ${Ja(e).selected?"this scope":"this bundle"}.`}function K2(e){if(!e)return u`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!=="stasis"||!e.managedId&&!e.bundle)return u`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!e.managedId&&!My())return U2();let t=Mo(e).get(Io(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>${G2(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=>Vu(d.severity))),p=Math.min(...a.map(d=>Vu(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">${Iy(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:g}<ul class="bundle-advisories-list">${r.map(([o,s])=>q2(e,o,s,t.query.get(o),()=>Mo(e).get(Io(e))?.byPackage===t.byPackage))}</ul></div>`}function q2(e,t,n,r,o){let s=[...n].toSorted((a,l)=>{let p=Vu(a.severity)-Vu(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="${()=>Uu({details:e,packageKey:t,version:a,reason:Ja(e).selected,isCurrent:o})}">${a}</button>`)}</span>`:g}</div><ul class="bundle-advisories-rows">${s.map(a=>ou(a,({title:l,severity:p,details:d})=>uu({heading:l,severity:p,markdown:d,isCurrent:o})))}</ul></li>`}var Yu=e=>_()?[]:ff(e),Y2=()=>_()?0:mf(),Za=null,Ay=new WeakMap;function X2(e){if(Ay.has(e))return Ay.get(e);let t=gp(e),n=Ml(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 Ay.set(e,a),a}function ST(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 Yu(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=Yu(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 CT(e){let t=X2(e),n=Vo(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}=av(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)&&Yu(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:Kl(r,f),w=new Map;for(let[A,E]of o)w.set(E,A);let v=Ot(e),x=new Map(v?[...e.bundle.modules].map(([A,E])=>[A,{directory:A,version:typeof E.version=="string"?E.version:void 0}]):[]),k=A=>{let E=w.get(A)??A;return Kr(E,{packageDir:v?.get(E)})},$=i.filter(A=>k(A)==="__own__"),S=Il(e,o,k,v,t.origToStripped),C=new Set;for(let A of i)if(C.add(k(A)),C.size>=3)break;let R=C.size>=3,L=i;if(ee.focusedPkg){let A=i.filter(E=>k(E)===ee.focusedPkg);A.length>0?L=A:ee.focusedPkg=null}return ee.selected&&!Object.hasOwn(r,ee.selected)&&(ee.selected=null),{treeData:r,files:L,ownCounts:f,transitiveCounts:y,severitySets:m,colorSets:h,fileFindings:b,options:{pkgOf:k,packageInfoOf:A=>x.get(v?.get(w.get(A)??A))},strippedToOrig:w,canPackagesView:R,hasIssues:p,issuesShown:d,viewId:e.integrity??null,supportsLayers:!0,layerRoots:S,flowEntries:ee.bundleLayout==="flow"?lv(e,o,t.origToStripped,v):void 0,ownSourcePackages:sv(o,k,v),entryPackages:iv(e,o,k),ownSourceFiles:new Set($),reasons:[...n.keys()]}}function _T(){if(!Za)return;let e=Ms();e&&e.refreshSidebar(Za,{isBundleContext:!0,findingsJump:!_()})}function RT(){if(!Za)return;let e=Ms();e&&e.refreshTopPkgs(Za)}function TT(e){Za=e}function J2(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,tT(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)||Uo(a[0]).localeCompare(Uo(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=Uo(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="${()=>Z2(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 Z2(e,t){let n=c.currentManagedTeam,r=c.currentWorkspace,o=c.managedSession&&rt(c.managedSession);return Uu({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 Ny(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"?i_(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=J2(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 Fo of Ai(wt.fileHash,wt))Ce.set(Fo,(Ce.get(Fo)??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>`),tp=n.length>0?u`<ul class="bundles-sources-list">${I.map(V=>{let ue=n[V],wt=r[V],Fo=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">${Fo}</div>`:u`<button type="button" class="bundles-source-row" data-bundle-view-source="${ue}">${Fo}</button>`}</li>`})}</ul>`:u`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,np=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:tp,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:np,list:!0}):g} ${f}</div></div>`}var Ey=new Map,Fy=new Set,MT=()=>u`<button type="button" class="bundle-source-wrap-toggle" data-bundle-source-wrap hidden aria-pressed="${c.bundleSourceWrap?"true":"false"}" aria-label="Wrap lines" data-tooltip="Wrap lines">${Ax}</button>`;function Q2(e){let t=e?.status;return u`<button type="button" class="${q({"bundle-source-pretty-toggle":!0,"is-loading":t==="loading","is-error":t==="error"})}" data-bundle-source-pretty aria-pressed="${c.bundleSourcePretty?"true":"false"}" aria-busy="${t==="loading"?"true":g}" aria-label="Pretty-print" data-tooltip="${XS(e)}">${YS}</button>`}function Py(e,t,n,r,o,s){let i=ZS(e,t,n,r),a=i?n1(e,t,n,r,()=>{c.bundleSourceFile===n&&O()}):null,l=a?.status==="ready";return{pretty:l,toggle:i?Q2(a):g,content:l?a.text:r,fileFindings:l?[]:o,lineFindings:l?new Map:s}}var zn=null;function Gu(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function eD(e){requestAnimationFrame(()=>requestAnimationFrame(()=>{document.querySelector(`.bundle-code-main .bundle-source-lineno-row[data-line="${e}"]`)?.scrollIntoView({block:"center"})}))}function Ao(e){for(let t of et)for(let n of e)if(n.severity===t)return t;return e[0]?.severity??null}var Ly={content:"",parts:""};function tD(e){if(Ly.content===e)return Ly.parts;let t=e;if(e.length>Ed||xs(e)){let n=o=>[Fd(o)].flat();t=[];let r=0;for(let o=0;o<e.length;){let s=e.indexOf(`
|
|
189
191
|
`,o),i=s===-1?e.length:s+1;(s===-1?i:s)-o>Kx&&(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 Ly={content:e,parts:t},t}function nD(e,t,n,r,o=null,s=!1,i=!1){let a=e.split(`
|
|
190
|
-
`).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&&!Ey.has(h)&&!Fy.has(h)&&(Fy.add(h),(async()=>{let y=await vs(e,m,_g(n,t));Ey.set(h,typeof y=="string"?wd(y):null),Fy.delete(h),c.bundleSourceFile===t&&O()})());let b=Ey.get(h);return u`<div class="${q({"bundle-source-lines":!0,"is-wrapped":c.bundleSourceWrap})}" style="${le({"--lineno-width":`${f}ch`})}" ${Gx(Jg)}><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?Ao(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):tD(e)}</code></pre></div>`}function rD(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=
|
|
191
|
-
Variant ${w.variant}`:y.node.sourcePath,$=h.packageInfo,S=!!$||!!w?.variant,C=$&&i?L=>{let{bytes:A,loc:E}=kS(i,h.sourcePath);Object.assign(L.dataset,{tooltipLoc:String(E),tooltipSize:ge(A)})}:void 0,R=iD(h,r);return u`<li class="bundle-code-tree-dir"><details .open="${Uw(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>${By(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?Ao(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 aD(e,t,n,r,o="",s=null,i=null){if(!n)return By(e,t,0,r,!1,s,i);let a=_S(e,n,o);return a?By(a,t,0,r,!0,s,i):u`<div class="bundle-code-search-empty">No files match.</div>`}var
|
|
192
|
-
`);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">${
|
|
193
|
-
`).length;return`${t.toLocaleString()} ${t===1?"line":"lines"} \xB7 ${ge(wn(e))}`}function fD(e,t,n,r,o,s=null){let i=oh(c.bundleCodeHistory,e.integrity,t),{pretty:a,toggle:l,content:p,fileFindings:d,lineFindings:f}=Py(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=TS(e,t,s?.managedId&&s.repoId!=null?{github:s.repoFullName,directory:s.repoDirectory}:null);return u`<header class="bundle-code-main-bar">${
|
|
194
|
-
`);for(let a=0;a<i.length;a++)o.ranges(i[a]).length>0&&s.add(a+1);return s}function xD(e,t,n,r){let o=c.bundleSourceFile;if(!o)return g;let s=t.get(o),{fileFindings:i,lineFindings:a}=zy(e,o,s),l=Py(e,r,o,s,i,a);return u`<aside class="bundle-search-side">${AT(o,null,l.toggle)}<div class="bundle-source-body">${Wy(o,l.content,e,l.fileFindings,l.lineFindings,l.pretty?null:n,!1,l.pretty)}</div></aside>`}function SD(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=kD(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">${$D(e,n,r,o,s,a)} ${xD(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 CD(e){let t=!!e.npm;t&&!xl.has(c.bundleDetailsTab)&&(c.bundleDetailsTab="overview");let n=!t&&pT(e,c.bundleDetails,c.bundleDetailsTab==="advisories");c.bundleDetailsTab==="advisories"&&!n&&(c.bundleDetailsTab="overview");let r=t||c.bundleDetailsTab==="compare"||Is(c.bundles??[],c.selectedBundle).length>0,o=!_();c.bundleDetailsTab==="issues"&&!o&&(c.bundleDetailsTab="overview");let s=c.bundleDetailsTab,i=s==="overview",a=c.bundleDetails,l=!!(a&&a.integrity===e.integrity),p=l&&!a.error&&!!(a.json||a.bundle)&&!(a.metadataOnly&&Xn(s));return s==="advisories"&&n&&p&&a.kind==="stasis"&&ju(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?Oo:Lo)}</span><div class="bundles-slide-title">${t?u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.npm.name}">${e.npm.name}</div><npm-version-select .name="${e.npm.name}" .version="${e.npm.version}" .tab="${s}" .list="${nu(e.npm.name)}"></npm-version-select>`:u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.name}">${e.name}</div>`}</div><button type="button" class="bundles-download-btn bundles-scan-button" ?hidden="${!Xa(e)}" @click="${()=>{zu(e)}}">${W(Vn)}<span>Scan</span></button><div class="bundles-slide-tabs" role="tablist">${n?hn("advisories","Advisories",s):g} ${o?hn("issues","Issues",s):g} ${t?g:hn("terminal","Terminal",s)} ${hn("treemap","Treemap",s)} ${t?g:hn("graph","Graph",s)} ${hn("code","Code",s)} ${t?g:hn("search","Search",s)} ${r?hn("compare","Compare",s):g} ${t&&c.managedSession&&!c.managedSession.publicShare&&c.managedTeams?.some(d=>d.dependencyReview===!0)?hn("review","Review",s):g} ${hn("overview","Overview",s)}</div></header></bundle-slide-header><div class="${q({"bundles-slide-body":!0,"bundles-slide-body-overview":i})}">${i?FD(e,a):p?Ng(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",()=>pD(a,e)],["search",()=>SD(a,e)],["review",()=>u`<npm-review .entry="${e}" .details="${a}" .request="${c.npmReview}" .session="${c.managedSession}" .source="${$b(e)}"></npm-review>`],["compare",()=>u`<bundle-compare .details="${a}" .integrity="${e.integrity}" .request="${c.bundleCompare}" .source="${t?$b(e):null}"></bundle-compare>`],["issues",()=>RD(a)],["advisories",()=>gT(a,O,Xa(e)?()=>{zu(e,{mode:"dependencies"})}:null)]]):l&&a.sourceError?u`<div class="bundles-slide-placeholder is-error">${a.sourceError} <button type="button" data-bundle-retry-sources>Retry</button></div>`:l&&!a.metadataOnly?u`<div class="${q({"bundles-slide-placeholder":!0,"is-error":!!a.error})}">${a.error?`Failed to parse: ${a.error}`:"Bundle contents not parsed."}</div>`:u`<div class="bundles-slide-placeholder">Loading bundle…</div>`}</div></div>`}function _D(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=gf(t.bucketKey,e):t.kind==="repository"&&(n=hf(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=Pe[Ae(s)]??Pe.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 NT(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 RD(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=Y2();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+=Yu(o).length;return r>0?Ys("All matching issues are dismissed.",`${r} ${r===1?"finding matches":"findings match"} this bundle's files, but every one is triaged invalid or deleted.`):Ys("No issues match this bundle's files.",`None of the ${n.toLocaleString()} indexed ${n===1?"finding":"findings"} reference a source file in this bundle \u2014 matching compares exact file hashes, so findings from a different build of the same project won't line up.`)}return Qa(t,{kind:"bundle"})}function Qa(e,{kind:t,bucketKey:n}={}){let r=[...e.keys()],{prefix:o,stripped:s}=Qn(r),i=new Map(r.map((p,d)=>[p,s[d]])),a=[...e.entries()].toSorted(([p,d],[f,m])=>{let h=_e[Ao(d)]??0,b=_e[Ao(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=NT(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> ${_D(b,{kind:t,bucketKey:n})}</div><div class="bundle-issues-finding-desc">${it(dl(b),{paragraphs:!1})}</div>`;return u`<li class="bundle-issues-finding">${t==="bundle"?u`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${p}" data-bundle-view-finding-idx="${y}" data-bundle-view-line="${b.line??""}">${$}</button>`:u`<div class="bundle-issues-finding-link bundle-issues-finding-static">${$}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function BT(e){let t=c.selectedBundle,n=t?e.find(r=>r.integrity===t):null;return n?CD(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 Ku=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>`,TD=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>`,kT=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"}),xT=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"]);function ST(e){if(kT[e])return kT[e];let t=0;for(let n of e)t=Math.imul(t,31)+n.codePointAt(0)|0;return xT[(t>>>0)%xT.length]}function MD(e){let t=e.currentTarget,n=e.target.closest?.(".bundles-languages-segment");!n||!t.contains(n)||(t.dataset.tooltip=n.dataset.languageTooltip??"",mv(t))}function ID(e){delete e.currentTarget.dataset.tooltip,gv()}var DT=e=>e.codeStats??=Yw(e.npm?new Map([...gi(e)].filter(([t])=>!Ca.test(t.slice(t.lastIndexOf("/")+1)))):gi(e),xn(e));function PT(e,{legend:t=!1}={}){if(!(e?.kind==="stasis"&&e.bundle)&&!(e?.npm&&e.json))return g;let n=DT(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:ST(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="${MD}" @pointerleave="${ID}">${o.map(({key:a,label:l,lines:p})=>u`<span class="bundles-languages-segment" style="${le({flexGrow:p,background:ST(a)})}" data-language-tooltip="${`${l} \xB7 ${s(p)}% \xB7 ${p.toLocaleString()} LoC`}"></span>`)}</div>${i}`}async function AD(e){try{await(await P()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function ED(e,t){let n=jR(t),r=PT(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="${()=>{AD(e)}}">${Ku}<span>Download bundle</span></button>`:u`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${Ku}<span>Download bundle</span></a>`:u`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${Ku}<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)">${TD}<span>SPDX</span></button></div>`:g}</div>${r}</div>`}function qu(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 FD(e,t){if(e.npm)return LD(e,t);let n=t?.integrity===e.integrity,r=e.summary?.commit,o=n?!t.error&&t.kind==="stasis"?t.bundle:null:e.managedId&&e.repoFullName&&r?{repo:{github:e.repoFullName,directory:e.repoDirectory??"",commit:r}}:null,s=n?t.size:e.managedId?e.size:null,i=(l="",p=!1)=>u`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd>${e.managedId?u`<dt>Repository</dt><dd>${e.repoFullName||"Unattached"}</dd>${e.repoId==null?g:u`<dt>Directory</dt><dd class="mono">/${e.repoDirectory??""}</dd>`}`:g} ${Od(o,l,e.commitInfo).map(d=>u`<dt>${d.label}</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${d.href}" target="_blank" rel="noopener noreferrer">${d.label==="GitHub"?W(Kt):g}<span>${d.text}</span></a> ${d.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${d.commit.href}" data-tooltip="${d.commit.hash}" data-tooltip-icon="commit" data-tooltip-commit-info="${Es(e.commitInfo,d.commit.hash)??g}" target="_blank" rel="noopener noreferrer">${W(al)}<span>${d.commit.text}</span></a>`:g} ${d.commit?.tags?u`<span class="bundle-origin-tags">${d.commit.tags.map(f=>u`<a class="bundle-origin-link bundle-tag-link" href="${f.href}" target="_blank" rel="noopener noreferrer">${W(ll)}<span>${f.name}</span></a>`)}</span>`:g}</dd>`)}<dt>Integrity</dt><dd class="mono bundle-integrity">${e.integrity}</dd>${l?u`<dt>Prefix</dt><dd class="mono">${l}</dd>`:g} ${o?.entries?.size>0?u`<dt>${o.entries.size===1?"Entry":"Entries"}</dt><dd class="mono"><ul class="bundles-entry-points">${[...o.entries].map(d=>u`<li><button type="button" class="bundle-entry-point" data-bundle-view-source="${d}">${Lr(d,l)}</button></li>`)}</ul></dd>`:g} ${p&&Number.isSafeInteger(s)?u`<dt>Size</dt><dd>${ge(s)}</dd>`:g}</dl>`,a=ED(e,t);if(!n)return qu(i("",!0),a);if(t.error)return qu(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 Ny(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=ev(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 Ny(i,w,f,y,Ot(t),a,{bundleSize:t.size,unpackedSize:Dy(y),resources:m,details:t})}return qu(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`})}function LD(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}">${Ku}<span>Tarball</span></a>`,o=u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${cb(e)}${r}</div></div>`;if(t?.integrity!==e.integrity||!t.json)return qu(Ah(e,{githubFigures:fb(e),provenance:gb(e),provenanceNamesBuilder:mb(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=ub(e.npm);return Ny(m=>Ah(e,{prefix:m,githubFigures:fb(e),provenance:gb(e),provenanceNamesBuilder:mb(e.npm),files:l}),L1(e,l,t),s,a,null,g,{bundleSize:t.size,unpackedSize:Dy(a),resources:p,leadColumn:u`${F1(e)}${NC(e)}`,trailColumns:i_(p,i),summaryExtra:u`${AC(e,l)}${UC(e,t)}${s_(e,PT(t,{legend:!0}),t)}${EC(e,r,qC(e))}`,overviewClass:"npm-overview",lines:DT(t).lines,sized:(m,h,b)=>Yd(m,d[m],b),fileTag:m=>u`${pb(f.get(m))}${hb(t,m,!0)}`,fileFlags:m=>bb(t,m,f.get(m)),fileIcon:m=>kn(m,p.has(m)?"binary":void 0),fileFilter:zC(e)})}function zT(){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])=>cf(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 WD(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();PD(l,c.packagesSortBy);let p=n.reduce((m,[,h])=>m+h.findings.length,0),d=new Set;for(let[,m]of n)for(let h of m.reports)d.add(h);let f=o?"packages-layout open":"packages-layout";return u`<div class="${q({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${l.length===n.length?u`${n.length} ${n.length===1?"package":"packages"}`:u`${l.length} of ${n.length} ${n.length===1?"package":"packages"}`}</span> ${p>0?u`<span>${p} ${p===1?"finding":"findings"} across ${d.size} ${d.size===1?"report":"reports"}</span>`:g}</div></div>${BD(t)}</header>${n.length===0?u`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":c.shownTriage?`No ${c.shownTriage} findings in any package.`:"No untriaged findings in any package."}</p>`:l.length===0?u`<p style="color:var(--muted)">No packages match "${c.packagesSearchQuery}".</p>`:u`<div class="${f}"><ul class="packages-list">${Z(OD(l),ND,m=>HD(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">${jD(o[0],i,s?s[0]:void 0)}</div></aside>`:g}</div>`}</div>`}function OD(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 ND(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function BD(e){return u`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${DD}"></triage-selector></div>`}var DD=["inprogress","fixed","invalid","deleted","ignored"];function PD(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 zD(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 WD(e,t,n){let r=Zt().get(e),o=zD(r,n),s=c.packageSlideTriage??"live",i=r?WT(r,e,s,n):new Map,a=[...i.values()].reduce((f,m)=>f+m.length,0),l=s==="live"?a===1?"issue":"issues":a===1?`${s} issue`:`${s} issues`,p=s==="live"?"No live issues for this package.":`No ${s} issues for this package.`,d=typeof n=="string"?` @ ${n}`:"";return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="package-slide-back" aria-label="Back to packages">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${`${e}${d}`}">${e}${d}</div><div class="bundles-slide-integrity">${a} ${l} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="package" .counts="${o}"></slide-triage-tabs></header><div class="bundles-slide-body">${i.size===0?u`<div class="bundle-issues-empty">${p}</div>`:Qa(i,{kind:"package",bucketKey:e})}</div></div>`}function HD(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&&UD(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"?VD(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 UD(e,t){return e.kind==="single"?!0:e.version===t}function VD(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 jD(e,t,n){let r=Zt().get(e),s=[...(r?WT(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>${GD(e,t,n)}`}function WT(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=HT(t,i);o.has(p)||o.set(p,[]);let d=o.get(p);for(let f of l)d.push(f)}return o}function GD(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=HT(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 HT(e,t){for(let n of["node_modules","dependencies"]){let r=`${n}/${e}/`,o=t.indexOf(r);if(o>=0)return t.slice(o+r.length)}return t.startsWith(`${e}/`)?t.slice(e.length+1):t}function UT(){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 JD(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();YD(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>${KD(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])=>ZD(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">${QD(o[0],o[1])}</div></aside>`:g}</div>`}</div>`}function KD(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="${qD}"></triage-selector></div>`}var qD=["inprogress","fixed","invalid","deleted","ignored"];function YD(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 XD(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 JD(e,t){let n=no().get(e),r=XD(n),o=c.repositorySlideTriage??"live",s=n?VT(n,o):new Map,i=[...s.values()].reduce((p,d)=>p+d.length,0),a=o==="live"?i===1?"issue":"issues":i===1?`${o} issue`:`${o} issues`,l=o==="live"?"No live issues for this repository.":`No ${o} issues for this repository.`;return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="repository-slide-back" aria-label="Back to repositories">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${nt(e)}">${nt(e)}</div><div class="bundles-slide-integrity">${i} ${a} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="repository" .counts="${r}"></slide-triage-tabs></header><div class="bundles-slide-body">${s.size===0?u`<div class="bundle-issues-empty">${l}</div>`:Qa(s,{kind:"repository",bucketKey:e})}</div></div>`}function ZD(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 QD(e,t){let n=no().get(e),o=[...(n?VT(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>${eP(e,t)}`}function VT(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 eP(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 jT(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 Eo(e,t,n){return`${e} ${e===1?t:n}`}function tP(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`:vw[o];return u`<span class="${`links-finding-status triage-${o}`}" data-tooltip="${s?r.map(({name:a})=>oe(a)).join(", "):g}">${i}</span>`}function Hy(e,t=[],n=!0,r=g){let{id:o,title:s}=e,i=t[0]?.name,a=Gl(o),l=jl(o)??a;return u`<li class="${n?"links-finding":"links-finding links-finding-context"}">${i?u`<button type="button" class="links-finding-id mono" data-links-preview="${o}" data-preview-report="${i}" data-preview-row="${t[0].rowIndex??g}" data-preview-managed-report="${t[0].managedReportId??g}" data-tooltip="${a}" aria-haspopup="dialog">${l}</button>`:Vr(o)?u`<a class="links-finding-id mono" href="${`#${jr({id:o})}`}" data-tooltip="${a}">${l}</a>`:u`<span class="links-finding-id mono">${l}</span>`} ${s?u`<span class="links-finding-title">${s}</span>`:g} ${tP(e,t)} ${n?g:u`<span class="links-member-context">not in this link</span>`} ${r}</li>`}function GT(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(Pe[Ae(n)]??Pe.default)}<span class="links-finding-report-label report-button-label" data-tooltip-truncated data-tooltip="${oe(n)}">${oe(n)}</span></button>`)}</div>`}function nP(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">${Hy(r,n,t.has(r.id),GT(n))}</ul></li>`}return u`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${Eo(e.members.length,"finding","findings")} in row</span> ${GT(n)}</div><ul class="links-row-members">${e.members.map(r=>Hy(r,n,t.has(r.id)))}</ul></li>`}function rP(e,t){let{rows:n,missing:r}=jT(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">${Eo(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${Z(n,s=>s.key,s=>nP(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=>Hy({id:s,title:bf(s)}))}</ul></div>`:g}</li>`}function KT(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>${Eo(r.length,"link","links")}</span> <span>${Eo(s.size,"finding","findings")}</span> ${i.size>0?u`<span>found in ${Eo(i.size,"report","reports")}</span>`:g}</div></div></header>${a<s.size?u`<p class="links-note">${Eo(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">${Eo(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)=>rP(l,p))}</ol>`}</div>`}function Uy(e,t,n){let r=new Set(t);for(let o of n)r.add(o);return e.filter(o=>r.has(o))}function qT(){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?Uy(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 Vy=class extends N{static styles=[...N.styles,D(ot)];static properties={workspaceId:{type:String},items:{type:Array},_uploading:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._uploading=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="upload"]')?.focus()}_onClose=()=>this._finish({uploaded:[],failed:[]});_onCancel=()=>this._finish({uploaded:[],failed:[]});_onUpload=async()=>{if(this._uploading)return;this._uploading=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{let o;if(r.kind==="bundle")o=await S0(this.workspaceId,r.identifier);else{let s=await Cn(r.identifier);o=await Jc(this.workspaceId,r.identifier,s)}if(o.ok)t.push({kind:r.kind,identifier:r.identifier});else{let s=o.reason??"unknown";n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:lr(r),reason:s}]}}catch(o){let s=o?.message??String(o);n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:lr(r),reason:s}]}this._uploading=!1,this._done=!0,n.length===0&&this._finish({uploaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Vc(this.items),o=n?u`Upload <strong>"${lr(this.items[0])}"</strong> to the workspace's remote inventory?`:u`Upload <strong>${t}</strong> local ${r} to the workspace's remote inventory?`,s=n?g:jc(this.items),i=this._uploading?n?"Uploading\u2026":`Uploading ${t} ${r}\u2026`:n?"Upload":`Upload ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Upload to remote</h3></header><p class="lwd-body">${o}</p>${s}<p class="nwd-note ui-hint">End-to-end encrypted with the workspace key — only workspace members can decrypt the uploaded content.</p>${Gc(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._uploading}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="upload" @click="${this._onUpload}" ?disabled="${this._uploading||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-upload-dialog",Vy);function YT({workspaceId:e,items:t}={}){return re("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var XT=`.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}
|
|
195
|
-
`;var
|
|
196
|
-
${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)}">${
|
|
197
|
-
`;var aP=10,Ky=class extends N{static styles=[...N.styles,D(Nl),D(ot),D(
|
|
198
|
-
`)}">${b}<span>${t.length} reports</span></button>`);let w=c.reports.flatMap(E=>E.groups.flat()),x=`${s} ${`finding${s===1?"":"s"}`}`,k=c.currentWorkspace?[]:nx(w,a?cd.filter(E=>E!=="type"):cd),$=g;if(s>0){let E={};for(let I of e){let U=de(An(I),c.severityMode);U&&(E[U]=(E[U]||0)+1)}let 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=pP(n,r,C),L=u`<span class="sep" aria-hidden="true"></span>`,A=fy(o,c.currentView);return u`<header class="page-head"><div class="page-title"><h1>${d?py(d,c.currentView):f}${y}${Va(d,"bundles",c.currentView)}${R}${A}${dM()}</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:fP}=tM({open:e=>eM({names:e})}),mP=new Set(["findings","files","links"]);function dM(){if(G.status!=="online")return g;if(!mP.has(c.currentView))return g;let e=qT();if(!e)return g;let{workspaceId:t,fileNames:n,mode:r}=e,o=v0(t);if(o.length>0&&fP(t,o,{onSync:()=>qy(t,r,n),retry:O}),r==="single"){let x=n[0];if(o.includes(x))return sM({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:()=>qy(t,r,n)});let k=qm(t,x)?"cloud":"local";return sM({status:k,label:k,title:k==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:k==="local"?()=>iM({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=Xm(t),l=n.filter(x=>!qm(t,x)),p=i.filter(x=>!y0(t,x)),d=[...l.map(x=>({kind:"report",identifier:x})),...p.map(x=>({kind:"bundle",identifier:x}))];if(a===0&&d.length===0)return g;let f=[a>0?`${a} in cloud`:null,d.length>0?`${d.length} local-only`:null,o.length>0?`${o.length} differ from the cloud`:null,a>0?'click "cloud" to re-check storage':null,d.length>0?`click "local" to upload ${d.length}`:null].filter(Boolean).join(" \u2014 "),m=o.length===1?`Your copy of "${o[0]}" doesn't match its cloud copy. Click to re-check and bring them in line.`:`${o.length} reports don't match their cloud copies. Click to re-check and bring them in line.`,h=o.length===0?g:u`<button type="button" class="sync-badge-chunk differ" data-tooltip="${m}" aria-label="${`${o.length} report${o.length===1?"":"s"} differ from the cloud \u2014 re-check`}" @click="${x=>{x.stopPropagation(),qy(t,r,n)}}">${pM()}<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(),Gy({workspaceId:t,cloudCount:a,localFileNames:n,localBundles:i})}}">${fM()}<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(),iM({workspaceId:t,items:d})}}">${uM()}<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 qy(e,t,n){let r=Y().find(i=>i.id===e),o=t==="single"?Uy(r?.reports??[],c.storedFiles??[],n):n,s=r&&Array.isArray(r.bundles)?r.bundles:[];return Gy({workspaceId:e,cloudCount:Xm(e),localFileNames:o,localBundles:s,autoRun:!0})}function sM({status:e,label:t,title:n,onClick:r}){let o=e==="cloud"?fM():e==="differ"?pM():uM(),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 uM(){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 pM(){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 fM(){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 iM({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 YT({workspaceId:e,items:t})}function gP(e){return Object.values(e).some(n=>n>0)||c.filterSeverities.size>0?u`<severity-chips .counts="${e}"></severity-chips>`:g}function hP(e){return Object.values(e).some(n=>n>0)||c.filterColors.size>0?u`<triage-filter .counts="${e}"></triage-filter>`:g}function bP(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} ${gP(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} ${hP(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function Yy(e,t){return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}var aM=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),Zu=null,mM=0,Zs=null;function el(e,t=!1,n=null,r=!1,o=!1){return u`<finding-card data-gid="${ie(e)}" .group="${e}" ?in-group="${t}" context="${n??g}" ?lazy="${r}" ?popup="${o}"></finding-card>`}var gM=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>`,hM=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>`,yP={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};function Zy(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?Pc(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=yP[b]??"?",w=Bo(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}">${Ts}</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}`}">${Ts}</button>`:u`<span class="kanban-action kanban-fix-note" role="img" data-tooltip="${`Fix: ${k}`}" aria-label="${`Fix: ${k}`}">${Ts}</span>`:l&&($||_()&&dr(i))&&(S=u`<comment-preview class="kanban-action" .finding="${i}" .comment="${$}">${Rd}</comment-preview>`);let C=u`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${b}`}" data-tooltip="${w?`${st(b)} \u2014 corrected from ${st(i.severity)}`:g}" aria-label="${w?`Severity ${st(b)}, corrected from ${st(i.severity)}`:`Severity ${st(b)}`}">${y}${w?"*":""}</span> ${x?u`<span class="kanban-flag" aria-label="Flagged">${Td}</span>`:g} ${S}</div><span class="kanban-title">${a}</span><div class="kanban-meta"><span class="kanban-loc">${i.file}${h}</span> ${i.confidence===void 0||i.confidence===null?g:u`<span class="kanban-conf" data-tooltip="${`Confidence ${i.confidence}/10`}">${i.confidence}</span>`} ${d?u`<span class="kanban-analyzer" role="img" data-tooltip="${ms[d]}" aria-label="${ms[d]}">${W(Pe[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 Xy={content:"",parts:""};function wP(e){return Xy.content!==e&&(Xy={content:e,parts:Fd(e)}),Xy.parts}function vP(e){let{content:t,range:n,highlighted:r}=e,o=t.split(`
|
|
199
|
-
`).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):wP(t)}</code></pre></div>`}function bM(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 yM(e,t=g,n=!1){c.focusCodeTick;let r=_x(e),o=$d(e),s=r?"focus-main with-code":"focus-main",i=le({"--focus-split":String(c.focusSplit)});return u`<div class="${s}" style="${i}" data-gid="${ie(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?g:bM(e)} ${el(e,!1,"focus",!1,n)}</div></div>${t} ${r?u`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${tc}" aria-valuemax="${nc}" aria-valuenow="${Math.round(c.focusSplit)}" data-tooltip="Drag to resize · double-click to reset"></div><div class="focus-pane focus-pane-code" data-focus-code-file="${r.file??g}" data-focus-code-integrity="${r.integrity??g}">${r.loading?u`<div class="focus-code-empty">Loading source…</div>`:u`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?u`<span class="focus-code-line">:${zv(r.range)}</span>`:g} ${(o?.stack.length??0)>1?u`<div class="focus-code-nav"><button type="button" class="focus-code-nav-btn" data-code-history="back" ?disabled="${o.at===0}" aria-label="Back to the previously shown file">${Cs}</button> <button type="button" class="focus-code-nav-btn" data-code-history="forward" ?disabled="${o.at===o.stack.length-1}" aria-label="Forward to the next shown file">${_s}</button></div>`:g}</header><div class="focus-code-body">${vP(r)}</div>`}</div>`:g}</div>`}function wM(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">${bM(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?hM:gM}</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?yM(e,d,!0):el(e,!1,"kanban-detail",!1,!0):u`<div class="links-preview-message" role="status">${r.error||"Loading finding\u2026"}</div>`}</div></div>${l.length===0?g:u`<aside class="kanban-detail-side" aria-label="${`${t.label} findings`}"><div class="kanban-detail-side-header"><span class="kanban-detail-side-pick"><select class="kanban-detail-side-select" data-kanban-column aria-label="Column to show">${n.map(f=>{let m=f.key===t.key,h=m?f.label:`${f.label} (${f.count})`;return u`<option value="${f.key}" data-gid="${f.firstGid}" .selected="${m}" ?disabled="${f.count===0}">${h}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${p===0}" aria-label="Previous finding">${Cs}</button> <span class="count">${p<0?l.length:`${p+1} / ${l.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${p===l.length-1}" aria-label="Next finding">${_s}</button></div></div><div class="kanban-detail-side-body">${Z(l,f=>ie(f),f=>Zy(f,{variant:"kanban-side",active:ie(f)===a}))}</div></aside>`}</div>`}function $P(e,t){if(c.viewMode==="table"){let r=c.sortBy==="file"?Yy(e,aM):e;return r.length===0?g:(Zu=r,u`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?u`<aside class="findings-table-details" id="findings-table-details" aria-label="Finding details"><button type="button" class="findings-table-details-close" data-table-deselect aria-label="Close details">×</button><div class="findings-table-details-body">${el(t)}</div></aside>`:g}</div>`)}if(c.viewMode==="focus"){if(e.length===0)return g;let r=e.indexOf(t);mM=r;let o=t,s=r===0,i=r===e.length-1;return u`<div class="focus-view">${yM(o)}<aside class="focus-sidebar" aria-label="Up next"><div class="focus-sidebar-header"><span class="label">Up next</span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-focus-nav="prev" ?disabled="${s}" aria-label="Previous finding">${Cs}</button> <span class="count">${r+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${i}" aria-label="Next finding">${_s}</button></div></div><div class="focus-sidebar-body">${Z(e,a=>ie(a),a=>Zy(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?hM:gM}</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)=>Zy(h,{active:ie(h)===c.kanbanPopoverGid,expandedTrackLast:(b+1)%r.length===0}))}</div></div>`})}</div>${wM(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"?Yy(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>${Mp(a,En(a))}</span> <span class="count">${i.length}</span></div><div class="file-body">${Z(i,l=>ie(l),l=>el(l,!1,null,!0))}</div></div>`})}`}let n=c.sortBy==="file"?Yy(e,aM):e;return u`${Z(n,r=>ie(r),r=>{let o=je(r),s=jv(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">${Mp(o,En(o))}</span> ${s===g?g:u`<span class="line-num">${s}</span>`} ${a?u`<span class="meta">${a}</span>`:g} ${i?u`<span class="run-meta">${i}</span>`:g}</div>${el(r,!0,null,!0)}</div>`})}`}function kP(){c.bundleSourceFile&&Sg().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&J(ET(),e)}var xP=oM(CP);function O(){xP(c.currentView)}function bn(e){let t=document.querySelector(`#${e}`);return(!t||!be.contains(t)||be.firstElementChild!==t)&&(be.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function Du(){let e=Lu(c,Y(),Ie);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=bn("empty-workspace-slot");t&&J(u`${cM([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),Vt()}var SP={"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"}},lM=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),Ju=null;function Ka(){let e=c.revalidateConflicts.size>0,t=!e&&zl(c.reports);return e?c.showRevalidation!==!1&&(Ju=c.showRevalidation,c.showRevalidation=!1):(Ju!==null&&(c.showRevalidation=Ju,Ju=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 Jy=null;function CP(){ys()||U0(),kP(),Wl(c.reports),kc()&&queueMicrotask(()=>{xe()}),Hl(c.reports)&&pr();let e=Ka(),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=Lu(c,Y(),Ie),z=bn("workspace-content-slot");z&&J(AR(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)&&Sg().catch(()=>{});let T=bn("bundles-slot");T&&J(BT(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=_T(c.bundleDetails);if(vt){MT(vt);let fw={hideAllFiles:!0,triageCounts:CT(c.bundleDetails,new Set(vt.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:vt.canPackagesView,showBundleLayouts:!0,hasIssues:vt.hasIssues},ii=Jy,mw=Re.querySelector("graph-layout");!vt.issuesShown&&ii&&!ii.issuesShown&&mw&&ii.state===ee.graphState&&ii.details===F&&ii.reason===ee.bundleReason?mw.options=fw:(Jy=null,Lg(Re,vt,fw,RT,TT).then(MM=>(MM&&ee.graphState&&(Jy={state:ee.graphState,details:F,reason:ee.bundleReason,issuesShown:vt.issuesShown}),null)))}}}if(z&&!F.metadataOnly&&c.bundleDetailsTab==="terminal"){let Re=document.querySelector("#bundle-terminal-slot");Re&&Vx(Re,c.bundleDetails)}Vt();let pe=c.bundles.find(Re=>Re.integrity===c.selectedBundle)?.npm;document.title=pe?`DeepView \u2014 ${pe.name}@${pe.version}`:"DeepView \u2014 bundles";return}if(c.currentView==="reviews"){let 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(I1(),T),Vt(),document.title="DeepView \u2014 npm packages";return}if(c.currentView==="packages"){let T=bn("packages-slot");T&&J(zT(),T),Vt(),document.title="DeepView \u2014 packages";return}if(c.currentView==="repositories"){let T=bn("repositories-slot");T&&J(UT(),T),Vt(),document.title="DeepView \u2014 repositories";return}if(c.currentView==="links"){if(c.currentLinks){let T=bn("links-slot"),F=ys();T&&J(u`${KT(dM())}${F?wM(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=SP[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=rm(),c.currentView==="manage-import"&&(z.localDeps=nm(),z.promptPassword=Wc,z.resolveConflicts=Kc,z.confirmTriageImport=o0,z.confirmContentImport=i0,z.showTriageComparison=d0),z.session=c.managedSession,z.allowShare=c.managed?.allowShare===!0,c.currentView==="manage-scans"&&(z.selection=c.scanSelection),c.currentView==="manage-bundles"&&(z.createRepoId=c.bundleCreationRepoId,z.installTooltips=pe),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")&&Du();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){Bo(F)&&(d=!0);let z=he(F);tn(F)&&(l=!0),z&&(z.comment&&(a=!0),z.fix&&(l=!0),z.flagged===!0&&(p=!0))}let f=ed(),m=r.some(T=>T.some(F=>f.has(F.id)));m||(c.filterDuplicates="");let h=i.some(og),b=i.some(sg);h||(c.filterCrossContext=""),b||(c.filterAppStacked="");let y=O0(i);y||(c.filterSecurity="");let w=new Set,v=!1,x=!1,k=!1;for(let T of i)for(let F of T){let z=Yr(F);z&&w.add(z)}for(let T of dg()){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&&Rp(R),A=rg(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(pg),Nr=T=>{if(T==null)return 1/0;let F=yt.indexOf(T);return F===-1?yt.length:F},tp=[...Ke].toSorted((T,F)=>{let z=Nr(T),pe=Nr(F);return z!==pe?z-pe:String(T??"").localeCompare(String(F??""))}),np=[...Ce].toSorted(lM);if(c.filterAnalyzer){let T=c.filterAnalyzer===hs?null:c.filterAnalyzer;(!Ke.has(T)||Ke.size<2)&&(c.filterAnalyzer="")}if(c.filterModel){let T=c.filterModel===bs?null:c.filterModel;(!Ce.has(T)||Ce.size<2)&&(c.filterModel="")}let Hn=Ov(w);c.filterRevalidate&&!Hn.some(T=>T.value===c.filterRevalidate)&&(c.filterRevalidate="");let V=nd(i);V&&(c.filterRevalidate="confirmed");let ue=w.has("partial")&&po();ue||(c.filterPartial="");let wt=e&&(v||x||!c.currentWorkspace&&k),rw=!(e&&c.showRevalidation!==!1)&&!c.upstreamOnly&&E&&M;!rw&&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 rp=N0(i),ti={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},ni={red:0,blue:0,green:0,gray:0,none:0};for(let T of rp){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 ow=M0(rp),SM=[...ow].toSorted(lM);if(c.filterRepo){let T=c.filterRepo===Qm?null:c.filterRepo;ow.has(T)||(c.filterRepo="")}let ri=D0(rd(i)),rl=Ep(c.reports),sw=rl?Object.keys(rl).length:0,op=sw>1;!op&&c.currentView==="files"&&(c.currentView="findings"),!op&&c.viewMode==="graph"&&(c.viewMode="kanban");let iw=cM(r,C,Q,We,sw);if(c.currentView==="files"){let T=Ap(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(iw,F),z&&J(zx(rl,T),z),Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let CM=c.viewMode==="table"&&c.tableSelectedGid&&ri.some(T=>ie(T)===c.tableSelectedGid),oi=null;c.viewMode==="graph"&&rl&&(oi=Qy(),oi||(c.viewMode="kanban"));let ol=!!oi,Br="findings-content";CM&&(Br+=" with-details"),ol&&(Br+=" with-graph"),o&&(Br+=" with-kanban"),c.viewMode==="focus"&&(Br+=" with-focus");let aw=g,sl=g,lw=g,cw=nM(ri,c,mM);Zu=null,ol||(aw=bP(ri.length,i.length,s,ti,ni,{showSource:rw,showConfidence:L,showPriority:A,showGraphMode:op,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:tp,models:np,groups:rp},SM),c.shownTriage&&i.length===0?sl=u`<p style="color:var(--muted); margin: 1rem 0;">No ${c.shownTriage} findings.</p>`:ri.length===0&&i.length>0&&!o?sl=u`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:i.length===0&&(sl=r.length>0?u`<p style="color:var(--green)">All ${S} issues triaged.</p>`:u`<p style="color:var(--green)">No ${S} issues found.</p>`),lw=$P(ri,cw));let si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content"),_M=Gt&&Gt.querySelector(":scope > #findings-graph-slot"),RM=Gt&&Gt.querySelector(":scope > #findings-body-slot"),TM=Gt&&(_M?"graph":RM?"body":null)===(ol?"graph":"body");if(!si||!Gt||!be.contains(si)||!be.contains(Gt)||!TM){let T=ol?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';be.innerHTML=`<div id="header-slot"></div><div class="${Br}">${T}</div>`,si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content")}else Gt.className!==Br&&(Gt.className=Br);si&&J(iw,si);let dw=document.querySelector("#toolbar-slot");dw&&J(aw,dw);let uw=document.querySelector("#empty-state-slot");uw&&J(sl,uw);let pw=document.querySelector("#findings-body-slot");if(pw&&J(lw,pw),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"]};Lg(T,oi,z,cP,dP)}}if(Zu){let T=be.querySelector(".finding-table-slot");T&&(Zs||(Zs=document.createElement("finding-table")),Zs.items=Zu,Zs.selectedGid=c.tableSelectedGid,Zs.parentNode!==T&&T.append(Zs))}Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`,_()&&te?.replaceFindingRoute(rM(cw,c))}var AP=500,EP=14;function Qu(e){if(!e)return null;let t={};e.color&&(t.color=e.color);let n=qe(e);return n&&(t.triage=n),typeof e.fix=="string"&&e.fix&&(t.fix=e.fix),typeof e.flagged=="boolean"&&(t.flagged=e.flagged),Object.keys(t).length>0?t:null}function tl(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function FP(e,t){return e.length>100?!1:t==null?!0:(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}var LP=e=>new TextEncoder().encode(e).length,jt=new Map,ei=new Set,nl=(e,t=c.currentManagedTeam)=>JSON.stringify([t,e]),Or=new Map,Wn=null,Qs=Promise.resolve();function $M(){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 ew(){return Array.isArray(c.managedReports)&&c.managedReports.length>0?c.managedReports:c.managedReport==null?[]:[c.managedReport]}function kM(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($M())}function OP(e){let t=ew();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 tw(){let e=c.managedSession;return c.serverMode==="managed"&&c.localMode!==!0&&e!=null&&Yn(e.role,"triage")}function NP(e){return e===403&&c.managedSession?.viewer?!0:e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function BP(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 DP(e,t,n){if(!tw())return;let r=[...e.changes.keys()],o=0;for(;o<r.length;){let s=o,i={},a=0,l=EP;for(;o<r.length&&a<200;){let f=r[o],m=LP(`${JSON.stringify(f)}:${JSON.stringify(e.changes.get(f))},`);if(a>0&&l+m>262144)break;i[f]=e.changes.get(f),l+=m,a++,o++}let p=await jk(e.report.id,i,c.managedSession?.csrfToken,e.teamId),d=p>=200&&p<300;if(!d&&!NP(p)){BP(e,r.slice(s));return}d||console.warn("managed: the server refused a triage batch",e.report.id,p,Object.keys(i)),!d&&p===403&&c.managedSession?.viewer&&n.add(e.report.id);for(let[f,m]of Object.entries(i)){let h=jt.get(f)?.fix??"",b=d?m?.fix??"":h;b!==h&&t.add(e.teamId),jt.set(f,{key:tl(m),fix:b})}}}function ep(){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(()=>DP(r,t,n)).catch(o=>{console.warn("managed: triage push failed",o)});Qs=Qs.finally(()=>{for(let r of t)fs(r);for(let r of n)Sb(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function xM(){if(!(ew().length===0||!tw()||ei.size===0)){for(let t of $M()){let n=Qu(c.triage.get(t)),r=tl(n);if((jt.get(t)?.key??"")===r)continue;if(!FP(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=OP(t);if(o==null||!ei.has(nl(o.id)))continue;let s=c.currentManagedTeam,i=nl(o.id,s),a=Or.get(i);a==null&&(a={report:o,key:i,teamId:s,changes:new Map},Or.set(i,a)),a.changes.set(t,n)}Or.size!==0&&(Wn!=null&&clearTimeout(Wn),Wn=setTimeout(ep,AP))}}var vM=!1;function nR(){vM||!tw()||(vM=!0,Jf(xM))}function Tu(){I$(),c.managedComments?.clear(),c.managedIssues.clear(),globalThis.document?.dispatchEvent(new Event("managed-comments-reset")),Wn!=null&&(clearTimeout(Wn),Wn=null),Or.clear(),ei.clear(),jt.clear()}async function lne(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&&ew().some(y=>y.id===e);if(!l()||(ei.delete(nl(e)),ep(),!await nw(n)||!l()))return!1;let p=new Map(c.managedIssues),d=r?await r(e):null,f=r?d?.entries:await zm(e,s,{signal:n});if(f==null||!l())return!1;let m=!1,h=kM(e),b=d&&ta(h,d.issues,p);for(let y of h){if(!Object.hasOwn(f,y)){jt.delete(y);continue}let w=Qu(f[y]);jt.set(y,{key:tl(w),fix:w?.fix??""});let v=w?.triage==null||w.triage==="ignored"?c.triage.get(y)?.ignoredReports:void 0;ml(c.triage,y,{...w,ignoredReports:v,scopedIgnoredReports:c.triage.get(y)?.scopedIgnoredReports})&&(m=!0)}if(ei.add(nl(e)),d&&Bm(s,h,p),b&&!m&&t&&O(),m){if(await xe(),!l())return!1;t&&O()}return xM(),!0}function nw(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 Sb(e,{signal:t,readAnnotations:n}={}){let r=c.reports,o=c.currentManagedTeam,s=c.managedSession?.role,i=c.managedSession?.id,a=()=>!t?.aborted&&c.serverMode==="managed"&&!c.localMode&&c.reports===r&&c.currentManagedTeam===o&&c.managedSession?.id===i&&c.managedSession?.role===s&&ei.has(nl(e,o));if(!a()||(ep(),!await nw(t)||!a()))return!1;let l=kM(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 zm(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=Qu(c.triage.get(w));if(jt.get(w)!==v||tl(x)!==(v?.key??""))continue;let k=Qu(m[w]);(v?.fix??"")!==(k?.fix??"")&&(y=!0),jt.set(w,{key:tl(k),fix:k?.fix??""});let $=k?.triage==null||k.triage==="ignored"?c.triage.get(w)?.ignoredReports:void 0;ml(c.triage,w,{...k,ignoredReports:$,scopedIgnoredReports:c.triage.get(w)?.scopedIgnoredReports})&&(b=!0)}if(y&&fs(o),f&&Bm(o,l,d),h&&!b&&O(),b){if(await xe(),!a())return!1;O()}return!0}function h_(e,t){if(!e)return;let n=c.currentManagedReport;if(n!=null&&(c.managedReports.length!==1||c.managedReports[0].id!==n))return;let r;return async o=>(r??=(async()=>(ep(),!await nw(t)||t?.aborted?null:Wk(e,{signal:t,reportId:n})))(),(await r)?.(o)??null)}export{k$ as a,x$ as b,S$ as c,C$ as d,of as e,_$ as f,Qr as g,c as h,_ as i,rI as j,cI as k,Ie as l,Ef as m,Y as n,ss as o,$I as p,xI as q,SI as r,_I as s,RI as t,Yi as u,Y$ as v,TI as w,xe as x,ek as y,BI as z,DI as A,PI as B,nA as C,oA as D,mW as E,gW as F,hW as G,bW as H,yW as I,wW as J,G as K,te as L,ea as M,Am as N,Em as O,Om as P,K4 as Q,ye as R,Ae as S,rn as T,Hc as U,Qk as V,Uc as W,Kc as X,ot as Y,Ee as Z,hs as _,Qm as $,bs as aa,td as ba,MW as ca,IW as da,AW as ea,cr as fa,MA as ga,IA as ha,aa as ia,rd as ja,D0 as ka,OW as la,ys as ma,U0 as na,qW as oa,ie as pa,po as qa,dr as ra,PA as sa,_t as ta,he as ua,zA as va,ur as wa,je as xa,En as ya,Y0 as za,Fe as Aa,c6 as Ba,HA as Ca,d6 as Da,da as Ea,u6 as Fa,fr as Ga,mo as Ha,p6 as Ia,f6 as Ja,ld as Ka,vs as La,B6 as Ma,me as Na,tH as Oa,nH as Pa,kg as Qa,go as Ra,gr as Sa,rH as Ta,uE as Ua,gd as Va,Sg as Wa,wd as Xa,uH as Ya,pH as Za,wx as _a,kx as $a,$d as ab,TH as bb,kd as cb,Ss as db,NH as eb,_E as fb,UH as gb,Mx as hb,Ix as ib,RE as jb,Ag as kb,xd as lb,VH as mb,jH as nb,Sd as ob,Cd as pb,Cs as qb,_s as rb,Ex as sb,ZH as tb,QH as ub,it as vb,kU as wb,xU as xb,rF as yb,SU as zb,Is as Ab,wr as Bb,Md as Cb,WU as Db,Kx as Eb,Fd as Fb,xS as Gb,SS as Hb,_S as Ib,Kg as Jb,RS as Kb,JF as Lb,ZF as Mb,TS as Nb,MS as Ob,dV as Pb,tL as Qb,nL as Rb,PS as Sb,eh as Tb,WS as Ub,CV as Vb,HS as Wb,VS as Xb,YS as Yb,XS as Zb,OV as _b,ZS as $b,NV as ac,BV as bc,oh as cc,PV as dc,zV as ec,GV as fc,yh as gc,Ca as hc,u1 as ic,ln as jc,v1 as kc,Ra as lc,$1 as mc,XO as nc,sN as oc,aN as pc,lN as qc,Hh as rc,oC as sc,dN as tc,uN as uc,JG as vc,pN as wc,ZG as xc,r7 as yc,o7 as zc,s7 as Ac,i7 as Bc,a7 as Cc,dC as Dc,mC as Ec,hC as Fc,Yh as Gc,yC as Hc,Zh as Ic,tK as Jc,$C as Kc,nK as Lc,rK as Mc,CN as Nc,oK as Oc,a_ as Pc,$b as Qc,Ge as Rc,mB as Sc,nR as Tc,Tu as Uc,lne as Vc,Sb as Wc,h_ as Xc,To as Yc,ly as Zc,Ua as _c,oR as $c,Ir as ad,Ks as bd,UR as cd,PJ as dd,zJ as ed,Wu as fd,YR as gd,TZ as hd,MZ as id,RT as jd,TT as kd,Gu as ld,ete as md,cP as nd,dP as od,O as pd,Du as qd,Ka as rd,Bc as sd,Sk as td,ez as ud,tz as vd,nz as wd,rz as xd,oz as yd,sz as zd,iz as Ad,az as Bd,Wm as Cd,lz as Dd,cz as Ed,dz as Fd,uz as Gd,$_ as Hd,O_ as Id,H as Jd,oX as Kd,Tt as Ld};
|
|
192
|
+
`).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&&!Ey.has(h)&&!Fy.has(h)&&(Fy.add(h),(async()=>{let y=await vs(e,m,_g(n,t));Ey.set(h,typeof y=="string"?wd(y):null),Fy.delete(h),c.bundleSourceFile===t&&O()})());let b=Ey.get(h);return u`<div class="${q({"bundle-source-lines":!0,"is-wrapped":c.bundleSourceWrap})}" style="${le({"--lineno-width":`${f}ch`})}" ${Gx(Jg)}><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?Ao(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):tD(e)}</code></pre></div>`}function rD(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=OT(n.line);return u`<aside class="bundle-source-panel"><header class="bundle-source-panel-bar"><span class="${`bundle-source-panel-sev sev-${n.severity}`}">${n.severity.replaceAll("_"," ")}</span> ${s?u`<span class="${`bundle-source-panel-triage triage-${o}`}">${s}</span>`:g} <button type="button" class="bundle-source-panel-close" data-action="bundle-source-panel-close" aria-label="Close finding details">×</button></header><div class="bundle-source-panel-body">${a||i?u`<div class="bundle-source-panel-line-row">${a?u`<span class="bundle-source-panel-line">${a}</span>`:g} ${i?u`<span class="bundle-source-panel-meta" data-tooltip-truncated data-tooltip="${i}">${i}</span>`:g}</div>`:g}<div class="bundle-source-panel-desc">${it(dl(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=Pe[Ae(l)]??Pe.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 zy(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 IT(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?LT(t):g} ${MT()} ${n} <button type="button" class="bundle-source-close" data-action="bundle-source-close" aria-label="Close source viewer">×</button></header>`}function Wy(e,t,n,r,o,s=null,i=!1,a=!1){return u`<div class="bundle-source-code-wrap">${typeof t=="string"?nD(t,e,n,o,s,i,a):u`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${rD(r)}`}function AT(){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}=zy(t,e,o.get(e)),a=c.bundles?.find(p=>p.integrity===t?.integrity)??(t?.npm?{npm:t.npm}:null),l=r||n?null:Py(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})}">${IT(e,oh(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>`:Wy(e,l.content,t,l.fileFindings,l.lineFindings,null,!1,l.pretty)}</div></div></div>`}var Xs=new Map,gT=null,Oy=null;function ET(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 oD(e,t){c.bundleCodeSearchMode="files",c.bundleCodeSearchQuery="",ET(e,t),O(),Gu()}function sD(e){let t=n=>{for(let r of n.dirs.values())Xs.set(r.path,!1),t(r)};t(e),O()}function iD(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=Ao(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 By(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?RS:g}">${Z(a,([,m])=>m.path,([m,h])=>{let b=h.path,y=Kg(m,h,n),w=h.package,v=w?.ecosystem==="cargo"||w?.ecosystem==="composer"||w?.ecosystem==="soldeer",x=_l(w?.ecosystem),k=w?.variant?`${y.node.sourcePath}
|
|
193
|
+
Variant ${w.variant}`:y.node.sourcePath,$=h.packageInfo,S=!!$||!!w?.variant,C=$&&i?L=>{let{bytes:A,loc:E}=kS(i,h.sourcePath);Object.assign(L.dataset,{tooltipLoc:String(E),tooltipSize:ge(A)})}:void 0,R=iD(h,r);return u`<li class="bundle-code-tree-dir"><details .open="${Uw(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>${By(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?Ao(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 aD(e,t,n,r,o="",s=null,i=null){if(!n)return By(e,t,0,r,!1,s,i);let a=_S(e,n,o);return a?By(a,t,0,r,!0,s,i):u`<div class="bundle-code-search-empty">No files match.</div>`}var hT=new WeakMap;function FT(e,t){let n=hT.get(t);return n||(n=ov([...t.keys()].toSorted(),Ot(e)),hT.set(t,n)),n}var bT=1e3,yT=new WeakMap;function lD(e,t,n,r,o=""){let s=gp(e),i=yT.get(t);i||(i=[...t.keys()].filter(d=>s.get(d)!=null).toSorted((d,f)=>s.get(f)-s.get(d)||d.localeCompare(f)),yT.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>bT?l.slice(0,bT):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 cD(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=Wu(n,!1,!1),i=20,a=100,l=[],p=0;for(let d of FT(e,t)){let f=t.get(d);if(typeof f!="string")continue;let m=[],h=f.split(`
|
|
194
|
+
`);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">${qR(h.text,h.ranges)}</span></button></li>`)}</ul></div>`})}</div>`}function dD(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(dl(l),{paragraphs:!1})}</div></button></li>`})}</ul></div>`}function uD(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 wT(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[Ao(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 pD(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>`;gT!==c.selectedBundle&&(Xs.clear(),gT=c.selectedBundle,Oy=null);let o=Rl(n).paths,s=e.kind==="stasis"?e.bundle.modules:null,i=SS(Qn(o).prefix,s,o),a=o.map(S=>Lr(S,i)),l=xS(a,o,s),p=e.fileHashes?Js(e.fileHashes,"issues"):new Map,d=uD(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,Gu();let C=h.endLine??h.line;c.bundleSourceTargetLine=h.line&&C<=Zw(n.get(S))?{bundle:e.integrity,path:S,line:h.line,...C>h.line?{end:C}:{}}:null,c.bundleSourceTargetLine&&eD(h.line)}}if(zn&&(zn.bundle!==c.selectedBundle||m&&m!==zn.path)&&(zn=null),!m)m=wT(e,d,f),m&&(c.bundleSourceFile=m,zn={bundle:c.selectedBundle,path:m,hadIssues:f.size>0},Gu());else if(zn&&!zn.hadIssues&&f.size>0){zn.hadIssues=!0;let S=wT(e,d,f);S&&S!==m&&(m=S,c.bundleSourceFile=S,c.bundleSourceFindingIdx=null,zn.path=S,Gu())}m!==Oy&&(ET(m,i),Oy=m),m&&t?.managedId&&_()?te?.replaceCodeRoute(wr(c.managedTeams,t,c.currentManagedTeam,"code",Md(c))):m&&t?.npm&&_()&&te?.replaceCodeRoute(Ra(t,"code",Md(c)));let b=m?n.get(m):null,{fileFindings:y,lineFindings:w}=zy(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="${()=>oD(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="${()=>sD(l)}">${Ex}</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">${Ng(k,[["files",()=>aD(l,m,$,p,i,e.kind==="stasis"?e.bundle.formats:null,n)],["code",()=>cD(e,n,$,m,i)],["issues",()=>dD(e,$,m,i)],["largest",()=>lD(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?fD(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 LT(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}">${Cs}</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}">${_s}</button></span>`}function vT(e){let t=e.split(`
|
|
195
|
+
`).length;return`${t.toLocaleString()} ${t===1?"line":"lines"} \xB7 ${ge(wn(e))}`}function fD(e,t,n,r,o,s=null){let i=oh(c.bundleCodeHistory,e.integrity,t),{pretty:a,toggle:l,content:p,fileFindings:d,lineFindings:f}=Py(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=TS(e,t,s?.managedId&&s.repoId!=null?{github:s.repoFullName,directory:s.repoDirectory}:null);return u`<header class="bundle-code-main-bar">${LT(i)} ${kn(t,Ho(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">${Cd}</button> ${h?MS(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-${Ao(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} ${MT()} ${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">${vT(n)}</span>`}<span>${vT(p)}</span></span>`:g}</header><div class="bundle-code-main-body">${Wy(t,p,e,d,f,null,!a&&!!(s?.managedId||s?.npm)&&_()&&!vn(),a)}</div>`}var mD=400;function gD(e){return e<=5?8:e<=15?6:e<=40?4:e<=120?3:2}function hD(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 bD(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 wy(e,t,o,n)}function yD(e,t,n){let r=bD(e,n??[],mD);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}${vy(r.text,r.ranges)}</span></div>`}function wD(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(yD(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 vD(e,t,n){let{path:r,lines:o,hits:s}=e,i=Lr(r,t),a=hD(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)=>wD(r,o,f,l,m>0))}</div></section>`}function $D(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=KR(e.integrity??"",t,n,r,o,FT(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?gD(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=>vD(b,f,m))}</div>`}function kD(e,t,n,r){if(!t||typeof e!="string")return null;let o=Wu(t,n,r);if(o.error)return null;let s=new Set,i=e.split(`
|
|
196
|
+
`);for(let a=0;a<i.length;a++)o.ranges(i[a]).length>0&&s.add(a+1);return s}function xD(e,t,n,r){let o=c.bundleSourceFile;if(!o)return g;let s=t.get(o),{fileFindings:i,lineFindings:a}=zy(e,o,s),l=Py(e,r,o,s,i,a);return u`<aside class="bundle-search-side">${IT(o,null,l.toggle)}<div class="bundle-source-body">${Wy(o,l.content,e,l.fileFindings,l.lineFindings,l.pretty?null:n,!1,l.pretty)}</div></aside>`}function SD(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=kD(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">${$D(e,n,r,o,s,a)} ${xD(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 CD(e){let t=!!e.npm;t&&!xl.has(c.bundleDetailsTab)&&(c.bundleDetailsTab="overview");let n=!t&&uT(e,c.bundleDetails,c.bundleDetailsTab==="advisories");c.bundleDetailsTab==="advisories"&&!n&&(c.bundleDetailsTab="overview");let r=t||c.bundleDetailsTab==="compare"||Is(c.bundles??[],c.selectedBundle).length>0,o=!_();c.bundleDetailsTab==="issues"&&!o&&(c.bundleDetailsTab="overview");let s=c.bundleDetailsTab,i=s==="overview",a=c.bundleDetails,l=!!(a&&a.integrity===e.integrity),p=l&&!a.error&&!!(a.json||a.bundle)&&!(a.metadataOnly&&Xn(s));return s==="advisories"&&n&&p&&a.kind==="stasis"&&ju(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?Oo:Lo)}</span><div class="bundles-slide-title">${t?u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.npm.name}">${e.npm.name}</div><npm-version-select .name="${e.npm.name}" .version="${e.npm.version}" .tab="${s}" .list="${nu(e.npm.name)}"></npm-version-select>`:u`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.name}">${e.name}</div>`}</div><button type="button" class="bundles-download-btn bundles-scan-button" ?hidden="${!Xa(e)}" @click="${()=>{zu(e)}}">${W(Vn)}<span>Scan</span></button><div class="bundles-slide-tabs" role="tablist">${n?hn("advisories","Advisories",s):g} ${o?hn("issues","Issues",s):g} ${t?g:hn("terminal","Terminal",s)} ${hn("treemap","Treemap",s)} ${t?g:hn("graph","Graph",s)} ${hn("code","Code",s)} ${t?g:hn("search","Search",s)} ${r?hn("compare","Compare",s):g} ${t&&c.managedSession&&!c.managedSession.publicShare&&c.managedTeams?.some(d=>d.dependencyReview===!0)?hn("review","Review",s):g} ${hn("overview","Overview",s)}</div></header></bundle-slide-header><div class="${q({"bundles-slide-body":!0,"bundles-slide-body-overview":i})}">${i?FD(e,a):p?Ng(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",()=>pD(a,e)],["search",()=>SD(a,e)],["review",()=>u`<npm-review .entry="${e}" .details="${a}" .request="${c.npmReview}" .session="${c.managedSession}" .source="${$b(e)}"></npm-review>`],["compare",()=>u`<bundle-compare .details="${a}" .integrity="${e.integrity}" .request="${c.bundleCompare}" .source="${t?$b(e):null}"></bundle-compare>`],["issues",()=>RD(a)],["advisories",()=>mT(a,O,Xa(e)?()=>{zu(e,{mode:"dependencies"})}:null)]]):l&&a.sourceError?u`<div class="bundles-slide-placeholder is-error">${a.sourceError} <button type="button" data-bundle-retry-sources>Retry</button></div>`:l&&!a.metadataOnly?u`<div class="${q({"bundles-slide-placeholder":!0,"is-error":!!a.error})}">${a.error?`Failed to parse: ${a.error}`:"Bundle contents not parsed."}</div>`:u`<div class="bundles-slide-placeholder">Loading bundle…</div>`}</div></div>`}function _D(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=gf(t.bucketKey,e):t.kind==="repository"&&(n=hf(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=Pe[Ae(s)]??Pe.default;return u`<button type="button" class="report-chip" data-bundle-issue-report="${s}">${W(i)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${s}">${oe(s)}</span></button>`})} ${o>0?u`<span class="bundle-issue-reports-more">, and ${o} more…</span>`:g}</div>`}function OT(e){if(e==null||e==="")return"";let t=String(e),n=t.indexOf("-");if(n>0){let o=parseInt(t.slice(0,n),10),s=parseInt(t.slice(n+1),10);return Number.isFinite(o)&&Number.isFinite(s)&&s>o?`Lines ${o}-${s}`:Number.isFinite(o)?`Line ${o}`:""}let r=parseInt(t,10);return Number.isFinite(r)?`Line ${r}`:""}function 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 RD(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=Y2();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+=Yu(o).length;return r>0?Ys("All matching issues are dismissed.",`${r} ${r===1?"finding matches":"findings match"} this bundle's files, but every one is triaged invalid or deleted.`):Ys("No issues match this bundle's files.",`None of the ${n.toLocaleString()} indexed ${n===1?"finding":"findings"} reference a source file in this bundle \u2014 matching compares exact file hashes, so findings from a different build of the same project won't line up.`)}return Qa(t,{kind:"bundle"})}function Qa(e,{kind:t,bucketKey:n}={}){let r=[...e.keys()],{prefix:o,stripped:s}=Qn(r),i=new Map(r.map((p,d)=>[p,s[d]])),a=[...e.entries()].toSorted(([p,d],[f,m])=>{let h=_e[Ao(d)]??0,b=_e[Ao(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=OT(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> ${_D(b,{kind:t,bucketKey:n})}</div><div class="bundle-issues-finding-desc">${it(dl(b),{paragraphs:!1})}</div>`;return u`<li class="bundle-issues-finding">${t==="bundle"?u`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${p}" data-bundle-view-finding-idx="${y}" data-bundle-view-line="${b.line??""}">${$}</button>`:u`<div class="bundle-issues-finding-link bundle-issues-finding-static">${$}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function NT(e){let t=c.selectedBundle,n=t?e.find(r=>r.integrity===t):null;return n?CD(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 Ku=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>`,TD=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>`,$T=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"}),kT=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"]);function xT(e){if($T[e])return $T[e];let t=0;for(let n of e)t=Math.imul(t,31)+n.codePointAt(0)|0;return kT[(t>>>0)%kT.length]}function MD(e){let t=e.currentTarget,n=e.target.closest?.(".bundles-languages-segment");!n||!t.contains(n)||(t.dataset.tooltip=n.dataset.languageTooltip??"",mv(t))}function ID(e){delete e.currentTarget.dataset.tooltip,gv()}var BT=e=>e.codeStats??=Yw(e.npm?new Map([...gi(e)].filter(([t])=>!Ca.test(t.slice(t.lastIndexOf("/")+1)))):gi(e),xn(e));function DT(e,{legend:t=!1}={}){if(!(e?.kind==="stasis"&&e.bundle)&&!(e?.npm&&e.json))return g;let n=BT(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:xT(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="${MD}" @pointerleave="${ID}">${o.map(({key:a,label:l,lines:p})=>u`<span class="bundles-languages-segment" style="${le({flexGrow:p,background:xT(a)})}" data-language-tooltip="${`${l} \xB7 ${s(p)}% \xB7 ${p.toLocaleString()} LoC`}"></span>`)}</div>${i}`}async function AD(e){try{await(await P()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function ED(e,t){let n=VR(t),r=DT(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="${()=>{AD(e)}}">${Ku}<span>Download bundle</span></button>`:u`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${Ku}<span>Download bundle</span></a>`:u`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${Ku}<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)">${TD}<span>SPDX</span></button></div>`:g}</div>${r}</div>`}function qu(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 FD(e,t){if(e.npm)return LD(e,t);let n=t?.integrity===e.integrity,r=e.summary?.commit,o=n?!t.error&&t.kind==="stasis"?t.bundle:null:e.managedId&&e.repoFullName&&r?{repo:{github:e.repoFullName,directory:e.repoDirectory??"",commit:r}}:null,s=n?t.size:e.managedId?e.size:null,i=(l="",p=!1)=>u`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd>${e.managedId?u`<dt>Repository</dt><dd>${e.repoFullName||"Unattached"}</dd>${e.repoId==null?g:u`<dt>Directory</dt><dd class="mono">/${e.repoDirectory??""}</dd>`}`:g} ${Od(o,l,e.commitInfo).map(d=>u`<dt>${d.label}</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${d.href}" target="_blank" rel="noopener noreferrer">${d.label==="GitHub"?W(Kt):g}<span>${d.text}</span></a> ${d.commit?u`<a class="bundle-origin-link bundle-commit-link" href="${d.commit.href}" data-tooltip="${d.commit.hash}" data-tooltip-icon="commit" data-tooltip-commit-info="${Es(e.commitInfo,d.commit.hash)??g}" target="_blank" rel="noopener noreferrer">${W(al)}<span>${d.commit.text}</span></a>`:g} ${d.commit?.tags?u`<span class="bundle-origin-tags">${d.commit.tags.map(f=>u`<a class="bundle-origin-link bundle-tag-link" href="${f.href}" target="_blank" rel="noopener noreferrer">${W(ll)}<span>${f.name}</span></a>`)}</span>`:g}</dd>`)}<dt>Integrity</dt><dd class="mono bundle-integrity">${e.integrity}</dd>${l?u`<dt>Prefix</dt><dd class="mono">${l}</dd>`:g} ${o?.entries?.size>0?u`<dt>${o.entries.size===1?"Entry":"Entries"}</dt><dd class="mono"><ul class="bundles-entry-points">${[...o.entries].map(d=>u`<li><button type="button" class="bundle-entry-point" data-bundle-view-source="${d}">${Lr(d,l)}</button></li>`)}</ul></dd>`:g} ${p&&Number.isSafeInteger(s)?u`<dt>Size</dt><dd>${ge(s)}</dd>`:g}</dl>`,a=ED(e,t);if(!n)return qu(i("",!0),a);if(t.error)return qu(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 Ny(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=ev(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 Ny(i,w,f,y,Ot(t),a,{bundleSize:t.size,unpackedSize:Dy(y),resources:m,details:t})}return qu(i("",!0),a,{placeholder:u`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`})}function LD(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}">${Ku}<span>Tarball</span></a>`,o=u`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${cb(e)}${r}</div></div>`;if(t?.integrity!==e.integrity||!t.json)return qu(Ah(e,{githubFigures:fb(e),provenance:gb(e),provenanceNamesBuilder:mb(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=ub(e.npm);return Ny(m=>Ah(e,{prefix:m,githubFigures:fb(e),provenance:gb(e),provenanceNamesBuilder:mb(e.npm),files:l}),L1(e,l,t),s,a,null,g,{bundleSize:t.size,unpackedSize:Dy(a),resources:p,leadColumn:u`${F1(e)}${OC(e)}`,trailColumns:s_(p,i),summaryExtra:u`${IC(e,l)}${HC(e,t)}${o_(e,DT(t,{legend:!0}),t)}${AC(e,r,KC(e))}`,overviewClass:"npm-overview",lines:BT(t).lines,sized:(m,h,b)=>Yd(m,d[m],b),fileTag:m=>u`${pb(f.get(m))}${hb(t,m,!0)}`,fileFlags:m=>bb(t,m,f.get(m)),fileIcon:m=>kn(m,p.has(m)?"binary":void 0),fileFilter:PC(e)})}function PT(){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])=>cf(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 WD(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();PD(l,c.packagesSortBy);let p=n.reduce((m,[,h])=>m+h.findings.length,0),d=new Set;for(let[,m]of n)for(let h of m.reports)d.add(h);let f=o?"packages-layout open":"packages-layout";return u`<div class="${q({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${l.length===n.length?u`${n.length} ${n.length===1?"package":"packages"}`:u`${l.length} of ${n.length} ${n.length===1?"package":"packages"}`}</span> ${p>0?u`<span>${p} ${p===1?"finding":"findings"} across ${d.size} ${d.size===1?"report":"reports"}</span>`:g}</div></div>${BD(t)}</header>${n.length===0?u`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":c.shownTriage?`No ${c.shownTriage} findings in any package.`:"No untriaged findings in any package."}</p>`:l.length===0?u`<p style="color:var(--muted)">No packages match "${c.packagesSearchQuery}".</p>`:u`<div class="${f}"><ul class="packages-list">${Z(OD(l),ND,m=>HD(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">${jD(o[0],i,s?s[0]:void 0)}</div></aside>`:g}</div>`}</div>`}function OD(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 ND(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function BD(e){return u`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${DD}"></triage-selector></div>`}var DD=["inprogress","fixed","invalid","deleted","ignored"];function PD(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 zD(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 WD(e,t,n){let r=Zt().get(e),o=zD(r,n),s=c.packageSlideTriage??"live",i=r?zT(r,e,s,n):new Map,a=[...i.values()].reduce((f,m)=>f+m.length,0),l=s==="live"?a===1?"issue":"issues":a===1?`${s} issue`:`${s} issues`,p=s==="live"?"No live issues for this package.":`No ${s} issues for this package.`,d=typeof n=="string"?` @ ${n}`:"";return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="package-slide-back" aria-label="Back to packages">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${`${e}${d}`}">${e}${d}</div><div class="bundles-slide-integrity">${a} ${l} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="package" .counts="${o}"></slide-triage-tabs></header><div class="bundles-slide-body">${i.size===0?u`<div class="bundle-issues-empty">${p}</div>`:Qa(i,{kind:"package",bucketKey:e})}</div></div>`}function HD(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&&UD(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"?VD(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 UD(e,t){return e.kind==="single"?!0:e.version===t}function VD(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 jD(e,t,n){let r=Zt().get(e),s=[...(r?zT(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>${GD(e,t,n)}`}function zT(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=WT(t,i);o.has(p)||o.set(p,[]);let d=o.get(p);for(let f of l)d.push(f)}return o}function GD(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=WT(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 WT(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 HT(){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 JD(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();YD(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>${KD(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])=>ZD(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">${QD(o[0],o[1])}</div></aside>`:g}</div>`}</div>`}function KD(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="${qD}"></triage-selector></div>`}var qD=["inprogress","fixed","invalid","deleted","ignored"];function YD(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 XD(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 JD(e,t){let n=no().get(e),r=XD(n),o=c.repositorySlideTriage??"live",s=n?UT(n,o):new Map,i=[...s.values()].reduce((p,d)=>p+d.length,0),a=o==="live"?i===1?"issue":"issues":i===1?`${o} issue`:`${o} issues`,l=o==="live"?"No live issues for this repository.":`No ${o} issues for this repository.`;return u`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="repository-slide-back" aria-label="Back to repositories">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${nt(e)}">${nt(e)}</div><div class="bundles-slide-integrity">${i} ${a} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="repository" .counts="${r}"></slide-triage-tabs></header><div class="bundles-slide-body">${s.size===0?u`<div class="bundle-issues-empty">${l}</div>`:Qa(s,{kind:"repository",bucketKey:e})}</div></div>`}function ZD(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 QD(e,t){let n=no().get(e),o=[...(n?UT(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>${eP(e,t)}`}function UT(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 eP(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 VT(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 Eo(e,t,n){return`${e} ${e===1?t:n}`}function tP(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`:vw[o];return u`<span class="${`links-finding-status triage-${o}`}" data-tooltip="${s?r.map(({name:a})=>oe(a)).join(", "):g}">${i}</span>`}function Hy(e,t=[],n=!0,r=g){let{id:o,title:s}=e,i=t[0]?.name,a=Gl(o),l=jl(o)??a;return u`<li class="${n?"links-finding":"links-finding links-finding-context"}">${i?u`<button type="button" class="links-finding-id mono" data-links-preview="${o}" data-preview-report="${i}" data-preview-row="${t[0].rowIndex??g}" data-preview-managed-report="${t[0].managedReportId??g}" data-tooltip="${a}" aria-haspopup="dialog">${l}</button>`:Vr(o)?u`<a class="links-finding-id mono" href="${`#${jr({id:o})}`}" data-tooltip="${a}">${l}</a>`:u`<span class="links-finding-id mono">${l}</span>`} ${s?u`<span class="links-finding-title">${s}</span>`:g} ${tP(e,t)} ${n?g:u`<span class="links-member-context">not in this link</span>`} ${r}</li>`}function jT(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(Pe[Ae(n)]??Pe.default)}<span class="links-finding-report-label report-button-label" data-tooltip-truncated data-tooltip="${oe(n)}">${oe(n)}</span></button>`)}</div>`}function nP(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">${Hy(r,n,t.has(r.id),jT(n))}</ul></li>`}return u`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${Eo(e.members.length,"finding","findings")} in row</span> ${jT(n)}</div><ul class="links-row-members">${e.members.map(r=>Hy(r,n,t.has(r.id)))}</ul></li>`}function rP(e,t){let{rows:n,missing:r}=VT(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">${Eo(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${Z(n,s=>s.key,s=>nP(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=>Hy({id:s,title:bf(s)}))}</ul></div>`:g}</li>`}function GT(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>${Eo(r.length,"link","links")}</span> <span>${Eo(s.size,"finding","findings")}</span> ${i.size>0?u`<span>found in ${Eo(i.size,"report","reports")}</span>`:g}</div></div></header>${a<s.size?u`<p class="links-note">${Eo(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">${Eo(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)=>rP(l,p))}</ol>`}</div>`}function Uy(e,t,n){let r=new Set(t);for(let o of n)r.add(o);return e.filter(o=>r.has(o))}function KT(){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?Uy(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 Vy=class extends N{static styles=[...N.styles,D(ot)];static properties={workspaceId:{type:String},items:{type:Array},_uploading:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._uploading=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="upload"]')?.focus()}_onClose=()=>this._finish({uploaded:[],failed:[]});_onCancel=()=>this._finish({uploaded:[],failed:[]});_onUpload=async()=>{if(this._uploading)return;this._uploading=!0,this._errors=[];let t=[],n=[];for(let r of this.items)try{let o;if(r.kind==="bundle")o=await S0(this.workspaceId,r.identifier);else{let s=await Cn(r.identifier);o=await Jc(this.workspaceId,r.identifier,s)}if(o.ok)t.push({kind:r.kind,identifier:r.identifier});else{let s=o.reason??"unknown";n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:lr(r),reason:s}]}}catch(o){let s=o?.message??String(o);n.push({kind:r.kind,identifier:r.identifier,reason:s}),this._errors=[...this._errors,{label:lr(r),reason:s}]}this._uploading=!1,this._done=!0,n.length===0&&this._finish({uploaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Vc(this.items),o=n?u`Upload <strong>"${lr(this.items[0])}"</strong> to the workspace's remote inventory?`:u`Upload <strong>${t}</strong> local ${r} to the workspace's remote inventory?`,s=n?g:jc(this.items),i=this._uploading?n?"Uploading\u2026":`Uploading ${t} ${r}\u2026`:n?"Upload":`Upload ${t}`;return u`<dialog @close="${this._onClose}"><header><h3>Upload to remote</h3></header><p class="lwd-body">${o}</p>${s}<p class="nwd-note ui-hint">End-to-end encrypted with the workspace key — only workspace members can decrypt the uploaded content.</p>${Gc(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._uploading}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:u`<button type="button" data-role="upload" @click="${this._onUpload}" ?disabled="${this._uploading||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-upload-dialog",Vy);function qT({workspaceId:e,items:t}={}){return re("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var YT=`.rec-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.rec-list{margin:.2rem 0 .55rem;padding:0;list-style:none;max-height:320px;overflow-y:auto}.rec-row{display:flex;align-items:center;gap:.5rem;padding:.28rem .15rem;font-size:.8rem;line-height:1.4;border-bottom:1px solid rgb(from var(--text) r g b / .06)}.rec-row:last-child{border-bottom:none}.rec-label{flex:1 1 auto;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rec-status{flex:0 0 auto;padding:0 .4rem;border-radius:4px;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.rec-status-checking{color:var(--muted)}.rec-status-good{color:var(--ok, #16a34a)}.rec-status-uploaded,.rec-status-reuploaded{color:var(--accent, #2563eb)}.rec-status-updated{color:var(--high, #d57422)}.rec-status-differs{color:var(--warning, #d97706)}.rec-choice{flex:0 0 auto;display:flex;gap:.3rem;& button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 4px);padding:.1rem .45rem;font:inherit;font-size:.72rem;cursor:default;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&:disabled{opacity:.5;cursor:default}}}.rec-status-failed,.rec-status-check-failed{color:var(--warning, #d97706)}.rec-status-differs,.rec-status-failed,.rec-status-check-failed{background:rgb(from var(--warning, #d97706) r g b / .14)}.rec-status-missing{color:var(--critical, #dc2626)}.rec-summary{margin:.1rem 0 .2rem;color:var(--muted);font-size:.76rem;line-height:1.45}.rec-error{margin:.3rem 0 .2rem;color:var(--critical, #f87171);font-size:.76rem;line-height:1.4}
|
|
197
|
+
`;var XT={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 sP(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 JT=e=>e===1?"copy":"copies",jy=class extends N{static styles=[...N.styles,D(Nl),D(ot),D(YT)];static properties={workspaceId:{type:String},cloudCount:{type:Number},localFileNames:{type:Array},localBundles:{type:Array},autoRun:{type:Boolean},_rows:{state:!0},_running:{state:!0},_ran:{state:!0},_error:{state:!0},_settled:{state:!0},_resolving:{state:!0},_bulk:{state:!0}};constructor(){super(),this.workspaceId="",this.cloudCount=0,this.localFileNames=[],this.localBundles=[],this.autoRun=!1,this._rows=[],this._running=!1,this._ran=!1,this._error=null,this._settled=!1,this._resolving=new Set,this._bulk=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="recheck"]')?.focus(),this.autoRun&&this._onRecheck()}_result(){return{items:this._rows,counts:this._counts()}}_onClose=()=>this._finish(this._ran?this._result():null);_onCancel=()=>this._finish(this._ran?this._result():null);_counts(){return sP(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 _0(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 C0(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 Fu({workspaceId:this.workspaceId,items:t})};_statusHint(t){let n=XT[t.status]?.hint??"";return t.status==="good"&&this._heldLocally(t)&&(n="The cloud copy is intact and matches your copy."),t.detail?`${n}
|
|
198
|
+
${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)}">${XT[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 ${JT(t.updated)} updated from the cloud`),t.uploaded&&n.push(`${t.uploaded} cloud ${JT(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",jy);function Gy({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 ZT=`.ssd-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.lwd-list{margin:.5rem 0 0}
|
|
199
|
+
`;var aP=10,Ky=class extends N{static styles=[...N.styles,D(Nl),D(ot),D(ZT)];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,aP),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",Ky);function QT({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 lP=1500;function eM({open:e,later:t=(r,o)=>setTimeout(r,o),modalOpen:n=()=>fv()}){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,lP);return}r.add(i),d.sync&&typeof l=="function"&&l()},0))}return{suggestSync:s,isClosedFor:i=>r.has(i)}}function tM(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 nM(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 Xu=null;function ete(e){let t=Xu=document.startViewTransition(e);return t.ready.catch(()=>{}),t.finished.finally(()=>{Xu===t&&(Xu=null)}).catch(()=>{}),t}function rM(e){let t=null;return n=>{t!==null&&t!==n&&Xu?.skipTransition(),t=n,e()}}function Vt(){be.classList.add("active"),ut.classList.add("hidden")}function Qy(){let e=Ep(c.reports);if(!e)return null;let t=Object.keys(e),r=fr().filter(d=>Fe(d).commonTriage===c.shownTriage),o=Ap(r,c.severityMode),s=Kl(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=>(Yv(d)??"__own__")===ee.focusedPkg),ee.showAll||(p=p.filter(d=>Fp(d,o,s)))):p=ee.showAll?t:t.filter(d=>Fp(d,o,s)),{treeData:e,files:p,ownCounts:o,transitiveCounts:s,severitySets:i,colorSets:a,fileFindings:l,ownSourceFiles:Xv(p)}}function cP(){let e=Ms();if(!e)return;let t=Qy();if(!t)return;let n=c.currentView==="bundles";e.refreshSidebar(t,{isBundleContext:n,findingsJump:!(n&&_())})}function dP(){let e=Ms();if(!e)return;let t=Qy();t&&e.refreshTopPkgs(t)}function uP(e){return`${Pr[e]??e} findings`}function pP(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 lM(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=Lu(c,l?[l]:[],Ie),f=p?`Team: ${p.name}`:l?`Workspace: ${l.name}`:a?uP(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=Va(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(`
|
|
200
|
+
`)}">${b}<span>${t.length} reports</span></button>`);let w=c.reports.flatMap(E=>E.groups.flat()),x=`${s} ${`finding${s===1?"":"s"}`}`,k=c.currentWorkspace?[]:nx(w,a?cd.filter(E=>E!=="type"):cd),$=g;if(s>0){let E={};for(let I of e){let U=de(An(I),c.severityMode);U&&(E[U]=(E[U]||0)+1)}let 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=pP(n,r,C),L=u`<span class="sep" aria-hidden="true"></span>`,A=fy(o,c.currentView);return u`<header class="page-head"><div class="page-title"><h1>${d?py(d,c.currentView):f}${y}${Va(d,"bundles",c.currentView)}${R}${A}${cM()}</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:fP}=eM({open:e=>QT({names:e})}),mP=new Set(["findings","files","links"]);function cM(){if(G.status!=="online")return g;if(!mP.has(c.currentView))return g;let e=KT();if(!e)return g;let{workspaceId:t,fileNames:n,mode:r}=e,o=v0(t);if(o.length>0&&fP(t,o,{onSync:()=>qy(t,r,n),retry:O}),r==="single"){let x=n[0];if(o.includes(x))return oM({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:()=>qy(t,r,n)});let k=qm(t,x)?"cloud":"local";return oM({status:k,label:k,title:k==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:k==="local"?()=>sM({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=Xm(t),l=n.filter(x=>!qm(t,x)),p=i.filter(x=>!y0(t,x)),d=[...l.map(x=>({kind:"report",identifier:x})),...p.map(x=>({kind:"bundle",identifier:x}))];if(a===0&&d.length===0)return g;let f=[a>0?`${a} in cloud`:null,d.length>0?`${d.length} local-only`:null,o.length>0?`${o.length} differ from the cloud`:null,a>0?'click "cloud" to re-check storage':null,d.length>0?`click "local" to upload ${d.length}`:null].filter(Boolean).join(" \u2014 "),m=o.length===1?`Your copy of "${o[0]}" doesn't match its cloud copy. Click to re-check and bring them in line.`:`${o.length} reports don't match their cloud copies. Click to re-check and bring them in line.`,h=o.length===0?g:u`<button type="button" class="sync-badge-chunk differ" data-tooltip="${m}" aria-label="${`${o.length} report${o.length===1?"":"s"} differ from the cloud \u2014 re-check`}" @click="${x=>{x.stopPropagation(),qy(t,r,n)}}">${uM()}<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(),Gy({workspaceId:t,cloudCount:a,localFileNames:n,localBundles:i})}}">${pM()}<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(),sM({workspaceId:t,items:d})}}">${dM()}<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 qy(e,t,n){let r=Y().find(i=>i.id===e),o=t==="single"?Uy(r?.reports??[],c.storedFiles??[],n):n,s=r&&Array.isArray(r.bundles)?r.bundles:[];return Gy({workspaceId:e,cloudCount:Xm(e),localFileNames:o,localBundles:s,autoRun:!0})}function oM({status:e,label:t,title:n,onClick:r}){let o=e==="cloud"?pM():e==="differ"?uM():dM(),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 dM(){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 uM(){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 pM(){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 sM({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 qT({workspaceId:e,items:t})}function gP(e){return Object.values(e).some(n=>n>0)||c.filterSeverities.size>0?u`<severity-chips .counts="${e}"></severity-chips>`:g}function hP(e){return Object.values(e).some(n=>n>0)||c.filterColors.size>0?u`<triage-filter .counts="${e}"></triage-filter>`:g}function bP(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} ${gP(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} ${hP(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function Yy(e,t){return e.map(n=>({p:An(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}var iM=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),Zu=null,fM=0,Zs=null;function el(e,t=!1,n=null,r=!1,o=!1){return u`<finding-card data-gid="${ie(e)}" .group="${e}" ?in-group="${t}" context="${n??g}" ?lazy="${r}" ?popup="${o}"></finding-card>`}var mM=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>`,gM=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>`,yP={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};function Zy(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?Pc(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=yP[b]??"?",w=Bo(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}">${Ts}</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}`}">${Ts}</button>`:u`<span class="kanban-action kanban-fix-note" role="img" data-tooltip="${`Fix: ${k}`}" aria-label="${`Fix: ${k}`}">${Ts}</span>`:l&&($||_()&&dr(i))&&(S=u`<comment-preview class="kanban-action" .finding="${i}" .comment="${$}">${Rd}</comment-preview>`);let C=u`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${b}`}" data-tooltip="${w?`${st(b)} \u2014 corrected from ${st(i.severity)}`:g}" aria-label="${w?`Severity ${st(b)}, corrected from ${st(i.severity)}`:`Severity ${st(b)}`}">${y}${w?"*":""}</span> ${x?u`<span class="kanban-flag" aria-label="Flagged">${Td}</span>`:g} ${S}</div><span class="kanban-title">${a}</span><div class="kanban-meta"><span class="kanban-loc">${i.file}${h}</span> ${i.confidence===void 0||i.confidence===null?g:u`<span class="kanban-conf" data-tooltip="${`Confidence ${i.confidence}/10`}">${i.confidence}</span>`} ${d?u`<span class="kanban-analyzer" role="img" data-tooltip="${ms[d]}" aria-label="${ms[d]}">${W(Pe[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 Xy={content:"",parts:""};function wP(e){return Xy.content!==e&&(Xy={content:e,parts:Fd(e)}),Xy.parts}function vP(e){let{content:t,range:n,highlighted:r}=e,o=t.split(`
|
|
201
|
+
`).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):wP(t)}</code></pre></div>`}function hM(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 bM(e,t=g,n=!1){c.focusCodeTick;let r=_x(e),o=$d(e),s=r?"focus-main with-code":"focus-main",i=le({"--focus-split":String(c.focusSplit)});return u`<div class="${s}" style="${i}" data-gid="${ie(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?g:hM(e)} ${el(e,!1,"focus",!1,n)}</div></div>${t} ${r?u`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${tc}" aria-valuemax="${nc}" aria-valuenow="${Math.round(c.focusSplit)}" data-tooltip="Drag to resize · double-click to reset"></div><div class="focus-pane focus-pane-code" data-focus-code-file="${r.file??g}" data-focus-code-integrity="${r.integrity??g}">${r.loading?u`<div class="focus-code-empty">Loading source…</div>`:u`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?u`<span class="focus-code-line">:${zv(r.range)}</span>`:g} ${(o?.stack.length??0)>1?u`<div class="focus-code-nav"><button type="button" class="focus-code-nav-btn" data-code-history="back" ?disabled="${o.at===0}" aria-label="Back to the previously shown file">${Cs}</button> <button type="button" class="focus-code-nav-btn" data-code-history="forward" ?disabled="${o.at===o.stack.length-1}" aria-label="Forward to the next shown file">${_s}</button></div>`:g}</header><div class="focus-code-body">${vP(r)}</div>`}</div>`:g}</div>`}function yM(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">${hM(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?gM:mM}</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?bM(e,d,!0):el(e,!1,"kanban-detail",!1,!0):u`<div class="links-preview-message" role="status">${r.error||"Loading finding\u2026"}</div>`}</div></div>${l.length===0?g:u`<aside class="kanban-detail-side" aria-label="${`${t.label} findings`}"><div class="kanban-detail-side-header"><span class="kanban-detail-side-pick"><select class="kanban-detail-side-select" data-kanban-column aria-label="Column to show">${n.map(f=>{let m=f.key===t.key,h=m?f.label:`${f.label} (${f.count})`;return u`<option value="${f.key}" data-gid="${f.firstGid}" .selected="${m}" ?disabled="${f.count===0}">${h}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${p===0}" aria-label="Previous finding">${Cs}</button> <span class="count">${p<0?l.length:`${p+1} / ${l.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${p===l.length-1}" aria-label="Next finding">${_s}</button></div></div><div class="kanban-detail-side-body">${Z(l,f=>ie(f),f=>Zy(f,{variant:"kanban-side",active:ie(f)===a}))}</div></aside>`}</div>`}function $P(e,t){if(c.viewMode==="table"){let r=c.sortBy==="file"?Yy(e,iM):e;return r.length===0?g:(Zu=r,u`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?u`<aside class="findings-table-details" id="findings-table-details" aria-label="Finding details"><button type="button" class="findings-table-details-close" data-table-deselect aria-label="Close details">×</button><div class="findings-table-details-body">${el(t)}</div></aside>`:g}</div>`)}if(c.viewMode==="focus"){if(e.length===0)return g;let r=e.indexOf(t);fM=r;let o=t,s=r===0,i=r===e.length-1;return u`<div class="focus-view">${bM(o)}<aside class="focus-sidebar" aria-label="Up next"><div class="focus-sidebar-header"><span class="label">Up next</span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-focus-nav="prev" ?disabled="${s}" aria-label="Previous finding">${Cs}</button> <span class="count">${r+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${i}" aria-label="Next finding">${_s}</button></div></div><div class="focus-sidebar-body">${Z(e,a=>ie(a),a=>Zy(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?gM:mM}</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)=>Zy(h,{active:ie(h)===c.kanbanPopoverGid,expandedTrackLast:(b+1)%r.length===0}))}</div></div>`})}</div>${yM(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"?Yy(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>${Mp(a,En(a))}</span> <span class="count">${i.length}</span></div><div class="file-body">${Z(i,l=>ie(l),l=>el(l,!1,null,!0))}</div></div>`})}`}let n=c.sortBy==="file"?Yy(e,iM):e;return u`${Z(n,r=>ie(r),r=>{let o=je(r),s=jv(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">${Mp(o,En(o))}</span> ${s===g?g:u`<span class="line-num">${s}</span>`} ${a?u`<span class="meta">${a}</span>`:g} ${i?u`<span class="run-meta">${i}</span>`:g}</div>${el(r,!0,null,!0)}</div>`})}`}function kP(){c.bundleSourceFile&&Sg().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&J(AT(),e)}var xP=rM(CP);function O(){xP(c.currentView)}function bn(e){let t=document.querySelector(`#${e}`);return(!t||!be.contains(t)||be.firstElementChild!==t)&&(be.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function Du(){let e=Lu(c,Y(),Ie);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=bn("empty-workspace-slot");t&&J(u`${lM([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),Vt()}var SP={"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"}},aM=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),Ju=null;function Ka(){let e=c.revalidateConflicts.size>0,t=!e&&zl(c.reports);return e?c.showRevalidation!==!1&&(Ju=c.showRevalidation,c.showRevalidation=!1):(Ju!==null&&(c.showRevalidation=Ju,Ju=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 Jy=null;function CP(){ys()||U0(),kP(),Wl(c.reports),kc()&&queueMicrotask(()=>{xe()}),Hl(c.reports)&&pr();let e=Ka(),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=Lu(c,Y(),Ie),z=bn("workspace-content-slot");z&&J(IR(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)&&Sg().catch(()=>{});let T=bn("bundles-slot");T&&J(NT(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=CT(c.bundleDetails);if(vt){TT(vt);let fw={hideAllFiles:!0,triageCounts:ST(c.bundleDetails,new Set(vt.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:vt.canPackagesView,showBundleLayouts:!0,hasIssues:vt.hasIssues},ii=Jy,mw=Re.querySelector("graph-layout");!vt.issuesShown&&ii&&!ii.issuesShown&&mw&&ii.state===ee.graphState&&ii.details===F&&ii.reason===ee.bundleReason?mw.options=fw:(Jy=null,Lg(Re,vt,fw,_T,RT).then(TM=>(TM&&ee.graphState&&(Jy={state:ee.graphState,details:F,reason:ee.bundleReason,issuesShown:vt.issuesShown}),null)))}}}if(z&&!F.metadataOnly&&c.bundleDetailsTab==="terminal"){let Re=document.querySelector("#bundle-terminal-slot");Re&&Vx(Re,c.bundleDetails)}Vt();let pe=c.bundles.find(Re=>Re.integrity===c.selectedBundle)?.npm;document.title=pe?`DeepView \u2014 ${pe.name}@${pe.version}`:"DeepView \u2014 bundles";return}if(c.currentView==="reviews"){let 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(I1(),T),Vt(),document.title="DeepView \u2014 npm packages";return}if(c.currentView==="packages"){let T=bn("packages-slot");T&&J(PT(),T),Vt(),document.title="DeepView \u2014 packages";return}if(c.currentView==="repositories"){let T=bn("repositories-slot");T&&J(HT(),T),Vt(),document.title="DeepView \u2014 repositories";return}if(c.currentView==="links"){if(c.currentLinks){let T=bn("links-slot"),F=ys();T&&J(u`${GT(cM())}${F?yM(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=SP[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=rm(),c.currentView==="manage-import"&&(z.localDeps=nm(),z.promptPassword=Wc,z.resolveConflicts=Kc,z.confirmTriageImport=o0,z.confirmContentImport=i0,z.showTriageComparison=d0),z.session=c.managedSession,z.allowShare=c.managed?.allowShare===!0,c.currentView==="manage-scans"&&(z.selection=c.scanSelection),c.currentView==="manage-bundles"&&(z.createRepoId=c.bundleCreationRepoId,z.installTooltips=pe),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")&&Du();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){Bo(F)&&(d=!0);let z=he(F);tn(F)&&(l=!0),z&&(z.comment&&(a=!0),z.fix&&(l=!0),z.flagged===!0&&(p=!0))}let f=ed(),m=r.some(T=>T.some(F=>f.has(F.id)));m||(c.filterDuplicates="");let h=i.some(og),b=i.some(sg);h||(c.filterCrossContext=""),b||(c.filterAppStacked="");let y=O0(i);y||(c.filterSecurity="");let w=new Set,v=!1,x=!1,k=!1;for(let T of i)for(let F of T){let z=Yr(F);z&&w.add(z)}for(let T of dg()){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&&Rp(R),A=rg(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(pg),Nr=T=>{if(T==null)return 1/0;let F=yt.indexOf(T);return F===-1?yt.length:F},tp=[...Ke].toSorted((T,F)=>{let z=Nr(T),pe=Nr(F);return z!==pe?z-pe:String(T??"").localeCompare(String(F??""))}),np=[...Ce].toSorted(aM);if(c.filterAnalyzer){let T=c.filterAnalyzer===hs?null:c.filterAnalyzer;(!Ke.has(T)||Ke.size<2)&&(c.filterAnalyzer="")}if(c.filterModel){let T=c.filterModel===bs?null:c.filterModel;(!Ce.has(T)||Ce.size<2)&&(c.filterModel="")}let Hn=Ov(w);c.filterRevalidate&&!Hn.some(T=>T.value===c.filterRevalidate)&&(c.filterRevalidate="");let V=nd(i);V&&(c.filterRevalidate="confirmed");let ue=w.has("partial")&&po();ue||(c.filterPartial="");let wt=e&&(v||x||!c.currentWorkspace&&k),rw=!(e&&c.showRevalidation!==!1)&&!c.upstreamOnly&&E&&M;!rw&&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 rp=N0(i),ti={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},ni={red:0,blue:0,green:0,gray:0,none:0};for(let T of rp){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 ow=M0(rp),xM=[...ow].toSorted(aM);if(c.filterRepo){let T=c.filterRepo===Qm?null:c.filterRepo;ow.has(T)||(c.filterRepo="")}let ri=D0(rd(i)),rl=Ep(c.reports),sw=rl?Object.keys(rl).length:0,op=sw>1;!op&&c.currentView==="files"&&(c.currentView="findings"),!op&&c.viewMode==="graph"&&(c.viewMode="kanban");let iw=lM(r,C,Q,We,sw);if(c.currentView==="files"){let T=Ap(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(iw,F),z&&J(zx(rl,T),z),Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let SM=c.viewMode==="table"&&c.tableSelectedGid&&ri.some(T=>ie(T)===c.tableSelectedGid),oi=null;c.viewMode==="graph"&&rl&&(oi=Qy(),oi||(c.viewMode="kanban"));let ol=!!oi,Br="findings-content";SM&&(Br+=" with-details"),ol&&(Br+=" with-graph"),o&&(Br+=" with-kanban"),c.viewMode==="focus"&&(Br+=" with-focus");let aw=g,sl=g,lw=g,cw=tM(ri,c,fM);Zu=null,ol||(aw=bP(ri.length,i.length,s,ti,ni,{showSource:rw,showConfidence:L,showPriority:A,showGraphMode:op,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:tp,models:np,groups:rp},xM),c.shownTriage&&i.length===0?sl=u`<p style="color:var(--muted); margin: 1rem 0;">No ${c.shownTriage} findings.</p>`:ri.length===0&&i.length>0&&!o?sl=u`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:i.length===0&&(sl=r.length>0?u`<p style="color:var(--green)">All ${S} issues triaged.</p>`:u`<p style="color:var(--green)">No ${S} issues found.</p>`),lw=$P(ri,cw));let si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content"),CM=Gt&&Gt.querySelector(":scope > #findings-graph-slot"),_M=Gt&&Gt.querySelector(":scope > #findings-body-slot"),RM=Gt&&(CM?"graph":_M?"body":null)===(ol?"graph":"body");if(!si||!Gt||!be.contains(si)||!be.contains(Gt)||!RM){let T=ol?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';be.innerHTML=`<div id="header-slot"></div><div class="${Br}">${T}</div>`,si=document.querySelector("#header-slot"),Gt=be.querySelector(":scope > .findings-content")}else Gt.className!==Br&&(Gt.className=Br);si&&J(iw,si);let dw=document.querySelector("#toolbar-slot");dw&&J(aw,dw);let uw=document.querySelector("#empty-state-slot");uw&&J(sl,uw);let pw=document.querySelector("#findings-body-slot");if(pw&&J(lw,pw),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"]};Lg(T,oi,z,cP,dP)}}if(Zu){let T=be.querySelector(".finding-table-slot");T&&(Zs||(Zs=document.createElement("finding-table")),Zs.items=Zu,Zs.selectedGid=c.tableSelectedGid,Zs.parentNode!==T&&T.append(Zs))}Vt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`,_()&&te?.replaceFindingRoute(nM(cw,c))}var AP=500,EP=14;function Qu(e){if(!e)return null;let t={};e.color&&(t.color=e.color);let n=qe(e);return n&&(t.triage=n),typeof e.fix=="string"&&e.fix&&(t.fix=e.fix),typeof e.flagged=="boolean"&&(t.flagged=e.flagged),Object.keys(t).length>0?t:null}function tl(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function FP(e,t){return e.length>100?!1:t==null?!0:(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}var LP=e=>new TextEncoder().encode(e).length,jt=new Map,ei=new Set,nl=(e,t=c.currentManagedTeam)=>JSON.stringify([t,e]),Or=new Map,Wn=null,Qs=Promise.resolve();function vM(){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 ew(){return Array.isArray(c.managedReports)&&c.managedReports.length>0?c.managedReports:c.managedReport==null?[]:[c.managedReport]}function $M(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(vM())}function OP(e){let t=ew();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 tw(){let e=c.managedSession;return c.serverMode==="managed"&&c.localMode!==!0&&e!=null&&Yn(e.role,"triage")}function NP(e){return e===403&&c.managedSession?.viewer?!0:e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function BP(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 DP(e,t,n){if(!tw())return;let r=[...e.changes.keys()],o=0;for(;o<r.length;){let s=o,i={},a=0,l=EP;for(;o<r.length&&a<200;){let f=r[o],m=LP(`${JSON.stringify(f)}:${JSON.stringify(e.changes.get(f))},`);if(a>0&&l+m>262144)break;i[f]=e.changes.get(f),l+=m,a++,o++}let p=await jk(e.report.id,i,c.managedSession?.csrfToken,e.teamId),d=p>=200&&p<300;if(!d&&!NP(p)){BP(e,r.slice(s));return}d||console.warn("managed: the server refused a triage batch",e.report.id,p,Object.keys(i)),!d&&p===403&&c.managedSession?.viewer&&n.add(e.report.id);for(let[f,m]of Object.entries(i)){let h=jt.get(f)?.fix??"",b=d?m?.fix??"":h;b!==h&&t.add(e.teamId),jt.set(f,{key:tl(m),fix:b})}}}function ep(){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(()=>DP(r,t,n)).catch(o=>{console.warn("managed: triage push failed",o)});Qs=Qs.finally(()=>{for(let r of t)fs(r);for(let r of n)Sb(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function kM(){if(!(ew().length===0||!tw()||ei.size===0)){for(let t of vM()){let n=Qu(c.triage.get(t)),r=tl(n);if((jt.get(t)?.key??"")===r)continue;if(!FP(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=OP(t);if(o==null||!ei.has(nl(o.id)))continue;let s=c.currentManagedTeam,i=nl(o.id,s),a=Or.get(i);a==null&&(a={report:o,key:i,teamId:s,changes:new Map},Or.set(i,a)),a.changes.set(t,n)}Or.size!==0&&(Wn!=null&&clearTimeout(Wn),Wn=setTimeout(ep,AP))}}var wM=!1;function tR(){wM||!tw()||(wM=!0,Jf(kM))}function Tu(){I$(),c.managedComments?.clear(),c.managedIssues.clear(),globalThis.document?.dispatchEvent(new Event("managed-comments-reset")),Wn!=null&&(clearTimeout(Wn),Wn=null),Or.clear(),ei.clear(),jt.clear()}async function lne(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&&ew().some(y=>y.id===e);if(!l()||(ei.delete(nl(e)),ep(),!await nw(n)||!l()))return!1;let p=new Map(c.managedIssues),d=r?await r(e):null,f=r?d?.entries:await zm(e,s,{signal:n});if(f==null||!l())return!1;let m=!1,h=$M(e),b=d&&ta(h,d.issues,p);for(let y of h){if(!Object.hasOwn(f,y)){jt.delete(y);continue}let w=Qu(f[y]);jt.set(y,{key:tl(w),fix:w?.fix??""});let v=w?.triage==null||w.triage==="ignored"?c.triage.get(y)?.ignoredReports:void 0;ml(c.triage,y,{...w,ignoredReports:v,scopedIgnoredReports:c.triage.get(y)?.scopedIgnoredReports})&&(m=!0)}if(ei.add(nl(e)),d&&Bm(s,h,p),b&&!m&&t&&O(),m){if(await xe(),!l())return!1;t&&O()}return kM(),!0}function nw(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 Sb(e,{signal:t,readAnnotations:n}={}){let r=c.reports,o=c.currentManagedTeam,s=c.managedSession?.role,i=c.managedSession?.id,a=()=>!t?.aborted&&c.serverMode==="managed"&&!c.localMode&&c.reports===r&&c.currentManagedTeam===o&&c.managedSession?.id===i&&c.managedSession?.role===s&&ei.has(nl(e,o));if(!a()||(ep(),!await nw(t)||!a()))return!1;let l=$M(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 zm(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=Qu(c.triage.get(w));if(jt.get(w)!==v||tl(x)!==(v?.key??""))continue;let k=Qu(m[w]);(v?.fix??"")!==(k?.fix??"")&&(y=!0),jt.set(w,{key:tl(k),fix:k?.fix??""});let $=k?.triage==null||k.triage==="ignored"?c.triage.get(w)?.ignoredReports:void 0;ml(c.triage,w,{...k,ignoredReports:$,scopedIgnoredReports:c.triage.get(w)?.scopedIgnoredReports})&&(b=!0)}if(y&&fs(o),f&&Bm(o,l,d),h&&!b&&O(),b){if(await xe(),!a())return!1;O()}return!0}function g_(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()=>(ep(),!await nw(t)||t?.aborted?null:Wk(e,{signal:t,reportId:n})))(),(await r)?.(o)??null)}export{k$ as a,x$ as b,S$ as c,C$ as d,of as e,_$ as f,Qr as g,c as h,_ as i,nI as j,lI as k,Ie as l,Ef as m,Y as n,ss as o,vI as p,kI as q,xI as r,CI as s,_I as t,Yi as u,Y$ as v,RI as w,xe as x,ek as y,NI as z,BI as A,DI as B,tA as C,rA as D,mW as E,gW as F,hW as G,bW as H,yW as I,wW as J,G as K,te as L,ea as M,Am as N,Em as O,Om as P,K4 as Q,ye as R,Ae as S,rn as T,Hc as U,Qk as V,Uc as W,Kc as X,ot as Y,Ee as Z,hs as _,Qm as $,bs as aa,td as ba,MW as ca,IW as da,AW as ea,cr as fa,TA as ga,MA as ha,aa as ia,rd as ja,D0 as ka,OW as la,ys as ma,U0 as na,qW as oa,ie as pa,po as qa,dr as ra,DA as sa,_t as ta,he as ua,PA as va,ur as wa,je as xa,En as ya,Y0 as za,Fe as Aa,c6 as Ba,WA as Ca,d6 as Da,da as Ea,u6 as Fa,fr as Ga,mo as Ha,p6 as Ia,f6 as Ja,ld as Ka,vs as La,B6 as Ma,me as Na,tH as Oa,nH as Pa,kg as Qa,go as Ra,gr as Sa,rH as Ta,dE as Ua,gd as Va,Sg as Wa,wd as Xa,uH as Ya,pH as Za,wx as _a,kx as $a,$d as ab,TH as bb,kd as cb,Ss as db,NH as eb,CE as fb,UH as gb,Mx as hb,Ix as ib,_E as jb,Ag as kb,xd as lb,VH as mb,jH as nb,Sd as ob,Cd as pb,Cs as qb,_s as rb,Ex as sb,ZH as tb,QH as ub,it as vb,kU as wb,xU as xb,nF as yb,SU as zb,Is as Ab,wr as Bb,Md as Cb,WU as Db,Kx as Eb,Fd as Fb,xS as Gb,SS as Hb,_S as Ib,Kg as Jb,RS as Kb,XF as Lb,JF as Mb,TS as Nb,MS as Ob,dV as Pb,eL as Qb,tL as Rb,PS as Sb,eh as Tb,WS as Ub,CV as Vb,HS as Wb,VS as Xb,YS as Yb,XS as Zb,OV as _b,ZS as $b,NV as ac,BV as bc,oh as cc,PV as dc,zV as ec,GV as fc,yh as gc,Ca as hc,u1 as ic,ln as jc,v1 as kc,Ra as lc,$1 as mc,YO as nc,oN as oc,iN as pc,aN as qc,Hh as rc,oC as sc,cN as tc,dN as uc,JG as vc,uN as wc,ZG as xc,r7 as yc,o7 as zc,s7 as Ac,i7 as Bc,a7 as Cc,dC as Dc,mC as Ec,hC as Fc,Yh as Gc,yC as Hc,Zh as Ic,tK as Jc,$C as Kc,nK as Lc,rK as Mc,CN as Nc,oK as Oc,i_ as Pc,$b as Qc,Ge as Rc,mB as Sc,tR as Tc,Tu as Uc,lne as Vc,Sb as Wc,g_ as Xc,To as Yc,ly as Zc,Ua as _c,rR as $c,Ir as ad,Ks as bd,HR as cd,PJ as dd,zJ as ed,Wu as fd,qR as gd,TZ as hd,MZ as id,_T as jd,RT as kd,Gu as ld,ete as md,cP as nd,dP as od,O as pd,Du as qd,Ka as rd,Bc as sd,Sk as td,ez as ud,tz as vd,nz as wd,rz as xd,oz as yd,sz as zd,iz as Ad,az as Bd,Wm as Cd,lz as Dd,cz as Ed,dz as Fd,uz as Gd,v_ as Hd,L_ as Id,H as Jd,oX as Kd,Tt as Ld};
|
|
200
202
|
/*! Bundled license information:
|
|
201
203
|
|
|
202
204
|
lit-html/directives/map.js:
|