@preventive/triage 1.0.0-alpha.44 → 1.0.0-alpha.46
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/client/linked-findings.js +3 -0
- package/common/bundle-metadata.d.ts +1 -0
- package/common/bundle-metadata.js +1 -1
- package/common/bundle-sources.js +25 -2
- package/common/default-scan-models.ts +1 -1
- package/common/dependency-reviews.d.ts +0 -5
- package/common/dependency-reviews.js +0 -17
- package/common/line-diff.js +5 -4
- package/common/managed/agent-tasks.ts +292 -0
- package/common/managed/github-agents.ts +92 -0
- package/common/managed/github-logins.ts +49 -0
- package/common/managed/roles.ts +7 -0
- package/common/managed/routes.js +88 -7
- package/common/managed/team-app.d.ts +5 -2
- package/common/managed/team-app.js +2 -2
- package/common/server-info.ts +3 -0
- package/common/workspace-app.js +6 -3
- package/out/brotli-fallback.js +3 -3
- package/out/chunk-2XUEZHIP.js +18 -18
- package/out/chunk-2ZDZWLFY.js +1 -0
- package/out/chunk-3PS4KWD2.js +10 -0
- package/out/chunk-4HI2MSAV.js +17 -0
- package/out/chunk-4UFAMJAX.js +1 -0
- package/out/chunk-7C7DWL7I.js +1 -0
- package/out/chunk-7XRR4OFU.js +1 -0
- package/out/chunk-BC2UCLFJ.js +1 -0
- package/out/chunk-BOIXMUU5.js +3 -0
- package/out/chunk-C4Z6ZBXV.js +6 -6
- package/out/chunk-CC4OM6TZ.js +3 -0
- package/out/chunk-G24A42V6.js +2 -0
- package/out/chunk-GDPCLSOS.js +2 -0
- package/out/chunk-GO7FT4OD.js +1 -0
- package/out/chunk-I2MDGSQX.js +3 -0
- package/out/chunk-IYPY47MC.js +1 -0
- package/out/chunk-IZ7POWI3.js +18 -0
- package/out/chunk-JCIIBLKR.js +1 -1
- package/out/chunk-JKGQ3O7O.js +6 -0
- package/out/chunk-LE5ZWLG4.js +235 -0
- package/out/chunk-MSION3G4.js +36 -0
- package/out/chunk-NRPC74AM.js +1 -1
- package/out/chunk-OKRLLE5I.js +17 -0
- package/out/chunk-OOJM4CTU.js +1 -1
- package/out/chunk-PNHBZGDD.js +1 -1
- package/out/chunk-PXK7EU4V.js +1 -0
- package/out/chunk-QB4CBOX2.js +1 -0
- package/out/chunk-R3NZFXVR.js +1 -0
- package/out/chunk-R5O6FAW4.js +1 -1
- package/out/chunk-S6GIXWQW.js +52 -0
- package/out/chunk-SXV2T5C4.js +80 -0
- package/out/chunk-TUII34K2.js +1 -1
- package/out/chunk-V3KWNNMY.js +1 -0
- package/out/chunk-VFWMQ3LG.js +2 -0
- package/out/chunk-VH4XMZIW.js +2 -0
- package/out/chunk-WFYLMF6Z.js +10 -0
- package/out/chunk-WQ74ZBZF.js +7 -0
- package/out/client-managed-import.js +3 -3
- package/out/client-managed.js +31 -35
- package/out/client-sync.js +11 -11
- package/out/compare.js +35 -0
- package/out/dialogs.js +51 -0
- package/out/github-issue-authorized.html +1 -1
- package/out/github-issue-authorized.js +1 -1
- package/out/graph.js +17 -17
- package/out/index.html +30 -34
- package/out/prism.js +14 -14
- package/out/scan.js +2 -0
- package/out/terminal.js +294 -293
- package/out/view.css +1 -1
- package/out/view.js +16 -107
- package/package.json +53 -6
- package/risk/actions/findings.js +161 -0
- package/risk/actions/resolve.js +219 -0
- package/risk/actions/scripts/commands.js +182 -0
- package/risk/actions/scripts/grade.js +113 -0
- package/risk/actions/scripts/packages.js +123 -0
- package/risk/actions/scripts/shell.js +169 -0
- package/risk/actions/uses.js +76 -0
- package/risk/actions/workflow.js +110 -0
- package/risk/files/hosts.js +6 -6
- package/risk/files/readability.js +23 -17
- package/risk/files/runs-code.js +18 -6
- package/risk/files/script.js +7 -3
- package/risk/files/stamps.js +8 -7
- package/risk/index.d.ts +71 -1
- package/risk/index.js +6 -2
- package/risk/npm/assess.js +1 -1
- package/risk/npm/compare.js +34 -10
- package/risk/npm/files.js +413 -2
- package/risk/npm/tarball.js +56 -73
- package/server-e2e/app.ts +5 -4
- package/server-e2e/http.ts +5 -2
- package/server-managed/agent-merges.ts +198 -0
- package/server-managed/app-agents.ts +30 -0
- package/server-managed/avatar-store.ts +1 -0
- package/server-managed/bundle-cache.ts +7 -1
- package/server-managed/combined.ts +3 -2
- package/server-managed/commit-coauthors.ts +83 -0
- package/server-managed/commit-lockfiles.ts +72 -0
- package/server-managed/config.ts +6 -0
- package/server-managed/db-methods.ts +66 -19
- package/server-managed/db-neon.ts +89 -21
- package/server-managed/db-schema.ts +13 -2
- package/server-managed/db.ts +9 -1
- package/server-managed/dependabot-access.ts +60 -0
- package/server-managed/dependabot-alerts.ts +185 -0
- package/server-managed/dependency-review-comments.ts +97 -0
- package/server-managed/dependency-reviews.ts +78 -18
- package/server-managed/github-accounts.ts +33 -0
- package/server-managed/github-actions.ts +71 -0
- package/server-managed/github-app.ts +33 -13
- package/server-managed/github-errors.ts +2 -0
- package/server-managed/github-issue-links.ts +11 -5
- package/server-managed/github-link-oauth.ts +69 -0
- package/server-managed/github-links.ts +204 -0
- package/server-managed/github-oauth.ts +5 -2
- package/server-managed/github-pulls.ts +2 -2
- package/server-managed/github-requests.ts +39 -0
- package/server-managed/github-users.ts +30 -0
- package/server-managed/http-response.ts +10 -2
- package/server-managed/http.ts +1251 -97
- package/server-managed/index.ts +13 -8
- package/server-managed/kept-briefly.ts +37 -0
- package/server-managed/locked-packages.ts +37 -16
- package/server-managed/lockfile-scope.ts +49 -0
- package/server-managed/npm-delta-worker.js +23 -0
- package/server-managed/npm-delta.ts +178 -0
- package/server-managed/npm-insights.ts +20 -11
- package/server-managed/npm-kept.ts +83 -6
- package/server-managed/npm-loads.ts +114 -37
- package/server-managed/npm-packages.ts +110 -64
- package/server-managed/npm-risk.ts +4 -1
- package/server-managed/pretty-print.ts +67 -23
- package/server-managed/pull-comment-reviews.ts +161 -0
- package/server-managed/pull-dependencies.ts +300 -0
- package/server-managed/pull-dependency-reviews.ts +318 -0
- package/server-managed/pull-reviews.ts +205 -0
- package/server-managed/queue.ts +16 -0
- package/server-managed/release-commits.ts +84 -0
- package/server-managed/rename-diff.ts +22 -13
- package/server-managed/report-sources.ts +1 -1
- package/server-managed/report-store.ts +42 -9
- package/server-managed/repository-actions.ts +218 -0
- package/server-managed/repository-agents.ts +220 -0
- package/server-managed/repository-browser.ts +166 -37
- package/server-managed/repository-changes.ts +284 -0
- package/server-managed/repository-code.ts +52 -0
- package/server-managed/repository-dependency-reviews.ts +157 -0
- package/server-managed/repository-history.ts +461 -0
- package/server-managed/repository-issues.ts +181 -0
- package/server-managed/repository-pulse.ts +439 -0
- package/server-managed/repository-risk-audit.ts +13 -0
- package/server-managed/repository-risk-read.ts +170 -0
- package/server-managed/repository-risk.ts +133 -118
- package/server-managed/reviewed-dependencies.ts +149 -0
- package/server-managed/session.ts +27 -9
- package/server-managed/sql.ts +6 -3
- package/server-managed/storage-stores.ts +5 -0
- package/server-managed/storage.ts +4 -2
- package/server-managed/team-app.ts +19 -3
- package/server-managed/team-reports.ts +24 -12
- package/server-managed/upstream-cache.ts +12 -0
- package/server-managed/workspace-shares.ts +4 -1
- package/server.ts +25 -5
- package/out/chunk-2ABLKCOY.js +0 -46
- package/out/chunk-2KBF5TZ7.js +0 -2
- package/out/chunk-35VE6CDH.js +0 -2
- package/out/chunk-3BZ7JERB.js +0 -1
- package/out/chunk-4XCDFGDP.js +0 -10
- package/out/chunk-5LSXOLUS.js +0 -1
- package/out/chunk-5RCM2J63.js +0 -1
- package/out/chunk-7B6HB4D7.js +0 -1
- package/out/chunk-AJ4GTATZ.js +0 -3
- package/out/chunk-CH4UN6WK.js +0 -225
- package/out/chunk-CMQA4DM6.js +0 -1
- package/out/chunk-CVVJAXVY.js +0 -2
- package/out/chunk-DIJJNTRH.js +0 -10
- package/out/chunk-EDKLBQQN.js +0 -17
- package/out/chunk-F47DXCEV.js +0 -33
- package/out/chunk-FK3DZEKL.js +0 -1
- package/out/chunk-G6AJWENO.js +0 -1
- package/out/chunk-GJ4IUCNS.js +0 -1
- package/out/chunk-GNXOKIGP.js +0 -80
- package/out/chunk-GZ4MS3TE.js +0 -13
- package/out/chunk-GZWM7UQM.js +0 -2
- package/out/chunk-IU3CCINR.js +0 -3
- package/out/chunk-K3X5EJBQ.js +0 -2
- package/out/chunk-KEX2ATEW.js +0 -2
- package/out/chunk-KYCNJVB7.js +0 -1
- package/out/chunk-LPCTJYNA.js +0 -7
- package/out/chunk-O4RJY5TP.js +0 -2
- package/out/chunk-OD4LPN3H.js +0 -1
- package/out/chunk-QWDWTBM7.js +0 -1
- package/out/chunk-QYWKC557.js +0 -1
- package/out/chunk-R75XOKUP.js +0 -1
- package/out/chunk-SWTLADW5.js +0 -1
- package/out/chunk-T7OKH4VW.js +0 -1
- package/out/chunk-TZ5KB2Y5.js +0 -10
- package/out/chunk-UNTRGE26.js +0 -2
- package/out/chunk-UTR2LVME.js +0 -2
- package/out/chunk-UYAXVRVL.js +0 -1
- package/out/chunk-V3ME6FI5.js +0 -2
- package/out/chunk-V5O7M2YT.js +0 -1
- package/out/chunk-VIHGO77Y.js +0 -1
- package/out/chunk-W4J3MGLB.js +0 -1
- package/out/chunk-WGG7KQUH.js +0 -1
- package/out/chunk-XYFXXB2G.js +0 -10
- package/out/chunk-ZESLQCTF.js +0 -6
package/out/chunk-CH4UN6WK.js
DELETED
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import{b as zv}from"./chunk-JCIIBLKR.js";import{b as sv}from"./chunk-K3X5EJBQ.js";import{a as at,b as he,d as jw,e as Il,f as Gw,g as N,h as ee,i as Ml}from"./chunk-CVVJAXVY.js";import{A as dt,B as le,C as Gt,D as pe,E as vn,F as Wp,G as Hp,H as qo,I as Pv,J as Ke,K as Up,L as Dv,M as Kr,N as Vp,O as $n,P as jp,Q as Gp,R as Kp,S as qp,T as Yp,U as Xp,a as Gl,b as Lv,d as ct,e as Go,f as Yn,g as Kl,h as vi,i as Np,j as gt,k as $i,l as Op,m as Bp,n as Pp,o as Nv,p as Ov,q as jt,r as ye,s as Te,t as Xn,u as ki,v as Bv,w as Dp,x as zp,y as Ko,z as ql}from"./chunk-VIHGO77Y.js";import{a as dw,b as st,c as Re,e as op,f as uw,g as fl,h as pw,i as fw,j as ip,k as mw,l as gl,m as hl,n as bl,o as yl,p as ve,q as Hn,r as xl,s as di,t as bw}from"./chunk-SWTLADW5.js";import{B as Xw,C as fp,D as Jw,E as Zw,F as Qw,G as Al,H as gi,I as Ho,J as Uo,K as At,L as ev,M as mp,N as gp,O as El,P as Fl,Q as Ur,R as hp,S as tv,T as nv,U as rv,V as ov,W as bp,X as yp,Y as wp,Z as vp,a as $w,b as Be,c as re,d as xw,f as Sw,h as Cw,i as _w,k as Rw,l as Do,m as bn,o as Tw,p as Sl,q as Wo,r as Pw,s as Dw,t as zw,u as Rl,v as Ww,w as Tl,x as Hw,y as Uw,z as Vw}from"./chunk-2ABLKCOY.js";import{a as ui,b as Iw,c as dp,d as Mw,f as Aw,g as It,h as Ew,i as Cl,j as Pe,l as yn,m as Fw,n as up,o as Mt,p as Lw,q as Vn,r as _l,s as Nw,t as pi,u as Ow,v as fi,w as pp}from"./chunk-ZESLQCTF.js";import{a as yw,b as ww,c as Un,d as cp,e as vw,f as gn,h as hn}from"./chunk-UYAXVRVL.js";import{g as iv,h as av,i as $p,j as hi,k as Nl,l as jn,m as Vo,n as kp,o as xp,q as Sp,r as Ol,s as lt,t as Cp,w as lv}from"./chunk-LPCTJYNA.js";import{a as Ve,b as Or,c as Br,d as Wn,e as ul,f as ie,g as pl,h as Je}from"./chunk-W4J3MGLB.js";import{b as sp,c as ii,d as ml}from"./chunk-PNHBZGDD.js";import{$ as J,A as Gn,B as zl,C as Wl,D as Kn,E as hv,F as Gr,H as Ze,I as Mp,J as Hl,K as bv,L as qn,M as yv,N as wv,O as wi,P as vv,Q as $v,R as kv,S as xv,T as Sv,U as Cv,V as _v,X as Rv,Y as Ul,Z as Vl,_ as Tv,a as G,aa as Et,b as ae,ba as Iv,c as U,ca as Mv,d as cv,fa as wn,ga as Ap,h as _p,ha as Ep,i as Rp,ia as Fp,j as Tp,ja as jl,k as dv,ka as Lp,l as uv,m as pv,ma as Av,n as Bl,o as bi,oa as Ev,p as Ip,pa as Fv,q as Vr,s as Pl,t as fv,u as yi,v as jr,w as mv,x as gv,y as Dl,z as jo}from"./chunk-F47DXCEV.js";import{a as Ll}from"./chunk-R5O6FAW4.js";import{a as Kw,b as qw,d as mi,e as Yw}from"./chunk-CMQA4DM6.js";import{b as dl,c as it,d as kl,e as zr,f as lp,g as ci}from"./chunk-AJ4GTATZ.js";import{a as me}from"./chunk-R75XOKUP.js";import{a as Hr,c as Bw,d as zo}from"./chunk-OD4LPN3H.js";import{a as Wr}from"./chunk-3BZ7JERB.js";import{a as X}from"./chunk-TZ5KB2Y5.js";import{a as kw}from"./chunk-XYFXXB2G.js";import{a as z}from"./chunk-DIJJNTRH.js";import{a as ap,c as Dr,d as wl,e as gw,g as vl,h as Po,i as ai,j as je,k as $l,l as li,m as hw,n as Ge}from"./chunk-QYWKC557.js";import{A as sw,B as No,C as Oo,D as Oe,E as Tt,G as iw,H as zn,J as fn,K as aw,L as rp,M as lw,N as cw,O as mt,a as Fr,f as ew,h as Lr,i as Se,j as Xe,k as oi,l as Lo,m as ce,n as tw,o as nw,p as _e,q as Dn,r as al,t as Nr,u as si,v as Rt,w as rw,x as ll,y as ow,z as cl}from"./chunk-GNXOKIGP.js";import{a as Yy,b as np,c as Xy}from"./chunk-C4Z6ZBXV.js";import{a as P,b as tp,c as d,d as Bn,g,i as Y,j as _t}from"./chunk-2XUEZHIP.js";import{a as Bo,b as mn,c as Pr}from"./chunk-TUII34K2.js";import{a as Jy,c as Ao,d as Eo,e as Fo,j as ol,k as Zy,l as Pn,m as Qy,p as Vt,q as sl,r as il}from"./chunk-V5O7M2YT.js";var ef=new WeakMap,Vv=Symbol("iteration key");function VT(e){ef.set(e,new Map)}function jT(e,{target:t,key:n,type:r}){r==="iterate"&&(n=Vv);let o=ef.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 GT({target:e,key:t,type:n}){let r=ef.get(e),o=new Set;if(n==="clear"?r.forEach((s,i)=>{Jp(o,r,i)}):Jp(o,r,t),n==="add"||n==="delete"||n==="clear"){let s=Array.isArray(e)?"length":Vv;Jp(o,r,s)}return o}function Jp(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function jv(e){e.cleaners&&e.cleaners.forEach(KT,e),e.cleaners=[]}function KT(e){e.delete(this)}var Yo=[],Zp=!1;function qT(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(Yo.indexOf(e)===-1){jv(e);try{return Yo.push(e),Reflect.apply(t,n,r)}finally{Yo.pop()}}}function Ft(e){let t=Yo[Yo.length-1];t&&(Gv(t,e),jT(t,e))}function Jn(e){GT(e).forEach(YT,e)}function YT(e){Gv(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function Gv(e,t){if(e.debugger&&!Zp)try{Zp=!0,e.debugger(t)}finally{Zp=!1}}function Kv(){return Yo.length>0}var Wv=Symbol("is reaction");function qv(e,t={}){let n=e[Wv]?e:function r(){return qT(r,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[Wv]=!0,t.lazy||n(),n}function tf(e){e.unobserved||(e.unobserved=!0,jv(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}var De=new WeakMap,Jl=new WeakMap,XT=Object.prototype.hasOwnProperty;function Xl(e){let t=Jl.get(e);return Kv()&&typeof e=="object"&&e!==null?t||Zl(e):t||e}function Qp(e,t){let n=e.next;return e.next=()=>{let{done:r,value:o}=n.call(e);return r||(t?o[1]=Xl(o[1]):o=Xl(o)),{done:r,value:o}},e}var Hv={has(e){let t=De.get(this),n=Reflect.getPrototypeOf(this);return Ft({target:t,key:e,type:"has"}),n.has.apply(t,arguments)},get(e){let t=De.get(this),n=Reflect.getPrototypeOf(this);return Ft({target:t,key:e,type:"get"}),Xl(n.get.apply(t,arguments))},add(e){let t=De.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),o=n.add.apply(t,arguments);return r||Jn({target:t,key:e,value:e,type:"add"}),o},set(e,t){let n=De.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&&Jn({target:n,key:e,value:t,oldValue:s,type:"set"}):Jn({target:n,key:e,value:t,type:"add"}),i},delete(e){let t=De.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&&Jn({target:t,key:e,oldValue:o,type:"delete"}),s},clear(){let e=De.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&&Jn({target:e,oldTarget:r,type:"clear"}),o},forEach(e,...t){let n=De.get(this),r=Reflect.getPrototypeOf(this);Ft({target:n,type:"iterate"});let o=(s,...i)=>e(Xl(s),...i);return r.forEach.call(n,o,...t)},keys(){let e=De.get(this),t=Reflect.getPrototypeOf(this);return Ft({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=De.get(this),t=Reflect.getPrototypeOf(this);Ft({target:e,type:"iterate"});let n=t.values.apply(e,arguments);return Qp(n,!1)},entries(){let e=De.get(this),t=Reflect.getPrototypeOf(this);Ft({target:e,type:"iterate"});let n=t.entries.apply(e,arguments);return Qp(n,!0)},[Symbol.iterator](){let e=De.get(this),t=Reflect.getPrototypeOf(this);Ft({target:e,type:"iterate"});let n=t[Symbol.iterator].apply(e,arguments);return Qp(n,e instanceof Map)},get size(){let e=De.get(this),t=Reflect.getPrototypeOf(this);return Ft({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Yl={get(e,t,n){return e=XT.call(Hv,t)?Hv:e,Reflect.get(e,t,n)}},Uv=typeof window=="object"?window:Function("return this")(),Yv=new Map([[Map,Yl],[Set,Yl],[WeakMap,Yl],[WeakSet,Yl],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function JT({constructor:e}){return!(typeof e=="function"&&e.name in Uv&&Uv[e.name]===e)||Yv.has(e)}function ZT(e){return Yv.get(e.constructor)}var Xv=Object.prototype.hasOwnProperty,QT=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));function eI(e,t,n){let r=Reflect.get(e,t,n);if(typeof t=="symbol"&&QT.has(t))return r;Ft({target:e,key:t,receiver:n,type:"get"});let o=Jl.get(r);if(Kv()&&typeof r=="object"&&r!==null){if(o)return o;let s=Reflect.getOwnPropertyDescriptor(e,t);if(!s||!(s.writable===!1&&s.configurable===!1))return Zl(r)}return o||r}function tI(e,t){let n=Reflect.has(e,t);return Ft({target:e,key:t,type:"has"}),n}function nI(e){return Ft({target:e,type:"iterate"}),Reflect.ownKeys(e)}function rI(e,t,n,r){typeof n=="object"&&n!==null&&(n=De.get(n)||n);let o=Xv.call(e,t),s=e[t],i=Reflect.set(e,t,n,r);return e!==De.get(r)||(o?n!==s&&Jn({target:e,key:t,value:n,oldValue:s,receiver:r,type:"set"}):Jn({target:e,key:t,value:n,receiver:r,type:"add"})),i}function oI(e,t){let n=Xv.call(e,t),r=e[t],o=Reflect.deleteProperty(e,t);return n&&Jn({target:e,key:t,oldValue:r,type:"delete"}),o}var sI={get:eI,has:tI,ownKeys:nI,set:rI,deleteProperty:oI};function Zl(e={}){return De.has(e)||!JT(e)?e:Jl.get(e)||iI(e)}function iI(e){let t=ZT(e)||sI,n=new Proxy(e,t);return Jl.set(e,n),De.set(n,e),VT(e),n}var Qe=Zl;function kn(e){let t=!0,n=qv(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(r){throw tf(n),r}return()=>tf(n)}var Zv="deepview.viewMode",Qv="deepview.severityMode",Si="deepview.repoUrls",e$="deepview.focusSplit",t$="deepview.kanbanDetailFullscreen",n$="deepview.bundleSourceWrap",aI=new Set(["corrected","original"]),rf=50,Ql=20,ec=80;try{localStorage.removeItem(Zv)}catch{}function lI(){try{let e=localStorage.getItem(Qv);return e!==null&&aI.has(e)?e:null}catch{return null}}function cI(){try{let e=localStorage.getItem(t$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function dI(){try{let e=localStorage.getItem(n$);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function r$(e){if(!Number.isFinite(e))return rf;let t=Math.round(e*10)/10;return Math.min(Math.max(t,Ql),ec)}function uI(){try{let e=localStorage.getItem(e$);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?r$(t):null}catch{return null}}function tc(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function nc(){return tc(ye(Si))}function qe(e){return e?nc()[e]??"":""}var nf=new Set;function o$(e){return nf.add(e),()=>{nf.delete(e)}}function s$(e){for(let t of nf)try{t(e)}catch(n){console.warn("repo-url listener:",n)}}function qr(e,t){if(C()||!e)return;let n=nc();t?n[e]=t:delete n[e],Te(Si,JSON.stringify(n)).catch(r=>console.warn("saveRepoUrlFor:",r)),Ko(Si,r=>{let o=tc(r);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(r=>console.warn("saveRepoUrlFor cross-tab merge:",r)),s$(e)}async function i$(e,t){await Ko(Si,n=>{let r=tc(n),o=t==="replace"?{...e}:t==="prefer-imported"?{...r,...e}:{...e,...r};return JSON.stringify(o)}),af()}async function rc(e){if(!e||typeof e!="object")return[];let t=[];if(await Ko(Si,n=>{let r=tc(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;af();for(let n of t)s$(n);return t}async function of(e,t){return!e||!t?!1:(await rc({[e]:t})).length>0}var xi=lt(),Jv=Vo(xi?.mode??"e2e",globalThis.location?.pathname??"")?"managed":null,l=Qe({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:dI()??!0,bundleSourcePretty:!1,bundleCodeFileRequest:null,npmLookup:{input:"",error:null},npmOpening: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:lI()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:cI()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:uI()??rf,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:kp(xi?.mode??"e2e",Jv),serverModeConfig:xi?.mode??null,serverModeSelection:Jv,deepviewScanServer:null,githubNewIssueLabels:xi?.githubNewIssueLabels??"",localMode:!1,managed:xi?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map,managedIssues:new Map});function C(){return l.serverMode==="managed"&&!l.localMode}function xn(e){l.localMode=!!e}function oc(e,t=globalThis.location?.pathname??""){let n=Vo(e,t);n&&(l.serverModeSelection="managed"),l.serverModeConfig=e,l.serverMode=kp(e,l.serverModeSelection),l.serverModeSelection!==l.serverMode&&(l.serverModeSelection=null),(n||l.serverMode==="e2e"||jn(e))&&xn(!1)}function sf(){return jn(l.serverModeConfig)?(l.serverModeSelection=l.serverMode==="managed"?"e2e":"managed",l.serverMode=l.serverModeSelection,xn(!1),!0):l.serverMode!=="managed"?!1:(xn(!l.localMode),!0)}function Kt(){return l.serverMode==="standalone"&&l.localMode?"local":l.serverMode!=="managed"?l.serverMode:l.localMode?"local":"managed"}function af(){C()||l.repoEditing||l.currentFile&&(l.repoUrl=qe(l.currentFile))}jt(()=>{af()});function a$(e=[]){let t=new Map,n=(o,s)=>{t.has(o)||t.set(o,new Set),t.get(o).add(s)},r=o=>{for(let s of o.slice(1))n(o[0],s),n(s,o[0])};for(let o of e)r(o);return{add:r,linkedIds:o=>t.get(o)??[]}}function Yr(e){let t=[];for(let n of e){let r=n?.revalidateInputs;n?.isApp!==!0||typeof n.id!="string"||!Array.isArray(r)||t.push([n.id,...r.filter(o=>typeof o=="string"&&o!=="")])}return t}var Xo=null;function l$(){Xo=null}function Jo(){return C()&&Xo?.teamId===l.currentManagedTeam&&Xo?.userId===l.managedSession?.id&&Xo?.role===l.managedSession?.role?Xo:null}function c$(e,t){let n=new Map,r=new Map,o=new Map,s=[],i=[];di(t.links??[],o);for(let a of t){let c=a.data;if(c.source==="links"&&Array.isArray(c.links)){s.push({id:a.id,name:a.filename,groups:c.links,skipped:0}),di(c.links,o);continue}let u=fn(c)??[],p=dl([{groups:[u.flat().filter(f=>f&&typeof f=="object")],tree:c.tree}]);for(let[f,m]of u.entries()){let h=(Array.isArray(m)?m:[m]).filter(y=>y&&typeof y=="object").map(y=>{let w={...y,_managedReportId:a.id,_reportName:a.filename,_repoFallback:a.repo.github,_repoDirectory:a.repo.directory,_source:y.source??c.source??null,_bundleHashes:c.bundleHashes??[],_depsDirectory:p};return Oo(w,c),w._analyzer=w._source??w.type??null,"isApp"in w||(w.isApp=Dn(w,w._source)),w}),b={report:a.filename,managedReportId:a.id,index:f,members:h};i.push(b);for(let y of h)n.has(y.id)||n.set(y.id,[]),n.get(y.id).push(b);for(let y of Yr(h).flatMap(([,...w])=>w))r.has(y)||r.set(y,new Set),r.get(y).add(b)}}Xo={teamId:e,userId:l.managedSession?.id,role:l.managedSession?.role,links:s,rows:i,byId:n,citedBy:r,duplicates:o},l.linksTick++,l.findingIndexTick++}function sc(e){let t=Jo();return[...new Set(e.flatMap(n=>t?.byId.get(n)??[]))]}function d$(e){let t=Jo();return[...new Set(e.flatMap(n=>[...t?.citedBy.get(n)??[]]))]}function u$(e){for(let t of sc([e])){let n=Rt(t.members.find(r=>r.id===e));if(n)return n}return""}var Xr=new Map,Zo=new Map,Ci=new Map;function Zn(e){return C()?[...new Set(sc([e]).map(t=>t.report))]:[...Xr.get(e)?.reports.keys()??[]]}function ic(e){if(C())return u$(e);for(let{title:t}of Xr.get(e)?.reports.values()??[])if(t)return t;return""}function Lt(e){if(C())return sc(e);let t=new Set;for(let n of e)for(let r of Xr.get(n)?.reports.values()??[])for(let o of r.rows)t.add(o);return[...t]}function ac(e){if(C())return d$(e);let t=new Set;for(let n of e)for(let r of Zo.get(n)?.values()??[])for(let o of r)t.add(o);return[...t]}function p$(e){return Ci.has(e)||Ci.set(e,{ids:new Set,inputs:new Set}),Ci.get(e)}function f$(e,t){let n=!1;for(let r of t.members){let o=Xr.get(r.id);o||Xr.set(r.id,o={reports:new Map});let s=o.reports.get(e);if(s){s.rows.add(t);continue}o.reports.set(e,{title:Rt(r),rows:new Set([t])}),p$(e).ids.add(r.id),n=!0}for(let[,...r]of Yr(t.members))for(let o of r){Zo.has(o)||Zo.set(o,new Map);let s=Zo.get(o);s.has(e)||s.set(e,new Set),s.get(e).add(t),p$(e).inputs.add(o)}return n}function m$(e){let t=Ci.get(e);if(Ci.delete(e),!t)return!1;for(let n of t.ids){let r=Xr.get(n);r?.reports.delete(e),r?.reports.size===0&&Xr.delete(n)}for(let n of t.inputs){let r=Zo.get(n);r?.delete(e),r?.size===0&&Zo.delete(n)}return!0}var pI="solidity-bundle",fI="0.0.0";function Qn(e){if(e?.name!==pI)return!1;let t=e.version;return!t||t===fI}function h$(e){let t=e?.package?.npm,n=t?.version;if(typeof n=="string"&&n&&!Qn(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 b$(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 y$(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 lf(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[n,r=""]=g$(e,"-"),[o,s=""]=g$(t,"-"),i=n.split("."),a=o.split("."),c=Math.max(i.length,a.length);for(let u=0;u<c;u++){let p=i[u]??"0",f=a[u]??"0",m=/^\d+$/u.test(p),h=/^\d+$/u.test(f);if(m&&h){let b=Number(f)-Number(p);if(b!==0)return b}else{let b=f.localeCompare(p);if(b!==0)return b}}return r===""&&s!==""?-1:r!==""&&s===""?1:s.localeCompare(r)}function g$(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+1)]}var Jr=new Map,Qo=new Map,es=new Map,pc=new Map;function mI(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!Qn(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 gI(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function hI(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 Ri=new Set,cf=new Set,_i=null,df=!1;function bI(e){return cf.add(e),()=>cf.delete(e)}function uf(){for(let e of cf)try{e()}catch{}}function pf(e){return Jr.get(e)?.list??[]}function ff(){let e=0;for(let t of Jr.values())e+=t.list.length;return e}function qt(){return Qo}function Zr(){return es}function Ti(e,t){let n=Jr.get(e);if(!n)return[];let r=n.reports.get(er(t));return r?[...r]:[]}function mf(e,t){let n=Qo.get(e);if(!n)return[];let r=n._keyReports.get(er(t));return r?[...r]:[]}function gf(e,t){let n=es.get(e);if(!n)return[];let r=n._keyReports.get(er(t));return r?[...r]:[]}function er(e){let t=e.id?`id:${e.id}`:`c:${e.severity??""}|${e.description??""}|${e.file??""}|${e.line??""}`;return JSON.stringify([t,st(e)])}function hf(e,t,n){let r=pc.get(e);r||(r={hash:[],pkg:[],repo:[]},pc.set(e,r)),r[t].push(n)}function yI(e,t,n){let r=Jr.get(e.fileHash);r||(r={keys:new Set,list:[],reports:new Map},Jr.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&&hf(n,"hash",{hash:e.fileHash,key:t}),r.keys.has(t)?s:(r.keys.add(t),r.list.push(e),!0)}function wI(e,t,n){let r=mI(e);if(!r)return!1;let o=h$(e),s=Qo.get(r);if(s||(s={...lc(),repos:new Set,byVersion:new Map,_repoReports:new Map},Qo.set(r,s)),typeof e.repo?.github=="string"&&e.repo.github){s.repos.add(e.repo.github);let a=s._repoReports.get(e.repo.github);a||s._repoReports.set(e.repo.github,a=new Set),a.add(n)}b$(s,o,e,t,n);let i=cc(s,t,n,e);return hf(n,"pkg",{pkg:r,key:t,file:e.file,version:o}),i}function vI(e,t,n,r){if(gI(e))return!1;let o=hI(e,r);if(!o)return!1;let s=es.get(o);s||(s=lc(),es.set(o,s));let i=cc(s,t,n,e);return i&&hf(n,"repo",{repo:o,key:t,file:e.file}),i}function bf(e){let t=pc.get(e);pc.delete(e),Ri.delete(e);let n=m$(e);if(!t)return n;let r=n;for(let{hash:s,key:i}of t.hash){let a=Jr.get(s);if(!a)continue;let c=a.reports.get(i);if(c){if(c.delete(e)&&(r=!0),c.size===0){a.reports.delete(i),a.keys.delete(i);let u=a.list.findIndex(p=>er(p)===i);u>=0&&a.list.splice(u,1)}a.keys.size===0&&Jr.delete(s)}}let o=new Set;for(let{pkg:s,key:i,file:a,version:c}of t.pkg){let u=Qo.get(s);if(!u)continue;let p=u._keyReports.get(i);if(p){if(p.delete(e)&&(r=!0),p.size===0&&dc(u,i,a,er),y$(u,c,i,a,e,er),!o.has(s)){o.add(s);for(let f of[...u._repoReports.keys()]){let m=u._repoReports.get(f);m?.delete(e)&&m.size===0&&(u._repoReports.delete(f),u.repos.delete(f),r=!0)}}u._keyReports.size===0?Qo.delete(s):uc(u)}}for(let{repo:s,key:i,file:a}of t.repo){let c=es.get(s);if(!c)continue;let u=c._keyReports.get(i);u&&(u.delete(e)&&(r=!0),u.size===0&&dc(c,i,a,er),c._keyReports.size===0?es.delete(s):uc(c))}return r}async function $I(e){if(Ri.has(e))return!1;Ri.add(e);try{let t=await pe(e),n=await mt(t);if(!n)return!1;let{data:r,findings:o}=n;if(o.length===0)return!1;dw(o,r),zn(fn(r).map(a=>Array.isArray(a)?a:[a]),{source:r.source});let s=Oe(r)??"";if(!s)try{s=qe(e)}catch{}let i=!1;for(let a of o){let c=er(a);a.fileHash&&yI(a,c,e)&&(i=!0),a.file&&wI(a,c,e)&&(i=!0),a.file&&vI(a,c,e,s)&&(i=!0)}for(let[a,c]of fn(r).entries()){let u=(Array.isArray(c)?c:[c]).filter(f=>f?.id);if(u.length===0)continue;let p={report:e,index:a,members:u.map(f=>{let m=f.source??r.source??null;return{id:f.id,title:Rt(f),source:m,revalidate:_e(f),isApp:f.isApp??Dn(f,m),isSecurity:f.isSecurity,...f.file?{file:f.file,_depsDirectory:f._depsDirectory}:{},...Array.isArray(f.revalidateInputs)?{revalidateInputs:[...f.revalidateInputs]}:{}}})};f$(e,p)&&(i=!0)}return Ri.has(e)?i:(bf(e),df=!0,!1)}catch{return Ri.delete(e),!1}}function ht(){return C()?Promise.resolve():_i||(_i=(async()=>{try{do{df=!1;let e=await le();for(let t of e)await $I(t)&&uf()}while(df)}finally{_i=null}})(),_i)}dt(e=>{bf(e)&&uf()});o$(e=>{bf(e)&&uf(),ht().catch(()=>{})});var Ii=new Map,ts=new Map,fc=new Map,yf=new Set;function kI(e){return yf.add(e),()=>yf.delete(e)}function w$(){for(let e of yf)try{e()}catch{}}function Mi(e,t){if(!e||!t)return!1;let n=!ts.has(e);ts.set(e,t),fc.delete(e);for(let[r,o]of t){if(!o)continue;let s=Ii.get(o);s||(s=new Map,Ii.set(o,s)),s.set(e,r)}return n&&w$(),n}function wf(e){let t=ts.get(e);if(ts.delete(e),fc.delete(e),!!t){for(let n of t.values()){let r=Ii.get(n);r&&(r.delete(e),r.size===0&&Ii.delete(n))}w$()}}function vf(e,t){let n=ts.get(e);if(!n||typeof t!="string"||t==="")return null;if(n.has(t))return t;let r=xI(e,n).get(v$(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 v$(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function xI(e,t){let n=fc.get(e);if(n)return n;n=new Map;for(let r of t.keys()){let o=v$(r),s=n.get(o);s?s.push(r):n.set(o,[r])}return fc.set(e,n),n}function Qr(e){if(!e)return[];let t=Ii.get(e);if(!t)return[];let n=[];for(let[r,o]of t)n.push({integrity:r,file:o});return n}function $f(e){return ts.has(e)}var $$="deepview.fileCounts",kf=4,SI=new Set([3,kf]),Ei=null;function gc(){if(Ei)return Ei;let e;try{e=JSON.parse(ye($$)||"{}")}catch{e={}}return SI.has(e?.__v)?e.__v=kf:e={__v:kf},Ei=e,Ei}function xf(){Te($$,JSON.stringify(Ei)).catch(e=>console.warn("counts persist:",e))}function k$(e){if(e==="__v")return;let t=gc()[e];if(t!==void 0)return typeof t=="number"?{count:t}:t}function Fi(e){return k$(e)?.count}function Ie(e){return k$(e)?.source}function ze(e,t,n){let r=gc();r[e]={count:t,source:n??null},xf()}function rs(e){let t=gc();delete t[e],xf()}function We(e){let t=Hn(e);return t?{count:xl(t.groups),source:ve,recognized:!0}:lw(e)}var Ai=null,ns=null,mc=null;function CI(e,t){for(let{names:n,onUpdate:r}of mc)if(n.has(e))try{r(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function Sf(e,t){if(Ai){t&&mc.push({names:new Set(e),onUpdate:t});for(let n of e)ns.add(n);return Ai}return ns=new Set(e),mc=t?[{names:new Set(e),onUpdate:t}]:[],Ai=(async()=>{await Promise.resolve();try{let n=gc();for(;ns.size>0;){let r=ns.values().next().value;if(ns.delete(r),n[r]===void 0)try{let o=await pe(r);if(n[r]!==void 0)continue;let{count:s,source:i}=We(o);n[r]=i?{count:s,source:i}:{count:s},xf(),CI(r,s)}catch{}}}finally{Ai=null,ns=null,mc=null}})(),Ai}var _I=`deepview/workspace-id/v1
|
|
2
|
-
`;async function Li(e){let t=Uint8Array.fromBase64(e),n=Bo(_I),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),u=>u.toString(16).padStart(2,"0")).join("").split("");i[12]="8";let a=parseInt(i[16],16)&3|8;i[16]=a.toString(16);let c=i.join("");return`${c.slice(0,8)}-${c.slice(8,12)}-${c.slice(12,16)}-${c.slice(16,20)}-${c.slice(20,32)}`}function Ni(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 x$=Ni("create"),S$=Ni("delete"),C$=Ni("privateKey"),_$=Ni("report-membership"),R$=Ni("bundle-membership"),RI=x$.on,Oi=S$.on,Cf=C$.on,Bi=_$.on,_f=R$.on,hc=x$.fire,Rf=S$.fire,Tf=C$.fire,bc=_$.fire,yc=R$.fire;var Mf="deepview.workspaces",TI=1;function Pi(){try{let e=ye(Mf);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 II(e){await Te(Mf,JSON.stringify({version:TI,workspaces:e}))}var MI=Mf;function ss(e){return navigator.locks.request(MI,async()=>{await ki();let t=Pi(),n=await e(t);if(n!==!1)return await II(t),n})}function Di(e){return{id:e.id,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...e.reports]:[],bundles:Array.isArray(e.bundles)?[...e.bundles]:[]}}var Nt=Pi().map(Di);function Af(){Nt=Pi().map(Di)}function Ef(e){Nt=Nt.filter(t=>t.id!==e.id),Nt.push(Di(e))}function AI(e,t){let n=Array.isArray(e[t])?[...e[t]]:[],r=Nt.find(o=>o.id===e.id);if(r){r[t]=n;return}Nt.push(Di(e))}function EI(e){Nt=Nt.filter(t=>t.id!==e)}function K(){let e=Pi();for(let t of e)Array.isArray(t.reports)||(t.reports=[]),Array.isArray(t.bundles)||(t.bundles=[]);return e}var FI=200;function os(e){let t=(e??"").trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,"").slice(0,FI)||null}async function Ff(e){let t=os(e);if(!t)return null;let n=new Uint8Array(32);crypto.getRandomValues(n);let r=n.toBase64(),o={id:await Li(r),name:t,privateKey:r,reports:[],bundles:[],createdAt:Date.now()};return await ss(i=>i.some(a=>a.id===o.id)?!1:(i.push(o),o))?(Ef(o),o):null}async function Lf(e){await ss(n=>{let r=n.findIndex(o=>o.id===e);return r<0?!1:(n.splice(r,1),!0)})&&(Rf(e),EI(e))}async function Nf(e,t){let n=os(t);return!(!n||!await ss(o=>{let s=o.find(i=>i.id===e);return!s||s.name===n?!1:(s.name=n,s)}))}async function T$(e){let t=await ss(o=>{let s=o.findIndex(p=>p.id===e.id),i=s>=0?o[s]:null,a=os(e.name)??i?.name??"Workspace",c=e.preserveBundles?Array.isArray(i?.bundles)?i.bundles:[]:Array.isArray(e.bundles)?e.bundles:[],u={id:e.id,name:a,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...new Set(e.reports)]:[],bundles:[...new Set(c)],createdAt:e.createdAt??Date.now()};return s>=0?o[s]=u:o.push(u),{previous:i,next:u}}),{next:n}=t,r=Nt.find(o=>o.id===n.id)??null;return r==null?hc(n.id):(r.privateKey!==n.privateKey&&Tf(n.id),wc(r.reports,n.reports)||bc(n.id),wc(r.bundles,n.bundles)||yc(n.id)),Ef(n),n}async function LI({id:e,name:t,privateKey:n,createdAt:r}){let o=null;return await ss(s=>{let i=os(t);if(!i)return o={status:"name-collision",existing:null},!1;let a=s.find(p=>p.id===e)??null;if(a)return o={status:"already-attached",workspace:a},!1;let c=s.find(p=>os(p.name)===i)??null;if(c)return o={status:"name-collision",existing:c},!1;let u={id:e,name:i,privateKey:n,reports:[],bundles:[],createdAt:r??Date.now()};s.push(u),o={status:"attached",workspace:u}}),o?.status==="attached"&&(hc(o.workspace.id),Ef(o.workspace)),o}function wc(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 ss(u=>{if((u.find(b=>Array.isArray(b[n])&&b[n].includes(e))?.id??null)===(t??null))return!1;let f=null;if(t!=null&&(f=u.find(b=>b.id===t)??null,!f))return!1;let m=new Set;if(!o)for(let b of u)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=u.find(w=>w.id===b);y&&h.set(b,y)}return{affected:m,snapshot:h}});if(!i)return;let{affected:a,snapshot:c}=i;for(let u of a){r(u);let p=c.get(u);p&&AI(p,n)}}function I$(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 Of=I$("reports",bc),Bf=I$("bundles",yc),zi=Of.move,eo=Of.add,Wi=Of.remove,Pf=Bf.move,to=Bf.add,Df=Bf.remove;function NI(){let e=Pi().map(Di),t=Nt,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)||Rf(o);for(let[o,s]of r){let i=n.get(o);if(!i){hc(o);continue}i.privateKey!==s.privateKey&&Tf(o),wc(i.reports,s.reports)||bc(o),wc(i.bundles,s.bundles)||yc(o)}Nt=e}jt(()=>{NI()});async function OI(e){if(!e)return null;let t=K(),r=(await Promise.all(t.map(o=>it("workspace",o.id)))).indexOf(e);return r===-1?null:t[r]}async function BI(e){if(!e)return null;let t=await le(),r=(await Promise.all(t.map(o=>it("report",o)))).indexOf(e);return r===-1?null:t[r]}async function PI(e,t){let n;try{n=await pe(e)}catch{return!1}return n==null?!1:(await mt(n))?.findings.some(o=>o.id===t)??!1}async function DI(e,{skip:t=[]}={}){if(!e)return null;let n=new Set(t),r=(await le()).filter(o=>!n.has(o));for(let o of r)if(await PI(o,e))return o;return null}function Hi(e){return e?K().filter(t=>t.reports.includes(e)):[]}function zf(e){if(!e)return"";for(let t of e.split(`
|
|
3
|
-
`))if(t.trim())return t.trim();return""}function zI(e){let t=new Set(e.map(r=>r.id)),n=new Map;for(let r of l.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:zf(s.description)}),n.size===t.size))return n}return n}var tr=new Map,Uf=new Map,vc=new Map,Wf=new Set,Ui=null,Vi=null,Hf=0,ji=!1,Ot=!1;function Vf(){return C()||Ot}function Gi(e){return Wf.add(e),()=>Wf.delete(e)}function is(){for(let e of Wf)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function jf(){let e=new Map;for(let t of tr.values())t&&di(t.groups,e);Uf=e}function Gf(){if(C())return Jo()?.links??[];let e=[];for(let[t,n]of tr)n&&e.push({name:t,groups:n.groups,skipped:n.skipped});return e.toSorted((t,n)=>t.name.localeCompare(n.name))}function Kf(){return C()?!!Jo()?.duplicates.size:Uf.size>0}function bt(e){if(C())return[...Jo()?.duplicates.get(e)??[]];let t=Uf.get(e);return t?[...t]:[]}async function M$(e){if(tr.has(e))return!1;let t=vc.get(e)??0,n;try{n=await pe(e)}catch{return!1}if(n==null)return!1;if((vc.get(e)??0)!==t)return ji=!0,!1;let r=/^\s*\[/u.test(n)?Hn(n):null;if(tr.set(e,r),r&&Ie(e)!==ve)ze(e,xl(r.groups),ve);else if(!r&&Ie(e)===ve){let{count:o,source:s}=We(n);ze(e,o,s)}return r!==null}function A$(){return C()?Promise.resolve():Vi||(Vi=(async()=>{try{let e,t;do{t=Hf,e=await le(),Ot&&e.some(o=>!tr.has(o))&&(Ot=!1,is());let n=e.filter(o=>Ie(o)===ve);(await Promise.all(n.map(o=>M$(o)))).some(Boolean)&&(jf(),is())}while(t!==Hf);return e}catch(e){throw Ot&&(Ot=!1,is()),e}finally{Vi=null}})(),Vi)}function Ki(){return C()?Promise.resolve():Ui||(Ui=(async()=>{try{do{ji=!1;let e=await A$(),t=!1;for(let o of e)await M$(o)&&(t=!0);let n=!ji&&e.every(o=>tr.has(o)),r=Ot!==n;Ot=n,t&&jf(),(t||r)&&is()}while(ji)}catch(e){throw Ot&&(Ot=!1,is()),e}finally{Ui=null}})(),Ui)}dt(e=>{let t=Ot;Ot=!1,Hf++,vc.set(e,(vc.get(e)??0)+1),ji=!0;let n=tr.get(e)!=null;tr.delete(e),n&&jf(),(n||t)&&is()});var qf=()=>{};function Yf(e){qf=typeof e=="function"?e:()=>{}}var F$=()=>{};function Xf(e){F$=typeof e=="function"?e:()=>{}}var L$=()=>{};function WI(e){L$=typeof e=="function"?e:()=>{}}var nr="deepview.triage",Sn="deepview.triage.pending",Yt=/^\d+$/u;async function HI(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function UI(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}var VI="deepview.triage.save",E$=0;function $c(){return!C()&&op(l.triage,l.reports)}function Jf(){$c();let e={};for(let[t,n]of l.triage){if(Yt.test(t))continue;let r=ul(n);r&&(e[t]=r)}return e}function $e(){if(C())return F$(),Promise.resolve();let e=++E$,t=Jf(),n=Object.keys(t).length===0,r=n?null:JSON.stringify(t);if(r!=null)try{localStorage.setItem(Sn,r)}catch{}return navigator.locks.request(Lv,{mode:"shared"},async()=>{let o=null,s=null;if(r!=null)try{let i=Bo(r),a=await HI(i);s=vi(),o=(s?await Nv(a):a).toBase64()}catch(i){console.warn("Failed to save triage:",i),qf();return}await navigator.locks.request(VI,()=>{try{if(e!==E$)return;if(r!=null&&vi()!==s){queueMicrotask(()=>{$e()});return}if(n)localStorage.removeItem(nr),localStorage.removeItem(Sn);else{localStorage.setItem(nr,o);try{localStorage.removeItem(Sn)}catch{}}}catch(i){console.warn("Failed to save triage:",i)}}),qf()})}async function kc(){let e=localStorage.getItem(Sn);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(nr);if(!t)return null;let n=Uint8Array.fromBase64(t);if(Gl(n)){if(!vi())throw new Error("triage: vault locked, cannot decrypt envelope");n=await Ov(n)}let r=await UI(n);return JSON.parse(Pr(r))}function N$(e,{replace:t=!1}={}){let n=l.triage;if(t){let r=null,o=localStorage.getItem(Sn);if(o)try{r=JSON.parse(o)}catch{}let s=i=>r!=null&&i in r;for(let i of[...n.keys()]){if(Yt.test(i))continue;let a=e?.[i],c=!e||!(i in e);!(s(i)&&r[i]?.color)&&(c||!a?.color)&&ie(n,i,{color:void 0}),!(s(i)&&(r[i]?.triage||r[i]?.deleted))&&!Ve(a)&&ie(n,i,{triage:void 0}),!(s(i)&&r[i]?.comment)&&(c||typeof a?.comment!="string"||!a.comment)&&ie(n,i,{comment:void 0}),!(s(i)&&r[i]?.fix)&&(c||typeof a?.fix!="string"||!a.fix)&&ie(n,i,{fix:void 0}),!(s(i)&&r[i]?.flagged!==void 0)&&(c||a?.flagged===void 0)&&ie(n,i,{flagged:void 0})}for(let i of[...n.keys()]){if(Yt.test(i))continue;let a=n.get(i)?.ignoredReports;if(!a||a.length===0)continue;let c=e?.[i],u=!Or(c);for(let p of[...a]){if(s(i)&&Array.isArray(r[i]?.ignoredReports)&&r[i].ignoredReports.includes(p))continue;if(u){Je(n,i,p,!1);continue}let f=c?.ignoredReports;(!Array.isArray(f)||!f.includes(p))&&Je(n,i,p,!1)}}}if(e)for(let[r,o]of Object.entries(e)){let s=Ve(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&&ie(n,r,i),Or(o)&&o&&Array.isArray(o.ignoredReports))for(let a of o.ignoredReports)typeof a=="string"&&Je(n,r,a,!0,Wn(o,a))}}async function as(){if(C())return!1;if(![...l.triage.values()].some(r=>r.ignoredReports?.length))return;let{readFileFresh:e,withStoredItem:t}=await import("./chunk-WGG7KQUH.js"),n=await uw(Object.fromEntries(l.triage),r=>t("report",r,()=>e(r)));if(!C())return op(l.triage,n)}async function jI(){if(!C())try{let e=await kc();if(C())return;N$(e),await as()&&await $e()}catch(e){console.warn("Failed to load triage:",e)}}async function qi(){if(!C())try{let e=await kc();if(C())return;N$(e,{replace:!0}),await as()&&await $e(),L$()}catch(e){console.warn("Failed to reload triage:",e)}}typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==nr&&e.key!==Sn||qi()});var GI;function no(){return C()?Promise.resolve():GI??=jI()}gt(()=>{qi()});gt(()=>{C()||vi()&&localStorage.getItem(Sn)&&$e()});async function Zf({seal:e}){try{localStorage.removeItem(Sn)}catch{}let t=localStorage.getItem(nr);if(!t)return;let n=Uint8Array.fromBase64(t);if(Gl(n))return;let r=await e(n,Np());localStorage.setItem(nr,r.toBase64())}async function Qf({open:e}){try{localStorage.removeItem(Sn)}catch{}let t=localStorage.getItem(nr);if(!t)return;let n=Uint8Array.fromBase64(t);if(!Gl(n))return;let r=await e(n,Np());localStorage.setItem(nr,r.toBase64())}function xc(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function O$(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 B$="deepview.lastFile",Yi=null;function em(){return Yi||(Yi=KI(),Yi.catch(()=>{Yi=null})),Yi}async function KI(){try{await no()}catch{}let e=await le(),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 pe(o),await Gt(s,i),await qo(o)}catch(f){console.warn(`migrate: failed to rename ${o} -> ${s}`,f);continue}t.delete(o),t.add(s),r.add(o);let a=Fi(o);if(rs(o),a===void 0){let{count:f,source:m}=We(i);ze(s,f,m)}else{let{source:f}=We(i);ze(s,a,f)}let c=qe(o);c&&(qr(o,""),qr(s,c));let u=!1;for(let[f,m]of[...l.triage])m.ignoredReports?.includes(o)&&(Je(l.triage,f,o,!1),Je(l.triage,f,s,!0,Wn(m,o)),u=!0);u&&await $e();let p=O$(ye(B$));if(p?.name===o)try{await Te(B$,xc(s,p.workspaceId))}catch{}}for(let o of K())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 Wi(s,o.id),await eo(i,o.id)}}function tm(){return{...P$,hydrateKey:Bv,localContentSyncStatus:lv,readTriageBlob:async()=>(await fl(await kc(),e=>ql("report",e,()=>Wp(e)))).entries,reportSyncHash:e=>ql("report",e,async()=>iv(await vn(e)))}}var P$={hasStoredBundleBytes:Dv,listBundles:Ke,listFiles:le,onBundleMutated:Pv,onFileMutated:dt,readBundle:$n,readFile:Wp,withStoredItem:ql,isEncryptionEnabled:ct,isUnlocked:Go,onVaultStateChange:gt,unlockEncryption:$i};function nm(e=P$){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(o,s,i)=>{let a=!1,c=!1,u=e.onVaultStateChange(()=>{a=!0}),p=s==="report"?e.onFileMutated:e.onBundleMutated,f=i===void 0?null:p(m=>{m===i&&(c=!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(c)throw new Error(`This local ${s} changed. Select it again before importing.`)},unsubscribe(){u(),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(c=>o({kind:"report",value:c})),a=e.onBundleMutated(c=>o({kind:"bundle",value:c}));return()=>{s(),i(),a()}},async importItem(o,s,i,{signal:a}={}){let c=n(a,o,s);try{c.check();let{result:u}=await e.withStoredItem(o,s,async()=>{c.check();let p=(await r(o)).find(h=>h.value===s);if(c.check(),!p)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);c.check();let m=new File([f],p.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let h=Promise.resolve(i(m));return h.catch(()=>{}),{result:h}}finally{c.unsubscribe()}});return u}finally{c.unsubscribe()}}}}function D$(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function ls(){if(!D$()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function rm(){let e={supported:D$(),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 Sc="deepview.scan.access",om=new Set;function z$(){for(let e of om)e()}function cs(){return ye(Sc)!=null}function sm(e){try{let t=JSON.parse(ye(Sc)),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 im({server:e,deepview:t,provider:n,token:r}){await Te(Sc,JSON.stringify({server:e,deepview:t,provider:n,token:r})),z$()}async function am(){await Xn(Sc),z$()}function lm(e){om.add(e);let t=jt(e);return()=>{om.delete(e),t()}}var cm=1;function qI(){let e=Jf(),t=nc();return{version:cm,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function YI(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function XI(){let e=qI();return{blob:new Blob([await ii(JSON.stringify(e))]),filename:YI()}}async function JI(e){let t;try{t=await ml(new Uint8Array(await e.arrayBuffer()))}catch(r){throw new Error(`Failed to gunzip: ${r.message}`,{cause:r})}let n;try{n=JSON.parse(t)}catch(r){throw new Error(`Failed to parse JSON: ${r.message}`,{cause:r})}if(!n||typeof n!="object")throw new Error("Invalid backup file (not an object)");if(n.version!==cm)throw new Error(`Unsupported backup version: ${n.version} (expected ${cm})`);if(!n.triage||typeof n.triage!="object")throw new Error("Backup is missing the `triage` map");if(!n.repoUrls||typeof n.repoUrls!="object")throw new Error("Backup is missing the `repoUrls` map");return n}async function ZI(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=l.triage;if(t==="replace")for(let a of[...r.keys()])Yt.test(a)||r.delete(a);let o=t==="prefer-current";for(let[a,c]of Object.entries(n)){if(Yt.test(a)||!c||typeof c!="object")continue;typeof c.color=="string"&&c.color&&(!o||!r.get(a)?.color)&&ie(r,a,{color:c.color});let u=Ve(c);if(u&&(!o||!Ve(r.get(a)))&&ie(r,a,{triage:u}),typeof c.comment=="string"&&c.comment&&(!o||!r.get(a)?.comment)&&ie(r,a,{comment:c.comment}),typeof c.fix=="string"&&c.fix&&(!o||!r.get(a)?.fix)&&ie(r,a,{fix:c.fix}),typeof c.flagged=="boolean"&&(!o||r.get(a)?.flagged===void 0)&&ie(r,a,{flagged:c.flagged}),Array.isArray(c.ignoredReports)&&Or(r.get(a)))for(let p of c.ignoredReports)typeof p=="string"&&Je(r,a,p,!0,Wn(c,p))}await as(),await $e();let s=0,i=null;try{await i$(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 QI(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function dm(e){let t=new Set;for(let n of e){let r;try{r=await pe(n)}catch(s){if(QI(s))continue;throw new Error(`Failed to read ${n}: ${s.message}`,{cause:s})}if(r==null)continue;let o=await mt(r);if(o)for(let s of o.findings)s.id&&t.add(s.id)}return t}function eM(){let e=new Set;for(let t of l.triage.keys())Yt.test(t)||e.add(t);return e}async function Cc(e){let t=eM();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await dm(e),r=new Set;for(let p of t)n.has(p)&&r.add(p);if(r.size===0)return{orphanedCount:0,sharedCount:0};let o=await le(),s=new Set(e),i=o.filter(p=>!s.has(p)),a=await dm(i),c=0,u=0;for(let p of r)a.has(p)?u++:c++;return{orphanedCount:c,sharedCount:u}}async function _c(){let e=new Set(l.triage.keys()),t=[];for(let[i,a]of l.triage)if(a.ignoredReports)for(let c of a.ignoredReports)t.push({id:i,report:c});let n=await le(),r=new Set(n),o=await dm(n),s=!1;for(let i of e){if(Yt.test(i)||o.has(i))continue;let a=l.triage.get(i);!a||!(a.color||Ve(a)||a.comment||a.fix||a.flagged!==void 0)||ie(l.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)Yt.test(i)||o.has(i)&&r.has(a)||Br(l.triage,i,a)&&Je(l.triage,i,a,!1)&&(s=!0);s&&await $e()}var tM=1;async function nM(e){let t=new Set,n=await mt(e);for(let r of n?.findings??[])r.id&&t.add(r.id);return t}function um(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function rM(e){if(!Array.isArray(e)||e.length===0)return[];let t=await Ke(),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 oM(e){let t=qe(e);return t?{github:t}:null}async function W$(e){let t=[];for(let n of e.reports??[]){let r;try{r=await pe(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 zi(n,null);continue}let o=oM(n);t.push(o?{name:n,content:r,repo:o}:{name:n,content:r})}return t}async function sM(e,{includeBundleBytes:t=!1}={}){let n=await W$(e),r=new Set;for(let u of n)for(let p of await nM(u.content))r.add(p);let o=new Set(e.reports??[]),s={};for(let[u,p]of l.triage){if(!r.has(u))continue;let f=(p.ignoredReports??[]).filter(h=>o.has(h)),m=ul({...p,ignoredReports:f});m&&(s[u]=m)}let i={};for(let u of n)u.repo?.github&&(i[u.name]=u.repo.github);let a=(e.bundles??[]).filter(u=>typeof u=="string"&&u.length>0),c={version:tM,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 u=await rM(a);u.length>0&&(c.bundleBlobs=u)}return c}async function H$(e,{includeBundleBytes:t=!1}={}){let n=await sM(e,{includeBundleBytes:t});return{blob:new Blob([await ii(JSON.stringify(n))]),filename:`${um(e.name)}.deepview-workspace.json.gz`}}async function iM(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:r}=await H$(e,{includeBundleBytes:n}),o=new Uint8Array(await r.arrayBuffer()),s=await mw(o,t);return{blob:new Blob([s],{type:"application/octet-stream"}),filename:`${um(e.name)}.deepview-workspace.enc`}}async function pm(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t=="string"&&t?await iM(e,t,{includeBundleBytes:n}):await H$(e,{includeBundleBytes:n})}async function aM(e){return{reports:await W$(e)}}async function fm(e){let t=await aM(e);return{blob:new Blob([await ii(JSON.stringify(t))]),filename:`${um(e.name)}.deepview-reports.json.gz`}}function lM(e){return Ve(e)??null}async function cM(e){let t=new Map;for(let n of e??[]){if(typeof n?.content!="string")continue;let r=await mt(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:zf(o.description)})}return t}async function dM(e,t,n){if(!e||typeof e!="object"||Array.isArray(e))return;let r=l.triage,o=[];for(let[s,i]of Object.entries(e)){if(!i||typeof i!="object")continue;let a=r.get(s)?.color,c=typeof i.color=="string"?i.color:void 0;c&&a&&a!==c?o.push({id:s,property:"color",local:a,imported:c}):c&&c!==a&&ie(r,s,{color:c});let u=r.get(s)?.comment??"",p=typeof i.comment=="string"?i.comment:"";p&&u&&u!==p?o.push({id:s,property:"comment",local:u,imported:p}):p&&p!==u&&ie(r,s,{comment:p});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&&ie(r,s,{fix:m});let h=lM(i),b=Ve(r.get(s))??null;h&&b&&b!==h?o.push({id:s,property:"triage",local:b,imported:h}):h&&!b&&ie(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&&ie(r,s,{flagged:w});let v=Array.isArray(i.ignoredReports)?i.ignoredReports:[];if(Or(r.get(s)))for(let k of v)typeof k=="string"&&Je(r,s,k,!0,Wn(i,k))}if(o.length>0&&t){let s=await t(o,n??new Map);s&&uM(o,s)}await $e()}function uM(e,t){for(let n of e){let r=`${n.id}:${n.property}`;t[r]==="imported"&&pM(n.id,n.property)===n.local&&(n.property==="color"?ie(l.triage,n.id,{color:n.imported}):n.property==="comment"?ie(l.triage,n.id,{comment:n.imported}):n.property==="fix"?ie(l.triage,n.id,{fix:n.imported}):n.property==="triage"?ie(l.triage,n.id,{triage:n.imported,...n.imported==="ignored"?{}:{ignoredReports:void 0}}):n.property==="flagged"&&ie(l.triage,n.id,{flagged:n.imported==="flagged"?!0:n.imported==="not flagged"?!1:void 0}))}}function pM(e,t){if(t==="color")return l.triage.get(e)?.color;if(t==="triage")return Ve(l.triage.get(e))??null;if(t==="comment")return l.triage.get(e)?.comment??"";if(t==="fix")return l.triage.get(e)?.fix??"";if(t==="flagged"){let n=l.triage.get(e)?.flagged;return n===!0?"flagged":n===!1?"not flagged":""}}async function fM(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 Kr(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 mm(e,{conflictResolver:t}={}){let n=[];for(let f of e.reports)if(!(typeof f?.name!="string"||typeof f?.content!="string"))try{await Gt(f.name,f.content);let{count:m,source:h}=We(f.content);ze(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 fM(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await cM(e.reports):new Map,s=await fl(e.triage,f=>e.reports.find(m=>m.name===f)?.content);await dM(s.entries,t,o);let i=Array.isArray(e.bundles),a=i?e.bundles.filter(f=>typeof f=="string"&&f.length>0):[],c=await T$({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}),u=new Set(n),p=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[f,m]of Object.entries(e.repoUrls))!u.has(f)||typeof m!="string"||!m||(p[f]=m);if(Object.keys(p).length>0)try{await rc(p)}catch(f){console.warn("Workspace import: failed to adopt per-report repository URLs:",f)}return c}function mM(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>gl?`reports count (${e.reports.length}) exceeds cap (${gl})`:null:"reports field must be an array"}function U$(e){return mM(e)===null}async function gm(e){if(ip(e))return{kind:"encrypted"};let t;try{t=await ml(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 U$(n)?{kind:"reports",reports:n.reports}:{kind:"workspace",text:t}}async function hm({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 Li(n)===e?{v:1,n:t,k:n}:{v:1,i:e,n:t,k:n};return(await pw(Bo(JSON.stringify(s)),r)).toBase64({alphabet:"base64url",omitPadding:!0})}async function gM({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 hM(r)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function hM(e){let t=JSON.parse(Pr(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 Li(t.k),name:t.n,privateKeyBase64:t.k}}function bm(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function bM(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 $m="deepview.workspaceApp",V$=2,ym=new Set,wm=new Set,vm=0,km=0,xm=0,Tc=new Map,Ic=Promise.resolve(),j$=null;function us(e=ye($m)){try{let t=JSON.parse(e);if(t?.version===V$&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:V$,revision:"",links:"[]",entries:{}}}function ds(){for(let e of ym)e()}function G$(e){let t=Ic.then(()=>Ko($m,n=>e(us(n))));return Ic=t.catch(n=>console.warn("workspace App cache:",n)),t}function Rc(e){return JSON.stringify(e.reports.toSorted())}function K$(){return JSON.stringify(Gf().map(({name:e,groups:t})=>({name:e,groups:t})))}function Sm(e){return Vf()&&e.links===K$()}function q$(e,t){return e.workspaceRevisions?.[t]??""}function Y$(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(Tc.get(t?.id)??0)&&n.workspaceRevision===q$(e,t?.id)}function X$(e,t,n){return n.reportEpoch===xm&&n.reportRevision===(e.reportRevision??e.revision)&&Y$(e,t,n)}function Cm(e,t){return X$(us(),e,t)}function J$(e,t){if(vm||wm.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==Rc(e)||typeof n.appMode!="boolean"||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function _m(e){return J$(e,us())?.appMode??null}function ro(e){let t=us(),n=J$(e,t);return!n||!Sm(t)?null:n}async function Xi(e,t=null){let n;do n=Ic,await n;while(n!==Ic);let r=us(),o=r.reportRevision??r.revision;return t&&(!X$(r,e,t)||!Sm(r))?null:{epoch:km,revision:r.revision,reportEpoch:xm,reportRevision:o,workspaceId:e?.id,workspaceEpoch:Tc.get(e?.id)??0,workspaceRevision:q$(r,e?.id)}}async function Rm(e,t,n){let r=!1;return await G$(o=>{if(n.epoch!==km||n.revision!==o.revision||!Y$(o,e,n)||!Sm(o))return;let s=K().find(i=>i.id===e.id);if(!(!s||Rc(s)!==Rc(e)))return o.entries[e.id]={...t,reports:Rc(e)},r=!0,JSON.stringify(o)}),r&&ds(),r}function Mc(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)km++,t===void 0&&xm++,vm++;else for(let n of e)Tc.set(n,(Tc.get(n)??0)+1),wm.add(n);return ds(),G$(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)vm--;else for(let n of e)wm.delete(n);ds()})}function Tm(e){return ym.add(e),()=>ym.delete(e)}jt(()=>{let e=ye($m);e!==j$&&(j$=e,ds())});Bi(e=>{Mc([e]).catch(()=>{})});Oi(e=>{Mc([e]).catch(()=>{})});dt(e=>{let t=K().filter(n=>n.reports.includes(e)).map(n=>n.id);Mc(t).catch(()=>{})});Gi(()=>{if(!Vf()){ds();return}let e=K$();us().links===e?ds():Mc(null,e).catch(()=>{})});var yt="deepviewManagedNavigation",Ac="deepviewManagedLoginFinding";function Im(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Ec(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 yM(e){let t=e.location.hash,n=vw(t),r=!1,o=null,s=0,i=null,a=null,c=!1,u=null,p=null,f=null;function m(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h($){let S=li($),_=S?.view==="home"?ci($.hash):null;return S?{...S,..._?{finding:_}:{}}:null}function b(){try{let $=e.sessionStorage?.getItem(Ac);if(e.sessionStorage?.removeItem(Ac),!$)return null;let S=new URL($,e.location.origin),_=S.origin===e.location.origin?h(S):null;return _?.finding?_:null}catch{return null}}function y(){if(!r||!ci(e.location.hash)||u===e.location.href||e.history.state?.[yt]&&e.history.state[yt]!==o)return;let $=u=e.location.href,S=h(new URL($));v(S??{view:"home"},{replace:!0}).finally(()=>{u===$&&(u=null)})}function w($){m()||($=hn($,n),e.history.replaceState(r?{[yt]:o}:null,"",$),a=$)}async function v($,{replace:S=!1,pop:_=!1}={}){if(!r||!i||m())return!1;$??={view:"home"};let R=je($);if(R===null)return!1;let F=++s,I=p={route:$,findingRoute:null,codeRoute:null},A=()=>r&&F===s&&!m(),L=!1;try{L=await i($,A)}catch(V){console.warn("managed: navigation failed:",V)}return A()?L?(typeof L=="object"&&(R=je(L)??R),Im(I.findingRoute,typeof L=="object"?L:$)&&(R=je(I.findingRoute)),Ec(I.codeRoute,typeof L=="object"?L:$)&&(R=je(I.codeRoute)),p=null,_||S?w(R):hn(R,n)!==a&&(R=hn(R,n),e.history.pushState({[yt]:o},"",R),a=R),!0):(await i({view:"home"},A),A()&&(p=null,w("/")),!1):!1}function k($){if(m())return;if(!r){$.state?.[yt]&&w("/");return}if((!$.state?.[yt]||$.state[yt]===o)&&ci(e.location.hash)){y();return}if(!$.state?.[yt]){let _=h(new URL(e.location.href)),R=a==null?null:li(new URL(a,e.location.href));if(_?.file!=null&&_.file===R?.file&&Ec(_,R)){w(je(_));return}}let S=$.state?.[yt]===o?h(new URL(e.location.href)):null;v(S??{view:"home"},{pop:!0})}function x($){if(!r||$.defaultPrevented||$.button!==0||$.metaKey||$.ctrlKey||$.shiftKey||$.altKey)return;let S=$.composedPath().find(F=>F.matches?.("a.comment-self-ref[href]"));if(!S||S.hasAttribute("download")||S.target&&S.target!=="_self")return;let _=new URL(S.href);if(_.origin!==e.location.origin)return;let R=h(_);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"?`/#${zr($.finding)}`:je($);try{e.sessionStorage?.setItem(Ac,S)}catch{}},start($,{onCancel:S=null}={}){if(r)return;r=!0,i=$,f=S,o=typeof e.history.state?.[yt]=="string"?e.history.state[yt]:e.crypto.randomUUID(),c||(e.addEventListener("popstate",k),e.addEventListener("hashchange",y),e.addEventListener("click",x),e.launchQueue?.setConsumer(({targetURL:F})=>{if(!r||!F)return;let I=new URL(F);if(I.origin!==e.location.origin)return;let A=h(I);A&&v(A)}),c=!0);let _=b(),R=h(new URL(e.location.href))??{view:"home"};return _&&R.view==="home"&&!R.finding&&(R=_),v(R,{replace:!0})},navigate:v,replaceFindingRoute($){if(!r||$?.view!=="findings"||m())return;let S=je($);if(S!=null){if(p){(p.route.view==="home"&&p.route.finding||Im($,{...p.route,view:"findings"}))&&(p.findingRoute=$);return}Im($,li(new URL(e.location.href)))&&hn(S,n)!==a&&w(S)}},replaceCodeRoute($){if(!r||m()||!["bundles","npm"].includes($?.view)||$.bundleTab!=="code")return;let S=je($);if(S!=null){if(p){Ec($,p.route)&&(p.codeRoute=$);return}Ec($,li(new URL(e.location.href)))&&hn(S,n)!==a&&w(S)}},replaceRoute($){if(!r||!$||m())return;let S=je($);S!=null&&!p&&w(S)},pushRoute($){if(!r||!$||m())return;let S=je($);if(S==null)return;let _=p!==null;++s,p=null,S=hn(S,n),S!==a&&(e.history.pushState({[yt]:o},"",S),a=S),_&&f?.()},reset({force:$=!1}={}){if(++s,p=null,r||$){try{e.sessionStorage?.removeItem(Ac)}catch{}r=!1,o=null,i=null,w("/")}}}}var Z=typeof window>"u"?null:yM(window);function Ji(e){return C()&&!l.managedSession?.publicShare&&Un(l.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}function Z$(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function wM(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 Q$(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!wM(o)||!Number.isSafeInteger(s)||s<=0?null:{repo:o,number:s}}function Mm(e){return Q$(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Am(e){return Q$(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function Em(e){let t=Mm(e);if(t)return{...t,kind:"pull"};let n=Am(e);return n?{...n,kind:"issue"}:null}function Fm(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}function Fc(e){return C()&&l.currentManagedTeam&&l.managedSession&&!l.managedSession.publicShare?l.managedIssues.get(e?.id)??null:null}function Xt(e){return Fc(e)?.autoFix??""}function Zi(e,t={},n){let r=!1;for(let o of e){if(n&&l.managedIssues.get(o)!==n.get(o))continue;let s=Object.hasOwn(t,o)?t[o]:null,i=Am(s?.url)?{url:s.url,autoFix:Mm(s.autoFix)?s.autoFix:null}:null,a=l.managedIssues.get(o);a?.url===i?.url&&a?.autoFix===i?.autoFix||(i?l.managedIssues.set(o,i):l.managedIssues.delete(o),r=!0)}return r}function vM(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 Lc=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=vM(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&&Em(t);if(!o)return null;let s=Fm(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=Em(s?.url);if(i&&typeof s.title=="string"&&["open","draft","closed","merged"].includes(s.status)){let a=i.kind==="issue"&&s.status==="closed"?Z$(s.stateReason):null;this.entries.set(Fm(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,Lm=new Lc({context:()=>{let e=l.managedSession;return C()&&e?.id&&l.currentManagedTeam?{key:JSON.stringify([e.id,e.role,e.csrfToken]),teamId:l.currentManagedTeam,reportId:l.managedTeams.find(t=>t.id===l.currentManagedTeam)?.reports.find(t=>t.id===l.currentManagedReport&&t.visible===!1)?.id??null,teams:l.managedTeams}:null},fetchWorkspace:ek,changed:()=>{for(let e of Nc)e()}});function y3(e){return Nc.add(e),()=>Nc.delete(e)}function Nm(){Lm.reset();for(let e of Nc)e()}function ps(e){l.currentManagedTeam===e&&Nm()}function Om(e,t,n){if(l.currentManagedTeam!==e)return;let r=[...t].map(s=>({id:s,issue:l.managedIssues.get(s)}));r.some(({id:s,issue:i})=>i?.url!==n.get(s)?.url)&&ps(e);for(let{id:s,issue:i}of r)i?.autoFix&&i.autoFix!==n.get(s)?.autoFix&&Lm.read(i.autoFix,{refreshIfMissing:!0});let o=r.find(({issue:s})=>s?.url)?.issue.url;o&&Lm.read(o)}var Qi=null,Jt=null;function Bm(){return Jt?.getPreviewRole()??null}function tk(){Jt?.setPreviewRole(null)}function nk(){Jt?.resetManagedAppState()}function rk(e){Jt?.setManagedAppSession(e)}function ok(e){return Jt?.setManagedReportCatalog(e)??new Set}function Oc(e,t=l.currentManagedTeam){return Jt?.readReportSources(e,t)}function sk(){Jt?.clearReportSources(),Jt?.clearFindingHistory()}async function ik(e,t=l.currentManagedTeam){return(await B()).fetchReportSources(e,t)}function B(){return Qi||(Qi=(async()=>{let e="./client-managed.js";try{return Jt=await import(e),Jt}catch(t){throw Qi=null,t}})(),Qi)}async function ak(e){return(await B()).probeSession(e)}async function lk(e){return(await B()).probeTeams(e)}async function Pm(e){return(await B()).fetchManagedBundleCatalog(e)}async function ck(e,t,n){return(await B()).fetchNpmPackage(e,t,n)}async function dk(e,t){return(await B()).fetchNpmVersions(e,t)}async function uk(e,t){return(await B()).fetchNpmStats(e,t)}async function pk(e,t){return(await B()).fetchNpmAdvisories(e,t)}async function fk(e,t,n){return(await B()).fetchNpmTags(e,t,n)}async function mk(e,t,n,r){return(await B()).fetchNpmRisk(e,t,n,r)}async function gk(e,t,n){return(await B()).fetchNpmSocket(e,t,n)}async function hk(e,t,n){return(await B()).fetchNpmProvenance(e,t,n)}async function bk(e,t,n,r){return(await B()).fetchPrettyBundleFile(e,t,n,r)}async function yk(e,t,n,r){return(await B()).fetchPrettyNpmFiles(e,t,n,r)}async function wk(e,t,n,r,o){return(await B()).fetchPrettyNpmFile(e,t,n,r,o)}async function vk(e,t,n,r){return(await B()).fetchPrettyBundleChanges(e,t,n,r)}async function $k(e,t,n,r,o){return(await B()).fetchPrettyNpmChanges(e,t,n,r,o)}async function C3(e,t,n,r){return(await B()).fetchBundleRenameDiff(e,t,n,r)}async function _3(e,t,n,r,o){return(await B()).fetchNpmRenameDiff(e,t,n,r,o)}async function R3(e,t,n,r){return(await B()).fetchBundleRenameDiffs(e,t,n,r)}async function T3(e,t,n,r,o){return(await B()).fetchNpmRenameDiffs(e,t,n,r,o)}async function I3(e,t,n,r){return(await B()).fetchBundleTypeOnly(e,t,n,r)}async function M3(e,t,n,r,o){return(await B()).fetchNpmTypeOnly(e,t,n,r,o)}async function A3(e,t,n){return(await B()).fetchBundleComparison(e,t,n)}async function E3(e,t,n,r){return(await B()).fetchNpmComparison(e,t,n,r)}async function kk(e){return(await B()).openManagedShareDialog(e,"",l.managedSession)}async function F3(e){let t=()=>l.managedSession?.id===e.session.id&&l.managedSession?.csrfToken===e.session.csrfToken&&l.currentManagedTeam===e.teamId,[n,{render:r}]=await Promise.all([B(),import("./chunk-T7OKH4VW.js")]);return t()?n.openManagedIssueDialog({...e,isCurrent:t,onCreated:o=>{if(!t())return;let s=e.context.findingId,i=l.managedIssues.get(s),a=Zi([s],{[s]:{url:o,autoFix:i?.url===o?i.autoFix:null}});ps(e.teamId),a&&r()}}):null}async function L3(e){if(!Ji(e))return null;let t=l.reports,n=l.managedSession,r=l.currentManagedTeam,o=()=>Ji(e)&&l.managedSession===n&&l.currentManagedTeam===r&&l.reports===t,s=await B();return o()?s.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:o}):null}async function xk(e,t){return(await B()).fetchTeamAnnotations(e,t)}async function Dm(e,t=l.currentManagedTeam,n){return(await B()).fetchReportTriage(e,t,n)}async function ek(e,t,n){return(await B()).fetchFixes(e,t,n)}async function Sk(e,t=l.currentManagedTeam,n){return(await B()).fetchReportComments(e,t,n)}async function Ck(e,t,n,r=l.currentManagedTeam){return(await B()).saveReportComment(e,t,n,r)}async function _k(e,t,n,r,o=l.currentManagedTeam){return(await B()).deleteReportComment(e,t,n,r,o)}async function Rk(e,t,n,r=l.currentManagedTeam){return(await B()).pushReportTriage(e,t,n,r)}async function Tk(e){return e&&Z?.rememberFinding(),(await B()).login(e)}async function Ik(e){return(await B()).logout(e)}async function Mk(e){return(await B()).stopViewing(e)}async function Bc(e,t){return(await B()).fetchBundleMetadata(e,t)}async function Ak(e,t){return(await B()).fetchBundleContents(e,t)}async function zm(e,t){return(await B()).fetchTeamReports(e,t)}async function Ek(e,t){return(await B()).watchTeamFeed(e,t)}async function Fk(e,t=l.currentManagedTeam,n="",r=!1,o=!1){return(await B()).fetchBundleAdvisories(e,t,n,r,o)}async function N3(...e){return(await B()).dependencyReviews(...e)}async function O3(...e){return(await B()).myDependencyReviews(...e)}async function B3(...e){return(await B()).discardDependencyReview(...e)}async function P3(...e){return(await B()).latestDependencyReview(...e)}var be={...$w,[ve]:Zy},$M=new Set(Object.keys(Lr)),fs={...Lr,default:"DeepView"};function Pc(e){let t=e._source??e.source;return t!=="default"&&Object.hasOwn(Be,t)?t:null}function Me(e){return Wm(e,Ie(e))}function Wm(e,t){if(t===ve)return ve;if(t!==void 0)return $M.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 Dc(e){return Ie(e)===ve}var Zt=`dialog{max-width:520px;width:min(94vw,520px)}.wsl-field{display:block;margin-top:.6rem;color:var(--text);font-size:.78rem;>span{display:block;margin-bottom:.25rem;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}}.wsl-ack{display:flex;align-items:flex-start;gap:.5rem;margin-top:.6rem;color:var(--text);font-size:.8rem;line-height:1.4;>input[type=checkbox]{flex:0 0 auto;margin-top:.15rem}>span{flex:1 1 auto}}.wsl-link{display:block;width:100%;box-sizing:border-box;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.78rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;word-break:break-all}.wsl-error{margin:.55rem 0 0;color:var(--critical, #f87171);font-size:.74rem;line-height:1.4}.wsl-warning{padding:.55rem .65rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 6px);background:rgb(from var(--critical, #f87171) r g b / .08);>p+p{margin-top:.45rem}}.wsl-optout{display:flex;align-items:center;gap:.5rem;margin-top:.7rem;color:var(--text);font-size:.78rem}.nwd-input:disabled{opacity:.5}.nwd-actions button.primary.danger{background:var(--critical, #f87171);border-color:var(--critical, #f87171);color:var(--surface);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--surface);filter:brightness(1.08)}}
|
|
4
|
-
`;var Hm=class extends N{static styles=[...N.styles,P(Zt)];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 d`<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?d`<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",Hm);function zc({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return Ml("workspace-unlock-bundle-dialog",{_tryPassword:e},t=>{t._tryPassword=null})}var Wc=`.conflict-sev{display:inline-block;padding:1px .4rem;border-radius:3px;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#fff;flex-shrink:0;&.sev-critical{background:var(--critical)}&.sev-high{background:var(--high)}&.sev-medium,&.sev-moderate{background:var(--medium)}&.sev-low{background:var(--low)}&.sev-high_bug{background:var(--high-bug)}&.sev-bug{background:var(--bug)}&.sev-informational,&.sev-info{background:var(--info)}&.sev-unrated{background:var(--low);color:var(--badge-low-text)}}
|
|
5
|
-
`;var Lk=`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 Nk({tabs:e,current:t,prefix:n,select:r,disabled:o=!1}){return d`<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),c=i.key==="ArrowRight"?1:-1,u=e[(a+c+e.length)%e.length];if(!u||u.id===t)return;let p=i.currentTarget;r(u.id),requestAnimationFrame(()=>p.querySelector(`#${n}-tab-${u.id}`)?.focus())}}">${e.map(i=>d`<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 Hc(e){if(!e)return g;let t=e.replaceAll("_"," ");return d`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function CM(e){return`bundle-${e.slice(7,19)}\u2026`}function rr(e){return e.kind==="bundle"?e.label??CM(e.identifier):e.identifier}function Ok(e){return e.kind==="bundle"?"bundle":Dc(e.identifier)?"links file":"report"}function Uc(e){let t=e.length,n=t===1,r=new Set(e.map(Ok)),o="items";if(r.size===1){let s=[...r][0];o=n?s:`${s}s`}return{count:t,singular:n,kindLabel:o}}function Vc(e){return d`<ul class="lwd-list">${e.map(t=>{let n=Ok(t);return d`<li>${rr(t)}${n==="report"?g:d`<span class="lwd-kind-tag">${n}</span>`}</li>`})}</ul>`}function jc(e){return e.length===0?g:d`<ul class="lwd-list" role="alert">${e.map(t=>d`<li><strong>${t.label}</strong> — ${t.reason}</li>`)}</ul>`}function _M(e){return e?d`<span class="color"><span class="${`color-dot marker-${e}`}"></span> <span class="color-name">${e}</span></span>`:d`<em>none</em>`}function RM(e){return d`<span class="comment-text">${e||d`<em>empty</em>`}</span>`}function TM(e){return e?No(e)?d`<span class="fix-text"><a href="${e}" target="_blank" rel="noopener noreferrer">${e}</a></span>`:d`<span class="fix-text">${e}</span>`:d`<span class="comment-text"><em>empty</em></span>`}function IM(e){return e?d`<span class="${`triage triage-${e}`}">${e}</span>`:d`<em>none</em>`}function MM(e){return e?d`<span class="${`flag-badge${e==="flagged"?" on":""}`}">${e}</span>`:d`<em>none</em>`}function Bk(e,t){return e==="color"?_M(t):e==="comment"?RM(t):e==="fix"?TM(t):e==="triage"?IM(t):e==="flagged"?MM(t):d`${String(t)}`}function AM(e,t){let n=e?.file?e.line?`${e.file}:${e.line}`:e.file:"";return d`<div class="card-head">${Hc(e?.severity)} ${n?d`<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?d`<div class="desc" data-tooltip-truncated data-tooltip="${e.description}">${e.description}</div>`:g}`}var Dk={title:"Triage conflicts",intro:"disagree with your local triage on",trailingNote:"",applyButton:"Apply",importedSideLabel:"Apply imported"},Pk={color:0,comment:1,fix:2,triage:3,flagged:4},EM={color:"Color",comment:"Comment",fix:"Fix",triage:"Triage state",flagged:"Flag"},Um=class extends N{static styles=[...N.styles,P(Wc),P(Lk)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...Dk},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 p of this.conflicts)n.has(p.id)||n.set(p.id,[]),n.get(p.id).push(p);for(let p of n.values())p.sort((f,m)=>(Pk[f.property]??99)-(Pk[m.property]??99));let r=this.conflicts.filter(p=>p.property==="color").length,o=this.conflicts.filter(p=>p.property==="comment").length,s=this.conflicts.filter(p=>p.property==="fix").length,i=this.conflicts.filter(p=>p.property==="triage").length,a=this.conflicts.filter(p=>p.property==="flagged").length,c=[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(", "),u=`${n.size} finding${n.size===1?"":"s"}`;return d`<dialog @click="${this._onClick}" @cancel="${this._blockEscClose}" @close="${this._onClose}"><header><h3>${t.title}</h3><p>${u} ${t.intro} ${c}.${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(([p,f])=>d`<li class="card" data-id="${p}">${AM(this.findingLookup.get(p),p)}<div class="rows">${f.map(m=>{let h=`${m.id}:${m.property}`,b=`conflict-${h}`;return d`<div class="row" data-key="${h}"><span class="row-label">${EM[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">${Bk(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">${Bk(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",Um);function Gc(e,t,n={}){return new Promise((r,o)=>{let s=document.createElement("triage-conflict-dialog");s.conflicts=e,s.findingLookup=t,s.labels={...Dk,...n},s.addEventListener("resolve",i=>{s.remove(),r(i.detail)}),s.addEventListener("modal-conflict",i=>{s.remove(),o(Il(i.detail?.cause))}),document.body.append(s)})}var et=`.lwd-body{margin:.2rem 0 .55rem;color:var(--text);font-size:.86rem;line-height:1.5}.lwd-empty{margin:.2rem 0 .55rem;color:var(--muted);font-size:.78rem}.lwd-note{margin:.2rem 0 .65rem;padding:.55rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);color:var(--muted);font-size:.78rem;line-height:1.45}.lwd-choice{margin:.2rem 0 .65rem;padding:.55rem .7rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);& legend{padding:0 .35rem;color:var(--text);font-size:.78rem;font-weight:500;& strong{font-weight:600}}}.lwd-option{display:flex;align-items:flex-start;gap:.5rem;padding:.3rem .15rem;& input[type=radio]{margin:.15rem 0 0;accent-color:var(--accent)}.lwd-option-text{display:flex;flex-direction:column;gap:.1rem;min-width:0}.lwd-option-title{color:var(--text);font-size:.82rem;line-height:1.35}.lwd-option-hint{color:var(--muted);font-size:.72rem;line-height:1.4}}.lwd-list{margin:0;padding-left:1.1rem;color:var(--muted);font-size:.76rem;line-height:1.5;& li+li{margin-top:.2rem}& strong{color:var(--text);font-weight:600}}.lwd-kind-tag{display:inline-block;vertical-align:middle;margin-left:.3rem;padding:0 .35rem;border:1px solid var(--border);border-radius:3px;background:rgb(from var(--text) r g b / .04);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.lwd-rename-input{margin-top:.2rem}.lwd-rename-error{margin:.25rem 0 0;color:var(--critical, #f87171);font-size:.72rem;line-height:1.35}
|
|
7
|
-
`;var Ae=class extends N{static styles=[...N.styles,P(et)];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 Vm=class extends Ae{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 d`<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?d`<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?d`<button type="button" class="primary" @click="${this._onConfirm}">Import triage</button>`:g}</footer></dialog>`}};customElements.define("local-triage-import-dialog",Vm);function zk(e){return ee("local-triage-import-dialog",e)}var Wk=`dialog{width:min(42rem,90vw)}.content-import-groups{max-height:55vh;overflow:auto}fieldset{margin:.7rem 0;padding:.5rem .75rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px)}legend{padding:0 .35rem;font-size:.85rem;font-weight:600}.content-import-item{display:flex;gap:.65rem;align-items:flex-start;padding:.65rem 0}.content-import-item+.content-import-item{border-top:1px solid var(--border)}.content-import-item input{margin:.15rem 0 0;accent-color:var(--accent)}.content-import-item.unavailable{opacity:.55;cursor:default}.content-import-label{display:grid;gap:.25rem;min-width:0;overflow-wrap:anywhere;font-size:.82rem}.content-import-status{display:flex;flex-wrap:wrap;gap:.4rem;color:var(--muted);font-size:.74rem}.content-import-present{border:1px solid var(--border);border-radius:3px;padding:0 .3rem}input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:disabled{opacity:.5}
|
|
8
|
-
`;var jm=class extends Ae{static styles=[...Ae.styles,P(Wk)];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 d`<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=>d`<fieldset><legend>${n.name}</legend>${n.items.map(({item:r,synced:o,cached:s})=>d`<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?d`<span class="content-import-present">Already present</span>`:g}</span> ${r.error?d`<span>${r.error}</span>`:g}</span></label>`)}</fieldset>`)} ${this.plan.items.length===0?d`<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",jm);function Hk(e){return ee("local-content-import-dialog",e)}var Uk=`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 OM={triage:"Triage state",color:"Color",fix:"Fix",flagged:"Flag",comment:"Comments",ignoredReports:"Per-report ignores"},Vk={"managed-only":"Only managed","local-only":"Only local",mismatch:"Different"},BM={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"};function jk(e,t){return t===void 0||Array.isArray(t)&&t.length===0?d`<em class="unset">Not set</em>`:e==="comment"?t.map(n=>d`<div class="${`comment${n.different?" changed":""}`}">${n.text}</div>`):e==="ignoredReports"?d`${t.join(`
|
|
10
|
-
`)}`:e==="flagged"?t?"Flagged":"Not flagged":e==="triage"?BM[t]??t:t}var Gm=class extends Ae{static styles=[...Ae.styles,P(Uk)];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 d`<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?d`<div class="difference-counts">Field differences: ${Object.entries(Vk).map(([i,a])=>d`<span class="${i}">${a}: ${s[i]}</span>`)}</div>`:g}</header><div class="comparison-results">${o.length>0?d`<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=>d`<li>${i.name}: ${i.reason}</li>`)}</ul></details>`:g} ${r.map(({id:i,finding:a,differences:c})=>d`<section class="finding"><h4>${a.title||a.description?.split(`
|
|
11
|
-
`)[0]||i}</h4>${a.file?d`<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>${c.map(u=>d`<tr class="${u.kind}"><th scope="row">${OM[u.property]}<span class="difference-kind">${Vk[u.kind]}</span></th><td class="${u.kind==="managed-only"?"":"highlight"}">${jk(u.property,u.local)}</td><td class="${u.kind==="local-only"?"":"highlight"}">${jk(u.property,u.managed)}</td></tr>`)}</tbody></table></div></section>`)} ${r.length===0?d`<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",Gm);var Gk=e=>ee("triage-comparison-dialog",e);var PM={get state(){return l},listWorkspaces:K,addReportToWorkspace:eo,addBundleToWorkspace:to,onReportMembershipChanged:Bi,onBundleMembershipChanged:_f,onWorkspaceDeleted:Oi,onWorkspacePrivateKeyChanged:Cf,analyzeContent:We,setCount:ze,gunzipBytes:sp,listBundles:Ke,listFiles:le,readBundle:$n,readFileBytes:vn,saveBundle:Kr,saveFileBytes:Hp,onFileMutated:dt,async saveTriage(){return await as(),$e()},getSecureItem:ye,setSecureItem:Te,removeSecureItem:Xn,onSecureStorageHydrated:jt};function Kk(e){e.installSyncHost(PM),Yf(()=>e.triageSync.notify())}var q=null,oo=null;function Jk(){try{return ye("deepview.sync.userEnabled")!=="0"}catch{return!0}}var Zk=!1;function Yc(e){Zk=!!e}function qc(){if(Zk||l.serverMode!=="e2e")return!0;try{return lt()?.mode==="managed"}catch{return!1}}function ea(){return oo||(qc()&&!q?Promise.resolve(null):(oo=(async()=>{let e="./client-sync.js";try{let t=await import(e);return Kk(t),q=t,DM(),t}catch(t){throw oo=null,t}})(),oo))}var Qk=[];function ta(e){q?e(q):Qk.push(e)}function DM(){let e=Qk.splice(0);for(let t of e)try{t(q)}catch(n){console.warn("client-sync: deferred apply failed:",n)}}function so(e,t){let n={cancelled:!1,unsub:null};return ta(r=>{n.cancelled||(n.unsub=t(r,e))}),()=>{n.cancelled=!0,n.unsub&&n.unsub()}}function Km(e,t){return q?q.isInRemote(e,t):!1}function ex(e,t){return q?q.isBundleInRemote(e,t):!1}var zM="deepview.objstore-presence.";function tx(e){try{let t=localStorage.getItem(zM+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function ms(e,t){if(q&&q.isInRemote(e,t))return!0;let n=tx(e);return!n||typeof n.names!="object"?!1:Object.values(n.names).includes(t)}function qm(e,t){if(q&&q.isBundleInRemote(e,t))return!0;let n=tx(e);return!n||typeof n.bundles!="object"?!1:Object.values(n.bundles).includes(t)}function Ym(e){return q?q.remoteCount(e):0}function nx(e){return q?q.differingReports(e):[]}function W4(e){return so(e,(t,n)=>t.onAutoDownloaded(n))}function H4(e){return so(e,(t,n)=>t.onBundleAutoDownloaded(n))}function U4(e){return so(e,(t,n)=>t.onChange(n))}var qk=null,Yk=null,Xk=null,Kc=[];function V4(e){if(q){q.setRedraw(e);return}qk=e,ta(t=>{qk===e&&t.setRedraw(e)})}function j4(e){if(q){q.setAuthenticationResolver(e);return}Yk=e,ta(t=>{Yk===e&&t.setAuthenticationResolver(e)})}function G4(e){if(q){q.setHydrationConflictResolver(e);return}Xk=e,ta(t=>{Xk===e&&t.setHydrationConflictResolver(e)})}async function Qt(e,t){if(qc()||!Jk()&&!q)return;let n=await ea();if(!(!n||qc()))return n[e](...t)}function rx(...e){return Qt("downloadFileFromRemote",e)}function ox(...e){return Qt("fetchBundleFromRemote",e)}function Xc(...e){return Qt("putFile",e)}function sx(...e){return Qt("holdLocalChangeChecks",e)}function ix(...e){return Qt("putBundleToRemote",e)}function Jc(...e){return Qt("deleteFromRemote",e)}function Zc(...e){return Qt("deleteBundleFromRemote",e)}function na(...e){return Qt("openWorkspace",e)}async function Xm(...e){return(q??(oo?await oo:null))?.closeWorkspace(...e)}function ax(...e){return Qt("recheckRemoteStorage",e)}function lx(...e){return Qt("resolveReportDifference",e)}function Cn(e,t){if(q)return q.triageSync[e](...t);ta(n=>{n.triageSync[e](...t)})}var j={get status(){return q?q.triageSync.status:"off"},get openSessions(){return q?q.triageSync.openSessions:[]},get persistenceDegraded(){return q?q.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return q?q.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return qc()?Promise.resolve(null):ea().then(t=>{t.triageSync.setEnabled(!0);let n=Kc;Kc=[];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(q){Kc=q.openWorkspaceIds();for(let t of Kc)try{q.closeWorkspace(t)}catch(n){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,n)}q.triageSync.setEnabled(!1);return}Cn("setEnabled",[e])},isEnabled(){return q?q.triageSync.isEnabled():Jk()},openSession(e){Cn("openSession",[e])},closeSession(e){Cn("closeSession",[e])},refreshSession(e){Cn("refreshSession",[e])},dismissError(e){Cn("dismissError",[e])},setForcedOff(e){Cn("setForcedOff",[e])},setProtocolLocked(e){Cn("setProtocolLocked",[e])},setServerUrl(e){Cn("setServerUrl",[e])},getServerUrl(){return q?q.triageSync.getServerUrl():null},notify(){Cn("notify",[])},onStatusChange(e){return so(e,(t,n)=>t.triageSync.onStatusChange(n))},onServerInfo(e){return so(e,(t,n)=>t.triageSync.onServerInfo(n))},onPersistenceDegraded(e){return so(e,(t,n)=>t.triageSync.onPersistenceDegraded(n))},onProxyAuthRequired(e){return so(e,(t,n)=>t.triageSync.onProxyAuthRequired(n))}};function Qc(){let e=new Set;if(l.currentWorkspace||!Kf())return e;let t=l.currentFile??l.reports[0]?.fileName;if(!t)return e;let n=new Set;for(let r of l.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)bt(r).some(o=>!n.has(o)&&Zn(o).some(s=>s!==t))&&e.add(r);return e}var gs="\0",Zm="",hs="";function ra(e){return al(e.model)||null}function Qm(e){let t=or();if(t.filterAnalyzer){let n=e._analyzer??null,r=t.filterAnalyzer===gs?null:t.filterAnalyzer;if(n!==r)return!1}if(t.filterModel){let n=ra(e),r=t.filterModel===hs?null:t.filterModel;if(n!==r)return!1}return!0}function eg(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 ux(e){let t=new Set;for(let n of e)for(let r of n)t.add(eg(r));return t}function ed(){l.filterSeverities=new Set,l.filterColors=new Set,l.filterSources=new Set,l.filterAnalyzer="",l.filterModel="",l.filterRepo="",l.filterConfMin=0,l.filterConfMax=10,l.filterInclude="",l.filterIncludeNegate=!1,l.filterComment="",l.filterFix="",l.filterFlagged="",l.filterDuplicates="",l.filterCrossContext="",l.filterAppStacked="",l.filterSecurity="",l.filterRevalidate="",l.filterPartial="",l.sortBy="severity"}var WM=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];function nz(){let e={};for(let t of WM){let n=l[t];e[t]=n instanceof Set?new Set(n):n}return e}var tg=null;function rz(e){tg=e}function oz(){tg=null}function or(){return tg??l}function px(e){return Vr(e)||(e._source&&!e._sourcePass?"revalidation":"")}function fx(e){let t=_p("confirmed","");return e.some(n=>t.includes(px(n)))}function HM(e,t){let n=e.map(wt).filter(r=>r.length>0);return pv(n,t,uv(e,wt,Vr),Vr)?"confirmed":""}function UM(e,t=wt){return dv(e,t)}function VM(e,{tabs:t=wt,kindOf:n=Vr,severityMode:r=l.severityMode}={}){return Bl(e,{tabs:t,kindOf:n,severityMode:r})}function td(e){return l.showRevalidation===!1||l.upstreamOnly||io()?!1:VM(e)}function oa(e,{resetSort:t=!0}={}){l.filterConfMin=UM(e),l.filterConfMax=10,l.filterRevalidate=HM(e,l.filterConfMin),l.filterPartial="",t&&(l.sortBy=ng(e)?"priority-desc":"severity")}function ng(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(mx(t)===void 0)return!1;let n=t.filter(o=>o.isApp);if(n.length===0)return!0;let r=t.some(o=>o.priority!==void 0);return n.some(o=>o.priority!==void 0||!r&&jr(o))})}function mx(e){let t=e.find(n=>n.priority!==void 0);return t?t.priority:e.some(jr)?0:void 0}function gx(e){let t=or();if(t.filterSources.size===1){let n=t.filterSources.has("own");if(n&&Gn(e.file)||!n&&!Gn(e.file))return!1}if(t.filterRevalidate){let n=_p(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(px(e)))return!1}if(!t.filterRevalidate){let n=mv(e)?0:Rp(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 jM(e){if(!gx(e))return!1;let t=or(),n=t.filterInclude.toLowerCase();if(t.filterSeverities.size>0&&!t.filterSeverities.has(ce(e,l.severityMode)))return!1;if(t.filterColors.size>0){let r=ge(e)?.color??"none";if(!t.filterColors.has(r))return!1}if(!Qm(e))return!1;if(t.filterRepo){let r=eg(e),o=t.filterRepo===Zm?null:t.filterRepo;if(r!==o)return!1}if(n){let r=ge(e),o=hv(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 GM(e){let t=or();if(!t.filterComment&&!t.filterFix&&!t.filterFlagged)return!0;let n=r=>e.some(o=>r(ge(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=>!!(ge(o)?.fix||Xt(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 KM(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!Qn(t))return t.name;let n=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(n)?.[1]??null}function hx(){return l.showRevalidation!==!1&&!l.upstreamOnly}function rg(e){if(hx())return!1;let t=wt(e);if(t.length<2)return!1;let n=new Set,r=new Set;for(let o of t){let s=eg(o);s&&n.add(s);let i=KM(o);i&&r.add(i)}return n.size>1||r.size>1}function og(e){if(!hx()||wt(e).length===0)return!1;let n=e.filter(r=>r.isApp);return n.length>0&&n.length>1}function Jm(e){return e.some(t=>t.isSecurity===!0)}function bx(e){return e.some(Jm)&&e.some(t=>!Jm(t))}function yx(e){return e.filter(t=>t.some(gx)).map(wt)}function nd(e){let t=!l.currentWorkspace&&or().filterDuplicates,n=t?Qc():null,r=or().filterCrossContext,o=or().filterAppStacked,s=or().filterSecurity;return e.filter(i=>i.some(jM)&&GM(i)&&(!t||t==="with"===i.some(a=>n.has(U(a))))&&(!r||r==="with"===rg(i))&&(!o||o==="with"===og(i))&&(!s||s==="with"===Jm(i)))}function cx(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 wx(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 dx=wx("desc"),qM={severity:(e,t)=>(Se[ce(t,l.severityMode)]||0)-(Se[ce(e,l.severityMode)]||0)||dx(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":dx,"confidence-asc":wx("asc"),"priority-desc":cx("priority","desc"),"priority-asc":cx("priority","asc")};function vx(e){let t=qM[l.sortBy];if(!t)return[...e];if(l.sortBy==="priority-desc"||l.sortBy==="priority-asc"){let n=l.sortBy==="priority-desc"?"desc":"asc",r=n==="desc"?-1:11;return e.map(o=>({p:mx(o),g:o})).toSorted((o,s)=>{let i=o.p??r,a=s.p??r;return(n==="desc"?a-i:i-a)||_n(o.g).file.localeCompare(_n(s.g).file)}).map(o=>o.g)}return e.map(n=>({p:_n(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}function $x(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.startsWith("revalidate")&&n!=null))}function kx(e,t,n){let r=$x(t);if(!e._revalidationCopies){let o=$x(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 lz(e){let t=new Map,n=new Set(nw);for(let{reportName:r,fields:o}of e)for(let[s,i]of Object.entries(o)){if(i==null)continue;let a=s==="revalidate"?_e(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 c=t.get(s);c.has(a)||c.set(a,new Set),c.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 YM=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"]);function xx(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,o]of Object.entries(t)){if(r.startsWith("_")||YM.has(r)||o==null)continue;if(r==="revalidate"){let i=_e(t);if(!i)continue;let a=_e(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 sg(e,t,n,r){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:oi(e),reason:e.correctedSeverityReason}},e._correctedByReport[n]={severity:oi(t),reason:t.correctedSeverityReason});let o=kx(e,t,n);(xx(e,t)||r.has(e.id))&&r.set(e.id,{finding:e,copies:o})}function sa(e,t=null){let n=t??e.filter(p=>p.isApp),r=e.filter(p=>!p.isApp);if(n.length===0||r.length===0)return[e];if(t&&e.some(p=>p.isApp))return[e];if(r.some(p=>typeof p.id!="string"||!p.id))return[e];let o=new Set(r.map(p=>p.id)),s=new Map,i=new Set;for(let p of n){let f=p.revalidateInputs===void 0?[]:p.revalidateInputs;if(!Array.isArray(f))return[e];for(let m of f){if(!o.has(m))return[e];i.add(m)}s.set(p,f)}if(i.size!==o.size)return[e];let a=new Map([...o].map(p=>[p,p])),c=p=>{let f=p;for(;a.get(f)!==f;)f=a.get(f);for(;a.get(p)!==f;){let m=a.get(p);a.set(p,f),p=m}return f};for(let p of s.values()){if(p.length===0)continue;let f=c(p[0]);for(let m of p)a.set(c(m),f)}let u=new Map;for(let p of e){let f=s.get(p),m=f?f.length>0?c(f[0]):p:c(p.id);u.has(m)||u.set(m,[]),u.get(m).push(p)}return u.size===1?[e]:[...u.values()]}function rd(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(_e($))&&i.add($.id);let k=n?v.filter($=>$.isUpstream&&_e($)!=="revalidation").map(Sx):t?r?v.filter($=>!["refuted","unreachable"].includes(_e($))):v:v.filter($=>_e($)!=="revalidation").map(Sx),x=k.length===v.length&&k.every(($,S)=>$===v[S])?v:k;x.length>0&&s.push({group:x,sourceGroup:v,reportIndex:y,reportName:w.fileName??"",hasApp:x.some($=>$.isApp)})}}let a=s.map((y,w)=>w),c=s.map(y=>y.hasApp),u=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},p=(y,w)=>{y=u(y),w=u(w),y!==w&&(a[w]=y,c[y]||=c[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(k=>k.app);for(let{index:k}of y){v&&p(v.index,k);let x=s[k].reportIndex;w.has(x)?p(w.get(x),k):w.set(x,k)}}for(let y of f.values()){let w=null;for(let{index:v}of y)c[u(v)]||(w===null?w=v:p(w,v))}for(let y of o){let w=null;for(let v of y)for(let{index:k}of f.get(v)??[])w===null?w=k:p(w,k)}let m=new Map;for(let y=0;y<s.length;y++){let w=u(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(F=>F.isApp);if(R){let F=[...w];F.workspaceKey=R.id??String(R._id),b.push(...ig(y,F,t,n))}else b.push(...ig(y,w,t,n));continue}let k=new Map,x=new Map,$=[];for(let{group:R,reportName:F}of y)for(let I of R)if(I.id&&x.has(I.id))sg(x.get(I.id),I,F,k);else{let A={...I,_reportName:I._reportName??F};I.id&&x.set(I.id,A),$.push(A)}let S=new Set;for(let R of o)for(let F of R)x.has(F)&&S.add(F);for(let{group:R}of y)if(R.length>1)for(let F of R)F.id&&S.add(F.id);let _=[...S].map(R=>x.get(R));for(let R of $)S.has(R.id)||_.push(R);if(e.length>1){let R=_.find(F=>F.isApp);R&&(_.workspaceKey=R.id??String(R._id))}b.push(...ig(y,_,t,n));for(let[R,F]of k){let I=h.get(R);h.set(R,I?{finding:I.finding,copies:[...I.copies,...F.copies]}:F)}}return Object.defineProperty(b,"ruledOutIds",{value:i,configurable:!0}),{groups:b,conflicts:h}}function ig(e,t,n,r){if(n)return[t];if(r){let s=e.flatMap(p=>p.sourceGroup),i=sa(s);if(i.length===1)return[t];let a=[],c=new Set;for(let p of i){let f=new Set(p.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)c.add(h.id)}}let u=new Set(t.map(p=>p.id).filter(Boolean));return c.size===u.size?a:[t]}let o=e.flatMap(s=>s.sourceGroup.filter(i=>i.isApp));return sa(t,o)}function Sx(e){let t=Object.keys(e).filter(r=>r.startsWith("revalidate")||r==="_revalidationCopies");if(t.length===0)return e;let n={...e};for(let r of t)delete n[r];return n}function od(e,t=Lt){let n=a$(Yr(e.flat()));return{linkedIds:r=>[...bt(r),...n.linkedIds(r)],knownRows:r=>{let o=[...t(r),...ac(r)];for(let s of o)for(let i of Yr(s.members))n.add(i);return o}}}var ao=null,ag=0;function bs(){return l.currentView==="links"&&ao?.owner===l.currentLinks?ao:null}function Cx(){ag++,ao=null}async function Cz(e,t,n,r){if(l.currentView!=="links"||!l.currentLinks)return;let o=Qe(l.currentLinks),s=++ag;ao={owner:o,id:e,reportName:t,group:null,error:""},l.focusCodeStack=[],l.focusCodeAt=0;let i=()=>s===ag&&l.currentView==="links"&&l.currentLinks===o;try{if(C()){let h=Lt([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.");ao={owner:o,id:e,reportName:t,group:h.members.map(b=>({...b})),error:""},l.activeTabByGroup.set(h.members[0].id,e);return}let a=await mt(await pe(t));if(!i())return;let c=(fn(a?.data)??[]).map(h=>Array.isArray(h)?h:[h]),u=h=>h?.some(b=>String(b?.id)===e),p=u(c[n])?c[n]:c.find(u);if(!p)throw new Error("This finding is no longer in the report.");let{data:f}=a,m=p.filter(h=>h?.id).map(h=>{let b={...h,_reportName:t,_repoFallback:Oe(f)??qe(t),_repoDirectory:Tt(f?.repo),_bundleHashes:f.bundleHashes??[],_source:h.source??f.source??null};return Oo(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=Dn(b,b._source)),b});if(await Promise.all([no(),it("report",t),...Hi(t).map(h=>it("workspace",h.id))]),i()){let h=(b,y)=>y.includes(b.id)||Array.isArray(b.revalidateInputs)&&b.revalidateInputs.some(w=>y.includes(w));zn([m],od([m],b=>[...Lt(b),...l.reports.flatMap(y=>y.groups??[]).filter(y=>y.some(w=>h(w,b))).map(y=>({members:y}))])),ao.group=m,l.activeTabByGroup.set(m[0].id,e)}}catch(a){i()&&(ao.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 c=new Map;for(let f=0;f<e.length;f++){let m=s(f);c.has(m)||c.set(m,[]),c.get(m).push(f)}if(c.size===e.length)return e;let u=f=>f.id??String(f._id),p=[...c.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(u(v))||m.set(u(v),v);let h=new Map;for(let w of f)for(let v of e[w])h.has(u(v))||h.set(u(v),m.get(u(v))??v);let b=[...h.values()],y=e[f[0]];return b.workspaceKey=y.workspaceKey??u(y[0]),b.linkedTabs=[...m.values()],b});return Object.defineProperty(p,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),p}function se(e){return e.workspaceKey??U(e[0])}function id(e){return Array.isArray(e)?e:[e]}function io(){return l.revalidationDetailed===!0}function XM(e){return e?._reportName??""}var _x=null,Rx=!0;function JM(){let e=l.reports;return!Array.isArray(e)||e.length===0?!0:(e!==_x&&(_x=e,Rx=Pl(e)),Rx)}function sr(e){return!e.isUpstream||l.showRevalidation===!1||l.upstreamOnly===!0||!JM()}function ZM(){let e=l.managedSession;return C()&&(e?.publicShare===!0||!Un(e?.role,"triage"))}function vt(e){return sr(e)&&!ZM()}function ge(e){if(!sr(e))return;let t=l.triage.get(U(e)),n=t?.triage==="ignored"&&st(e,jo())?{...t,triage:void 0}:t;if(!C())return n;let r=l.managedComments?.get(e.id)??[];return r.length===0&&!n?.comment?n:{...n,comment:r.map(o=>o.authorLogin?`${o.authorLogin}: ${o.body}`:o.body).join(`
|
|
12
|
-
|
|
13
|
-
`)}}function QM(e){return sr(e)&&(Re(e,l.triage.get(U(e)),jo())==="ignored"||st(e,jo())&&Br(l.triage,U(e),XM(e)))}function ia(e,t=ge(e)){if(sr(e))return Re(e,t,jo())??(QM(e)?"ignored":void 0)}function wt(e){return bs()?.group===e?e:e.linkedTabs?e.linkedTabs:io()?e:Tx(e)}function Tx(e){return e.length<=1||!e.some(yi)?e:e.filter(yi)}function ir(e){let t=wt(e);return t.length<=1?t:[...t].toSorted((n,r)=>{let o=yi(n)?1:0,s=yi(r)?1:0;if(o!==s)return s-o;let i=ge(n)?.color?1:0,a=ge(r)?.color?1:0;if(i!==a)return a-i;let c=Se[ce(n,l.severityMode)]||0,u=Se[ce(r,l.severityMode)]||0;if(c!==u)return u-c;let p=n.confidence??-1;return(r.confidence??-1)-p})}function _n(e){return e.length===1?e[0]:ir(e)[0]}function Ix(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function eA(e){let t=ge(e);return!!t?.comment||!!(t?.fix||Xt(e))||t?.flagged===!0}function He(e){if(e.length===1)return e[0];let t=ir(e);if(t.length===1)return t[0];let n=l.activeTabByGroup.get(se(e));if(n){let o=t.find(s=>U(s)===n);if(o)return o}let r=t;if(l.filterAnalyzer||l.filterModel){let o=t.filter(Qm);o.length>0&&(r=o)}return r.find(eA)??r[0]}function Mx(e){return e?._repoFallback||l.repoUrl||""}function Rn(e){return{github:Mx(e),directory:e?._repoDirectory??""}}function Ax(e){for(let t of qt().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||Mx(e)||null}function ys(e){if(!Array.isArray(e))return[];let t=e.filter(n=>!n.isUpstream);return t.length===0||t.length===e.length?e:t}function Ee(e){let t=ys(e),n=0,r=!1,o,s=!1,i=!1,a,c=!1,u=null,p=!1,f=!0;for(let w of t){let v=ge(w),k=ia(w,v),x=v?.color;x===void 0&&k===void 0||(n++,x!==void 0&&(s?x!==o&&(r=!0):(s=!0,o=x)),c?k!==a&&(i=!0):(c=!0,a=k),k?(u===null&&(u=k),k==="ignored"&&v?.triage!=="ignored"?f=!1:p=!0):f=!1)}let m=r||i,h=!m&&s?o:null,b=n>0&&f,y=!m&&u!==null?u:null;return{hasConflict:m,commonColor:h,anyTriage:p,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 Wz(e,t){if(!Array.isArray(e)||e.length<2)return!1;let n=e.filter(vt);if(n.length<2)return!1;let r=(t??"").trim();return n.every(o=>tA(o,r))}function tA(e,t){if(!vt(e))return!1;let n=(ge(e)?.fix??"").trim();return n===""||n===(t??"").trim()}function Hz(e,t){if(!vt(He(e)))return{targets:[],clearing:!1};let n=Ee(e);return{targets:aa(e,n),clearing:t==="restore"||lg(e,n)===t}}function aa(e,t=Ee(e)){let n=ys(e),r=e.linkedTabs||n!==e&&e.some(o=>o.isApp)?n:t.hasConflict?[He(e)]:n;return r.every(vt)?r:r.filter(vt)}function lg(e,t=Ee(e),n=null){return e.linkedTabs||e.some(r=>r.isApp)&&ys(e)!==e||!t.hasConflict?t.commonTriage??null:ia(n??He(e))??null}function Uz(e){let t=ys(e);if(t.length<2)return!1;let r=Ee(e).commonTriage;if(!r||r==="ignored"&&!t.some(s=>ge(s)?.triage==="ignored"))return!1;let o=!1;for(let s of t){if(!vt(s))continue;let i=U(s),a=l.triage.get(i);ia(s,a)!==r&&(r==="ignored"&&st(s,jo())||r!=="ignored"&&a?.ignoredReports?.length||ie(l.triage,i,{triage:r})&&(o=!0))}return o}var ut=null;function ar(){ut=null}function ad(e,t=!1,n=!1){let r=l.reports,o=l.workspaceMerges,s=C();if(!ut||ut.reports.length!==r.length||ut.reports.some((a,c)=>a!==r[c])||ut.merges!==o||ut.mergeCount!==o.length||ut.securityLinksTick!==l.linksTick||ut.findingIndexTick!==l.findingIndexTick||ut.managed!==s){let a=r.flatMap(c=>c.groups??[]);zn(a,od(a)),ut={reports:[...r],merges:o,mergeCount:o.length,managed:s,securityLinksTick:l.linksTick,findingIndexTick:l.findingIndexTick}}let i=t?"upstream":e?n?"workspace-app":"app":"code";return ut[i]||(ut[i]=rd(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:o})),ut[i]}function Ex(){return ad(l.showRevalidation!==!1).groups}function cg(){return ad(!0).groups}function Fx(){return ad(!0,!1,!!l.currentWorkspace).conflicts}function lr(){let e=ad(l.showRevalidation!==!1,l.upstreamOnly===!0,!!l.currentWorkspace),t=e.groups;if(l.showRevalidation===!1||l.upstreamOnly)return t;if(l.currentWorkspace){let n=io();return(!e.linkedGroups||e.linksTick!==l.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=sd(t,bt,Tx,wt),e.linksTick=l.linksTick,e.linkedDetailed=n),e.linkedGroups}return io()?t:e.visibleGroups??=(()=>{let n=t.flatMap(r=>{let o=r.filter(s=>!jr(s));return o.length===r.length?[r]:o.length===0?[]:(o.workspaceKey=se(r),[o])});return Object.defineProperty(n,"ruledOutIds",{value:t.ruledOutIds,configurable:!0}),n})()}function lo(){let e=lr();if(l.viewMode==="kanban")return e;let t=e.filter(n=>Ee(n).commonTriage===l.shownTriage);return Object.defineProperty(t,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),t}function Vz(e){if(l.showRevalidation||l.upstreamOnly||!Array.isArray(e)||e.length===0)return e;let t=new Set(e.map(U)),n=new Map;for(let r of cg())for(let o of sa(r))if(o.some(s=>t.has(U(s))))for(let s of o)n.set(U(s),s);return n.size===e.length&&e.every(r=>n.get(U(r))===r)?e:n.size>0?[...n.values()]:e}function jz(e){let t=bs()?.group;if(t&&se(t)===e)return t;for(let n of lr())if(se(n)===e)return n;return null}var ld=class extends _t{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(kn(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,n=kn(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 ug=Lr;function Lx(e){return e==null?"(none)":ug[e]??e}function Nx(e){return e??"(no model)"}var dg=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=l.filterAnalyzer===""?void 0:l.filterAnalyzer===gs?null:l.filterAnalyzer,o=l.filterModel===""?void 0:l.filterModel===hs?null:l.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=ra(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:Lx(r),c=o===void 0?null:Nx(o),u=a!=null&&c!=null?`${a} \xB7 ${c}`:a??c??(t?"All analyzers":"All models"),p=a!=null||c!=null;return d`<button type="button" class="${G({"analyzer-btn":!0,active:p})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${u}`}"><span class="analyzer-btn-label">${u}</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:gs,labelOf:Lx,counts:s,current:l.filterAnalyzer}):g} ${t&&n?d`<div class="analyzer-menu-sep"></div>`:g} ${n?this._column({dim:"model",heading:"Model",allLabel:"All models",values:this.models,sentinel:hs,labelOf:Nx,counts:i,current:l.filterModel}):g}</div>`}_column({dim:t,heading:n,allLabel:r,values:o,sentinel:s,labelOf:i,counts:a,current:c}){return d`<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(c==="")}" class="${G({"analyzer-menu-item":!0,active:c===""})}" @click="${()=>this._pick(t,"")}"><span class="analyzer-menu-label">${r}</span></button> ${o.map(u=>{let p=u??s,f=a.get(u)??0,m=c===p;return d`<button type="button" aria-pressed="${String(m)}" class="${G({"analyzer-menu-item":!0,active:m,zero:f===0})}" @click="${()=>this._pick(t,p)}"><span class="analyzer-menu-label">${i(u)}</span><span class="analyzer-menu-count">${f}</span></button>`})}</div>`}_pick(t,n){let r=t==="analyzer"?l.filterAnalyzer:l.filterModel,o=n!==""&&r===n?"":n;this.dispatchEvent(new CustomEvent("analyzer-change",{detail:{analyzer:t==="analyzer"?o:l.filterAnalyzer,model:t==="model"?o:l.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 c=r.bottom+i;c+s>window.innerHeight-4&&r.top>s+i&&(c=r.top-s-i),t.style.top=`${c}px`,t.style.left=`${a}px`}updated(){this._open&&this.querySelector(".analyzer-menu")?.matches(":popover-open")&&this._position()}};customElements.define("analyzer-select",dg);var cd=["type","model","effort","exportsMode"],Ox=["security","correctness"],nA=["max","xhigh","high","medium","low","minimal"],rA=["list","isolate"];function pg(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}var oA={type:e=>e==="terminal"?Ox.length+2:pg(Ox,e),model:e=>e==null?1:0,effort:e=>pg(nA,e),exportsMode:e=>pg(rA,e)};function sA(e,t,n){for(let r of n){let o=oA[r],s=o(e[r])-o(t[r]);if(s!==0)return s;let i=String(e[r]??"").localeCompare(String(t[r]??""));if(i!==0)return i}return 0}function Bx(e,t,{typePrefix:n=!0}={}){return e==="type"?n?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function iA(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(u=>s[u]??"").join("|"),a=o.get(i);if(a){a.exportsMode=`${a.exportsMode}+${s.exportsMode}`;continue}let c={...s};o.set(i,c),r.push(c)}return r}function Px(e,t=cd){let n=new Map;for(let m of e){let h={};for(let y of t)h[y]=y==="model"?al(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)=>sA(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")?iA(r,t):r,a=i.length>2&&s.includes("type")&&s.length>1,c=["model","effort"].filter(m=>t.includes(m)&&o[m]),u=[...c,...t.filter(m=>!c.includes(m))],p=[],f=!1;for(let m of u)if(o[m]){let h=Bx(m,i[0][m]);h!=null&&p.push(h)}else if(!f){for(let h of i){let b=s.map(y=>Bx(y,h[y],{typePrefix:!a})).filter(y=>y!=null);b.length>0&&p.push(b.join(" \xB7 "))}f=!0}return p}function Dx(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 aA(){return dd||(dd=(async()=>await import("./prism.js"))(),dd)}var zx=1024*1024;function lA(e){return e.length<=zx&&mn(e)<=zx}var cA={__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 Wx(e){return typeof e!="string"?null:cA[e.toLowerCase()]??null}async function ws(e,t,n=null){if(!t||!lA(e))return null;try{return(await aA()).highlight(e,t,n)}catch{return null}}function gW(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 p=1;p<a.length;p++){for(let f=n.length-1;f>=0;f--)r+=n[f].close;t.push(r),r=n.map(f=>f.open).join("")+a[p]}if(s===-1)break;let c=e.indexOf(">",s);if(c===-1){r+=e.slice(s);break}let u=e.slice(s,c+1);u.startsWith("</")?n.pop():n.push({open:u,close:`</${/^<([a-zA-Z][^\s/>]*)/u.exec(u)?.[1]??"span"}>`}),r+=u,o=c+1}return t.push(r),t}var fg=new Map,mg=new Set,gg=!1;function dA(){gg||(gg=!0,queueMicrotask(()=>{gg=!1,l.codeBlockTick++,E()}))}function hg(e,t){let n=Wx(t);if(!n||!e)return null;let r=`${n}\0${e}`;return fg.has(r)?fg.get(r):(mg.has(r)||(mg.add(r),(async()=>{let o=await ws(e,n);fg.set(r,o??null),mg.delete(r),dA()})()),null)}var ud=null,pd=null;function uA(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function pA(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function fA(){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 Hx="./brotli-fallback.js",fd=Symbol("brotli worker unavailable"),en=null,bg=!1,mA=0,vs=new Map;function gA(){return pd||(pd=(async()=>await import(Hx))(),pd)}function yg(){bg=!0,en&&(en.terminate(),en=null);let e=[...vs.values()];vs.clear();for(let t of e)t.resolve(fd)}function hA(e){let{id:t,bytes:n,error:r}=e.data??{},o=vs.get(t);o&&(vs.delete(t),r?o.reject(new Error(r)):o.resolve(n))}function bA(){if(en)return en;if(bg||typeof Worker>"u")return null;try{en=new Worker(new URL(Hx,import.meta.url),{type:"module"})}catch{return bg=!0,null}return en.addEventListener("message",hA),en.addEventListener("error",yg),en.addEventListener("messageerror",yg),en}function yA(e){let t=bA();return t?new Promise((n,r)=>{let o=++mA;vs.set(o,{resolve:n,reject:r});try{t.postMessage({id:o,bytes:e})}catch{vs.delete(o),yg(),n(fd)}}):Promise.resolve(fd)}async function wA(){await fA();let e=uA();return e?{kind:"native",format:e}:{kind:"fallback"}}function Ux(){return ud||(ud=wA(),ud)}async function Vx(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};n();let r=await Ux();if(n(),r.kind==="native")return pA(r.format,e);let o=await yA(e);return n(),o!==fd?o:(await gA()).brotliDecompress(e)}Ux().catch(()=>{});var jx=0,wg=new AbortController;function fe(){return jx}function Fe(){return wg.signal}function Le(){return wg.abort(),wg=new AbortController,++jx}var vA=new Map,$A=new Map,la=new Map,md=new WeakMap;async function vg(e){try{let t=await jp(e);return t?fi(t,e):null}catch{return null}}var cr=null;function FW(e){let t=new Map(e.filter(n=>n&&!n.error).map(n=>[n.integrity,n]));return cr=t.size>0?{bundles:t}:null,cr}function LW(e){cr===e&&(cr=null)}function $g(e,t=()=>!0){let n=cr?.bundles.get(e);return!n||!t(n)?null:(cr.bundles.delete(e),cr.bundles.size===0&&(cr=null),n)}function co(e,t,{sources:n=!0}={}){if(!t.managedId&&C())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let r=n?vA:$A,o=t.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis",s=l.bundleDetails;if(s?.integrity===e&&s.kind===o&&s.managedId===t.managedId&&!s.error&&(!n||!s.metadataOnly))return Promise.resolve(s);let i=$g(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}`,c=t.managedId&&n?Fe():void 0,u=r.get(a);if(u&&u.signal===c)return u.job;let p=(async()=>{if(t.managedId)try{let h=n?pp(await Ak(t.managedId,{signal:c}),{integrity:e,kind:o,size:t.size}):fi(await Bc(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 vg(e);return h?.kind===o&&!h.stale?h:co(e,t)}let[f,m]=await Promise.all([kA(e,t),vg(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||Ow(f).then(b=>Gp(e,b)).catch(()=>{})}return f})();return r.set(a,{job:p,signal:c}),p.finally(()=>{r.get(a)?.job===p&&r.delete(a)}).catch(()=>{}),p}function dr(e,t=l.currentView==="bundles"?l.bundleDetailsTab:"overview",{workspaceId:n=null}={}){let r=l.bundleDetails,o=l.bundleCodeFileRequest,s=o?.bundle===l.selectedBundle&&(!r||r.metadataOnly===!0&&!r.sourceError),i=l.currentView==="bundles"&&l.bundleDetailsTab==="code"&&t==="code"?l.bundleSourceFile??(s?o.path:null):null;Le(),l.currentView="bundles",l.selectedBundle=e,l.selectedBundleWorkspace=n,l.bundleDetails=null,l.bundleSourceFile=null,l.bundleCodeHistory=null,l.bundleCodeFileRequest=i?{bundle:e,path:i}:null,l.bundleCompare=null,l.bundleSourceFindingIdx=null,l.bundleCodeSearchQuery="",l.bundleCodeSearchMode="files",l.bundleSearchQuery="",l.bundleSearchRegex=!1,l.bundleSearchCase=!1,l.bundleSearchContext=!0,l.bundleDetailsTab=t??"overview",J.showAll=!0,l.shownTriage=null}function NW(e,{preserveSource:t=!1}={}){Vn(l.bundleDetailsTab,l.bundleSourceFile)&&!Vn(e,t?l.bundleSourceFile:null)&&Le(),l.bundleDetailsTab=e,l.bundleCodeFileRequest=null,t||(l.bundleSourceFile=null,l.bundleCodeHistory=null),l.bundleSourceFindingIdx=null}async function kA(e,t){try{let n=await $n(e);if(C())throw new DOMException("Local bundle closed","AbortError");let r=t.name.toLowerCase().endsWith(".map"),o=r?"sourcemap":"stasis";try{if(r)return pp(Pr(n),{integrity:e,kind:o,size:n.byteLength});let s=Pr(await Vx(n,()=>!C())),i=Mw.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 xA(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Mi(e.integrity,e.fileHashes);return}(async()=>{try{let t=await _l(e);if(Mi(e.integrity,t),l.bundleDetails!==e)return;e.fileHashes=t,E()}catch{}})()}}function SA(e){if($f(e))return Promise.resolve();if(la.has(e))return la.get(e);let t=(l.bundles??[]).find(r=>r.integrity===e);if(!t||t.managedId)return Promise.resolve();let n=(async()=>{let r=await vg(e);if(!(!r?.json&&!r?.bundle))try{let o=await _l(r);Mi(e,o)}catch{}})();return la.set(e,n),n.finally(()=>{la.get(e)===n&&la.delete(e)}).catch(()=>{}),n}async function kg(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 SA(r)}}}async function gd(e){let t=(l.bundles??[]).find(r=>r.integrity===e);if(!t)return;let n;try{n=await co(e,t,{sources:Vn(l.bundleDetailsTab,l.bundleSourceFile)})}catch(r){if(r.name==="AbortError")return;throw r}l.selectedBundle!==e||t.managedId&&!l.bundles.includes(t)||(l.bundleDetails=n,E(),xA(n),t.managedId||ht().catch(()=>{}))}function xg(e=l.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Fe():void 0,n=md.get(e);if(n&&n.signal===t)return n.job;let r=(l.bundles??[]).find(s=>s.integrity===e.integrity);if(!r)return Promise.resolve(null);let o=co(e.integrity,r).then(s=>(t?.throwIfAborted(),l.bundleDetails!==e?s:s.error&&e.managedId?(e.sourceError=s.error,E(),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)),l.bundleDetails=s,E(),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,Gx=new WeakMap;function $s(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??"",r=t?.[2]??e,o=r.startsWith("/"),s=[];for(let i of r.split("/"))if(!(!i||i==="."))if(i===".."&&s.length>0&&s.at(-1)!=="..")s.pop();else{if(i===".."&&o&&s.length===0)return null;s.push(i)}return n+(o?"/":"")+s.join("/")}function Kx(e){let t=new Map;for(let n of e.keys()){let r=$s(n);r!==null&&t.set(r,t.has(r)?null:n)}return t}function CA(e,t,n,r){let o=$s(n);if(o===null)return null;let s=typeof r=="string"?$s(`${r}/package.json`):null,i=o.slice(0,o.lastIndexOf("/")+1),a=Gx.get(e);for(a||(a=new Map,Gx.set(e,a));;){if(i.endsWith("node_modules/"))return null;let c=`${i}package.json`;if(t.has(c)){if(!a.has(c)){let p=e.get(t.get(c)),f=null;try{f=typeof p=="string"?JSON.parse(p.replace(/^\uFEFF/u,""))?.imports??null:null}catch{}a.set(c,f&&typeof f=="object"&&!Array.isArray(f)?f:null)}return{directory:i,imports:a.get(c)}}if(c===s||!i||i==="/"||i.endsWith("../")||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(i))return null;let u=i.slice(0,-1);i=u.slice(0,u.lastIndexOf("/")+1)}}function _A(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 Yx(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=>Yx(r,t,n+1)):[null]}function RA(e,t,n,r,o,s){if(typeof e!="string"||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let i=e.startsWith("./"),a=null;if(i){let f;try{f=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(f)||f.split("/").some(m=>[".","..","node_modules"].includes(m.toLowerCase())))return null;a=$s(t.directory+f)}else if(e.startsWith("../")||e.startsWith("/")||e.startsWith("#")||e.includes(":"))return null;let c=new Set([e]);if(i)for(let f of o?.keys()??[])(f.startsWith("./")||f.startsWith("../"))&&$s(s+f)===a&&c.add(f);let u=!1,p=null;for(let f of c){if(!o?.has(f))continue;let m=o.get(f);if(typeof m!="string"||!n.has(m)||u&&m!==p)return null;u=!0,p=m}return u?p:i?r.get(a)??null:null}function TA(e,t,n,r,o,s){let i=_A(e?.imports,t);if(!i)return null;let a=Yx(i.value,i.wildcard),c=null;for(let u of a){let p=RA(u,e,n,r,o,s);if(!p||c&&p!==c)return null;c=p}return c}function Sg(e,t=It(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,c]of s){let u=typeof c=="string"&&t.has(c)?c:null;i.set(a,i.has(a)&&i.get(a)!==u?null:u)}}else if(e?.kind==="sourcemap")for(let[r,o]of Aw(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=Kx(e),hd.set(e,s));let i=hd.get(r);i||(i=Kx(r),hd.set(r,i));let a=n?.get(t),c=t.slice(0,t.lastIndexOf("/")+1),u=n?CA(r,i,t,o?.get(t)):null;return p=>{if(typeof p!="string"||/\p{Cc}/u.test(p))return null;if(a?.has(p)){let h=a.get(p);return typeof h=="string"&&e.has(h)?h:null}if(p.startsWith("#"))return TA(u,p,e,s,a,c);if(!p.startsWith("./")&&!p.startsWith("../"))return null;let f=p.slice(p.lastIndexOf("/")+1),m=f.lastIndexOf(".");return m<=0||m===f.length-1?null:s.get($s(c+p))??null}}var qx=new WeakMap;function Cg(e,t){let n=It(e),r=qx.get(n);return r||(r={imports:Sg(e,n),packageDirs:Mt(e)},qx.set(n,r)),bd(n,t,r.imports,Pe(e),r.packageDirs)}var Jx=/[\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(Jx.source,"gu"),IA=new Map(`
|
|
15
|
-
0000 NUL NULL
|
|
16
|
-
0001 SOH START OF HEADING
|
|
17
|
-
0002 STX START OF TEXT
|
|
18
|
-
0003 ETX END OF TEXT
|
|
19
|
-
0004 EOT END OF TRANSMISSION
|
|
20
|
-
0005 ENQ ENQUIRY
|
|
21
|
-
0006 ACK ACKNOWLEDGE
|
|
22
|
-
0007 BEL BELL
|
|
23
|
-
0008 BS BACKSPACE
|
|
24
|
-
000B VT LINE TABULATION
|
|
25
|
-
000C FF FORM FEED
|
|
26
|
-
000D CR CARRIAGE RETURN
|
|
27
|
-
000E SO SHIFT OUT
|
|
28
|
-
000F SI SHIFT IN
|
|
29
|
-
0010 DLE DATA LINK ESCAPE
|
|
30
|
-
0011 DC1 DEVICE CONTROL ONE
|
|
31
|
-
0012 DC2 DEVICE CONTROL TWO
|
|
32
|
-
0013 DC3 DEVICE CONTROL THREE
|
|
33
|
-
0014 DC4 DEVICE CONTROL FOUR
|
|
34
|
-
0015 NAK NEGATIVE ACKNOWLEDGE
|
|
35
|
-
0016 SYN SYNCHRONOUS IDLE
|
|
36
|
-
0017 ETB END OF TRANSMISSION BLOCK
|
|
37
|
-
0018 CAN CANCEL
|
|
38
|
-
0019 EM END OF MEDIUM
|
|
39
|
-
001A SUB SUBSTITUTE
|
|
40
|
-
001B ESC ESCAPE
|
|
41
|
-
001C FS FILE SEPARATOR
|
|
42
|
-
001D GS GROUP SEPARATOR
|
|
43
|
-
001E RS RECORD SEPARATOR
|
|
44
|
-
001F US UNIT SEPARATOR
|
|
45
|
-
007F DEL DELETE
|
|
46
|
-
0080 PAD PADDING CHARACTER
|
|
47
|
-
0081 HOP HIGH OCTET PRESET
|
|
48
|
-
0082 BPH BREAK PERMITTED HERE
|
|
49
|
-
0083 NBH NO BREAK HERE
|
|
50
|
-
0084 IND INDEX
|
|
51
|
-
0085 NEL NEXT LINE
|
|
52
|
-
0086 SSA START OF SELECTED AREA
|
|
53
|
-
0087 ESA END OF SELECTED AREA
|
|
54
|
-
0088 HTS CHARACTER TABULATION SET
|
|
55
|
-
0089 HTJ CHARACTER TABULATION WITH JUSTIFICATION
|
|
56
|
-
008A VTS LINE TABULATION SET
|
|
57
|
-
008B PLD PARTIAL LINE FORWARD
|
|
58
|
-
008C PLU PARTIAL LINE BACKWARD
|
|
59
|
-
008D RI REVERSE LINE FEED
|
|
60
|
-
008E SS2 SINGLE SHIFT TWO
|
|
61
|
-
008F SS3 SINGLE SHIFT THREE
|
|
62
|
-
0090 DCS DEVICE CONTROL STRING
|
|
63
|
-
0091 PU1 PRIVATE USE ONE
|
|
64
|
-
0092 PU2 PRIVATE USE TWO
|
|
65
|
-
0093 STS SET TRANSMIT STATE
|
|
66
|
-
0094 CCH CANCEL CHARACTER
|
|
67
|
-
0095 MW MESSAGE WAITING
|
|
68
|
-
0096 SPA START OF GUARDED AREA
|
|
69
|
-
0097 EPA END OF GUARDED AREA
|
|
70
|
-
0098 SOS START OF STRING
|
|
71
|
-
0099 SGC SINGLE GRAPHIC CHARACTER INTRODUCER
|
|
72
|
-
009A SCI SINGLE CHARACTER INTRODUCER
|
|
73
|
-
009B CSI CONTROL SEQUENCE INTRODUCER
|
|
74
|
-
009C ST STRING TERMINATOR
|
|
75
|
-
009D OSC OPERATING SYSTEM COMMAND
|
|
76
|
-
009E PM PRIVACY MESSAGE
|
|
77
|
-
009F APC APPLICATION PROGRAM COMMAND
|
|
78
|
-
00A0 NBSP NO-BREAK SPACE
|
|
79
|
-
00AD SHY SOFT HYPHEN
|
|
80
|
-
034F CGJ COMBINING GRAPHEME JOINER
|
|
81
|
-
061C ALM ARABIC LETTER MARK
|
|
82
|
-
115F HCF HANGUL CHOSEONG FILLER
|
|
83
|
-
1160 HJF HANGUL JUNGSEONG FILLER
|
|
84
|
-
1680 OSM OGHAM SPACE MARK
|
|
85
|
-
17B4 KIVAQ KHMER VOWEL INHERENT AQ
|
|
86
|
-
17B5 KIVAA KHMER VOWEL INHERENT AA
|
|
87
|
-
180E MVS MONGOLIAN VOWEL SEPARATOR
|
|
88
|
-
2000 NQSP EN QUAD
|
|
89
|
-
2001 MQSP EM QUAD
|
|
90
|
-
2002 ENSP EN SPACE
|
|
91
|
-
2003 EMSP EM SPACE
|
|
92
|
-
2004 3/MSP THREE-PER-EM SPACE
|
|
93
|
-
2005 4/MSP FOUR-PER-EM SPACE
|
|
94
|
-
2006 6/MSP SIX-PER-EM SPACE
|
|
95
|
-
2007 FSP FIGURE SPACE
|
|
96
|
-
2008 PSP PUNCTUATION SPACE
|
|
97
|
-
2009 THSP THIN SPACE
|
|
98
|
-
200A HSP HAIR SPACE
|
|
99
|
-
200B ZWSP ZERO WIDTH SPACE
|
|
100
|
-
200C ZWNJ ZERO WIDTH NON-JOINER
|
|
101
|
-
200D ZWJ ZERO WIDTH JOINER
|
|
102
|
-
200E LRM LEFT-TO-RIGHT MARK
|
|
103
|
-
200F RLM RIGHT-TO-LEFT MARK
|
|
104
|
-
2028 LS LINE SEPARATOR
|
|
105
|
-
2029 PS PARAGRAPH SEPARATOR
|
|
106
|
-
202A LRE LEFT-TO-RIGHT EMBEDDING
|
|
107
|
-
202B RLE RIGHT-TO-LEFT EMBEDDING
|
|
108
|
-
202C PDF POP DIRECTIONAL FORMATTING
|
|
109
|
-
202D LRO LEFT-TO-RIGHT OVERRIDE
|
|
110
|
-
202E RLO RIGHT-TO-LEFT OVERRIDE
|
|
111
|
-
202F NNBSP NARROW NO-BREAK SPACE
|
|
112
|
-
205F MMSP MEDIUM MATHEMATICAL SPACE
|
|
113
|
-
2060 WJ WORD JOINER
|
|
114
|
-
2061 FA FUNCTION APPLICATION
|
|
115
|
-
2062 IT INVISIBLE TIMES
|
|
116
|
-
2063 IS INVISIBLE SEPARATOR
|
|
117
|
-
2064 IP INVISIBLE PLUS
|
|
118
|
-
2066 LRI LEFT-TO-RIGHT ISOLATE
|
|
119
|
-
2067 RLI RIGHT-TO-LEFT ISOLATE
|
|
120
|
-
2068 FSI FIRST STRONG ISOLATE
|
|
121
|
-
2069 PDI POP DIRECTIONAL ISOLATE
|
|
122
|
-
2800 BLANK BRAILLE PATTERN BLANK
|
|
123
|
-
3000 IDSP IDEOGRAPHIC SPACE
|
|
124
|
-
3164 HF HANGUL FILLER
|
|
125
|
-
FEFF BOM ZERO WIDTH NO-BREAK SPACE
|
|
126
|
-
FFA0 HWHF HALFWIDTH HANGUL FILLER
|
|
127
|
-
E0001 LANG LANGUAGE TAG
|
|
128
|
-
E0020 SP TAG SPACE
|
|
129
|
-
E007F CANCEL CANCEL TAG
|
|
130
|
-
`.trim().split(`
|
|
131
|
-
`).map(e=>{let[,t,n,r]=/^(\S+) (\S+) (.+)$/u.exec(e);return[Number.parseInt(t,16),{label:n,name:r}]})),ca=e=>`U+${e.toString(16).toUpperCase().padStart(4,"0")}`;function Zx(e){let t=IA.get(e);if(t)return{label:t.label,title:`${ca(e)} ${t.name}`};if(e>917536&&e<917631){let r=String.fromCodePoint(e-917504);return{label:r,title:`${ca(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:`${ca(e)} VARIATION SELECTOR-${n}`}:{label:ca(e),title:`${ca(e)} ${FA(e)}`}}var MA=/\p{Cf}/u,AA=/\p{Default_Ignorable_Code_Point}/u,EA=/\p{Cn}/u;function FA(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 MA.test(t)?"format character":AA.test(t)&&!EA.test(t)?"invisible character":"unassigned code point"}function Qx(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=Xw(e,r.index,o,t);s===-1?n.push([r.index,o]):yd.lastIndex=s}return n}function ks(e){return Jx.test(e)}var LA=e=>{let{label:t,title:n}=Zx(e);return d`<span class="code-control" data-tooltip="${n}">${t}</span>`};function e0(e,t=!1){if(!ks(e))return[e];let n=[],r=0;for(let[o,s]of Qx(e,t))o>r&&n.push(e.slice(r,o)),n.push(LA(s)),r=o+(s>65535?2:1);return r<e.length&&n.push(e.slice(r)),n}var Xx=e=>e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""");function wd(e,t=!1){if(!ks(e))return e;let n="",r=[];for(let a=0;a<e.length;){let c=e.indexOf("<",a),u=c===-1?e.length:c;if(u>a&&(r.push({text:n.length,markup:a}),n+=e.slice(a,u)),c===-1)break;let p=e.indexOf(">",c);a=p===-1?e.length:p+1}let o="",s=0,i=0;for(let[a,c]of Qx(n,t)){for(;r[i+1]?.text<=a;)i++;let u=r[i].markup+a-r[i].text,{label:p,title:f}=Zx(c);o+=`${e.slice(s,u)}<span class="code-control" data-tooltip="${Xx(f)}">${Xx(p)}</span>`,s=u+(c>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 NA=[];function _g(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!vd(e[0],n))return{stack:NA,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function UW({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 VW(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}function t0(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 da=new Map,Tg=new Map,OA=new Set,n0=new WeakMap,Rg=new Set;function r0(e,t,n,r,o,s=Tg,i=OA){let a=`${e}\0${t}`;if(s.has(a)||i.has(a))return;let c=ui(t,r,n);if(!c){s.set(a,null);return}i.add(a),(async()=>{let u=await ws(n,c,o);s.set(a,typeof u=="string"?wd(u):null),i.delete(a),l.focusCodeTick++,queueMicrotask(E)})()}async function BA(e){let t=da.get(e);if(t&&(t.loading||t.sources))return;let n=(l.bundles??[]).find(r=>r.integrity===e);if(n){da.set(e,{sources:null,loading:!0,error:null});try{let r=await co(e,n),o=It(r);da.set(e,{sources:o,packageFiles:Pe(r),packageDirs:Mt(r),imports:Sg(r,o),formats:r.kind==="stasis"?r.bundle?.formats:null,loading:!1,error:r.error??null})}catch(r){da.set(e,{sources:null,loading:!1,error:r.message})}l.focusCodeTick++,queueMicrotask(E),queueMicrotask(o0)}}function o0(){let e=he.querySelectorAll(".focus-code-line-active");e.length!==0&&t0(e[0].closest(".focus-code-body"),e)}function ua(e){if(C()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;l.focusCodeTick;let n=Oc(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=pa(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:Qr(e.fileHash).find(({integrity:n})=>t.includes(n))??null}function pa(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return vf(e.integrity,t);let n=Oc(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 s0(e,t,n){if(!C())return null;let r=Oc(e);if(!r||r.data===void 0&&!r.error)return n&&!Rg.has(e)&&(Rg.add(e),ik(e).catch(()=>{}).finally(()=>{Rg.delete(e),l.focusCodeTick++,queueMicrotask(E),queueMicrotask(o0)})),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=n0.get(o);return i||(i={cache:new Map,pending:new Set},n0.set(o,i)),r0(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 uo(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return s0(r,t,n);if(C())return null;let o=da.get(e);if(!o)return n?(BA(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;r0(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:Tg.has(i)?Tg.get(i):void 0,loading:!1}}function i0(e){let t=ua(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:wi(t.reportId?t.line:e.line)}:null}function PA(e){return e?i0(He(e)):null}function $d(e){let t=PA(e);return t?{base:t,..._g(l.focusCodeStack,l.focusCodeAt,t)}:null}function a0(e){let t=i0(e);return t?_g(l.focusCodeStack,l.focusCodeAt,t).pos:null}function i6(e,t,n,r){let o=$d(e);if(!o||o.pos.integrity!==t||o.pos.file!==n)return null;let s=He(e),i=uo(t,r,{kick:!1,reportId:s?._managedReportId});return i&&!i.loading?{integrity:t,file:r,range:null}:null}function l0(e){let t=e&&He(e),n=ua(t);if(n?.reportId&&!n.integrity)return s0(n.reportId,n.file,!0);let r=$d(e);if(!r)return null;let{pos:o}=r,s=uo(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=U(e);if(!Dr(r))return null;if(C()){let i=t?null:n??(l.currentView==="links"?e._managedReportId:l.currentManagedReport),a=je(Ge({view:"findings",teamId:l.currentManagedTeam,reportId:i,finding:{id:r}},l.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||l.currentFile||"",s=l.currentWorkspace||xs(o);return lp({id:r,report:l.currentWorkspace?null:kl("report",o),workspace:kl("workspace",s??"")})}function xs(e,t=l.currentReportWorkspace||l.currentWorkspace){let n=Hi(e);return n.some(r=>r.id===t)?t:n.length===1?n[0].id:null}function m6(e){for(let t of[lr(),Ex()])for(let n of t)for(let r of n)if(U(r)===e)return{group:n,finding:r};return null}function DA(e,t){l.currentView="findings",l.viewMode==="graph"&&(l.viewMode="table",Et());let n=Ee(e).commonTriage;if(l.viewMode==="kanban"){let i=n??"untriaged";l.kanbanExpandedColumn!==null&&l.kanbanExpandedColumn!==i&&(l.kanbanExpandedColumn=null)}else n!==l.shownTriage&&(l.shownTriage=n);l.upstreamOnly&&!e.every(i=>i.isUpstream)&&(l.upstreamOnly=!1),bi(l.showRevalidation,l.upstreamOnly);let r=e.find(i=>U(i)===t);if(jr(r)||td(lo())&&!fx(e)||!ir(e).some(i=>U(i)===t))if(l.currentWorkspace){r?.isUpstream?l.upstreamOnly=!0:l.showRevalidation=!1,bi(l.showRevalidation,l.upstreamOnly);let i=lr().find(a=>a.some(c=>U(c)===t));if(i)return DA(i,t)}else l.revalidationDetailed=!0;if(nd([e]).length===0){let i=l.sortBy;ed(),l.sortBy=i}let s=se(e);return e.length>1&&l.activeTabByGroup.set(s,t),l.viewMode==="table"?l.tableSelectedGid=s:l.viewMode==="focus"?l.focusGid=s:l.viewMode==="kanban"&&(l.kanbanPopoverGid=s),s}function c0(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function d0(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 fa=new Map;function $6(e,t){fa.has(e)||fa.set(e,new Set);let n=fa.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&fa.delete(e)}}function Ig(e,t){l.managedComments.set(e,t);for(let n of fa.get(e)??[])n()}function u0(e){return C()?l.managedComments?.get(e?.id)??[]:[]}function p0(){return C()&&l.managedSession!=null&&Un(l.managedSession.role,"triage")}function zA(e){return p0()&&c0(e,l.managedSession)}function Mg(e){let t=l.reports,n=l.managedSession?.id;return()=>C()&&n!=null&&l.managedSession?.id===n&&l.reports===t&&l.managedReports.some(r=>r.id===e)}async function xd(e,{signal:t,readAnnotations:n}={}){let r=Mg(e);if(!r())return!1;let o=new Set(l.reports.filter(c=>c._managedReportId===e).flatMap(c=>c.groups.flatMap(u=>u.map(p=>p.id)))),s=new Map([...o].map(c=>[c,l.managedComments.get(c)])),i=n?(await n(e))?.comments:await Sk(e,l.currentManagedTeam,{signal:t});if(!r()||i==null||t?.aborted)return!1;let a=new Map([...o].map(c=>[c,[]]));for(let c of i)a.has(c.findingId)&&a.get(c.findingId).push(c);for(let[c,u]of a)l.managedComments.get(c)===s.get(c)&&Ig(c,u);return!0}async function k6(e,t,n=null){let r=e?._managedReportId,o=Mg(r);if(!o()||!p0())return{status:403};if(n&&n.authorId!==l.managedSession.id)return{status:403};let s=await Ck(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},l.managedSession.csrfToken);if(!o())return{status:0};if(s.comment){let a=(l.managedComments.get(e.id)??[]).filter(c=>c.id!==s.comment.id);a.push(s.comment),a.sort(d0),Ig(e.id,a)}return s}async function x6(e,t){let n=e?._managedReportId,r=Mg(n);if(!r()||!zA(t))return 403;let o=await _k(n,t.id,t.version,l.managedSession.csrfToken);if(!r())return 0;if(o===204){let s=l.managedComments.get(e.id)??[];Ig(e.id,s.filter(i=>i.id!==t.id))}return o}function Sd(e){return Tv(e,{managed:C()}).map(t=>typeof t=="string"?t:t.self?d`<a class="comment-self-ref" href="${t.url}">${t.label}</a>`:d`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Cd=d`<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>`,Ss=d`<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>`,Cs=d`<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>`,f0=d`<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>`,m0=d`<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>`,M6=d`<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>`,A6=d`<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 tt(e){return e==="informational"?"info":e.replaceAll("_"," ")}function Ag(e,{variant:t="full"}={}){let n=l.severityMode,r=ce(e,n),o=d`<span class="${`badge ${r}`}">${tt(r)}</span>`,s=Lo(e),i=t==="tab"?null:tw(e);if(!s&&!i)return o;let a=i?`Corrected severity varies across reports \u2014 ${Object.entries(i).map(([x,$])=>`${x||"(this report)"}: ${tt($.severity)}`).join("; ")}`:null,c=i?d`<span class="badge-varies" data-tooltip="${a}" aria-label="${a}">varies</span>`:g;if(!s)return d`<span class="${`badge-pair badge-pair-${t}`}">${o}${c}</span>`;let u=ce(e,"original"),p=oi(e),f=e.correctedSeverityReason,m=(Se[p]??0)>(Se[u]??0),h=m?"up":"down",b=m?"\u25B2":"\u25BC",y=n!=="original",w=(y?`Corrected ${h} from ${tt(u)}`:`Original severity \u2014 corrected ${h} to ${tt(p)}`)+(f?` \u2014 ${f}`:""),v=`Severity ${tt(r)}; ${y?`corrected ${h} from ${tt(u)}`:`original, corrected to ${tt(p)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return d`<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 k=y?u:p;return d`<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?d`<span class="badge-pre" aria-hidden="true">was</span>`:g}<span class="${`badge-orig ${k}${y?" struck":""}`}">${tt(k)}</span></span>${c}</span>`}var g0=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;function ga(e){g0.lastIndex=0;let t=[],n=0,r;for(;(r=g0.exec(e))!==null;){r.index>n&&t.push(e.slice(n,r.index));let o=r[0].codePointAt(0);if(o===91){let s=Sv(r[0]);t.push(s?d`<a href="${s.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${s.url}">${s.label}</a>`:r[0])}else o===42?t.push(d`<strong>${r[0].slice(2,-2)}</strong>`):o===96?t.push(d`<span class="inline-code">${r[0].slice(1,-1)}</span>`):t.push(d`<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 WA({lang:e,code:t}){l.codeBlockTick;let n=hg(t,e);return d`<div class="code-block" data-lang="${e||g}">${e?d`<div class="code-block-lang">${e}</div>`:g}<pre><code>${n?z(n):t}</code></pre></div>`}function HA(e,{wrap:t=!1}={}){let n=e.split(/\n{2,}/u).filter(r=>r.trim());return n.length<2?t?d`<div class="para">${ga(e)}</div>`:ga(e):n.map(r=>d`<div class="para">${ga(r)}</div>`)}function UA({ordered:e,start:t,items:n}){let r=n.map(o=>d`<li>${nt(o)}</li>`);return e?d`<ol class="md-list" start="${t>1?t:g}">${r}</ol>`:d`<ul class="md-list">${r}</ul>`}function nt(e,{paragraphs:t=!0}={}){if(!e)return e;let n=t?wv(e):[e],r=n.length>1,o=i=>t?HA(i,{wrap:r}):ga(i),s=i=>{let a=yv(i);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(c=>typeof c=="string"?o(c):WA(c))};return n.length===1&&typeof n[0]=="string"?s(n[0]):n.map(i=>typeof i=="string"?s(i):UA(i))}function VA(e){let t=new Set;for(let n of e)t.add(Me(n));return[...t]}function jA(e){let t=Me(e);return fs[t]??t}function GA(e,t){l.linksTick,l.findingIndexTick;let n=U(e),r=Dr(n)?bt(n).filter(o=>!t.has(o)):[];return r.length===0?g:d`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${r.map(o=>{let s=Vl(o),i=Zn(o),a=l.currentView==="links"&&l.currentLinks?.managedId?Lt([o])[0]:null,c=i.length===0?"":` \u2014 in ${i.map(u=>`${re(u)} (${jA(u)})`).join(", ")}`;return d`<a class="duplicate-ref" href="${C()?kd({id:o},{teamOnly:!0}):`#${zr({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}${c}`}">${VA(i).map(u=>z(be[u]??be.default))}<span class="duplicate-ref-id">${Ul(o)??s}</span></a>`})}</div>`}function KA(e){let t=fv(e);return t?d`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:g}function qA(e){let t=Ip()?Nr(e.revalidateVerdict,e):"";return t?d`<div class="revalidate-verdict">${nt(qn(t))}</div>`:g}function ma(e,t,n="section",{collapsible:r=!1}={}){let o=t?d`<div class="section-body">${nt(qn(t))}</div>`:g;return!r||!t?d`<div class="${n}"><div class="section-label">${e}</div>${o}</div>`:d`<details class="${n}"><summary class="section-label">${e}</summary>${o}</details>`}function YA(e,t,n){let r=e?.integrity&&t?.file?pa(e,t.file):null;return r?d`<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>`:d`<span class="evidence-ref">${n}</span>`}function XA(e,t){let n=Array.isArray(e.evidence)?e.evidence:[];if(n.length===0)return g;let r=Rn(e),o=ua(e),s=t==="focus"&&o!==null,i=s?a0(e):null;return d`<details class="evidence"><summary class="section-label">Evidence<span class="evidence-count">(${n.length})</span></summary><ol class="evidence-list">${n.map((a,c)=>{let u=cl(a),p=kv(a,e,r,c),f=sw(a),m=y0(e,`ev${c}`,o,a?.file,a?.line),h=Eg(p),b=s&&vd(i,{integrity:o.integrity,file:pa(o,a?.file),range:wi(a?.line)});return d`<li class="${G({current:b})}">${s?YA(o,a,u):p?d`<a class="evidence-ref" href="${p}" target="_blank" rel="noopener">${u}</a>`:d`<span class="evidence-ref">${u}</span>`} ${m?.mark??g} ${h} ${m?.tip??g} ${f?d`<div class="evidence-note">${nt(qn(f))}</div>`:g} ${m?.body??g}</li>`})}</ol></details>`}function b0(e,t){let n=cl(e);return t?d`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function JA(e,t){if(!t)return g;let n=t.slice(0,7),r=_v(e,t);return r?d`<a href="${r}" target="_blank" rel="noopener" data-tooltip="${t}">${n}</a>`:d`<span data-tooltip="${t}">${n}</span>`}var Rd=d`<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>`,Rs=d`<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>`,ZA=d`<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>`,QA=d`<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>`,eE=z(Vt);function Eg(e){let t=bv(e);return t?d`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${eE}</a>`:g}function tE(e,t,n,r){return`${U(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:""}`}var _s={key:null,host:null};function _d(e,t){if(_s.key===e)return;let n=_s.host,r=e===null?null:t?.getRootNode?.()?.host??null;_s={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function h0(e,t,n){l.codeBlockTick;let{text:r,lines:o,startLine:s}=$v(e,t);if(o.length===0)return g;let i=n.lastIndexOf("."),a=hg(r,i<0?"":n.slice(i+1)),c=s+o.length-1;return d`<div class="code-preview" style="${ae({"--lineno-width":`${String(c).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${o.map((u,p)=>{let f=s+p,m=!!t&&f>=t.start&&f<=t.end;return d`<div class="${G({"code-preview-lineno":!0,cited:m})}">${f}</div>`})}</aside><pre class="code-preview-source"><code>${a?z(a):r}</code></pre></div>`}function y0(e,t,n,r,o){if(l.bundleHashTick,!n||!r)return null;let s=pa(n,r);if(!s)return null;let i=wi(o),a=tE(e,t,r,i),c=l.codePreviews.has(a);l.focusCodeTick;let u=d`<button type="button" class="${G({"code-preview-btn":!0,open:c})}" data-code-preview="${a}" aria-expanded="${String(c)}" aria-label="${c?`Hide the source at ${r}`:`Show the source at ${r}`}" @mouseenter="${m=>{_d(a,m.currentTarget),uo(n.integrity,s,{reportId:n.reportId})}}" @mouseleave="${m=>{_s.key===a&&_d(null,m.currentTarget)}}" @focus="${m=>{_d(a,m.currentTarget),uo(n.integrity,s,{reportId:n.reportId})}}" @blur="${m=>{_s.key===a&&_d(null,m.currentTarget)}}">${QA}</button>`;if(c){let m=uo(n.integrity,s,{reportId:n.reportId}),h=!m||m.loading?d`<div class="code-preview code-preview-pending">${m?"Loading source\u2026":"Source unavailable"}</div>`:h0(m.content,i,s);return{mark:u,tip:g,body:h}}if(_s.key!==a)return{mark:u,tip:g,body:g};let p=uo(n.integrity,s,{kick:!1,reportId:n.reportId}),f=p&&!p.loading?d`<div class="code-preview-tip" role="tooltip">${h0(p.content,i,s)}</div>`:g;return{mark:u,tip:f,body:g}}var nE=d`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${Jy}"/></svg>`,rE=d`<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=d`<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 oE(e,t=!1){let n=ge(e)?.flagged===!0,r=n?"Remove flag":"Flag this finding";return d`<button type="button" class="${G({"mark-flag":!0,flagged:n})}" data-flag-toggle="${U(e)}" ?disabled="${!vt(e)}" aria-label="${r}" aria-pressed="${String(n)}">${Td}${t?d`<span class="mark-btn-label">${n?"Flagged":"Flag"}</span>`:g}</button>`}function sE(e){let t=Rt(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function iE(e){let t=Hl(e,Rn(e)),n=cl(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let o=xv(e);return o&&r.push(o),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
|
|
132
|
-
|
|
133
|
-
`)}function aE(e){if(!l.currentWorkspace)return g;let t=e._reportName;if(!t)return g;if(C()&&!e._managedReportId)return g;let n=Be[Me(t)]??Be.default,r=d`${z(n)}<span class="report-chip-label report-button-label">${re(t)}</span>`;if(C()){let o=kd(e,{reportId:e._managedReportId});if(o)return d`<a class="report-chip report-button comment-self-ref" href="${hn(o)}">${r}</a>`}return d`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${U(e)}" data-managed-report="${C()?e._managedReportId:g}">${r}</button>`}function w0(e,t,n,r,o=null){let s=o==="table"?g:aE(r),i=ge(r),a=!sr(r),c=!vt(r),u=i?.color??null,p=i?.comment??"",f=i?.fix??"",m=C()?"View comments":p?`Edit comment: ${p}`:"Add comment",h=f?`Edit fix link: ${f}`:"Add fix link (PR URL, etc.)",b=o==="focus"&&s===g,y=C()?"Comments":p?"Edit comment":"Comment",w=f?"Edit fix link":"Fix link",v=d`<button type="button" ?disabled="${a}" class="${G({"mark-comment":!0,"has-comment":p})}" data-tooltip="${p&&!C()?m:g}" aria-label="${m}">${Rd}${b?d`<span class="mark-btn-label">${y}</span>`:g}</button>`,k=d`<button type="button" ?disabled="${c}" class="${G({"mark-fix":!0,"has-fix":f})}" data-tooltip="${f?h:g}" aria-label="${h}">${Rs}${b?d`<span class="mark-btn-label">${w}</span>`:g}</button>`,x=oE(r,b),$=d`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${Cd}${b?d`<span class="mark-btn-label">Copy</span>`:g}</button>`,S=kd(r)?d`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${ZA}${b?d`<span class="mark-btn-label">Link</span>`:g}</button>`:g,_=C()?Oe({repo:{github:r.repo?.github||r._repoFallback}}):Ax(r),R=Rv(_,{title:sE(r),body:iE(r),labels:Dx(r.isSecurity===!0,l.githubNewIssueLabels)}),F=C()&&l.managedSession&&!l.managedSession.publicShare&&l.currentManagedTeam,I=d`${rE}${b?d`<span class="mark-btn-label">Issue</span>`:g}`,A=Fc(r)?g:R?F?d`<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">${I}</button>`:d`<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">${I}</a>`:g,L=d`<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">${nE}${b?d`<span class="mark-btn-label">Claude</span>`:g}</button>`,V=d`<color-marker .selected="${u}" .disabled="${c}"></color-marker>`,te=ys(e)!==e,ne=e.linkedTabs?"change triage state for linked findings":te?"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 d`<div class="finding-actions">${s}<div class="finding-action-controls"><span class="mark-action-group">${v}${k}${x}</span><span class="mark-action-group">${$}${S}${A}${L}</span>${V}${cE(e,ne,o,n,r)}</div></div>`}function lE(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,c=o.right-s;c<4&&(c=4),c+s>window.innerWidth-4&&(c=window.innerWidth-s-4);let u=o.bottom+a;u+i>window.innerHeight-4&&o.top>i+a&&(u=o.top-i-a),t.style.top=`${u}px`,t.style.left=`${c}px`}function cE(e,t,n,r,o){let s=se(e),i=!vt(o)||aa(e,r).length===0,a=i?null:lg(e,r,o),c={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},u={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Delete",ignored:"Ignore"},p=!!l.shownTriage,f=p?c[l.shownTriage]:null,m=["inprogress","fixed","invalid","deleted","ignored"],b=p&&!(n==="focus")?[{key:"restore",label:"Restore"},...m.filter(v=>v!==l.shownTriage).map(v=>({key:v,label:u[v]}))]:m.map(v=>({key:v,label:u[v]})),y=["mark-triage-menu"];p&&y.push("with-label",`triage-state-${l.shownTriage}`);let w=`triage-menu-${s.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return d`<div class="triage-menu-wrap"><button type="button" class="${y.join(" ")}" popovertarget="${w}" popovertargetaction="toggle" aria-label="${t}" ?disabled="${i}">${f?d`<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="${lE}">${b.map(v=>d`<button type="button" class="${G({"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 dE(e,t){let n=!!e?.comment,r=!!(e?.fix||Xt(t)),o=e?.flagged===!0;return!n&&!r&&!o?g:d`<span class="tab-marks">${n?d`<span class="has-comment" role="img" aria-label="Has a comment">${Rd}</span>`:g}${r?d`<span class="has-fix" role="img" aria-label="Has a fix link">${Rs}</span>`:g}${o?d`<span class="flagged" role="img" aria-label="Flagged">${Td}</span>`:g}</span>`}function v0(e,t,n){let{app:r,source:o}=Ix(e),s=i=>uE(i,U(i)===t,n);return d`<div class="tabs">${r.map(s)} ${r.length>0&&o.length>0?d`<span class="tab-level-separator" aria-hidden="true">•</span>`:g} ${o.map(s)}</div>`}function uE(e,t,n){let r=U(e),o=ge(e),s=o?.color,i=ia(e,o),a=["tab",`tab-severity-${ce(e,l.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 c=Pc(e),u=c?Be[c]:null,p=!u&&e.confidence!=null;u?a.push("tab-with-analyzer"):p&&a.push("tab-with-confidence");let f=u?d`<span class="tab-analyzer" role="img" aria-label="${fs[c]}">${z(u)}</span>`:p?d`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:g;return d`<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">${Ag(e,{variant:"tab"})}</span><span class="tab-indicators">${dE(o,e)}</span></span>${f}</button>`}function pE(e){if(l.viewMode==="table"||l.viewMode==="focus"){let t=e.confidence*10;return d`<div class="${`conf-ring ${ce(e,l.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 d`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}var fE=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function mE(e){if(Qn(e))return g;let t=e?.name;if(typeof t!="string"||!fE.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 d`<span class="line-num"><a class="npm-link" href="${o}" target="_blank" rel="noopener noreferrer">npm: ${s}</a></span>`}function gE(e,t,n,r,o,s){let i=U(e),a=ge(e),c=a?.comment??"",u=a?.fix??"",p=Xt(e),f=Fc(e),m=Hl(e,Rn(e)),h=b0(e,m),b=si(e),y=ua(e),w=y0(e,"loc",y,e.file,e.line),v=Eg(m),k=d`<span class="line-num">${b?d`${h}, ${b}`:h}${w?.mark??g}${v}</span>`,x=Gr(e),$=String(e.discoveredIn??"").trim(),S=$===String(e.file??"").trim()?"":$,_=o==="focus"?mE(e.package?.npm):g,R=g;if(o!=="focus"&&C()&&w)R=d`<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"&&!C()&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){l.bundleHashTick;let ne=new Set(e._bundleHashes),xe=Qr(e.fileHash).find(({integrity:Ht})=>ne.has(Ht));xe&&(R=d`<button type="button" class="finding-code-btn" data-finding-code-bundle="${xe.integrity}" data-finding-code-file="${xe.file}" data-finding-code-line="${e.line??""}" data-tooltip="${`Open ${xe.file} in bundle source viewer`}">Code</button>`)}let{title:F,body:I}=rw(e),A=ow(I),L=A.findIndex(ne=>ne.label!==null),V=L===-1?A:A.slice(0,L),te=L===-1?[]:A.slice(L);return d`<div class="${G({"tab-body":!0,active:t})}" data-tid="${i}">${r>1?d`<div class="print-case-label">${n+1} of ${r}</div>`:g}<div class="finding-left">${a?.color||a?.flagged===!0?d`<div class="${a?.color?`finding-top-marks color-${a.color}`:"finding-top-marks"}">${a?.color?d`<span class="finding-color-mark" role="img" aria-label="${`Color label: ${a.color}`}"></span>`:g} ${a?.flagged===!0?d`<span class="finding-bookmark-mark" role="img" aria-label="Bookmarked"></span>`:g}</div>`:g} ${Ag(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?g:pE(e)} ${KA(e)} ${R}</div><div class="finding-body"><div class="line-row">${k} ${w?.tip??g} ${_} ${S?d`<span class="line-num discovered-in">(found analyzing ${S})</span>`:g} ${x?d`<span class="run-meta">${x}</span>`:g}</div>${w?.body??g} ${F?d`<div class="desc-title">${ga(F)}</div>`:g} ${V.map(ne=>d`<div class="desc">${nt(qn(ne.body))}</div>`)} ${XA(e,o)} ${te.map(ne=>ne.label===null?d`<div class="desc">${nt(qn(ne.body))}</div>`:ma(ne.label,ne.body))} ${e.impact?ma("Impact",Nr(e.impact,e)):g} ${e.reproduction?ma("Reproduction",Nr(e.reproduction,e),"section",{collapsible:!0}):g} ${e.recommendation?ma("Recommendation",Nr(e.recommendation,e),"recommendation",{collapsible:!0}):g} ${e.confidenceReason?d`<div class="conf-reason">${nt(Nr(e.confidenceReason,e))}</div>`:g} ${qA(e)} ${e.revalidateRecommendation&&Ip()?ma("Revalidation recommendation",Nr(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):g} ${Lo(e)&&e.correctedSeverityReason?d`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${nt(e.correctedSeverityReason)}</div>`:g} ${GA(e,s)} ${C()?u0(e).map(ne=>d`<div class="comment-block">${sv(ne,Sd(ne.body))}</div>`):c?d`<div class="comment-block"><span class="comment-label">Comment:</span> ${Sd(c)}</div>`:g} ${f?d`<div class="fix-block"><span class="fix-label">Issue:</span><managed-fix-link .url="${f.url}"></managed-fix-link></div>`:g} ${u?d`<div class="fix-block"><span class="fix-label">Fix:</span> ${No(u)?d`<managed-fix-link .url="${u}"></managed-fix-link>`:u}</div>`:g} ${p&&p!==u?d`<div class="fix-block"><span class="fix-label">Fix from issue:</span><managed-fix-link .url="${p}"></managed-fix-link></div>`:g}</div></div>`}function eH(e){let t=["finding",...hE(e)];return ir(e).length>1&&t.push("multi-case"),t}function tH(e,t={}){let{context:n=null}=t,r=Ee(e),o=ir(e),s=new Set(o.map(U)),i=He(e),a=U(i),c=i.commitHash?d`<div class="commit-ref">introduced in ${JA(i.repo?.github,i.commitHash)}</div>`:g,u=l.currentWorkspace&&c!==g;return d`${o.map((p,f)=>gE(p,U(p)===a,f,o.length,n,s))} ${u?d`<div class="marks-commit-row">${c}</div>`:g}<div class="marks"><div class="marks-left">${u?g:c} ${o.length>1?v0(o,a,r):g}</div>${w0(e,o,r,i,n)}</div>`}function hE(e){let t=Ee(e),n=e.some(o=>o.critical||ce(o,l.severityMode)==="critical"),r=[];return n&&r.push("is-critical"),t.hasConflict?r.push("has-conflict"):t.commonColor&&r.push(`mark-${t.commonColor}`),l.shownTriage&&r.push(`triage-${l.shownTriage}`),r}function nH(e){let t=Ee(e),n=ir(e),r=He(e),o=U(r),s=r,i=Rt(s),a=Gr(s),c=si(s),u=c?`, ${c}`:"",p=Hl(s,Rn(s));return d`<div class="row-score">${Ag(s,{variant:"compact"})} ${s.confidence===void 0?g:d`<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?d`<span class="row-type">${a}</span>`:g}</div><div class="meta-row"><span class="row-loc">${b0(s,p)}${u}</span> ${Eg(p)}<div class="marks">${w0(e,n,t,r,"table")}</div></div>${n.length>1?d`<div class="tabs-row">${v0(n,o,t)}</div>`:g}</div>`}function $0(e){if(!e)return g;let t=Qr(e)[0];return t?d`<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 k0(e,t){let n=Object.keys(e).toSorted(),r=new Map;for(let p of n)for(let f of e[p].imports??[]){let m=r.get(f)??[];m.push(p),r.set(f,m)}let o=l.filesSearch.trim().toLowerCase(),s=o?n.filter(p=>p.toLowerCase().includes(o)):n,i=p=>e[p]?d`<a href="${`#${Ap(p)}`}"><span class="name">${p}</span></a>`:d`<span class="name">${p}</span>`,a=p=>{let f=t.get(p);if(!f)return null;let m=Xe.filter(h=>(f[h]??0)>0);return m.length===0?null:d`<span class="tree-count-chips">${m.map(h=>d`<span class="${`tree-count-chip ${h}`}">${f[h]} ${h.replaceAll("_"," ")}</span>`)}</span>`},c=p=>{let f=t.get(p);return f?Xe.reduce((m,h)=>m+(f[h]??0),0):0},u=d`<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(l.filesViewMode==="table"){let p=l.filesSelectedFile&&e[l.filesSelectedFile]&&s.includes(l.filesSelectedFile)?l.filesSelectedFile:null;return d`<div class="${p?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${u}<div class="${p?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${s.length===0?d`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(h=>{let b=c(h),y=h===p,w=Wl(e[h].size);return d`<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)??d`<span class="tree-table-clean-marker">—</span>`} ${w?d`<span class="tree-table-size">${w}</span>`:g}</div>`})}</div>${p?d`<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">${bE(e[p],p,r.get(p)??[],i)}</div></aside>`:g}</div></div>`}return d`<div class="tree-view">${u} ${s.length===0?d`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(p=>{let f=e[p],m=r.get(p)??[],h=Wl(f.size);return d`<section class="tree-file" id="${Ap(p)}"><div class="tree-file-header"><span class="name">${p}</span> ${a(p)} ${h?d`<span class="tree-file-size">${h}</span>`:g} ${$0(f.fileHash)}</div>${x0(f,m,i)}</section>`})}</div>`}function x0(e,t,n){return d`${e.fileHash||e.treeHash?d`<div class="tree-hashes hashes">${e.fileHash?d`<div class="tree-hash">file: ${e.fileHash}</div>`:g} ${e.treeHash?d`<div class="tree-hash">tree: ${e.treeHash}</div>`:g}</div>`:g} ${e.imports?.length>0?d`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(r=>d`<li>${n(r)}</li>`)}</ul></div>`:g} ${t.length>0?d`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(r=>d`<li>${n(r)}</li>`)}</ul></div>`:g} ${e.exports?.length>0?d`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(r=>d`<li><span class="name">${r}</span></li>`)}</ul></div>`:g}`}function bE(e,t,n,r){let o=Wl(e.size);return d`<div class="tree-detail-name"><span class="name">${t}</span> ${o?d`<span class="tree-detail-size">${o}</span>`:g} ${$0(e.fileHash)}</div>${x0(e,n,r)}`}var ha=null,S0=null;function Ts(){return S0}function yE(){return ha||(ha=(async()=>{let e="./graph.js";try{let t=await import(e);return S0=t,t}catch(t){throw ha=null,t}})(),ha)}async function Fg(e,t,n,r,o){try{let s=await yE(),i=s.buildGraphFromPrep(t);Y(d`<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 ba=null,ur=null;function C0(){ur=null}function wE(){return ba||(ba=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw ba=null,t}})(),ba)}function vE(e){let t=Pe(e);if(t.size===0)return t;let n=[...t.keys()],{stripped:r}=Kn(n),o=new Map;for(let s=0;s<n.length;s++)o.set(r[s],t.get(n[s]));return o}async function _0(e,t){let n=t?.integrity??"";(!ur||ur.integrity!==n||(t?.managedId||ur.managedId)&&ur.details!==t)&&(ur={integrity:n,managedId:t?.managedId,details:t?.managedId?t:null,promise:$E(t,n)});try{let r=await ur.promise;return!e.isConnected||e.contains(r)||e.replaceChildren(r),r}catch(r){ur=null;let o=r instanceof Error?r.message:String(r);return e.textContent=`Terminal failed to load: ${o}`,null}}async function $E(e,t){return(await wE()).createTerminalElement(vE(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 pr(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 fr(e){return e.currentView!=="bundles"?null:e.bundleDetails?e.bundleDetails.managedId??null:e.bundles?.find(t=>t.integrity===e.selectedBundle)?.managedId??null}function mr(e,t,n,r="overview",o=null,s=[t]){if(!t?.managedId)return null;let i=e.find(c=>c.id===n&&c.bundles?.some(u=>u.id===t.managedId));if(n!=null&&!i)return null;let a=[t,...s.filter(c=>c.managedId&&c.managedId===o?.compareId)];return Ge({view:"bundles",teamId:i?.id??null,bundleId:t.managedId,bundleTab:r,...o},e,a.map(c=>({id:c.managedId,slug:c.slug})))}function Id(e,t=e.bundleDetailsTab){if(t!=="code")return null;let n=e.bundleCodeFileRequest;if(n?.bundle===e.selectedBundle){if(n.file==null)return null;let{bundle:s,...i}=n;return i}if(!e.bundleSourceFile||e.bundleDetails?.integrity!==e.selectedBundle)return null;let r=Cl(It(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 Lg(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,...Po(n.mode)};let r=Is(e.bundles??[],e.selectedBundle).find(o=>o.integrity===n.target);return r?.managedId?{compareId:r.managedId,...Po(n.mode)}:null}function gr(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,...Po(o?.mode??"code")};if(t==="review"&&r){let{bundle:s,started:i,user:a,resume:c,...u}=r;return u}return Id(e,t)??Lg(e,t)}function wH(e,t,n=()=>null){let r=e.bundles?.find(a=>a.integrity===e.selectedBundle)?.npm;if(!r||t===e.bundleDetailsTab)return;let o=gr(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 Ms(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,pr(t)])).values()]}var Ng=(e,t,n)=>{for(let r of t)if(r[0]===e)return(0,r[1])();return n?.()};var ya=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let r of n)r._$AO?.(t,!1),ya(r,t);return!0},Md=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},R0=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),SE(t)}};function kE(e){this._$AN!==void 0?(Md(this),this._$AM=e,R0(this)):this._$AM=e}function xE(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++)ya(r[s],!1),Md(r[s]);else r!=null&&(ya(r,!1),Md(r));else ya(this,e)}var SE=e=>{e.type==Yy.CHILD&&(e._$AP??=xE,e._$AQ??=kE)},Ad=class extends Xy{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,n,r){super._$AT(t,n,r),R0(this),this.isConnected=t._$AU}_$AO(t,n=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),n&&(ya(this,t),Md(this))}setValue(t){if(kw(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 Og=new WeakMap,T0=np(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=Og.get(t);n===void 0&&(n=new WeakMap,Og.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"?Og.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,I0=Math.floor(2**25/15);function CE(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&&!ks(e)?e:e0(e,t).flatMap(n=>typeof n=="string"?CE(n):[n])}var _E=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu,M0=200;function RE(e){let t=[...e];return t.length>M0?`${t.slice(0,M0-1).join("").trimEnd()}\u2026`:e}var Ld=e=>e.split("/").map(encodeURIComponent).join("/"),Bg=(e,t)=>`https://github.com/${Ld(e)}/releases/tag/${Ld(t)}`;function A0(e,t){return t&&e?.sha===t&&Array.isArray(e.tags)?e.tags.filter(n=>typeof n=="string"&&n):[]}function As(e,t,n=null){let o=typeof e?.github=="string"&&typeof n=="string"&&n.toLowerCase()===e.github.toLowerCase()?A0(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:RE(s.subject),authorName:s.authorName,authorLogin:s.authorLogin,date:s.committedAt??s.authoredAt}:{}})}function Nd(e,t="",n=null){let r=[],o=Oe(e);if(o){let i=[Tt(e.repo),Tt({directory:t})].filter(Boolean).join("/"),a=Wr(e.repo?.commit),c=i.split("/").map(encodeURIComponent).join("/"),u=`https://github.com/${o}`,p=Oe({repo:{github:n?.github}}),f=p?A0(n,a):[];r.push({label:"GitHub",text:o+(i?`/${i}`:""),href:a||i?`${u}/tree/${a??"HEAD"}${c?`/${c}`:""}`:u,...a?{commit:{hash:a,text:a.slice(0,7),href:`${u}/commit/${a}`,...f.length>0?{tags:f.map(m=>({name:m,href:Bg(p,m)}))}:{}}}:{}})}let s=e?.package?.npm;if(typeof s?.name=="string"&&_E.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 TE=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,E0=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,Dg=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,Pg=e=>JSON.stringify(e).replaceAll(TE,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);function we(e){let t=E0(e,64);return t===e?Pg(e):`${Pg(t)}...`}var Od=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 Bt=class extends Od{};function oe(e,t,n){if(!e)throw new Bt(typeof n=="function"?n():n,t.line)}function hr(e,t){t.lastIndex=e.pos;let n=t.exec(e.text);return n!==null&&(e.pos=t.lastIndex),n}var JH=2**20;var IE=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,ME=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,AE=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,EE=[31,28,31,30,31,30,31,31,30,31,30,31];function zg(e){let t=IE.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])],c=n%4===0&&n%100!==0||n%400===0;if(r<1||r>12||o<1||o>(r===2&&c?29:EE[r-1])||s>23||i>59||a>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let u=[];(t[4]==="t"||t[9]==="z")&&u.push('a date-time with a lower-case "t" or "z" is not supported'),n===0&&u.push("the year 0000 is not supported"),a===60&&u.push("a leap second is not supported");let p=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:p,unsupported:u}}var Bd=class{constructor(t){if(typeof t!="string"||zg(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:c}=zg(this.text),u=new Date(0);return u.setUTCFullYear(t,n-1,r),u.setUTCHours(o,s-c,i,Number(a.padEnd(3,"0").slice(0,3))),u}};function L0(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let n=zg(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 oe(!r,t,'a date-time with a space in place of "T" is not supported'),oe(!ME.test(e),t,()=>`local dates and times are not supported: ${we(e)}`),oe(!AE.test(e),t,()=>`a date-time or a time without seconds is not supported: ${we(e)}`),oe(n?.unsupported.length!==1,t,()=>`${n.unsupported[0]}: ${we(e)}`),new Bt(`${we(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,t.line)}var FE=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,LE=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,NE=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,N0=2n**63n,O0=BigInt(Number.MAX_SAFE_INTEGER),OE={__proto__:null,x:16,o:21,b:63};function P0(e,t){let n=FE.test(e);if(!n&&!LE.test(e))return;let r=e.replaceAll("_",""),o=n?r.replace(/^[+-]/u,""):r.slice(2).replace(/^0+/u,""),i=o.length<=(n?19:OE[r[1]])?BigInt(n?r:`${r.slice(0,2)}${o||"0"}`):void 0;return oe(i!==void 0&&i>=-N0&&i<N0,t,()=>`integer out of range ${we(e)}`),i>=-O0&&i<=O0?Number(i):i}var B0={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};function D0(e){if(typeof e!="string"||!NE.test(e))return;if(e in B0)return B0[e];let t=Number(e.replaceAll("_","")),n=!/[1-9]/u.test(e.split(/[Ee]/u)[0]);return Number.isFinite(t)&&(t!==0||n)?t:null}var Pd=class{constructor(t){let n=D0(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 z0(e,t){let n=D0(e);if(n!==void 0)return oe(n!==null,t,()=>`float out of range ${we(e)}`),new Pd(e)}var U0=64;function br(e){for(;e.text[e.pos]===" "||e.text[e.pos]===" ";)e.pos++}function po(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":we(t)}var V0="a carriage return must be followed by a line feed";function j0(e,t,n){throw new Bt(t==="\r"?V0:`${Dg(t)} is not allowed in ${n}`,e.line)}var zd=e=>e.pos>=e.text.length||e.text[e.pos]===`
|
|
134
|
-
`||e.text.startsWith(`\r
|
|
135
|
-
`,e.pos),BE=/#[^[\p{Cc}--[\t\u0080-\u009F]]]*/vy;function G0(e){e.text[e.pos]==="#"&&(hr(e,BE),zd(e)||j0(e,e.text[e.pos],"a comment"))}function Dd(e){if(e.text[e.pos]===`
|
|
136
|
-
`)e.pos+=1;else if(e.text.startsWith(`\r
|
|
137
|
-
`,e.pos))e.pos+=2;else return!1;return e.line++,!0}function Wg(e){do br(e),G0(e);while(Dd(e))}var W0={__proto__:null,b:"\b",t:" ",n:`
|
|
138
|
-
`,f:"\f",r:"\r",'"':'"',"\\":"\\"},PE={__proto__:null,'"':/[^"\\[\p{Cc}--[\t\u0080-\u009F]]]*/vy,"'":/[^'[\p{Cc}--[\t\u0080-\u009F]]]*/vy},DE=/u([\dA-Fa-f]{4})|U([\dA-Fa-f]{8})/uy;function K0(e){let t=e.text[e.pos];if(t in W0)return W0[e.text[e.pos++]];let n=hr(e,DE);oe(n!==null,e,()=>`unsupported escape ${we(`\\${t??""}`)}`);let r=Number.parseInt(n[1]??n[2],16);return oe(r<=1114111&&(r<55296||r>57343),e,()=>`\\${n[0]} is not a Unicode scalar value`),String.fromCodePoint(r)}var zE=/[\t ]*\r?\n(?:[\t ]|\r?\n)*/uy;function WE(e){let t=hr(e,zE);return t===null?K0(e):(e.line+=t[0].split(`
|
|
139
|
-
`).length-1,"")}var q0=(e,t)=>e.text[e.pos+1]===t&&e.text[e.pos+2]===t,HE={__proto__:null,'"':/"/uy,"'":/'/uy,'"""':/"{3,5}/uy,"'''":/'{3,5}/uy};function Y0(e,t){let n=q0(e,t),r=HE[n?t.repeat(3):t];e.pos+=n?3:1,n&&Dd(e);let o="";for(;;){if(o+=hr(e,PE[t])[0],n&&Dd(e)){o+=`
|
|
140
|
-
`;continue}oe(!zd(e),e,"unterminated string");let s=hr(e,r);if(s!==null)return o+s[0].slice(3);let i=e.text[e.pos++];i===t?o+=i:i==="\\"?o+=n?WE(e):K0(e):j0(e,i,"a string")}}var UE=/[\w-]+/uy;function H0(e){let t=e.text[e.pos];if(t==='"'||t==="'")return oe(!q0(e,t),e,"a multi-line string cannot be a key"),Y0(e,t);let n=hr(e,UE);return oe(n!==null,e,()=>`expected a key, found ${po(e)}`),n[0]}function X0(e){let t=[H0(e)];for(;;){if(br(e),e.text[e.pos]!==".")return t;e.pos++,br(e),t.push(H0(e)),oe(t.length<=U0,e,"a key with too many parts")}}var VE=/[\w+.:-]+/uy;function jE(e){let t=hr(e,VE);oe(t!==null,e,()=>`expected a value, found ${po(e)}`);let n=t[0];if(n==="true")return!0;if(n==="false")return!1;let r=P0(n,e)??z0(n,e)??L0(n,e);return oe(r!==void 0,e,()=>`expected a value, found ${we(n)}`),r}function GE(e,t,n,r){oe(t[n]===void 0,e,()=>`duplicate key ${we(n)}`),t[n]=r}function J0(e,t){let n=X0(e);return oe(e.text[e.pos]==="=",e,()=>`expected "=" after the key, found ${po(e)}`),e.pos++,br(e),{header:!1,keys:n,value:Z0(e,t)}}function KE(e,t){e.pos++;let n=[];for(Wg(e);e.text[e.pos]!=="]"&&(n.push(Z0(e,t+1)),Wg(e),e.text[e.pos]!=="]");Wg(e))oe(e.text[e.pos]===",",e,()=>`expected "," or "]", found ${po(e)}`),e.pos++;return e.pos++,n}var Es=e=>typeof e=="object"&&e!==null&&Object.getPrototypeOf(e)===null,qE=new WeakSet;function Ug(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 c=i[a];oe(n.has(c),e,()=>s(a,c)),i=c}GE(e,i,r.at(-1),o)}var YE=e=>Array.isArray(e)?"an array":Es(e)?"an inline table":"a value",XE=(e,t)=>`${we(e)} is ${YE(t)}, which a dotted key cannot add to`;function Hg(e){br(e),oe(!zd(e)&&e.text[e.pos]!=="#",e,"an inline table across lines is not supported")}function JE(e,t){e.pos++;let n=Object.create(null);qE.add(n);let r=new Set;if(Hg(e),e.text[e.pos]==="}")e.pos++;else do{Hg(e),oe(e.text[e.pos]!=="}",e,"a trailing comma in an inline table is not supported");let{keys:o,value:s}=J0(e,t+1);Ug(e,n,r,o,s,XE),Hg(e);let i=e.text[e.pos];oe(i===","||i==="}",e,()=>`expected "," or "}" on the inline table's line, found ${po(e)}`)}while(e.text[e.pos++]===",");return n}function Z0(e,t){oe(t<=U0,e,"nested too deep");let n=e.text[e.pos];return n==='"'||n==="'"?Y0(e,n):n==="["?KE(e,t):n==="{"?JE(e,t):jE(e)}function ZE(e){let t=e.text.startsWith("[[",e.pos);e.pos+=t?2:1,br(e);let n=X0(e),r=t?"]]":"]";return oe(e.text.startsWith(r,e.pos),e,()=>`expected "${r}", found ${po(e)}`),e.pos+=r.length,{header:!0,keys:n,array:t}}function Q0(e){br(e);let t=e.text[e.pos];if(t==="[")return ZE(e);if(!(t==="#"||t==="\r"||zd(e)))return J0(e,0)}function eS(e){if(br(e),G0(e),!(Dd(e)||e.pos===e.text.length))throw oe(e.text[e.pos]!=="\r",e,V0),new Bt(`expected the end of the line, found ${po(e)}`,e.line)}function Wd(e,t){return e.arrays.has(t)?"an array of tables":Array.isArray(t)?"an array":Es(t)?e.fixed.has(t)?"an inline table":"a table":"a value"}var tS=e=>we(e.join("."));function QE(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];oe(Es(s)&&!e.fixed.has(s),t,()=>`${we(o)} is ${Wd(e,s)}, which a header cannot add to`),r=s}return r}function eF(e,t,n,r){e.pending.clear();let o=QE(e,t,n.slice(0,-1)),s=n.at(-1);if(r){s in o||e.arrays.add(o[s]=[]),oe(e.arrays.has(o[s]),t,()=>`${tS(n)} is ${Wd(e,o[s])}, not an array of tables`),o[s].push(e.current=Object.create(null));return}s in o?oe(e.implicit.delete(o[s]),t,()=>`${tS(n)} is ${Wd(e,o[s])} already`):o[s]=Object.create(null),e.current=o[s]}function tF(e,t,n){return!Es(n)||e.fixed.has(n)?`${we(t)} is ${Wd(e,n)}, which a dotted key cannot add to`:e.implicit.has(n)?`a dotted key through ${we(t)}, a table a header made on its way, is not supported`:`${we(t)} is a table declared elsewhere, which a dotted key cannot add to`}function nF(e,t,n,r){Ug(t,e.current,e.pending,n,r,(o,s)=>tF(e,o,s)),Es(r)&&e.fixed.add(r)}var rF={__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 oF(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 Bt(rF[t[0]]??"a lone surrogate is not well-formed Unicode",n)}function Vg(e){oF(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=Q0(n);o?.header===!0?eF(r,n,o.keys,o.array):o!==void 0&&nF(r,n,o.keys,o.value),eS(n)}return t}function sF(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&&dp("github",n)?n:null}function iF(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 aF=e=>e.replaceAll("\\","/").split("/").every(t=>t===""||t===".");function lF(e){if(typeof e!="string")return{};let t=e.replaceAll("\\","/").split("/");if(t.includes(".."))return{};let n=t.filter(r=>r!==""&&r!==".").join("/");return dp("directory",n)?{directory:n}:{}}function nS(e){let t=e?.repository,n=typeof t=="string"?t:t?.url,r=sF(n);if(!r)return;let o=t.directory;return typeof o!="string"&&(o=iF(e.homepage,r),o!==void 0&&aF(o)&&(o=void 0)),{github:r,...lF(o)}}function jg(e,t){let n=e?.[t];if(typeof n!="string")return null;try{return t.endsWith(".toml")?Vg(n):JSON.parse(n.replace(/^\uFEFF/u,""))}catch{return null}}function cF(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)?Oe({repo:{github:n}}):null}function Hd(e,t,n){let r=t?.ecosystem??e.ecosystem??"npm",o=r==="composer"?jg(t?.files,"composer.json"):r==="cargo"?jg(t?.files,"Cargo.toml")?.package:jg(t?.files,"package.json"),s=t?.name??e.name,i=t?.version??e.version??o?.version,a=Oe(t),c=a?{github:a,directory:t.repo.directory}:r==="npm"||r==="soldeer"?nS(o):{github:[o?.repository,o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(f=>cF(f)).find(Boolean)},u=typeof c?.directory=="string"?c.directory:void 0,p=a?Wr(t.repo.commit):null;return{ecosystem:r,name:s,version:typeof i=="string"?i:void 0,github:c?.github??null,...u===void 0?{}:{directory:u},...p?{commit:p}:{},fileCount:n}}var rS=new WeakMap;function oS(e,t){let n=rS.get(e);if(n||rS.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+=mn(a),s+=Nw(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 sS(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,c=t[s].split("/");for(let[u,p]of i.slice(0,-1).entries())a.dirs.has(p)||a.dirs.set(p,{path:i.slice(0,u+1).join("/"),sourcePath:c.slice(0,-(i.length-u-1)).join("/"),files:new Map,dirs:new Map}),a=a.dirs.get(p);a.files.set(i.at(-1),t[s])}aS(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 iS(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 c=Vd(i,a,s);if(!Ud.has(c)||!a.name||i==="."||!e.startsWith(`${i}/`)&&!i.startsWith(e))continue;let u=(c==="soldeer"?/(?:^|\/)dependencies\//u:/(?:^|\/)vendor\//u).exec(`${i}/`),p=u?u.index+(u[0].startsWith("/")?1:0):i.lastIndexOf("/")+1;o=Math.min(o,p)}return e.slice(0,o)}function aS(e,t,n){for(let s of e.dirs.values())aS(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(c=>c.package?.ecosystem==="composer")){e.boundary=!0;for(let[c,u]of a.dirs)s.set(`${i}/${c}`,u)}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(c=>!c.startsWith(".")&&!c.startsWith("@")))for(let[c,u]of a.dirs)u.boundary=!0,u.package??={name:`${i}/${c}`},s.set(`${i}/${c}`,u);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 c=a.dirs.get("node_modules");if(!c||c.files.size>0||c.dirs.size!==1)continue;let u=c.dirs.values().next().value;if(!u.package)continue;let p=`${u.package.name.replace("/","+")}@`;if(!i.startsWith(p))continue;let f=/^(\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?)([_(].*)?$/iu.exec(i.slice(p.length));if(!f)continue;u.package={...u.package,version:f[1]},e.dirs.set(i,u);let m=fo(i,u);s.has(m)||s.set(m,[]),s.get(m).push(u)}for(let i of s.values())if(!(i.length<2)){i.sort((a,c)=>a.path.localeCompare(c.path));for(let[a,c]of i.entries())c.package.variant=a+1}}return e}function fo(e,t){let n=t.package;return n?`${n.name}${n.version?`${Ud.has(n.ecosystem)?" - ":"@"}${n.version}`:""}`:e}function lS(e,t,n="",r=null){let o=t.toLowerCase(),s=(i,a,c=null)=>{let u=new Map([...i.files].filter(([f,m])=>{let h=n&&m.startsWith(n)?m.slice(n.length):m,b=c?.srcNameConflicts.has(f)?`src/${f}`:f;return(!r||r(m))&&(h.toLowerCase().includes(o)||`${a}/${b}`.toLowerCase().includes(o))})),p=new Map;for(let[f,m]of i.dirs){let h=i.hideSrc&&f==="src",b=s(m,h?a:`${a}/${fo(f,m)}`,h?i:null);b&&p.set(f,b)}return u.size>0||p.size>0?{...i,files:u,dirs:p}:null};return o||r?s(e,""):e}function Gg(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,c]of s.files)i.set(t.srcNameConflicts.has(a)?`src/${a}`:a,c);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 cS(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(c=>{let u=c.parentElement;return c.tagName==="SUMMARY"&&(u=u.parentElement),!u.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 dF([e,t],[n,r]){return fo(e,t).localeCompare(fo(n,r))||t.path.localeCompare(r.path)}function uF(e,t=0,n=[]){for(let[r,o]of[...e.dirs.entries()].toSorted(dF))uF(Gg(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 Kg(e,t,n,r,o){let s=[t,n].filter(Boolean).join("/"),i=Wr(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 dS(e,t,n=null){if(typeof t!="string")return null;let r=e?.npm?.manifest;if(r){let f=Wr(r.gitHead);return r.github?.github&&f?Kg(r.github.github,Tt({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:c}=s,u=i==="."?void 0:Vd(i,a,null)??(i.split("/").includes("node_modules")?"npm":void 0);if(u===void 0){let f=Oe(o),m=Oe({repo:{github:n?.github}}),h=f??m;if(!h)return null;let b=typeof o.repo?.directory=="string"?Tt(o.repo):m?.toLowerCase()===h.toLowerCase()?Tt({directory:n.directory}):"";return Kg(h,b,t,f?o.repo?.commit:void 0,null)}let p=Hd({name:a.name,ecosystem:u},a,0);return p.github?Kg(p.github,p.directory??"",c,p.commit,p):null}function uS(e,t=null){return d`<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="${As(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}">${z(Vt)}${e.package?d`<span hidden data-tooltip-package-icon>${Sl(e.package.ecosystem)}</span>`:g}</a>`}var mS=".bundle-code-main, .bundle-source-modal, .bundle-search-side",jd=new Map,Yg=new WeakMap,qg=null;function Xg(e){if(!e){queueMicrotask(pS);return}if(pS(),jd.has(e))return;if(!e.isConnected){queueMicrotask(()=>{e.isConnected&&Xg(e)});return}let t=e.querySelector(":scope > .bundle-source-code");if(!t)return;let n=new ResizeObserver(()=>{Yg.get(e)?.width!==gS(e)&&fS(e)});n.observe(t),n.observe(e.parentElement);let r=new MutationObserver(()=>fS(e));r.observe(t,{childList:!0,subtree:!0,characterData:!0}),r.observe(e,{attributes:!0,attributeFilter:["class"]}),jd.set(e,()=>{n.disconnect(),r.disconnect()})}function pS(){for(let[e,t]of jd)e.isConnected||(t(),jd.delete(e))}function gS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col");if(!t||!n)return 0;let r=getComputedStyle(t);return e.parentElement.clientWidth-n.getBoundingClientRect().width-parseFloat(r.paddingLeft)-parseFloat(r.paddingRight)}function fS(e){let t=e.querySelector(":scope > .bundle-source-code"),n=e.querySelector(":scope > .bundle-source-lineno-col"),r=gS(e);if(!t||!n||!e.isConnected||r<=0)return;let o=e.classList.contains("is-wrapped"),s=Yg.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:c,toggles:u}=pF(t,r,o,a),p=new Map;for(let[m,h]of c){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),p.set(b,h)}for(let m of s.keys())p.has(m)||m.style.removeProperty("--wrap-breaks");Yg.set(e,{rows:p,width:r});let f=e.closest(mS)?.querySelector("[data-bundle-source-wrap]");f&&(f.hidden=!u)}function pF(e,t,n,r){let o=getComputedStyle(e);qg??=document.createElement("canvas").getContext("2d"),qg.font=`${o.fontSize} ${o.fontFamily}`;let s=t/(2*qg.measureText("0").width),i=[],a=null,c=null,u=0,p=0,f=()=>{u>s&&c&&i.push({line:p,first:a,last:c}),p++,u=0,a=c=null},m=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(let k=m.nextNode();k;k=m.nextNode()){let x=k.data;for(let $=0;$<x.length;){let S=x.indexOf(`
|
|
142
|
-
`,$),_=S===-1?x.length:S;if(_>$){a??={node:k,from:$,to:$+(x.codePointAt($)>65535?2:1)};let R=_;for(;R>$&&(x[R-1]===" "||x[R-1]===" ");)R--;R>$&&(c={node:k,from:R-(R-2>=$&&x.codePointAt(R-2)>65535?2:1),to:R}),u+=_-$}if(S===-1)break;f(),$=S+1}}f();let h=new Map,b=document.createRange(),y=({node:k,from:x,to:$})=>(b.setStart(k,x),b.setEnd(k,$),b.getBoundingClientRect()),w=e.getBoundingClientRect().left+e.clientLeft+parseFloat(o.paddingLeft),v=!1;for(let{line:k,first:x,last:$}of i){let S=!!x.node.parentElement.closest(".bundle-source-long-line");if(n||S){let _=Math.round((y($).top-y(x).top)/r)+1;_>1&&h.set(k,_),_>1&&!S&&(v=!0)}else!v&&y($).right-w>t+.5&&(v=!0)}return{rows:h,toggles:v}}function HU(e){let t=e.closest(mS)?.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 c=s+o>>1;n[c].getBoundingClientRect().bottom<=r?s=c+1:o=c}let i=n[s],a=i.getBoundingClientRect().top-r;return()=>{i.isConnected&&(t.scrollTop+=i.getBoundingClientRect().top-r-a)}}var fF=new Set(["js","mjs","cjs","jsx","ts","mts","cts","tsx","css","json"]),mF=4*1024*1024;function gF(e){let t=/\.([a-z]+)$/iu.exec(e)?.[1]?.toLowerCase();return fF.has(t)?t:null}function hS(e,t,n=()=>Al(e,t)){return gF(e)!==null&&mn(t)<=mF&&n().category==="minified"}var bS=e=>e.bundle??e.json??e,yS=new WeakMap;function Jg(e,t){let n=yS.get(bS(e));if(n||yS.set(bS(e),n=new Map),!n.has(t)){let r=Pe(e).get(t);n.set(t,nv(t,typeof r=="string"?r:null,yn(e).get(t)))}return n.get(t)}var Fs=(e,t=n=>n)=>e?new Map(Object.entries(e).map(([n,r])=>[t(n),r])):null,hF=({stamps:e,readability:t,runsCode:n,exfiltration:r,hosts:o})=>({stamps:e,runsCode:Fs(n),exfiltration:Fs(r),hosts:Fs(o),readability:t&&{...t,controls:Fs(t.controls,Number)}});function bF(e){switch(e.id){case"held-runs-code":case"held-credentials":case"held-exfiltration":case"held-remote":case"held-ip-lookup":return{...e,files:e.files.map(t=>({...t,found:Fs(t.found),...t.added?{added:Fs(t.added)}:{}}))};case"popularity":return{...e,tier:e.tier??1/0};default:return e}}var wS=e=>({oldVersion:e.oldVersion??null,findings:e.findings.map(bF),files:new Map(Object.entries(e.files).map(([t,n])=>[t,hF(n)])),dependencies:e.dependencies,score:e.score??null}),Gd=e=>e?.npm?e.risk?.()?.files??null:null,yF={stamps:[],readability:null,runsCode:null,exfiltration:null,hosts:null};function Tn(e,t){return e?.npm?Gd(e)?.get(t)??yF:Jg(e,t)}var Zg=({names:e,loop:t})=>[e>=Zw&&`${e.toLocaleString("en")}${e===Qw?" or more":""} names such as _0x1a2b`,t&&"while(!![])"].filter(Boolean).join(", and ");function $S(e,t,n){return n===Pe(e).get(t)&&typeof n=="string"?Tn(e,t).readability:Qg(e,t,n)}var vS=new WeakMap;function Qg(e,t,n){let r=vS.get(e);r||vS.set(e,r=new Map);let o=r.get(t);if(o?.text===n)return o.read;let s=Al(t,n);return r.set(t,{text:n,read:s}),s}function wF(e,t){let n=ev(e,t),r=n.slice(0,6).map(([o,s])=>`U+${o.toString(16).toUpperCase().padStart(4,"0")} \xD7${s.toLocaleString("en")}`);return`${At.get(t).name}: ${r.join(", ")}${n.length>6?`, and ${n.length-6} more`:""}`}var kS=({longLines:e,longest:t})=>`${e.toLocaleString("en")} ${e===1?"line":"lines"} over ${Jw} characters, the longest ${t.toLocaleString("en")}`;function vF(e){let{average:t,category:n,longLines:r,inlineMap:o}=e,s=()=>kS(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, ${me(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 xS(e,t=!1){if(!e)return g;let n=gi(e),{tag:r,short:o,mark:s}=At.get(n);return d`<span class="${`npm-encoding-tag${s?` is-${s}`:""}`}" data-tooltip="${vF({...e,category:n})}">${t?o??r:r}</span>`}function r8(e){let t=e?.kind;return t!=="ascii"&&t!=="utf8"||gi(e)===t?g:xS({...e,category:t})}function SS(e,t=null){let n=e?Ho(e).filter(o=>["controls","invisible","long"].includes(o)&&(t===null||t.includes(Uo(e,o)))):[];if(n.length===0)return g;let r=o=>o==="long"?`${kS(e)}${e.category==="long"?", among readable ones":""}`:wF(e.controls,o);return n.map(o=>d`<span class="${`npm-flag-tag is-${Uo(e,o)}`}" data-tooltip="${r(o)}">${At.get(o).tag}</span>`)}function CS(e){if(!e)return g;let t=gi(e);return t==="ascii"||t==="map"?SS(e):$F(e)}var $F=e=>e?d`${SS(e)}${xS(e)}`:g;function _S(e,t,n,r=!0){let{stamps:o,readability:s}=Tn(e,t),i=r&&o.some(({name:c})=>c==="Large"),a=s?.obfuscation;return!i&&!a?g:d`${i?d`<span class="npm-flag-tag is-notice" data-tooltip="${`A code file of ${me(n)}, 256 KiB or more`}">Large</span>`:g}${a?d`<span class="npm-flag-tag is-warn" data-tooltip="${`An obfuscator's fingerprint: ${Zg(a)}`}">Obfuscated</span>`:g}`}var AS=d`<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>`,ES=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",kF=8,xF=4,SF=2,CF=30,_F=2,wa="The server's copy is of another file than the one open.",RF="The server didn't pretty-print this file.",Ns=e=>!(e>=400&&e<500&&e!==429),TF=5e3,IF=5*6e4,eh=new Map;function FS(e,t,n,r){if(!t?.retry){eh.delete(e);return}let o=eh.get(e)??0;eh.set(e,o+1),setTimeout(()=>{n()&&r()?.()},Math.min(TF*2**o,IF))?.unref?.()}var rt=new Map,Os=0,f8=()=>Os,Ls=new Map,MF=(e,t)=>`${e.integrity}\0${t}`,tn=new Map,$t=new Map,RS=new WeakMap;function LS(e,t,n,r){if(!(t?.managedId||t?.npm)||typeof r!="string")return!1;let o=RS.get(e);return o||RS.set(e,o=new Map),o.has(n)||o.set(n,hS(n,r,()=>Qg(e,n,r))),o.get(n)}var th=!1,qd=new Set,NS=new Set;function AF(e,t){rt.delete(e),rt.set(e,t),th||(th=!0,NS=qd,qd=new Set,setTimeout(()=>{th=!1})),qd.add(e),OS()}function OS(){for(let[e,t]of rt){if(rt.size<=kF)break;qd.has(e)||NS.has(e)||t.status==="loading"||(rt.delete(e),Ls.delete(e))}}var nh=0,TS=[];async function EF(e){nh<_F?nh++:await new Promise(t=>{TS.push(t)});try{return await e()}finally{let t=TS.shift();t?t():nh--}}async function FF(e,t,n,r,o,s){let i;try{let u=s??await Fr(o),{text:p,source:f}=await EF(()=>n.npm?wk(n.npm.name,n.npm.version,r,u):bk(n.managedId,r,u));i=f===u&&typeof p=="string"?{status:"ready",text:p,hash:await Fr(p)}:{status:"error",message:wa,retry:!0}}catch(u){if(u?.name==="AbortError"){rt.get(e)===t&&(rt.delete(e),Ls.delete(e));return}i={status:"error",message:u?.message??String(u),retry:Ns(u?.status)}}if(rt.get(e)!==t)return;rt.set(e,i),Os++;let a=Ls.get(e),c=i.status==="error"&&i.retry;c||Ls.delete(e),FS(`file ${e}`,c?i:null,()=>rt.get(e)===i&&rt.delete(e),()=>Ls.get(e)),a?.(),OS()}function BS(){for(let[e,t]of tn){if(tn.size<=xF)break;t.rest&&tn.delete(e)}}function IS(e,t){let n=e.notifiers.get(t);e.notifiers.delete(t),n?.()}async function LF(e,t,n,{npm:r}){let o=Pe(n),s;try{await yk(r.name,r.version,async({path:i,source:a,text:c,status:u,message:p})=>{let f=o.get(i),h=typeof c=="string"&&typeof f=="string"&&a===await Fr(f)?{status:"ready",text:c,hash:await Fr(c)}:typeof c=="string"?{status:"error",message:wa,retry:!0}:{status:"error",message:p,retry:Ns(u)};t.copies.set(i,h),Os++,IS(t,i)}),s={status:"error",message:RF,retry:!1}}catch(i){if(i?.name==="AbortError"){tn.get(e)===t&&tn.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}t.rest=s,Os++;for(let i of[...t.notifiers.keys()])IS(t,i);BS()}function NF(e,t,n,r,o){let s=e.integrity,i=tn.get(s);if(tn.delete(s),i||(i={copies:new Map,notifiers:new Map,rest:null},LF(s,i,e,t)),tn.set(s,i),BS(),r!==Pe(e).get(n))return{status:"error",message:wa,retry:!1};let a=i.copies.get(n)??i.rest;return a||(i.notifiers.set(n,o),{status:"loading"})}function PS(e,t,n,r,o){return l.bundleSourcePretty?t.npm?NF(e,t,n,r,o):DS(e,n,r,o,t):null}function DS(e,t,n,r,o=e){let s=MF(e,t),i=rt.get(s),a=i??{status:"loading"};return AF(s,a),(a.status==="loading"||a.retry)&&Ls.set(s,r),i||FF(s,a,o,t,n,e.fileHashes?.get(t)),a}var Kd=new Set;function MS(e){e&&(Kd.size===0&&setTimeout(()=>{let t=[...Kd];Kd.clear();for(let n of t)n()},CF),Kd.add(e))}function zS(){for(let[e,t]of $t){if($t.size<=SF)break;t.ended&&$t.delete(e)}}async function OF(e,t,n,r){let o={base:n,other:r},s=null;try{let i=async({side:a,path:c,source:u,text:p,status:f,message:m})=>{if(typeof p!="string"&&Ns(f))return;let h=Object.hasOwn(o,a)?o[a]:null,b=h&&Pe(h).get(c),y=typeof p=="string"&&typeof b=="string"&&u===(h.fileHashes?.get(c)??await Fr(b));t.copies.set(`${a}\0${c}`,y?{status:"ready",text:p,hash:await Fr(p)}:typeof p=="string"?{status:"error",message:wa,retry:!0}:{status:"error",message:m,retry:Ns(f)}),Os++,MS(t.notify)};await(n.npm?$k(n.npm.name,n.npm.version,r.npm.version,i):vk(n.managedId,r.managedId,i))}catch(i){if(i?.name==="AbortError"){$t.get(e)===t&&$t.delete(e);return}s={status:"error",message:i?.message??String(i),retry:Ns(i?.status)}}Object.assign(t,{ended:!0,rest:s}),Os++,FS(`comparison ${e}`,s,()=>$t.get(e)===t&&$t.delete(e),()=>t.notify),MS(t.notify),zS()}function m8(e,t,n,r,o,s){let i=`${e.integrity}\0${t.integrity}`,a=$t.get(i);$t.delete(i),a||(a={copies:new Map,notify:null,ended:!1,rest:null},OF(i,a,e,t)),$t.set(i,a),zS();let c=n==="base"?e:t;return o!==Pe(c).get(r)?{status:"error",message:wa,retry:!1}:(a.notify=s,a.copies.get(`${n}\0${r}`)??a.rest??(a.ended?DS(c,r,o,s):{status:"loading"}))}function g8(){if(l.bundleSourcePretty=!l.bundleSourcePretty,!l.bundleSourcePretty)return;let e=t=>t.status==="error"&&t.retry;for(let[t,n]of rt)e(n)&&rt.delete(t);for(let[t,n]of tn)n.rest&&(e(n.rest)||[...n.copies.values()].some(e))&&tn.delete(t);for(let[t,n]of $t)n.ended&&(n.rest?e(n.rest):[...n.copies.values()].some(e))&&$t.delete(t)}function rh(e,t,n){return e?.bundle===t&&e.files[e.at]===n?e:{bundle:t,files:n?[n]:[],at:0}}function b8(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 y8(e,t){return{...e,at:Math.max(0,Math.min(e.at+t,e.files.length-1))}}function In({title:e,count:t,extra:n=g,tools:r=g,body:o,list:s=!1,className:i=""}){return d`<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 oh=1024,WS=1024*oh,HS=["tiny","small","medium","large","gigantic"],BF={dependencies:[1,4,11,26],files:[3,24,192,1536],lines:[400,3200,25600,204800],unpacked:[16*oh,128*oh,WS,8*WS]};function PF(e,t){let n=BF[e].findIndex(r=>t<r);return HS[n===-1?HS.length-1:n]}function Yd(e,t,n){return d`<span class="${`npm-sized is-${PF(e,t)}`}">${n}</span>`}var DF=["preinstall","install","postinstall"];function US(e,t=!1){let n={...e};return!n.preinstall&&!n.install&&t&&(n.install="node-gyp rebuild"),DF.filter(r=>typeof n[r]=="string").map(r=>[r,n[r]])}function va(e,t=[]){return US(e?.installScripts,!!(t&&(t instanceof Set?t.has("binding.gyp"):t.includes("binding.gyp"))))}function S8(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 US(r,t)}var sh=14*864e5,ih=(e,{minimumReleaseAge:t=sh,now:n=Date.now()}={})=>t>0&&typeof e=="string"&&n-Date.parse(e)<t,T8=90*864e5;var mo=72,Ye={top:6,right:0,bottom:18,left:40},zF=24,WF=4,$a=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),VS=new Intl.NumberFormat("en"),Jd=e=>new Intl.DateTimeFormat("en",{...e,timeZone:"UTC"}).format,HF=Jd({month:"short",day:"numeric"}),Ps=Jd({month:"short",day:"numeric",year:"numeric"}),ah=Jd({month:"short",year:"numeric"}),jS=Jd({month:"long",year:"numeric"}),ka=e=>e===1/0?"unpopular":`top ${e.toLocaleString("en")}`,UF=(e,t)=>{let n=t&&vp(e);return d`<dd class="${`npm-downloads-tier ${n?"is-mid":wp(e)}`}" data-tooltip="${n?t:g}">${ka(e)}</dd>`},Bs={week:{label:"Weekly",of:e=>ov(e).slice(-52),name:e=>`${HF(e.from)} \u2013 ${Ps(e.to)}`},month:{label:"Monthly",of:bp,name:e=>jS(e.from)}},lh=(e,t)=>`${VS.format(e)} downloads, ${t}`;function GS(e){let t=bp(e).at(-1);return t?dh(t):null}var dh=({total:e,from:t})=>({total:e,month:jS(t)});function VF(e){if(!(e>0))return 1;let t=10**Math.floor(Math.log10(e));return[1,2,2.5,5,10].map(n=>n*t).find(n=>n>=e)}var ch=class extends _t{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=Bs[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(Bs).map(([i,{of:a,name:c}])=>{let u=a(r).at(-1);return[i,{total:u?.total??0,tooltip:u&&lh(u.total,c(u))}]})),this._tier=yp(r);let o=r?.days.slice(-365),s=o?.reduce((i,a)=>i+a,0);this._year=r==null?null:{total:s,tooltip:lh(s,`${Ps(rv(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<=Ye.left+Ye.right)return null;let o=r-Ye.left-Ye.right,s=mo-Ye.bottom,i=VF(Math.max(...n.map(v=>v.total))),a=v=>s-v/i*(s-Ye.top),c=v=>v.toFixed(1),u=this._unit==="month",p=o/(u?n.length:Math.max(n.length-1,1)),f=u?v=>Ye.left+(v+.5)*p:v=>Ye.left+(n.length>1?v*p:o/2),m=n.length-1,h=v=>Math.min(m,Math.max(0,(u?Math.floor:Math.round)((v-Ye.left)/p))),b=ah(n[0].from),y=n.at(-1),w;if(u){let v=Math.min(zF,p*.7)/2;w={bars:n.map(({total:k},x)=>{let[$,S,_]=[f(x)-v,f(x)+v,a(k)],R=Math.min(WF,v,s-_);return`M${c($)},${s}V${c(_+R)}Q${c($)},${c(_)} ${c($+R)},${c(_)}H${c(S-R)}Q${c(S)},${c(_)} ${c(S)},${c(_+R)}V${s}Z`})}}else{let v=n.map((k,x)=>`${x===0?"M":"L"}${c(f(x))},${c(a(k.total))}`).join("");w={line:v,area:`${v}L${c(f(m))},${s}L${c(f(0))},${s}Z`}}return{x:f,y:a,bottom:s,indexAt:h,first:b,last:ah(y.to),...w,ticks:[[0,$a.format(0)],[i,$a.format(i)]],label:`${t.label} downloads over the last year, from ${b} to ${ah(y.to)}; the latest ${this._unit}: ${lh(y.total,t.name(y))}.`}}_stat(t,n,r){return d`<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 d`${t?$a.format(t.total):this.status==="loading"?"\u2026":"\u2014"}<span class="npm-stat-per">/${n}</span>`}_latestStat(){let t=this._latest?.[this._unit];return d`<div class="npm-stat"><dt class="sr-only">${Bs[this._unit].label} downloads</dt><dd class="npm-stat-units" data-tooltip="${t?.tooltip||g}">${Object.keys(Bs).map(n=>d`<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 d`<div class="npm-downloads-controls"><span class="bundles-overview-sort" role="group" aria-label="Downloads by">${Object.entries(Bs).map(([n,{label:r}])=>d`<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?d`<strong>${VS.format(t.total)}</strong> <span>${Bs[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 d`<div class="npm-downloads-head"><dl class="npm-stats">${this._latestStat()} ${this._stat("Downloads, last 12 months",this._year,"year")} ${this._tier?d`<div class="npm-stat"><dt class="sr-only">Popularity</dt>${UF(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 d`<div class="npm-downloads-plot" style="height: ${mo}px"></div>`;let r=this._width;return d`<div class="npm-downloads-plot" style="height: ${mo}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="${mo}" viewBox="0 0 ${r} ${mo}" aria-hidden="true">${n.ticks.map(([o,s])=>Bn`<line class="npm-downloads-grid" x1=${Ye.left} x2=${r-Ye.right} y1=${n.y(o)} y2=${n.y(o)}></line>
|
|
143
|
-
<text class="npm-downloads-tick" x=${Ye.left-6} y=${n.y(o)} dy="0.32em" text-anchor="end">${s}</text>`)} ${n.bars?n.bars.map((o,s)=>Bn`<path class=${`npm-downloads-bar${s===this._at?" is-at":""}`} d=${o}></path>`):Bn`<path class="npm-downloads-area" d=${n.area}></path><path class="npm-downloads-line" d=${n.line}></path>`}<text class="npm-downloads-tick" x="${Ye.left}" y="${mo-4}">${n.first}</text><text class="npm-downloads-tick" x="${r-Ye.right}" y="${mo-4}" text-anchor="end">${n.last}</text>${t&&!n.bars?Bn`<line class="npm-downloads-crosshair" x1=${n.x(this._at)} x2=${n.x(this._at)} y1=${Ye.top} y2=${n.bottom}></line>
|
|
144
|
-
<circle class="npm-downloads-dot" cx=${n.x(this._at)} cy=${n.y(t.total)} r="4"></circle>`:g}</svg></div>`}};customElements.get("npm-downloads-chart")||customElements.define("npm-downloads-chart",ch);function uh(e,t){let n=ph(e);return[n,`${n}.js`,`${n}.cjs`,`${n}.mjs`,`${n}/index.js`].find(r=>r&&t?.has(r))}var ph=e=>e.replace(/^(?:\.\/)+/u,"").replace(/\/+$/u,""),xa=/^licen[cs]e(?:-[\w.]+)?(?:\.(?:md|txt))?$/iu;function KS(e,t){let n=t.filter(o=>xa.test(o)),r=o=>{let s=o.toLowerCase().match(/^[a-z]+/u)?.[0]??"";return n.find(a=>{let c=a.toLowerCase().match(/^licen[cs]e-([a-z]+)/u)?.[1];return c!==void 0&&s!==""&&(c.startsWith(s)||s.startsWith(c))})??(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 Mn=e=>e?.replace(/\.git$/u,""),fh=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&&Mn(r)?[n,Mn(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&&Mn(r)?[n,Mn(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))&&Mn(n.slice(r+1))?[n.slice(0,r),Mn(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,Mn(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&&Mn(r)?[n,Mn(r),t.slice(1)]:null}}]]),jF=new Map([...fh.values()].map(e=>[e.domain,e])),GF=new Set(["git+ssh:","ssh:","git+https:","git:","http:","https:","git+http:",...[...fh.keys()].map(e=>`${e}:`)]);function KF(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 Zd=e=>{try{return new URL(e)}catch{return null}};function qF(e){let t=e.indexOf("@"),n=e.indexOf(":"),r=GF.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(Zd(r))return Zd(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}`),Zd(s)}function YF(e){if(!e)return null;let t=qF(KF(e)?`github:${e}`:e);if(!t)return null;let n=fh.get(t.protocol.slice(0,-1)),r=n??jF.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 XF(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=YF(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=Zd(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 Ds(e){let[,t,n=""]=/^npm:((?:@[^/@]+\/)?[^/@]+)(?:@(.*))?$/iu.exec(String(e??"").trim())??[];return t?{name:t,spec:n}:null}var qS=e=>XF(e)==="registry";var JF=[["dependencies",null],["peerDependencies","peer"],["optionalDependencies","optional"]];function zs(e){let t=[];for(let[n,r]of JF)for(let[o,s]of Object.entries(e?.[n]??{})){let i=Ds(s)?.name??o;t.push({name:o,range:s,kind:r,opens:wl(i)&&qS(s)?i:null})}return t.toSorted((n,r)=>n.name.localeCompare(r.name)||(n.kind??"").localeCompare(r.kind??""))}function mh(e,t){let n=c=>new Map(zs(c).map(u=>[`${u.kind??""}\0${u.name}`,u])),r=n(t),o=n(e),s=[],i=[],a=[];for(let[c,{name:u,kind:p,range:f,opens:m}]of o){let h=r.get(c);h?h.range!==f&&i.push({key:c,name:u,kind:p,from:f,to:h.range,opens:h.opens}):a.push({key:c,name:u,kind:p,range:f,opens:m})}for(let[c,{name:u,kind:p,range:f,opens:m}]of r)o.has(c)||s.push({key:c,name:u,kind:p,range:f,opens:m});return{removed:a,added:s,changed:i}}var Qd=(e=[])=>e.map(({check:t,label:n,tooltip:r})=>d`<span class="${`npm-dependency-flag is-${t}`}" data-tooltip="${r}">${n}</span>`);function Pt(e,t=null,n=void 0){let r=An("risk",`${e.name}@${e.version}${t===null?"":`..${t}`}`,()=>mk(e.name,e.version,t,{signal:n}),wS);return r.status==="ready"?r:null}var ZF=/^https?:\/\/(?:www\.)?npmjs\.(?:com|org)\/package\/((?:@[^/]+\/)?[^/?#]+)(?:\/v\/([^/?#]+))?\/?(?:[?#].*)?$/u;function n1(e){let t=String(e??"").trim(),n=ZF.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!wl(r)||o!==null&&!gw(o)?null:{name:r,spec:o}}var Ca=(e,t=null)=>t==null?e:`${e}@${t}`;function QF(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=uh(o,n);s&&!r.includes(s)&&r.push(s)}return r}function eL(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 tL(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:QF(e.npm.manifest,r),risk:()=>Pt(e.npm)}}function _a(e,t="overview",n=null){return e?.npm?{view:"npm",packageName:e.npm.name,packageSpec:e.npm.version,bundleTab:$l.has(t)?t:"overview",...n}:null}var nL=3,YS=new Map,nn=new Map,rL=1e4,oL=5*6e4,XS=null;function eu(){let e=l.managedSession?`${l.managedSession.id}\0${l.managedSession.role}`:null;return e!==XS&&(YS.clear(),nn.clear(),XS=e),YS}function JS(e,t){let n=eu();for(n.delete(e.name),n.set(e.name,{entry:e,details:t});n.size>nL;)n.delete(n.keys().next().value)}async function r1(e,t,n){let r=eu().get(`${e}@${t}`);if(r)return JS(r.entry,r.details),r;let o=await ck(e,t,n),s=eL(o),i=tL(s,o);return s.npm.private||JS(s,i),sL(o),{entry:s,details:i}}function sL({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]&&nn.get(i)?.status!=="ready"&&nn.set(i,{status:"known",data:n[o]})}}function An(e,t,n,r){eu();let o=`${e}\0${t}`,s=nn.get(o);if(s?.status==="known"){let a={status:"ready",...r(s.data)};return nn.set(o,a),a}if(s&&!(s.status==="error"&&Date.now()>=s.retryAt))return s;let i={status:"loading",failures:s?.failures??0};return nn.set(o,i),n().then(a=>({status:"ready",...r(a)}),a=>{if(a?.name==="AbortError")return null;let c=i.failures+1,u=Math.min(rL*2**(c-1),oL);return{status:"error",failures:c,wait:u,retryAt:Date.now()+u}}).then(a=>nn.get(o)!==i?null:a===null?(nn.delete(o),null):(nn.set(o,a),a.status==="error"&&setTimeout(()=>{nn.get(o)===a&&E()},a.wait).unref?.(),iL(),null)).catch(()=>{}),i}var gh=!1;function iL(){gh||(gh=!0,queueMicrotask(()=>{gh=!1,E()}))}function Ra(e,t=void 0){return An("versions",e,()=>dk(e,{signal:t}),n=>({versions:n.versions??[],distTags:n.distTags??{},times:n.times??{},created:typeof n.created=="string"?n.created:null,private:n.private===!0,teamScoped:n.teamScoped===!0}))}function aL(e={}){let t=new Map;for(let[n,r]of Object.entries(e))t.set(r,[...t.get(r)??[],n]);return t}function o1(e,t,n=Date.now()){let r=aL(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&&s1(e,i,n)&&{age:vh(i,n)}}})}function s1(e,t,n=Date.now()){return e.status==="ready"&&ih(t,{minimumReleaseAge:e.teamScoped?0:sh,now:n})}var hh=new Intl.RelativeTimeFormat("en",{numeric:"auto"});function ZS(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/864e5),r=n<60?hh.format(-n,"day"):n<730?hh.format(-Math.floor(n/30.44),"month"):hh.format(-Math.floor(n/365.25),"year");return`${Ps(Date.parse(e))} \xB7 ${r}`}var bh=new Intl.RelativeTimeFormat("en",{numeric:"always"});function vh(e,t=Date.now()){let n=Math.max(0,Math.floor((t-Date.parse(e))/6e4));return n<60?bh.format(-n,"minute"):n<1440?bh.format(-Math.floor(n/60),"hour"):bh.format(-Math.floor(n/1440),"day")}var $h=e=>Ps(Date.parse(e)),i1=e=>`Published on ${$h(e)}`;function a1(e){let{name:t,version:n}=e.npm,r=Ra(t),o=o1(r,n).map(({id:s,detail:i,date:a,age:c})=>({id:s,name:`${t}@${s}`,displayLabel:s,format:"npm",detail:i,...a&&{date:a},...c&&{dateWarning:c}}));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 r1(t,s)).details,dependencies:fL,openDependency:gL,open:(s,i,a)=>yr(t,s,"compare",i?{compareSpec:i,...Po(a)}:{})}}function yr(e=null,t=null,n="overview",r={}){!C()||!Z?.active||Z.navigate(e==null?{view:"npm"}:{view:"npm",packageName:e,packageSpec:t,bundleTab:n,...r})}function yh(e,t=null){l.currentView="npm",l.npmLookup=e,l.npmOpening=t,l.currentManagedTeam=null,l.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),E({animate:!1})}var lL=/^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*)?$/u,cL=new Set(["overview","compare"]);async function l1(e,t,n){let{packageName:r,packageSpec:o=null,bundleTab:s="overview"}=e;if(r==null)return yh({input:l.npmLookup?.input??"",error:null}),n(),{view:"npm"};let i=Ca(r,o),a=l.currentView==="bundles"&&l.bundleDetails?.npm,c=a&&l.bundles?.[0]?.npm?.name===r&&l.bundles[0].npm.version===o?l.bundles[0]:null,u=c?l.bundleDetails:null;if(!c){let f=o!=null&&eu().has(`${r}@${o}`);!a&&!f&&(yh({input:i,error:null},{name:r,spec:o,tab:s}),n());let m=new AbortController;Ra(r,m.signal),o!=null&&lL.test(o)&&cL.has(s)&&Pt({name:r,version:o},null,m.signal);try{({entry:c,details:u}=await r1(r,o??"latest",{signal:Fe()}))}catch(h){return m.abort(),h?.name==="AbortError"||!t()?!1:(Sa=null,yh({input:i,error:h.message}),{view:"npm"})}if(!t()||!C())return m.abort(),!1}Sa?.name===r&&Sa.spec===o&&(d1([i,...kh().filter(f=>f!==i)]),Sa=null),Et();let p=l.bundleCompare?.bundle===c.integrity?l.bundleCompare:null;return s==="review"&&(l.npmReview={bundle:c.integrity,...e.reviewPackage?{reviewPackage:e.reviewPackage,reviewSpec:e.reviewSpec??null}:{}}),l.bundles=[c],dr(c.integrity,s),s==="code"&&e.file!=null&&(l.bundleCodeFileRequest={bundle:c.integrity,file:e.file,...e.line==null?{}:{line:e.line},...e.endLine==null?{}:{endLine:e.endLine}}),s==="compare"&&e.compareSpec!=null?l.bundleCompare={bundle:c.integrity,target:e.compareSpec,mode:vl(e.compareMode)}:p&&(l.bundleCompare=p),l.bundleDetails=u,l.npmLookup={input:c.name,error:null},l.npmOpening=null,l.currentManagedTeam=null,l.currentManagedReport=null,l.reports=[],document.body.classList.remove("report-fullscreen"),E({animate:!1}),n(),document.querySelector("#main-content")?.scrollTo({top:0}),_a(c,l.bundleDetailsTab,gr(l))}var dL=10,c1=()=>`deepview.npm.recent.${l.managedSession?.id??"anonymous"}`,Sa=null;function kh(){try{let e=JSON.parse(localStorage.getItem(c1())??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"&&n1(t)):[]}catch{return[]}}function d1(e){try{localStorage.setItem(c1(),JSON.stringify(e.slice(0,dL)))}catch{}}function uL(e){d1(kh().filter(t=>t!==e)),E()}function u1(e){let t=n1(e);if(!t){l.npmLookup={input:e??"",error:"Enter a package name, like lodash, @scope/name or name@1.2.3."},E();return}Sa=t,yr(t.name,t.spec)}function pL(e){e.preventDefault(),u1(e.currentTarget.querySelector('input[name="package"]')?.value)}function p1(){let e=l.npmLookup??{input:"",error:null},t=["admin","manage"].includes(l.managedSession?.role),n=kh();return d`<section class="npm-lookup" aria-labelledby="npm-lookup-title"><header class="npm-lookup-head"><span class="npm-lookup-icon" aria-hidden="true">${z(Eo)}</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="${pL}"><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??""}"> <button type="submit">Open</button></form><div class="npm-lookup-message">${e.error?d`<p class="npm-lookup-error" role="alert">${e.error}</p>`:g}</div>${n.length>0?d`<section class="npm-lookup-recent" aria-labelledby="npm-lookup-recent-title"><h2 id="npm-lookup-recent-title">Recent searches</h2><ul>${n.map(r=>d`<li><button type="button" class="npm-lookup-recent-open" @click="${()=>u1(r)}">${r}</button> <button type="button" class="npm-lookup-recent-remove" aria-label="${`Remove ${r} from recent searches`}" @click="${()=>uL(r)}">×</button></li>`)}</ul></section>`:g}</section>`}function fL(e,t){let n=mh(e?.npm?.manifest,t?.npm?.manifest),r=e?.npm&&t?.npm?Pt(t.npm,e.npm.version)?.dependencies:null,o=[e?.npm,t?.npm],s=(i,a)=>i.map(c=>({flags:[],...a?.find(({key:u})=>u===c.key),...c}));return{removed:n.removed,added:s(n.added,r?.added).map(i=>({...i,compared:o})),changed:s(n.changed,r?.changed)}}var f1=e=>{let t=Pt(e)?.dependencies;return new Map((t?.held??t?.added??[]).map(({key:n,flags:r})=>[n,r]))},m1=({kind:e,name:t})=>`${e??""}\0${t}`,mL=/^(?:[\^~]|=)?v?(\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?)$/u,QS=e=>mL.exec(Ds(e)?.spec??e.trim())?.[1]??null,e1=e=>Ds(e)?.name??null;function gL({opens:e,from:t,to:n}){if(!e)return;let r=n&&QS(n),o=t&&QS(t);!o||!r||o===r||e1(t)!==e1(n)?yr(e):yr(e,r,"compare",{compareSpec:o})}function g1(e){let t=zs(e.npm.manifest);if(t.length===0)return g;let n=f1(e.npm);return In({title:"Dependencies",count:t.length,list:!0,body:d`<ul class="bundles-sources-list npm-dependency-list">${t.map(r=>{let{name:o,range:s,kind:i,opens:a}=r,c=n.get(m1(r))??[],u=d`<span class="npm-dependency-name"><span class="bundles-source-path" data-tooltip-truncated data-tooltip="${o}">${o}</span>${Qd(c)}</span> ${i?d`<span class="npm-dependency-kind">${i}</span>`:g} <span class="bundles-source-size" data-tooltip-truncated data-tooltip="${s}">${s}</span>`;return d`<li>${a?d`<button type="button" class="bundles-source-row npm-dependency-row" data-npm-dependency="${a}" @click="${()=>yr(a)}">${u}</button>`:d`<div class="bundles-source-row npm-dependency-row is-resource">${u}</div>`}</li>`})}</ul>`})}var hL=[["source","Non-registry",()=>"From elsewhere than npm's registry"],["unimported","Unimported",e=>`Imported by nothing of ${e}`]];function bL(e){let t=f1(e),n=Map.groupBy(zs(e.manifest).flatMap(r=>(t.get(m1(r))??[]).map(({check:o})=>({...r,check:o}))),({check:r})=>r);return hL.filter(([r])=>n.has(r)).map(([r,o,s])=>d`<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 yL(e,t){let{name:n,version:r}=e.npm,o=An("tags",`${n}@${r}`,()=>fk(n,r),s=>({tags:Array.isArray(s.tags)?s.tags.filter(i=>typeof i=="string"&&i):[]}));return o.status!=="ready"||o.tags.length===0?g:d`<span class="bundle-origin-tags">${o.tags.map(s=>d`<a class="bundle-origin-link bundle-tag-link" href="${Bg(t,s)}" target="_blank" rel="noopener noreferrer">${z(il)}<span>${s}</span></a>`)}</span>`}function Ws(e,t,n=e){let r=n===e||n===`./${e}`?g:`./${e}`;return t?.has(e)?d`<button type="button" class="bundle-entry-point" data-bundle-view-source="${e}" data-tooltip="${r}">${n}</button>`:n}function t1(e,t,n){let r=e.knownAccounts?.includes(t);return d`<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 wL=/^\s*(Package no longer supported\.)\s+Contact Support at https:\/\/www\.npmjs\.com\/support for more info\.\s*$/u,xh=e=>e.replace(wL,"$1");function Sh(e,{prefix:t="",githubFigures:n=g,provenance:r=g,provenanceNamesBuilder:o=!1,files:s=null}={}){let{manifest:i}=e.npm,a=i.github?.github,c=a?Nd({repo:{github:a,directory:i.github.directory??"",commit:i.gitHead}})[0]:null,u=Ra(e.npm.name),p=e.npm.published??u.times?.[e.npm.version];return d`<dl class="bundles-detail-meta npm-facts">${e.npm.private?d`<dt>Access</dt><dd>Private</dd>`:g} ${i.deprecated?d`<dt>Deprecated</dt><dd class="npm-deprecated">${xh(i.deprecated)}</dd>`:g} ${i.description?d`<dt>Description</dt><dd>${i.description}</dd>`:g} ${i.license?d`<dt>License</dt><dd>${KS(i.license,[...s??[]]).map(({text:f,file:m})=>Ws(m,s,f))}</dd>`:g} ${i.author?d`<dt>Author</dt><dd class="bundle-origin-row">${i.authorAccount?d`${t1(i,i.authorAccount,i.author)}${i.author===i.authorAccount?g:d`<span class="npm-publisher">~${i.authorAccount}</span>`}`:i.author}</dd>`:g} ${i.publisher&&i.publisher!==i.authorAccount?d`<dt>Publisher</dt><dd class="bundle-origin-row">${t1(i,i.publisher,`~${i.publisher}`)}</dd>`:i.trustedPublisher&&!o?d`<dt>Publisher</dt><dd class="npm-trusted-publisher">${i.trustedPublisher}</dd>`:g} ${p?d`<dt>Published</dt><dd>${s1(u,p)?d`<span class="npm-recent">${ZS(p)}</span>`:ZS(p)}</dd>`:g} ${c?d`<dt>GitHub</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${c.href}" target="_blank" rel="noopener noreferrer">${z(Vt)}<span>${c.text}</span></a> ${n}</dd><dt>Commit</dt><dd class="bundle-origin-row">${c.commit?d`<a class="bundle-origin-link bundle-commit-link" href="${c.commit.href}" data-tooltip="${c.commit.hash}" data-tooltip-icon="commit" target="_blank" rel="noopener noreferrer">${z(sl)}<span>${c.commit.text}</span></a> ${yL(e,a)}`:d`<span class="npm-commit-missing">Not recorded at publish</span>`}</dd>`:g} ${r===g?g:d`<dt>Provenance</dt><dd class="bundle-origin-row">${r}</dd>`} ${i.homepage&&/^https?:\/\//iu.test(i.homepage)?d`<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?d`<dt>Prefix</dt><dd class="mono">${t}</dd>`:g}</dl>`}var vL=(e,t)=>e.split(/(\s+)/u).map(n=>{let r=n.replace(/^\.\//u,"");return t?.has(r)?Ws(r,t,n):n});function h1(e,t=null,n=null){let{manifest:r}=e.npm,o=["main","module","types"].filter(p=>typeof r[p]=="string").map(p=>({label:`${p[0].toUpperCase()}${p.slice(1)}`,path:r[p],file:uh(r[p],t)??ph(r[p])})),s=o.find(p=>p.label==="Main"),i=o.find(p=>p.label==="Module");s&&i&&s.file===i.file&&(s.label="Main, Module",o.splice(o.indexOf(i),1));let a=Object.keys(r.bin??{}),c=va(r,t),u=zs(r).length;return d`${o.map(({label:p,path:f,file:m})=>d`<dt>${p}</dt><dd class="mono"><span class="npm-entry-point">${bn(m,Do(n,m))}${Ws(m,t,f)}</span></dd>`)} ${r.type?d`<dt>Type</dt><dd class="mono">${r.type}</dd>`:g} ${a.length>0?d`<dt>Bin</dt><dd class="mono">${a.join(", ")}</dd>`:g} ${r.engines?d`<dt>Engines</dt><dd class="mono">${Object.entries(r.engines).map(([p,f])=>`${p} ${f}`).join(", ")}</dd>`:g} ${c.length>0||r.hasInstallScript?d`<dt>Install scripts</dt><dd class="npm-install-scripts">${c.length===0?"Yes":c.map(([p,f])=>d`<div class="npm-install-script"><span class="npm-install-script-name">${p}</span><code>${vL(f,t)}</code></div>`)}</dd>`:g}<dt>Dependencies</dt><dd class="npm-dependencies-fact">${Yd("dependencies",u,u===0?"None":u)}${bL(e.npm)}</dd>`}var wh=class extends _t{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=o1(t,this.version).map(({id:r,detail:o,date:s,age:i})=>({value:r,label:r,detail:o,secondary:s,...i&&{secondaryWarning:i}}));return d`<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&&yr(this.name,r.detail.value,this.tab)}}"></bundle-selector>`}};customElements.get("npm-version-select")||customElements.define("npm-version-select",wh);var b1=d`<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 $L=new Map([["registry",{label:"Source: npm registry",icon:Tw}],["repository",{label:"Source: GitHub repository",icon:z(Vt)}],["osv",{label:"Source: OSV",icon:b1}]]);function kL(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function xL(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var tu=d`<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 SL(e){let t=/^CWE-(\d+)$/u.exec(e);if(!t)return d`<span>${e}</span>`;let n=`https://cwe.mitre.org/data/definitions/${t[1]}.html`;return d`<a class="bundle-advisory-cwe" href="${n}" target="_blank" rel="noopener noreferrer">${e}</a>`}function CL(e,t){return d`<div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${e}`}">${kL(e)}</span> ${typeof t=="number"?d`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${t.toFixed(1)}</span></span>`:g}</div>`}function _L(e){let t=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,n=e.ghsa??xL(t)??(typeof e.id=="string"?e.id:null),r=$L.get(e.source);return!r&&!(n&&t)?g:d`<span class="bundle-advisory-reference">${r?d`<span class="bundle-advisory-source" role="img" aria-label="${r.label}">${r.icon}</span>`:g} ${n&&t?d`<a class="bundle-advisory-ghsa" href="${t}" target="_blank" rel="noopener noreferrer">${n}${tu}</a>`:g}</span>`}function RL(e){let t=Array.isArray(e)?e.filter(n=>typeof n=="string"):[];return t.length>0?d`<span class="bundle-advisory-cwes">${t.map((n,r)=>d`${r===0?"":", "}${SL(n)}`)}</span>`:g}function nu(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 d`<li class="bundle-advisory-row">${CL(e.severity,e.cvss?.score)}<div class="bundle-advisory-body"><div class="bundle-advisory-header">${t&&typeof e.details=="string"&&e.details.trim()?d`<button type="button" class="bundle-advisory-title" aria-haspopup="dialog" @click="${()=>t(e)}">${e.title}</button>`:d`<span class="bundle-advisory-title">${e.title}</span>`} ${_L(e)}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${e.informational?d`<span>${e.informational}</span>`:g} ${r?d`<span>Affected <span class="mono">${r}</span></span>`:g} ${o.length>0?d`<span>Matches <span class="mono">${o.join(", ")}</span></span>`:g} ${RL(e.cwe)}</div>${n?d`<div class="bundle-advisory-cvss-vector mono">${n}</div>`:g}</div></div></li>`}var y1=`.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}}
|
|
145
|
-
`;var w1=`.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}
|
|
146
|
-
`;var ru=`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}
|
|
147
|
-
`;var Ch=class extends N{static styles=[...N.styles,P(y1),P(w1),P(Wc),P(ru)];static properties={heading:{attribute:!1},severity:{attribute:!1},_body:{state:!0}};connectedCallback(){super.connectedCallback(),this._dispose=kn(()=>{if(!this.isCurrent()){this._body=g,queueMicrotask(this._onClose);return}this._body=nt(qn(this.markdown))})}disconnectedCallback(){this._dispose?.(),super.disconnectedCallback()}render(){return d`<dialog aria-labelledby="advisory-title" @close="${this._onClose}"><header><h3 id="advisory-title">${Hc(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",Ch);function ou(e){return ee("advisory-details-dialog",e)}var v1=`.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}
|
|
148
|
-
`;var $1=`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}}
|
|
149
|
-
`;var _h=class extends N{static styles=[...N.styles,P(v1),P(ru),P($1)];static properties={heading:{attribute:!1},groups:{attribute:!1},_current:{state:!0}};connectedCallback(){super.connectedCallback(),this._dispose=kn(()=>{this._current=this.isCurrent(),this._current||queueMicrotask(this._onClose)})}disconnectedCallback(){this._dispose?.(),super.disconnectedCallback()}render(){return d`<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=>d`<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",_h);function k1(e){return ee("npm-compare-advisories-dialog",e)}var x1=(e,t)=>Tn(e,t).runsCode,Ta=(e,t=e.length>=fp)=>e.length===1?`line ${e[0]}`:`lines ${e.slice(0,5).join(", ")}${e.length>5?` and ${(e.length-5).toLocaleString("en")}${t?"+":""} more`:""}`,FL=/^[\w$.]+$/u,S1=(e,t=null)=>[...Map.groupBy([...e],([n])=>{let{name:r,tag:o}=Ur.get(n);return r&&FL.test(r)?r:o})].map(([n,r])=>{let o=[...new Set(r.flatMap(([,s])=>s))].toSorted((s,i)=>s-i);return`${n} (${Ta(o,r.some(([,s])=>s.length>=fp))}${r.some(([s])=>t?.has(s))?", new":""})`}).join(", "),Rh=e=>{let t=new Set(e.flat());return t.size===1?[...t][0]:void 0},Th=(e,t)=>t===void 0?{path:g,line:g}:{path:e,line:t},C1=(e,t=null)=>[...e].map(([n,r])=>`${Ur.get(n).name} (${Ta(r)}${t?.has(n)?", new":""})`).join(", ");function _1(e,t,n){return e?[...Map.groupBy(e,([r])=>Ur.get(r).tag)].map(([r,o])=>{let{note:s,mark:i}=Ur.get(o[0][0]),a=o.map(([f,m])=>[Ur.get(f).name,Ta(m)]),c=t===void 0?[]:o.filter(([f])=>!t?.has(f)).map(([f])=>Ur.get(f).name),u=c.length===0?null:c.length===o.length?"New in this version":`New in this version: ${c.join(", ")}`,p=Th(n,n===void 0?void 0:Rh(o.map(([,f])=>f)));return d`<span data-bundle-view-source="${p.path}" data-bundle-view-line="${p.line}" class="${`npm-runs-code${i?` is-${i}`:""}`}" data-tooltip="${[`${s}: ${a.map(f=>f.join(", ")).join("; ")}`,u].filter(Boolean).join(" \xB7 ")}" .tooltipContent="${d`<div class="compare-tip"><div class="compare-tip-head">${s}</div><div class="compare-tip-rows is-files">${a.map(([f,m])=>d`<span class="compare-tip-path">${f}</span><span class="compare-tip-said">${m}</span>`)}</div>${u?d`<div class="compare-tip-notice">${u}</div>`:g}</div>`}">${r}</span>`}):g}var Ih=(e,t)=>Tn(e,t).exfiltration,R1=e=>[...gp].filter(([t])=>e.some(n=>n.has(t))).map(([,{name:t}])=>t).join(", "),Mh=(e,t)=>[...e].map(([n,r])=>`${gp.get(n).name} (${Ta(r)}${t!==void 0&&!t?.has(n)?", new":""})`).join(", "),LL=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 T1(e,t,n){return e?El(e).map(([r,o])=>{let s=Th(n,n===void 0?void 0:Rh([...o.values()]));return d`<span data-bundle-view-source="${s.path}" data-bundle-view-line="${s.line}" class="${`npm-exfiltration is-${Fl(r,o,t)}`}" data-tooltip="${`${LL.get(r)}: ${Mh(o,t)}`}">${r}</span>`}):g}var Ah=e=>e.toLowerCase().replaceAll(" ","-");var I1=({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 Eh={accept:"Accept","accept-with-nits":"Accept with nits (non-blocking)","request-changes":"Request changes",reject:"Reject"};function Sj(e,t){return[e,t].every(n=>n===void 0||typeof n=="string")&&[e,t].some(n=>typeof n=="string")}function A1(e,t,n=[]){let r=Object.keys(Eh),o=new Set(n??[]),s=e.filter(u=>n!==null&&!o.has(u.file)&&r.includes(u.status)),i=r.findLast(u=>s.some(p=>p.status===u))??"accept";if(t===null)return{coverage:null,checkedFiles:null,totalFiles:null,verdictLimit:i};let a=new Set(s.map(u=>u.file)),c=t.filter(u=>a.has(u)).length;return{coverage:c===t.length?"full":"partial",checkedFiles:c,totalFiles:t.length,verdictLimit:i}}function Cj(e,t="accept"){let n=Object.keys(Eh);return n.slice(Math.max(n.indexOf(t),n.indexOf(A1(e,null).verdictLimit)))}function su({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 E1(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")||su({npm:e})||i.some(a=>a.type==="malware")||s.some(a=>I1(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 _j(e,t,n=[]){return A1(e,t,n).coverage==="partial"&&(n===null||n.includes("package.json")||!e.some(r=>r.file==="package.json"&&Object.keys(Eh).includes(r.status)))}var NL=e=>e.replaceAll(/[\\`*_{}[\]<>]/gu,"\\$&").replaceAll(/\r\n?/gu,`
|
|
150
|
-
`).replaceAll(`
|
|
151
|
-
`,`
|
|
152
|
-
`);function OL(e){return e.replaceAll(/\r\n?/gu,`
|
|
153
|
-
`).split(/(?:^|\n)[\t ]*\*[\t ]+/u).map((t,n)=>({text:t.trim(),bullet:n>0})).filter(t=>t.text)}function M1(e,t=""){return OL(e).map(n=>`* ${t}${n.text.replaceAll(`
|
|
154
|
-
`,`
|
|
155
|
-
`)}`)}function Rj(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=>M1(o.comment,`In ${NL(o.file)}: `)),...M1(e.comment)];return`Audited:
|
|
156
|
-
\`\`\`
|
|
157
|
-
${n}
|
|
158
|
-
\`\`\`${r.length>0?`
|
|
159
|
-
|
|
160
|
-
Notes:
|
|
161
|
-
${r.join(`
|
|
162
|
-
`)}`:""}`}var Aa=["critical","high","moderate","low","unknown"],zh=e=>Aa.includes(e.severity)?e.severity:"unknown",BL=[["affects",e=>`Affects ${e}`],["later",()=>"Later versions"],["fixed",e=>`Fixed in ${e}`]];function Wh(e){return An("stats",e,()=>uk(e),t=>({downloads:t.downloads??null,github:t.github??null}))}function Hh(e){return An("advisories",e,()=>pk(e),t=>({versions:t.versions??[],advisories:t.advisories??[],repository:t.repository!==!1,keptAt:t.keptAt??null}))}function Uh(e){let{name:t,version:n}=e.npm,r=(o,s)=>d`<a class="npm-package-link" href="${o}" target="_blank" rel="noopener noreferrer">${s}${tu}</a>`;return d`<span class="npm-package-links">${r(`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`,"npmjs")} ${e.npm.private?g:r(cu(e),"socket.dev")}</span>`}var cu=e=>`https://socket.dev/npm/package/${e.npm.name}/overview/${encodeURIComponent(e.npm.version)}`;function Fa(e){let{name:t,version:n}=e.npm;if(e.npm.private)return null;let r=An("socket",`${t}@${n}`,()=>gk(t,n),o=>({socket:o.socket??null}));return r.status==="ready"?r.socket:null}var P1=[["supplyChain","Supply chain",85,85],["vulnerability","Vulnerability",85,85],["quality","Quality",70,80],["maintenance","Maintenance",70,80],["license","License",80,80]],PL=50,Oh=(e,t)=>e===100?"is-good is-max":e>=t?"is-good":e>=50?"is-fair":"is-poor",iu=e=>d`<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 DL(e){let t=Fa(e)?.scores;return t?d`<ul class="npm-extensions npm-socket-scores" aria-label="Socket scores">${P1.map(([n,r,,o])=>{let s=Math.round(t[n]*100);return d`<li><a class="${`npm-extension npm-socket-score ${Oh(s,o)}`}" href="${cu(e)}" target="_blank" rel="noopener noreferrer">${iu(s)}<span>${r}</span><span class="npm-extension-count">${s}</span></a></li>`})}</ul>`:g}var Vh=new Map([["critical","critical"],["high","high"],["middle","moderate"],["low","low"]]),au=e=>e.replaceAll(/(?<=[a-z])(?=[A-Z])/gu," ").toLowerCase().replace(/^./u,t=>t.toUpperCase()),zL=new Map,Fh=new WeakMap;function jh(e){let t=e?Fa({npm:e}):null;return t?(Fh.has(t)||Fh.set(t,Map.groupBy(t.alerts.filter(n=>n.file),n=>n.file)),Fh.get(t)):zL}var Gh=(e=[])=>e.map(t=>{let n=Vh.get(t.severity)??"low";return d`<span class="${`npm-socket-file-alert sev-${n}`}" data-tooltip="${`Socket: ${au(t.type)}, ${n}${t.note?` \xB7 ${t.note}`:""}`}">${au(t.type)}</span>`});function D1(e,t){return E1(e.npm,Hh(e.npm.name),Fa(e),Pt(e.npm,t?t.npm?.version??"(empty)":null))}function z1(e,t){let n=su(e),o=n&&t!==null&&[...t].every(Ea)?[]:Fa(e)?.alerts??[];if(!n&&o.length===0)return g;let s=[...t??[]].find(i=>/^readme(?:\.md)?$/iu.test(i));return d`<div class="npm-alerts">${n?d`<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?d`: ${Ws(s,t,"its readme")}`:""}.</p>`:g} ${o.length>0?WL(e,o,t):g}</div>`}function WL(e,t,n){return d`<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="${cu(e)}" target="_blank" rel="noopener noreferrer">socket.dev${tu}</a></span><ul>${t.map(r=>{let o=Vh.get(r.severity)??"info";return d`<li><span class="${`bundle-advisory-severity sev-${o}`}">${o}</span> <span class="npm-socket-alert-type">${au(r.type)}</span> ${r.file?d`<span class="npm-socket-alert-file">in ${Ws(r.file,n)}</span>`:g} ${r.note?d`<p class="npm-socket-alert-note">${r.note}</p>`:g}</li>`})}</ul></div>`}function W1(e,t,n=g){let r=Wh(e.npm.name),o=uC(Pt(e.npm)?.findings.find(({id:s})=>s==="popularity"));return d`<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">${Uh(e)}${t}</div>${n}</div>`}var HL=d`<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>`,UL=d`<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>`,VL=d`<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>`,jL=d`<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 Kh(e){if(!e.npm.manifest.github?.github)return g;let t=Wh(e.npm.name),n=t.status==="ready"?t.github:null;if(!n)return g;let r=(i,a,c,u)=>d`<a class="bundle-origin-link npm-github-figure" href="${`https://github.com/${Ld(n.repo)}/${u}`}" data-tooltip="${`${a.toLocaleString("en")} ${c}`}" target="_blank" rel="noopener noreferrer">${i}<span>${$a.format(a)}</span></a>`,o=typeof n.openPulls=="number"?n.openPulls:null,s=o===null?n.openIssues:Math.max(n.openIssues-o,0);return d`${r(HL,n.stars,n.stars===1?"star":"stars","stargazers")} ${r(jL,n.forks,n.forks===1?"fork":"forks","forks")} ${r(UL,s,o===null?"open issues and pull requests":s===1?"open issue":"open issues","issues")} ${o===null?g:r(VL,o,o===1?"open pull request":"open pull requests","pulls")} ${n.archived?d`<span class="npm-github-archived">Archived</span>`:g}`}var H1=({name:e,version:t,private:n,manifest:r})=>n||!r.provenance?null:An("provenance",`${e}@${t}`,()=>hk(e,t),o=>({provenance:o.provenance??null}));function qh(e){let t=H1(e);return t!==null&&(t.status==="loading"||!!t.provenance?.builder)}function GL(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 KL=(e,t)=>t?t==="github-hosted"||t==="gitlab-hosted":e==="GitHub Actions";function Yh(e){if(e.npm.private)return g;let t=H1(e.npm);if(!t)return d`<span class="npm-commit-missing">None</span>`;if(t.status==="loading")return d`<span class="npm-commit-missing">Checking…</span>`;if(t.status==="error")return d`<span class="npm-commit-missing">Couldn't be read</span>`;if(!t.provenance)return d`<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:c,logIndex:u,runner:p}=t.provenance,f=($,S,_=g)=>d`<a class="bundle-origin-link" href="${$}" data-tooltip="${_}" target="_blank" rel="noopener noreferrer"><span>${S}</span></a>`,m=/^https:\/\/github\.com\/([^/]+\/[^/]+)$/u.exec(r)?.[1]??null,h=GL(a,p),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(),k=s?.split("/").at(-1),x=[s?m&&o?f(`${r}/blob/${o}/${s.split("/").map(encodeURIComponent).join("/")}`,k,s===k?g:s):d`<span class="mono" data-tooltip="${s===k?g:s}">${k}</span>`:g,c?f(c,"Run"):g,u===null?g:f(`https://search.sigstore.dev/?logIndex=${u}`,"Transparency log")].filter($=>$!==g);return d`<span class="npm-provenance"><span class="npm-provenance-line">${h?d`<span class="${KL(h,p)&&!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?d`<span class="npm-provenance-warning" data-tooltip="${`The package names ${w}`}">Not the repository it names</span>`:g}</span> ${x.length>0?d`<span class="npm-provenance-line is-how">${x.map(($,S)=>S===0?$:d`<span class="npm-provenance-sep" aria-hidden="true">·</span>${$}`)}</span>`:g}</span>`}function qL(e,t,n){let r=e.affected.map(o=>t[o]).filter(Boolean);return r.includes(n)?"affects":r.length>0&&r.every(o=>zv(o,n)<0)?"fixed":"later"}function U1(){let e=l.managedSession?.id;return()=>l.managedSession?.id===e}function V1(e,t){return nu({...e,title:e.title??e.id,severity:zh(e),cvss:{score:e.cvss},vulnerable_versions:e.range},({title:n,severity:r,details:o})=>ou({heading:n,severity:r,markdown:o,isCurrent:t}))}function j1(e){let{name:t,version:n}=e.npm,r=Hh(t),o=U1(),s=r.status==="ready",i=s?r.advisories:[],a=i.map(m=>qL(m,r.versions,n)),c=BL.map(([m,h])=>({status:m,heading:h(n),advisories:i.filter((b,y)=>a[y]===m)})).filter(m=>m.advisories.length>0),u=a.filter(m=>m==="affects").length,p=s&&r.keptAt?d`<p class="npm-advisories-note">GitHub's repository advisories are as of ${Qh(Date.now()-Date.parse(r.keptAt))} ago: they couldn't be checked now.</p>`:s&&!r.repository?d`<p class="npm-advisories-note">GitHub's repository advisories couldn't be checked; npm's are shown.</p>`:g,f=r.status==="loading"?d`<p class="bundles-overview-col-empty">Checking advisories…</p>`:r.status==="error"?d`<p class="bundles-overview-col-empty">Couldn't check advisories.</p>`:c.length===0?d`${p}<p class="bundles-overview-col-empty">No advisories for any version.</p>`:d`${p}${c.map(m=>d`<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=>V1(h,o))}</ul></section>`)}`;return In({title:"Advisories",count:s?i.length:"\u2026",body:f,className:"npm-advisories-col",extra:s?d`<span class="${`npm-advisories-active${u>0?" is-active":""}`}">${u} active</span>`:g})}var YL=[...At].filter(([,{mark:e}])=>e!==null).map(([e])=>e),XL=[...At].filter(([,{mark:e}])=>e===null).map(([e])=>e),F1=[null,"notice","warn"];function G1(e){let t=new Map,n=new Map,r=0;for(let o of e){let s=Ho(o);for(let i of s){t.set(i,(t.get(i)??0)+1);let a=Uo(o,i);F1.indexOf(a)>F1.indexOf(n.get(i)??null)&&n.set(i,a)}s.some(i=>At.get(i).mark)&&r++}return{counts:t,marks:n,unreadable:r}}var L1=new WeakMap;function wr(e){let t=e.npm?Gd(e):e,n=L1.get(e);if(n?.of!==t){let{sources:r,sourcesContent:o}=e.json,s=new Map(r.map((h,b)=>[h,$S(e,h,o[b])]).filter(([,h])=>h)),i=new Set(r.filter((h,b)=>typeof o[b]!="string")),{counts:a,marks:c,unreadable:u}=G1(s.values()),p=pi(e),f=yn(e),m={files:0,lines:0,unpacked:0};for(let h of r.filter(b=>!Ea(b)))i.has(h)||m.files++,m.lines+=p.get(h)??0,m.unpacked+=f.get(h)??0;n={of:t,paths:new Set(r),byPath:s,counts:a,marks:c,unreadable:u,sizes:f,extensions:new Map(r.map(h=>[h,eb(h)])),binaries:new Set([...i].toSorted((h,b)=>h.localeCompare(b))),types:xN(r,f,p),content:m},L1.set(e,n)}return n}var lu={key:null,chip:null},K1=e=>`${e.npm.name}@${e.npm.version}`,q1=e=>lu.key===K1(e)?lu.chip:null;function Y1(e){let t=q1(e);return t&&{label:t.label,keeps:t.keeps,clear:()=>{lu={key:null,chip:null},E()}}}function Bh(e,t,n,r,{classes:o="",tooltip:s=g}={}){let i=q1(e)?.id===t.id;return d`<li><button type="button" class="${`npm-extension npm-category${o}`}" aria-pressed="${String(i)}" data-tooltip="${s}" @click="${()=>{lu={key:K1(e),chip:i?null:t},E()}}">${n}<span class="npm-extension-count">${r.toLocaleString("en")}</span></button></li>`}function X1(e,t,n){let{name:r}=At.get(n),{byPath:o,counts:s,marks:i}=wr(t),a=i.get(n);return Bh(e,{id:`category:${n}`,label:r,keeps:c=>o.has(c)&&Ho(o.get(c)).includes(n)},d`<span>${r}</span>`,s.get(n),{classes:a?` is-${a}`:""})}function J1({counts:e,marks:t,unreadable:n},r,o,s){let i=YL.filter(c=>e.has(c));if(i.length===0)return g;let a=i.some(c=>t.get(c)==="warn");return d`<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 Z1(e,t){return J1(wr(t),t.json.sources.length,"files",n=>X1(e,t,n))}function Xh(e,t,n=!1,r=void 0){let{byPath:o,sizes:s}=wr(e),i=n?t:void 0;return d`${_1(x1(e,t),void 0,i)}${T1(Ih(e,t),Q1(r),i)}${_S(e,t,s.get(t))}${CS(o.get(t))}`}var Q1=e=>e===void 0||e?.details.npm&&!Gd(e.details)?void 0:e&&Ih(e.details,e.path);function Jh(e,t,n=[],r=void 0){let{stamps:o,exfiltration:s}=Tn(e,t),i=Q1(r),a=i===void 0?null:new Map(El(s).map(([c,u])=>[c,Fl(c,u,i)]));return[...n.map(c=>({name:au(c.type),severity:Vh.get(c.severity)??"low"})),...o.map(c=>a?.has(c.name)?{...c,severity:a.get(c.name)}:c)]}var Lh=new WeakMap;function JL(e,t){let n=e&&t?.npm?Pt(t.npm,e.npm?.version??"(empty)"):null;if(!n)return null;if(!Lh.has(n)){let r=new Map;for(let{host:o,places:s}of Zh(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}]);Lh.set(n,r)}return Lh.get(n)}function ZL(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 d`<span class="npm-new-host" data-tooltip="${`${t}: ${e.map(({host:o,line:s})=>`${o}, line ${s}`).join("; ")} \xB7 ${r}`}" .tooltipContent="${d`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${e.map(({host:o,line:s})=>d`<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 eC={icon:(e,t)=>bn(e,t.map(([n,r])=>Do(n,r)).find(Rw)),alerts:e=>jh(e?.npm),alertTags:Gh,newHosts:JL,newHostTag:ZL,tag:(e,t,n)=>Xh(e,t,!1,n),flags:(e,t,n)=>Jh(e,t,[],n),warning(e,t){let{byPath:n}=wr(e),r=G1(t.filter(i=>n.has(i)).map(i=>n.get(i))),{counts:o,marks:s}=r;return J1(r,t.length,t.length===1?"file added or changed":"files added or changed",i=>{let{name:a}=At.get(i),c=s.get(i);return d`<li><span class="${`npm-extension is-${c}`}"><span>${a}</span><span class="npm-extension-count">${o.get(i).toLocaleString("en")}</span></span></li>`})}},QL=new Map([["malware","Malware"],["deprecated","Deprecated"],["publisher","Publisher"],["provenance-lost","Provenance lost"],["held-install-scripts","Install scripts"],["held-non-registry-deps","Non-registry deps"],["held-unused-deps","Unused deps"],["held-runs-code","Runs code"],["held-credentials","Credentials"],["held-exfiltration","Exfiltration"],["held-remote","Remote"],["held-ip-lookup","IP lookup"],["held-obfuscated","Obfuscated"],["large-code","Large new code"],["now-unreadable","Now unreadable"],["binary-code","Binary code"],["new-hosts","New hosts"],["popularity","Few downloads"]]),eN={critical:"is-critical",high:"is-warn",moderate:"is-moderate",low:"is-low"},tN=e=>e>=730?`${Math.floor(e/365)} years`:e>=60?`${Math.floor(e/30)} months`:`${e} days`;function tC(e){let t=e?.score;if(!t)return g;let{score:n,level:r,raised:o,lowered:s}=t,i=o.map(({id:u,severity:p})=>[QL.get(u)??u,p]),a=s&&i.length>0?`Lowered by ${Math.round(s.by*100)}%: out ${tN(s.days)}${s.tier===null?"":`, its package npm's ${ka(s.tier)} by downloads`}`:null,c=[`Risk ${n} of 100`,...i.length===0?["Nothing found that calls for a look"]:i.map(([u,p])=>`${u}, ${p}`),...a?[a]:[]].join(`
|
|
163
|
-
`);return d`<li><span class="${`npm-extension npm-risk-score ${eN[r]}`}" data-tooltip="${c}" .tooltipContent="${d`<div class="compare-tip"><div class="compare-tip-head">Risk ${n} of 100</div>${i.length===0?d`<span class="compare-tip-none">Nothing found that calls for a look</span>`:d`<div class="compare-tip-rows">${i.map(([u,p])=>d`<span class="npm-risk-finding">${u}</span><span class="${`compare-tip-said npm-risk-severity sev-${p}`}">${p}</span>`)}</div>`} ${a?d`<div class="compare-tip-note">${a}</div>`:g}</div>`}">${iu(n)}<span>Risk</span><span class="npm-extension-count">${n}</span></span></li>`}var nC=(e,t)=>[oN(t.get("malware")),sN(t.get("deprecated")),lN(e,t.get("publisher")),cN(e,t.get("provenance-lost")),dN(e,t.get("held-install-scripts")),...fN(e,t),...uN(e,t),pN(t.get("new-hosts")),mN(t.get("too-new"))],Zh=e=>new Map((e?.findings??[]).map(t=>[t.id,t]));function rC(e,t){if(!e||!t?.npm)return g;let n=[e.npm??{name:t.npm.name,version:"Empty package",private:!0},t.npm],r=sC(n),o=Pt(t.npm,e.npm?.version??"(empty)"),s=Zh(o),i=[tC(o),...nC(n,s),cC(n,r),...dC(n,r,s.get("malware")),yN(t.npm.name,s.get("popularity"))].filter(a=>a!==g);return i.length===0?g:d`<ul class="npm-extensions npm-compare-badges" aria-label="Versions at a glance">${i}</ul>`}function oC(e){let{npm:t}=e,n=sC([t]),r=Pt(t),o=Zh(r),s=r?.oldVersion?[{name:t.name,version:r.oldVersion},t]:[t],i=[tC(r),...nC(s,o),cC([t],n),...dC([t],n,o.get("malware"))].filter(a=>a!==g);return i.length===0?g:d`<ul class="npm-extensions npm-overview-badges" aria-label="Version at a glance">${i}</ul>`}function nN(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?Ph("npm-compare-unreadable","Now unreadable",t,n):go(`${du[e.severity]} npm-held-file npm-compare-unreadable`,"Now unreadable",t,n)}var du={critical:"is-critical",high:"is-warn",moderate:"is-moderate"},rN=e=>[...mp.keys()].map(t=>{let n=e.get(`held-${Ah(t)}`),r=n?.files??[],o=s=>s.added?new Map([...s.found].filter(([i])=>!s.added.has(i))):void 0;return go(`${du[n?.severity]} npm-held-file npm-files-${Ah(t)}`,t,r,s=>Mh(s.found,o(s)),R1(r.map(s=>s.found)))});function sC(e){let t=Hh(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 iC=(e,t)=>e===t?`${t??"\u2013"}`:`${e??"\u2013"} \u2192 ${t??"\u2013"}`,aC=e=>Aa.find(t=>e.some(n=>zh(n)===t));function oN(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 d`<li><span class="npm-extension npm-malware" data-tooltip="${t.join(`
|
|
164
|
-
`)}">Malware</span></li>`}function sN(e){return e?d`<li><span class="npm-extension npm-compare-deprecated" data-tooltip="${xh(e.message)}">Deprecated</span></li>`:g}var iN={critical:"is-from-known",high:"is-to-unknown"},aN={known:"is-known",maintainer:"is-maintainer"},N1={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 lN([e,t],n){if(!n)return g;let{was:r,now:o,wasKnown:s,nowKnown:i,severity:a,major:c}=n,u=n.wasStanding??(s?"known":"unknown"),p=n.nowStanding??(i?"known":"unknown"),f=(b,y)=>d`<span class="${`npm-compare-account ${aN[y]??"is-unknown"}`}">~${b}</span>`,m=iN[a]??"is-to-known",h=d`A different npm account published the open version,<br>${N1[p]},<br>after ${N1[u]}${c?d`<br>in a major release`:g}`;return d`<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="${ho("Published by",[e,t],[f(r,u),f(o,p)],h)}"><span>Publisher</span><span class="npm-extension-count">${f(r,u)} → ${f(o,p)}</span></a></li>`}function cN([e,t],n){return n?d`<li><span class="npm-extension npm-compare-provenance" data-tooltip="${`npm lists provenance for ${e.version}, none for ${t.version}`}" .tooltipContent="${ho("npm provenance",[e,t],["Listed by npm",d`<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 dN(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],c=(p,f)=>p.length===0?d`<span class="compare-tip-none">None</span>`:Dh(p.map(([m,h])=>[m,h,f.includes(m)])),u=n.map(([p])=>r.includes(p)?`${p} ${s.has(p)?"changed":"added"}`:p).join(", ");return d`<li><span class="npm-extension is-warn npm-compare-install" data-tooltip="${i.map(({version:p},f)=>`${p}: ${a[f].map(([m,h])=>`${m}: ${h}`).join("; ")||"none"}`).join(" \xB7 ")}" .tooltipContent="${ho("Install scripts",i,a.map((p,f)=>c(p,f===a.length-1?r:[])))}"><span>${n.length===1?"Install script":"Install scripts"}</span><span class="npm-extension-count">${u}</span></span></li>`}var lC=8;function uN(e,t){let n=o=>t.get(o)?.files??[],r=(o,s)=>`${du[t.get(o)?.severity]} npm-held-file ${s}`;return[go(r("held-runs-code","npm-files-runs"),"Runs code",n("held-runs-code"),o=>S1(o.found,o.added),hp(n("held-runs-code").map(o=>o.found)),null,!1),go(r("held-credentials","npm-files-credentials"),"Credentials",n("held-credentials"),o=>C1(o.found,o.added)),...rN(t),Ph("npm-compare-large","Large new code",n("large-code"),o=>me(o.bytes)),nN(t.get("now-unreadable")),go(r("held-obfuscated","npm-files-obfuscated"),"Obfuscated",n("held-obfuscated"),o=>`${Zg(o.found)}${o.added?`, new since ${e[0].version}`:""}`),Ph("npm-compare-binary","Binary code",n("binary-code"),o=>`${me(o.bytes)}, not UTF-8 or holding a NUL`)]}function pN(e){let t=e?.hosts??[],n=t.map(({host:s,places:i})=>{let a=i.slice(0,lC).map(({path:c,line:u})=>`${c}, line ${u}`);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 go("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 Ph(e,...t){return go(`npm-compare-file ${e}`,...t)}function go(e,t,n,r,o=null,s=null,i=!0){if(n.length===0)return g;let a=n.slice(0,lC),c=n.length>a.length?`and ${(n.length-a.length).toLocaleString("en")} more`:null,u=h=>[r(h)].flat(),p=`${t}: ${[...a.map(h=>`${h.path} (${u(h).join("; ")})`),...c?[c]:[]].join(", ")}`,f=d`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${a.map(h=>d`<span class="compare-tip-path">${h.path}</span><span class="compare-tip-said">${u(h).length>1?d`<span class="compare-tip-lines">${u(h).map(b=>d`<span>${b}</span>`)}</span>`:r(h)}</span>`)}</div>${c?d`<div class="compare-tip-note">${c}</div>`:g}</div>`,m=d`${i?d`<span>${t}</span>`:d`<span class="sr-only">${t}</span>`}${o!==null||n.length>1?d`<span class="npm-extension-count">${o??n.length.toLocaleString("en")}</span>`:g}`;return s?d`<li><button type="button" class="${`npm-extension is-open ${e}`}" data-tooltip="${p}" .tooltipContent="${f}" @click="${s}">${m}</button></li>`:d`<li><span class="${`npm-extension ${e}`}" data-tooltip="${p}" .tooltipContent="${f}">${m}</span></li>`}var Nh=(e,{created:t,gap:n,level:r,tier:o,installs:s,missing:i,was:a,severity:c})=>[c==="notice"?"no risk counted":null,a===void 0?null:`was ${a}`,t?`new package, ${n>=0?`${Qh(n)} old`:"published later"}`:i?"no package npm has":r?`npm's ${ka(o??1/0)}`:null,s?.scripts?`installs ${s.version}${s.latest&&s.latest!==s.version?` (its latest ${s.latest})`:""}${s.new?`, published since ${e[0].version}`:""}, running its install scripts`:null].filter(Boolean).join("; ")||null;function fN(e,t){let{version:n}=e.at(-1),r=t.get("held-non-registry-deps")?.dependencies??[],o=t.get("held-unused-deps"),s=o?.dependencies??[],i=c=>c.some(u=>u.added)?`; new since ${e[0].version}: ${c.filter(u=>u.added).map(({name:u})=>u).join(", ")}`:"",a=[];if(r.length>0){let c=r.filter(u=>u.added).map(u=>`${u.name} was ${u.was??"none"}`);a.push(d`<li><span class="npm-extension is-warn npm-compare-registry" data-tooltip="${`From elsewhere than npm's registry: ${r.map(u=>`${u.name} ${u.now}`).join(", ")}${i(r)}`}" .tooltipContent="${ho("From elsewhere than npm's registry",[e.at(-1)],[Dh(r.map(u=>[u.name,u.now,u.added]))],c.length>0?`New since ${e[0].version}: ${c.join(", ")}`:null)}"><span>Non-registry deps</span><span class="npm-extension-count">${r.length.toLocaleString("en")}</span></span></li>`)}if(s.length>0){let[c,u]=s.length===1?["it","its"]:["them","their"],p=f=>f.kind?`${f.name} (${f.kind})`:f.name;a.push(d`<li><span class="${`npm-extension ${o.severity==="notice"?"is-notice":du[o.severity]??"is-warn"} npm-compare-unimported`}" data-tooltip="${`Imported by nothing of ${n}: ${s.map(f=>`${f.name} ${f.range}${Nh(e,f)?` (${Nh(e,f)})`:""}`).join(", ")}${i(s)}`}" .tooltipContent="${ho(`Nothing imports ${c}`,[e.at(-1)],[Dh(s.map(f=>[[p(f),Nh(e,f)].filter(Boolean).join(", "),f.range,f.added]))],`No code file of ${n} names ${c} as an import would, nor does an install script; npm installs ${c} all the same, running ${u} install scripts`)}"><span>Unused deps</span><span class="npm-extension-count">${s.length.toLocaleString("en")}</span></span></li>`)}return a}function mN(e){return e?d`<li><span class="npm-extension is-warn npm-compare-published" data-tooltip="${i1(e.published)}">${vh(e.published)}</span></li>`:g}function cC(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-${aC(n)}`,s=n.filter(p=>!r.includes(p)).length,i=r.filter(p=>!n.includes(p)).length,a=ho("Advisories affecting",e,t.map(p=>p.length===0?d`<span class="compare-tip-none">none</span>`:d`<span class="compare-tip-count">${p.length}</span><span class="compare-tip-severities">${Aa.map(f=>[f,p.filter(m=>zh(m)===f).length]).filter(([,f])=>f>0).map(([f,m])=>d`<span class="${`compare-tip-severity sev-${f}`}">${m} ${f}</span>`)}</span>`),e.length>1?`${s} new \xB7 ${i} fixed`:null),c=`Advisories affecting ${e.map(({version:p},f)=>`${p}: ${t[f].length}`).join(", ")}`,u=d`<span>Advisories</span><span class="npm-extension-count">${iC(r.length,n.length)}</span>`;return e.length>1?d`<li><button type="button" class="${`npm-extension npm-compare-advisories ${o}`}" aria-haspopup="dialog" data-tooltip="${c}" .tooltipContent="${a}" @click="${()=>gN(e,t)}">${u}</button></li>`:d`<li><span class="${`npm-extension npm-compare-advisories ${o}`}" data-tooltip="${c}" .tooltipContent="${a}">${u}</span></li>`}var Dh=e=>d`<span class="compare-tip-lines">${e.map(([t,n,r])=>n==null?d`<span class="compare-tip-none">${t}: none</span>`:d`<span class="${r?"is-flagged":g}">${t}: <code>${n}</code></span>`)}</span>`,ho=(e,t,n,r=null)=>d`<div class="compare-tip"><div class="compare-tip-head">${e}</div><div class="compare-tip-rows">${t.map(({version:o},s)=>d`<span class="compare-tip-version">${o}</span><span class="compare-tip-said">${n[s]}</span>`)}</div>${r?d`<div class="compare-tip-note">${r}</div>`:g}</div>`;function gN([e,t],[n,r]){let o=U1(),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,c])=>({status:i,heading:a,rows:c.map(u=>V1(u,o))}));k1({heading:`Advisories \xB7 ${e.name} ${e.version} \u2192 ${t.version}`,groups:s,isCurrent:o})}function hN(e,t,n){if(e===null||e>=n)return!1;let r=aC(t);return r===void 0||Aa.indexOf(e<=25?"critical":"high")<Aa.indexOf(r)}function dC(e,t,n=null){let r=e.at(-1),o=e.map(s=>Fa({npm:s})?.scores??null);return!o.at(-1)||n?[]:P1.flatMap(([s,i,a,c])=>{let u=o.map(m=>m?Math.round(m[s]*100):null),p=u.at(-1),f=e.length>1?u[0]:p;return p===null||p>=a?[]:s==="vulnerability"&&!(t&&hN(p,t.at(-1),a))?[]:s==="maintenance"&&r.manifest?.deprecated&&p>=PL?[]:[d`<li><a class="${`npm-extension npm-socket-score ${Oh(p,c)}`}" href="${cu({npm:r})}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Socket's ${i.toLowerCase()} score: ${e.map(({version:m},h)=>`${u[h]??"none"} for ${m}`).join(", ")}`}" .tooltipContent="${ho(`Socket's ${i.toLowerCase()} score`,e,u.map(m=>m===null?d`<span class="compare-tip-none">none</span>`:d`<span class="${`compare-tip-score ${Oh(m,c)}`}">${iu(m)}${m}</span>`),s==="vulnerability"?`Shown under ${a}, where worse than the advisories found`:`Shown under ${a}`)}">${iu(p)}<span>${i}</span><span class="npm-extension-count">${iC(f,p)}</span></a></li>`]})}var bN={critical:"is-unpopular",high:"is-low",moderate:"is-mid"};function uC({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 pC(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 ${bN[s]??"is-low"}`:`npm-downloads-tier ${o}`,c=n?uC(e):null,u=[t&&`${i} downloads/month, ${t.month}`,c].filter(Boolean).join(" \xB7 ");return d`<span class="${a}" data-tooltip="${u||g}" .tooltipContent="${t||c?d`${t?d`<div><strong>${i}</strong> downloads/month</div><div class="compare-tip-note">${t.month}</div>`:g}${c?d`<div class="compare-tip-note">${c}</div>`:g}`:null}">${ka(r??1/0)}</span>`}function yN(e,t){let n=Wh(e);return t?d`<li>${pC(t,n.status==="ready"&&n.downloads?GS(n.downloads):null,!0)}</li>`:g}var wN=d`<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>`,Ia=e=>new Intl.NumberFormat("en",{style:"unit",unit:e,unitDisplay:"long"}),Ma={minute:Ia("minute"),hour:Ia("hour"),day:Ia("day"),month:Ia("month"),year:Ia("year")};function Qh(e){let t=Math.max(0,Math.floor(e/6e4)),n=Math.floor(t/1440);return t<60?Ma.minute.format(t):t<1440?Ma.hour.format(Math.floor(t/60)):n<60?Ma.day.format(n):n<730?Ma.month.format(Math.floor(n/30.44)):Ma.year.format(Math.floor(n/365.25))}function vN({compared:e},{created:t,gap:n}){if(!t)return g;let[r,o]=e,s=Qh(Math.abs(n)),i=[`First published on ${$h(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 d`<span class="npm-dependency-flag is-new" data-tooltip="${[...i,a].join(" \xB7 ")}" .tooltipContent="${d`<div class="compare-tip"><div class="compare-tip-head">New package</div>${i.map(c=>d`<div>${c}</div>`)}<div class="compare-tip-note">${a}</div></div>`}">${n>=0?`${s} old`:"published later"}</span>`}function fC(e,t){let n=Qd(e.flags);if(t!=="added"||!e.level)return[n,g];let r=e.month?dh({total:e.month.total,from:new Date(e.month.from)}):null;return[n,e.uncounted?wN:pC(e,r),e.compared?vN(e,e):g]}function $N(e,t){let{counts:n}=wr(t),r=XL.filter(o=>n.has(o));return r.length===0?g:d`<ul class="npm-extensions" aria-label="Readable files">${r.map(o=>X1(e,t,o))}</ul>`}function eb(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 O1(e,t,n=new Map){let r=new Map;for(let o of e){let s=eb(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 kN=/^(?:package\.json|readme(?:\.md)?)$/iu,Ea=e=>kN.test(e)||xa.test(e);function xN(e,t,n=new Map){let r=e.filter(Ea),o=new Set(e.filter(c=>!Ea(c)).map(eb)),{files:s,bytes:i,lines:a}=O1(r,t,n).reduce((c,u)=>({files:c.files+u.files,bytes:c.bytes+u.bytes,lines:u.lines===null?c.lines:(c.lines??0)+u.lines}),{files:0,bytes:0,lines:null});return{package:r.length>0?{files:s,bytes:i,lines:a}:null,extensions:O1(e,t,n).filter(c=>o.has(c.extension))}}var B1=({bytes:e,lines:t})=>t===null?me(e):`${me(e)} \xB7 ${t.toLocaleString("en")} LoC`;function SN(e,t){let{types:n,extensions:r}=wr(t);return!n.package&&n.extensions.length===0?g:d`<ul class="npm-extensions" aria-label="File types">${n.package?Bh(e,{id:"package",label:"Package",keeps:Ea},d`<span>Package</span>`,n.package.files,{tooltip:`package.json, readme and license: ${B1(n.package)}`}):g} ${n.extensions.map(o=>Bh(e,{id:`extension:${o.extension}`,label:o.extension||"No extension",keeps:s=>r.get(s)===o.extension},d`<span class="npm-extension-name">${o.extension||"no extension"}</span>`,o.files,{tooltip:B1(o)}))}</ul>`}function mC(e,t,n){let r=[["languages","Languages",t],["readable","Readable",$N(e,n)],["types","File types",SN(e,n)],["socket","Socket",DL(e)]].filter(([,,o])=>o!==g);return r.length===0?g:d`<dl class="npm-contents" aria-label="Contents">${r.map(([o,s,i])=>d`<div class="${`npm-contents-${o}`}"><dt>${s}</dt><dd>${i}</dd></div>`)}</dl>`}function gC(e,t){return e.size===0?g:In({title:"Binary files",count:e.size,list:!0,body:d`<ul class="bundles-sources-list">${[...e].map(n=>d`<li><div class="bundles-source-row is-resource">${bn(n,"binary")}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${n}">${n}</span> ${t.has(n)?d`<span class="bundles-source-size">${me(t.get(n))}</span>`:g}</div></li>`)}</ul>`})}var uu=({severity:e})=>tv.indexOf(e),CN=(e,t)=>e.reduce((n,r,o)=>n||r.name.localeCompare(t[o].name),0);function hC(e,t,n){return e.map(r=>({row:r,path:n(r),flags:t(r).toSorted((o,s)=>uu(o)-uu(s)||o.name.localeCompare(s.name))})).toSorted((r,o)=>(o.flags.length>0)-(r.flags.length>0)||r.flags.length>0&&(uu(r.flags[0])-uu(o.flags[0])||o.flags.length-r.flags.length||CN(r.flags,o.flags))||r.path.localeCompare(o.path)).map(({row:r})=>r)}function tb(e){return{...a1(e),files:eC,badges:rC,dependencyTags:fC,reviewVerdictLimit:D1}}var nb=class extends N{static styles=[...N.styles,P(et)];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 d`<span class="lwd-option-hint">The local file will be overwritten.</span>`;let n=t===1?d`workspace <strong>"${this.workspaceNames[0]}"</strong>`:d`<strong>${t}</strong> workspaces (${this.workspaceNames.join(", ")})`;return d`<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?d`<span class="lwd-option-hint">Saved as an unfiled report — the renamed copy isn't added to any workspace.</span>`:g;return d`<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:d`<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",nb);function bC({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:_N(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 _N(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 rn=null,La=null,pu=0;function RN(){return rn||(rn=document.createElement("div"),rn.id="app-toast",rn.setAttribute("role","status"),rn.setAttribute("aria-live","polite"),document.body.append(rn),rn)}function Ue(e,{kind:t="info",duration:n=5200}={}){let r=RN(),o=++pu;clearTimeout(La),La=null,r.className=t,r.textContent=e,requestAnimationFrame(()=>{pu===o&&r.classList.add("visible")});let s=()=>{pu===o&&TN()};return n>0&&(La=setTimeout(s,n)),s}function TN(){pu++,rn&&(clearTimeout(La),La=null,rn.classList.remove("visible"))}function yC(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 wC(e,t,{fetchCatalog:n,isCurrent:r,render:o,replaceRoute:s}){let i=fr(e);if(!i||!r())return!0;let a=["admin","manage"].includes(e.managedSession?.role),c,u=null;if(e.currentManagedTeam!=null||!a){let f=m=>m.bundles?.some(h=>h.id===i);u=t.find(m=>m.id===e.currentManagedTeam&&f(m))??t.find(f)}if(u)c=Ms(t);else if(a)try{c=(await n()).map(pr)}catch(f){if(f.status!==401&&f.status!==403)throw f;c=[]}else c=[];if(!r())return!0;let p=c.find(f=>f.managedId===i);return p?(e.bundles=c,e.currentManagedTeam=u?.id??null,o(),s(mr(t,p,e.currentManagedTeam,e.bundleDetailsTab,gr(e),c)),!0):!1}async function vC({bundleId:e,teamId:t,bundleTab:n,file:r,line:o,endLine:s,compareId:i,compareMode:a},c,u,p){let f=c.find(x=>x.managedId===e);if(!f||!u()||!C())return!1;let m=$g(f.integrity,x=>x.managedId===e),h=l.bundleDetails?.managedId===e&&l.bundleDetails.integrity===f.integrity&&!l.bundleDetails.error?l.bundleDetails:null;try{l.bundles=c,Et(),dr(f.integrity,n),n==="code"&&r!=null&&(l.bundleCodeFileRequest={bundle:f.integrity,file:r,...o==null?{}:{line:o},...s==null?{}:{endLine:s}});let x=n==="compare"&&i!=null?Is(c,f.integrity).find($=>$.managedId===i):null;x&&(l.bundleCompare={bundle:f.integrity,target:x.integrity,mode:vl(a)}),l.bundleDetails=m??h,l.currentManagedTeam=t,l.currentManagedReport=null,l.reports=[],document.body.classList.remove("report-fullscreen"),E({animate:!1}),p(),document.querySelector("#main-content")?.scrollTo({top:0})}catch(x){return u()&&x.name!=="AbortError"&&Ue(`Couldn't open bundle: ${x.message}`,{kind:"error"}),!1}let b=l.bundleDetails,y=()=>C()&&l.currentView==="bundles"&&l.selectedBundle===f.integrity&&l.bundles.some(x=>x.managedId===e&&x.integrity===f.integrity)&&l.bundleDetails===b,w=(x,$)=>(x?.name==="AbortError"||(u()?$&&Ue(`Couldn't open bundle: ${x.message}`,{kind:"error"}):y()&&(l.bundleDetails={integrity:f.integrity,kind:f.kind,size:f.size,managedId:e,error:x.message},E())),!1),v=fe(),k;for(;;){let x=Fe();try{k=await Bc(e,{signal:x});break}catch($){if($?.name==="AbortError"&&x.aborted&&y())continue;return w($,!1)}}try{if(k.integrity!==f.integrity)throw new Error("the metadata is for another version of this bundle");if(y()){let x=fi(k,k.integrity),$=m?.integrity===x.integrity?Object.assign(m,{fileHashes:x.fileHashes,fileSizes:x.fileSizes,lineCounts:x.lineCounts,codeStats:x.codeStats},x.edges?{edges:x.edges}:{}):x;$.managedId=e,l.bundleDetails=$,E({animate:!1})}return u()&&v===fe()&&l.bundleDetails?.managedId===e&&l.selectedBundle===f.integrity}catch(x){return w(x,!0)}}function IN(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 $C(e){let t=null,n=null,r=null;return async({generation:o,session:s,signal:i,reuse:a=!1,revision:c=null})=>{if(i.aborted)return null;let u=JSON.stringify([o,s?.id,s?.role,s?.csrfToken]);if(r!==u&&(t?.controller.abort(),t=null,n=null,r=u),n&&Date.now()<n.expiresAt&&(a||c!==null&&c===n.revision))return n.teams;if(!t||t.signal.aborted||c!==null&&t.revision!==c){t?.controller.abort(),n=null;let m=new AbortController,h=AbortSignal.any([i,m.signal]),b={controller:m,signal:h,promise:null,revision:c};t=b;let y=null;b.promise=e({fallback:null,signal:h,onRevision:w=>{y=w}}).then(w=>h.aborted||r!==u?null:(w!==null&&(n={teams:w,revision:y,expiresAt:IN(w)}),w)).finally(()=>{t===b&&(t=null)})}let p=t,f=()=>p.controller.abort();i.addEventListener("abort",f,{once:!0});try{let m=await p.promise;return i.aborted||p.signal.aborted?null:m}finally{i.removeEventListener("abort",f)}}}function rb(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function kC(e){let t=e.summary,n=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&n.push(me(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 xC(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(re(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 fu=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 p of this.expanded.keys())o.some(f=>f.id===p)||this.expanded.delete(p);let s=fr(t),i=["findings","files","links"].includes(t.currentView)?t.currentManagedReport:null,a=s?"bundles":"reports",c=o.find(p=>p.id===t.currentManagedTeam&&(s?p.bundles?.some(f=>f.id===s):p.reports?.some(f=>f.id===i))),u=JSON.stringify([a,s||i,c?.id]);if(!(!n&&u===this.focus)&&(this.focus=u,c)){let p=this.expanded.get(c.id)??new Set;p.add(a),this.expanded.set(c.id,p)}}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 SC(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 En=null,_C=()=>Promise.resolve(!0);function RC(e){_C=e}function bo(){En?.controller.abort(),En=null}function MN(e,t,n){let{promise:r,resolve:o}=Promise.withResolvers(),s=!1,i=p=>{clearTimeout(u),t.removeEventListener("abort",a),o(p)},a=()=>i(!1),c=()=>(!s&&!t.aborted&&(s=!0,clearTimeout(u),Promise.resolve().then(()=>n()&&e(t)).then(p=>i(!!p&&n()),()=>i(!1))),r),u=setTimeout(c,1e3);return t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),{promise:r,start:c}}function TC(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 vr({catalogOnly:e=!1,hydrate:t}={}){let n=l.managedSession,r=Fe(),o=["findings","files","links"].includes(l.currentView),s=["workspace-reports","workspace-bundles"].includes(l.currentView),i=s||o&&(!e||En?.teamId===l.currentManagedTeam&&!En.signal.aborted)?l.currentManagedTeam:null;if(!C()||!n||n.role==="none"||n.publicShare&&!i)return bo(),t?Promise.resolve(!1):void 0;let a=l.managedTeams?.find(y=>y.id===i)?.reports.find(y=>y.id===l.currentManagedReport&&y.visible===!1)?.id??null,c=JSON.stringify([i,a,n.id,n.role,n.csrfToken,!!n.publicShare]);if(En?.key!==c||En.signal.aborted){bo();let y=new AbortController,w={key:c,controller:y,signal:y.signal,teamId:i,reportId:a,version:0,target:null};w.current=(v=w.signal)=>!v.aborted&&!w.signal.aborted&&En===w&&C()&&l.managedSession?.id===n.id&&l.managedSession?.role===n.role&&l.managedSession?.csrfToken===n.csrfToken&&!!l.managedSession?.publicShare==!!n.publicShare,En=w,AN(w)}let u=En;if(e||s||!i)return u.target?.ready;let p=Qe(l.reports),f=u.target;if(f?.view===r&&f.reports===p&&!f.signal.aborted)return f.ready;f?.controller.abort();let m=new AbortController,h=AbortSignal.any([m.signal,u.signal,r]),b={controller:m,signal:h,view:r,reports:p,version:f?.reports===p?f.version:0};return u.target=b,b.current=()=>u.current()&&!h.aborted&&u.target===b&&l.currentManagedTeam===i&&Qe(l.reports)===p,b.hydration=t?MN(async y=>{let w=u.version,v=await t(y);return v&&b.current()&&(b.version=w),v},h,b.current):null,b.ready=b.hydration?.promise,(u.version||u.finished)&&(b.hydration?b.hydration.start():b.version<u.version&&sb(u,b,u.signal).then(y=>(!y&&b.current()&&(bo(),vr()),y))),b.ready}function AN(e){let{signal:t,controller:n,current:r}=e;Ek(e.teamId,{signal:t,reportId:e.reportId,onTeams:async(o,s)=>{let i=()=>r(o);return i()?await _C(i,o,s)&&i():!1},onUpdate:o=>r(o)?(e.version++,sb(e,e.target,o)):!1,onClose:()=>{r()&&document.dispatchEvent(new Event("managed-feed-closed")),n.abort()}}).catch(o=>{r()&&console.warn("managed: team feed failed",o)}).finally(()=>{e.finished=!0,r()&&e.target?.hydration?.start()})}async function sb(e,t,n){if(!e.current(n))return!1;if(!t?.current())return!0;if(!t.refresh||t.refresh.controller.signal.aborted){let a=new AbortController,c={controller:a,promise:null},u=AbortSignal.any([a.signal,t.signal]);t.refresh=c,c.promise=EN(e,t,u).catch(()=>!1).finally(()=>{t.refresh===c&&(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 TC(r.promise,o)}finally{n.removeEventListener("abort",s)}return e.current(n)?t.current()?i?t.version<e.version?sb(e,t,n):!0:!1:!0:!1}async function EN(e,t,n){if(t.hydration&&!await TC(t.hydration.start(),n))return!1;for(;t.current()&&!n.aborted&&t.version<e.version;){let r=e.version,o=CC(e.teamId,n),s=l.managedReports.filter(a=>t.reports.some(c=>c._managedReportId===a.id));if(!(await Promise.all(s.flatMap(a=>[ob(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 IC=`*,*: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 MC=`: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 ib=class extends N{static styles=[...N.styles,P(Zt)];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=Kl(),this._vaultStateUnsub=gt(()=>{if(this._settled)return;let t=Kl();this._orphan&&!t&&ct()?(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(ct()){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(!Yn()){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 Op({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 Dp({seal:n}),this._phase="Encrypting triage data\u2026",await Zf({seal:n}),this._phase="Encrypting report files\u2026",await Kp({seal:n}),this._phase="Encrypting bundles\u2026",await Yp({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 d`<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?d`<p class="nwd-note">${this._phase}</p>`:g} ${this._error?d`<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 d`<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=Yn();return d`<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:d`<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?d`<p class="nwd-note">${this._phase}</p>`:g} ${this._error?d`<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 d`<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",ib);function mu(){return ee("passkey-setup-dialog")}var ab=class extends N{static styles=[...N.styles,P(Zt)];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 $i({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 d`<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?d`<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",ab);function gu(){return ee("passkey-unlock-dialog")}var AC=d`<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>`,NN=d`<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 lb(){if(!Ne)return;if(await kt(),C()){Ne.hidden=!0;return}if(!Yn()){Ne.hidden=!0;return}let e=ct();Ne.hidden=!1;let t=Go();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"),Y(AC,Ne)):e?(Ne.dataset.tooltip="Encryption on, locked \u2014 click to unlock",Ne.setAttribute("aria-label","Unlock encrypted data"),Y(AC,Ne)):(Ne.dataset.tooltip="Encryption off \u2014 click to enable",Ne.setAttribute("aria-label","Enable encryption"),Y(NN,Ne))}async function ON(){if(confirm(`Disable encryption?
|
|
167
|
-
|
|
168
|
-
Your local triage and report data will be rewritten as plaintext.
|
|
169
|
-
|
|
170
|
-
IMPORTANT: DeepView cannot directly delete your passkey. Most browsers / password managers require you to remove the entry manually after disabling. You can re-enable encryption later.`))try{(await Bp({migrate:async({open:t})=>{await zp({open:t}),await Qf({open:t}),await qp({open:t}),await Xp({open:t})}}))?.disabled&&alert(`Encryption disabled. Your data is now plaintext.
|
|
171
|
-
|
|
172
|
-
To complete cleanup, remove the DeepView passkey from your password manager / OS settings:
|
|
173
|
-
\u2022 macOS / iOS: Settings \u2192 Passwords
|
|
174
|
-
\u2022 Windows: Settings \u2192 Accounts \u2192 Sign-in options \u2192 Passkeys
|
|
175
|
-
\u2022 Chrome: chrome://settings/passkeys
|
|
176
|
-
\u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function EC(){lb()}function FC(e){if(!e||e===Ne)return;Ne=e;let t=!1;Ne.addEventListener("click",async()=>{if(await kt(),!C()&&!t){t=!0;try{if(!ct()){await mu();return}if(!Go()){await gu();return}await ON()}finally{t=!1}}}),gt(lb),lb()}var LC=`.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 db(){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 cb=class extends N{static styles=[...N.styles,P(LC)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await ls()){this._finish("granted");return}this._retryDenied=!0};_chromiumBody(){let t=location.hostname==="localhost"?d`Plain <code>localhost</code> can never qualify — for local testing open the app via <code>127.0.0.1</code> instead.`:g;return d`<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 d`<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 d`<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=db(),n=t==="webkit"?this._webkitBody():t==="firefox"?this._firefoxBody():this._chromiumBody();return d`<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?d`<span class="spd-denied" role="status">Still not granted.</span>`:g} <span class="nwd-spacer"></span> ${t==="webkit"?g:d`<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",cb);function NC(){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 sn=null,on=null,fb=!1,hu=!1,ub=0;function pb(){return db()==="webkit"}function OC(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 BC(){if(!sn)return;if(C()||!on||on.persisted!==!1||!fb){sn.hidden=!0;return}sn.hidden=!1;let e=on.usage===null||on.quota===null?"":` Using ${OC(on.usage)} of ${OC(on.quota)}.`;sn.querySelector(".storage-label").textContent="Storage at risk",sn.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. "+(pb()?"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 DC(e,t){let n=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!pb()&&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 `+(pb()?"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 bu(){if(await kt(),!sn||C()){BC();return}let[e,t]=await Promise.all([rm(),(async()=>{try{return(await le()).length>0||await Up()}catch{return!1}})()]);on=e,fb=t,BC()}function mb(){!sn||ub||(ub=setTimeout(()=>{ub=0,bu()},1e3))}async function PC(){if(hu||(await bu(),C()||on?.persisted!==!1||!fb||hu))return;hu=!0;let e=await ls();DC(e,!1),await bu()}async function PN(){if(on&&on.persisted===!1){hu=!0;let e=await ls();DC(e,!0),e||await NC()}await bu()}function zC(e){sn=e,sn&&(sn.addEventListener("click",()=>{PN()}),dt((t,n)=>{mb(),n==="save"&&PC()}),PC())}function gb(e){let t=document.querySelector("#landing-workspaces");if(!t)return;let n=e.filter(r=>r.reports.length>0||r.bundles?.length>0).toSorted((r,o)=>o.reports.length-r.reports.length||r.name.localeCompare(o.name)).slice(0,5);Y(n.length>0?d`<nav class="landing-workspaces" aria-label="Workspaces"><div class="landing-workspace-row">${X(n,r=>r.id,r=>{let o=ro(r),s=r.reports.filter(i=>Ie(i)!==ve).length;return d`<button type="button" class="landing-workspace" data-landing-workspace="${r.id}">${z(Fo)} <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 yu(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(n=>_e(n)==="revalidation");return t.length>0?t:e}function DN(e){let t=e.map(yu).filter(n=>n.length>0);return t.length>0&&t.every(n=>n.every(r=>r.isApp&&r._source&&!r._sourcePass&&_e(r)===""))}function hb(e,t=()=>[]){let{groups:n,conflicts:r}=rd(e,{hideRuledOut:!0});if(r.size>0)return{appMode:!1};let o=sd(n,t,yu);return!DN(o)&&!Bl(o,{tabs:yu,kindOf:_e,severityMode:"corrected"})?{appMode:!1}:{appMode:!0,appFindings:o.filter(s=>yu(s).some(i=>i.isApp)).length}}var xt=null,bb=0;Gi(()=>{bb++});function WC(e,t,n,{complete:r,isCurrent:o}){xt={id:e.id,membership:JSON.stringify(e.reports.toSorted()),reports:t,token:n,complete:r,isCurrent:o}}function HC(e){return!xt||xt.id!==e.id||!xt.isCurrent()||xt.membership!==JSON.stringify(e.reports.toSorted())||!Cm(e,xt.token)?null:(xt.linksRevision!==bb&&(xt.metadata=xt.complete?hb(xt.reports,bt):{appMode:!1},xt.linksRevision=bb),xt.metadata)}async function UC(e,t,n,{complete:r,isCurrent:o,onReady:s}){if(!o()||(await Ki(),!o()))return;let i=await Xi(e,n);if(!i||!o())return;let a=r?hb(t,bt):{appMode:!1};await Rm(e,a,i)&&o()&&await s(a)}var $r=null;function yb(e){let{serverMode:t,session:n,sessionPending:r=!1,teamsPending:o=!1,teams:s=[],alternateMode:i="local",onSwitchMode:a}=e,c=document.querySelector("#drop-zone"),u=c?.querySelector(".managed-landing");if(!u)return;let p=t==="managed",f=t==="local",m=p&&(n?n.role!=="none"&&o:r);m?$r?$r.options=e:$r={options:e,elapsed:!1,timer:setTimeout(()=>{$r.elapsed=!0,yb($r.options)},1e3)}:(clearTimeout($r?.timer),$r=null);let h=m&&!$r.elapsed;c.dataset.serverMode=p?"managed":"local",c.setAttribute("aria-label",p?h?n?"Loading teams":"Loading session":n?.role==="none"?"No workspace access":n?"Team findings":"Log in":"Drop reports here");let b=c.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."),!p||h){Y(g,u);return}let y=n?.role==="admin"||n?.role==="manage",w=s.filter(v=>v.reports.length>0||v.bundles?.length>0);if(gn()&&!n){Y(d`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,u);return}Y(n==null?d`<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"?d`<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>`:d`<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?d`<nav class="managed-team-list" aria-label="Teams">${X(w,v=>v.id,v=>d`<button type="button" class="managed-team-button" data-managed-team="${v.id}"><span class="managed-team-icon" aria-hidden="true">${z(Fo)}</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>`:d`<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",Ao],["manage-scans","Scans",Pn],["manage-reports","Reports",Qy]]:[],["npm","npm packages",Eo]].map(([v,k,x])=>d`<button type="button" class="managed-content-card" data-managed-page="${v}"><span class="managed-content-icon" aria-hidden="true">${z(x)}</span> <span>${k}</span></button>`)}</nav>${y?d`<div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${z(ol)}</span><span>Manage</span></button></div>`:g}`,u)}var VC=`.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 WN=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],wb=class extends N{static styles=[...N.styles,P(Zt),P(VC)];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 fm(this.workspace):await pm(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;jw(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 Nk({tabs:WN,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 d`<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?d`<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?d`<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?d`<p class="wsl-error" role="alert">Passwords don't match.</p>`:g}`}_rawPanel(){let t=this._reportCount(),n=this._bundleCount();return d`<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?d`— 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?d`<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 d`<div role="tabpanel" id="${`wsl-panel-${this._tab}`}" aria-labelledby="${`wsl-tab-${this._tab}`}">${this._tab==="raw"?this._rawPanel():this._workspacePanel()}</div>${this._error?d`<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 d`<dialog @close="${this._onClose}"><header>${this._tabsTemplate()}</header>${this._body()}</dialog>`}};customElements.define("workspace-export-dialog",wb);function jC({workspace:e}={}){return Ml("workspace-export-dialog",{workspace:e??null},t=>{t.workspace=null})}async function GC(e){await jC({workspace:e})}var qC="deepview.passkey.firstImportPrompted";function HN(){try{return localStorage.getItem(qC)==="1"}catch{return!1}}function KC(){try{localStorage.setItem(qC,"1")}catch{}}async function wu(){if(ct()||!Yn()||HN())return;if(!confirm(`Encrypt your DeepView data with a passkey?
|
|
179
|
-
|
|
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.
|
|
181
|
-
|
|
182
|
-
You can change this anytime from the lock icon in the sidebar header.`)){KC();return}await mu(),ct()&&KC()}var vb=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 d`<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",vb);function YC(){return ee("new-workspace-dialog")}var $b=class extends N{static styles=[...N.styles,P(et)];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?d`<p class="lwd-note">No local triage is attached to ${this.reportCount===1?"this report":"these reports"}.</p>`:t===0?d`<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>`:d`<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",c=n>0?d`<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>`:"",u=r?d`<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?d`<p class="lwd-empty">No reports are attached to this workspace (only bundles, see below).</p>`:d`<p class="lwd-empty">No reports are attached to this workspace.</p>`;return d`<dialog @close="${this._onClose}"><header><h3>Leave workspace</h3></header><p class="lwd-body">Leave workspace <strong>"${this.workspaceName}"</strong> on this device?</p>${u} ${c} ${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",$b);function XC({name:e,reportCount:t,bundleCount:n,triageImpact:r}={}){return ee("leave-workspace-dialog",{workspaceName:e??"",reportCount:t??0,bundleCount:n??0,orphanedTriage:r?.orphanedCount??0,sharedTriage:r?.sharedCount??0})}var kb=class extends N{static styles=[...N.styles,P(Zt)];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 hm({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=bm(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?d`<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?d`<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>`:d`<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?d`<p class="wsl-error" role="alert">${this._error}</p>`:g} ${this._password&&this._confirm&&this._password!==this._confirm?d`<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 d`<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",kb);function JC({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(Il(i.detail?.cause))}),document.body.append(s)})}var xb=class extends Ae{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?d`<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?d`<p class="lwd-note">No local triage is attached to this ${this.kindLabel}.</p>`:t===0?d`<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>`:d`<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 d`<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",xb);function ZC({name:e,kindLabel:t,triageImpact:n,inRemote:r}={}){return ee("delete-report-dialog",{reportName:e??"",kindLabel:t||"report",orphanedTriage:n?.orphanedCount??0,sharedTriage:n?.sharedCount??0,inRemote:!!r})}var Sb=class extends Ae{static properties={bundleName:{type:String},inRemote:{type:Boolean}};constructor(){super(),this.bundleName="",this.inRemote=!1}_remoteNotice(){return this.inRemote?d`<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 d`<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",Sb);function QC({name:e,inRemote:t}={}){return ee("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var Cb=class extends Ae{static properties={bundleName:{type:String},workspaceName:{type:String}};constructor(){super(),this.bundleName="",this.workspaceName=""}render(){return d`<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",Cb);function e_({name:e,workspaceName:t}={}){return ee("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var _b=class extends Ae{static properties={reportName:{type:String},workspaceName:{type:String}};constructor(){super(),this.reportName="",this.workspaceName=""}render(){return d`<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",_b);function t_({name:e,workspaceName:t}={}){return ee("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var Rb=class extends N{_onConfirm=()=>this._finish(!0);render(){return d`<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",Rb);function n_(){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 Tb=class extends N{focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}_onReload=()=>this._finish("reload");render(){return d`<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",Tb);function r_(){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 Cr=null,O=null,Lb=null;function $u(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}Yw();function UN(){return qt().size}function VN(){return Zr().size}var Oa=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,Ub="application/x-deepview-report",Nb="application/x-deepview-source-ws",Ba="application/x-deepview-bundle",ku=!1,xu=!1,jN={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium","markdown-generic":"Markdown (generic)",[ve]:"Links"},o_=["default","claude-security","codex-security","deepsec","piolium","markdown-generic",ve],kr="",Dt=!1,Pa=new Map,s_="",Da=new fu;function GN(e,t){let n=l.currentView==="bundles"?l.selectedBundle:null,r=["findings","files","links"].includes(l.currentView)?l.currentFile:null,o=n?"bundles":"reports",s=r?xs(r):null,i=e.filter(c=>n?c.bundles.includes(n):c.id===s),a=JSON.stringify([o,n||r,i.map(c=>c.id)]);if(!(!t&&a===s_)){s_=a;for(let c of i){let u=Pa.get(c.id)??new Set;u.add(o),Pa.set(c.id,u)}}}function i_(e,t={}){let r=`file-item${w_(e,t.workspaceId??null)?" current":""}${t.indented?" indented":""}`,o=re(e),s=Fi(e),i=be[Me(e)]??be.default;return d`<li class="${r}" data-file="${e}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${o}">${z(i)}<span class="file-label">${o}</span>${s===void 0?g:d`<span class="file-count">${s}</span>`}</button></li>`}function w_(e,t){return e===l.currentFile&&t===xs(e)&&(l.currentView==="findings"||l.currentView==="files"||l.currentView==="links")}function v_(e,t={}){let n=`file-group-header${t.dropTarget?" default-reports":""}`;return d`<li class="${n}" data-default-reports="${t.dropTarget?"true":g}"><span class="group-label">${e}</span></li>`}var KN=d`<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>`,qN=d`<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 YN(){return d`<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">${KN}</button></span></li>`}function XN(){let e=xC(l.managedTeams,kr);return e.length===0?g:d`${v_("Teams")} ${X(e,({team:t})=>t.id,({team:t,reports:n,bundles:r})=>{let o=t.app,s=o?.appMode===!0,i=Da.shown(t.id,"reports",s,Dt),a=Da.shown(t.id,"bundles",s,Dt),c=n.filter(u=>u.analyzer!==ve).length;return d`<li class="${`file-item team-item${k_(t)?" current":""}`}" data-team-id="${t.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{Sr(t)}}">${T_}<span class="file-label">${t.name}</span></button> ${l.managed?.allowShare&&["admin","manage"].includes(l.managedSession?.role)?d`<button type="button" class="workspace-share" aria-label="${`Share ${t.name} publicly`}" @click="${()=>{kk(t)}}">${I_}</button>`:g}</div>${s?d`<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="${Dt}">${c.toLocaleString()} report${c===1?"":"s"}</button> ${r.length>0?d`<button type="button" data-team-section="bundles" aria-expanded="${String(a)}" ?disabled="${Dt}">${r.length.toLocaleString()} bundle${r.length===1?"":"s"}</button>`:g}</span></div>`:g}</li>${i?X(n,u=>u.id,u=>QN(t,u)):g} ${a?X(r,u=>u.id,u=>tO(t,u)):g}`})}`}function $_(e,t,n,r){return d`<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">${SC(e)}</span></button></li>`}function JN(){return X(l.managedTeams??[],e=>e.id,e=>$_(e.name,T_,k_(e)||(e.reports??[]).some(t=>x_(e,t))||(e.bundles??[]).some(t=>S_(e,t)),()=>{Sr(e)}))}function ZN(e){return X(e,t=>t.id,t=>$_(t.name,R_,M_(t)||t.reports.some(n=>w_(n,t.id))||t.bundles.some(n=>__(n,t.id)),()=>F_(t.id)))}function k_(e){return l.currentManagedTeam===e.id&&!!l.currentWorkspace&&["findings","files","workspace-reports","workspace-bundles"].includes(l.currentView)}function x_(e,t){return l.currentManagedTeam===e.id&&l.currentManagedReport===t.id&&["findings","links"].includes(l.currentView)}function S_(e,t){return l.currentManagedTeam===e.id&&fr(l)===t.id}function QN(e,t){let n=re(t.filename),r=x_(e,t);return d`<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="${rb(t)||g}" data-tooltip-placement="right-start" @click="${()=>{eO(e,t)}}">${z(be[Wm(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function eO(e,t){return Sr(e,t.id)}function tO(e,t){let n=S_(e,t);return d`<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="${rb(t)||g}" data-tooltip-bundle="${t.kind||g}" data-tooltip-built="${t.provenance==="build"?"true":g}" data-tooltip-stats="${kC(t)||g}" data-tooltip-commit="${t.summary?.commit||g}" data-tooltip-commit-info="${As(t.commitInfo,t.summary?.commit,t.repoFullName)??g}" data-tooltip-placement="right-start">${C_}<span class="file-label">${t.filename}</span></button></li>`}function nO(){return d`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var C_=d`${z(Ao)}`;function __(e,t){return l.selectedBundle===e&&l.currentView==="bundles"&&t===l.selectedBundleWorkspace}function a_(e,t={}){let{integrity:n,name:r}=e,o=__(n,t.workspaceId??null),i=`file-item bundle-item${t.workspaceId!=null?" indented":""}${o?" current":""}`;return d`<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}`}">${C_}<span class="file-label">${r}</span></button></li>`}function rO(e,t){let n=e.slice(0,15);return d`<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 oO(e,t){return d`<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 · ${re(e)}</em></span></span></li>`}var R_=d`${z(Fo)}`,T_=d`<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>`,sO=d`<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>`,iO=d`<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>`,I_=d`<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 M_(e){return l.currentWorkspace===e.id&&["findings","files","workspace-reports","workspace-bundles"].includes(l.currentView)}function aO(e,{app:t,compact:n,reports:r,bundles:o,showReports:s,showBundles:i}){let c=`file-item workspace-item${M_(e)?" current":""}`;return d`<li class="${c}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${R_}<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">${I_}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${sO}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${iO}</button></div>${n?d`<div class="workspace-meta">${t?.appMode?d`<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="${Dt}">${r.toLocaleString()} report${r===1?"":"s"}</button> ${o>0?d`<button type="button" data-workspace-section="bundles" aria-expanded="${String(i)}" ?disabled="${Dt}">${o.toLocaleString()} bundle${o===1?"":"s"}</button>`:g}</span></div>`:g}</li>`}function Hs(e){return kr?re(e).toLowerCase().includes(kr):!0}var Ib=(e,t)=>re(e).localeCompare(re(t));async function W({revealSelection:e=!1}={}){await kt();let t=Kt();if(yb({serverMode:t,session:l.managedSession,teams:l.managedTeams,sessionPending:vo,teamsPending:$o,alternateMode:jn(l.serverModeConfig)?"e2e":"local",onSwitchMode:E_}),_u(),C()){if(Da.sync(l,e),!vo&&!$o&&!Us&&!an&&vr({catalogOnly:!0}),l.bundles=(l.bundles??[]).filter(w=>w.managedId||w.npm),l.storedFiles=[],gb([]),!O)return;Y(d`${XN()}`,Lb);let y=O.querySelector("#sidebar-rail");y?.setAttribute("aria-label","Teams"),y&&Y(JN(),y),O.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),O.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),O.querySelector("#storage-status")?.setAttribute("hidden",""),ln();return}if(Da.sync({managedTeams:[]}),O?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),O?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await em(),t!==Kt()){await W();return}ht().catch(()=>{}),Ki().catch(()=>{});let n=await le();if(t!==Kt()){await W();return}let r=K();GN(r,e),gb(r);let[o]=await Promise.all([Ke(),...r.map(y=>it("workspace",y.id))]);if(t!==Kt()){await W();return}if(l.bundles=o,l.storedFiles=n,mb(),!O)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])),c=new Set;for(let y of r)for(let w of y.bundles)a.has(w)&&c.add(w);let u=new Map;for(let y of o_)u.set(y,[]);for(let y of n){if(i.has(y)||!Hs(y))continue;let w=Me(y);u.has(w)||u.set(w,[]),u.get(w).push(y)}let p=r.filter(y=>!kr||y.name.toLowerCase().includes(kr)||y.reports.some(w=>Hs(w))?!0:y.bundles.some(w=>{let v=a.get(w);return v&&Hs(v.name)})),f=o.filter(y=>!c.has(y.integrity)&&Hs(y.name));Y(d`${YN()} ${X(p,y=>y.id,y=>{let w=[],v=[];for(let L of y.reports)Hs(L)&&(s.has(L)?w.push(L):v.push(L));w.sort(Ib),v.sort(Ib);let k=[],x=[];for(let L of y.bundles){let V=a.get(L);V?(!kr||Hs(V.name))&&k.push(V):kr||x.push(L)}let $=HC(y)??ro(y),S=$?.appMode??_m(y)===!0,_=Pa.get(y.id),R=!S||Dt||_?.has("reports")===!0,F=!S||Dt||_?.has("bundles")===!0,I=[...w,...v].filter(L=>Ie(L)!==ve).length,A=k.length+x.length;return d`${aO(y,{app:$,compact:S,reports:I,bundles:A,showReports:R,showBundles:F})} ${R?d`${w.map(L=>i_(L,{indented:!0,workspaceId:y.id}))}${v.map(L=>oO(L,y.id))}`:g} ${F?d`${k.map(L=>a_(L,{workspaceId:y.id}))}${x.map(L=>rO(L,y.id))}`:g}`})} ${o_.map(y=>{let w=(u.get(y)??[]).toSorted(Ib),v=y==="default";return w.length===0&&!(v&&ku)?null:d`${v_(jN[y]??y,{dropTarget:v})} ${w.map(k=>i_(k))}`})} ${f.length>0||xu?nO():null} ${X(f,y=>y.integrity,y=>a_(y))}`,Lb);let m=O.querySelector("#sidebar-rail");m?.setAttribute("aria-label","Workspaces"),m&&Y(ZN(r),m);let h=O.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=UN());let b=O.querySelector('sidebar-view-button[kind="repositories"]');b&&(b.count=VN()),ln(),Sf(n,A_)}var Mb=!1;function A_(){Mb||(Mb=!0,requestAnimationFrame(()=>{Mb=!1,W().catch(e=>console.warn("counts repaint:",e))}))}gt(()=>{W()});Tm(A_);async function E_(){O?.querySelector("#user-menu")?.hidePopover?.(),St?await $O():sf()&&await Tu()}function F_(e){let t=l.currentView==="findings"||l.currentView==="files";(e!==l.currentWorkspace||!t)&&Vs(e)}async function l_(e){let t=e.target.closest("[data-team-section]");if(t){if(Dt||t.disabled)return;let f=t.closest("[data-team-id]")?.dataset.teamId;f&&Da.toggle(f,t.dataset.teamSection),await W();return}let n=e.target.closest("[data-workspace-section]");if(n){if(Dt||n.disabled)return;let f=n.closest("[data-workspace-id]")?.dataset.workspaceId;if(!f)return;let m=n.dataset.workspaceSection,h=Pa.get(f)??new Set;h.has(m)?h.delete(m):h.add(m),Pa.set(f,h),await W();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await E_();return}if(e.target.closest('[data-action="go-home"]')){await Ct();return}let r=e.target.closest("[data-managed-bundle]");if(r){Z.navigate(Ge({view:"bundles",teamId:r.dataset.managedTeam,bundleId:r.dataset.managedBundle,bundleTab:l.currentView==="bundles"?l.bundleDetailsTab:"overview"},l.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(l.selectedBundle===f&&l.currentView==="bundles"&&l.selectedBundleWorkspace===m)return;dr(f,void 0,{workspaceId:m}),Wb(f,l.bundleDetailsTab),E(),W(),gd(f);return}let s=e.target.closest("sidebar-view-button");if(s){let f=s.getAttribute("kind");(f==="packages"||f==="repositories")&&(l.currentView=f,E(),W());return}if(e.target.closest('[data-action="new-workspace"]')){if(C())return;let f=await YC();f&&(await wu(),await Ff(f),W());return}let i=e.target.closest('[data-action="share-workspace"]');if(i){let f=i.closest("[data-workspace-id]"),m=f?K().find(h=>h.id===f.dataset.workspaceId):null;m&&JC({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?K().find(h=>h.id===f.dataset.workspaceId):null;m&&GC(m).catch(h=>alert(`Failed to open export dialog: ${h.message}`));return}let c=e.target.closest('[data-action="leave-workspace"]');if(c){let f=c.closest("[data-workspace-id]"),m=f?K().find(k=>k.id===f.dataset.workspaceId):null;if(!m)return;let h=Array.isArray(m.reports)?m.reports:[],b;try{b=await Cc(h)}catch(k){alert(`Couldn't read reports to analyze triage impact: ${k.message}`);return}let{confirmed:y,mode:w,triage:v}=await XC({name:m.name,reportCount:h.length,bundleCount:m.bundles.length,triageImpact:b});if(!y)return;if(!K().some(k=>k.id===m.id)){alert(`Workspace "${m.name}" was removed elsewhere; nothing to leave.`);return}try{await y_(m.id,w,{triage:v})}catch(k){alert(`Failed to leave workspace: ${k.message}`)}return}let u=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(u){let f=u.dataset.workspaceId;f&&F_(f);return}let p=e.target.closest(".file-item[data-file]");if(p){let f=p.dataset.file,m=l.currentView==="findings"||l.currentView==="links",h=p.dataset.workspaceId??null;f&&(f!==l.currentFile||h!==l.currentReportWorkspace||!m)&&za(f,void 0,{workspaceId:h});return}if(e.target.closest("sidebar-delete-current")){if(l.currentView==="bundles"&&l.selectedBundle){let k=l.selectedBundle,x=(l.bundles??[]).find(_=>_.integrity===k)?.name??k,$=K().filter(_=>Array.isArray(_.bundles)&&_.bundles.includes(k)).filter(_=>qm(_.id,k)).map(_=>_.id),{confirmed:S}=await QC({name:x,inRemote:$.length>0});if(!S)return;if(l.selectedBundle!==k){alert(`Active bundle changed during confirmation; aborting delete of "${x}".`);return}try{await b_({deleteFromRemoteWorkspaceIds:$})}catch(_){alert(`Failed to delete bundle: ${_.message}`)}return}if(!l.currentFile)return;let f=l.currentFile,m;try{m=await Cc([f])}catch(k){alert(`Couldn't read reports to analyze triage impact: ${k.message}`);return}let h=K().filter(k=>Array.isArray(k.reports)&&k.reports.includes(f)).filter(k=>ms(k.id,f)).map(k=>k.id),b=h.length>0,y=Dc(f)?"links file":"report",{confirmed:w,triage:v}=await ZC({name:f,kindLabel:y,triageImpact:m,inRemote:b});if(!w)return;if(l.currentFile!==f){alert(`Active file changed during confirmation; aborting delete of "${f}".`);return}try{await g_({triage:v,deleteFromRemoteWorkspaceIds:h})}catch(k){alert(`Failed to delete ${y}: ${k.message}`)}return}if(e.target.closest("#sync-status")){j.status==="error"?j.dismissError():j.status==="off"?(!j.getServerUrl()&&Oa&&j.setServerUrl(Oa),j.setEnabled(!0)):j.setEnabled(!1);return}if(e.target.closest('[data-action="manage"]')){O?.querySelector("#user-menu")?.hidePopover?.(),xo("manage");return}if(e.target.closest('[data-action="view-as-stop"]')){O?.querySelector("#user-menu")?.hidePopover?.(),Mk(l.managedSession?.csrfToken);return}if(e.target.closest('[data-action="my-reviews"]')){O?.querySelector("#user-menu")?.hidePopover?.(),Z.navigate({view:"reviews"});return}if(e.target.closest('[data-action="managed-logout"]')){Ik(l.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){Cr.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",Cr.classList.contains("collapsed")?"1":"0")}catch{}}}var lO={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 cO(e){Dt=e.target.value.length>0,kr=e.target.value.trim().toLowerCase(),W()}var dO={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};function L_(){return j.getServerUrl()||Oa?K().length>0:!1}function N_(){let e=O?.querySelector("#auth-status");if(!e)return;let t=O?.querySelector("#manage-status"),n=O?.querySelector("#user-menu"),r=l.managedSession;Cr?.toggleAttribute("data-authenticated",r!=null),Cr?.toggleAttribute("data-workspace-access",r!=null&&r.role!=="none"),uO(r);let o=O?.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"),Y(g,e),n&&Y(g,n);return}if(r.publicShare){t&&(t.hidden=!0),e.removeAttribute("popovertarget"),n&&Y(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}`),Y(d`${c_(s,r.id)}<span class="auth-login">${i}</span>`,e),t){let a=C()&&(r.role==="admin"||r.role==="manage");t.hidden=!a}n&&Y(d`<div class="user-card">${c_(s,r.id,!0)} <span class="user-id"><span class="user-login">${r.login}</span> ${r.name?d`<span class="user-name">${r.name}</span>`:g}</span></div>${r.viewer?d`<button type="button" class="user-menu-row" data-action="view-as-stop">Return to @${r.viewer.login}</button>`:g} ${r.role==="none"?g:d`<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(l.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${qN}<span>Log out</span></button>`,n)}function uO(e){let t=O?.querySelector("#view-as-status");t&&(t.hidden=!e?.viewer,Cr?.toggleAttribute("data-view-as",e?.viewer!=null),Y(e?.viewer?d`<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=l.managedSession;e?.viewer&&Ue(`Viewing as @${e.login} is read only: changes are not saved.`,{kind:"error"})});function c_(e,t,n=!1){let r=`/api/avatar/${encodeURIComponent(t)}`;return d`<span class="${n?"user-avatar user-avatar-lg":"user-avatar"}"><span class="user-avatar-fallback">${e}</span> ${Bm()||l.managedSession?.role==="none"?g:d`<img alt="" src="${r}" @error="${pO}">`}</span>`}function pO(e){e.currentTarget.classList.add("broken")}function O_(){let e=O?.querySelector(".brand-tag");if(e){let t=l.serverMode==="managed"||jn(l.serverModeConfig);e.textContent=Kt(),t?(e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Switch from ${Kt()} mode`)):(e.removeAttribute("role"),e.removeAttribute("tabindex"),e.removeAttribute("aria-label"))}}function fO(){Cr&&(Cr.dataset.mode=Kt()),C()?(O?.querySelector("sidebar-delete-current")?.setAttribute("hidden",""),O?.querySelector("#encryption-toggle")?.setAttribute("hidden",""),O?.querySelector("#auth-status")?.removeAttribute("hidden")):(O?.querySelector("sidebar-delete-current")?.removeAttribute("hidden"),O?.querySelector("#encryption-toggle")?.removeAttribute("hidden"),O?.querySelector("#manage-status")?.setAttribute("hidden",""),O?.querySelector("#auth-status")?.setAttribute("hidden",""),O?.querySelector("#public-status")?.setAttribute("hidden",""),O?.querySelector("#view-as-status")?.setAttribute("hidden","")),EC()}function ln(e){let t=O?.querySelector("#sync-status");if(!t)return;if(O_(),fO(),l.serverMode==="managed"&&l.localMode){t.hidden=!0,j.setForcedOff(!0);let p=O?.querySelector("#auth-status");p&&(p.hidden=!0),O?.querySelector("#public-status")?.setAttribute("hidden","");return}if(C()){t.hidden=!0,j.setForcedOff(!0),N_();return}if(l.serverMode==="standalone"){t.hidden=!0;let p=O?.querySelector("#auth-status");p&&(p.hidden=!0);return}let n=O?.querySelector("#auth-status");n&&(n.hidden=!0);let r=L_(),o=lt()!=null;if(r&&o&&j.isEnabled()&&ea().catch(p=>{console.warn("sync: load failed",p)}),r&&o&&!j.getServerUrl()&&Oa&&j.isEnabled()&&j.setServerUrl(Oa),j.setForcedOff(!r),!r){t.hidden=!0;return}t.hidden=!1;let s=e??j.status;t.dataset.status=s;let i=j.persistenceDegraded;t.toggleAttribute("data-degraded",i);let a=j.proxyAuthRequired;t.toggleAttribute("data-proxy-auth",a);let c=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.":"";c?t.dataset.tooltip=c:delete t.dataset.tooltip;let u=t.querySelector(".sync-label");u&&(u.textContent=dO[s]??"")}j.onStatusChange(ln);var Ab=!1,Ob=!1;async function B_(){if(!j.persistenceDegraded||Ob||Ab)return;Ab=!0;let{shown:e}=await n_();if(Ab=!1,e){Ob=!0;return}j.persistenceDegraded&&setTimeout(B_,1500)}j.onPersistenceDegraded(e=>{ln(),e?B_():Ob=!1});var Eb=!1,Bb=!1;async function P_(){if(!j.proxyAuthRequired||Bb||Eb)return;Eb=!0;let{shown:e,reload:t}=await r_();if(Eb=!1,!e){j.proxyAuthRequired&&setTimeout(P_,1500);return}Bb=!0,t&&location.reload()}j.onProxyAuthRequired(e=>{ln(),e?P_():Bb=!1});function mO(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=K().find(c=>c.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 c=>{if(!i){i=!0;try{c&&await Nf(r,s.value)}catch(u){alert(`Failed to rename workspace: ${u.message}`)}finally{n.contains(s)&&(n.textContent=K().find(u=>u.id===r)?.name??o.name),W()}}};s.addEventListener("keydown",c=>{c.key==="Enter"?(c.preventDefault(),a(!0)):c.key==="Escape"&&(c.preventDefault(),a(!1))}),s.addEventListener("blur",()=>a(!0)),s.addEventListener("click",c=>c.stopPropagation()),s.addEventListener("dblclick",c=>c.stopPropagation())}function Ru(){for(let e of O.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function D_(e){return e.dataTransfer.types.includes(Ub)||e.dataTransfer.types.includes(Ba)}function gO(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(Ba,r),e.dataTransfer.setData(Nb,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r),t.classList.add("dragging"),xu=!0,W();return}let n=e.target.closest(".file-item[data-file]");n&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(Ub,n.dataset.file),e.dataTransfer.setData(Nb,n.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n.dataset.file),n.classList.add("dragging"),ku=!0,W())}function hO(){for(let e of O.querySelectorAll(".dragging"))e.classList.remove("dragging");Ru(),(ku||xu)&&(ku=!1,xu=!1,W())}function bO(e){if(!D_(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),n=O.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",Ru(),!s)if(t){let i=t.dataset.workspaceId;for(let a of O.querySelectorAll(`[data-workspace-id="${CSS.escape(i)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(Ba)?"[data-default-bundles]":"[data-default-reports]",c=O.querySelector(a);c&&c.classList.add("drag-over")}}function yO(e){O.contains(e.relatedTarget)||Ru()}async function wO(e){if(!D_(e))return;e.preventDefault(),e.stopPropagation(),Ru();let t=e.target.closest("[data-workspace-id]"),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(Nb)||null;if(e.dataTransfer.types.includes(Ba)){let i=e.dataTransfer.getData(Ba);if(!i)return;if(r&&r!==n&&qm(r,i)){let a=(l.bundles??[]).find(p=>p.integrity===i)?.name??i,c=K().find(p=>p.id===r),{confirmed:u}=await e_({name:a,workspaceName:c?.name??""});if(!u)return;try{await Zc(r,i)}catch(p){console.warn(`Failed to remove '${a}' from source workspace ${r} remote:`,p)}}n&&await to(i,n),r&&r!==n&&await Df(i,r),W();return}let o=e.dataTransfer.getData(Ub);if(!o)return;if(r&&r!==n&&ms(r,o)){let i=K().find(c=>c.id===r),{confirmed:a}=await t_({name:o,workspaceName:i?.name??""});if(!a)return;try{await Jc(r,o)}catch(c){console.warn(`Failed to remove '${o}' from source workspace ${r} remote:`,c)}}n&&await eo(o,n),r&&r!==n&&await Wi(o,r),l.currentWorkspace&&(l.currentWorkspace===n||l.currentWorkspace===r)?await Vs(l.currentWorkspace):W()}var St=null,Pb=null,ke=0,d_=0,Us=null,vo=!0,$o=!0,an=!1,Na=null,vu=null,Su;function vO(){let e=Su;return Su=void 0,e}async function Tu({forgetLastView:e=!0,resetNavigation:t=!0}={}){Z.reset({force:t}),Na?.remove(),Na=null;let n=++ke;if($o=!0,an=!1,nk(),Nm(),bo(),Cu(),Yc(l.serverMode!=="e2e"),j.setForcedOff(!0),j.setProtocolLocked(l.serverMode!=="e2e"||!!St),h_({forgetLastView:e}),l.triage.clear(),C()){let r=ko();if(Bm()&&(await r,n!==ke))return}else{if(l.managedSession=null,l.managedTeams=[],await ki(),n!==ke||(await qi(),n!==ke))return;Af()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),_u(),O_(),ln(j.status),E(),await W()}async function R9(e){if(e!==void 0&&!ww(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${yw.join(", ")}.`);if(await kt(),e===void 0&&(St||C()))return;let t=ke,n=e===void 0?null:await B();t===ke&&(St??={serverMode:l.serverMode,serverModeConfig:l.serverModeConfig,serverModeSelection:l.serverModeSelection,localMode:l.localMode,managed:l.managed},n&&n.setPreviewRole(e),l.serverMode="managed",xn(!1),l.managedSession=null,l.managedTeams=[],await Tu({forgetLastView:!1}))}async function $O(){let e=St,t=Pb;St=null,Pb=null,tk(),Object.assign(l,e),await Tu({forgetLastView:!1}),t&&yo(t)}function yo(e,{runtime:t=!0}={}){if(St){Pb=e;return}$u(!1);let n=lt()!=null,r=C(),o=l.serverMode;gn()&&e.managed&&(l.serverModeSelection="managed"),oc(e.mode),gn()&&e.managed&&xn(!1),C()||(Su=void 0);let s=o!==l.serverMode;l.managed=e.managed;let i=t&&l.githubNewIssueLabels!==(e.githubNewIssueLabels??"");if(t&&(l.githubNewIssueLabels=e.githubNewIssueLabels??""),t&&(l.deepviewScanServer=e.mode==="managed"?null:e.deepviewScanServer??null),_u(),Yc(l.serverMode!=="e2e"),j.setProtocolLocked(l.serverMode!=="e2e"),Cp(e),r!==C()){Tu({forgetLastView:!1,resetNavigation:n&&!gn()&&!Vo(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}ln(j.status),s&&l.serverMode==="e2e"&&L_()&&j.isEnabled()&&ea().then(a=>{if(!(!a||l.serverMode!=="e2e"))for(let c of a.triageSync.openSessions)a.openWorkspace(c.workspaceId)}).catch(a=>console.warn("sync: resume failed",a)),s&&W(),i&&E({animate:!1}),C()&&ko()}function ko(){if(Us?.generation===ke)return Us.promise;vo=!0;let e={generation:ke,promise:null};return Us=e,e.promise=kO().finally(()=>{Us===e&&(Us=null,W())}),e.promise}async function kO(){let e=ke,t=++d_,n=()=>e===ke&&t===d_&&C();try{let r=l.managedSession,o=await ak({fallback:r,sent:vO()});if(!n())return;l.managedSession=o,vo=!1,(!r||r.id!==o?.id||r.role!==o?.role)&&($o=!0),W(),rk(o),r&&(r.id!==o?.id||r.role!==o?.role)?(l.managedTeams=[],l.bundles=[],bo(),Cu(),Z.reset(),Ct({history:!1})):Object.hasOwn(ai,l.currentView)&&xr(l.currentView)&&E({animate:!1}),N_(),p_(),document.querySelector("base")||(Na=document.createElement("base"),Na.href="/",document.head.prepend(Na));let s=vu=Vb(n,{signal:new AbortController().signal}).finally(()=>{vu===s&&(vu=null)}),i=Z.active&&Object.hasOwn(ai,l.currentView)&&!xr(l.currentView)?Z.navigate({view:xr("manage")?"manage":"home"},{replace:!0}):o?Z.start(_O,{onCancel:CO}):null;await Promise.all([s,i])}catch(r){console.warn("managed: session probe failed:",r)}finally{n()&&(vo||$o)&&(vo=!1,$o=!1,W())}}RC((e,t,n)=>Vb(e,{strict:!0,signal:t,revision:n}));var xO=$C(lk);function z_(e){return vu??Vb(e,{reuse:!0})}var Fb=0;async function Vb(e,{strict:t=!1,signal:n=Fe(),reuse:r=!1,revision:o=null}={}){let s=ke,i=l.managedSession,a=await xO({generation:s,session:i,signal:n,reuse:r,revision:o}),c=a??(t?null:l.managedTeams);if(n.aborted||c===null||!e()||s!==ke||!C())return!1;let u=l.managedTeams.find(h=>h.id===l.currentManagedTeam)?.name,p=ok(c);l.managedTeams=c;let f=a===null?Fb:++Fb;$o=!1;let m=fr(l);if(a!==null&&m&&!an){let h=fe(),b=()=>e()&&!n.aborted&&!an&&f===Fb&&h===fe()&&s===ke&&l.managedSession?.id===i?.id&&l.managedSession?.role===i?.role&&C()&&fr(l)===m,y;try{y=await wC(l,c,{fetchCatalog:()=>Pm({signal:AbortSignal.any([n,Fe()])}),isCurrent:b,render:()=>E({animate:!1}),replaceRoute:w=>Z.replaceRoute(w)})}catch(w){return b()?(w.name!=="AbortError"&&Ue(`Couldn't refresh bundle access: ${w.message}`,{kind:"error"}),W(),!1):e()}if(!b())return e();if(!y){wo=null;let w=Ct({history:!1}),v=fe();return await w,v===fe()&&s===ke&&e()&&l.managedSession?.id===i?.id&&l.managedSession?.role===i?.role&&Z.replaceRoute({view:"home"}),e()}}if(yC(l,c,p)){let h=c.find(k=>k.id===l.currentManagedTeam),y=h&&(l.currentManagedReport===null||h.reports.some(k=>k.id===l.currentManagedReport))?Ge({view:l.currentView==="links"?"findings":l.currentView,teamId:h.id,reportId:l.currentManagedReport},c):null;wo=null;let w=Ct({history:!1}),v=fe();if(await w,t)return v===fe()&&s===ke&&l.managedSession?.id===i?.id&&l.managedSession?.role===i?.role&&C()&&await Z.navigate(y??{view:"home"},{replace:!0}),e();if(!e())return!1}if(!an&&["workspace-reports","workspace-bundles"].includes(l.currentView)&&!c.some(h=>h.id===l.currentManagedTeam)){let h=Ct({history:!1}),b=fe();return await h,b===fe()&&s===ke&&e()&&l.managedSession?.id===i?.id&&l.managedSession?.role===i?.role&&Z.replaceRoute({view:"home"}),e()}return!an&&(l.currentWorkspace||l.bundleDetails?.npm||u!==c.find(h=>h.id===l.currentManagedTeam)?.name)&&E({animate:!1}),W(),!(a!==null&&!an&&!await Hb(n))}var SO=new Set(["admin-users","manage-repos","manage-repo-risk","manage-teams","manage-import","manage-deduplication"]),wo=null;function xr(e){let t=l.managedSession?.role;return e==="manage-links"&&!l.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!SO.has(e)||t==="admin")}var Db=0;function CO(){++Db,an=!1,Le();let e=ke;z_(()=>e===ke&&C())}async function _O(e,t){let n=++Db;an=!0;try{return await RO(e,t)}finally{n===Db&&(an=!1,W())}}async function RO(e,t){let n=wo===fe()?wo:null;if(Le(),(["findings","files","bundles","workspace-reports","workspace-bundles"].includes(e?.view)||e?.finding)&&(!await z_(t)||!t()))return!1;let r=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!xr("manage-bundles")||(r=await Pm(),!t()||!C()))||(e=hw(e,l.managedTeams,r),!e))return!1;let o=n!==null&&wo===n&&l.currentManagedTeam===e.teamId&&l.currentManagedReport===e.reportId;if(!t()||!C()||e.view!=="home"&&(!l.managedSession||l.managedSession.role==="none"))return!1;if(e.finding){let{revealFinding:i}=await import("./chunk-G6AJWENO.js");if(!t())return!1;let a=await i({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(c,u)=>Sr(c,u,{history:!1}),isCurrent:t});return t()?a.ok?(wo=fe(),vr(),Ge({view:"findings",teamId:l.currentManagedTeam,reportId:l.currentManagedReport,finding:{id:e.finding.id}},l.managedTeams)):(a.reason&&Ue(a.reason),!1):!1}if(e.view==="workspace-reports"||e.view==="workspace-bundles")return m_(e.teamId,e.view.slice(10),{history:!1});if(e.view==="bundles"){let i=e.teamId==null?r.map(pr):Ms(l.managedTeams);if(!await vC(e,i,t,W))return!1;let{compareId:a,compareMode:c,...u}=e;return Ge({...u,bundleTab:l.bundleDetailsTab,...Lg(l)},l.managedTeams,r)}if(e.view==="home")return Ct({history:!1});if(e.view==="npm")return l1(e,t,W);if(e.view==="reviews")return l.managedSession.publicShare?!1:(Et(),l.currentView="reviews",l.currentManagedTeam=null,l.currentManagedReport=null,document.body.classList.remove("report-fullscreen"),E({animate:!1}),W(),e);if(e.view==="manage-deduplication"&&e.linkId)return xr(e.view)&&await f_(e.linkId);if(Object.hasOwn(ai,e.view))return xo(e.view,{...e,history:!1});let s=l.managedTeams.find(i=>i.id===e.teamId);return!s||!o&&!await Sr(s,e.reportId,{history:!1})||!t()?!1:(l.currentView!==e.view&&Et(),l.currentView=l.currentLinks?"links":e.view,document.body.classList.remove("report-fullscreen"),E({animate:!1}),wo=fe(),vr(),W(),document.querySelector("#main-content")?.scrollTo({top:0}),Ge({...e,view:l.currentView==="links"?"findings":l.currentView},l.managedTeams))}document.addEventListener("managed-bundle-open",e=>{if(C()&&typeof e.detail?.id=="string"){let t=pr(e.detail),n=l.managedTeams,r=n.find(o=>o.id===l.currentManagedTeam&&o.bundles?.some(s=>s.id===t.managedId))??n.find(o=>o.bundles?.some(s=>s.id===t.managedId));Z.navigate(mr(n,t,r?.id,l.currentView==="bundles"?l.bundleDetailsTab:"overview"))}});document.addEventListener("managed-import-complete",()=>{ko()});document.addEventListener("managed-feed-closed",()=>{vo=!0,bo(),Cu(),Ct({history:!1}).then(()=>ko()),Ue("Workspace access changed. Refreshing your session.")});async function xo(e,t={}){if(t.history!==!1&&C()&&(Z.active||await ko(),Z.active))return Z.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(ai,e)||!C()||!xr(e))return!1;let n=Le(),r=ke;try{let o=await B();e==="manage-import"&&xr(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(`${e}: managed bundle load failed:`,o),!1}return r!==ke||n!==fe()||!C()||!xr(e)?!1:(l.currentView=e,l.scanSelection=e==="manage-scans"?t.scanMode==="link"?{mode:"report",reportMode:"link"}:t.bundleId?{bundleId:t.bundleId,...t.scanMode==="dependencies"?{mode:"dependencies"}:{}}:null:null,l.bundleCreationRepoId=e==="manage-bundles"?t.createRepoId??null:null,E({animate:!1}),W(),ko(),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=>Ue(e.detail.message,{kind:"error"}));document.addEventListener("managed-admin-navigate",e=>{let t=e.detail?.view,n=e.detail?.actor;typeof t=="string"&&xo(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})});var TO;function kt(){return TO??=IO().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}function u_(){let e=Sp();return Su=Ol(e).then(t=>t?.session),e}async function IO(){let e=lt();if(e){oc(e.mode),l.managed=e.managed,u_().then(o=>{if(o&&o!=="standalone")return yo(o)}).catch(o=>console.warn("server mode revalidation:",o));return}$u(!hi());let t=u_(),n=await Ol(t,hi()?0:3e3),r=lt();if(r)return n&&n!=="standalone"?yo(n):yo(r,{runtime:!1});if(n&&n!=="standalone")return yo(n);n==="standalone"&&Nl(),l.serverMode="standalone",l.serverModeConfig=null,l.serverModeSelection=null,xn(n===null),Yc(!0),$u(!1),ln(j.status),W(),n===null&&t.then(o=>{let s=lt(),i=o&&o!=="standalone"?o:s??o;if(i==="standalone"){if(Nl(),St){St.serverMode="standalone",St.serverModeConfig=null,St.serverModeSelection=null,St.localMode=!1;return}return xn(!1),ln(j.status),W()}if(i)return yo(i,{runtime:i!==s})}).catch(o=>console.warn("server mode probe:",o))}function MO(){let e=O?.querySelector("#user-menu"),t=O?.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 AO(e){Cr=e,O=e.renderRoot,Lb=O.querySelector("#file-list"),FC(O.querySelector("#encryption-toggle")),zC(O.querySelector("#storage-status")),O.addEventListener("click",l_),O.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),l_(t))}),O.addEventListener("dblclick",mO),O.addEventListener("dragstart",gO),O.addEventListener("dragend",hO),O.addEventListener("dragover",bO),O.addEventListener("dragleave",yO),O.addEventListener("drop",wO),mi(O,lO),O.querySelector("#sidebar-search-input")?.addEventListener("input",cO),MO(),ln(j.status),lt()||$u(!hi()),W(),j.onServerInfo(t=>{if(l.serverMode!=="e2e")return;let n=lt(),r=n&&{...n,...l.deepviewScanServer?{deepviewScanServer:l.deepviewScanServer}:{}};return yo(xp(r,t))}),kt(),l.serverMode==="managed"&&ko()}var zb=class extends _t{static styles=[P(MC),P(IC)];render(){return d`<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">${Kt()}</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">${z(ol)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){AO(this)}};customElements.define("app-sidebar",zb);async function W_(e){let t=await hl(e),n=await gm(t);if(n.kind==="reports")return{kind:"reports",reports:n.reports};let r;if(n.kind==="encrypted"){if(r=await zc({tryPassword:s=>bl(t,s)}),!r)return null}else r=yl(n.text);let o=await mm(r,{conflictResolver:async(s,i)=>{try{return await Gc(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(l.currentFile||l.currentWorkspace)&&E(),{kind:"workspace",workspace:o}}var jb=class extends N{static styles=[...N.styles,P(et)];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:rr(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 ox(this.workspaceId,r.identifier);if(!s.ok){this._fail(n,r,"bundle",s.reason??"unknown");continue}await to(r.identifier,this.workspaceId),t.push({kind:"bundle",identifier:r.identifier});continue}let o=await rx(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{l.currentWorkspace===this.workspaceId&&await Vs(this.workspaceId)}catch{}n.length===0&&this._finish({downloaded:t,failed:n})};render(){let{count:t,singular:n,kindLabel:r}=Uc(this.items),o=n?d`Download <strong>"${rr(this.items[0])}"</strong> from the workspace's remote inventory?`:d`Download <strong>${t}</strong> remote ${r} into this workspace?`,s=n?g:Vc(this.items),i=this._running?n?"Downloading\u2026":`Downloading ${t} ${r}\u2026`:n?"Download":`Download ${t}`;return d`<dialog @close="${this._onClose}"><header><h3>Download from remote</h3></header><p class="lwd-body">${o}</p>${s} ${jc(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:d`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-download-dialog",jb);function Iu({workspaceId:e,items:t}={}){return ee("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}function Mu(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=>({...pr(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 Gb(e,t){return t==="findings"?e.title:d`<button type="button" class="workspace-title-link" data-action="workspace-findings">${e.title}</button>`}function Wa(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 d`<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 Ha(e){return new Set(e.flatMap(t=>t?.source==="links"?[]:Object.keys(t?.tree??{}))).size}function Kb(e,t){if(!(e>1))return g;let n=t==="files";return d`<button type="button" class="${`files-toggle-btn${n?" active":""}`}" data-action="toggle-files" aria-pressed="${String(n)}">${`${e} files`}</button>`}function H_(e,t,n=0){if(!e)return d`<p class="workspace-content-empty">This workspace is no longer available.</p>`;let r=`workspace-${t}`,o=e[t];return d`<section class="workspace-content-view"><header class="page-head"><div class="page-title"><h1>${Gb(e,r)}${Wa(e,"reports",r)}${Wa(e,"bundles",r)}${Kb(n,r)}</h1></div></header>${o.length>0?d`<ul class="workspace-content-list">${o.map(s=>{let i=[s.kind==="stasis"?"Stasis":s.kind==="sourcemap"?"Sourcemap":null,Number.isFinite(s.size)?me(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 d`<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?d`<span class="workspace-content-visibility">Hidden</span>`:g}</span> ${a?d`<span class="workspace-content-repo">${a}</span>`:g} </span><span class="workspace-content-stats">${s.available?i:"Not available locally"}</span> ${s.available?d`<span class="workspace-content-arrow" aria-hidden="true">→</span>`:g}</button></li>`})}</ul>`:d`<p class="workspace-content-empty">No ${t} in this ${e.scope}.</p>`}</section>`}async function U_(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(p=>p.id===e.currentManagedTeam);if(!i)return!0;let a=e.managedSession,c=()=>!n.aborted&&r()&&e.currentView===s&&e.managedSession===a&&e.currentManagedTeam===i.id&&e.managedTeams.find(p=>p.id===i.id)===i,u=await new Promise(p=>{let f=h=>{n.removeEventListener("abort",m),p(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 c()?(e.workspaceContentFileCount=u?Ha(u.map(p=>p.data)):0,o(),u!==null):!0}var So="deepview.lastFile";function Wb(e,t="overview",{push:n=!1}={}){if(C()){let o=l.bundles.find(i=>i.integrity===e),s=o?.npm?_a(o,t,gr(l,t)):mr(l.managedTeams,o,l.currentManagedTeam,t,gr(l,t),l.bundles);n?Z.pushRoute(s):Z.replaceRoute(s);return}let r=t&&t!=="overview"&&ap.has(t)?` ${t}`:"";Te(So,`b:${e}${r}`).catch(()=>{})}var Q=e=>e!==fe();function EO(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Ua(e){return await EO(),e!==null&&Q(e)?!1:(E(),kg(l.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!Q(e)).catch(()=>{}),!0)}function Eu(){J.selected=null,J.focusedPkg=null,J.layoutCache=null,J.solo=null,J.hidden.clear(),J.pathFilter="",Et()}function js(e){for(let t of j.openSessions)t&&!e.has(t.workspaceId)&&(j.closeSession(t.workspaceId),Xm(t.workspaceId))}function qb(){he.classList.remove("active"),he.replaceChildren(),at.classList.remove("hidden"),document.title="DeepView"}function V_(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function Yb(e){let t=j_(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function j_(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function Au({name:e,content:t,existingNames:n}){if(!n.has(e))return await Gt(e,t),n.add(e),{name:e,content:t};let r;try{r=await pe(e)}catch(c){if(!V_(c))throw c;return await Gt(e,t),n.add(e),{name:e,content:t}}if(r===t)return{name:e,content:t};let s=K().filter(c=>Array.isArray(c.reports)&&c.reports.includes(e)).filter(c=>ms(c.id,e)),i=await bC({name:e,workspaceNames:s.map(c=>c.name),existingNames:n});if(i.action==="cancel")return null;if(i.action==="rename"){let c=i.newName;return await Gt(c,t),n.add(c),{name:c,content:t}}let a;if(s.length>0)try{a=await sx(e)}catch(c){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,c)}try{await Gt(e,t),s.length>0&&await LO(e,s)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function FO(e,t){let n=typeof t?.github=="string"?t.github:"";if(n)try{await of(e,n)}catch(r){console.warn(`Import: failed to adopt the repository "${n}" for "${e}":`,r)}}async function LO(e,t){let n;try{n=await vn(e)}catch(r){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,r);return}for(let r of t)try{await na(r.id);let o=await Xc(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 Xb(e){if(e=[...e],e.length===0||(await kt(),C())||(await wu(),C()))return;let t=null,n=null,r=new Set,o=new Set(await le()),s=[];for(let i of e)try{let a=j_(i.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let f=await W_(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=We(m.content);if(!h.recognized){s.push(m.name);continue}let b=await Au({name:m.name,content:m.content,existingNames:o});b&&(ze(b.name,h.count,h.source),await FO(b.name,m.repo),t={name:b.name,content:b.content})}try{let m=await le();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(Yb(i.name)){let f=new Uint8Array(await i.arrayBuffer()),{integrity:m}=await Kr(i.name,f);n=m,r.add(m);continue}let u=await i.text(),p=Sw(u,i.name);if(p)for(let f of p){let{count:m,source:h}=We(f.content),b=await Au({...f,existingNames:o});b&&(ze(b.name,m,h),t={name:b.name,content:b.content})}else if(aw(u,a)==="codex"){let f=iw(u);for(let{displayName:m,data:h}of f){let b=m.replaceAll("/","__")+".codex",y=JSON.stringify(h),{count:w,source:v}=We(y),k=await Au({name:b,content:y,existingNames:o});k&&(ze(k.name,w,v),t={name:k.name,content:k.content})}}else{let f=We(u);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 Au({name:i.name,content:u,existingNames:o});if(!m)continue;ze(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 W(),t?await za(t.name,t.content):n&&(dr(n),Wb(n,l.bundleDetailsTab),E(),await W(),gd(n)),kg(r).catch(()=>{})}async function za(e,t,{workspaceId:n}={}){if(C())return;let r=Le();l.currentManagedTeam=null,l.currentManagedReport=null,l.currentReportWorkspace=xs(e,n);let o=new Set(K().filter(i=>Array.isArray(i.reports)&&i.reports.includes(e)).map(i=>i.id));if(js(o),l.reports=[],ar(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.currentFile=e,l.currentWorkspace=null,l.currentLinks=null,l.managedReport=null,l.managedReports=[],l.managedComments.clear(),l.managedIssues.clear(),l.currentView!=="findings"&&l.currentView!=="files"&&(l.currentView="findings"),l.repoUrl=qe(e),l.repoEditing=!1,Eu(),Te(So,xc(e,l.currentReportWorkspace)).catch(()=>{}),t===void 0){try{t=await pe(e)}catch(i){if(Q(r))return;if(i&&i.message?.includes("vault locked")){if(await gu()&&!Q(r)){await za(e);return}Q(r)||(l.currentFile=null,await W());return}if(V_(i)){let a=K().find(c=>Array.isArray(c.reports)&&c.reports.includes(e)&&ms(c.id,e));if(a)try{if(await na(a.id),Q(r))return;let c=await Iu({workspaceId:a.id,items:[{kind:"report",identifier:e}]});if(Q(r))return;if(c?.downloaded?.some(u=>u.kind==="report"&&u.identifier===e)){await za(e);return}}catch(c){if(console.warn(`Re-download prompt for missing "${e}" failed:`,c),Q(r))return}Q(r)||(l.currentFile=null,await W());return}alert(`Failed to read ${e}: ${i.message}`),l.currentFile=null,await W();return}if(Q(r))return}let s=Hn(t);if(s?(l.currentLinks={name:e,...s},l.currentView="links",E()):await Fu(e,t,r),!Q(r)){for(let i of o)j.openSession(i),j.refreshSession(i),na(i);return await W(),!0}}function f_(e){return l.managedSession?.role!=="admin"?!1:Sr({id:null,reports:[{id:e}]},e,{history:!1,deduplication:!0})}function Hb(e=Fe()){let t=Fe();return U_(l,{fetchReports:zm,signal:AbortSignal.any([e,t]),isCurrent:()=>C()&&Fe()===t,render:()=>E({animate:!1})})}async function m_(e,t,{history:n=!0}={}){if(t!=="reports"&&t!=="bundles")return!1;let r=`workspace-${t}`,o=C(),s=o?l.managedTeams.find(u=>u.id===e):K().find(u=>u.id===e);if(!s)return!1;if(o&&n&&Z.active)return Z.navigate(Ge({view:r,teamId:e},l.managedTeams));let i=o?`managed-team:${e}`:e,a=l.currentWorkspace===i?["workspace-reports","workspace-bundles"].includes(l.currentView)?l.workspaceContentFileCount:Ha(l.reports):0,c=Le();if(js(new Set),ja({forgetLastView:!1}),l.currentWorkspace=i,l.workspaceContentFileCount=a,l.currentManagedTeam=o?e:null,l.currentView=r,o&&(l.bundles=Ms(l.managedTeams)),he.classList.add("active"),at.classList.add("hidden"),document.body.classList.remove("report-fullscreen"),E({animate:!1}),document.querySelector("#main-content")?.scrollTo({top:0}),o||Te(So,`${t==="reports"?"wrs":"wbs"}:${e}`).catch(()=>{}),await W(),Q(c))return!1;if(E({animate:!1}),o)await Hb();else{let u=await Promise.all((s.reports??[]).map(async p=>{try{return rp(await pe(p)).data}catch{return null}}));if(Q(c))return!1;l.workspaceContentFileCount=Ha(u),E({animate:!1})}return!Q(c)}async function Sr(e,t=null,{history:n=!0,deduplication:r=!1}={}){if(!C()||!e||!Array.isArray(e.reports))return!1;if(n&&Z.active)return Z.navigate(Ge({view:"findings",teamId:e.id,reportId:t},l.managedTeams));if(t!==null&&!e.reports.some(m=>m.id===t))return!1;let o=Le(),s=e.reports.find(m=>m.id===t&&m.visible===!1),i=Fe(),a;try{a=r?await(await B()).fetchManagedLinkWorkspace(t,{signal:i}):await zm(e.id,{reportId:s?.id??null})}catch(m){return Q(o)||Ue(m.message||"Could not load link report."),!1}if(Q(o))return!1;if(sk(),a===null||t!==null&&!a.some(m=>m.id===t))return Ue("Could not load all team reports. Please try again."),!1;let c=a.find(m=>m.id===t&&m.data.source==="links"&&Array.isArray(m.data.links)),u=a.filter(m=>t===null||c||m.id===t),p=u.filter(m=>m.data.source!=="links"||!Array.isArray(m.data.links));js(new Set);let f=document.createElement("p");f.setAttribute("role","status"),f.textContent="Loading report triage\u2026",he.replaceChildren(f),he.classList.add("active"),at.classList.add("hidden"),l.currentView="findings",l.reports=[],ar(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.currentFile=t===null?null:a.find(m=>m.id===t).filename,l.currentWorkspace=t===null?`managed-team:${e.id}`:null,l.currentManagedTeam=e.id,l.currentManagedReport=t,c$(e.id,a),l.managedReports=u.map(m=>({id:m.id,filename:m.filename})),l.managedComments.clear(),l.managedIssues.clear(),l.managedReport=t===null?null:l.managedReports[0]??null,l.currentReportWorkspace=null,l.currentLinks=null,l.selectedBundle=null,l.selectedBundleWorkspace=null,l.scanSelection=null,l.repoUrl="",l.repoEditing=!1,Eu();for(let m of p)if(await Fu(m.filename,m.data,o,{renderView:!1,managedReportId:m.id,managedRepo:m.repo}),Q(o))return!1;if(p.length>0){let{createManagedAnnotationRead:m,hydrateManagedReportTriage:h}=await import("./chunk-5RCM2J63.js");if(Q(o))return!1;let b=async w=>{let v=m(l.currentManagedTeam,w);return(await Promise.all(p.flatMap(x=>[h(x.id,{renderView:!1,signal:w,readAnnotations:v}),xd(x.id,{signal:w,readAnnotations:v})]))).every(Boolean)&&!w.aborted&&!Q(o)},y=r?await b(Fe()):await vr({hydrate:b});if(Q(o))return!1;if(!y)return await Ct({history:!1}),Ue("Could not load report annotations. Open the team or report again to retry."),!1}if(c){if(l.currentView="links",l.currentLinks={name:c.filename,groups:c.data.links,skipped:0,...r?{managedId:t}:{}},!await Ua(o))return!1}else if(p.length===0)Lu();else if(oa(lo()),!await Ua(o))return!1;return vr(),await W(),!0}async function Vs(e){if(C())return;l.currentManagedTeam=null,l.currentManagedReport=null,l.managedReport=null,l.managedReports=[],l.managedComments.clear(),l.managedIssues.clear();let t=K().find(f=>f.id===e);if(!t)return;let n=Le();js(new Set([e])),l.currentView!=="findings"&&l.currentView!=="files"&&(l.currentView="findings"),it("workspace",e),l.reports=[],ar(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.currentFile=null,l.currentWorkspace=e,l.currentReportWorkspace=null,l.currentLinks=null,l.repoUrl="",l.repoEditing=!1,Eu(),Te(So,`ws:${e}`).catch(()=>{}),t.reports.length===0&&qb();let r=await Xi(t);if(Q(n))return;let o=!0,s=t.reports.map(f=>pe(f).catch(()=>null)),i=0;for(let f=0;f<t.reports.length;f++){let m=await s[f];if(Q(n))return;if(m===null){o=!1;continue}if(!Hn(m)&&(await Fu(t.reports[f],m,n,{renderView:!1})?i++:o=!1,Q(n)))return}i===0&&t.reports.length>0&&qb(),o&&ro(t)?.appMode&&(l.showRevalidation=!0,l.upstreamOnly=!1,l.revalidationDetailed=!1,Va());let a=l.reports.slice();WC(t,a,r,{complete:o,isCurrent:()=>!Q(n)&&l.currentWorkspace===e&&["findings","files"].includes(l.currentView)});let c=W().catch(f=>console.warn("workspace sidebar:",f));if(i>0){if(oa(lo()),!await Ua(n))return}else Lu();let u=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],p=u.map(f=>l[f]);UC(t,a,r,{complete:o,isCurrent:()=>!Q(n),onReady:async f=>{!f.appMode||l.currentWorkspace!==e||!["findings","files"].includes(l.currentView)||u.some((m,h)=>l[m]!==p[h])||(l.showRevalidation=!0,l.upstreamOnly=!1,l.revalidationDetailed=!1,Va(),oa(lo()),await Ua(n))}}).catch(f=>console.warn("workspace App metadata:",f)),j.openSession(e),j.refreshSession(e),na(e),await c}async function g_({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!l.currentFile)return;let n=Le(),r=l.currentFile;rs(r),qr(r,"");for(let o of t)try{let s=await Jc(o,r);if(Q(n))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete '${r}' from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete '${r}' from workspace ${o} remote:`,s)}if(await qo(r),!Q(n)&&(await zi(r,null),!Q(n))){if(e==="wipe"){try{await _c()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(Q(n))return}Q(n)||(ja(),await W())}}function ja({forgetLastView:e=!0}={}){C0(),l.currentManagedTeam=null,l.currentManagedReport=null,l.currentFile=null,l.currentWorkspace=null,l.workspaceContentFileCount=0,l.currentReportWorkspace=null,l.currentLinks=null,l.managedReport=null,l.managedReports=[],l.managedComments.clear(),l.managedIssues.clear(),l.selectedBundle=null,l.selectedBundleWorkspace=null,l.scanSelection=null,l.bundleDetails=null,l.bundleDetailsTab="overview",l.bundleSourceFile=null,l.bundleSourceFindingIdx=null,l.selectedPackage=null,l.selectedPackageVersion=null,l.packageDetailsTab="overview",l.packageSlideTriage=null,l.packageSlideTransient=!1,l.expandedPackages.clear(),l.selectedRepository=null,l.repositoryDetailsTab="overview",l.repositorySlideTriage=null,l.repositorySlideTransient=!1,l.filesSelectedFile=null,l.tableSelectedGid=null,l.kanbanPopoverGid=null,l.kanbanExpandedColumn=null,l.focusGid=null,l.activeTabByGroup.clear(),l.reports=[],ar(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.repoUrl="",l.repoEditing=!1,l.shownTriage=null,l.currentView="findings",Eu(),e&&Xn(So),qb()}function h_(e){Le(),js(new Set),ja(e)}async function Ct({history:e=!0}={}){return e&&C()&&Z.active?Z.navigate({view:"home"}):(Le(),js(new Set),ja({forgetLastView:!C()}),await W(),!0)}async function b_({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!l.selectedBundle)return;let t=Le(),n=l.selectedBundle;for(let o of e)try{let s=await Zc(o,n);if(Q(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 Vp(n),Q(t)||(await Pf(n,null),Q(t)))return;l.selectedBundle=null,l.selectedBundleWorkspace=null,l.bundleDetails=null,l.bundleSourceFile=null,l.bundleSourceFindingIdx=null;let r=ye(So);typeof r=="string"&&(r===`b:${n}`||r.startsWith(`b:${n} `))&&Xn(So),wf(n),l.bundles=await Ke(),!Q(t)&&(E(),await W())}async function y_(e,t="detach",{triage:n="keep"}={}){let r=K().find(a=>a.id===e);if(!r)return;Le();let o=Array.isArray(r.reports)?[...r.reports]:[];if(j.closeSession(e),Xm(e),t==="delete"){for(let a of o){try{await qo(a)}catch{}rs(a),qr(a,"")}if(n==="wipe")try{await _c()}catch(a){console.warn("Skipped orphan-triage GC:",a)}}let s=l.currentWorkspace===e,i=t==="delete"&&l.currentFile!=null&&o.includes(l.currentFile);(s||i)&&ja(),await Lf(e),await W()}async function Fu(e,t,n=null,{renderView:r=!0,managedReportId:o=null,managedRepo:s=null}={}){let i=()=>n!==null&&Q(n);try{if(await Promise.all([it("report",e),it("workspace",l.currentWorkspace||l.currentReportWorkspace)]),i()||(await no(),i()))return;let{data:a,reason:c}=o===null?C()?bw(t,e):rp(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(c);let u=l.reports.length===0,p=fn(a)??[],f=p.flatMap(id);if(await cw(f),i())return;let m=new Set(f.filter(cv).map(x=>x.source??a.source??null)),h=s??a?.repo,b=Oe({repo:h}),y=b??(o==null?qe(e):""),w=Tt(h),v=dl([{groups:p.map(id),tree:a.tree}]),k=[];for(let x of p){let $=id(x);if($.length===0)continue;let S=[];for(let _ of $){let R={..._,_id:l.nextFindingId++,_repoFallback:y,_repoDirectory:w,_reportName:e,_depsDirectory:v,_managedReportId:o,_bundleHashes:a.bundleHashes??[]};Oo(R,a),R._source=R.source??a.source??null,"isApp"in R||(R.isApp=Dn(R,R._source)),R._sourcePass=m.has(R._source),R._analyzer=R._source??R.type??null,S.push(R)}k.push(S)}return zn(k),l.reports.push({type:a.type||"analysis",source:a.source??null,fileName:e,_managedReportId:o,groups:k,repo:b,tree:a.tree??null,bundleHashes:a.bundleHashes??[]}),Dl(l.reports),zl(l.reports)&&ar(),l.revalidateConflicts=Fx(),Va(),u&&(ed(),oa(lo())),r&&await Ua(n),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}window.__loadFile=(e,t)=>Fu(e,t);window.__setFilters=({severities:e,confMin:t}={})=>{e!=null&&(l.filterSeverities=new Set(e)),t!==void 0&&(l.filterConfMin=t),E()};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")&&Xb(e.dataTransfer.files)});at.addEventListener("dragover",e=>{e.preventDefault(),C()||at.classList.add("hover")});at.addEventListener("dragleave",()=>at.classList.remove("hover"));at.addEventListener("drop",e=>{e.preventDefault(),at.classList.remove("hover"),Xb(e.dataTransfer.files)});var cn=null;function NO(){C()||(cn||(cn=document.createElement("input"),cn.type="file",cn.multiple=!0,cn.hidden=!0,cn.addEventListener("change",()=>{let e=[...cn.files];e.length>0&&Xb(e),cn.value=""}),document.body.append(cn)),cn.click())}at.addEventListener("click",e=>{let t=e.target.closest("[data-managed-page]");if(t){xo(t.dataset.managedPage);return}if(e.target.closest("[data-managed-login]")){Tk(l.managed?.loginPath);return}let n=e.target.closest("[data-managed-team]");if(n){let o=l.managedTeams.find(s=>s.id===n.dataset.managedTeam);o&&Sr(o);return}let r=e.target.closest("[data-landing-workspace]");if(r){Vs(r.dataset.landingWorkspace);return}e.target.closest(".drop-prompt-action")&&NO()});function G_(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 Nu=class{constructor(t,n=()=>{},r=fetch){this.onChange=n,this.request=r,this.reset(t)}reset(t=this.server){this.server=t,this.apiKey="",this.provider=null,this._remoteModels=!1,this._disconnect()}_previewModels(){let t=cp(this.provider);this.loadModels=()=>Promise.resolve(t)}_disconnect(){this._controller?.abort(),this.connected=!1,this.managed=!1,this.loading=!1,this.error=null,this.catalogue=null,this._remoteModels||this._previewModels(),this.onChange()}get ready(){return this.connected&&!this.loading&&this.catalogue!=null}setKey(t){this.apiKey!==t&&(this.apiKey=t,this._disconnect())}setProvider(t){if(!(this.provider===t||this.managed)){if(this.provider=t,this.connected&&t)return this._load(t);this.connected&&(this._controller?.abort(),this.loading=!1,this.error=null,this.catalogue=null),this._remoteModels||this._previewModels(),this.onChange()}}connect(){if(this._disconnect(),!(!this.server||!this.apiKey.trim()))return this._load(null)}async _fetch(t,n){let r=G_(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?Cw(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 K_(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 _r(e){if(e?.throwIfAborted(),C())throw new DOMException("Local scan closed","AbortError")}async function q_(e){_r(e);let t=await Ke();return _r(e),Hw(t,K())}async function Y_(e,t){_r(t);let n=await co(e.integrity,{name:e.filename},{sources:!1});return _r(t),Uw(e,n)}async function X_(e){_r(e);let t=await le(),n=[];for(let r of t){_r(e);let o=await pe(r);_r(e),n.push({name:r,content:o,fallbackRepo:qe(r)})}return _r(e),Vw(n,K())}function J_({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:o}){return n==="managed"&&!r?null:n==="e2e"?$p(o):$p(t)??(e==="127.0.0.1"?av:null)}async function Z_(e,t,n){let r=Ue(e,{duration:0});t.addEventListener("abort",r,{once:!0});try{return await n()}finally{t.removeEventListener("abort",r),r()}}function Ga(){return J_({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:l.serverMode,localMode:l.localMode,deepviewScanServer:l.deepviewScanServer})}function Ka(e){return C()?!!e.managedId&&["admin","manage"].includes(l.managedSession?.role):!e.managedId&&!!Ga()}async function Ou(e=null,{mode:t}={}){let n=l.selectedBundleWorkspace,r=fe();if(await kt(),r!==fe()||e&&!Ka(e))return;if(C()){e&&await xo("manage-scans",{bundleId:e.managedId,...t?{scanMode:t}:{}});return}if(!Ga())return;let o=Ct(),s=fe();await o,!(!Ga()||s!==fe())&&(l.scanSelection=e?{bundleId:e.integrity,...n?{repoId:n}:{},...t?{mode:t}:{}}:null,l.currentView="scan",E(),W())}var Jb=class extends _t{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=Ga(),this._access=new Nu(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,n)=>Z_("Loading bundle\u2026",n,()=>Y_(t,n))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=lm(()=>{this._savedAccess=cs()}),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 Z_("Loading bundles\u2026",t.signal,()=>q_(t.signal))}catch(n){t.signal.aborted||(this._error=String(n?.message??n))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=cs();let t=sm(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=cs();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await am(),this._resetAccess()):await im({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=cs()}catch{Ue(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=K_(t);n&&this._access.setProvider(n)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=tp`: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 d`<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?d`<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:d`<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])=>d`<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">${_w(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 d`${this._error?d`<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="${X_}"><button slot="navigation" type="button" @click="${()=>{Ct()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",Jb);function _u(){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=`${Pn}<span>Scan</span>`,t.addEventListener("click",()=>{Ou()}),e.append(t));let n=Ga();t.hidden=!n,document.querySelector("local-scan-page")?.setScanServer(n);let r=document.querySelector(".bundles-scan-button"),o=l.bundles?.find(s=>s.integrity===l.selectedBundle);r&&(r.hidden=!o||!Ka(o))}var Q_="@preventive/triage";function Zb(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 eR(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function tR(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 nR(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 rR(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:Zb(n.name,n.version)}:{name:eR(t?.name??"bundle"),version:null,purl:null},rest:r}}function oR(e){return e??globalThis.crypto.randomUUID()}function lY(e,t,{now:n=new Date,uuid:r}={}){let o=tR(e),{root:s,rest:i}=rR(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 c={bomFormat:"CycloneDX",specVersion:"1.5",serialNumber:`urn:uuid:${oR(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:"application",name:Q_}]},component:a},components:i.map(u=>{let p=Zb(u.name,u.version);return{type:"library","bom-ref":p,name:u.name,version:u.version,purl:p}})};return`${JSON.stringify(c,null,2)}
|
|
184
|
-
`}function OO(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function cY(e,t,{now:n=new Date,uuid:r}={}){let o=tR(e),{root:s,rest:i}=rR(o,t),a=eR(t?.name??"bundle"),c=n.toISOString().replace(/\.\d{3}Z$/u,"Z"),u=(b,y,w,v)=>{let k={SPDXID:b,name:y,downloadLocation:"NOASSERTION",filesAnalyzed:!1,licenseConcluded:"NOASSERTION",licenseDeclared:"NOASSERTION",copyrightText:"NOASSERTION"};return w&&(k.versionInfo=w),v&&(k.externalRefs=[OO(v)]),k},p="SPDXRef-Package-root",f=[u(p,s.name,s.version,s.purl)],m=[{spdxElementId:"SPDXRef-DOCUMENT",relationshipType:"DESCRIBES",relatedSpdxElement:p}];i.forEach((b,y)=>{let w=`SPDXRef-Package-${y+1}`;f.push(u(w,b.name,b.version,Zb(b.name,b.version))),m.push({spdxElementId:p,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)}-${oR(r)}`,creationInfo:{created:c,creators:[`Tool: ${Q_}`]},packages:f,relationships:m};return`${JSON.stringify(h,null,2)}
|
|
185
|
-
`}function BO(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 Bu(e,t,n){if(t){let s=BO(e,n);if(s.error)return{error:s.error};let{re:i}=s;return{ranges(a){i.lastIndex=0;let c=[],u;for(;(u=i.exec(a))!==null;){if(u[0].length===0){i.lastIndex++;continue}if(c.push([u.index,u.index+u[0].length]),c.length>=50)break}return c}}}let r=n?e:e.toLowerCase(),o=r.length;return{ranges(s){let i=n?s:s.toLowerCase(),a=[],c=0,u;for(;(u=i.indexOf(r,c))!==-1&&(a.push([u,u+o]),c=u+o,!(a.length>=50)););return a}}}function PO(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 c=a.split(`
|
|
186
|
-
`),u=[];for(let p=0;p<c.length;p++){let f=t.ranges(c[p]);if(f.length!==0&&(u.push({ln:p+1,ranges:f}),o++,o>=5e3)){s=!0;break}}if(u.length>0&&r.push({path:i,lines:c,hits:u}),s)break;if(r.length>=500){s=!0;break}}return{fileResults:r,totalHits:o,truncated:s}}function DO(e,t){let n=[],r=0;for(let{path:o,lines:s,hits:i}of e.fileResults){let a=[];for(let{ln:c}of i){let u=t.ranges(s[c-1]);u.length!==0&&(a.push({ln:c,ranges:u}),r++)}a.length>0&&n.push({path:o,lines:s,hits:a})}return{fileResults:n,totalHits:r,truncated:!1}}var ot={tag:null,useRegex:!1,caseSensitive:!1,entries:[]};function sR(e,t,n,r,o,s=null){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let i=Bu(n,r,o);if(i.error)return{error:i.error};(ot.tag!==e||ot.useRegex!==r||ot.caseSensitive!==o)&&(ot.tag=e,ot.useRegex=r,ot.caseSensitive=o,ot.entries.length=0);let a=r||o?m=>m:m=>m.toLowerCase(),c=a(n),u=null,p=-1;for(let m=0;m<ot.entries.length;m++){let h=ot.entries[m],b=a(h.query);if(b===c)return ot.entries.splice(m,1),ot.entries.unshift(h),h.result;r||h.result.truncated||b.length<=p||!c.includes(b)||(u=h.result,p=b.length)}let f=u?DO(u,i):PO(t,i,s??[...t.keys()].toSorted());return ot.entries.unshift({query:n,result:f}),ot.entries.length>8&&ot.entries.pop(),f}var zO=200,WO=28,HO=12;function UO(e,t){let n=t.length>0?t[0][0]:0,r=e.length-e.trimStart().length,o=n-r>WO?n-HO:0;return Qb(e,t,o,zO)}function iR(e,t){let n=UO(e,t);return d`${n.clipped?d`<span class="bundle-search-clip">…</span>`:g}${ey(n.text,n.ranges)}`}function Qb(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 c=i-n,u=a-n;u<=0||c>=o.length||s.push([Math.max(0,c),Math.min(o.length,u)])}return{text:o,ranges:s,clipped:!0}}function ey(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(d`<mark class="bundle-search-mark">${e.slice(i,a)}</mark>`),r=a)}return r<e.length&&n.push(e.slice(r)),n}function VO(e,t){let n=new Map(e.map(s=>[s,[...t.get(s)].map(([i,a])=>{let c=t.get(s),u=t.get(i),p=c.size<u.size?c:u,f=0,m=0;for(let h of p.keys())if(c.has(h)&&u.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:c}of n.get(a).toReversed())o.has(c)||i.push(c)}}}return r}function aR(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 k of t.get(v)??[])v===k||!o.has(k)||(s.get(v).set(k,{to:k,count:1}),i.get(v).set(k,(i.get(v).get(k)??0)+1),i.get(k).set(v,(i.get(k).get(v)??0)+1))}let a=Ev(r,s),c=r.map((v,k)=>({col:k%n,row:Math.floor(k/n)})),u=c.map(({col:v,row:k})=>({col:k%2?n-v-1:v,row:k})),p=(v,k)=>Math.abs(v.col-k.col)+Math.abs(v.row-k.row),f=v=>r.reduce((k,x)=>k+[...i.get(x)].reduce(($,[S,_])=>$+_*p(v.get(x),v.get(S)),0),0),m=new Map(r.map((v,k)=>[v,c[k]])),h=f(m);for(let v of[a,VO(r,i)])for(let k of[c,u]){let x=new Map(v.map((S,_)=>[S,k[_]])),$=f(x);$<h&&(m=x,h=$)}let b=({col:v,row:k})=>`${v},${k}`,y=new Map([...m].map(([v,k])=>[b(k),v])),w=(v,k,x,$)=>{let S=0;for(let[_,R]of i.get(v))S+=R*p(k,_===x?$:m.get(_));return S};for(let v=0;v<8;v++){let k=!1;for(let x of r){let $=m.get(x),S=i.get(x),_=0,R=0,F=0;for(let[V,te]of S)_+=m.get(V).col*te,R+=m.get(V).row*te,F+=te;if(!F)continue;let I=new Set;for(let V of[$,{col:Math.round(_/F),row:Math.round(R/F)}])for(let te=-1;te<=1;te++)for(let ne=-1;ne<=1;ne++){let xe=y.get(`${V.col+te},${V.row+ne}`);xe!==void 0&&xe!==x&&I.add(xe)}let A=0,L=null;for(let V of I){let te=m.get(V),ne=w(x,te,V,$)+w(V,$,x,te)-w(x,$,V,te)-w(V,te,x,$);ne<A&&(A=ne,L=V)}if(L!==null){let V=m.get(L);m.set(x,V),m.set(L,$),y.set(b(V),x),y.set(b($),L),k=!0}}if(!k)break}return r.map(v=>({id:v,...m.get(v)})).toSorted((v,k)=>v.row-k.row||v.col-k.col)}var dn=216,Rr=48,Pu=32,Fn=20,ry=24,jO=20,ty=10;function lR(e,t){let n=p=>p&&(p.collapsed||p.members.length===1),r=e.map((p,f)=>e.length>5&&n(p)&&n(e[f+1])),o=0,s=0;e.forEach((p,f)=>{r[f]?s+=p.width:o+=p.width+(f===e.length-1?0:Fn)});let i=Math.min(t,dn*5+Fn*4),a=s?Math.max(.3,Math.min(.9,(i-o)/s)):1,c=0;return{groups:e.map((p,f)=>{let m=p.width*(r[f]?a:1),h={...p,x:c,visibleWidth:m,stacked:!!(r[f]||r[f-1])};return c+=m+(r[f]||f===e.length-1?0:Fn),h}),width:c,height:Math.max(...e.map(p=>p.height))}}function cR(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,c]=e[n+1],u=Math.hypot(a-r,c-o),p=Math.hypot(r-s,o-i);if(!p||!u)continue;let f=Math.min(6,p/2,u/2);t+=` L${r-(r-s)/p*f},${o-(o-i)/p*f} Q${r},${o} ${r+(a-r)/u*f},${o+(c-o)/u*f}`}return`${t} L${e.at(-1).join(",")}`}var oy=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1));function ny(e,t,n,r){let o=e.packages.find(p=>p.id===t),s=oy(r),i=n?e.y-12:e.rowBottom;if(e.members.length===1||e.collapsed){let p=e.x+e.visibleWidth/2+s;return[[p,n?e.y-5:e.y+e.height],[p,i]]}let a=e.x+o.x+(n?0:dn),c=e.y+o.y+Rr/2+s/2,u=a+(n?-7-r.lane*6:3+r.lane*6);return[[a+(n?-4:0),c],[u,c],[u,i]]}function dR(e,t){let n=(a,c)=>{let u=e.get(a[c]),p=u.packages.find(f=>f.id===a[`${c}Package`]);return u.members.length===1||u.collapsed?[u.x+u.visibleWidth/2,u.y+u.height/2]:p?[u.x+p.x+dn/2,u.y+p.y+Rr/2]:[u.x+u.width/2,u.y+u.height/2]},r=(a,c,u=p=>n(p,c))=>{let p=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]=u(b),[k,x]=u(y);return(b.bypassLane??w)-(y.bypassLane??k)||v-x||b[`${c}Package`].localeCompare(y[`${c}Package`])||b[`${a}Package`].localeCompare(y[`${a}Package`])}).forEach((b,y)=>p.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),[k,x]=n(y,a);return w-k||v-x||oy(p.get(b))-oy(p.get(y))}).forEach((b,y)=>{let w=y/Math.max(1,m.length-1);p.get(b).lane=a==="from"?1-w:w});return p},o=r("from","to"),s=r("to","from",a=>{let c=ny(e.get(a.from),a.fromPackage,!1,o.get(a));return[c.at(-1)[0],c[0][1]]}),i=t.map(a=>{let c=e.get(a.from),u=e.get(a.to),p=ny(c,a.fromPackage,!1,o.get(a)),f=ny(u,a.toPackage,!0,s.get(a));return{edge:a,end:f,start:p,rowBottom:c.rowBottom,x1:p.at(-1)[0],x2:a.bypassLane??f.at(-1)[0]}});for(let a of Map.groupBy(i,c=>c.rowBottom).values())for(let c of[!0,!1]){let u=a.filter(p=>p.x2<p.x1===c).toSorted((p,f)=>(c?1:-1)*(p.x1-f.x1||p.x2-f.x2));u.forEach((p,f)=>{p.bendY=p.rowBottom+9+12*f/Math.max(1,u.length-1)})}return i.map(({edge:a,end:c,start:u,x1:p,x2:f,bendY:m})=>{let h=[[p,m],[f,m]],{bypassLane:b,...y}=a;return b!==null&&h.push([f,c.at(-1)[1]]),{...y,path:cR([...u,...h,...c.toReversed()])}})}function GO(e,t){let n=Math.sign(t.x-e.x),r=Math.sign(t.y-e.y),o=Rr,s=dn;if(r===0&&Math.abs(t.x-e.x)===s+Fn){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+ry){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),c=e.y+o/2,u=a+i*(Fn/2-3),p=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 cR([[a,c],[u,c],[u,m],[p,m],[p,h]])}function uR(e,t,n,r=1184,o=!1){if(o)return{id:e,members:t,collapsed:o,packages:[],internalEdges:[],width:dn+ty*2,height:Rr};let s=t.length>1,i=Math.max(1,Math.floor((r-ty*2+Fn)/(dn+Fn))),a=s?Math.min(i,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,c=s?ty:0,u=Math.ceil(t.length/a),p=s?jO:0,m=(s?aR(t,n,a):[{id:t[0],col:0,row:0}]).map(y=>({id:y.id,x:c+y.col*(dn+Fn),y:c+p+y.row*(Rr+ry)})),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:GO(h.get(y),h.get(w))});return{id:e,members:t,collapsed:o,packages:m,internalEdges:b,width:a*dn+(a-1)*Fn+c*2,height:u*Rr+(u-1)*ry+c*2+p}}function sy(e,t={}){let n=t.ecosystem??(/(?:^|\/)node_modules\//u.test(e)?"npm":""),r=t.name||(e==="."?"App":e);return{id:e,name:r,ecosystem:n,version:t.version??"",own:e===".",root:!1,target:!1}}var pR=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function fR(e,t){let n=e?.bundle?.modules.get(t);if(!t||t==="."||!n)return null;let r=sy(t,n);return{packageKey:r.ecosystem?pR(r):r.name,packageGroup:Hr("",{packageDir:t})}}function mR(e,{packageKey:t,packageGroup:n,version:r,reason:o=""}){let s=new Map,i=new Map,a=new Map,c=Mt(e)??new Map,u=new Map([...c.keys()].map(x=>[x,x])),p=Wo(e).get(o),f=new Map([...u].filter(([x])=>!p||p.has(x)));for(let x of new Set([...f.keys()].map($=>c.get($))))a.set(x,sy(x,e.bundle.modules.get(x)));let m=(x,$)=>{x!==$&&(i.has(x)||i.set(x,new Set),s.has($)||s.set($,new Set),i.get(x).add($),s.get($).add(x))};for(let[x,$]of Rl(e))if(f.has(x))for(let S of $){if(!f.has(S))continue;let _=c.get(x),R=c.get(S);if(Av(x,S,R===".",_==="."))m(_,R);else if(_!==R){let F=a.get(R);F.excludedImporters??=new Set,F.excludedImporters.add(_)}}let{roots:h,appImports:b}=Tl(e,f,x=>c.get(x),c,u);b.length>0&&!a.has(".")&&a.set(".",sy("."));for(let x of b)m(".",x);for(let[x,$]of a){if(!($.own||$.ecosystem==="npm"&&($.name==="@babel/core"||$.name==="react-native"&&i.get(".")?.has(x))))continue;$.traceBoundary=!0;let _=s.get(x);for(let R of _??[])R!=="."&&(_.delete(R),i.get(R).delete(x))}for(let x of h){let $=a.get(x==="__own__"?".":x);$&&($.root=!0)}let y=[];for(let x of a.values()){let $=pR(x),S=n===void 0?x.ecosystem==="github"?$.toLowerCase()===t.toLowerCase():$===t:Hr("",{packageDir:x.id})===n,_=x.ecosystem==="github"&&x.version==="."?"0.0.0":x.version;!x.own&&S&&(r===void 0||_===r)&&(x.target=!0,y.push(x.id))}let w=new Set(y),v=[...y];for(let x=0;x<v.length;x++)for(let $ of s.get(v[x])??[])w.has($)||(w.add($),v.push($));let k=x=>new Map([...w].map($=>[$,new Set([...x.get($)??[]].filter(S=>w.has(S)))]));return{nodes:new Map([...a].filter(([x])=>w.has(x))),imports:k(i),importedBy:k(s),targets:y}}function gR(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:o,componentOf:s}=Fv(r,e.imports),i=o.map(()=>new Set),a=[];for(let[$,S]of e.imports){let _=s.get($);for(let R of S){let F=s.get(R);_!==F&&(i[_].add(F),a.push({from:_,to:F,fromPackage:$,toPackage:R}))}}let c=o.map(()=>0),u=o.map(()=>0);for(let $ of i)for(let S of $)u[S]++;let p=o.flatMap(($,S)=>u[S]===0?[S]:[]);for(let $=0;$<p.length;$++){let S=p[$];for(let _ of i[S])c[_]=Math.max(c[_],c[S]+1),--u[_]===0&&p.push(_)}let f=i.some(($,S)=>[...$].some(_=>c[_]!==c[S]+1)),m=t-Pu-24-(f?56:0),b=[...Map.groupBy(o.map(($,S)=>{let _=$.length>10;return{...uR(S,$,e.imports,m,_&&!n.has(S)),collapsible:_}}),$=>c[$.id])].toSorted(([$],[S])=>$-S).map(([,$])=>lR($,m)),y=b.reduce(($,S)=>Math.max($,S.width+24),240),w=new Map,v=12;for(let{groups:$,width:S,height:_}of b){for(let R of $)w.set(R.id,{...R,x:R.x+(y-S)/2,y:v,rowBottom:v+_});v+=_+36}let k=0,x=dR(w,a.map($=>{let S=c[$.to]===c[$.from]+1?null:y+8+k++%4*10;return{...$,bypassLane:S}}));return{boxes:[...w.values()],componentOf:s,edges:x,width:y+(k?56:0),height:Math.max(0,v-24)}}function hR(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 c of e.edges){let u=o?c.to:c.from,p=o?c.from:c.to;s.has(u)||s.set(u,[]),s.get(u).push(p)}for(let c=0;c<i.length;c++)for(let u of s.get(i[c])??[])a.has(u)||(a.add(u),r.add(u),i.push(u));for(let c of e.edges)a.has(c.from)&&a.has(c.to)&&n.add(c)}return{groups:r,edges:n}}var bR=`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 iy=e=>wn(e.own?"__own__":e.name),yR=()=>Math.floor(Math.min(document.documentElement.clientWidth*.94,80*Number.parseFloat(getComputedStyle(document.documentElement).fontSize))),ay=class extends N{static styles=[...N.styles,P(bR)];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=yR(),this.layout=gR(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=mR(this.details,this),this.layoutForViewport(),this._dispose=kn(()=>{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(yR()!==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(u=>this.graph.nodes.get(u)),a=`${s.version||"Source"}${s.ecosystem&&s.ecosystem!=="npm"?` \xB7 ${s.ecosystem}`:""}`,c=i.length>0?`Imported by ${i.map(u=>`${u.name}${u.version?`@${u.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 d`<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}`:""}. ${c} Location: ${t}.`}" style="${ae({left:`${n}px`,top:`${r}px`,"--package-color":iy(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?d`<span class="badge selected-badge">Selected</span>`:g} ${s.root?d`<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=hR(this.layout,i),c=s===null?null:new Set([s,...this.graph.imports.get(s),...this.graph.importedBy.get(s)]),u=new Set(n.map(f=>f.to)),p=t.filter(f=>!u.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 d`<div class="graph-scroll" tabindex="0" aria-label="Package dependency chains. Arrows point from importer to dependency."><div class="graph" style="${ae({width:`${r}px`,height:`${o}px`,"--package-width":`${dn}px`,"--package-height":`${Rr}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 Bn`<path d=${f.path} class=${h?"dimmed":m?"traced":""}
|
|
188
|
-
style=${ae({"--connection-color":iy(this.graph.nodes.get(f.fromPackage))})} marker-end="url(#dependency-arrow)"/>`})}</svg> ${t.map(f=>this.renderGroup(f,a,s,c))}</div>${p.length>0?d`<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 d`<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="${ae({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?d`<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?d`<span class="badge selected-badge">Selected</span>`:g}</button>`:t.members.length>1?d`<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?d`<svg class="connections cycle-connections" width="${t.width}" height="${t.height}" aria-hidden="true">${t.internalEdges.map(a=>Bn`<path d=${a.path}
|
|
189
|
-
class=${i?a.from===r||a.to===r?"traced":"subdued":""}
|
|
190
|
-
style=${ae({"--connection-color":iy(this.graph.nodes.get(a.from))})} marker-end="url(#dependency-arrow)"/>`)}</svg>`:g} ${X(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:zo(this.packageGroup);return d`<dialog aria-labelledby="why-title" style="${ae({"--graph-dialog-width":`${Math.max(480,this.layout.width+Pu)}px`})}" @close="${this._onClose}" @click="${this._onBackdrop}"><header><h3 id="why-title">${r}${this.version===void 0?g:d`<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():d`<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",ay);function Du(e){return ee("why-dialog",e)}var qO=new Map,wR=new Map,vR=[];function Co(e){if(!e?.managedId)return qO;let t=l.managedSession,n=l.managedTeams&&Qe(l.managedTeams),r=[t?.id,t?.role,t?.csrfToken,l.currentManagedTeam,n];return r.some((o,s)=>o!==vR[s])&&(vR=r,wR=new Map),wR}var ly=new WeakMap;function qa(e){return ly.has(e)||ly.set(e,{reasons:Wo(e),selected:""}),ly.get(e)}function _o(e,t=qa(e).selected){return JSON.stringify([e.managedId??e.integrity,t])}var $R="deepview.advisories.proxyConsent";function cy(){try{return localStorage.getItem($R)==="1"}catch{return!1}}function JY(){try{localStorage.setItem($R,"1")}catch{}}function YO(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 kR(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 XO(e){if(e.bundle&&!kR(e))return!0;let t=Co(e).get(_o(e,""));return t?.state==="ok"&&t.query.size===0&&t.skipped.length===0}function xR(e,t,n=!1){return!e||e.managedId&&!ZO(e)||JO(e,t)<1||e.summary?.versionedPackages===0?!1:n?!0:Yb(e.name)!=="stasis"?!1:!t||t.integrity!==e.integrity?!0:e.managedId?!t.bundle||kR(t):YO(t)}function JO(e,t){let n=t?.integrity===e.integrity&&t.bundle?t.bundle.version:e.summary?.stasisVersion;return Number.isSafeInteger(n)?n:1/0}function ZO(e){let t=l.managedSession?.role;return["admin","manage"].includes(t)?!0:["view","triage"].includes(t)?l.managedTeams.some(n=>(l.currentManagedTeam==null||n.id===l.currentManagedTeam)&&n.permissions?.security===!0&&n.bundles?.some(r=>r.id===e.managedId)):!1}function QO(e){return Object.fromEntries([...e].map(([t,n])=>[t,[...n].toSorted()]))}var dy=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;function eB(e){return{...e,title:e.title||e.id,severity:e.severity??"unknown",cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function tB(e){let t=Array.isArray(e),n=t?Map.groupBy(e.map(eB),dy):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 SR(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function nB(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(QO(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 Wu(e,t){return CR(e,t)}function rB(e,t){return CR(e,t,!0)}async function CR(e,t,n=!1){if(!e?.integrity||!e.managedId&&!cy())return;let r=Co(e),o=_o(e),s=r.get(o);if(n){if(!SR(e,s))return;r.set(o,{...s,recheckingRepositories:!0,repositoryError:null}),t()}else if(s)return;let{reasons:i,selected:a}=qa(e),c=e.managedId?new Map:Lw(e,i.get(a)??null);n||r.set(o,{state:"loading",query:c});try{let u,p=[];if(e.managedId){let f=await Fk(e.managedId,void 0,a,n,n);c=Array.isArray(f.packages)?new Map(f.packages.map(m=>[dy(m),new Set(m.versions)])):new Map(Object.entries(f.packages).map(([m,h])=>[m,new Set(h)])),u=f.advisories,p=Array.isArray(f.skipped)?f.skipped:[]}else u=c.size>0?await nB(c):{};r.set(o,{state:"ok",byPackage:tB(u),query:c,skipped:p})}catch(u){let p=u?.message??"fetch-failed";r.set(o,n&&![401,403,404].includes(u?.status)?{...s,recheckingRepositories:!1,repositoryError:p}:{state:"error",reason:p,query:c})}t()}async function ZY(e,t){if(!e?.integrity)return;let n=Co(e),r=_o(e);n.get(r)?.state==="error"&&(n.delete(r),await Wu(e,t))}var oB={critical:0,high:1,moderate:2,low:3,info:4};function zu(e){return oB[e]??999}function sB(){let e=typeof window>"u"?"":window.location.host;return d`<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 _R(e,t=()=>{},n=null){let r=e?qa(e):null,o=[...r?.reasons.keys()??[]].map(a=>({id:`reason:${a}`,label:a})),s=aB(e),i=!!e?.managedId&&!XO(e);return d`<div class="bundle-advisories-panel">${s!==g||o.length>0||i?d`<div class="bundle-advisories-toolbar">${s} ${o.length>0||i?d`<div class="bundle-advisories-scopes">${o.length>0?d`<bundle-scope-selector .reasons="${o}" .value="${r.selected?`reason:${r.selected}`:""}" label="Choose advisory scope" @scope-change="${a=>{let c=a.detail.value.replace(/^reason:/u,"");r.selected=r.reasons.has(c)?c:"";let u=Wu(e,t);return t(),u}}"></bundle-scope-selector>`:g} ${i?iB(e,t):g} ${i&&n?d`<button type="button" class="bundle-advisories-retry bundle-advisories-scan" @click="${n}">${z(Pn)}<span>Validate</span></button>`:g}</div>`:g}</div>`:g} ${cB(e)}</div>`}function iB(e,t){if(!e?.managedId)return g;let n=Co(e).get(_o(e)),r=!!n?.recheckingRepositories;return d`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!SR(e,n)}" aria-busy="${String(r)}" @click="${()=>rB(e,t)}">${r?"Rechecking\u2026":"Recheck against repositories"}</button>`}function aB(e){if(!e||!e.managedId&&!cy())return g;let t=Co(e).get(_o(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 d`<div class="bundle-advisories-summary">${o} ${o===1?"advisory":"advisories"} across ${r} of ${n} ${n===1?"package":"packages"}</div>`}function lB(e,t){let n=t.query.size;return n===0&&t.skipped.length>0?d`No packages could be audited.`:d`No advisories for the ${n} ${t.skipped.length>0?"audited ":""}${n===1?"package":"packages"} in ${qa(e).selected?"this scope":"this bundle"}.`}function cB(e){if(!e)return d`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!=="stasis"||!e.managedId&&!e.bundle)return d`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!e.managedId&&!cy())return sB();let t=Co(e).get(_o(e));if(!t||t.state==="loading")return d`<div class="bundle-advisories-empty">Loading advisories…</div>`;if(t.state==="error")return d`<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?d`<div class="bundle-advisories-empty"><span>${lB(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 c=Math.min(...s.map(p=>zu(p.severity))),u=Math.min(...a.map(p=>zu(p.severity)));return c!==u?c-u:o.localeCompare(i)});return d`${n}<div class="bundle-advisories">${t.repositoryError?d`<div class="bundle-advisories-empty is-error" role="alert">Repository recheck failed: ${t.repositoryError}. Previous results are shown.</div>`:g} ${t.skipped.length>0?d`<section class="bundle-advisories-skipped" aria-label="Dependencies not audited"><h3>Not audited</h3><ul>${t.skipped.map(o=>d`<li><span class="mono">${dy(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:g}<ul class="bundle-advisories-list">${r.map(([o,s])=>dB(e,o,s,t.query.get(o),()=>Co(e).get(_o(e))?.byPackage===t.byPackage))}</ul></div>`}function dB(e,t,n,r,o){let s=[...n].toSorted((a,c)=>{let u=zu(a.severity)-zu(c.severity);return u!==0?u:(a.title??"").localeCompare(c.title??"")}),i=r?[...r].toSorted():[];return d`<li class="bundle-advisories-section"><div class="bundle-advisories-package"><span class="bundle-advisories-section-name">${t}</span> ${i.length>0?d`<span class="bundle-advisories-section-versions">${i.map(a=>d`<button type="button" class="bundle-advisories-version" aria-haspopup="dialog" aria-label="${`Why is ${t}@${a} here?`}" @click="${()=>Du({details:e,packageKey:t,version:a,reason:qa(e).selected,isCurrent:o})}">${a}</button>`)}</span>`:g}</div><ul class="bundle-advisories-rows">${s.map(a=>nu(a,({title:c,severity:u,details:p})=>ou({heading:c,severity:u,markdown:p,isCurrent:o})))}</ul></li>`}var ju=e=>C()?[]:pf(e),uB=()=>C()?0:ff(),Ya=null,uy=new WeakMap;function pB(e){if(uy.has(e))return uy.get(e);let t=up(e),n=Rl(e),r=[...t.keys()],{stripped:o}=Kn(r),s=new Map(r.map((c,u)=>[c,o[u]])),i={};for(let c of r){let u=s.get(c),p=n.get(c);i[u]={imports:p?[...p].map(f=>s.get(f)).filter(Boolean):[],size:t.get(c)}}let a={tree:i,origToStripped:s};return uy.set(e,a),a}function OR(e,t=null){let n={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0};if(!e?.fileHashes)return n;let r=new Set;for(let[o,s]of e.fileHashes)if(!(t&&!t.has(o))&&!r.has(s)){r.add(s);for(let i of ju(s)){let a=Re(i,l.triage.get(U(i)));a&&n[a]!==void 0&&n[a]++}}return n}function qs(e,t="graph"){if(!e||e.size===0)return new Map;let n=new Map;for(let[r,o]of e){let s=ju(o);if(s.length===0)continue;let i=s.filter(a=>{let c=Re(a,l.triage.get(U(a)))??null;return t==="issues"?c!=="invalid"&&c!=="deleted":c===l.shownTriage});i.length!==0&&n.set(r,i)}return n}function BR(e){let t=pB(e),n=Wo(e,t.origToStripped.keys());J.bundleReasonFor!==e.integrity&&(J.bundleReasonFor=e.integrity,J.dependencyPackagesView=!1,J.bundleReason=null);let{tree:r,origToStripped:o,selected:s}=zw(t.tree,t.origToStripped,n,J.bundleReason);J.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[I,A]of e.fileHashes){let L=o.get(I);L!==void 0&&a.set(L,A)}}let c=qs(a),u=c.size>0||[...e.fileHashes??[]].some(([I,A])=>t.origToStripped.has(I)&&ju(A).length>0),p=u&&J.bundleIssues,f=new Map,m=new Map,h=new Map,b=new Map;for(let[I,A]of p?c:[]){let L={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},V=new Set,te=new Set,ne=[];for(let xe of A){L[xe.severity]=(L[xe.severity]||0)+1,V.add(xe.severity);let Ht=l.triage.get(U(xe))?.color??"none";te.add(Ht),ne.push({severity:xe.severity,color:Ht})}f.set(I,L),m.set(I,V),h.set(I,te),b.set(I,ne)}let y=["matrix","flow"].includes(J.bundleLayout)||f.size===0?null:jl(r,f),w=new Map;for(let[I,A]of o)w.set(A,I);let v=Mt(e),k=new Map(v?[...e.bundle.modules].map(([I,A])=>[I,{directory:I,version:typeof A.version=="string"?A.version:void 0}]):[]),x=I=>{let A=w.get(I)??I;return Hr(A,{packageDir:v?.get(A)})},$=i.filter(I=>x(I)==="__own__"),S=Tl(e,o,x,v,t.origToStripped),_=new Set;for(let I of i)if(_.add(x(I)),_.size>=3)break;let R=_.size>=3,F=i;if(J.focusedPkg){let I=i.filter(A=>x(A)===J.focusedPkg);I.length>0?F=I:J.focusedPkg=null}return J.selected&&!Object.hasOwn(r,J.selected)&&(J.selected=null),{treeData:r,files:F,ownCounts:f,transitiveCounts:y,severitySets:m,colorSets:h,fileFindings:b,options:{pkgOf:x,packageInfoOf:I=>k.get(v?.get(w.get(I)??I))},strippedToOrig:w,canPackagesView:R,hasIssues:u,issuesShown:p,viewId:e.integrity??null,supportsLayers:!0,layerRoots:S,flowEntries:J.bundleLayout==="flow"?Ww(e,o,t.origToStripped,v):void 0,ownSourcePackages:Pw(o,x,v),entryPackages:Dw(e,o,x),ownSourceFiles:new Set($),reasons:[...n.keys()]}}function PR(){if(!Ya)return;let e=Ts();e&&e.refreshSidebar(Ya,{isBundleContext:!0,findingsJump:!C()})}function DR(){if(!Ya)return;let e=Ts();e&&e.refreshTopPkgs(Ya)}function zR(e){Ya=e}function fB(e,t,n){let r=new Map,o=new Map,s=0;for(let{path:a,size:c,pkgDir:u}of e){if(typeof c!="number"||c<=0)continue;let p=Hr(a,{packageDir:u});r.set(p,(r.get(p)??0)+c),o.has(p)||o.set(p,fR(n,u)),s+=c}if(s===0)return g;let i=[...r.entries()].toSorted((a,c)=>+(c[0]==="__own__")-+(a[0]==="__own__")||(t==="size"?c[1]-a[1]:0)||zo(a[0]).localeCompare(zo(c[0]))||a[0].localeCompare(c[0]));return d`<div class="bundles-dist"><div class="bundles-dist-bar" aria-hidden="true">${X(i,([a])=>a,([a,c])=>d`<span class="bundles-dist-seg" style="${ae({flexGrow:c,background:wn(a)})}" data-tooltip="${a==="__own__"?g:`${a}: ${me(c)}`}"></span>`)}</div><ul class="bundles-dist-list">${X(i,([a])=>a,([a,c])=>{let u=(c/s*100).toFixed(1),p=zo(a),f=wn(a),m=o.get(a);return d`<li><span class="bundles-dist-dot" style="${ae({background:f})}"></span> ${m?d`<button type="button" class="bundles-dist-pkg" aria-haspopup="dialog" aria-label="${`Show dependency chains for ${p}`}" @click="${()=>mB(n,m)}" data-tooltip-truncated data-tooltip="${a}">${p}</button>`:d`<span class="bundles-dist-pkg" data-tooltip-truncated data-tooltip="${a==="__own__"?g:a}">${p}</span>`} <span class="bundles-dist-bar-row" aria-hidden="true"><span class="bundles-dist-bar-fill" style="${ae({width:`${u}%`,background:f})}"></span> </span><span class="bundles-dist-size">${me(c)}</span> <span class="bundles-dist-percent">${u}%</span></li>`})}</ul></div>`}function mB(e,t){let n=l.currentManagedTeam,r=l.currentWorkspace,o=l.managedSession&&Qe(l.managedSession);return Du({details:e,...t,isCurrent:()=>l.currentView==="bundles"&&l.selectedBundle===e.integrity&&(l.bundleDetails&&Qe(l.bundleDetails))===Qe(e)&&l.currentWorkspace===r&&l.currentManagedTeam===n&&(l.managedSession&&Qe(l.managedSession))===o})}function hy(e,t,n,r,o,s,{bundleSize:i=null,unpackedSize:a=null,resources:c=null,details:u=null,leadColumn:p=null,trailColumns:f=g,summaryExtra:m=g,fileTag:h=null,fileIcon:b=null,fileFlags:y=null,overviewClass:w="",fileFilter:v=null,lines:k=null,sized:x=($,S,_)=>_}={}){let{prefix:$,stripped:S}=Kn(n),_=H=>o?.get(n[H]),R=new Set;for(let H=0;H<S.length;H++)R.add(Hr(n[H],{packageDir:_(H)}));let F=S.map((H,de)=>de).filter(H=>!v||v.keeps(n[H])),I=H=>y?.(n[H])??[],A=F.some(H=>I(H).length>0),L=l.bundleOverviewFilesSort==="flags"&&!A?"name":l.bundleOverviewFilesSort,V=L==="flags"?hC(F,I,H=>S[H]):F.toSorted((H,de)=>(L==="size"?(r[de]??-1)-(r[H]??-1):0)||S[H].localeCompare(S[de])),te=n.map((H,de)=>({path:H,size:r[de],pkgDir:_(de)})),ne=l.bundleOverviewPackagesSort,xe=fB(te,ne,u),Ht=xe===g?d`<p class="bundles-overview-col-empty">No size information for this bundle's sources.</p>`:xe,Io={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Mr=0,pn=new Map;if(l.bundleDetails?.fileHashes){let H=qs(l.bundleDetails.fileHashes,"issues");for(let de of H.values())for(let pt of de){Io[pt.severity]!==void 0&&Io[pt.severity]++,Mr++;for(let Mo of Ti(pt.fileHash,pt))pn.set(Mo,(pn.get(Mo)??0)+1)}}let Ar=[...pn.keys()].toSorted(),el=Xe.filter(H=>Io[H]>0).map(H=>d`<span class="${`tree-count-chip ${H}`}">${Io[H]} ${H.replaceAll("_"," ")}</span>`),Ju=n.length>0?d`<ul class="bundles-sources-list">${V.map(H=>{let de=n[H],pt=r[H],Mo=d`${b?b(de):g}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${de}">${S[H]}</span> ${h?h(de):g} ${pt==null?g:d`<span class="bundles-source-size">${me(pt)}</span>`}`;return d`<li>${c?.has(de)?d`<div class="bundles-source-row is-resource">${Mo}</div>`:d`<button type="button" class="bundles-source-row" data-bundle-view-source="${de}">${Mo}</button>`}</li>`})}</ul>`:d`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,Zu=Ar.length>0?d`<ul class="bundles-reports-list">${Ar.map(H=>{let de=be[Me(H)]??be.default,pt=pn.get(H)??0;return d`<li><button type="button" class="report-chip bundles-report-chip" data-bundle-issue-report="${H}">${z(de)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${H}">${re(H)}</span> <span class="bundles-report-count">${pt} ${pt===1?"issue":"issues"}</span></button></li>`})}</ul>`:d`<p class="bundles-overview-col-empty">No matching reports indexed yet.</p>`,On=n.length-(c?.size??0);return d`<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>${k==null?x("files",On,On):d`${x("files",On,`${On} ${On===1?"file":"files"}`)} · ${x("lines",k,`${k.toLocaleString("en")} LoC`)}`}</dd>${i==null?g:d`<dt>Size</dt><dd>${me(i)}</dd>`} ${a==null?g:d`<dt>Unpacked</dt><dd>${x("unpacked",a,me(a))}</dd>`} ${c?.size?d`<dt>Resources</dt><dd>${c.size}</dd>`:g}</dl>${s??g}</div>${Mr>0?d`<div class="bundles-issue-summary tree-count-chips">${el}</div>`:g} ${m}</div><div class="bundles-overview-columns">${p??In({title:"Packages",count:R.size,body:Ht,tools:d`<span class="bundles-overview-sort" role="group" aria-label="Package order">${[["name","Name"],["size","Size"]].map(([H,de])=>d`<button type="button" aria-pressed="${String(ne===H)}" @click="${()=>{l.bundleOverviewPackagesSort=H,E()}}">${de}</button>`)}</span>`})} ${In({title:"Files",count:v?`${V.length} of ${n.length}`:n.length,body:Ju,list:!0,extra:v?d`<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:d`<span class="bundles-overview-sort" role="group" aria-label="File order">${[["name","Name"],["size","Size"],...A?[["flags","Flags"]]:[]].map(([H,de])=>d`<button type="button" aria-pressed="${String(L===H)}" @click="${()=>{l.bundleOverviewFilesSort=H,E()}}">${de}</button>`)}</span>`})} ${Ar.length>0?In({title:"Reports",count:Ar.length,body:Zu,list:!0}):g} ${f}</div></div>`}var py=new Map,fy=new Set,WR=()=>d`<button type="button" class="bundle-source-wrap-toggle" data-bundle-source-wrap hidden aria-pressed="${l.bundleSourceWrap?"true":"false"}" aria-label="Wrap lines" data-tooltip="Wrap lines">${f0}</button>`;function gB(e){let t=e?.status;return d`<button type="button" class="${G({"bundle-source-pretty-toggle":!0,"is-loading":t==="loading","is-error":t==="error"})}" data-bundle-source-pretty aria-pressed="${l.bundleSourcePretty?"true":"false"}" aria-busy="${t==="loading"?"true":g}" aria-label="Pretty-print" data-tooltip="${ES(e)}">${AS}</button>`}function wy(e,t,n,r,o,s){let i=LS(e,t,n,r),a=i?PS(e,t,n,r,()=>{l.bundleSourceFile===n&&E()}):null,c=a?.status==="ready";return{pretty:c,toggle:i?gB(a):g,content:c?a.text:r,fileFindings:c?[]:o,lineFindings:c?new Map:s}}var Ln=null;function Hu(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function hB(e){requestAnimationFrame(()=>requestAnimationFrame(()=>{document.querySelector(`.bundle-code-main .bundle-source-lineno-row[data-line="${e}"]`)?.scrollIntoView({block:"center"})}))}function Ro(e){for(let t of Xe)for(let n of e)if(n.severity===t)return t;return e[0]?.severity??null}var my={content:"",parts:""};function bB(e){if(my.content===e)return my.parts;let t=e;if(e.length>Ed||ks(e)){let n=o=>[Fd(o)].flat();t=[];let r=0;for(let o=0;o<e.length;){let s=e.indexOf(`
|
|
191
|
-
`,o),i=s===-1?e.length:s+1;(s===-1?i:s)-o>I0&&(t.push(...n(e.slice(r,o)),d`<span class="bundle-source-long-line">${n(e.slice(o,i))}</span>`),r=i),o=i}t.push(...n(e.slice(r)))}return my={content:e,parts:t},t}function yB(e,t,n,r,o=null,s=!1,i=!1){let a=e.split(`
|
|
192
|
-
`).length,c=l.bundleSourceTargetLine,u=!i&&c&&c.path===t&&c.bundle===(n?.integrity??null)?c.line:null,p=u==null?null:Math.max(c.end??u,u),f=String(a).length,m=ui(t,n?.kind==="stasis"?n.bundle?.formats?.get(t):void 0,e),h=`${n?.integrity??""}\0${t}${i?"\0pretty":""}`;m&&!py.has(h)&&!fy.has(h)&&(fy.add(h),(async()=>{let y=await ws(e,m,Cg(n,t));py.set(h,typeof y=="string"?wd(y):null),fy.delete(h),l.bundleSourceFile===t&&E()})());let b=py.get(h);return d`<div class="${G({"bundle-source-lines":!0,"is-wrapped":l.bundleSourceWrap})}" style="${ae({"--lineno-width":`${f}ch`})}" ${T0(Xg)}><aside class="bundle-source-lineno-col" aria-hidden="true">${Array.from({length:a},(y,w)=>{let v=w+1,k=r.get(v),x=k?Ro(k.map(S=>S.f)):null,$=k&&l.bundleSourceFindingIdx!=null&&k.some(S=>S.idx===l.bundleSourceFindingIdx);return d`<div class="${G({"bundle-source-lineno-row":!0,"is-match":o?.has(v)??!1,"is-target":u!=null&&v>=u&&v<=p})}" data-line="${v}">${k?d`<button type="button" class="${G({"bundle-source-dot":!0,[`sev-${x}`]:!0,active:$})}" data-bundle-source-finding="${k[0].idx}" data-tooltip="${`${k.length} ${k.length===1?"issue":"issues"} on line ${v}`}" aria-label="${`${k.length} issues on line ${v}`}"></button>`:d`<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"?z(b):bB(e)}</code></pre></div>`}function wB(e){let t=l.bundleSourceFindingIdx;if(t==null)return g;let n=e[t];if(!n)return g;let r=n.fileHash?Ti(n.fileHash,n):[],o=Re(n,l.triage.get(U(n))),s=o==="fixed"?"Fixed":o==="inprogress"?"In progress":o==="ignored"?"Ignored":null,i=Gr(n),a=XR(n.line);return d`<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?d`<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?d`<div class="bundle-source-panel-line-row">${a?d`<span class="bundle-source-panel-line">${a}</span>`:g} ${i?d`<span class="bundle-source-panel-meta" data-tooltip-truncated data-tooltip="${i}">${i}</span>`:g}</div>`:g}<div class="bundle-source-panel-desc">${nt(ll(n),{paragraphs:!1})}</div>${r.length>0?d`<div class="bundle-source-panel-reports"><div class="bundle-source-panel-reports-label">Reported by</div>${r.map(c=>{let u=Be[Me(c)]??Be.default;return d`<button type="button" class="report-chip bundle-source-panel-report" data-bundle-issue-report="${c}">${z(u)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${c}">${re(c)}</span></button>`})}</div>`:g}</div></aside>`}function vy(e,t,n){let r=[],o=new Map;if(typeof n=="string"&&e?.fileHashes){let i=qs(e.fileHashes,"issues").get(t)??[];for(let a=0;a<i.length;a++){let c=i[a];r.push(c);let u=parseInt(c.line,10);Number.isFinite(u)&&u>0&&(o.has(u)||o.set(u,[]),o.get(u).push({f:c,idx:a}))}}return{fileFindings:r,lineFindings:o}}function HR(e,t=null,n=g){return d`<header class="bundle-source-bar"><div class="bundle-source-title mono" data-tooltip-truncated data-tooltip="${e}">${e}</div>${t?.files.length>1?GR(t):g} ${WR()} ${n} <button type="button" class="bundle-source-close" data-action="bundle-source-close" aria-label="Close source viewer">×</button></header>`}function $y(e,t,n,r,o,s=null,i=!1,a=!1){return d`<div class="bundle-source-code-wrap">${typeof t=="string"?yB(t,e,n,o,s,i,a):d`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${wB(r)}`}function UR(){let e=l.bundleSourceFile;if(!e)return g;if(l.bundleDetailsTab==="code"||l.bundleDetailsTab==="search")return g;let t=l.bundleDetails,n=t?.sourceError||t?.error,r=!n&&(!t||t.metadataOnly===!0),o=It(t),{fileFindings:s,lineFindings:i}=vy(t,e,o.get(e)),a=l.bundles?.find(u=>u.integrity===t?.integrity)??(t?.npm?{npm:t.npm}:null),c=r||n?null:wy(t,a,e,o.get(e),s,i);return d`<div class="bundle-source-overlay"><div class="${G({"bundle-source-modal":!0,"with-panel":l.bundleSourceFindingIdx!=null})}">${HR(e,rh(l.bundleCodeHistory,t?.integrity??null,e),c?.toggle)}<div class="bundle-source-body" aria-busy="${String(r)}">${n?d`<div class="bundles-slide-placeholder is-error" role="status">Failed to load source: ${n}</div>`:r?d`<div class="bundles-slide-placeholder" role="status">Loading source…</div>`:$y(e,c.content,t,c.fileFindings,c.lineFindings,null,!1,c.pretty)}</div></div></div>`}var Ks=new Map,RR=null,gy=null;function VR(e,t){let n=Tr(e??"",t).split("/");for(let r=1;r<n.length;r++)Ks.set(n.slice(0,r).join("/"),!0)}function vB(e,t){l.bundleCodeSearchMode="files",l.bundleCodeSearchQuery="",VR(e,t),E(),Hu()}function $B(e){let t=n=>{for(let r of n.dirs.values())Ks.set(r.path,!1),t(r)};t(e),E()}function kB(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 c=Ro(a);(r===null||(Se[c]??0)>(Se[r]??0))&&(r=c)}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])=>fo(m,h).localeCompare(fo(b,y))||h.path.localeCompare(y.path)),c=[...e.files.entries()].toSorted(([m],[h])=>m.localeCompare(h)),u=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(u(h))return!0;return!1},p=(m,h)=>o?!0:Ks.has(m)?Ks.get(m):n===0||u(h),f=m=>h=>{Ks.set(m,!h.currentTarget.parentElement.open)};return d`<ul class="${G({"bundle-code-tree":!0,root:n===0})}" aria-label="${n===0?"Source files":g}" @keydown="${n===0?cS:g}">${X(a,([,m])=>m.path,([m,h])=>{let b=h.path,y=Gg(m,h,n),w=h.package,v=w?.ecosystem==="cargo"||w?.ecosystem==="composer"||w?.ecosystem==="soldeer",k=Sl(w?.ecosystem),x=w?.variant?`${y.node.sourcePath}
|
|
193
|
-
Variant ${w.variant}`:y.node.sourcePath,$=h.packageInfo,S=!!$||!!w?.variant,_=$&&i?F=>{let{bytes:I,loc:A}=oS(i,h.sourcePath);Object.assign(F.dataset,{tooltipLoc:String(A),tooltipSize:me(I)})}:void 0,R=kB(h,r);return d`<li class="bundle-code-tree-dir"><details .open="${xw(p(b,h))}"><summary @click="${f(b)}" .prepareTooltip="${_}" 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?x:g}" data-tooltip-placement="${S?"right-start":g}"><span class="bundle-code-tree-chevron" aria-hidden="true"></span> ${w?k:g} <span class="${G({"bundle-code-tree-dirname":!0,"bundle-code-tree-package":!!w,"bundle-code-tree-package-vendored":v})}" data-tooltip-truncated data-tooltip="${S?g:x}">${w?d`<span class="bundle-code-tree-package-name">${w.name}</span>${w.version?d`<span class="bundle-code-tree-package-version">${v?"- ":"@"}${w.version}</span>`:g}`:y.names.map((F,I)=>d`${I>0?d`<span class="bundle-code-tree-separator">/</span>`:g}${F}`)} </span>${w?.variant?d`<span class="bundle-code-tree-variant">variant ${w.variant}</span>`:g} ${R.count>0?d`<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>`})} ${X(c,([,m])=>m,([m,h])=>{let b=r?.get(h),y=b&&b.length>0?Ro(b):null,w=b?.length??0;return d`<li class="bundle-code-tree-file"><button type="button" class="${G({"bundle-code-tree-link":!0,current:h===t})}" data-bundle-view-source="${h}" aria-current="${h===t?"true":g}">${bn(h,s?.get(h))}<span class="bundle-code-tree-name" data-tooltip-truncated data-tooltip="${h}">${m}</span> ${w>0?d`<span class="${`bundle-code-tree-count sev-${y}`}" data-tooltip="${`${w} ${w===1?"issue":"issues"}`}">${w}</span>`:g}</button></li>`})}</ul>`}function Tr(e,t){return t&&e.startsWith(t)?e.slice(t.length):e}function xB(e,t,n,r,o="",s=null,i=null){if(!n)return by(e,t,0,r,!1,s,i);let a=lS(e,n,o);return a?by(a,t,0,r,!0,s,i):d`<div class="bundle-code-search-empty">No files match.</div>`}var TR=new WeakMap;function jR(e,t){let n=TR.get(t);return n||(n=Bw([...t.keys()].toSorted(),Mt(e)),TR.set(t,n)),n}var IR=1e3,MR=new WeakMap;function SB(e,t,n,r,o=""){let s=up(e),i=MR.get(t);i||(i=[...t.keys()].filter(p=>s.get(p)!=null).toSorted((p,f)=>s.get(f)-s.get(p)||p.localeCompare(f)),MR.set(t,i));let a=n.toLowerCase(),c=a?i.filter(p=>Tr(p,o).toLowerCase().includes(a)):i;if(c.length===0)return d`<div class="bundle-code-search-empty">No files match.</div>`;let u=c.length>IR?c.slice(0,IR):c;return d`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${u.length<c.length?`${u.length.toLocaleString()} largest of ${c.length.toLocaleString()} files`:`${c.length.toLocaleString()} ${c.length===1?"file":"files"} by size`}</div><ul class="bundle-code-largest">${X(u,p=>p,p=>d`<li><button type="button" class="${G({"bundle-code-largest-file":!0,current:p===r})}" data-bundle-view-source="${p}" aria-current="${p===r?"true":g}"><span class="bundle-code-largest-path" data-tooltip-truncated data-tooltip="${p}">${Tr(p,o)}</span><span class="bundle-code-largest-size">${me(s.get(p))}</span></button></li>`)}</ul></div>`}function CB(e,t,n,r,o=""){if(!n)return d`<div class="bundle-code-search-hint">Type to search across every source in this bundle.</div>`;let s=Bu(n,!1,!1),i=20,a=100,c=[],u=0;for(let p of jR(e,t)){let f=t.get(p);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}),u++,m.length>=i))break}if(m.length>0&&c.push({path:p,hits:m}),c.length>=a)break}return c.length===0?d`<div class="bundle-code-search-empty">No matches.</div>`:d`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${u} ${u===1?"hit":"hits"} in ${c.length} ${c.length===1?"file":"files"}</div>${c.map(({path:p,hits:f})=>{let m=Tr(p,o);return d`<div class="${G({"bundle-code-search-file":!0,current:p===r})}"><button type="button" class="bundle-code-search-file-name" data-bundle-view-source="${p}" data-tooltip-truncated data-tooltip="${p}">${m}</button><ul class="bundle-code-search-hits">${f.map(h=>d`<li class="bundle-code-search-hit"><button type="button" class="bundle-code-search-hit-link" data-bundle-view-source="${p}" 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">${iR(h.text,h.ranges)}</span></button></li>`)}</ul></div>`})}</div>`}function _B(e,t,n,r=""){if(!e.fileHashes)return d`<div class="bundle-code-search-empty">Computing file hashes…</div>`;let o=qs(e.fileHashes,"issues");if(o.size===0)return d`<div class="bundle-code-search-empty">No issues match this bundle's files.</div>`;let s=t.toLowerCase(),i=[];for(let[a,c]of o)for(let u=0;u<c.length;u++){let p=c[u],f=p.description??"";s&&!a.toLowerCase().includes(s)&&!p.severity.includes(s)&&!p.severity.replaceAll("_"," ").includes(s)&&!f.toLowerCase().includes(s)||i.push({file:a,finding:p,fileIdx:u})}return i.sort((a,c)=>{let u=Se[a.finding.severity]??0,p=Se[c.finding.severity]??0;return p!==u?p-u:a.file.localeCompare(c.file)}),i.length===0?d`<div class="bundle-code-search-empty">No matches.</div>`:d`<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:c,fileIdx:u})=>{let p=c.severity,f=Tr(a,r),m=a===n&&l.bundleSourceFindingIdx===u;return d`<li class="${G({"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="${u}" data-bundle-view-line="${c.line??""}"><div class="bundle-code-search-issue-row"><span class="${`bundle-code-search-issue-sev sev-${p}`}">${p.replaceAll("_"," ")}</span> <span class="bundle-code-search-issue-path mono" data-tooltip-truncated data-tooltip="${a}">${f}${c.line?`:${c.line}`:""}</span></div><div class="bundle-code-search-issue-desc">${nt(ll(c),{paragraphs:!1})}</div></button></li>`})}</ul></div>`}function RB(e,t){if(e.kind!=="stasis")return t;let n=Mt(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 AR(e,t,n){let r=null,o=-1,s=0;for(let[c,u]of n){if(typeof t.get(c)!="string")continue;let p=Se[Ro(u)]??0;(p>o||p===o&&u.length>s||p===o&&u.length===s&&(r===null||c.localeCompare(r)<0))&&(r=c,o=p,s=u.length)}if(r)return r;if(e.kind==="stasis"&&e.bundle){for(let c of e.bundle.entries)if(typeof t.get(c)=="string")return c}for(let c of e.npmEntries??[])if(typeof t.get(c)=="string")return c;let i=null,a=-1;for(let[c,u]of t)typeof u=="string"&&u.length>a&&(i=c,a=u.length);return i}function TB(e,t=null){let n=It(e);if(n.size===0)return d`<div class="bundle-code-empty">This bundle doesn't carry any source content.</div>`;RR!==l.selectedBundle&&(Ks.clear(),RR=l.selectedBundle,gy=null);let o=Cl(n).paths,s=e.kind==="stasis"?e.bundle.modules:null,i=iS(Kn(o).prefix,s,o),a=o.map(S=>Tr(S,i)),c=sS(a,o,s),u=e.fileHashes?qs(e.fileHashes,"issues"):new Map,p=RB(e,n),f=e.kind==="stasis"?new Map([...u].filter(([S])=>p.has(S))):u,m=l.bundleSourceFile,h=l.bundleCodeFileRequest;if(h?.bundle===l.selectedBundle){l.bundleCodeFileRequest=null;let S=h.path==null?o[h.file-1]:n.has(h.path)?h.path:null;if(S){m=S,l.bundleSourceFile=S,Hu();let _=h.endLine??h.line;l.bundleSourceTargetLine=h.line&&_<=Ew(n.get(S))?{bundle:e.integrity,path:S,line:h.line,..._>h.line?{end:_}:{}}:null,l.bundleSourceTargetLine&&hB(h.line)}}if(Ln&&(Ln.bundle!==l.selectedBundle||m&&m!==Ln.path)&&(Ln=null),!m)m=AR(e,p,f),m&&(l.bundleSourceFile=m,Ln={bundle:l.selectedBundle,path:m,hadIssues:f.size>0},Hu());else if(Ln&&!Ln.hadIssues&&f.size>0){Ln.hadIssues=!0;let S=AR(e,p,f);S&&S!==m&&(m=S,l.bundleSourceFile=S,l.bundleSourceFindingIdx=null,Ln.path=S,Hu())}m!==gy&&(VR(m,i),gy=m),m&&t?.managedId&&C()?Z?.replaceCodeRoute(mr(l.managedTeams,t,l.currentManagedTeam,"code",Id(l))):m&&t?.npm&&C()&&Z?.replaceCodeRoute(_a(t,"code",Id(l)));let b=m?n.get(m):null,{fileFindings:y,lineFindings:w}=vy(e,m,b),k=u.size>0?["files","code","issues","largest"]:["files","code","largest"],x=k.includes(l.bundleCodeSearchMode)?l.bundleCodeSearchMode:"files",$=l.bundleCodeSearchQuery;return d`<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="${()=>vB(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="${x!=="files"||!!$||c.dirs.size===0}" @click="${()=>$B(c)}">${m0}</button></span></div>${i?d`<div class="bundle-code-rail-prefix mono" data-tooltip-truncated data-tooltip="${i}">${i}</div>`:g}<bundle-code-search .modes="${k}"></bundle-code-search><div class="bundle-code-rail-body">${Ng(x,[["files",()=>xB(c,m,$,u,i,e.kind==="stasis"?e.bundle.formats:null,n)],["code",()=>CB(e,n,$,m,i)],["issues",()=>_B(e,$,m,i)],["largest",()=>SB(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="${G({"bundle-code-main":!0,"with-panel":l.bundleSourceFindingIdx!=null})}">${m?IB(e,m,b,y,w,t):d`<div class="bundle-code-placeholder">Pick a file from the tree to view its source.</div>`}</div></div>`}function GR(e){return d`<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}">${Ss}</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}">${Cs}</button></span>`}function ER(e){let t=e.split(`
|
|
195
|
-
`).length;return`${t.toLocaleString()} ${t===1?"line":"lines"} \xB7 ${me(mn(e))}`}function IB(e,t,n,r,o,s=null){let i=rh(l.bundleCodeHistory,e.integrity,t),{pretty:a,toggle:c,content:u,fileFindings:p,lineFindings:f}=wy(e,s,t,n,r,o),m=p.map((b,y)=>({idx:y,line:parseInt(b.line,10)||0})).toSorted((b,y)=>b.line-y.line||b.idx-y.idx),h=dS(e,t,s?.managedId&&s.repoId!=null?{github:s.repoFullName,directory:s.repoDirectory}:null);return d`<header class="bundle-code-main-bar">${GR(i)} ${bn(t,Do(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?uS(h,s?.commitInfo):g} <span class="bundle-code-main-spacer"></span> ${p.length>0?d`<span class="bundle-code-main-issues" data-bundle-code-issue-order="${JSON.stringify(m)}"><span class="${`bundle-code-tree-count sev-${Ro(p)}`}" data-tooltip="${`${p.length} ${p.length===1?"issue":"issues"} in this file`}">${p.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} ${WR()} ${c} ${typeof u=="string"?d`<span class="bundle-code-main-stats">${c===g?g:d`<span class="bundle-code-main-stats-room" aria-hidden="true">${ER(n)}</span>`}<span>${ER(u)}</span></span>`:g}</header><div class="bundle-code-main-body">${$y(t,u,e,p,f,null,!a&&!!(s?.managedId||s?.npm)&&C()&&!gn(),a)}</div>`}var MB=400;function AB(e){return e<=5?8:e<=15?6:e<=40?4:e<=120?3:2}function EB(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 FB(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 Qb(e,t,o,n)}function LB(e,t,n){let r=FB(e,n??[],MB);return d`<div class="${G({"bundle-search-line":!0,"is-match":n!=null})}"><span class="bundle-search-lineno">${t}</span> <span class="bundle-search-code">${r.clipped?d`<span class="bundle-search-clip">…</span>`:g}${ey(r.text,r.ranges)}</span></div>`}function NB(e,t,n,r,o){let{start:s,end:i}=n,a=s;for(let p=s;p<=i;p++)if(r.has(p)){a=p;break}let c=String(i).length,u=[];for(let p=s;p<=i;p++)u.push(LB(t[p-1]??"",p,r.get(p)??null));return d`${o?d`<div class="bundle-search-gap" aria-hidden="true"></div>`:g} <button type="button" class="bundle-search-snippet" style="${ae({"--bundle-search-lineno-w":`${c}ch`})}" data-bundle-view-source="${e}" data-bundle-view-line="${a}" data-bundle-view-scroll-block="center">${u}</button>`}function OB(e,t,n){let{path:r,lines:o,hits:s}=e,i=Tr(r,t),a=EB(s,o.length,n),c=new Map(s.map(f=>[f.ln,f.ranges])),u=s[0].ln,p=r===l.bundleSourceFile;return d`<section class="${G({"bundle-search-file":!0,current:p})}"><header class="bundle-search-file-head"><button type="button" class="bundle-search-file-name mono" data-bundle-view-source="${r}" data-bundle-view-line="${u}" 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)=>NB(r,o,f,c,m>0))}</div></section>`}function BB(e,t,n,r,o,s){if(!n)return d`<div class="bundle-search-results"><div class="bundle-search-hint">Search across every ${e.npm?"file of this version":"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=sR(e.integrity??"",t,n,r,o,jR(e,t));if(i.error)return d`<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:c,truncated:u}=i,p=[...t.keys()].toSorted(),{prefix:f}=Kn(p);if(a.length===0)return d`<div class="bundle-search-results"><div class="bundle-search-empty">No matches.</div></div>`;let m=s?AB(c):0,h=a.length;return d`<div class="bundle-search-results"><div class="bundle-search-summary"><span>${c}${u?"+":""} ${c===1?"match":"matches"} in ${h}${u?"+":""} ${h===1?"file":"files"}</span> ${f?d`<span class="bundle-search-summary-prefix mono" data-tooltip-truncated data-tooltip="${f}">${f}</span>`:g} ${u?d`<span class="bundle-search-summary-more">results capped — refine to narrow</span>`:g}</div>${X(a,b=>b.path,b=>OB(b,f,m))}</div>`}function PB(e,t,n,r){if(!t||typeof e!="string")return null;let o=Bu(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 DB(e,t,n,r){let o=l.bundleSourceFile;if(!o)return g;let s=t.get(o),{fileFindings:i,lineFindings:a}=vy(e,o,s),c=wy(e,r,o,s,i,a);return d`<aside class="bundle-search-side">${HR(o,null,c.toggle)}<div class="bundle-source-body">${$y(o,c.content,e,c.fileFindings,c.lineFindings,c.pretty?null:n,!1,c.pretty)}</div></aside>`}function zB(e,t=null){let n=It(e);if(n.size===0)return d`<div class="bundle-search-view"><div class="bundle-code-empty">${e.npm?"This version has no text files to search.":"This bundle doesn't carry any source content."}</div></div>`;let r=l.bundleSearchQuery,o=l.bundleSearchRegex,s=l.bundleSearchCase,i=null;if(l.bundleSourceFile){let c=PB(n.get(l.bundleSourceFile),r,o,s);c&&c.size===0?(l.bundleSourceFile=null,l.bundleSourceFindingIdx=null):i=c}let a=l.bundleSearchContext;return d`<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">${BB(e,n,r,o,s,a)} ${DB(e,n,i,t)}</div></div>`}var WB=(e,t,n,r=!1)=>d`<button type="button" class="${G({"bundles-tab":!0,active:n===e})}" data-bundle-tab="${e}" aria-selected="${String(n===e)}" role="tab" ?disabled="${r}">${t}</button>`,KR=()=>[["treemap","Treemap"],["code","Code"],["search","Search"],["compare","Compare"],...l.managedSession&&!l.managedSession.publicShare&&l.managedTeams?.some(e=>e.dependencyReview===!0)?[["review","Review"]]:[],["overview","Overview"]];function qR(e,t,n,r,{overview:o=!1,opening:s=!1}={}){let{npm:i}=e;return d`<div class="bundles-view bundles-slide-view"><bundle-slide-header class="bundles-slide-header"><header class="bundles-slide-bar">${C()&&e.managedId&&e.repoId==null?d`<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} ${i?d`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>yr()}">npm</button> <span aria-hidden="true">></span></span>`:g} <span class="bundles-slide-icon" aria-hidden="true">${z(i?Eo:Ao)}</span><div class="bundles-slide-title">${i?d`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${i.name}">${i.name}</div><npm-version-select .name="${i.name}" .version="${i.version}" .tab="${t}" .list="${s?null:Ra(i.name)}"></npm-version-select>`:d`<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="${!Ka(e)}" @click="${()=>{Ou(e)}}">${z(Pn)}<span>Scan</span></button><div class="bundles-slide-tabs" role="tablist">${n.map(([a,c])=>WB(a,c,t,s))}</div></header></bundle-slide-header><div class="${G({"bundles-slide-body":!0,"bundles-slide-body-overview":o})}">${r}</div></div>`}function YR({name:e,spec:t,tab:n}){return qR({npm:{name:e,version:t??"latest"}},n,KR(),d`<div class="bundles-slide-placeholder" role="status">Opening ${Ca(e,t)}…</div>`,{opening:!0})}function HB(e){let t=!!e.npm;t&&!$l.has(l.bundleDetailsTab)&&(l.bundleDetailsTab="overview");let n=!t&&xR(e,l.bundleDetails,l.bundleDetailsTab==="advisories");l.bundleDetailsTab==="advisories"&&!n&&(l.bundleDetailsTab="overview");let r=t||l.bundleDetailsTab==="compare"||Is(l.bundles??[],l.selectedBundle).length>0,o=!C();l.bundleDetailsTab==="issues"&&!o&&(l.bundleDetailsTab="overview");let s=l.bundleDetailsTab,i=s==="overview",a=l.bundleDetails,c=!!(a&&a.integrity===e.integrity),u=c&&!a.error&&!!(a.json||a.bundle)&&!(a.metadataOnly&&Vn(s));s==="advisories"&&n&&u&&a.kind==="stasis"&&Wu(a,E).catch(()=>{});let p=t?KR():[...n?[["advisories","Advisories"]]:[],...o?[["issues","Issues"]]:[],["terminal","Terminal"],["treemap","Treemap"],["graph","Graph"],["code","Code"],["search","Search"],...r?[["compare","Compare"]]:[],["overview","Overview"]],f=i?XB(e,a):u?Ng(s,[["terminal",()=>d`<div id="bundle-terminal-slot" class="bundle-terminal-slot"></div>`],["graph",()=>d`<div id="bundle-graph-slot" class="bundle-graph-slot"></div>`],["treemap",()=>d`<bundle-treemap .details="${a}"></bundle-treemap>`],["code",()=>TB(a,e)],["search",()=>zB(a,e)],["review",()=>d`<npm-review .entry="${e}" .details="${a}" .request="${l.npmReview}" .session="${l.managedSession}" .source="${tb(e)}"></npm-review>`],["compare",()=>d`<bundle-compare .details="${a}" .integrity="${e.integrity}" .request="${l.bundleCompare}" .source="${t?tb(e):null}"></bundle-compare>`],["issues",()=>VB(a)],["advisories",()=>_R(a,E,Ka(e)?()=>{Ou(e,{mode:"dependencies"})}:null)]]):c&&a.sourceError?d`<div class="bundles-slide-placeholder is-error">${a.sourceError} <button type="button" data-bundle-retry-sources>Retry</button></div>`:c&&!a.metadataOnly?d`<div class="${G({"bundles-slide-placeholder":!0,"is-error":!!a.error})}">${a.error?`Failed to parse: ${a.error}`:"Bundle contents not parsed."}</div>`:d`<div class="bundles-slide-placeholder">Loading bundle…</div>`;return qR(e,s,p,f,{overview:i})}function UB(e,t={}){if(!e)return g;let n=[];if(e.fileHash&&(n=Ti(e.fileHash,e)),n.length===0&&t.bucketKey&&(t.kind==="package"?n=mf(t.bucketKey,e):t.kind==="repository"&&(n=gf(t.bucketKey,e))),n.length===0)return g;let r=n.slice(0,2),o=n.length-r.length;return d`<div class="bundle-issue-reports">${r.map(s=>{let i=Be[Me(s)]??Be.default;return d`<button type="button" class="report-chip" data-bundle-issue-report="${s}">${z(i)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${s}">${re(s)}</span></button>`})} ${o>0?d`<span class="bundle-issue-reports-more">, and ${o} more…</span>`:g}</div>`}function XR(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 Gs(e,t){return d`<div class="bundle-issues-empty"><p class="bundle-issues-empty-primary">${e}</p>${t?d`<p class="bundle-issues-empty-hint">${t}</p>`:g}</div>`}function VB(e){if(e.managedId)return Gs("Open a report to review its findings.","Bundle metadata includes source hashes; reports are available through your teams.");if(!e.fileHashes)return Gs("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 Gs("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=qs(e.fileHashes,"issues");if(t.size===0){let n=uB();if(n===0)return Gs("No issues match this bundle's files.","Issues are analyzer findings matched to this bundle by source-file hash. No hash-carrying findings are indexed yet \u2014 hash matching needs the analyzer's native JSON reports; drop one and any matches will appear here automatically.");let r=0;for(let o of e.fileHashes.values())r+=ju(o).length;return r>0?Gs("All matching issues are dismissed.",`${r} ${r===1?"finding matches":"findings match"} this bundle's files, but every one is triaged invalid or deleted.`):Gs("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 Xa(t,{kind:"bundle"})}function Xa(e,{kind:t,bucketKey:n}={}){let r=[...e.keys()],{prefix:o,stripped:s}=Kn(r),i=new Map(r.map((u,p)=>[u,s[p]])),a=[...e.entries()].toSorted(([u,p],[f,m])=>{let h=Se[Ro(p)]??0,b=Se[Ro(m)]??0;return b!==h?b-h:(i.get(u)??u).localeCompare(i.get(f)??f)}),c=[...e.values()].reduce((u,p)=>u+p.length,0);return d`<div class="bundle-issues"><div class="bundle-issues-summary">${c} ${c===1?"issue":"issues"} across ${e.size} ${e.size===1?"file":"files"} ${o?d`<span class="mono">${o}</span>`:g}</div><ul class="bundle-issues-list">${X(a,([u])=>u,([u,p])=>{let f=i.get(u)??u,m=[...p].toSorted((b,y)=>{let w=Se[b.severity]??0,v=Se[y.severity]??0;if(v!==w)return v-w;let k=parseInt(b.line,10)||0,x=parseInt(y.line,10)||0;return k-x}),h=t==="repository"&&n?`${/^https?:/iu.test(n)?n.replace(/\/$/u,""):`https://github.com/${n}`}/blob/HEAD/${u}`:null;return d`<li class="bundle-issues-file-group"><header class="bundle-issues-file-header">${t==="bundle"?d`<button type="button" class="bundle-issues-file-name mono" data-bundle-view-source="${u}" data-tooltip-truncated data-tooltip="${u}">${f}</button>`:h?d`<a class="bundle-issues-file-name bundle-issues-file-name-link mono" href="${h}" target="_blank" rel="noopener" data-tooltip-truncated data-tooltip="${u}">${f}</a>`:d`<span class="bundle-issues-file-name bundle-issues-file-name-static mono" data-tooltip-truncated data-tooltip="${u}">${f}</span>`} <span class="bundle-issues-file-count">${p.length} ${p.length===1?"issue":"issues"}</span></header><ul class="bundle-issues-findings">${X(m,b=>JSON.stringify([b.id??`${u}\0${b.line??""}\0${b.severity??""}\0${b.description??""}`,st(b)]),b=>{let y=p.indexOf(b),w=b.severity,v=XR(b.line),k=Re(b,l.triage.get(U(b))),x=k==="fixed"||k==="invalid"||k==="deleted"?k.toUpperCase():k==="inprogress"?"In progress":k==="ignored"?"Ignored":null,$=d`<div class="bundle-issues-finding-head"><span class="${`bundle-issue-sev sev-${w}`}">${w.replaceAll("_"," ")}</span> ${v?d`<span class="bundle-issues-finding-line">${v}</span>`:g} ${x?d`<span class="${`bundle-issues-finding-triage triage-${k}`}">${x}</span>`:g} <span class="bundle-issues-finding-spacer"></span> ${UB(b,{kind:t,bucketKey:n})}</div><div class="bundle-issues-finding-desc">${nt(ll(b),{paragraphs:!1})}</div>`;return d`<li class="bundle-issues-finding">${t==="bundle"?d`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${u}" data-bundle-view-finding-idx="${y}" data-bundle-view-line="${b.line??""}">${$}</button>`:d`<div class="bundle-issues-finding-link bundle-issues-finding-static">${$}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function JR(e){let t=l.selectedBundle,n=t?e.find(r=>r.integrity===t):null;return n?HB(n):d`<div class="bundles-view bundles-view-empty"><p class="bundles-empty-hint">Pick a bundle from the sidebar to open it.</p></div>`}var Uu=d`<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>`,jB=d`<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>`,FR=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"}),LR=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"]);function NR(e){if(FR[e])return FR[e];let t=0;for(let n of e)t=Math.imul(t,31)+n.codePointAt(0)|0;return LR[(t>>>0)%LR.length]}function GB(e){let t=e.currentTarget,n=e.target.closest?.(".bundles-languages-segment");!n||!t.contains(n)||(t.dataset.tooltip=n.dataset.languageTooltip??"",Kw(t))}function KB(e){delete e.currentTarget.dataset.tooltip,qw()}var ZR=e=>e.codeStats??=Iw(e.npm?new Map([...pi(e)].filter(([t])=>!xa.test(t.slice(t.lastIndexOf("/")+1)))):pi(e),yn(e));function QR(e,{legend:t=!1}={}){if(!(e?.kind==="stasis"&&e.bundle)&&!(e?.npm&&e.json))return g;let n=ZR(e),r=n.lines,o=n.languages.filter(a=>a.lines>0);if(r<=0||o.length===0)return g;let s=a=>{let c=a/r*100;return c<.1?"<0.1":c<1?c.toFixed(1):c.toFixed(0)},i=t?d`<ul class="bundles-languages-legend">${o.slice(0,4).map(({key:a,label:c,lines:u})=>d`<li><span class="bundles-languages-swatch" style="${ae({background:NR(a)})}"></span>${c}<span class="bundles-languages-share">${s(u)}%</span></li>`)}</ul>`:g;return d`<div class="bundles-languages-bar" data-tooltip-managed aria-label="Languages in this bundle" @pointerover="${GB}" @pointerleave="${KB}">${o.map(({key:a,label:c,lines:u})=>d`<span class="bundles-languages-segment" style="${ae({flexGrow:u,background:NR(a)})}" data-language-tooltip="${`${c} \xB7 ${s(u)}% \xB7 ${u.toLocaleString()} LoC`}"></span>`)}</div>${i}`}async function qB(e){try{await(await B()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function YB(e,t){let n=nR(t),r=QR(t);return d`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${e.managedId?gn()?d`<button type="button" class="bundles-download-btn" @click="${()=>{qB(e)}}">${Uu}<span>Download bundle</span></button>`:d`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${Uu}<span>Download bundle</span></a>`:d`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${Uu}<span>Download bundle</span></button>`} ${n?d`<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)">${jB}<span>SPDX</span></button></div>`:g}</div>${r}</div>`}function Vu(e,t,{placeholder:n=g,overviewClass:r=""}={}){return d`<div class="bundles-overview ${r}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e}${t}</div></div>${n}</div>`}function yy(e){let t=e.filter(n=>typeof n=="number");return t.length>0?t.reduce((n,r)=>n+r,0):null}function XB(e,t){if(e.npm)return JB(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=(c="",u=!1)=>d`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd>${e.managedId?d`<dt>Repository</dt><dd>${e.repoFullName||"Unattached"}</dd>${e.repoId==null?g:d`<dt>Directory</dt><dd class="mono">/${e.repoDirectory??""}</dd>`}`:g} ${Nd(o,c,e.commitInfo).map(p=>d`<dt>${p.label}</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${p.href}" target="_blank" rel="noopener noreferrer">${p.label==="GitHub"?z(Vt):g}<span>${p.text}</span></a> ${p.commit?d`<a class="bundle-origin-link bundle-commit-link" href="${p.commit.href}" data-tooltip="${p.commit.hash}" data-tooltip-icon="commit" data-tooltip-commit-info="${As(e.commitInfo,p.commit.hash)??g}" target="_blank" rel="noopener noreferrer">${z(sl)}<span>${p.commit.text}</span></a>`:g} ${p.commit?.tags?d`<span class="bundle-origin-tags">${p.commit.tags.map(f=>d`<a class="bundle-origin-link bundle-tag-link" href="${f.href}" target="_blank" rel="noopener noreferrer">${z(il)}<span>${f.name}</span></a>`)}</span>`:g}</dd>`)}<dt>Integrity</dt><dd class="mono bundle-integrity">${e.integrity}</dd>${c?d`<dt>Prefix</dt><dd class="mono">${c}</dd>`:g} ${o?.entries?.size>0?d`<dt>${o.entries.size===1?"Entry":"Entries"}</dt><dd class="mono"><ul class="bundles-entry-points">${[...o.entries].map(p=>d`<li><button type="button" class="bundle-entry-point" data-bundle-view-source="${p}">${Tr(p,c)}</button></li>`)}</ul></dd>`:g} ${u&&Number.isSafeInteger(s)?d`<dt>Size</dt><dd>${me(s)}</dd>`:g}</dl>`,a=YB(e,t);if(!n)return Vu(i("",!0),a);if(t.error)return Vu(i("",!0),a,{placeholder:d`<div class="bundles-overview-placeholder is-error">Failed to parse: ${t.error}</div>`});if(t.kind==="sourcemap"&&t.json){let c=t.json,u=yn(t),p=c.sources??[...u.keys()],f=t.sourceSizes??(u.size===p.length?p.map(h=>u.get(h)??null):p.map((h,b)=>typeof c.sourcesContent?.[b]=="string"?mn(c.sourcesContent[b]):null)),m=d`<dt>Version</dt><dd>${String(c.version??"?")}</dd>${c.file?d`<dt>Output</dt><dd class="mono">${c.file}</dd>`:g} ${c.sourceRoot?d`<dt>Source root</dt><dd class="mono">${c.sourceRoot}</dd>`:g} ${c.names||t.namesCount!=null?d`<dt>Names</dt><dd>${c.names?.length??t.namesCount}</dd>`:g}`;return hy(i,m,p,f,null,a,{bundleSize:t.size,unpackedSize:yy(f)})}if(t.kind==="stasis"&&t.bundle){let c=t.bundle,u=yn(t),p=Fw(t),f=[...p.keys()],m=new Set(f.filter(v=>p.get(v)==="resource")),h=new Set;for(let v of c.imports.keys()){let k=v.replace(/\s*\(with: .*\)\s*$/u,"");for(let x of k.split(", "))h.add(x)}let b=[...h].toSorted(),y=f.map(v=>u.get(v)),w=d`<dt>Version</dt><dd>${String(c.version)}</dd>${b.length>0?d`<dt>Resolution kinds</dt><dd>${b.join(", ")}</dd>`:g}`;return hy(i,w,f,y,Mt(t),a,{bundleSize:t.size,unpackedSize:yy(y),resources:m,details:t})}return Vu(i("",!0),a,{placeholder:d`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`})}function JB(e,t){let n=`/api/npm/download?${new URLSearchParams({name:e.npm.name,version:e.npm.version})}`,r=d`<a class="bundles-download-btn" href="${n}">${Uu}<span>Tarball</span></a>`,o=d`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${Uh(e)}${r}</div></div>`;if(t?.integrity!==e.integrity||!t.json)return Vu(Sh(e,{githubFigures:Kh(e),provenance:Yh(e),provenanceNamesBuilder:qh(e.npm)}),o,{overviewClass:"npm-overview"});let{sources:s}=t.json,i=yn(t),a=s.map(m=>i.get(m)??null),{paths:c,binaries:u,content:p}=wr(t),f=jh(e.npm);return hy(m=>Sh(e,{prefix:m,githubFigures:Kh(e),provenance:Yh(e),provenanceNamesBuilder:qh(e.npm),files:c}),h1(e,c,t),s,a,null,g,{bundleSize:t.size,unpackedSize:yy(a),resources:u,leadColumn:d`${g1(e)}${j1(e)}`,trailColumns:gC(u,i),summaryExtra:d`${z1(e,c)}${Z1(e,t)}${mC(e,QR(t,{legend:!0}),t)}${W1(e,r,oC(e))}`,overviewClass:"npm-overview",lines:ZR(t).lines,sized:(m,h,b)=>Yd(m,p[m],b),fileTag:m=>d`${Gh(f.get(m))}${Xh(t,m,!0)}`,fileFlags:m=>Jh(t,m,f.get(m)),fileIcon:m=>bn(m,u.has(m)?"binary":void 0),fileFilter:Y1(e)})}function eT(){ht().catch(()=>{});let e=qt(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[m,h]of e){let b=[],y=[],w=new Map,v=new Set;for(let[k,x]of h.byVersion){let $=[],S=new Map;for(let _ of x.findings){let R=Re(_,l.triage.get(U(_)))??null;R==="inprogress"?t.inprogress++:R==="fixed"?t.fixed++:R==="invalid"?t.invalid++:R==="deleted"?t.deleted++:R==="ignored"&&t.ignored++,R===l.shownTriage&&($.push(_),S.has(_.file)||S.set(_.file,[]),S.get(_.file).push(_))}if($.length!==0){b.push([k,{findings:$,files:S,reports:x.reports}]);for(let _ of $)y.push(_),w.has(_.file)||w.set(_.file,[]),w.get(_.file).push(_);for(let _ of x.reports)v.add(_)}}b.length!==0&&(b.sort(([k],[x])=>lf(k,x)),n.push([m,{findings:y,files:w,reports:v,versions:b}]))}let r=l.selectedPackage,o=r?n.find(([m])=>m===r)??null:null,s=null;if(o){let m=o[1].versions,h=l.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&&l.packageDetailsTab==="issues")return o2(o[0],i,s?s[0]:void 0);let a=l.packagesSearchQuery.trim().toLowerCase(),c=a?n.filter(([m])=>m.toLowerCase().includes(a)):n.slice();n2(c,l.packagesSortBy);let u=n.reduce((m,[,h])=>m+h.findings.length,0),p=new Set;for(let[,m]of n)for(let h of m.reports)p.add(h);let f=o?"packages-layout open":"packages-layout";return d`<div class="${G({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${c.length===n.length?d`${n.length} ${n.length===1?"package":"packages"}`:d`${c.length} of ${n.length} ${n.length===1?"package":"packages"}`}</span> ${u>0?d`<span>${u} ${u===1?"finding":"findings"} across ${p.size} ${p.size===1?"report":"reports"}</span>`:g}</div></div>${e2(t)}</header>${n.length===0?d`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":l.shownTriage?`No ${l.shownTriage} findings in any package.`:"No untriaged findings in any package."}</p>`:c.length===0?d`<p style="color:var(--muted)">No packages match "${l.packagesSearchQuery}".</p>`:d`<div class="${f}"><ul class="packages-list">${X(ZB(c),QB,m=>s2(m,r,l.selectedPackageVersion))}</ul>${o?d`<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">${l2(o[0],i,s?s[0]:void 0)}</div></aside>`:g}</div>`}</div>`}function ZB(e){let t=[];for(let[n,r]of e){let o=r.versions;if(o.length<=1){let[c,u]=o[0];t.push({kind:"single",pkg:n,version:c,bucket:u,totalVersions:1});continue}let[s,i]=o[0],a=l.expandedPackages.has(n);if(t.push({kind:"latest",pkg:n,version:s,bucket:i,totalVersions:o.length,expanded:a}),a)for(let c=1;c<o.length;c++){let[u,p]=o[c];t.push({kind:"other",pkg:n,version:u,bucket:p,totalVersions:o.length})}}return t}function QB(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function e2(e){return d`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${t2}"></triage-selector></div>`}var t2=["inprogress","fixed","invalid","deleted","ignored"];function n2(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 r2(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=Re(s,l.triage.get(U(s)))??null;i==="invalid"?n.invalid++:i==="deleted"?n.deleted++:n.live++}return n}function o2(e,t,n){let r=qt().get(e),o=r2(r,n),s=l.packageSlideTriage??"live",i=r?tT(r,e,s,n):new Map,a=[...i.values()].reduce((f,m)=>f+m.length,0),c=s==="live"?a===1?"issue":"issues":a===1?`${s} issue`:`${s} issues`,u=s==="live"?"No live issues for this package.":`No ${s} issues for this package.`,p=typeof n=="string"?` @ ${n}`:"";return d`<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}${p}`}">${e}${p}</div><div class="bundles-slide-integrity">${a} ${c} · ${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?d`<div class="bundle-issues-empty">${u}</div>`:Xa(i,{kind:"package",bucketKey:e})}</div></div>`}function s2(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=ce(b,l.severityMode);a[y]!==void 0&&a[y]++}let c=Xe.filter(b=>a[b]>0),u=wn(o),f={selected:o===t&&i2(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 d`<li class="${G(f)}" data-select-package="${o}" data-select-package-version="${m}"><span class="packages-dot" style="${ae({background:u})}"></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:d`<span class="packages-version">@${s}</span>`} </span>${r==="latest"?a2(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>${c.length>0?d`<div class="packages-row-chips">${c.map(b=>d`<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 i2(e,t){return e.kind==="single"?!0:e.version===t}function a2(e,t,n){let r=t?"Hide":`+${n} ${n===1?"version":"versions"}`;return d`<button type="button" class="${G({"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 l2(e,t,n){let r=qt().get(e),s=[...(r?tT(r,e,"live",n):new Map).values()].reduce((i,a)=>i+a.length,0);return d`<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?d`<button type="button" class="bundles-tab bundles-tab-action" data-package-tab="issues">Issues (${s}) →</button>`:g}</div>${c2(e,t,n)}`}function tT(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 c=a.filter(f=>{let m=Re(f,l.triage.get(U(f)))??null;return n==="invalid"?m==="invalid":n==="deleted"?m==="deleted":m!=="invalid"&&m!=="deleted"});if(c.length===0)continue;let u=nT(t,i);o.has(u)||o.set(u,[]);let p=o.get(u);for(let f of c)p.push(f)}return o}function c2(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=ce(f,l.severityMode);r[m]!==void 0&&r[m]++}let o=Xe.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)),c=qt().get(e)?.repos,u=c&&c.size===1?[...c][0]:null,p=u?/^https?:/iu.test(u)?u:`https://github.com/${u}`:null;return d`<dl class="packages-detail-meta"><dt>Package</dt><dd class="mono">${e}</dd>${n?d`<dt>Version</dt><dd class="mono">${n}</dd>`:g} ${p?d`<dt>Repository</dt><dd class="mono"><a href="${p}" target="_blank" rel="noopener">${u}</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?d`<div class="packages-detail-chips">${o.map(f=>d`<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=be[Me(f)]??be.default;return d`<li><button type="button" class="packages-detail-report" data-package-report="${f}">${z(m)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${f}">${re(f)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${s.map(([f,m])=>{let h=nT(e,f);return d`<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 nT(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 rT(){ht().catch(()=>{});let e=Zr(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[p,f]of e){let m=[],h=new Map;for(let b of f.findings){let y=Re(b,l.triage.get(U(b)))??null;y==="inprogress"?t.inprogress++:y==="fixed"?t.fixed++:y==="invalid"?t.invalid++:y==="deleted"?t.deleted++:y==="ignored"&&t.ignored++,y===l.shownTriage&&(m.push(b),h.has(b.file)||h.set(b.file,[]),h.get(b.file).push(b))}m.length>0&&n.push([p,{findings:m,files:h,reports:f.reports}])}let r=l.selectedRepository,o=r?n.find(([p])=>p===r)??null:null;if(o&&l.repositoryDetailsTab==="issues")return m2(o[0],o[1]);let s=l.repositoriesSearchQuery.trim().toLowerCase(),i=s?n.filter(([p])=>p.toLowerCase().includes(s)||Ze(p).toLowerCase().includes(s)):n.slice();p2(i,l.repositoriesSortBy);let a=n.reduce((p,[,f])=>p+f.findings.length,0),c=new Set;for(let[,p]of n)for(let f of p.reports)c.add(f);let u=o?"packages-layout open":"packages-layout";return d`<div class="${G({"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?d`${n.length} ${n.length===1?"repository":"repositories"}`:d`${i.length} of ${n.length} ${n.length===1?"repository":"repositories"}`}</span> ${a>0?d`<span>${a} ${a===1?"finding":"findings"} across ${c.size} ${c.size===1?"report":"reports"}</span>`:g}</div></div>${d2(t)}</header>${n.length===0?d`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":l.shownTriage?`No ${l.shownTriage} findings in any repository.`:"No untriaged findings in any repository."}</p>`:i.length===0?d`<p style="color:var(--muted)">No repositories match "${l.repositoriesSearchQuery}".</p>`:d`<div class="${u}"><ul class="packages-list">${X(i,([p])=>p,([p,f])=>g2(p,f,p===r))}</ul>${o?d`<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">${h2(o[0],o[1])}</div></aside>`:g}</div>`}</div>`}function d2(e){return d`<div class="packages-toolbar"><entity-search kind="repositories"></entity-search><entity-sort kind="repositories"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${u2}"></triage-selector></div>`}var u2=["inprogress","fixed","invalid","deleted","ignored"];function p2(e,t){let n=t==="name-asc"?(r,o)=>Ze(r[0]).localeCompare(Ze(o[0])):t==="files-desc"?(r,o)=>o[1].files.size-r[1].files.size||Ze(r[0]).localeCompare(Ze(o[0])):t==="reports-desc"?(r,o)=>o[1].reports.size-r[1].reports.size||Ze(r[0]).localeCompare(Ze(o[0])):(r,o)=>o[1].findings.length-r[1].findings.length||Ze(r[0]).localeCompare(Ze(o[0]));e.sort(n)}function f2(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=Re(r,l.triage.get(U(r)))??null;o==="invalid"?t.invalid++:o==="deleted"?t.deleted++:t.live++}return t}function m2(e,t){let n=Zr().get(e),r=f2(n),o=l.repositorySlideTriage??"live",s=n?oT(n,o):new Map,i=[...s.values()].reduce((u,p)=>u+p.length,0),a=o==="live"?i===1?"issue":"issues":i===1?`${o} issue`:`${o} issues`,c=o==="live"?"No live issues for this repository.":`No ${o} issues for this repository.`;return d`<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="${Ze(e)}">${Ze(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?d`<div class="bundle-issues-empty">${c}</div>`:Xa(s,{kind:"repository",bucketKey:e})}</div></div>`}function g2(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 c=ce(a,l.severityMode);r[c]!==void 0&&r[c]++}let o=Xe.filter(a=>r[a]>0),s=wn(e),i=Ze(e);return d`<li class="${n?"selected":""}" data-select-repository="${e}"><span class="packages-dot" style="${ae({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?d`<div class="packages-row-chips">${o.map(a=>d`<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 h2(e,t){let n=Zr().get(e),o=[...(n?oT(n):new Map).values()].reduce((s,i)=>s+i.length,0);return d`<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?d`<button type="button" class="bundles-tab bundles-tab-action" data-repository-tab="issues">Issues (${o}) →</button>`:g}</div>${b2(e,t)}`}function oT(e,t="live"){let n=new Map;for(let[r,o]of e.files){let s=o.filter(i=>{let a=Re(i,l.triage.get(U(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 b2(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 c=ce(a,l.severityMode);n[c]!==void 0&&n[c]++}let r=Xe.filter(a=>n[a]>0),o=[...t.files.entries()].toSorted(([a,c],[u,p])=>p.length!==c.length?p.length-c.length:a.localeCompare(u)),s=[...t.reports].toSorted((a,c)=>a.localeCompare(c)),i=/^https?:/iu.test(e)?e:`https://github.com/${e}`;return d`<dl class="packages-detail-meta"><dt>Repository</dt><dd class="mono"><a href="${i}" target="_blank" rel="noopener">${Ze(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?d`<div class="packages-detail-chips">${r.map(a=>d`<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 c=be[Me(a)]??be.default;return d`<li><button type="button" class="packages-detail-report" data-package-report="${a}">${z(c)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${a}">${re(a)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${o.map(([a,c])=>d`<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">${c.length}</span></li>`)}</ul>`}function sT(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,st(m)]),m])).values()],c=a.filter(m=>n.has(m.id));if(c.length===0)continue;for(let m of c)r.add(m.id);let u=a.filter(m=>n.has(m.id)||m.isApp),p=JSON.stringify([a.map(m=>m.id).toSorted(),u.map(m=>[m.id,st(m),m.title??"",m.source??null,m.revalidate??""]).toSorted(([m,h],[b,y])=>m.localeCompare(b)||Number(h)-Number(y))]),f=o.get(p);f||(f={key:p,members:u,reports:[],first:Math.min(...c.map(m=>s.get(m.id)))},o.set(p,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:c[0].id,rowIndex:i.index})}return{rows:[...o.values()].toSorted((i,a)=>i.first-a.first),missing:e.filter(i=>!r.has(i))}}function To(e,t,n){return`${e} ${e===1?t:n}`}function y2(e,t){let n=Re(e,l.triage.get(e.id)),r=st(e)?t.filter(({name:a})=>Br(l.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`:ew[o];return d`<span class="${`links-finding-status triage-${o}`}" data-tooltip="${s?r.map(({name:a})=>re(a)).join(", "):g}">${i}</span>`}function ky(e,t=[],n=!0,r=g){let{id:o,title:s}=e,i=t[0]?.name,a=Vl(o),c=Ul(o)??a;return d`<li class="${n?"links-finding":"links-finding links-finding-context"}">${i?d`<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">${c}</button>`:Dr(o)?d`<a class="links-finding-id mono" href="${`#${zr({id:o})}`}" data-tooltip="${a}">${c}</a>`:d`<span class="links-finding-id mono">${c}</span>`} ${s?d`<span class="links-finding-title">${s}</span>`:g} ${y2(e,t)} ${n?g:d`<span class="links-member-context">not in this link</span>`} ${r}</li>`}function iT(e){let t=!!l.currentLinks?.managedId;return d`<div class="links-finding-reports">${e.map(({name:n,findingId:r,managedReportId:o,rowIndex:s})=>d`<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}">${z(Be[Me(n)]??Be.default)}<span class="links-finding-report-label report-button-label" data-tooltip-truncated data-tooltip="${re(n)}">${re(n)}</span></button>`)}</div>`}function w2(e,t){let n=e.reports.toSorted((r,o)=>re(r.name).localeCompare(re(o.name)));if(e.members.length===1){let r=e.members[0];return d`<li class="links-report-row links-report-row-single"><ul class="links-row-members">${ky(r,n,t.has(r.id),iT(n))}</ul></li>`}return d`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${To(e.members.length,"finding","findings")} in row</span> ${iT(n)}</div><ul class="links-row-members">${e.members.map(r=>ky(r,n,t.has(r.id)))}</ul></li>`}function v2(e,t){let{rows:n,missing:r}=sT(e,Lt(e)),o=new Set(e);return d`<li class="links-group"><div class="links-group-head"><span class="links-group-index">Link ${t+1}</span> <span class="links-group-count">${To(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${X(n,s=>s.key,s=>w2(s,o))}</ul>${r.length>0?d`<div class="links-unlocated"><div class="links-finding-missing">Not in your reports</div><ul class="links-row-members">${r.map(s=>ky({id:s,title:ic(s)}))}</ul></div>`:g}</li>`}function aT(e=g){let t=l.currentLinks;if(!t)return g;ht().catch(()=>{});let{name:n,groups:r,skipped:o}=t,s=new Set,i=new Set,a=0;for(let c of r)for(let u of c){if(s.has(u))continue;s.add(u);let p=Zn(u);if(p.length!==0){a++;for(let f of p)i.add(f)}}return d`<div class="links-view">${t.managedId?d`<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}">${z(be[Me(n)]??be.default)}${re(n)}</span> <span>${To(r.length,"link","links")}</span> <span>${To(s.size,"finding","findings")}</span> ${i.size>0?d`<span>found in ${To(i.size,"report","reports")}</span>`:g}</div></div></header>${a<s.size?d`<p class="links-note">${To(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?d`<p class="links-note">${To(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?d`<p class="links-empty">This file declares no links: every entry in it named fewer than two findings this app can reach.</p>`:d`<ol class="links-list">${X(r,(c,u)=>`${u}:${c.join(" ")}`,(c,u)=>v2(c,u))}</ol>`}</div>`}function xy(e,t,n){let r=new Set(t);for(let o of n)r.add(o);return e.filter(o=>r.has(o))}function lT(){if(l.currentWorkspace){let e=K().find(n=>n.id===l.currentWorkspace),t=l.reports.map(n=>n.fileName).filter(n=>typeof n=="string");return{mode:"workspace",workspaceId:l.currentWorkspace,fileNames:e?xy(e.reports??[],l.storedFiles??[],t):t}}if(l.currentFile){let e=K().find(t=>Array.isArray(t.reports)&&t.reports.includes(l.currentFile));return e?{mode:"single",workspaceId:e.id,fileNames:[l.currentFile]}:null}return null}var Sy=class extends N{static styles=[...N.styles,P(et)];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 ix(this.workspaceId,r.identifier);else{let s=await vn(r.identifier);o=await Xc(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:rr(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:rr(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}=Uc(this.items),o=n?d`Upload <strong>"${rr(this.items[0])}"</strong> to the workspace's remote inventory?`:d`Upload <strong>${t}</strong> local ${r} to the workspace's remote inventory?`,s=n?g:Vc(this.items),i=this._uploading?n?"Uploading\u2026":`Uploading ${t} ${r}\u2026`:n?"Upload":`Upload ${t}`;return d`<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>${jc(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:d`<button type="button" data-role="upload" @click="${this._onUpload}" ?disabled="${this._uploading||t===0}">${i}</button>`}</footer></dialog>`}};customElements.define("sync-upload-dialog",Sy);function cT({workspaceId:e,items:t}={}){return ee("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var dT=`.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 uT={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 k2(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 pT=e=>e===1?"copy":"copies",Cy=class extends N{static styles=[...N.styles,P(Ll),P(et),P(dT)];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 k2(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 lx(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 ax(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 Iu({workspaceId:this.workspaceId,items:t})};_statusHint(t){let n=uT[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 d`<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?d`<p class="lwd-body">Fetching remote listing…</p>`:g:d`<ul class="rec-list">${this._rows.map(t=>d`<li class="rec-row"><span class="rec-label">${t.label}${t.kind==="bundle"?d`<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)}">${uT[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 ${pT(t.updated)} updated from the cloud`),t.uploaded&&n.push(`${t.uploaded} cloud ${pT(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?d`<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?d`the <strong>${this.cloudCount}</strong> remote`:"remote",r=this._ran?g:d`<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?d`<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 d`<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?d`<p class="rec-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> ${i?d`<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?d`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running}">Download ${s} not stored locally</button>`:g} ${i?g:d`<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",Cy);function _y({workspaceId:e,cloudCount:t,localFileNames:n,localBundles:r,autoRun:o}={}){return ee("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 fT=`.ssd-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.lwd-list{margin:.5rem 0 0}
|
|
199
|
-
`;var S2=10,Ry=class extends N{static styles=[...N.styles,P(Ll),P(et),P(fT)];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,S2),n=this.names.length-t.length;return d`<ul class="lwd-list">${t.map(r=>d`<li><strong>${r}</strong></li>`)} ${n>0?d`<li>and ${n} more</li>`:g}</ul>`}render(){let t=this.names.length===1,n=t?d`Your copy of <strong>"${this.names[0]}"</strong> no longer matches its cloud copy, so other members may be seeing a different version.`:d`<strong>${this.names.length}</strong> reports no longer match their cloud copies, so other members may be seeing different versions.`;return d`<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",Ry);function mT({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 C2=1500;function gT({open:e,later:t=(r,o)=>setTimeout(r,o),modalOpen:n=()=>Gw()}){let r=new Set,o=!1;function s(i,a,{onSync:c,retry:u}={}){!i||!Array.isArray(a)||a.length===0||o||r.has(i)||(o=!0,t(async()=>{let p;if(n())p={shown:!1,sync:!1};else try{p=await e([...a])}catch{p={shown:!1,sync:!1}}if(o=!1,!p.shown){typeof u=="function"&&t(u,C2);return}r.add(i),p.sync&&typeof c=="function"&&c()},0))}return{suggestSync:s,isClosedFor:i=>r.has(i)}}function hT(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,c=a?e.find(u=>se(u)===a):null;return c||(r==="focus"?e[Math.min(n,e.length-1)]??null:null)}function bT(e,t){if(t.currentView!=="findings")return null;let n=Ge({view:"findings",teamId:t.currentManagedTeam,reportId:t.currentManagedReport},t.managedTeams);if(!n||!e)return n;let r={...n,finding:{id:U(He(e))}};return je(r)?r:n}var Gu=null;function xZ(e){let t=Gu=document.startViewTransition(e);return t.ready.catch(()=>{}),t.finished.finally(()=>{Gu===t&&(Gu=null)}).catch(()=>{}),t}function yT(e){let t=null;return n=>{t!==null&&t!==n&&Gu?.skipTransition(),t=n,e()}}function zt(){he.classList.add("active"),at.classList.add("hidden")}function Fy(){let e=Fp(l.reports);if(!e)return null;let t=Object.keys(e),r=lr().filter(p=>Ee(p).commonTriage===l.shownTriage),o=Ep(r,l.severityMode),s=jl(e,o),i=new Map,a=new Map,c=new Map;for(let p of r)for(let f of p){let m=ce(f,l.severityMode);i.has(f.file)||i.set(f.file,new Set),i.get(f.file).add(m);let h=ge(f)?.color??"none";a.has(f.file)||a.set(f.file,new Set),a.get(f.file).add(h),c.has(f.file)||c.set(f.file,[]),c.get(f.file).push({severity:m,color:h})}let u;return J.focusedPkg?(u=t.filter(p=>(Iv(p)??"__own__")===J.focusedPkg),J.showAll||(u=u.filter(p=>Lp(p,o,s)))):u=J.showAll?t:t.filter(p=>Lp(p,o,s)),{treeData:e,files:u,ownCounts:o,transitiveCounts:s,severitySets:i,colorSets:a,fileFindings:c,ownSourceFiles:Mv(u)}}function _2(){let e=Ts();if(!e)return;let t=Fy();if(!t)return;let n=l.currentView==="bundles";e.refreshSidebar(t,{isBundleContext:n,findingsJump:!(n&&C())})}function R2(){let e=Ts();if(!e)return;let t=Fy();t&&e.refreshTopPkgs(t)}function T2(e){return`${Lr[e]??e} findings`}function I2(e,t,n){return n?d`<repo-chip url="${n}"></repo-chip>`:C()?g:l.currentWorkspace?t?d`<repo-chip url="${t}"></repo-chip>`:g:e?d`<repo-chip url="${l.repoUrl}" editable ?editing="${l.repoEditing}" ?empty="${!l.repoUrl}"></repo-chip>`:t?d`<repo-chip url="${t}"></repo-chip>`:g}function xT(e,t,n,r,o){let s=e.length,i=new Set(l.reports.map(A=>A.source)),a=i.size===1?[...i][0]:null,c=l.currentWorkspace?K().find(A=>A.id===l.currentWorkspace):null,u=l.currentWorkspace&&l.currentManagedTeam?l.managedTeams.find(A=>A.id===l.currentManagedTeam):null,p=Mu(l,c?[c]:[],Ie),f=u?`Team: ${u.name}`:c?`Workspace: ${c.name}`:a?T2(a):"Findings",m=a&&be[a]?a:"default",h=z(be[m]),b=d`<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(p)y=Wa(p,"reports",l.currentView);else if(t.length===1){let A=re(t[0]);y=d`<button type="button" class="file-chip" data-copy-report="${A}">${h}<span>${A}</span></button>`}else t.length>1&&(y=d`<button type="button" class="file-chip" data-copy-report="${t.map(re).join(`
|
|
200
|
-
`)}">${b}<span>${t.length} reports</span></button>`);let w=l.reports.flatMap(A=>A.groups.flat()),k=`${s} ${`finding${s===1?"":"s"}`}`,x=l.currentWorkspace?[]:Px(w,a?cd.filter(A=>A!=="type"):cd),$=g;if(s>0){let A={};for(let V of e){let te=ce(_n(V),l.severityMode);te&&(A[te]=(A[te]||0)+1)}let L=Xe.filter(V=>A[V]>0);L.length>0&&($=d`<span class="status-bar" aria-hidden="true">${L.map(V=>{let te=`${A[V]} ${V.replaceAll("_"," ")}`;return d`<span class="${`status-seg sev-${V}`}" style="${ae({flexGrow:A[V]})}" data-tooltip="${te}"></span>`})}</span>`)}let S=new Set(l.reports.map(A=>A.repo??null)),_=S.size===1?[...S][0]:null,R=I2(n,r,_),F=d`<span class="sep" aria-hidden="true"></span>`,I=Kb(o,l.currentView);return d`<header class="page-head"><div class="page-title"><h1>${p?Gb(p,l.currentView):f}${y}${Wa(p,"bundles",l.currentView)}${R}${I}${ST()}</h1><div class="meta-row"><span>${k}</span> ${$} ${x.length>0?d`${F}${x.map(A=>d`<span class="tag">${A}</span>`)}`:g}</div></div></header>`}var{suggestSync:M2}=gT({open:e=>mT({names:e})}),A2=new Set(["findings","files","links"]);function ST(){if(j.status!=="online")return g;if(!A2.has(l.currentView))return g;let e=lT();if(!e)return g;let{workspaceId:t,fileNames:n,mode:r}=e,o=nx(t);if(o.length>0&&M2(t,o,{onSync:()=>Ty(t,r,n),retry:E}),r==="single"){let k=n[0];if(o.includes(k))return wT({status:"differ",label:"differs",title:`Your copy of "${k}" doesn't match its cloud copy. Click to re-check and bring them in line.`,onClick:()=>Ty(t,r,n)});let x=Km(t,k)?"cloud":"local";return wT({status:x,label:x,title:x==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:x==="local"?()=>vT({workspaceId:t,items:[{kind:"report",identifier:k}]}):null})}let s=K().find(k=>k.id===t),i=s&&Array.isArray(s.bundles)?s.bundles:[],a=Ym(t),c=n.filter(k=>!Km(t,k)),u=i.filter(k=>!ex(t,k)),p=[...c.map(k=>({kind:"report",identifier:k})),...u.map(k=>({kind:"bundle",identifier:k}))];if(a===0&&p.length===0)return g;let f=[a>0?`${a} in cloud`:null,p.length>0?`${p.length} local-only`:null,o.length>0?`${o.length} differ from the cloud`:null,a>0?'click "cloud" to re-check storage':null,p.length>0?`click "local" to upload ${p.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:d`<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="${k=>{k.stopPropagation(),Ty(t,r,n)}}">${_T()}<span>${o.length} differ</span></button>`,b=a===0?g:d`<button type="button" class="sync-badge-chunk cloud" aria-label="${`re-check ${a} cloud object${a===1?"":"s"}`}" @click="${k=>{k.stopPropagation(),_y({workspaceId:t,cloudCount:a,localFileNames:n,localBundles:i})}}">${RT()}<span>${a} cloud</span></button>`,y=p.length===0?g:d`<button type="button" class="sync-badge-chunk local" aria-label="${`${p.length} items not yet uploaded \u2014 open upload dialog`}" @click="${k=>{k.stopPropagation(),vT({workspaceId:t,items:p})}}">${CT()}<span>${p.length} local</span></button>`,w=d`<span class="sync-badge-divider" aria-hidden="true"></span>`,v=[b,h,y].filter(k=>k!==g);return d`<div class="report-sync-badge report-sync-badge-clickable" data-status="mixed" data-tooltip="${f}">${v.map((k,x)=>x===0?k:d`${w}${k}`)}</div>`}function Ty(e,t,n){let r=K().find(i=>i.id===e),o=t==="single"?xy(r?.reports??[],l.storedFiles??[],n):n,s=r&&Array.isArray(r.bundles)?r.bundles:[];return _y({workspaceId:e,cloudCount:Ym(e),localFileNames:o,localBundles:s,autoRun:!0})}function wT({status:e,label:t,title:n,onClick:r}){let o=e==="cloud"?RT():e==="differ"?_T():CT(),s=d`<span class="sync-badge-label">${t}</span>`;return typeof r!="function"?d`<span class="report-sync-badge" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}">${o}${s}</span>`:d`<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 CT(){return d`<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 _T(){return d`<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 RT(){return d`<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 vT({workspaceId:e,items:t}){let n=t.filter(r=>r.kind==="bundle");if(n.length>0){let r=await Ke(),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 cT({workspaceId:e,items:t})}function E2(e){return Object.values(e).some(n=>n>0)||l.filterSeverities.size>0?d`<severity-chips .counts="${e}"></severity-chips>`:g}function F2(e){return Object.values(e).some(n=>n>0)||l.filterColors.size>0?d`<triage-filter .counts="${e}"></triage-filter>`:g}function L2(e,t,n,r,o,s,i,a){let{showSource:c,showConfidence:u,showPriority:p,showGraphMode:f,showFileSort:m,kanbanMode:h,showRepo:b,hasComment:y,hasFix:w,hasFlagged:v,hasDuplicates:k,hasCrossContext:x,hasAppStacked:$,showSecurity:S,showSeverityMode:_,revalidateOptions:R,showPartial:F,canDropLayer:I,canDetailLayer:A,canUpstreamLens:L,confirmedLocked:V}=s;return d`<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="${u}" ?show-priority="${p}"></findings-sort>${c?d`<source-filter></source-filter>`:g} ${!V&&(u||R.length>0)?d`<conf-filter ?range-disabled="${!u}" .revalidateOptions="${R}" ?has-partial="${F}"></conf-filter>`:g} ${y||w||v||l.filterComment||l.filterFix||l.filterFlagged?d`<annotation-filter .hasComment="${y}" .hasFix="${w}" .hasFlagged="${v}"></annotation-filter>`:g} ${h?g:d`<triage-selector .counts="${n}"></triage-selector>`}<div class="toolbar-end"><download-button></download-button>${!l.currentWorkspace&&(k||l.filterDuplicates)||x||$||S||l.filterCrossContext||l.filterAppStacked?d`<annotation-filter group="context" .hasDuplicates="${k}" .hasCrossContext="${x}" .hasAppStacked="${$}" .hasSecurityContrast="${S}"></annotation-filter>`:g} ${I||l.revalidateConflicts.size>0?d`<revalidation-switch ?can-drop="${I}" ?can-detail="${A}" ?can-upstream="${L&&I}" .upstreamDisabled="${l.showRevalidation===!1&&I}"></revalidation-switch>`:g}</div></div><div class="toolbar-row sev-row">${_?d`<severity-mode-switch></severity-mode-switch>`:g} ${E2(r)} ${i.analyzers.length>1||i.models.length>1?d`<analyzer-select .analyzers="${i.analyzers}" .models="${i.models}" .groups="${i.groups}"></analyzer-select>`:g} ${b&&a.length>1?d`<repo-filter .options="${a}"></repo-filter>`:g} ${F2(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function Iy(e,t){return e.map(n=>({p:_n(n),g:n})).toSorted((n,r)=>t(n.p,r.p)).map(n=>n.g)}var $T=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),qu=null,TT=0,Ys=null;function Ja(e,t=!1,n=null,r=!1,o=!1){return d`<finding-card data-gid="${se(e)}" .group="${e}" ?in-group="${t}" context="${n??g}" ?lazy="${r}" ?popup="${o}"></finding-card>`}var IT=d`<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>`,MT=d`<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>`,N2={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};function Ey(e,t={}){let{variant:n="kanban",active:r=!1,expandedTrackLast:o=!1}=t,s=Ee(e),i=He(e),a=Rt(i)||"(untitled finding)",c=n==="kanban",u=n==="kanban-side",p=c&&l.currentWorkspace?Pc(i):null,f={"kanban-card":!0,"has-conflict":s.hasConflict,"focus-side-card":!c,"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=ce(i,l.severityMode),y=N2[b]??"?",w=Lo(i)&&l.severityMode!=="original",v=ge(i),k=v?.flagged===!0,x=v?.fix||Xt(i),$=v?.comment??"",S=g;c&&x?S=No(x)?d`<managed-fix-link class="kanban-action kanban-fix-link" compact="compact" .url="${x}">${Rs}</managed-fix-link>`:vt(i)?d`<button type="button" class="kanban-action mark-fix" data-tooltip="${`Edit fix link: ${x}`}" aria-label="${`Edit fix link: ${x}`}">${Rs}</button>`:d`<span class="kanban-action kanban-fix-note" role="img" data-tooltip="${`Fix: ${x}`}" aria-label="${`Fix: ${x}`}">${Rs}</span>`:c&&($||C()&&sr(i))&&(S=d`<comment-preview class="kanban-action" .finding="${i}" .comment="${$}">${Rd}</comment-preview>`);let _=d`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${b}`}" data-tooltip="${w?`${tt(b)} \u2014 corrected from ${tt(i.severity)}`:g}" aria-label="${w?`Severity ${tt(b)}, corrected from ${tt(i.severity)}`:`Severity ${tt(b)}`}">${y}${w?"*":""}</span> ${k?d`<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:d`<span class="kanban-conf" data-tooltip="${`Confidence ${i.confidence}/10`}">${i.confidence}</span>`} ${p?d`<span class="kanban-analyzer" role="img" data-tooltip="${fs[p]}" aria-label="${fs[p]}">${z(Be[p])}</span>`:g}</div>`;return c?d`<div class="${G(f)}" data-gid="${se(e)}" data-kanban-source draggable="${aa(e,s).length>0?"true":"false"}" role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Open details for ${a}`}">${_}</div>`:u?d`<div class="${G(f)}" data-gid="${se(e)}" data-kanban-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Show details for ${a}`}">${_}</div>`:d`<div class="${G(f)}" data-gid="${se(e)}" data-focus-select role="button" tabindex="0" aria-current="${r?"true":"false"}" aria-label="${`Focus on ${a}`}">${_}</div>`}var My={content:"",parts:""};function O2(e){return My.content!==e&&(My={content:e,parts:Fd(e)}),My.parts}function B2(e){let{content:t,range:n,highlighted:r}=e,o=t.split(`
|
|
201
|
-
`).length,s=String(o).length;return d`<div class="focus-code-lines" style="${ae({"--lineno-width":`${s}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:o},(i,a)=>{let c=a+1,p={"focus-code-lineno":!0,"focus-code-line-active":!!n&&c>=n.start&&c<=n.end};return d`<div class="${G(p)}" data-focus-code-line="${c}">${c}</div>`})}</aside><pre class="focus-code-source" tabindex="-1" aria-label="${e.file}"><code>${typeof r=="string"?z(r):O2(t)}</code></pre></div>`}function AT(e){return!e||!Ji(He(e))?g:d`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${se(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 ET(e,t=g,n=!1){l.focusCodeTick;let r=l0(e),o=$d(e),s=r?"focus-main with-code":"focus-main",i=ae({"--focus-split":String(l.focusSplit)});return d`<div class="${s}" style="${i}" data-gid="${se(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?g:AT(e)} ${Ja(e,!1,"focus",!1,n)}</div></div>${t} ${r?d`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${Ql}" aria-valuemax="${ec}" aria-valuenow="${Math.round(l.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?d`<div class="focus-code-empty">Loading source…</div>`:d`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?d`<span class="focus-code-line">:${vv(r.range)}</span>`:g} ${(o?.stack.length??0)>1?d`<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">${Ss}</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">${Cs}</button></div>`:g}</header><div class="focus-code-body">${B2(r)}</div>`}</div>`:g}</div>`}function FT(e,t,n=[],r=null){if(!e&&!r)return g;let o=e?Ee(e):{},s=l.kanbanDetailFullscreen,i={"kanban-detail-modal":!0,fullscreen:s,"has-conflict":o.hasConflict},a=e?se(e):null,c=t?.items??[],u=c.findIndex(f=>se(f)===a),p=d`<div class="kanban-detail-actions">${AT(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?MT:IT}</button> <button type="button" class="kanban-detail-close detail-action" aria-label="Close details">×</button></div>`;return d`<div class="${G({"kanban-detail-backdrop":!0,"links-preview-backdrop":!!r})}"><div class="kanban-detail-dim"></div><div class="${G(i)}" role="dialog" aria-modal="true" aria-label="${r?"Finding preview":"Finding details"}">${s&&e?g:p}<div class="kanban-detail-body">${e?s?ET(e,p,!0):Ja(e,!1,"kanban-detail",!1,!0):d`<div class="links-preview-message" role="status">${r.error||"Loading finding\u2026"}</div>`}</div></div>${c.length===0?g:d`<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 d`<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="${u===0}" aria-label="Previous finding">${Ss}</button> <span class="count">${u<0?c.length:`${u+1} / ${c.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${u===c.length-1}" aria-label="Next finding">${Cs}</button></div></div><div class="kanban-detail-side-body">${X(c,f=>se(f),f=>Ey(f,{variant:"kanban-side",active:se(f)===a}))}</div></aside>`}</div>`}function P2(e,t){if(l.viewMode==="table"){let r=l.sortBy==="file"?Iy(e,$T):e;return r.length===0?g:(qu=r,d`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?d`<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">${Ja(t)}</div></aside>`:g}</div>`)}if(l.viewMode==="focus"){if(e.length===0)return g;let r=e.indexOf(t);TT=r;let o=t,s=r===0,i=r===e.length-1;return d`<div class="focus-view">${ET(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">${Ss}</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">${Cs}</button></div></div><div class="focus-sidebar-body">${X(e,a=>se(a),a=>Ey(a,{variant:"focus",active:se(a)===se(o)}))}</div></aside></div>`}if(l.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(p=>[p.key,[]]));for(let p of e){let m=Ee(p).commonTriage??"untriaged",h=o.get(m);h&&h.push(p)}let s=r.some(p=>p.key===l.kanbanExpandedColumn)?l.kanbanExpandedColumn:null,i=s?r.filter(p=>p.key===s):r,a={"--kanban-cols":String(r.length)},c=t,u=c?r.find(p=>p.key===(Ee(c).commonTriage??"untriaged")):null;return d`<div class="kanban-board" style="${ae(a)}">${X(i,p=>p.key,p=>{let f=o.get(p.key),m=p.key===s;return d`<div class="${`kanban-column kanban-column-${p.key}${m?" expanded":""}`}" data-kanban-target="${p.key}"><div class="kanban-column-header"><span class="label">${p.label}</span> <span class="count">${f.length}</span> <button type="button" class="kanban-expand" data-kanban-expand="${p.key}" aria-pressed="${m}" aria-label="${m?"Show all columns":`Show only ${p.label}`}">${m?MT:IT}</button></div><div class="kanban-column-body">${f.length===0?d`<div class="kanban-empty">No ${p.label.toLowerCase()} findings.</div>`:X(f,h=>se(h),(h,b)=>Ey(h,{active:se(h)===l.kanbanPopoverGid,expandedTrackLast:(b+1)%r.length===0}))}</div></div>`})}</div>${FT(c,u&&{key:u.key,label:u.label,items:o.get(u.key)},r.map(p=>{let f=o.get(p.key);return{key:p.key,label:p.label,count:f.length,firstGid:f.length>0?se(f[0]):""}}))}`}if(l.viewMode==="grouped"){let r=new Map;for(let s of e){let i=_n(s).file;r.has(i)||r.set(i,[]),r.get(i).push(s)}let o=l.sortBy==="file"?[...r.keys()].toSorted():[...r.keys()];return d`${X(o,s=>s,s=>{let i=l.sortBy==="file"?Iy(r.get(s),(c,u)=>parseInt(c.line,10)-parseInt(u.line,10)):r.get(s),a=_n(i[0]);return d`<div class="file-group"><div class="file-header"><span>${Mp(a,Rn(a))}</span> <span class="count">${i.length}</span></div><div class="file-body">${X(i,c=>se(c),c=>Ja(c,!1,null,!0))}</div></div>`})}`}let n=l.sortBy==="file"?Iy(e,$T):e;return d`${X(n,r=>se(r),r=>{let o=He(r),s=Cv(o,Rn(o)),i=Gr(o),a=si(o),c=r.length>1;return d`<div class="${G({"flat-group":!0,"multi-case":c})}"><div class="flat-group-loc"><span class="file">${Mp(o,Rn(o))}</span> ${s===g?g:d`<span class="line-num">${s}</span>`} ${a?d`<span class="meta">${a}</span>`:g} ${i?d`<span class="run-meta">${i}</span>`:g}</div>${Ja(r,!0,null,!0)}</div>`})}`}function D2(){l.bundleSourceFile&&xg().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&Y(UR(),e)}var z2=yT(H2);function E(){z2(l.currentView)}function un(e){let t=document.querySelector(`#${e}`);return(!t||!he.contains(t)||he.firstElementChild!==t)&&(he.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function Lu(){let e=Mu(l,K(),Ie);document.title=e?`${e.title} \u2014 findings`:"DeepView";let t=un("empty-workspace-slot");t&&Y(d`${xT([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),zt()}var W2={"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"}},kT=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),Ku=null;function Va(){let e=l.revalidateConflicts.size>0,t=!e&&Pl(l.reports);return e?l.showRevalidation!==!1&&(Ku=l.showRevalidation,l.showRevalidation=!1):(Ku!==null&&(l.showRevalidation=Ku,Ku=null),!t&&l.showRevalidation===!1&&(l.showRevalidation=!0)),l.upstreamOnly&&(!t||l.showRevalidation===!1||!l.reports.some(n=>(n.groups??[]).some(r=>r.some(o=>o.isUpstream))))&&(l.upstreamOnly=!1),bi(l.showRevalidation,l.upstreamOnly),t}var Ay=null;function H2(){bs()||Cx(),D2(),Dl(l.reports),$c()&&queueMicrotask(()=>{$e()}),zl(l.reports)&&ar();let e=Va(),t=l.reports.some(T=>(T.groups??[]).some(M=>M.some(D=>D.isUpstream)));if(l.currentView==="workspace-reports"||l.currentView==="workspace-bundles"){let T=l.currentView.slice(10),M=Mu(l,K(),Ie),D=un("workspace-content-slot");D&&Y(H_(M,T,l.workspaceContentFileCount),D),document.title=M?`${M.title} \u2014 ${T}`:`DeepView \u2014 ${T}`;return}if(l.currentView==="bundles")if((l.bundles??[]).length===0)l.currentView="findings";else{Vn(l.bundleDetailsTab,l.bundleSourceFile)&&xg().catch(()=>{});let T=un("bundles-slot");T&&Y(JR(l.bundles),T);let M=l.bundleDetails,D=l.selectedBundle&&M&&(M.json||M.bundle);if(D&&l.bundleDetailsTab==="graph"){let Ce=document.querySelector("#bundle-graph-slot");if(Ce){let ft=BR(l.bundleDetails);if(ft){zR(ft);let Ky={hideAllFiles:!0,triageCounts:OR(l.bundleDetails,new Set(ft.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted","ignored"],showPackagesView:ft.canPackagesView,showBundleLayouts:!0,hasIssues:ft.hasIssues},ri=Ay,qy=Ce.querySelector("graph-layout");!ft.issuesShown&&ri&&!ri.issuesShown&&qy&&ri.state===J.graphState&&ri.details===M&&ri.reason===J.bundleReason?qy.options=Ky:(Ay=null,Fg(Ce,ft,Ky,PR,DR).then(UT=>(UT&&J.graphState&&(Ay={state:J.graphState,details:M,reason:J.bundleReason,issuesShown:ft.issuesShown}),null)))}}}if(D&&!M.metadataOnly&&l.bundleDetailsTab==="terminal"){let Ce=document.querySelector("#bundle-terminal-slot");Ce&&_0(Ce,l.bundleDetails)}zt();let ue=l.bundles.find(Ce=>Ce.integrity===l.selectedBundle)?.npm;document.title=ue?`DeepView \u2014 ${ue.name}@${ue.version}`:"DeepView \u2014 bundles";return}if(l.currentView==="reviews"){let T=un("dependency-reviews-slot");T&&Y(d`<dependency-review-list .session="${l.managedSession}"></dependency-review-list>`,T),zt(),document.title="DeepView \u2014 my reviews";return}if(l.currentView==="npm"){let T=l.npmOpening,M=un(T?"bundles-slot":"npm-slot");M&&Y(T?YR(T):p1(),M),zt(),document.title=T?`DeepView \u2014 ${Ca(T.name,T.spec)}`:"DeepView \u2014 npm packages";return}if(l.currentView==="packages"){let T=un("packages-slot");T&&Y(eT(),T),zt(),document.title="DeepView \u2014 packages";return}if(l.currentView==="repositories"){let T=un("repositories-slot");T&&Y(rT(),T),zt(),document.title="DeepView \u2014 repositories";return}if(l.currentView==="links"){if(l.currentLinks){let T=un("links-slot"),M=bs();T&&Y(d`${aT(ST())}${M?FT(M.group,null,[],M):g}`,T),zt(),document.title=`DeepView \u2014 ${l.currentLinks.name}`;return}l.currentView="findings"}if(l.currentView==="scan"&&customElements.get("local-scan-page")){let T=un("scan-slot");if(T&&!T.firstElementChild){let M=document.createElement("local-scan-page");M.selection=l.scanSelection,T.append(M),M.updateComplete.then(()=>mi(M.renderRoot,{gate:D=>!Object.hasOwn(D.dataset,"tooltipTruncated")||D.scrollWidth>D.clientWidth}))}zt(),document.title="DeepView \u2014 scans";return}let n=W2[l.currentView];if(n){let T=un(n.slot);T?.classList.add("managed-page-slot");let M=T?.firstElementChild?.session;if((M?.id!==l.managedSession?.id||M?.role!==l.managedSession?.role)&&T?.replaceChildren(),T&&!T.firstElementChild){let D=document.createElement(n.tag),ue=Ce=>mi(Ce,{gate:ft=>!Object.hasOwn(ft.dataset,"tooltipTruncated")||ft.scrollWidth>ft.clientWidth});D.localImportSource=nm(),l.currentView==="manage-import"&&(D.localDeps=tm(),D.promptPassword=zc,D.resolveConflicts=Gc,D.confirmTriageImport=zk,D.confirmContentImport=Hk,D.showTriageComparison=Gk),D.session=l.managedSession,D.allowShare=l.managed?.allowShare===!0,l.currentView==="manage-scans"&&(D.selection=l.scanSelection),l.currentView==="manage-bundles"&&(D.createRepoId=l.bundleCreationRepoId,D.installTooltips=ue),T.append(D),(async()=>{await customElements.whenDefined(n.tag),await D.updateComplete,ue(D.renderRoot)})().catch(()=>{})}T?.firstElementChild&&(T.firstElementChild.session=l.managedSession,T.firstElementChild.allowShare=l.managed?.allowShare===!0),l.currentView==="manage-scans"&&T?.firstElementChild&&(T.firstElementChild.selection=l.scanSelection),l.currentView==="manage-bundles"&&T?.firstElementChild&&(T.firstElementChild.createRepoId=l.bundleCreationRepoId),zt(),document.title=n.title;return}if(l.reports.length===0){l.currentWorkspace&&document.querySelector("#empty-workspace-slot")&&Lu();return}let r=lr(),o=l.viewMode==="kanban",s={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},i=[];for(let T of r){let M=Ee(T).commonTriage;M&&s[M]++,(o||M===l.shownTriage)&&i.push(T)}Object.defineProperty(i,"ruledOutIds",{value:r.ruledOutIds});let a=!1,c=!1,u=!1,p=!1;for(let T of r)for(let M of T){Lo(M)&&(p=!0);let D=ge(M);Xt(M)&&(c=!0),D&&(D.comment&&(a=!0),D.fix&&(c=!0),D.flagged===!0&&(u=!0))}let f=Qc(),m=r.some(T=>T.some(M=>f.has(M.id)));m||(l.filterDuplicates="");let h=i.some(rg),b=i.some(og);h||(l.filterCrossContext=""),b||(l.filterAppStacked="");let y=bx(i);y||(l.filterSecurity="");let w=new Set,v=!1,k=!1,x=!1;for(let T of i)for(let M of T){let D=Vr(M);D&&w.add(D)}for(let T of cg()){let M=!1,D=!1;for(let ue of T){let Ce=_e(ue);Ce==="partial"&&(k=!0),!((Ce==="unreachable"||Ce==="refuted")&&(x=!0,l.currentWorkspace))&&(Ce==="revalidation"?M=!0:D=!0)}M&&D&&(v=!0)}let S=[...new Set(l.reports.map(T=>T.type))].join(", "),_=l.reports.map(T=>T.fileName),R=i.map(wt).filter(T=>T.length>0),F=R.length>0&&Tp(R),I=ng(r),A=r.some(T=>T.some(M=>Gn(M.file))),L=r.some(T=>T.some(M=>!Gn(M.file))),V=!1,te=!1,ne;e:for(let T of r)for(let M of T)if(!te)te=!0,ne=M.file;else if(M.file!==ne){V=!0;break e}let xe=r.some(T=>T.some(M=>!M.repo?.github&&!Gn(M.file))),Ht=new Set;for(let T of r)for(let M of T)!Gn(M.file)&&M.repo?.github&&Ht.add(M.repo.github);let Io=Ht.size===1?[...Ht][0]:null,Mr=new Set,pn=new Set;for(let T of r)for(let M of T)Mr.add(M._analyzer??null),pn.add(ra(M));let Ar=Object.keys(ug),el=T=>{if(T==null)return 1/0;let M=Ar.indexOf(T);return M===-1?Ar.length:M},Ju=[...Mr].toSorted((T,M)=>{let D=el(T),ue=el(M);return D!==ue?D-ue:String(T??"").localeCompare(String(M??""))}),Zu=[...pn].toSorted(kT);if(l.filterAnalyzer){let T=l.filterAnalyzer===gs?null:l.filterAnalyzer;(!Mr.has(T)||Mr.size<2)&&(l.filterAnalyzer="")}if(l.filterModel){let T=l.filterModel===hs?null:l.filterModel;(!pn.has(T)||pn.size<2)&&(l.filterModel="")}let On=gv(w);l.filterRevalidate&&!On.some(T=>T.value===l.filterRevalidate)&&(l.filterRevalidate="");let H=td(i);H&&(l.filterRevalidate="confirmed");let de=w.has("partial")&&io();de||(l.filterPartial="");let pt=e&&(v||k||!l.currentWorkspace&&x),By=!(e&&l.showRevalidation!==!1)&&!l.upstreamOnly&&A&&L;!By&&l.filterSources.size>0&&l.filterSources.clear(),F||(l.filterConfMin=0,l.filterConfMax=10,(l.sortBy==="confidence-desc"||l.sortBy==="confidence-asc")&&(l.sortBy="severity")),!I&&(l.sortBy==="priority-desc"||l.sortBy==="priority-asc")&&(l.sortBy="severity"),!V&&l.sortBy==="file"&&(l.sortBy="severity");let Qu=yx(i),Zs={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Qs={red:0,blue:0,green:0,gray:0,none:0};for(let T of Qu){if(T.length===1){let ue=ce(T[0],l.severityMode);Zs[ue]=(Zs[ue]||0)+1;let Ce=ge(T[0])?.color??"none";Qs[Ce]=(Qs[Ce]||0)+1;continue}let M=new Set(T.map(ue=>ce(ue,l.severityMode)));for(let ue of M)Zs[ue]=(Zs[ue]||0)+1;let D=new Set(T.map(ue=>ge(ue)?.color??"none"));for(let ue of D)Qs[ue]=(Qs[ue]||0)+1}let Py=ux(Qu),PT=[...Py].toSorted(kT);if(l.filterRepo){let T=l.filterRepo===Zm?null:l.filterRepo;Py.has(T)||(l.filterRepo="")}let ei=vx(nd(i)),tl=Fp(l.reports),Dy=tl?Object.keys(tl).length:0,ep=Dy>1;!ep&&l.currentView==="files"&&(l.currentView="findings"),!ep&&l.viewMode==="graph"&&(l.viewMode="kanban");let zy=xT(r,_,xe,Io,Dy);if(l.currentView==="files"){let T=Ep(r,l.severityMode),M=document.querySelector("#header-slot"),D=document.querySelector("#tree-view-slot");(!M||!D||!he.contains(M)||!he.contains(D))&&(he.innerHTML='<div id="header-slot"></div><div id="tree-view-slot"></div>',M=document.querySelector("#header-slot"),D=document.querySelector("#tree-view-slot")),M&&Y(zy,M),D&&Y(k0(tl,T),D),zt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let DT=l.viewMode==="table"&&l.tableSelectedGid&&ei.some(T=>se(T)===l.tableSelectedGid),ti=null;l.viewMode==="graph"&&tl&&(ti=Fy(),ti||(l.viewMode="kanban"));let nl=!!ti,Er="findings-content";DT&&(Er+=" with-details"),nl&&(Er+=" with-graph"),o&&(Er+=" with-kanban"),l.viewMode==="focus"&&(Er+=" with-focus");let Wy=g,rl=g,Hy=g,Uy=hT(ei,l,TT);qu=null,nl||(Wy=L2(ei.length,i.length,s,Zs,Qs,{showSource:By,showConfidence:F,showPriority:I,showGraphMode:ep,showFileSort:V,kanbanMode:o,showRepo:!!l.currentWorkspace,hasComment:a,revalidateOptions:On,showPartial:de,canDropLayer:e,canDetailLayer:pt,canUpstreamLens:t,confirmedLocked:H,hasFix:c,hasFlagged:u,hasDuplicates:m,hasCrossContext:h,hasAppStacked:b,showSecurity:y,showSeverityMode:p||l.severityMode==="original"},{analyzers:Ju,models:Zu,groups:Qu},PT),l.shownTriage&&i.length===0?rl=d`<p style="color:var(--muted); margin: 1rem 0;">No ${l.shownTriage} findings.</p>`:ei.length===0&&i.length>0&&!o?rl=d`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:i.length===0&&(rl=r.length>0?d`<p style="color:var(--green)">All ${S} issues triaged.</p>`:d`<p style="color:var(--green)">No ${S} issues found.</p>`),Hy=P2(ei,Uy));let ni=document.querySelector("#header-slot"),Ut=he.querySelector(":scope > .findings-content"),zT=Ut&&Ut.querySelector(":scope > #findings-graph-slot"),WT=Ut&&Ut.querySelector(":scope > #findings-body-slot"),HT=Ut&&(zT?"graph":WT?"body":null)===(nl?"graph":"body");if(!ni||!Ut||!he.contains(ni)||!he.contains(Ut)||!HT){let T=nl?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';he.innerHTML=`<div id="header-slot"></div><div class="${Er}">${T}</div>`,ni=document.querySelector("#header-slot"),Ut=he.querySelector(":scope > .findings-content")}else Ut.className!==Er&&(Ut.className=Er);ni&&Y(zy,ni);let Vy=document.querySelector("#toolbar-slot");Vy&&Y(Wy,Vy);let jy=document.querySelector("#empty-state-slot");jy&&Y(rl,jy);let Gy=document.querySelector("#findings-body-slot");if(Gy&&Y(Hy,Gy),ti){let T=document.querySelector("#findings-graph-slot");if(T){let D={extraTopRow:d`<view-mode-buttons modes="kanban,focus,table,list,grouped,graph"></view-mode-buttons>`,triageCounts:s,triageStates:["inprogress","fixed","invalid","deleted","ignored"]};Fg(T,ti,D,_2,R2)}}if(qu){let T=he.querySelector(".finding-table-slot");T&&(Ys||(Ys=document.createElement("finding-table")),Ys.items=qu,Ys.selectedGid=l.tableSelectedGid,Ys.parentNode!==T&&T.append(Ys))}zt(),document.title=`DeepView \u2014 ${S||"no analyzer"}`,C()&&Z?.replaceFindingRoute(bT(Uy,l))}var q2=500,Y2=14;function Yu(e){if(!e)return null;let t={};e.color&&(t.color=e.color);let n=Ve(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 Za(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function X2(e,t){return e.length>100?!1:t==null?!0:(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}var J2=e=>new TextEncoder().encode(e).length,Wt=new Map,Js=new Set,Qa=(e,t=l.currentManagedTeam)=>JSON.stringify([t,e]),Ir=new Map,Nn=null,Xs=Promise.resolve();function NT(){let e=new Set;for(let t of l.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 Ly(){return Array.isArray(l.managedReports)&&l.managedReports.length>0?l.managedReports:l.managedReport==null?[]:[l.managedReport]}function OT(e){let t=new Set,n=!1;for(let r of l.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||l.reports.length===0?t:new Set(NT())}function Z2(e){let t=Ly();for(let n of l.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 Ny(){let e=l.managedSession;return l.serverMode==="managed"&&l.localMode!==!0&&e!=null&&Un(e.role,"triage")}function Q2(e){return e===403&&l.managedSession?.viewer?!0:e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function eP(e,t){let n=Ir.get(e.key);n==null&&(n={report:e.report,key:e.key,teamId:e.teamId,changes:new Map},Ir.set(e.key,n));for(let r of t)n.changes.has(r)||n.changes.set(r,e.changes.get(r))}async function tP(e,t,n){if(!Ny())return;let r=[...e.changes.keys()],o=0;for(;o<r.length;){let s=o,i={},a=0,c=Y2;for(;o<r.length&&a<200;){let f=r[o],m=J2(`${JSON.stringify(f)}:${JSON.stringify(e.changes.get(f))},`);if(a>0&&c+m>262144)break;i[f]=e.changes.get(f),c+=m,a++,o++}let u=await Rk(e.report.id,i,l.managedSession?.csrfToken,e.teamId),p=u>=200&&u<300;if(!p&&!Q2(u)){eP(e,r.slice(s));return}p||console.warn("managed: the server refused a triage batch",e.report.id,u,Object.keys(i)),!p&&u===403&&l.managedSession?.viewer&&n.add(e.report.id);for(let[f,m]of Object.entries(i)){let h=Wt.get(f)?.fix??"",b=p?m?.fix??"":h;b!==h&&t.add(e.teamId),Wt.set(f,{key:Za(m),fix:b})}}}function Xu(){Nn!=null&&(clearTimeout(Nn),Nn=null);let e=[...Ir.values()];if(Ir.clear(),e.length===0)return;let t=new Set,n=new Set;for(let r of e)Xs=Xs.then(()=>tP(r,t,n)).catch(o=>{console.warn("managed: triage push failed",o)});Xs=Xs.finally(()=>{for(let r of t)ps(r);for(let r of n)ob(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function BT(){if(!(Ly().length===0||!Ny()||Js.size===0)){for(let t of NT()){let n=Yu(l.triage.get(t)),r=Za(n);if((Wt.get(t)?.key??"")===r)continue;if(!X2(t,n)){console.warn("managed: triage entry exceeds the server caps, kept local only",t),Wt.set(t,{key:r,fix:Wt.get(t)?.fix??""});continue}let o=Z2(t);if(o==null||!Js.has(Qa(o.id)))continue;let s=l.currentManagedTeam,i=Qa(o.id,s),a=Ir.get(i);a==null&&(a={report:o,key:i,teamId:s,changes:new Map},Ir.set(i,a)),a.changes.set(t,n)}Ir.size!==0&&(Nn!=null&&clearTimeout(Nn),Nn=setTimeout(Xu,q2))}}var LT=!1;function p_(){LT||!Ny()||(LT=!0,Xf(BT))}function Cu(){l$(),l.managedComments?.clear(),l.managedIssues.clear(),globalThis.document?.dispatchEvent(new Event("managed-comments-reset")),Nn!=null&&(clearTimeout(Nn),Nn=null),Ir.clear(),Js.clear(),Wt.clear()}async function AQ(e,{renderView:t=!0,signal:n,readAnnotations:r}={}){let o=l.reports,s=l.currentManagedTeam,i=l.managedSession?.role,a=l.managedSession?.id,c=()=>!n?.aborted&&l.serverMode==="managed"&&l.localMode!==!0&&l.managedSession!=null&&l.managedSession.id===a&&l.managedSession.role===i&&l.reports===o&&l.currentManagedTeam===s&&Ly().some(y=>y.id===e);if(!c()||(Js.delete(Qa(e)),Xu(),!await Oy(n)||!c()))return!1;let u=new Map(l.managedIssues),p=r?await r(e):null,f=r?p?.entries:await Dm(e,s,{signal:n});if(f==null||!c())return!1;let m=!1,h=OT(e),b=p&&Zi(h,p.issues,u);for(let y of h){if(!Object.hasOwn(f,y)){Wt.delete(y);continue}let w=Yu(f[y]);Wt.set(y,{key:Za(w),fix:w?.fix??""});let v=w?.triage==null||w.triage==="ignored"?l.triage.get(y)?.ignoredReports:void 0;pl(l.triage,y,{...w,ignoredReports:v,scopedIgnoredReports:l.triage.get(y)?.scopedIgnoredReports})&&(m=!0)}if(Js.add(Qa(e)),p&&Om(s,h,u),b&&!m&&t&&E(),m){if(await $e(),!c())return!1;t&&E()}return BT(),!0}function Oy(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}),Xs.then(()=>n(!0),()=>n(!1))}):Xs.then(()=>!0)}async function ob(e,{signal:t,readAnnotations:n}={}){let r=l.reports,o=l.currentManagedTeam,s=l.managedSession?.role,i=l.managedSession?.id,a=()=>!t?.aborted&&l.serverMode==="managed"&&!l.localMode&&l.reports===r&&l.currentManagedTeam===o&&l.managedSession?.id===i&&l.managedSession?.role===s&&Js.has(Qa(e,o));if(!a()||(Xu(),!await Oy(t)||!a()))return!1;let c=OT(e),u=new Map([...c].map(w=>[w,Wt.get(w)])),p=new Map(l.managedIssues),f=n?await n(e):null,m=n?f?.entries:await Dm(e,o,{signal:t});if(m==null||!a())return!1;let h=f&&Zi(c,f.issues,p),b=!1,y=!1;for(let w of c){let v=u.get(w),k=Yu(l.triage.get(w));if(Wt.get(w)!==v||Za(k)!==(v?.key??""))continue;let x=Yu(m[w]);(v?.fix??"")!==(x?.fix??"")&&(y=!0),Wt.set(w,{key:Za(x),fix:x?.fix??""});let $=x?.triage==null||x.triage==="ignored"?l.triage.get(w)?.ignoredReports:void 0;pl(l.triage,w,{...x,ignoredReports:$,scopedIgnoredReports:l.triage.get(w)?.scopedIgnoredReports})&&(b=!0)}if(y&&ps(o),f&&Om(o,c,p),h&&!b&&E(),b){if(await $e(),!a())return!1;E()}return!0}function CC(e,t){if(!e)return;let n=l.currentManagedReport;if(n!=null&&(l.managedReports.length!==1||l.managedReports[0].id!==n))return;let r;return async o=>(r??=(async()=>(Xu(),!await Oy(t)||t?.aborted?null:xk(e,{signal:t,reportId:n})))(),(await r)?.(o)??null)}export{Qv as a,e$ as b,t$ as c,n$ as d,rf as e,r$ as f,qr as g,l as h,C as i,bI as j,kI as k,Ie as l,Af as m,K as n,os as o,LI as p,OI as q,BI as r,DI as s,zI as t,Gi as u,A$ as v,WI as w,$e as x,O$ as y,XI as z,JI as A,ZI as B,gM as C,bM as D,W4 as E,H4 as F,U4 as G,V4 as H,j4 as I,G4 as J,j as K,Z as L,Ji as M,Mm as N,Am as O,Lm as P,y3 as Q,be as R,Me as S,Zt as T,Wc as U,Nk as V,Hc as W,Gc as X,et as Y,Ae as Z,gs as _,Zm as $,hs as aa,ed as ba,nz as ca,rz as da,oz as ea,or as fa,HM as ga,UM as ha,oa as ia,nd as ja,vx as ka,lz as la,bs as ma,Cx as na,Cz as oa,se as pa,io as qa,sr as ra,ZM as sa,vt as ta,ge as ua,QM as va,ir as wa,He as xa,Rn as ya,Ax as za,Ee as Aa,Wz as Ba,tA as Ca,Hz as Da,aa as Ea,Uz as Fa,lr as Ga,lo as Ha,Vz as Ia,jz as Ja,ld as Ka,ws as La,gW as Ma,fe as Na,FW as Oa,LW as Pa,$g as Qa,co as Ra,dr as Sa,NW as Ta,SA as Ua,gd as Va,xg as Wa,wd as Xa,UW as Ya,VW as Za,t0 as _a,o0 as $a,$d as ab,i6 as bb,kd as cb,xs as db,m6 as eb,DA as fb,$6 as gb,u0 as hb,p0 as ib,zA as jb,Mg as kb,xd as lb,k6 as mb,x6 as nb,Sd as ob,Cd as pb,Ss as qb,Cs as rb,m0 as sb,M6 as tb,A6 as ub,nt as vb,eH as wb,tH as xb,hE as yb,nH as zb,Is as Ab,mr as Bb,Id as Cb,wH as Db,I0 as Eb,Fd as Fb,sS as Gb,iS as Hb,lS as Ib,Gg as Jb,cS as Kb,dF as Lb,uF as Mb,dS as Nb,uS as Ob,HU as Pb,mF as Qb,gF as Rb,$S as Sb,Qg as Tb,xS as Ub,r8 as Vb,SS as Wb,_S as Xb,AS as Yb,ES as Zb,f8 as _b,LS as $b,m8 as ac,g8 as bc,rh as cc,b8 as dc,y8 as ec,S8 as fc,uh as gc,xa as hc,KS as ic,Pt as jc,n1 as kc,_a as lc,r1 as mc,w1 as nc,x1 as oc,_1 as pc,Ih as qc,T1 as rc,Eh as sc,Sj as tc,A1 as uc,Cj as vc,_j as wc,OL as xc,Rj as yc,hC as zc,tb as Ac,Ue as Bc,TN as Cc,p_ as Dc,Cu as Ec,AQ as Fc,ob as Gc,CC as Hc,So as Ic,Wb as Jc,za as Kc,m_ as Lc,Sr as Mc,Vs as Nc,eR as Oc,lY as Pc,cY as Qc,Bu as Rc,iR as Sc,JY as Tc,ZY as Uc,PR as Vc,DR as Wc,Hu as Xc,xZ as Yc,_2 as Zc,R2 as _c,E as $c,Lu as ad,Va as bd,Oc as cd,ik as dd,C3 as ed,_3 as fd,R3 as gd,T3 as hd,I3 as id,M3 as jd,A3 as kd,E3 as ld,F3 as md,L3 as nd,zm as od,N3 as pd,O3 as qd,B3 as rd,P3 as sd,MC as td,VC as ud,W as vd,R9 as wd,kt as xd};
|
|
202
|
-
/*! Bundled license information:
|
|
203
|
-
|
|
204
|
-
lit-html/directives/map.js:
|
|
205
|
-
lit-html/directives/choose.js:
|
|
206
|
-
(**
|
|
207
|
-
* @license
|
|
208
|
-
* Copyright 2021 Google LLC
|
|
209
|
-
* SPDX-License-Identifier: BSD-3-Clause
|
|
210
|
-
*)
|
|
211
|
-
|
|
212
|
-
lit-html/async-directive.js:
|
|
213
|
-
(**
|
|
214
|
-
* @license
|
|
215
|
-
* Copyright 2017 Google LLC
|
|
216
|
-
* SPDX-License-Identifier: BSD-3-Clause
|
|
217
|
-
*)
|
|
218
|
-
|
|
219
|
-
lit-html/directives/ref.js:
|
|
220
|
-
(**
|
|
221
|
-
* @license
|
|
222
|
-
* Copyright 2020 Google LLC
|
|
223
|
-
* SPDX-License-Identifier: BSD-3-Clause
|
|
224
|
-
*)
|
|
225
|
-
*/
|