@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
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import{a as e,b as t,c as n,m as r}from"./chunk-VH4XMZIW.js";import{b as i}from"./chunk-JCIIBLKR.js";import{a,b as o,c as s,e as c,f as l,g as u,h as d,i as f,j as p,k as m,l as h,m as g,n as _,o as v,p as y,q as b,r as ee,s as te,t as ne,u as re}from"./chunk-V3KWNNMY.js";import{$ as ie,A as ae,Aa as oe,B as se,Ba as ce,C as le,Ca as ue,D as de,Da as fe,E as pe,Ea as me,F as he,Fa as ge,G as _e,Ga as ve,Ha as ye,I as be,Ia as xe,J as Se,Ja as Ce,K as we,Ka as Te,L as Ee,La as De,Ma as Oe,Na as ke,Oa as Ae,Pa as je,Qa as Me,Ra as Ne,Sa as Pe,T as Fe,Ta as Ie,U as Le,Ua as Re,V as ze,Va as Be,W as Ve,_ as He,a as Ue,aa as We,b as Ge,ba as Ke,c as qe,ca as Je,d as Ye,e as Xe,ea as Ze,f as Qe,ga as $e,h as et,ha as tt,i as nt,ia as rt,j as it,ja as at,k as x,ka as ot,l as st,m as ct,ma as lt,n as ut,na as dt,o as ft,oa as pt,p as mt,pa as ht,q as gt,r as _t,ra as vt,s as yt,sa as bt,t as xt,ta as St,u as Ct,ua as wt,v as Tt,va as Et,wa as Dt,xa as Ot,ya as kt,z as At,za as jt}from"./chunk-S6GIXWQW.js";import{a as Mt,b as Nt,c as Pt,d as Ft,f as It,g as Lt,h as Rt,i as zt,j as Bt,k as Vt,m as Ht,n as Ut,o as Wt,p as Gt,q as Kt,r as qt,s as Jt,t as Yt,u as Xt,v as Zt,w as Qt,x as $t}from"./chunk-JKGQ3O7O.js";import{g as en,h as tn,i as nn,j as rn,k as an,l as on,m as sn,n as cn,o as ln,q as un,r as dn,s as fn,t as pn,w as mn}from"./chunk-WQ74ZBZF.js";import{a as hn,b as gn,c as _n,d as vn,e as yn,f as S,g as bn,h as xn,i as Sn}from"./chunk-7C7DWL7I.js";import{a as Cn,b as wn,c as Tn,d as En}from"./chunk-PNHBZGDD.js";import{$ as Dn,A as On,B as kn,C as An,D as jn,F as Mn,G as Nn,H as Pn,I as Fn,J as In,K as Ln,L as Rn,M as zn,N as Bn,O as Vn,P as Hn,Q as Un,R as Wn,S as Gn,T as Kn,U as qn,W as Jn,X as Yn,Y as Xn,Z as Zn,_ as Qn,a as C,aa as $n,b as er,ba as tr,ca as nr,da as rr,ea as ir,f as ar,fa as w,g as or,ga as sr,h as cr,ha as T,i as lr,ia as ur,j as dr,ja as fr,k as pr,l as mr,la as hr,m as gr,ma as _r,n as vr,na as yr,o as br,oa as xr,pa as Sr,q as Cr,qa as wr,r as Tr,ra as Er,s as Dr,t as Or,ta as kr,u as Ar,ua as jr,v as Mr,w as Nr,wa as Pr,x as Fr,y as Ir,z as Lr}from"./chunk-MSION3G4.js";import{b as Rr,c as zr,d as Br,e as Vr,f as Hr,g as Ur}from"./chunk-I2MDGSQX.js";import{a as Wr,b as Gr,e as Kr}from"./chunk-3PS4KWD2.js";import{a as qr,b as Jr,d as Yr,e as Xr}from"./chunk-IYPY47MC.js";import{a as Zr,c as E,d as D}from"./chunk-OKRLLE5I.js";import{a as Qr,c as $r,d as ei,e as ti,g as ni,h as ri,i as ii,j as ai,k as oi,l as si,m as ci,n as li,o as ui,p as di,q as fi}from"./chunk-BC2UCLFJ.js";import{A as pi,B as mi,C as hi,D as gi,E as _i,G as vi,H as yi,J as bi,K as xi,L as Si,M as Ci,N as wi,O as Ti,a as Ei,f as Di,h as Oi,i as ki,j as Ai,k as ji,l as Mi,m as Ni,n as Pi,o as Fi,p as Ii,q as Li,r as Ri,t as zi,u as Bi,v as Vi,w as Hi,x as Ui,y as Wi,z as Gi}from"./chunk-SXV2T5C4.js";import{A as Ki,d as O,e as qi,f as Ji,g as Yi,i as Xi,j as Zi,k as Qi,o as $i,p as ea,q as ta,r as na,s as ra,t as ia,w as aa,y as oa,z as sa}from"./chunk-WFYLMF6Z.js";import{a as ca,b as la,c as ua}from"./chunk-C4Z6ZBXV.js";import{a as da,b as fa,c as pa}from"./chunk-TUII34K2.js";import{a as ma,b as ha,c as k,d as A,f as ga,g as j,i as M,j as _a}from"./chunk-2XUEZHIP.js";var va=new Uint8Array([68,86,69,49]),ya=12,ba=32,xa=`deepview-passkey.v1.content-key`;function Sa(){return!(typeof window>`u`||typeof PublicKeyCredential>`u`||typeof navigator>`u`||!navigator.credentials)}async function Ca(){if(typeof PublicKeyCredential>`u`)return!1;let e=PublicKeyCredential.getClientCapabilities;if(typeof e!=`function`)return null;try{let t=await e.call(PublicKeyCredential);if(!t||typeof t!=`object`)return null;let n=t[`extension:prf`],r=t.prf;return n===!0||r===!0?!0:n===!1||r===!1?!1:null}catch{return null}}function wa(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}async function Ta(e){if(e.length<32)throw Error(`PRF output too short (${e.length} bytes; need \u2265 32)`);let t=await crypto.subtle.importKey(`raw`,e,`HKDF`,!1,[`deriveBits`]),n=await crypto.subtle.deriveBits({name:`HKDF`,hash:`SHA-256`,salt:new Uint8Array,info:da(xa)},t,ba*8);return new Uint8Array(n)}function Ea(e){return crypto.subtle.importKey(`raw`,e,{name:`AES-GCM`},!1,[`encrypt`,`decrypt`])}async function Da(e,t,n){let r=wa(ya),i=new Uint8Array(await crypto.subtle.encrypt({name:`AES-GCM`,iv:r,additionalData:n},e,t)),a=new Uint8Array(va.length+ya+i.length);return a.set(va,0),a.set(r,va.length),a.set(i,va.length+ya),a}async function Oa(e,t,n){if(!ka(t))throw Error(`passkey: missing envelope magic`);if(t.length<va.length+ya+16)throw Error(`passkey: envelope too short`);let r=t.subarray(va.length,va.length+ya),i=t.subarray(va.length+ya);return new Uint8Array(await crypto.subtle.decrypt({name:`AES-GCM`,iv:r,additionalData:n},e,i))}function ka(e){if(e.length<va.length)return!1;for(let t=0;t<va.length;t++)if(e[t]!==va[t])return!1;return!0}async function Aa(e){if(!Sa())throw Error(`passkey: not supported in this environment`);let t=wa(32),n=wa(32),r=await navigator.credentials.create({publicKey:{challenge:t,rp:{name:e.rpName,id:e.rpId},user:{id:e.userId,name:e.userName,displayName:e.userName},pubKeyCredParams:[{type:`public-key`,alg:-7},{type:`public-key`,alg:-257}],authenticatorSelection:{residentKey:`required`,userVerification:`required`},extensions:{prf:{eval:{first:n}}},timeout:e.timeoutMs??12e4},...e.signal?{signal:e.signal}:{}});if(!(r instanceof PublicKeyCredential))throw Error(`passkey: registration returned no credential`);let i=new Uint8Array(r.rawId).toBase64({alphabet:`base64url`,omitPadding:!0}),a=r.getClientExtensionResults().prf,o=a?.results?.first?new Uint8Array(a.results.first):null;return{credentialId:i,prfSalt:n.toBase64({alphabet:`base64url`,omitPadding:!0}),prfOutput:o}}async function ja(e){if(!Sa())throw Error(`passkey: not supported in this environment`);let t=wa(32),n=Uint8Array.fromBase64(e.credentialId,{alphabet:`base64url`}),r=Uint8Array.fromBase64(e.prfSalt,{alphabet:`base64url`}),i=await navigator.credentials.get({publicKey:{challenge:t,rpId:e.rpId,allowCredentials:[{type:`public-key`,id:n}],userVerification:`required`,extensions:{prf:{eval:{first:r}}},timeout:e.timeoutMs??12e4},...e.signal?{signal:e.signal}:{}});if(!(i instanceof PublicKeyCredential))throw Error(`passkey: assertion returned no credential`);let a=i.getClientExtensionResults().prf?.results?.first;if(!a)throw Error(`passkey: authenticator did not return PRF output (extension unsupported)`);return new Uint8Array(a)}var Ma=Object.freeze([`deepview.workspaces`,`deepview.sync.sessions`,`deepview.sync.userEnabled`,`deepview.sync.password`,`deepview.repoUrls`,`deepview.fileCounts`,`deepview.workspaceApp`,`deepview.lastFile`,`deepview.scan.access`]),Na=new Map,Pa=!1,Fa=new Map,Ia=new Map,La=new Set;function Ra(e){let t=()=>e();return La.add(t),Pa&&queueMicrotask(()=>{if(La.has(t))try{t()}catch(e){console.warn(`secure-storage after-hydrate listener:`,e)}}),()=>La.delete(t)}function za(){for(let e of La)try{e()}catch(e){console.warn(`secure-storage after-hydrate listener:`,e)}}function Ba(e){let t=Co()??``;return da(`deepview.secure.v1|${t}|${e}`)}function Va(e){try{let t=Uint8Array.fromBase64(e);if(ka(t))return t}catch{}return null}function Ha(e){return Na.get(e)??null}async function Ua(e,t){if(typeof t!=`string`)throw TypeError(`secure-storage: value must be a string`);if(bo()&&!To())throw Error(`secure-storage: vault locked, cannot save "${e}"`);if(mo())throw Error(`secure-storage: wipe in progress, cannot save "${e}"`);let n=Na.has(e),r=Na.get(e);Na.set(e,t),Ia.set(e,t);let i=Fa.get(e)??Promise.resolve(),a=()=>{Ia.get(e)===t&&Ia.delete(e)},o=i.catch(()=>{}).then(()=>Ga(e,t)).then(()=>a(),i=>{throw a(),Na.get(e)===t&&(n?Na.set(e,r):Na.delete(e)),i});Fa.set(e,o.catch(()=>{})),await o}async function Wa(e){let t=Symbol(`secure-storage:removed`);Na.delete(e),Ia.set(e,t);let n=Fa.get(e)??Promise.resolve(),r=()=>{try{localStorage.removeItem(e)}catch{}Ia.get(e)===t&&(Ia.delete(e),Na.delete(e))},i=n.catch(()=>{}).then(()=>r());Fa.set(e,i.catch(()=>{})),await i}async function Ga(e,t){let n=To();if(n){let r=await Da(n,da(t),Ba(e));localStorage.setItem(e,r.toBase64())}else localStorage.setItem(e,t)}async function Ka(){Pa||Ao(()=>{Ka().catch(e=>console.warn(`secure-storage rehydrate:`,e))}),Pa=!0;for(let e of[...Na.keys()])Ia.has(e)||Na.delete(e);await Ja(Ma,!0)}async function qa(e){if(!Ma.includes(e))throw Error(`secure-storage: unknown secure key "${e}"`);return Ia.has(e)||Na.delete(e),(await Ja([e],!1)).get(e)??null}async function Ja(e,t){let n=To(),r=[],i=new Map;for(let t of e){if(Ia.has(t)){i.set(t,Ha(t));continue}let e=localStorage.getItem(t);if(e===null)continue;let a=Va(e);if(a){if(!n)continue;try{let e=await Oa(n,a,Ba(t));if(Ia.has(t)){i.set(t,Ha(t));continue}let r=pa(e);Na.set(t,r),i.set(t,r)}catch(e){console.warn(`secure-storage: decrypt failed for "${t}":`,e)}}else Na.set(t,e),i.set(t,e),n&&bo()&&r.push([t,e])}return t&&za(),r.length>0&&queueMicrotask(()=>{for(let[e,t]of r)Na.get(e)===t&&Ua(e,t).catch(t=>{console.warn(`secure-storage: self-heal failed for "${e}":`,t)})}),i}async function Ya(e,t){let n=(Fa.get(e)??Promise.resolve()).catch(()=>{}).then(async()=>{if(Ia.has(e))return;let n=localStorage.getItem(e);if(n===null)return;let r=await t(n);r!==null&&(Ia.has(e)||(localStorage.setItem(e,r.storageValue),Na.set(e,r.cacheValue)))});Fa.set(e,n.catch(()=>{})),await n}async function Xa({seal:e}){for(let e of Ma)await Ya(e,async t=>{if(Va(t))return null;let n=To();return n?{storageValue:(await Da(n,da(t),Ba(e))).toBase64(),cacheValue:t}:null})}async function Za({open:e}){for(let t of Ma)await Ya(t,async n=>{let r=Va(n);if(!r)return null;let i=await e(r,Ba(t)),a=pa(i);return{storageValue:a,cacheValue:a}})}var Qa=`deepview.secure.v1.mutate:`;function $a(e,t){return Ma.includes(e)?navigator.locks.request(Qa+e,async()=>{let n=Fa.get(e);n&&await n.catch(()=>{}),await Ka();let r=Ha(e),i=await t(r);if(i!=null&&i!==r){if(typeof i!=`string`)throw TypeError(`secure-storage: mutate updater for "${e}" must return a string`);await Ua(e,i)}}):Promise.reject(Error(`secure-storage: mutate() called with non-secure key "${e}"`))}async function eo(){await Promise.allSettled([...Fa.values()]),Ia.clear(),Fa.clear()}typeof window<`u`&&window.addEventListener(`storage`,e=>{!Pa||!e.key||!Ma.includes(e.key)||Ka().catch(()=>{})});var to=`deepview.passkey.v1`,no=`deepview.passkey.userId`,ro=`deepview.passkey.cleanDisable`,io=`deepview.passkey.v1.write`,ao=`deepview.triage.v1|`,oo=`deepview.opfs.v1|`,so=`deepview.bundle.v1|`,N=null,co=null,lo=null,uo=0;function fo(){return uo>0}var po=0;function mo(){return po>0}function ho(){try{let e=localStorage.getItem(to);if(!e)return null;let t=JSON.parse(e);return t&&typeof t==`object`&&t.enabled===!0&&typeof t.credentialId==`string`&&t.credentialId.length>0&&typeof t.prfSalt==`string`&&t.prfSalt.length>0&&typeof t.userId==`string`&&t.userId.length>0?t:null}catch{return null}}function go(e){localStorage.setItem(to,JSON.stringify(e))}function _o(){localStorage.removeItem(to)}function vo(){try{let e=localStorage.getItem(no);if(e){let t=Uint8Array.fromBase64(e,{alphabet:`base64url`});if(t.length===16)return t}}catch{}let e=new Uint8Array(16);crypto.getRandomValues(e);try{localStorage.setItem(no,e.toBase64({alphabet:`base64url`,omitPadding:!0}))}catch{}return e}function yo(){return typeof location>`u`?``:location.hostname}function bo(){return ho()!==null}function xo(){return N!==null}function So(){return!(!Sa()||typeof navigator>`u`||!navigator.locks?.request||!yo())}function Co(){return co}function wo(){if(ho()!==null)return!1;try{return localStorage.getItem(ro)!==`1`&&localStorage.getItem(no)!==null}catch{return!1}}function To(){return N}function Eo(){return da(ao+(co??``))}function Do(e){if(typeof e!=`string`)throw TypeError(`passkey vault: OPFS AAD requires a filename string`);return da(oo+(co??``)+`|`+e)}function Oo(e){if(typeof e!=`string`)throw TypeError(`passkey vault: bundle AAD requires a slot string`);return da(so+(co??``)+`|`+e)}var ko=new Set;function Ao(e){return ko.add(e),()=>ko.delete(e)}function jo(){for(let e of ko)try{e()}catch(e){console.warn(`passkey vault listener:`,e)}}async function Mo({signal:e}={}){let t=ho();if(!t)return!1;let n;try{n=await ja({credentialId:t.credentialId,prfSalt:t.prfSalt,rpId:t.rpId??yo(),...e?{signal:e}:{}})}catch(e){if(e&&e.name===`NotAllowedError`||e&&e.name===`AbortError`)return!1;throw e&&e.message?.includes(`PRF`)?No(e):e}if(!n||n.length<32)throw No();let r=await Ta(n);return n.fill(0),navigator.locks.request(io,async()=>{let e=ho();if(!e||e.credentialId!==t.credentialId)throw r.fill(0),Error(`passkey: vault state changed during unlock (another tab wiped or re-enabled it). Reload this page and try again.`);return N=await Ea(r),r.fill(0),co=e.userId,lo=e.credentialId,jo(),!0})}function No(e){let t=Error(`Your browser or authenticator doesn't support passkey-derived encryption keys (the WebAuthn PRF extension). Try Chrome 116+, Safari 18+, or Firefox 130+ on a device with a platform authenticator (TouchID / Windows Hello).`);return e&&(t.cause=e),t}function Po({migrate:e,userName:t,rpName:n,signal:r,acknowledgeOrphan:i}){if(!Sa())throw Error(`passkey: WebAuthn unavailable in this environment`);if(wo()&&!i)throw Error(`passkey: a previous vault exists on this device with no metadata. Any data encrypted under the old passkey will be unreadable after a new setup. Call enableEncryption({acknowledgeOrphan: true}) to proceed, or wipeAllVaultData() to start clean first.`);let a=yo();return navigator.locks.request(io,async()=>{if(bo())throw Error(`passkey: encryption is already enabled`);if(await Ca()===!1)throw No();let i=vo(),o=await Aa({userName:t||`DeepView user`,userId:i,rpName:n||`DeepView`,rpId:a,...r?{signal:r}:{}}),s=o.prfOutput;if(!s)try{s=await ja({credentialId:o.credentialId,prfSalt:o.prfSalt,rpId:a,...r?{signal:r}:{}})}catch(e){let t=i.toBase64({alphabet:`base64url`,omitPadding:!0});await Io({credentialId:o.credentialId,rpId:a,userId:t}).catch(()=>{});try{localStorage.removeItem(no)}catch{}throw e&&e.message?.includes(`PRF`)?No(e):e}if(!s||s.length<32){let e=i.toBase64({alphabet:`base64url`,omitPadding:!0});await Io({credentialId:o.credentialId,rpId:a,userId:e}).catch(()=>{});try{localStorage.removeItem(no)}catch{}throw No()}let c=await Ta(s);s.fill(0);let l=await Ea(c);c.fill(0);let u=i.toBase64({alphabet:`base64url`,omitPadding:!0}),d={enabled:!0,credentialId:o.credentialId,prfSalt:o.prfSalt,userId:u,rpId:a,createdAt:Date.now()};N=l,co=u,lo=o.credentialId,go(d),typeof e==`function`&&await e({seal:(e,t)=>Da(l,e,t)});try{localStorage.removeItem(ro)}catch{}return jo(),!0})}async function Fo({migrate:e}){if(!bo())return{disabled:!1,signalAttempted:!1};if(!xo())throw Error(`passkey: must unlock before disabling encryption`);uo+=1;try{return await navigator.locks.request(io,async()=>{let t=ho();if(!t)return{disabled:!1,signalAttempted:!1};let n=N;if(!n)return{disabled:!1,signalAttempted:!1};if(_o(),N=null,lo=null,typeof e==`function`){let r=(e,t)=>Oa(n,e,t);try{await e({open:r})}catch(e){throw go(t),N=n,lo=t.credentialId,jo(),e}}co=null;try{localStorage.setItem(ro,`1`)}catch{}let r=await Io(t).catch(()=>!1);return jo(),{disabled:!0,signalAttempted:r}})}finally{--uo}}async function Io({credentialId:e,rpId:t,userId:n}){if(typeof PublicKeyCredential>`u`||!t)return!1;let r=PublicKeyCredential,i=!1;if(typeof r.signalUnknownCredential==`function`){i=!0;try{await r.signalUnknownCredential({rpId:t,credentialId:e})}catch{}}if(typeof r.signalAllAcceptedCredentials==`function`&&n){i=!0;try{await r.signalAllAcceptedCredentials({rpId:t,userId:n,allAcceptedCredentialIds:[]})}catch{}}return i}async function Lo(e,t){try{return await e.removeEntry(t,{recursive:!0}),null}catch(e){return e?.name===`NotFoundError`?null:`${t}: ${e?.message??String(e)}`}}async function Ro(e){let t=[];if(typeof navigator>`u`||!navigator.storage?.getDirectory)return t;let n;try{n=await navigator.storage.getDirectory()}catch(e){return t.push(`storage root: ${e?.message??String(e)}`),t}for(let r of e){let e=await Lo(n,r);e&&t.push(e)}return t}async function zo({refuseIfEnabled:e=!1}={}){uo+=1,po+=1;try{return await navigator.locks.request(io,async()=>{if(e&&bo())throw Error(`passkey: encryption was just enabled in another tab. Reload this page to unlock instead of wiping.`);await eo();let t=ho();if(t)try{await Io({credentialId:t.credentialId,rpId:t.rpId??yo(),userId:t.userId})}catch{}try{localStorage.removeItem(to)}catch{}try{localStorage.removeItem(no)}catch{}try{localStorage.removeItem(ro)}catch{}for(let e of[`deepview.workspaces`,`deepview.sync.sessions`,`deepview.sync.userEnabled`,`deepview.repoUrls`,`deepview.fileCounts`,`deepview.workspaceApp`,`deepview.lastFile`,`deepview.scan.access`,`deepview.triage`,`deepview.triage.pending`,`deepview.passkey.firstImportPrompted`,`deepview.viewMode`])try{localStorage.removeItem(e)}catch{}try{let e=[];for(let t=0;t<localStorage.length;t+=1){let n=localStorage.key(t);n&&n.startsWith(`deepview.report:`)&&e.push(n)}for(let t of e)try{localStorage.removeItem(t)}catch{}}catch{}N=null,co=null,lo=null,jo();let n=await Ro([`deepview-reports`,`deepview-bundles`]);if(n.length>0)throw Error(`passkey: wipe partially succeeded \u2014 localStorage cleared but the following OPFS paths could not be removed: ${n.join(`; `)}. Open DevTools \u2192 Application \u2192 Storage \u2192 Origin Private File System to inspect, or use the browser's site-data clear tool to finish.`)})}finally{--uo,--po}}function Bo(e){return N?Da(N,e,Eo()):Promise.reject(Error(`passkey: vault locked, cannot seal triage`))}function Vo(e){return N?Oa(N,e,Eo()):Promise.reject(Error(`passkey: vault locked, cannot open triage`))}function Ho(e,t){return N?Da(N,e,Do(t)):Promise.reject(Error(`passkey: vault locked, cannot seal OPFS file`))}function Uo(e,t){return N?Oa(N,e,Do(t)):Promise.reject(Error(`passkey: vault locked, cannot open OPFS file`))}function Wo(e,t){return N?Da(N,e,Oo(t)):Promise.reject(Error(`passkey: vault locked, cannot seal bundle`))}function Go(e,t){return N?Oa(N,e,Oo(t)):Promise.reject(Error(`passkey: vault locked, cannot open bundle`))}typeof window<`u`&&window.addEventListener(`storage`,e=>{if(e.key!==to)return;let t=ho();(!t&&N||t&&N&&t.credentialId!==lo)&&(N=null,co=null,lo=null),jo()});var Ko=new WeakMap,qo=Symbol(`iteration key`);function Jo(e){Ko.set(e,new Map)}function Yo(e,{target:t,key:n,type:r}){r===`iterate`&&(n=qo);let i=Ko.get(t),a=i.get(n);a||(a=new Set,i.set(n,a)),a.has(e)||(a.add(e),e.cleaners.push(a))}function Xo({target:e,key:t,type:n}){let r=Ko.get(e),i=new Set;return n===`clear`?r.forEach((e,t)=>{Zo(i,r,t)}):Zo(i,r,t),(n===`add`||n===`delete`||n===`clear`)&&Zo(i,r,Array.isArray(e)?`length`:qo),i}function Zo(e,t,n){let r=t.get(n);r&&r.forEach(e.add,e)}function Qo(e){e.cleaners&&e.cleaners.forEach($o,e),e.cleaners=[]}function $o(e){e.delete(this)}var es=[],ts=!1;function ns(e,t,n,r){if(e.unobserved)return Reflect.apply(t,n,r);if(es.indexOf(e)===-1){Qo(e);try{return es.push(e),Reflect.apply(t,n,r)}finally{es.pop()}}}function rs(e){let t=es[es.length-1];t&&(os(t,e),Yo(t,e))}function is(e){Xo(e).forEach(as,e)}function as(e){os(e,this),typeof e.scheduler==`function`?e.scheduler(e):typeof e.scheduler==`object`?e.scheduler.add(e):e()}function os(e,t){if(e.debugger&&!ts)try{ts=!0,e.debugger(t)}finally{ts=!1}}function ss(){return es.length>0}var cs=Symbol(`is reaction`);function ls(e,t={}){let n=e[cs]?e:function t(){return ns(t,e,this,arguments)};return n.scheduler=t.scheduler,n.debugger=t.debugger,n[cs]=!0,t.lazy||n(),n}function us(e){e.unobserved||(e.unobserved=!0,Qo(e)),typeof e.scheduler==`object`&&e.scheduler.delete(e)}var ds=new WeakMap,fs=new WeakMap,ps=Object.prototype.hasOwnProperty;function ms(e){let t=fs.get(e);return ss()&&typeof e==`object`&&e?t||As(e):t||e}function hs(e,t){let n=e.next;return e.next=()=>{let{done:r,value:i}=n.call(e);return r||(t?i[1]=ms(i[1]):i=ms(i)),{done:r,value:i}},e}var gs={has(e){let t=ds.get(this),n=Reflect.getPrototypeOf(this);return rs({target:t,key:e,type:`has`}),n.has.apply(t,arguments)},get(e){let t=ds.get(this),n=Reflect.getPrototypeOf(this);return rs({target:t,key:e,type:`get`}),ms(n.get.apply(t,arguments))},add(e){let t=ds.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),i=n.add.apply(t,arguments);return r||is({target:t,key:e,value:e,type:`add`}),i},set(e,t){let n=ds.get(this),r=Reflect.getPrototypeOf(this),i=r.has.call(n,e),a=r.get.call(n,e),o=r.set.apply(n,arguments);return i?t!==a&&is({target:n,key:e,value:t,oldValue:a,type:`set`}):is({target:n,key:e,value:t,type:`add`}),o},delete(e){let t=ds.get(this),n=Reflect.getPrototypeOf(this),r=n.has.call(t,e),i=n.get?n.get.call(t,e):void 0,a=n.delete.apply(t,arguments);return r&&is({target:t,key:e,oldValue:i,type:`delete`}),a},clear(){let e=ds.get(this),t=Reflect.getPrototypeOf(this),n=e.size!==0,r=e instanceof Map?new Map(e):new Set(e),i=t.clear.apply(e,arguments);return n&&is({target:e,oldTarget:r,type:`clear`}),i},forEach(e,...t){let n=ds.get(this),r=Reflect.getPrototypeOf(this);return rs({target:n,type:`iterate`}),r.forEach.call(n,(t,...n)=>e(ms(t),...n),...t)},keys(){let e=ds.get(this),t=Reflect.getPrototypeOf(this);return rs({target:e,type:`iterate`}),t.keys.apply(e,arguments)},values(){let e=ds.get(this),t=Reflect.getPrototypeOf(this);return rs({target:e,type:`iterate`}),hs(t.values.apply(e,arguments),!1)},entries(){let e=ds.get(this),t=Reflect.getPrototypeOf(this);return rs({target:e,type:`iterate`}),hs(t.entries.apply(e,arguments),!0)},[Symbol.iterator](){let e=ds.get(this),t=Reflect.getPrototypeOf(this);return rs({target:e,type:`iterate`}),hs(t[Symbol.iterator].apply(e,arguments),e instanceof Map)},get size(){let e=ds.get(this),t=Reflect.getPrototypeOf(this);return rs({target:e,type:`iterate`}),Reflect.get(t,`size`,e)}},_s={get(e,t,n){return e=ps.call(gs,t)?gs:e,Reflect.get(e,t,n)}},vs=typeof window==`object`?window:Function(`return this`)(),ys=new Map([[Map,_s],[Set,_s],[WeakMap,_s],[WeakSet,_s],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function bs({constructor:e}){return!(typeof e==`function`&&e.name in vs&&vs[e.name]===e)||ys.has(e)}function xs(e){return ys.get(e.constructor)}var Ss=Object.prototype.hasOwnProperty,Cs=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e==`symbol`));function ws(e,t,n){let r=Reflect.get(e,t,n);if(typeof t==`symbol`&&Cs.has(t))return r;rs({target:e,key:t,receiver:n,type:`get`});let i=fs.get(r);if(ss()&&typeof r==`object`&&r){if(i)return i;let n=Reflect.getOwnPropertyDescriptor(e,t);if(!n||n.writable!==!1||n.configurable!==!1)return As(r)}return i||r}function Ts(e,t){let n=Reflect.has(e,t);return rs({target:e,key:t,type:`has`}),n}function Es(e){return rs({target:e,type:`iterate`}),Reflect.ownKeys(e)}function Ds(e,t,n,r){typeof n==`object`&&n&&(n=ds.get(n)||n);let i=Ss.call(e,t),a=e[t],o=Reflect.set(e,t,n,r);return e!==ds.get(r)||(i?n!==a&&is({target:e,key:t,value:n,oldValue:a,receiver:r,type:`set`}):is({target:e,key:t,value:n,receiver:r,type:`add`})),o}function Os(e,t){let n=Ss.call(e,t),r=e[t],i=Reflect.deleteProperty(e,t);return n&&is({target:e,key:t,oldValue:r,type:`delete`}),i}var ks={get:ws,has:Ts,ownKeys:Es,set:Ds,deleteProperty:Os};function As(e={}){return ds.has(e)||!bs(e)?e:fs.get(e)||js(e)}function js(e){let t=xs(e)||ks,n=new Proxy(e,t);return fs.set(e,n),ds.set(n,e),Jo(e),n}var Ms=As;function Ns(e){let t=!0,n=ls(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{n()}catch(e){throw us(n),e}return()=>us(n)}var Ps=`deepview.viewMode`,Fs=`deepview.severityMode`,Is=`deepview.repoUrls`,Ls=`deepview.focusSplit`,Rs=`deepview.kanbanDetailFullscreen`,zs=`deepview.bundleSourceWrap`,Bs=new Set([`corrected`,`original`]),Vs=50,Hs=20,Us=80;try{localStorage.removeItem(Ps)}catch{}function Ws(){try{let e=localStorage.getItem(Fs);return e!==null&&Bs.has(e)?e:null}catch{return null}}function Gs(){try{let e=localStorage.getItem(Rs);return e===`true`||e!==`false`&&null}catch{return null}}function Ks(){try{let e=localStorage.getItem(zs);return e===`true`||e!==`false`&&null}catch{return null}}function qs(e){if(!Number.isFinite(e))return Vs;let t=Math.round(e*10)/10;return Math.min(Math.max(t,Hs),Us)}function Js(){try{let e=localStorage.getItem(Ls);if(e===null||e.trim()===``)return null;let t=Number(e);return Number.isFinite(t)?qs(t):null}catch{return null}}function Ys(e){try{let t=JSON.parse(e||`{}`);return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function Xs(){return Ys(Ha(Is))}function Zs(e){return e?Xs()[e]??``:``}var Qs=new Set;function $s(e){return Qs.add(e),()=>{Qs.delete(e)}}function ec(e){for(let t of Qs)try{t(e)}catch(e){console.warn(`repo-url listener:`,e)}}function tc(e,t){if(F()||!e)return;let n=Xs();t?n[e]=t:delete n[e],Ua(Is,JSON.stringify(n)).catch(e=>console.warn(`saveRepoUrlFor:`,e)),$a(Is,n=>{let r=Ys(n);return t?r[e]=t:delete r[e],JSON.stringify(r)}).catch(e=>console.warn(`saveRepoUrlFor cross-tab merge:`,e)),ec(e)}async function nc(e,t){await $a(Is,n=>{let r=Ys(n),i=t===`replace`?{...e}:t===`prefer-imported`?{...r,...e}:{...e,...r};return JSON.stringify(i)}),dc()}async function rc(e){if(!e||typeof e!=`object`)return[];let t=[];if(await $a(Is,n=>{let r=Ys(n);t=[];for(let[n,i]of Object.entries(e))!n||typeof i!=`string`||!i||r[n]||(r[n]=i,t.push(n));return t.length===0?n:JSON.stringify(r)}),t.length===0)return t;dc();for(let e of t)ec(e);return t}async function ic(e,t){return!e||!t?!1:(await rc({[e]:t})).length>0}var ac=fn(),oc=sn(ac?.mode??`e2e`,globalThis.location?.pathname??``)?`managed`:null,P=Ms({reports:[],workspaceMerges:[],currentFile:null,currentWorkspace:null,currentManagedTeam:null,currentManagedReport:null,currentReportWorkspace:null,currentView:`findings`,currentLinks:null,bundles:[],storedFiles:[],selectedBundle:null,selectedBundleWorkspace:null,scanSelection:null,bundleCreationRepoId:null,bundleDetails:null,bundleDetailsTab:`overview`,teamDependenciesTab:`pulls`,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:Ks()??!0,bundleSourcePretty:!1,bundleCodeTerminal:!1,bundleSourceLockfile:!1,bundleCodeFileRequest:null,npmLookup:{input:``,error:null},npmOpening:null,repositoryCodeOpening:null,repositoryCodePending:null,profileLinkError: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:Ws()??`corrected`,triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:`table`,filesSearch:``,filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:Gs()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:Js()??Vs,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:cn(ac?.mode??`e2e`,oc),serverModeConfig:ac?.mode??null,serverModeSelection:oc,deepviewScanServer:null,githubNewIssueLabels:ac?.githubNewIssueLabels??``,localMode:!1,managed:ac?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map,managedIssues:new Map});function F(){return P.serverMode===`managed`&&!P.localMode}function sc(e){P.localMode=!!e}function cc(e,t=globalThis.location?.pathname??``){let n=sn(e,t);n&&(P.serverModeSelection=`managed`),P.serverModeConfig=e,P.serverMode=cn(e,P.serverModeSelection),P.serverModeSelection!==P.serverMode&&(P.serverModeSelection=null),(n||P.serverMode===`e2e`||on(e))&&sc(!1)}function lc(){return on(P.serverModeConfig)?(P.serverModeSelection=P.serverMode===`managed`?`e2e`:`managed`,P.serverMode=P.serverModeSelection,sc(!1),!0):P.serverMode===`managed`&&(sc(!P.localMode),!0)}function uc(){return P.serverMode===`standalone`&&P.localMode?`local`:P.serverMode===`managed`?P.localMode?`local`:`managed`:P.serverMode}function dc(){F()||P.repoEditing||P.currentFile&&(P.repoUrl=Zs(P.currentFile))}Ra(()=>{dc()});var fc=`__meta__`,pc=`deepview-reports`,mc=`deepview-bundles`,hc=`deepview.report:`;function gc(e,t,n,r){return navigator.locks.request(`deepview-storage/${e}/${t}`,{mode:n},r)}function _c(e,t,n){return gc(e,t,`shared`,n)}function vc(e,t,n){return gc(e,t,`exclusive`,()=>navigator.locks.request(io,{mode:`shared`},n))}var yc=!1;async function bc(e,{create:t,warnOnce:n=!1}={}){try{return await(await navigator.storage.getDirectory()).getDirectoryHandle(e,{create:t})}catch(e){return n&&!yc&&(yc=!0,console.warn(`OPFS unavailable, falling back to gzipped localStorage (limited quota).`,e)),null}}async function xc(e,t){let n=await e.createWritable();try{await n.write(t),await n.close()}catch(e){try{await n.abort(e)}catch{}throw e}}async function Sc(e,t){if(!ka(e))return e;if(!To())throw Error(`storage: vault locked, cannot decrypt "${t}"`);return await Uo(e,t)}function Cc(e){return e.length===0||e.length>=18&&e[0]===31&&e[1]===139&&e.at(-4)===0&&e.at(-3)===0&&e.at(-2)===0&&e.at(-1)===0}async function wc(e,t){Pc(e)===t&&(console.warn(`storage: report "${e}" is an empty/corrupt on-disk entry \u2014 quarantining, will read as missing`),await navigator.locks.request(io,{mode:`exclusive`},async()=>{if(Pc(e)!==t)return;I(e),jc.delete(e);let n=await Dc();if(n)try{await n.removeEntry(e)}catch{}kc(e),I(e),Lc(e,`delete`)}))}async function Tc(e,t,n){try{(await t.getFile()).size===0&&await e.removeEntry(n)}catch{}}async function Ec(e,t,n,r,i=()=>{}){if(bo()&&!To())throw i(),Error(`storage: vault locked, cannot save ${r}`);let a=To(),o=a?await t(e,n):e;if(To()!==a)throw i(),Error(`storage: vault state changed mid-save for ${r}; retry`);return o}function Dc(){return bc(pc,{create:!0,warnOnce:!0})}function Oc(e){try{return localStorage.getItem(hc+e)}catch{return null}}function kc(e){try{localStorage.removeItem(hc+e)}catch{}}function Ac(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(hc)&&e.push(n.slice(hc.length))}return e}var jc=new Map,Mc=new Map,Nc=new Map;function I(e){Nc.set(e,(Nc.get(e)??0)+1)}function Pc(e){return Nc.get(e)??0}var Fc=new Set;function Ic(e){return Fc.add(e),()=>Fc.delete(e)}function Lc(e,t){for(let n of Fc)try{n(e,t)}catch(e){console.warn(`storage file-change listener:`,e)}}async function Rc(){let e=new Set(Ac()),t=await Dc();if(t)for await(let[n]of t.entries())e.add(n);return[...e].toSorted()}async function zc(e,t){if(typeof e!=`string`||e.includes(`\0`))throw Error(`Invalid report name: contains NUL byte or is not a string`);if(t===``)throw Error(`Refusing to save empty report "${e}"`);return I(e),vc(`report`,e,async()=>{let n=await Dc();if(n){let r=await Cn(da(t));r=await Ec(r,Ho,e,`"${e}"`,()=>I(e));let i=await n.getFileHandle(e,{create:!0}),a=await i.createWritable();try{await a.write(r),await a.close()}catch(t){jc.delete(e),I(e);try{await a.abort(t)}catch{}throw await Tc(n,i,e),t}jc.set(e,t),I(e),kc(e),Lc(e,`save`);return}let r=da(t);r=await Cn(r),r=await Ec(r,Ho,e,`"${e}"`,()=>I(e));let i=r.toBase64();try{localStorage.setItem(hc+e,i),jc.set(e,t),I(e),Lc(e,`save`)}catch(t){throw I(e),Error(`localStorage write failed for ${e}: ${t.message}`,{cause:t})}})}async function Bc(e,t){let n=Oc(e);if(n===null)return null;let r=Uint8Array.fromBase64(n);if(r=await Sc(r,e),Cc(r))throw await wc(e,t),Error(`File not found: ${e}`);return pa(await wn(r))}async function Vc(e){if(jc.has(e))return jc.get(e);if(Mc.has(e))return Mc.get(e);let t=Pc(e),n=(async()=>{let n=await Dc();if(n){let r;try{r=await n.getFileHandle(e)}catch(n){if(n instanceof DOMException&&n.name===`NotFoundError`){let n=await Bc(e,t);if(n!==null)return zc(e,n).catch(t=>{console.warn(`storage: stranded-localStorage migration of "${e}" failed:`,t)}),n}throw n}let i=await r.getFile(),a=new Uint8Array(await i.arrayBuffer());if(a=await Sc(a,e),Cc(a))throw await wc(e,t),Error(`File not found: ${e}`);if(a.length>=2&&a[0]===31&&a[1]===139){let e=await wn(a);return pa(e)}let o=pa(a);return zc(e,o).catch(t=>{console.warn(`storage: legacy-uncompressed migration of "${e}" failed:`,t)}),o}let r=await Bc(e,t);if(r===null)throw Error(`File not found: ${e}`);return r})();Mc.set(e,n);try{let r=await n;return Pc(e)===t&&jc.set(e,r),r}finally{Mc.delete(e)}}async function Hc(e){let t=Pc(e),n=await Dc(),r;if(n){let t=null;try{t=await n.getFileHandle(e)}catch(t){if(!(t instanceof DOMException)||t.name!==`NotFoundError`)throw t;let n=Oc(e);if(n===null)throw t;r=Uint8Array.fromBase64(n)}if(t){let e=await t.getFile();r=new Uint8Array(await e.arrayBuffer())}}else{let t=Oc(e);if(t===null)throw Error(`File not found: ${e}`);r=Uint8Array.fromBase64(t)}if(r=await Sc(r,e),Cc(r))throw await wc(e,t),Error(`File not found: ${e}`);return r}async function Uc(e){let t=await Hc(e),n=t[0]===31&&t[1]===139?await wn(t):t;return pa(n)}async function Wc(e,t){if(typeof e!=`string`||e.includes(`\0`))throw Error(`Invalid report name: contains NUL byte or is not a string`);if(Cc(t))throw Error(`Refusing to save empty report bytes for "${e}"`);return I(e),jc.delete(e),vc(`report`,e,async()=>{let n=await Ec(t,Ho,e,`"${e}"`,()=>I(e)),r=await Dc();if(r){let t=await r.getFileHandle(e,{create:!0}),i=await t.createWritable();try{await i.write(n),await i.close()}catch(n){I(e);try{await i.abort(n)}catch{}throw await Tc(r,t,e),n}I(e),kc(e),Lc(e,`save`);return}try{localStorage.setItem(hc+e,n.toBase64()),I(e),Lc(e,`save`)}catch(t){throw I(e),Error(`localStorage write failed for ${e}: ${t.message}`,{cause:t})}})}async function Gc(e){return I(e),jc.delete(e),Mc.delete(e),vc(`report`,e,async()=>{let t=await Dc();if(t){try{await t.removeEntry(e)}catch(t){if(!(t instanceof DOMException)||t.name!==`NotFoundError`)throw I(e),t}kc(e),I(e),Lc(e,`delete`);return}localStorage.removeItem(hc+e),I(e),Lc(e,`delete`)})}var Kc=`_meta.json`,qc=`.index-v1`,Jc=new Set;function Yc(e){return Jc.add(e),()=>Jc.delete(e)}function Xc(e,t){for(let n of Jc)try{n(e,t)}catch(e){console.warn(`storage bundle-change listener:`,e)}}function Zc(){return bc(mc,{create:!0})}function Qc(e){return e.replaceAll(`/`,`_`)}async function $c(e){let t;try{let n=await(await e.getFileHandle(Kc)).getFile();t=new Uint8Array(await n.arrayBuffer())}catch(e){return e instanceof DOMException&&e.name===`NotFoundError`||console.warn(`readBundleMeta: failed to read _meta.json:`,e),[]}let n=t;if(ka(t)){if(!To())return console.warn(`readBundleMeta: vault locked, returning empty bundle list`),[];try{n=await Go(t,fc)}catch(e){return console.warn(`readBundleMeta: decrypt failed (tampering, key mismatch, or vault identity drift):`,e),[]}}try{let e=JSON.parse(pa(n));return Array.isArray(e)?e:[]}catch(e){return console.warn(`readBundleMeta: JSON.parse failed:`,e),[]}}async function el(e,t){let n=da(JSON.stringify(t));n=await Ec(n,Wo,fc,`bundle metadata`);try{await e.removeEntry(Kc)}catch{}await xc(await e.getFileHandle(Kc,{create:!0}),n)}var tl=`${mc}/${Kc}`;function nl(e){return navigator.locks.request(tl,e)}async function rl(){let e=await Zc();return e?[...await navigator.locks.request(tl,{mode:`shared`},()=>$c(e))].toSorted((e,t)=>e.name.localeCompare(t.name)):[]}function il(){return ol(()=>!0)}function al(){return ol((e,t)=>t.kind===`file`&&/^sha512-[A-Za-z0-9+_]{86}==$/u.test(e))}async function ol(e){if(typeof navigator>`u`||!navigator.storage?.getDirectory)return!1;let t=await bc(mc,{create:!1});if(!t)return!1;try{for await(let[n,r]of t.entries())if(e(n,r))return!0}catch{}return!1}async function sl(e,t){let n=await Zc();if(!n)throw Error(`Cannot save bundle ${e}: OPFS unavailable`);let r=t instanceof Uint8Array?t:da(t),i=await Sn(r),a=Qc(i),o=e.toLowerCase().endsWith(`.map`)?await Cn(r):r;return vc(`bundle`,i,async()=>{o=await Ec(o,Wo,i,`bundle "${e}"`);try{await n.removeEntry(a)}catch{}await xc(await n.getFileHandle(a,{create:!0}),o);try{await nl(async()=>{let t=await $c(n),r=t.findIndex(e=>e.integrity===i);r>=0?t[r]={integrity:i,name:e}:t.push({integrity:i,name:e}),await el(n,t)})}catch(e){try{await n.removeEntry(a),Xc(i,`delete`)}catch{}throw e}return Xc(i,`save`),{integrity:i,name:e}})}async function cl(e){let t=await Zc();if(t)return vc(`bundle`,e,async()=>{try{await t.removeEntry(Qc(e))}catch(e){if(!(e instanceof DOMException)||e.name!==`NotFoundError`)throw e}Xc(e,`delete`);try{await nl(async()=>{try{await t.removeEntry(Qc(e)+qc)}catch(e){if(!(e instanceof DOMException)||e.name!==`NotFoundError`)throw e}let n=await $c(t),r=n.filter(t=>t.integrity!==e);r.length!==n.length&&await el(t,r)})}finally{Xc(e,`delete`)}})}async function ll(e){let t=await Zc();if(!t)throw Error(`OPFS unavailable`);let n=await(await t.getFileHandle(Qc(e))).getFile(),r=new Uint8Array(await n.arrayBuffer());if(ka(r)){if(!To())throw Error(`storage: vault locked, cannot read bundle "${e}"`);r=await Go(r,e)}return r.length>=2&&r[0]===31&&r[1]===139?await wn(r):r}async function ul(e){let t=await Zc();if(!t||bo()&&!To())return null;try{let n=await t.getFileHandle(Qc(e)+qc),r=new Uint8Array(await(await n.getFile()).arrayBuffer());return ka(r)&&(r=await Go(r,e+qc)),JSON.parse(pa(await wn(r)))}catch{return null}}async function dl(e,t){let n=await Cn(da(JSON.stringify(t)));return navigator.locks.request(io,{mode:`shared`},()=>nl(async()=>{let t=await Zc();if(!t)return;await t.getFileHandle(Qc(e));let r=e+qc,i=await Ec(n,Wo,r,`bundle index`);await xc(await t.getFileHandle(Qc(r),{create:!0}),i)}))}async function fl(e,t){let n=await Dc();if(n){let r=null;try{r=await n.getFileHandle(e)}catch(e){if(!(e instanceof DOMException)||e.name!==`NotFoundError`)throw e}if(r){let i=await r.getFile(),a=await t(new Uint8Array(await i.arrayBuffer()));if(a===null)return;jc.delete(e),Mc.delete(e),I(e);let o=await n.getFileHandle(e,{create:!0});try{await xc(o,a)}catch(t){throw await Tc(n,o,e),t}I(e);return}}let r=Oc(e);if(r===null)return;let i=await t(Uint8Array.fromBase64(r));i!==null&&(jc.delete(e),Mc.delete(e),I(e),localStorage.setItem(hc+e,i.toBase64()),I(e))}function pl(e,t){return e.seal?n=>ka(n)?null:e.seal(n,t):n=>ka(n)?e.open(n,t):null}async function ml(e){let t=await Rc();for(let n of t)try{await fl(n,pl(e,Do(n)))}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`)continue;throw e}}var hl=({seal:e})=>ml({seal:e}),gl=({open:e})=>ml({open:e});async function _l(){let e=await Zc();if(!e)return{dir:null,keys:[]};let t=[];for await(let[n]of e.entries())t.push(n);return{dir:e,keys:t}}function vl(e){return e===Kc?fc:e.startsWith(`sha512-`)?e.replaceAll(`_`,`/`):null}async function yl(e,t,n){let r=await(await e.getFileHandle(t)).getFile(),i=await n(new Uint8Array(await r.arrayBuffer()));i!==null&&await xc(await e.getFileHandle(t,{create:!0}),i)}async function bl(e){let{dir:t,keys:n}=await _l();if(t)for(let r of n){let n=vl(r);if(n!==null)try{await yl(t,r,pl(e,Oo(n)))}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`)continue;throw e}}}var xl=({seal:e})=>bl({seal:e}),Sl=({open:e})=>bl({open:e});Ao(()=>{jc.clear(),Mc.clear()});var Cl=`deepview/workspace-id/v1
|
|
2
|
+
`;async function wl(e){let t=Uint8Array.fromBase64(e),n=da(Cl),r=new Uint8Array(n.length+t.length);r.set(n,0),r.set(t,n.length);let i=new Uint8Array(await crypto.subtle.digest(`SHA-256`,r)),a=Array.from(i.subarray(0,16),e=>e.toString(16).padStart(2,`0`)).join(``).split(``);a[12]=`8`,a[16]=(parseInt(a[16],16)&3|8).toString(16);let o=a.join(``);return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}function Tl(e){let t=new Set;function n(e){return t.add(e),()=>t.delete(e)}function r(n){for(let r of t)try{r(n)}catch(t){console.warn(`workspace ${e} listener failed:`,t)}}return{on:n,fire:r}}var El=Tl(`create`),Dl=Tl(`delete`),Ol=Tl(`privateKey`),kl=Tl(`report-membership`),Al=Tl(`bundle-membership`);El.on;var jl=Dl.on,Ml=Ol.on,Nl=kl.on,Pl=Al.on,Fl=El.fire,Il=Dl.fire,Ll=Ol.fire,Rl=kl.fire,zl=Al.fire,Bl=`deepview.workspaces`,Vl=1;function Hl(){try{let e=Ha(Bl);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 Ul(e){await Ua(Bl,JSON.stringify({version:Vl,workspaces:e}))}var Wl=Bl;function Gl(e){return navigator.locks.request(Wl,async()=>{await Ka();let t=Hl(),n=await e(t);if(n!==!1)return await Ul(t),n})}function Kl(e){return{id:e.id,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...e.reports]:[],bundles:Array.isArray(e.bundles)?[...e.bundles]:[]}}var ql=Hl().map(Kl);function Jl(){ql=Hl().map(Kl)}function Yl(e){ql=ql.filter(t=>t.id!==e.id),ql.push(Kl(e))}function Xl(e,t){let n=Array.isArray(e[t])?[...e[t]]:[],r=ql.find(t=>t.id===e.id);if(r){r[t]=n;return}ql.push(Kl(e))}function Zl(e){ql=ql.filter(t=>t.id!==e)}function L(){let e=Hl();for(let t of e)Array.isArray(t.reports)||(t.reports=[]),Array.isArray(t.bundles)||(t.bundles=[]);return e}var Ql=200;function $l(e){let t=(e??``).trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,``).slice(0,Ql)||null}async function eu(e){let t=$l(e);if(!t)return null;let n=new Uint8Array(32);crypto.getRandomValues(n);let r=n.toBase64(),i={id:await wl(r),name:t,privateKey:r,reports:[],bundles:[],createdAt:Date.now()};return await Gl(e=>!e.some(e=>e.id===i.id)&&(e.push(i),i))?(Yl(i),i):null}async function tu(e){await Gl(t=>{let n=t.findIndex(t=>t.id===e);return n<0?!1:(t.splice(n,1),!0)})&&(Il(e),Zl(e))}async function nu(e,t){let n=$l(t);return!(!n||!await Gl(t=>{let r=t.find(t=>t.id===e);return!r||r.name===n?!1:(r.name=n,r)}))}async function ru(e){let{next:t}=await Gl(t=>{let n=t.findIndex(t=>t.id===e.id),r=n>=0?t[n]:null,i=$l(e.name)??r?.name??`Workspace`,a=e.preserveBundles?Array.isArray(r?.bundles)?r.bundles:[]:Array.isArray(e.bundles)?e.bundles:[],o={id:e.id,name:i,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...new Set(e.reports)]:[],bundles:[...new Set(a)],createdAt:e.createdAt??Date.now()};return n>=0?t[n]=o:t.push(o),{previous:r,next:o}}),n=ql.find(e=>e.id===t.id)??null;return n==null?Fl(t.id):(n.privateKey!==t.privateKey&&Ll(t.id),au(n.reports,t.reports)||Rl(t.id),au(n.bundles,t.bundles)||zl(t.id)),Yl(t),t}async function iu({id:e,name:t,privateKey:n,createdAt:r}){let i=null;return await Gl(a=>{let o=$l(t);if(!o)return i={status:`name-collision`,existing:null},!1;let s=a.find(t=>t.id===e)??null;if(s)return i={status:`already-attached`,workspace:s},!1;let c=a.find(e=>$l(e.name)===o)??null;if(c)return i={status:`name-collision`,existing:c},!1;let l={id:e,name:o,privateKey:n,reports:[],bundles:[],createdAt:r??Date.now()};a.push(l),i={status:`attached`,workspace:l}}),i?.status===`attached`&&(Fl(i.workspace.id),Yl(i.workspace)),i}function au(e,t){let n=new Set(e),r=new Set(t);if(n.size!==r.size)return!1;for(let e of n)if(!r.has(e))return!1;return!0}async function ou({identifier:e,workspaceId:t,field:n,fire:r,additive:i=!1,from:a=void 0}){let o=await Gl(r=>{if((r.find(t=>Array.isArray(t[n])&&t[n].includes(e))?.id??null)===(t??null))return!1;let o=null;if(t!=null&&(o=r.find(e=>e.id===t)??null,!o))return!1;let s=new Set;if(!i)for(let t of r)a!==void 0&&t.id!==a||(Array.isArray(t[n])||(t[n]=[]),t[n].includes(e)&&(t[n]=t[n].filter(t=>t!==e),s.add(t.id)));if(o&&(Array.isArray(o[n])||(o[n]=[]),o[n].includes(e)||(o[n].push(e),s.add(o.id))),s.size===0)return!1;let c=new Map;for(let e of s){let t=r.find(t=>t.id===e);t&&c.set(e,t)}return{affected:s,snapshot:c}});if(!o)return;let{affected:s,snapshot:c}=o;for(let e of s){r(e);let t=c.get(e);t&&Xl(t,n)}}function su(e,t){return{move:(n,r)=>ou({identifier:n,workspaceId:r,field:e,fire:t}),add:(n,r)=>ou({identifier:n,workspaceId:r,field:e,fire:t,additive:!0}),remove:(n,r)=>ou({identifier:n,field:e,fire:t,from:r})}}var cu=su(`reports`,Rl),lu=su(`bundles`,zl),uu=cu.move,du=cu.add,fu=cu.remove,pu=lu.move,mu=lu.add,hu=lu.remove;function gu(){let e=Hl().map(Kl),t=new Map(ql.map(e=>[e.id,e])),n=new Map(e.map(e=>[e.id,e]));for(let e of t.keys())n.has(e)||Il(e);for(let[e,r]of n){let n=t.get(e);if(!n){Fl(e);continue}n.privateKey!==r.privateKey&&Ll(e),au(n.reports,r.reports)||Rl(e),au(n.bundles,r.bundles)||zl(e)}ql=e}Ra(()=>{gu()});function _u(e=[]){let t=new Map,n=(e,n)=>{t.has(e)||t.set(e,new Set),t.get(e).add(n)},r=e=>{for(let t of e.slice(1))n(e[0],t),n(t,e[0])};for(let t of e)r(t);return{add:r,linkedIds:e=>t.get(e)??[]}}function vu(e){let t=[];for(let n of e){let e=n?.revalidateInputs;n?.isApp!==!0||typeof n.id!=`string`||!Array.isArray(e)||t.push([n.id,...e.filter(e=>typeof e==`string`&&e!==``)])}return t}var yu=null;function bu(){yu=null}function xu(){return F()&&yu?.teamId===P.currentManagedTeam&&yu?.userId===P.managedSession?.id&&yu?.role===P.managedSession?.role?yu:null}function Su(e,t){let n=new Map,r=new Map,i=new Map,a=[],o=[];te(t.links??[],i);for(let e of t){let t=e.data;if(t.source===`links`&&Array.isArray(t.links)){a.push({id:e.id,name:e.filename,groups:t.links,skipped:0}),te(t.links,i);continue}let s=bi(t)??[],c=Rr([{groups:[s.flat().filter(e=>e&&typeof e==`object`)],tree:t.tree}]);for(let[i,a]of s.entries()){let s=(Array.isArray(a)?a:[a]).filter(e=>e&&typeof e==`object`).map(n=>{let r={...n,_managedReportId:e.id,_reportName:e.filename,_repoFallback:e.repo.github,_repoDirectory:e.repo.directory,_source:n.source??t.source??null,_bundleHashes:t.bundleHashes??[],_depsDirectory:c};return hi(r,t),r._analyzer=r._source??r.type??null,`isApp`in r||(r.isApp=Li(r,r._source)),r}),l={report:e.filename,managedReportId:e.id,index:i,members:s};o.push(l);for(let e of s)n.has(e.id)||n.set(e.id,[]),n.get(e.id).push(l);for(let e of vu(s).flatMap(([,...e])=>e))r.has(e)||r.set(e,new Set),r.get(e).add(l)}}yu={teamId:e,userId:P.managedSession?.id,role:P.managedSession?.role,links:a,rows:o,byId:n,citedBy:r,duplicates:i},P.linksTick++,P.findingIndexTick++}function Cu(e){let t=xu();return[...new Set(e.flatMap(e=>t?.byId.get(e)??[]))]}function wu(e){let t=xu();return[...new Set(e.flatMap(e=>[...t?.citedBy.get(e)??[]]))]}function Tu(e){for(let t of Cu([e])){let n=Vi(t.members.find(t=>t.id===e));if(n)return n}return``}var Eu=`deepview.fileCounts`,Du=4,Ou=new Set([3,Du]),ku=null;function Au(){if(ku)return ku;let e;try{e=JSON.parse(Ha(Eu)||`{}`)}catch{e={}}return Ou.has(e?.__v)?e.__v=Du:e={__v:Du},ku=e,ku}function ju(){Ua(Eu,JSON.stringify(ku)).catch(e=>console.warn(`counts persist:`,e))}function Mu(e){if(e===`__v`)return;let t=Au()[e];if(t!==void 0)return typeof t==`number`?{count:t}:t}function Nu(e){return Mu(e)?.count}function Pu(e){return Mu(e)?.source}function Fu(e,t,n){let r=Au();r[e]={count:t,source:n??null},ju()}function Iu(e){let t=Au();delete t[e],ju()}function Lu(e){let t=b(e);return t?{count:ee(t.groups),source:y,recognized:!0}:Ci(e)}var Ru=null,zu=null,Bu=null;function Vu(e,t){for(let{names:n,onUpdate:r}of Bu)if(n.has(e))try{r(e,t)}catch(e){console.warn(`ensureCounts onUpdate:`,e)}}function Hu(e,t){if(Ru){t&&Bu.push({names:new Set(e),onUpdate:t});for(let t of e)zu.add(t);return Ru}return zu=new Set(e),Bu=t?[{names:new Set(e),onUpdate:t}]:[],Ru=(async()=>{await Promise.resolve();try{let e=Au();for(;zu.size>0;){let t=zu.values().next().value;if(zu.delete(t),e[t]===void 0)try{let n=await Vc(t);if(e[t]!==void 0)continue;let{count:r,source:i}=Lu(n);e[t]=i?{count:r,source:i}:{count:r},ju(),Vu(t,r)}catch{}}}finally{Ru=null,zu=null,Bu=null}})(),Ru}var Uu=new Map,Wu=new Map,Gu=new Map,Ku=new Set,qu=null,Ju=null,Yu=0,Xu=!1,Zu=!1;function Qu(){return F()||Zu}function $u(e){return Ku.add(e),()=>Ku.delete(e)}function ed(){for(let e of Ku)try{e()}catch(e){console.warn(`linked-findings listener:`,e)}}function td(){let e=new Map;for(let t of Uu.values())t&&te(t.groups,e);Wu=e}function nd(){if(F())return xu()?.links??[];let e=[];for(let[t,n]of Uu)n&&e.push({name:t,groups:n.groups,skipped:n.skipped});return e.toSorted((e,t)=>e.name.localeCompare(t.name))}function rd(){return F()?!!xu()?.duplicates.size:Wu.size>0}function id(e){if(F())return[...xu()?.duplicates.get(e)??[]];let t=Wu.get(e);return t?[...t]:[]}async function ad(e){if(Uu.has(e))return!1;let t=Gu.get(e)??0,n;try{n=await Vc(e)}catch{return!1}if(n==null)return!1;if((Gu.get(e)??0)!==t)return Xu=!0,!1;let r=b(n);if(Uu.set(e,r),r&&Pu(e)!==y)Fu(e,ee(r.groups),y);else if(!r&&Pu(e)===y){let{count:t,source:r}=Lu(n);Fu(e,t,r)}return r!==null}function od(){return F()?Promise.resolve():Ju||(Ju=(async()=>{try{let e,t;do{t=Yu,e=await Rc(),Zu&&e.some(e=>!Uu.has(e))&&(Zu=!1,ed());let n=e.filter(e=>Pu(e)===y);(await Promise.all(n.map(e=>ad(e)))).some(Boolean)&&(td(),ed())}while(t!==Yu);return e}catch(e){throw Zu&&(Zu=!1,ed()),e}finally{Ju=null}})(),Ju)}function sd(){return F()?Promise.resolve():qu||(qu=(async()=>{try{do{Xu=!1;let e=await od(),t=!1;for(let n of e)await ad(n)&&(t=!0);let n=!Xu&&e.every(e=>Uu.has(e)),r=Zu!==n;Zu=n,t&&td(),(t||r)&&ed()}while(Xu)}catch(e){throw Zu&&(Zu=!1,ed()),e}finally{qu=null}})(),qu)}Ic(e=>{let t=Zu;Zu=!1,Yu++,Gu.set(e,(Gu.get(e)??0)+1),Xu=!0;let n=Uu.get(e)!=null;Uu.delete(e),n&&td(),(n||t)&&ed()});var cd=()=>{};function ld(e){cd=typeof e==`function`?e:()=>{}}var ud=()=>{};function dd(e){ud=typeof e==`function`?e:()=>{}}var fd=()=>{};function pd(e){fd=typeof e==`function`?e:()=>{}}var md=`deepview.triage`,hd=`deepview.triage.pending`,gd=/^\d+$/u;async function _d(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream(`deflate`));return new Uint8Array(await new Response(t).arrayBuffer())}async function vd(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream(`deflate`));return new Uint8Array(await new Response(t).arrayBuffer())}var yd=`deepview.triage.save`,bd=0;function xd(){return!F()&&c(P.triage,P.reports)}function Sd(){xd();let e={};for(let[t,n]of P.triage){if(gd.test(t))continue;let r=yn(n);r&&(e[t]=r)}return e}function Cd(){if(F())return ud(),Promise.resolve();let e=++bd,t=Sd(),n=Object.keys(t).length===0,r=n?null:JSON.stringify(t);if(r!=null)try{localStorage.setItem(hd,r)}catch{}return navigator.locks.request(io,{mode:`shared`},async()=>{let t=null,i=null;if(r!=null)try{let e=await _d(da(r));i=To(),t=(i?await Bo(e):e).toBase64()}catch(e){console.warn(`Failed to save triage:`,e),cd();return}await navigator.locks.request(yd,()=>{try{if(e!==bd)return;if(r!=null&&To()!==i){queueMicrotask(()=>{Cd()});return}if(n)localStorage.removeItem(md),localStorage.removeItem(hd);else{localStorage.setItem(md,t);try{localStorage.removeItem(hd)}catch{}}}catch(e){console.warn(`Failed to save triage:`,e)}}),cd()})}async function wd(){let e=localStorage.getItem(hd);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(md);if(!t)return null;let n=Uint8Array.fromBase64(t);if(ka(n)){if(!To())throw Error(`triage: vault locked, cannot decrypt envelope`);n=await Vo(n)}let r=await vd(n);return JSON.parse(pa(r))}function Td(e,{replace:t=!1}={}){let n=P.triage;if(t){let t=null,r=localStorage.getItem(hd);if(r)try{t=JSON.parse(r)}catch{}let i=e=>t!=null&&e in t;for(let r of[...n.keys()]){if(gd.test(r))continue;let a=e?.[r],o=!e||!(r in e);!(i(r)&&t[r]?.color)&&(o||!a?.color)&&S(n,r,{color:void 0}),!(i(r)&&(t[r]?.triage||t[r]?.deleted))&&!hn(a)&&S(n,r,{triage:void 0}),!(i(r)&&t[r]?.comment)&&(o||typeof a?.comment!=`string`||!a.comment)&&S(n,r,{comment:void 0}),!(i(r)&&t[r]?.fix)&&(o||typeof a?.fix!=`string`||!a.fix)&&S(n,r,{fix:void 0}),!(i(r)&&t[r]?.flagged!==void 0)&&(o||a?.flagged===void 0)&&S(n,r,{flagged:void 0})}for(let r of[...n.keys()]){if(gd.test(r))continue;let a=n.get(r)?.ignoredReports;if(!a||a.length===0)continue;let o=e?.[r],s=!gn(o);for(let e of[...a]){if(i(r)&&Array.isArray(t[r]?.ignoredReports)&&t[r].ignoredReports.includes(e))continue;if(s){xn(n,r,e,!1);continue}let a=o?.ignoredReports;(!Array.isArray(a)||!a.includes(e))&&xn(n,r,e,!1)}}}if(e)for(let[t,r]of Object.entries(e)){let e=hn(r),i={};if(r&&r.color&&(i.color=r.color),e&&(i.triage=e),r&&typeof r.comment==`string`&&r.comment&&(i.comment=r.comment),r&&typeof r.fix==`string`&&r.fix&&(i.fix=r.fix),r&&typeof r.flagged==`boolean`&&(i.flagged=r.flagged),Object.keys(i).length>0&&S(n,t,i),gn(r)&&r&&Array.isArray(r.ignoredReports))for(let e of r.ignoredReports)typeof e==`string`&&xn(n,t,e,!0,vn(r,e))}}async function Ed(){if(F())return!1;if(![...P.triage.values()].some(e=>e.ignoredReports?.length))return;let e=await l(Object.fromEntries(P.triage),e=>_c(`report`,e,()=>Uc(e)));if(!F())return c(P.triage,e)}async function Dd(){if(!F())try{let e=await wd();if(F())return;Td(e),await Ed()&&await Cd()}catch(e){console.warn(`Failed to load triage:`,e)}}async function Od(){if(!F())try{let e=await wd();if(F())return;Td(e,{replace:!0}),await Ed()&&await Cd(),fd()}catch(e){console.warn(`Failed to reload triage:`,e)}}typeof window<`u`&&window.addEventListener(`storage`,e=>{e.key!==md&&e.key!==hd||Od()});var kd;function Ad(){return F()?Promise.resolve():kd??=Dd()}Ao(()=>{Od()}),Ao(()=>{F()||To()&&localStorage.getItem(hd)&&Cd()});async function jd({seal:e}){try{localStorage.removeItem(hd)}catch{}let t=localStorage.getItem(md);if(!t)return;let n=Uint8Array.fromBase64(t);if(ka(n))return;let r=await e(n,Eo());localStorage.setItem(md,r.toBase64())}async function Md({open:e}){try{localStorage.removeItem(hd)}catch{}let t=localStorage.getItem(md);if(!t)return;let n=Uint8Array.fromBase64(t);if(!ka(n))return;let r=await e(n,Eo());localStorage.setItem(md,r.toBase64())}function Nd(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function Pd(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}}async function Fd({id:e,name:t,privateKeyBase64:n,password:r}){if(typeof e!=`string`||!e)throw TypeError(`encodeShareLink: id required`);if(typeof t!=`string`||!t)throw TypeError(`encodeShareLink: name required`);if(typeof n!=`string`||!n)throw TypeError(`encodeShareLink: privateKey required`);if(typeof r!=`string`||!r)throw TypeError(`encodeShareLink: password required`);let i=await wl(n)===e?{v:1,n:t,k:n}:{v:1,i:e,n:t,k:n};return(await d(da(JSON.stringify(i)),r)).toBase64({alphabet:`base64url`,omitPadding:!0})}async function Id({encoded:e,password:t}){if(typeof e!=`string`||!e)throw Error(`malformed share link`);if(typeof t!=`string`||!t)throw TypeError(`decodeShareLink: password required`);let n;try{n=Uint8Array.fromBase64(e,{alphabet:`base64url`})}catch{throw Error(`malformed share link`)}let r=await f(n,t,{malformedMsg:`malformed share link`,wrongPasswordMsg:`wrong password or corrupt link`});try{return await Ld(r)}catch(e){throw Error(`wrong password or corrupt link`,{cause:e})}}async function Ld(e){let t=JSON.parse(pa(e));if(!t||typeof t!=`object`||typeof t.n!=`string`||typeof t.k!=`string`||!t.n||!t.k||t.i!==void 0&&(typeof t.i!=`string`||!t.i)||typeof t.i==`string`&&t.i.length>256||t.n.length>1024||Uint8Array.fromBase64(t.k).length!==32)throw Error(`shape`);return{id:typeof t.i==`string`?t.i:await wl(t.k),name:t.n,privateKeyBase64:t.k}}function Rd(e){return typeof location>`u`?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function zd(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 e of n.split(`&`)){let t=e.indexOf(`=`);if(!(t<0||e.slice(0,t)!==`share`))return e.slice(t+1)||null}return null}var Bd=new Map,Vd=new Map,Hd=new Map;function Ud(e){return F()?[...new Set(Cu([e]).map(e=>e.report))]:[...Bd.get(e)?.reports.keys()??[]]}function Wd(e){if(F())return Tu(e);for(let{title:t}of Bd.get(e)?.reports.values()??[])if(t)return t;return``}function Gd(e){if(F())return Cu(e);let t=new Set;for(let n of e)for(let e of Bd.get(n)?.reports.values()??[])for(let n of e.rows)t.add(n);return[...t]}function Kd(e){if(F())return wu(e);let t=new Set;for(let n of e)for(let e of Vd.get(n)?.values()??[])for(let n of e)t.add(n);return[...t]}function qd(e){return Hd.has(e)||Hd.set(e,{ids:new Set,inputs:new Set}),Hd.get(e)}function Jd(e,t){let n=!1;for(let r of t.members){let i=Bd.get(r.id);i||Bd.set(r.id,i={reports:new Map});let a=i.reports.get(e);if(a){a.rows.add(t);continue}i.reports.set(e,{title:Vi(r),rows:new Set([t])}),qd(e).ids.add(r.id),n=!0}for(let[,...n]of vu(t.members))for(let r of n){Vd.has(r)||Vd.set(r,new Map);let n=Vd.get(r);n.has(e)||n.set(e,new Set),n.get(e).add(t),qd(e).inputs.add(r)}return n}function Yd(e){let t=Hd.get(e);if(Hd.delete(e),!t)return!1;for(let n of t.ids){let t=Bd.get(n);t?.reports.delete(e),t?.reports.size===0&&Bd.delete(n)}for(let n of t.inputs){let t=Vd.get(n);t?.delete(e),t?.size===0&&Vd.delete(n)}return!0}var Xd=`solidity-bundle`,Zd=`0.0.0`;function Qd(e){if(e?.name!==Xd)return!1;let t=e.version;return!t||t===Zd}function $d(e){let t=e?.package?.npm,n=t?.version;if(typeof n==`string`&&n&&!Qd(t))return n;let r=e?.file;if(!r)return null;let i=/(?:^|\/)node_modules\/\.pnpm\/([^/]+)\/node_modules\//u.exec(r);if(!i)return null;let a=i[1],o=a.indexOf(`_`);o>0&&(a=a.slice(0,o));let s=a.lastIndexOf(`@`);return s<=0?null:a.slice(s+1)||null}function ef(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function tf(e,t,n,r){e.reports.add(n);let i=e._keyReports.get(t);i||e._keyReports.set(t,i=new Set);let a=!i.has(n);return i.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)),a}function nf(e,t,n,r){e._keyReports.delete(t),e.keys.delete(t);let i=e.findings.findIndex(e=>r(e)===t);i>=0&&e.findings.splice(i,1);let a=e.files.get(n);if(!a)return;let o=a.findIndex(e=>r(e)===t);o>=0&&a.splice(o,1),a.length===0&&e.files.delete(n)}function rf(e){let t=new Set;for(let n of e._keyReports.values())for(let e of n)t.add(e);e.reports=t}function af(e,t,n,r,i){let a=e.byVersion.get(t);a||(a=ef(),e.byVersion.set(t,a)),tf(a,r,i,n)}function of(e,t,n,r,i,a){let o=e.byVersion.get(t);if(!o)return;let s=o._keyReports.get(n);if(s&&(s.delete(i),s.size===0&&nf(o,n,r,a)),o._keyReports.size===0){e.byVersion.delete(t);return}rf(o)}function sf(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[n,r=``]=cf(e,`-`),[i,a=``]=cf(t,`-`),o=n.split(`.`),s=i.split(`.`),c=Math.max(o.length,s.length);for(let e=0;e<c;e++){let t=o[e]??`0`,n=s[e]??`0`,r=/^\d+$/u.test(t),i=/^\d+$/u.test(n);if(r&&i){let e=Number(n)-Number(t);if(e!==0)return e}else{let e=n.localeCompare(t);if(e!==0)return e}}return r===``&&a!==``?-1:r!==``&&a===``?1:a.localeCompare(r)}function cf(e,t){let n=e.indexOf(t);return n<0?[e,``]:[e.slice(0,n),e.slice(n+1)]}var lf=new Map,uf=new Map,df=new Map,ff=new Map;function pf(e){let t=e?.package?.npm;if(typeof t?.name==`string`&&t.name&&!Qd(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 mf(e){return typeof e?.file==`string`&&/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function hf(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 gf=new Set,_f=new Set,vf=null,yf=!1;function bf(e){return _f.add(e),()=>_f.delete(e)}function xf(){for(let e of _f)try{e()}catch{}}function Sf(e){return lf.get(e)?.list??[]}function Cf(){let e=0;for(let t of lf.values())e+=t.list.length;return e}function wf(){return uf}function Tf(){return df}function Ef(e,t){let n=lf.get(e);if(!n)return[];let r=n.reports.get(kf(t));return r?[...r]:[]}function Df(e,t){let n=uf.get(e);if(!n)return[];let r=n._keyReports.get(kf(t));return r?[...r]:[]}function Of(e,t){let n=df.get(e);if(!n)return[];let r=n._keyReports.get(kf(t));return r?[...r]:[]}function kf(e){let t=e.id?`id:${e.id}`:`c:${e.severity??``}|${e.description??``}|${e.file??``}|${e.line??``}`;return JSON.stringify([t,o(e)])}function Af(e,t,n){let r=ff.get(e);r||(r={hash:[],pkg:[],repo:[]},ff.set(e,r)),r[t].push(n)}function jf(e,t,n){let r=lf.get(e.fileHash);r||(r={keys:new Set,list:[],reports:new Map},lf.set(e.fileHash,r));let i=r.reports.get(t);i||(i=new Set,r.reports.set(t,i));let a=!i.has(n);return i.add(n),a&&Af(n,`hash`,{hash:e.fileHash,key:t}),r.keys.has(t)?a:(r.keys.add(t),r.list.push(e),!0)}function Mf(e,t,n){let r=pf(e);if(!r)return!1;let i=$d(e),a=uf.get(r);if(a||(a={...ef(),repos:new Set,byVersion:new Map,_repoReports:new Map},uf.set(r,a)),typeof e.repo?.github==`string`&&e.repo.github){a.repos.add(e.repo.github);let t=a._repoReports.get(e.repo.github);t||a._repoReports.set(e.repo.github,t=new Set),t.add(n)}af(a,i,e,t,n);let o=tf(a,t,n,e);return Af(n,`pkg`,{pkg:r,key:t,file:e.file,version:i}),o}function Nf(e,t,n,r){if(mf(e))return!1;let i=hf(e,r);if(!i)return!1;let a=df.get(i);a||(a=ef(),df.set(i,a));let o=tf(a,t,n,e);return o&&Af(n,`repo`,{repo:i,key:t,file:e.file}),o}function Pf(e){let t=ff.get(e);ff.delete(e),gf.delete(e);let n=Yd(e);if(!t)return n;let r=n;for(let{hash:n,key:i}of t.hash){let t=lf.get(n);if(!t)continue;let a=t.reports.get(i);if(a){if(a.delete(e)&&(r=!0),a.size===0){t.reports.delete(i),t.keys.delete(i);let e=t.list.findIndex(e=>kf(e)===i);e>=0&&t.list.splice(e,1)}t.keys.size===0&&lf.delete(n)}}let i=new Set;for(let{pkg:n,key:a,file:o,version:s}of t.pkg){let t=uf.get(n);if(!t)continue;let c=t._keyReports.get(a);if(c){if(c.delete(e)&&(r=!0),c.size===0&&nf(t,a,o,kf),of(t,s,a,o,e,kf),!i.has(n)){i.add(n);for(let n of[...t._repoReports.keys()]){let i=t._repoReports.get(n);i?.delete(e)&&i.size===0&&(t._repoReports.delete(n),t.repos.delete(n),r=!0)}}t._keyReports.size===0?uf.delete(n):rf(t)}}for(let{repo:n,key:i,file:a}of t.repo){let t=df.get(n);if(!t)continue;let o=t._keyReports.get(i);o&&(o.delete(e)&&(r=!0),o.size===0&&nf(t,i,a,kf),t._keyReports.size===0?df.delete(n):rf(t))}return r}async function Ff(e){if(gf.has(e))return!1;gf.add(e);try{let t=await Vc(e),n=await Ti(t);if(!n)return!1;let{data:r,findings:i}=n;if(i.length===0)return!1;a(i,r),yi(bi(r).map(e=>Array.isArray(e)?e:[e]),{source:r.source});let o=gi(r)??``;if(!o)try{o=Zs(e)}catch{}let s=!1;for(let t of i){let n=kf(t);t.fileHash&&jf(t,n,e)&&(s=!0),t.file&&Mf(t,n,e)&&(s=!0),t.file&&Nf(t,n,e,o)&&(s=!0)}for(let[t,n]of bi(r).entries()){let i=(Array.isArray(n)?n:[n]).filter(e=>e?.id);i.length!==0&&Jd(e,{report:e,index:t,members:i.map(e=>{let t=e.source??r.source??null;return{id:e.id,title:Vi(e),source:t,revalidate:Ii(e),isApp:e.isApp??Li(e,t),isSecurity:e.isSecurity,...e.file?{file:e.file,_depsDirectory:e._depsDirectory}:{},...Array.isArray(e.revalidateInputs)?{revalidateInputs:[...e.revalidateInputs]}:{}}})})&&(s=!0)}return gf.has(e)?s:(Pf(e),yf=!0,!1)}catch{return gf.delete(e),!1}}function If(){return F()?Promise.resolve():vf||(vf=(async()=>{try{do{yf=!1;let e=await Rc();for(let t of e)await Ff(t)&&xf()}while(yf)}finally{vf=null}})(),vf)}function Lf(){return vf}Ic(e=>{Pf(e)&&xf()}),$s(e=>{Pf(e)&&xf(),If().catch(()=>{})});var Rf=new Map,zf=new Map,Bf=new Map,Vf=new Set;function Hf(e){return Vf.add(e),()=>Vf.delete(e)}function Uf(){for(let e of Vf)try{e()}catch{}}function Wf(e,t){if(!e||!t)return!1;let n=!zf.has(e);zf.set(e,t),Bf.delete(e);for(let[n,r]of t){if(!r)continue;let t=Rf.get(r);t||(t=new Map,Rf.set(r,t)),t.set(e,n)}return n&&Uf(),n}function Gf(e){let t=zf.get(e);if(zf.delete(e),Bf.delete(e),t){for(let n of t.values()){let t=Rf.get(n);t&&(t.delete(e),t.size===0&&Rf.delete(n))}Uf()}}function Kf(e,t){let n=zf.get(e);if(!n||typeof t!=`string`||t===``)return null;if(n.has(t))return t;let r=Jf(e,n).get(qf(t));if(!r)return null;let i=t.startsWith(`/`)?t:`/${t}`,a=null;for(let e of r)if(e.endsWith(i)){if(a!==null)return null;a=e}return a}function qf(e){let t=e.lastIndexOf(`/`);return t<0?e:e.slice(t+1)}function Jf(e,t){let n=Bf.get(e);if(n)return n;n=new Map;for(let e of t.keys()){let t=qf(e),r=n.get(t);r?r.push(e):n.set(t,[e])}return Bf.set(e,n),n}function Yf(e){if(!e)return[];let t=Rf.get(e);if(!t)return[];let n=[];for(let[e,r]of t)n.push({integrity:e,file:r});return n}function Xf(e){return zf.has(e)}async function Zf(e){if(!e)return null;let t=L(),n=(await Promise.all(t.map(e=>zr(`workspace`,e.id)))).indexOf(e);return n===-1?null:t[n]}async function Qf(e){if(!e)return null;let t=await Rc(),n=(await Promise.all(t.map(e=>zr(`report`,e)))).indexOf(e);return n===-1?null:t[n]}async function $f(e,t){let n;try{n=await Vc(e)}catch{return!1}return n==null?!1:(await Ti(n))?.findings.some(e=>e.id===t)??!1}async function ep(e,{skip:t=[]}={}){if(!e)return null;let n=new Set(t),r=(await Rc()).filter(e=>!n.has(e));for(let t of r)if(await $f(t,e))return t;return null}function tp(e){return e?L().filter(t=>t.reports.includes(e)):[]}function np(e){if(!e)return``;for(let t of e.split(`
|
|
3
|
+
`))if(t.trim())return t.trim();return``}function rp(e){let t=new Set(e.map(e=>e.id)),n=new Map;for(let e of P.reports)for(let r of e.groups)for(let e of r){let r=e.id??String(e._id);if(t.has(r)&&!n.has(r)&&(n.set(r,{severity:e.severity,file:e.file,line:e.line,description:np(e.description)}),n.size===t.size))return n}return n}var ip=`deepview.lastFile`,ap=null;function op(){return ap||(ap=sp(),ap.catch(()=>{ap=null})),ap}async function sp(){try{await Ad()}catch{}let e=await Rc(),t=new Set(e),n=new Set(e),r=new Set;for(let n of e){if(!n.toLowerCase().endsWith(`.deepseek`))continue;let e=n.slice(0,-9)+`.md`;if(t.has(e))continue;let i;try{i=await Vc(n),await zc(e,i),await Gc(n)}catch(t){console.warn(`migrate: failed to rename ${n} -> ${e}`,t);continue}t.delete(n),t.add(e),r.add(n);let a=Nu(n);if(Iu(n),a===void 0){let{count:t,source:n}=Lu(i);Fu(e,t,n)}else{let{source:t}=Lu(i);Fu(e,a,t)}let o=Zs(n);o&&(tc(n,``),tc(e,o));let s=!1;for(let[t,r]of[...P.triage])r.ignoredReports?.includes(n)&&(xn(P.triage,t,n,!1),xn(P.triage,t,e,!0,vn(r,n)),s=!0);s&&await Cd();let c=Pd(Ha(ip));if(c?.name===n)try{await Ua(ip,Nd(e,c.workspaceId))}catch{}}for(let e of L())for(let t of e.reports){if(!t.toLowerCase().endsWith(`.deepseek`)||!r.has(t)&&n.has(t))continue;let i=t.slice(0,-9)+`.md`;await fu(t,e.id),await du(i,e.id)}}function cp(){return{...lp,hydrateKey:qa,localContentSyncStatus:mn,readTriageBlob:async()=>(await u(await wd(),e=>_c(`report`,e,()=>Uc(e)))).entries,reportSyncHash:e=>_c(`report`,e,async()=>en(await Hc(e)))}}var lp={hasStoredBundleBytes:al,listBundles:rl,listFiles:Rc,onBundleMutated:Yc,onFileMutated:Ic,readBundle:ll,readFile:Uc,withStoredItem:_c,isEncryptionEnabled:bo,isUnlocked:xo,onVaultStateChange:Ao,unlockEncryption:Mo};function up(e=lp){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),n=(n,r,i)=>{let a=!1,o=!1,s=e.onVaultStateChange(()=>{a=!0}),c=r===`report`?e.onFileMutated:e.onBundleMutated,l=i===void 0?null:c(e=>{e===i&&(o=!0)});return{check(){if(n?.throwIfAborted(),t()||a)throw Error(`Local data is locked or has changed. Unlock it and select the file again.`);if(o)throw Error(`This local ${r} changed. Select it again before importing.`)},unsubscribe(){s(),l?.()}}},r=async t=>t===`report`?(await e.listFiles()).map(e=>({value:e,label:e})):(await e.listBundles()).map(e=>({value:e.integrity,label:e.name,secondary:e.integrity}));return{get locked(){return t()},async hasData(n){return n===`report`?(await e.listFiles()).length>0:t()?e.hasStoredBundleBytes():(await e.listBundles()).length>0},async list(e){let t=n();try{t.check();let n=await r(e);return t.check(),n}finally{t.unsubscribe()}},unlock(t){return e.unlockEncryption(t)},subscribe(t){let n=e.onVaultStateChange(()=>t()),r=e.onFileMutated(e=>t({kind:`report`,value:e})),i=e.onBundleMutated(e=>t({kind:`bundle`,value:e}));return()=>{n(),r(),i()}},async importItem(t,i,a,{signal:o}={}){let s=n(o,t,i);try{s.check();let{result:n}=await e.withStoredItem(t,i,async()=>{s.check();let n=(await r(t)).find(e=>e.value===i);if(s.check(),!n)throw Error(`This file is no longer in local storage. Select another file.`);let o=t===`report`?await e.readFile(i):await e.readBundle(i);s.check();let c=new File([o],n.label,{type:t===`report`?`text/plain`:`application/octet-stream`});try{let e=Promise.resolve(a(c));return e.catch(()=>{}),{result:e}}finally{s.unsubscribe()}});return n}finally{s.unsubscribe()}}}}function dp(){return typeof navigator<`u`&&typeof navigator.storage==`object`&&navigator.storage!==null}async function fp(){if(!dp()||typeof navigator.storage.persist!=`function`)return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function pp(){let e={supported:dp(),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 mp=`deepview.scan.access`,hp=new Set;function gp(){for(let e of hp)e()}function _p(){return Ha(mp)!=null}function vp(e){try{let t=JSON.parse(Ha(mp)),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 yp({server:e,deepview:t,provider:n,token:r}){await Ua(mp,JSON.stringify({server:e,deepview:t,provider:n,token:r})),gp()}async function bp(){await Wa(mp),gp()}function xp(e){hp.add(e);let t=Ra(e);return()=>{hp.delete(e),t()}}var Sp=1;function Cp(){let e=Sd(),t=Xs();return{version:Sp,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function wp(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,`-`).slice(0,19)}.json.gz`}async function Tp(){let e=Cp();return{blob:new Blob([await Tn(JSON.stringify(e))]),filename:wp()}}async function Ep(e){let t;try{t=await En(new Uint8Array(await e.arrayBuffer()))}catch(e){throw Error(`Failed to gunzip: ${e.message}`,{cause:e})}let n;try{n=JSON.parse(t)}catch(e){throw Error(`Failed to parse JSON: ${e.message}`,{cause:e})}if(!n||typeof n!=`object`)throw Error(`Invalid backup file (not an object)`);if(n.version!==Sp)throw Error(`Unsupported backup version: ${n.version} (expected ${Sp})`);if(!n.triage||typeof n.triage!=`object`)throw Error("Backup is missing the `triage` map");if(!n.repoUrls||typeof n.repoUrls!=`object`)throw Error("Backup is missing the `repoUrls` map");return n}async function Dp(e,t){if(![`replace`,`prefer-imported`,`prefer-current`].includes(t))throw Error(`Unknown merge mode: ${t}`);if(!e||typeof e!=`object`)throw Error(`Invalid payload: not an object`);if(!e.triage||typeof e.triage!=`object`||Array.isArray(e.triage))throw Error("Invalid payload: missing or non-object `triage`");if(!e.repoUrls||typeof e.repoUrls!=`object`||Array.isArray(e.repoUrls))throw Error("Invalid payload: missing or non-object `repoUrls`");let n=e.triage,r=P.triage;if(t===`replace`)for(let e of[...r.keys()])gd.test(e)||r.delete(e);let i=t===`prefer-current`;for(let[e,t]of Object.entries(n)){if(gd.test(e)||!t||typeof t!=`object`)continue;typeof t.color==`string`&&t.color&&(!i||!r.get(e)?.color)&&S(r,e,{color:t.color});let n=hn(t);if(n&&(!i||!hn(r.get(e)))&&S(r,e,{triage:n}),typeof t.comment==`string`&&t.comment&&(!i||!r.get(e)?.comment)&&S(r,e,{comment:t.comment}),typeof t.fix==`string`&&t.fix&&(!i||!r.get(e)?.fix)&&S(r,e,{fix:t.fix}),typeof t.flagged==`boolean`&&(!i||r.get(e)?.flagged===void 0)&&S(r,e,{flagged:t.flagged}),Array.isArray(t.ignoredReports)&&gn(r.get(e)))for(let n of t.ignoredReports)typeof n==`string`&&xn(r,e,n,!0,vn(t,n))}await Ed(),await Cd();let a=0,o=null;try{await nc(e.repoUrls,t),a=Object.keys(e.repoUrls).length}catch(e){console.warn(`applyTriageImport: repo-URL import failed:`,e),o=e}return{triageEntries:Object.keys(n).length,repoUrls:a,repoUrlError:o}}function Op(e){return e?.name===`NotFoundError`||typeof e?.message==`string`&&e.message.startsWith(`File not found:`)}async function kp(e){let t=new Set;for(let n of e){let e;try{e=await Vc(n)}catch(e){if(Op(e))continue;throw Error(`Failed to read ${n}: ${e.message}`,{cause:e})}if(e==null)continue;let r=await Ti(e);if(r)for(let e of r.findings)e.id&&t.add(e.id)}return t}function Ap(){let e=new Set;for(let t of P.triage.keys())gd.test(t)||e.add(t);return e}async function jp(e){let t=Ap();if(t.size===0)return{orphanedCount:0,sharedCount:0};let n=await kp(e),r=new Set;for(let e of t)n.has(e)&&r.add(e);if(r.size===0)return{orphanedCount:0,sharedCount:0};let i=await Rc(),a=new Set(e),o=await kp(i.filter(e=>!a.has(e))),s=0,c=0;for(let e of r)o.has(e)?c++:s++;return{orphanedCount:s,sharedCount:c}}async function Mp(){let e=new Set(P.triage.keys()),t=[];for(let[e,n]of P.triage)if(n.ignoredReports)for(let r of n.ignoredReports)t.push({id:e,report:r});let n=await Rc(),r=new Set(n),i=await kp(n),a=!1;for(let t of e){if(gd.test(t)||i.has(t))continue;let e=P.triage.get(t);!e||!(e.color||hn(e)||e.comment||e.fix||e.flagged!==void 0)||S(P.triage,t,{color:void 0,triage:void 0,comment:void 0,fix:void 0,flagged:void 0,deleted:void 0})&&(a=!0)}for(let{id:e,report:n}of t)gd.test(e)||i.has(e)&&r.has(n)||_n(P.triage,e,n)&&xn(P.triage,e,n,!1)&&(a=!0);a&&await Cd()}var Np=1;async function Pp(e){let t=new Set,n=await Ti(e);for(let e of n?.findings??[])e.id&&t.add(e.id);return t}function Fp(e){return(e??``).replaceAll(/[^a-zA-Z0-9._-]+/gu,`_`).replaceAll(/^_+|_+$/gu,``)||`workspace`}async function Ip(e){if(!Array.isArray(e)||e.length===0)return[];let t=await rl(),n=new Map(t.map(e=>[e.integrity,e.name])),r=[];for(let t of e){let e=n.get(t);if(!e)continue;let i;try{i=await ll(t)}catch(e){console.warn(`Workspace export: failed to read bundle ${t}: ${e?.message??e}`);continue}r.push({integrity:t,name:e,data:i.toBase64()})}return r}function Lp(e){let t=Zs(e);return t?{github:t}:null}async function Rp(e){let t=[];for(let n of e.reports??[]){let e;try{e=await Vc(n)}catch(e){console.warn(`Workspace export: skipping ${n}: ${e?.message??e}`),(e instanceof DOMException&&e.name===`NotFoundError`||typeof e?.message==`string`&&e.message.startsWith(`File not found:`))&&await uu(n,null);continue}let r=Lp(n);t.push(r?{name:n,content:e,repo:r}:{name:n,content:e})}return t}async function zp(e,{includeBundleBytes:t=!1}={}){let n=await Rp(e),r=new Set;for(let e of n)for(let t of await Pp(e.content))r.add(t);let i=new Set(e.reports??[]),a={};for(let[e,t]of P.triage){if(!r.has(e))continue;let n=(t.ignoredReports??[]).filter(e=>i.has(e)),o=yn({...t,ignoredReports:n});o&&(a[e]=o)}let o={};for(let e of n)e.repo?.github&&(o[e.name]=e.repo.github);let s=(e.bundles??[]).filter(e=>typeof e==`string`&&e.length>0),c={version:Np,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:n,bundles:s,repoUrls:o,triage:a};if(t){let e=await Ip(s);e.length>0&&(c.bundleBlobs=e)}return c}async function Bp(e,{includeBundleBytes:t=!1}={}){let n=await zp(e,{includeBundleBytes:t});return{blob:new Blob([await Tn(JSON.stringify(n))]),filename:`${Fp(e.name)}.deepview-workspace.json.gz`}}async function Vp(e,t,{includeBundleBytes:n=!1}={}){if(typeof t!=`string`||!t)throw TypeError(`buildWorkspaceExportEncrypted: password required`);let{blob:r}=await Bp(e,{includeBundleBytes:n}),i=new Uint8Array(await r.arrayBuffer()),a=await m(i,t);return{blob:new Blob([a],{type:`application/octet-stream`}),filename:`${Fp(e.name)}.deepview-workspace.enc`}}async function Hp(e,{password:t,includeBundleBytes:n=!1}={}){return typeof t==`string`&&t?await Vp(e,t,{includeBundleBytes:n}):await Bp(e,{includeBundleBytes:n})}async function Up(e){return{reports:await Rp(e)}}async function Wp(e){let t=await Up(e);return{blob:new Blob([await Tn(JSON.stringify(t))]),filename:`${Fp(e.name)}.deepview-reports.json.gz`}}function Gp(e){return hn(e)??null}async function Kp(e){let t=new Map;for(let n of e??[]){if(typeof n?.content!=`string`)continue;let e=await Ti(n.content);if(e)for(let n of e.findings)!n.id||t.has(n.id)||t.set(n.id,{severity:n.severity,file:n.file,line:n.line,description:np(n.description)})}return t}async function qp(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return;let r=P.triage,i=[];for(let[t,n]of Object.entries(e)){if(!n||typeof n!=`object`)continue;let e=r.get(t)?.color,a=typeof n.color==`string`?n.color:void 0;a&&e&&e!==a?i.push({id:t,property:`color`,local:e,imported:a}):a&&a!==e&&S(r,t,{color:a});let o=r.get(t)?.comment??``,s=typeof n.comment==`string`?n.comment:``;s&&o&&o!==s?i.push({id:t,property:`comment`,local:o,imported:s}):s&&s!==o&&S(r,t,{comment:s});let c=r.get(t)?.fix??``,l=typeof n.fix==`string`?n.fix:``;l&&c&&c!==l?i.push({id:t,property:`fix`,local:c,imported:l}):l&&l!==c&&S(r,t,{fix:l});let u=Gp(n),d=hn(r.get(t))??null;u&&d&&d!==u?i.push({id:t,property:`triage`,local:d,imported:u}):u&&!d&&S(r,t,{triage:u,...u===`ignored`?{}:{ignoredReports:void 0}});let f=r.get(t)?.flagged,p=typeof n.flagged==`boolean`?n.flagged:void 0;p!==void 0&&f!==void 0&&f!==p?i.push({id:t,property:`flagged`,local:f?`flagged`:`not flagged`,imported:p?`flagged`:`not flagged`}):p!==void 0&&p!==f&&S(r,t,{flagged:p});let m=Array.isArray(n.ignoredReports)?n.ignoredReports:[];if(gn(r.get(t)))for(let e of m)typeof e==`string`&&xn(r,t,e,!0,vn(n,e))}if(i.length>0&&t){let e=await t(i,n??new Map);e&&Jp(i,e)}await Cd()}function Jp(e,t){for(let n of e)t[`${n.id}:${n.property}`]===`imported`&&Yp(n.id,n.property)===n.local&&(n.property===`color`?S(P.triage,n.id,{color:n.imported}):n.property===`comment`?S(P.triage,n.id,{comment:n.imported}):n.property===`fix`?S(P.triage,n.id,{fix:n.imported}):n.property===`triage`?S(P.triage,n.id,{triage:n.imported,...n.imported===`ignored`?{}:{ignoredReports:void 0}}):n.property===`flagged`&&S(P.triage,n.id,{flagged:n.imported===`flagged`||n.imported!==`not flagged`&&void 0}))}function Yp(e,t){if(t===`color`)return P.triage.get(e)?.color;if(t===`triage`)return hn(P.triage.get(e))??null;if(t===`comment`)return P.triage.get(e)?.comment??``;if(t===`fix`)return P.triage.get(e)?.fix??``;if(t===`flagged`){let t=P.triage.get(e)?.flagged;return t===!0?`flagged`:t===!1?`not flagged`:``}}async function Xp(e){if(Array.isArray(e))for(let t of e){let e;try{e=Uint8Array.fromBase64(t.data)}catch(e){console.warn(`Workspace import: failed to decode bundle ${t.integrity}: ${e?.message??e}`);continue}try{let n=await sl(t.name,e);n?.integrity!==t.integrity&&console.warn(`Workspace import: bundle ${t.name} integrity mismatch (claimed ${t.integrity}, computed ${n?.integrity})`)}catch(e){console.warn(`Workspace import: failed to save bundle ${t.name}: ${e?.message??e}`)}}}async function Zp(e,{conflictResolver:t}={}){let n=[];for(let t of e.reports)if(typeof t?.name==`string`&&typeof t?.content==`string`)try{await zc(t.name,t.content);let{count:e,source:r}=Lu(t.content);Fu(t.name,e,r??Pu(t.name)),n.push(t.name)}catch(e){console.warn(`Workspace import: failed to save ${t.name}: ${e.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await Xp(e.bundleBlobs);let r=e.triage&&Object.keys(e.triage).length>0?await Kp(e.reports):new Map;await qp((await u(e.triage,t=>e.reports.find(e=>e.name===t)?.content)).entries,t,r);let i=Array.isArray(e.bundles),a=i?e.bundles.filter(e=>typeof e==`string`&&e.length>0):[],o=await ru({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}),s=new Set(n),c=Object.create(null);if(e.repoUrls&&typeof e.repoUrls==`object`)for(let[t,n]of Object.entries(e.repoUrls))!s.has(t)||typeof n!=`string`||!n||(c[t]=n);if(Object.keys(c).length>0)try{await rc(c)}catch(e){console.warn(`Workspace import: failed to adopt per-report repository URLs:`,e)}return o}function Qp(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>h?`reports count (${e.reports.length}) exceeds cap (${h})`:null:`reports field must be an array`}function $p(e){return Qp(e)===null}async function em(e){if(p(e))return{kind:`encrypted`};let t;try{t=await En(e)}catch(e){throw Error(`gzip decompression failed: ${e.message}`,{cause:e})}let n;try{n=JSON.parse(t)}catch{return{kind:`workspace`,text:t}}return $p(n)?{kind:`reports`,reports:n.reports}:{kind:`workspace`,text:t}}var tm=`deepview.workspaceApp`,nm=2,rm=new Set,im=new Set,am=0,om=0,sm=0,cm=new Map,lm=Promise.resolve(),um=null;function dm(e=Ha(tm)){try{let t=JSON.parse(e);if(t?.version===nm&&t.entries&&typeof t.entries==`object`)return t}catch{}return{version:nm,revision:``,links:`[]`,entries:{}}}function fm(){for(let e of rm)e()}function pm(e){let t=lm.then(()=>$a(tm,t=>e(dm(t))));return lm=t.catch(e=>console.warn(`workspace App cache:`,e)),t}function mm(e){return JSON.stringify(e.reports.toSorted())}function hm(){return JSON.stringify(nd().map(({name:e,groups:t})=>({name:e,groups:t})))}function gm(e){return Qu()&&e.links===hm()}function _m(e,t){return e.workspaceRevisions?.[t]??``}function vm(e,t,n){return n.workspaceId===t?.id&&n.workspaceEpoch===(cm.get(t?.id)??0)&&n.workspaceRevision===_m(e,t?.id)}function ym(e,t,n){return n.reportEpoch===sm&&n.reportRevision===(e.reportRevision??e.revision)&&vm(e,t,n)}function bm(e,t){return ym(dm(),e,t)}function xm(e,t){if(am||im.has(e.id))return null;let n=t.entries[e.id];return!n||n.reports!==mm(e)||typeof n.appMode!=`boolean`||n.appMode&&(!Number.isSafeInteger(n.appFindings)||n.appFindings<0)?null:n}function Sm(e){return xm(e,dm())?.appMode??null}function Cm(e){let t=dm(),n=xm(e,t);return!n||!gm(t)?null:n}async function wm(e,t=null){let n;do n=lm,await n;while(n!==lm);let r=dm(),i=r.reportRevision??r.revision;return t&&(!ym(r,e,t)||!gm(r))?null:{epoch:om,revision:r.revision,reportEpoch:sm,reportRevision:i,workspaceId:e?.id,workspaceEpoch:cm.get(e?.id)??0,workspaceRevision:_m(r,e?.id)}}async function Tm(e,t,n){let r=!1;return await pm(i=>{if(n.epoch!==om||n.revision!==i.revision||!vm(i,e,n)||!gm(i))return;let a=L().find(t=>t.id===e.id);if(a&&mm(a)===mm(e))return i.entries[e.id]={...t,reports:mm(e)},r=!0,JSON.stringify(i)}),r&&fm(),r}function Em(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)om++,t===void 0&&sm++,am++;else for(let t of e)cm.set(t,(cm.get(t)??0)+1),im.add(t);return fm(),pm(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 t of e)n.workspaceRevisions[t]=crypto.randomUUID(),delete n.entries[t]}return t!==void 0&&(n.links=t),JSON.stringify(n)}).finally(()=>{if(e===null)am--;else for(let t of e)im.delete(t);fm()})}function Dm(e){return rm.add(e),()=>rm.delete(e)}Ra(()=>{let e=Ha(tm);e!==um&&(um=e,fm())}),Nl(e=>{Em([e]).catch(()=>{})}),jl(e=>{Em([e]).catch(()=>{})}),Ic(e=>{Em(L().filter(t=>t.reports.includes(e)).map(e=>e.id)).catch(()=>{})}),$u(()=>{if(!Qu()){fm();return}let e=hm();dm().links===e?fm():Em(null,e).catch(()=>{})});var Om=null,km=null;function Am(){for(let e of[`br`,`brotli`])try{return new DecompressionStream(e),e}catch{}return null}async function jm(e,t){let n=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(n).arrayBuffer())}async function Mm(){if(`serviceWorker`in navigator)try{let e=await navigator.serviceWorker.getRegistrations();for(let t of e){let e=t.active?.scriptURL??t.installing?.scriptURL??t.waiting?.scriptURL;e&&e.endsWith(`/brotli-sw.js`)&&await t.unregister()}}catch{}}var Nm=`./brotli-fallback.js`,Pm=Symbol(`brotli worker unavailable`),Fm=null,Im=!1,Lm=0,Rm=new Map;function zm(){return km||(km=(async()=>await import(Nm))(),km)}function Bm(){Im=!0,Fm&&=(Fm.terminate(),null);let e=[...Rm.values()];Rm.clear();for(let t of e)t.resolve(Pm)}function Vm(e){let{id:t,bytes:n,error:r}=e.data??{},i=Rm.get(t);i&&(Rm.delete(t),r?i.reject(Error(r)):i.resolve(n))}function Hm(){if(Fm)return Fm;if(Im||typeof Worker>`u`)return null;try{Fm=new Worker(ir(new URL(Nm,import.meta.url)),{type:`module`})}catch{return Im=!0,null}return Fm.addEventListener(`message`,Vm),Fm.addEventListener(`error`,Bm),Fm.addEventListener(`messageerror`,Bm),Fm}function Um(e){let t=Hm();return t?new Promise((n,r)=>{let i=++Lm;Rm.set(i,{resolve:n,reject:r});try{t.postMessage({id:i,bytes:e})}catch{Rm.delete(i),Bm(),n(Pm)}}):Promise.resolve(Pm)}async function Wm(){await Mm();let e=Am();return e?{kind:`native`,format:e}:{kind:`fallback`}}function Gm(){return Om||(Om=Wm(),Om)}async function Km(e,t=()=>!0){let n=()=>{if(!t())throw new DOMException(`Bundle decode cancelled`,`AbortError`)};n();let r=await Gm();if(n(),r.kind===`native`)return jm(r.format,e);let i=await Um(e);return n(),i===Pm?(await zm()).brotliDecompress(e):i}Gm().catch(()=>{});var qm=document.querySelector(`#drop-zone`),R=document.querySelector(`#report`),Jm=document.querySelector(`app-sidebar`);function Ym(e,t){let n=URL.createObjectURL(e),r=document.createElement(`span`);r.style.display=`none`,M(k`<a href="${n}" download="${t}"></a>`,r),document.body.append(r),r.firstElementChild.click(),r.remove(),URL.revokeObjectURL(n)}function Xm(e){return Error(`Another dialog is already open. Close it and try again.`,{cause:e})}var Zm={get state(){return P},listWorkspaces:L,addReportToWorkspace:du,addBundleToWorkspace:mu,onReportMembershipChanged:Nl,onBundleMembershipChanged:Pl,onWorkspaceDeleted:jl,onWorkspacePrivateKeyChanged:Ml,analyzeContent:Lu,setCount:Fu,gunzipBytes:wn,listBundles:rl,listFiles:Rc,readBundle:ll,readFileBytes:Hc,saveBundle:sl,saveFileBytes:Wc,onFileMutated:Ic,async saveTriage(){return await Ed(),Cd()},getSecureItem:Ha,setSecureItem:Ua,removeSecureItem:Wa,onSecureStorageHydrated:Ra};function Qm(e){e.installSyncHost(Zm),ld(()=>e.triageSync.notify())}var z=null,$m=null;function eh(){try{return Ha(`deepview.sync.userEnabled`)!==`0`}catch{return!0}}var th=!1;function nh(e){th=!!e}function rh(){if(th||P.serverMode!==`e2e`)return!0;try{return fn()?.mode===`managed`}catch{return!1}}function ih(){return $m||(rh()&&!z?Promise.resolve(null):($m=(async()=>{try{let e=await import(`./client-sync.js`);return Qm(e),z=e,sh(),e}catch(e){throw $m=null,e}})(),$m))}var ah=[];function oh(e){z?e(z):ah.push(e)}function sh(){let e=ah.splice(0);for(let t of e)try{t(z)}catch(e){console.warn(`client-sync: deferred apply failed:`,e)}}function ch(e,t){let n={cancelled:!1,unsub:null};return oh(r=>{n.cancelled||(n.unsub=t(r,e))}),()=>{n.cancelled=!0,n.unsub&&n.unsub()}}function lh(e,t){return z?z.isInRemote(e,t):!1}function uh(e,t){return z?z.isBundleInRemote(e,t):!1}var dh=`deepview.objstore-presence.`;function fh(e){try{let t=localStorage.getItem(dh+e);if(!t)return null;let n=JSON.parse(t);return n&&typeof n==`object`?n:null}catch{return null}}function ph(e,t){if(z&&z.isInRemote(e,t))return!0;let n=fh(e);return!n||typeof n.names!=`object`?!1:Object.values(n.names).includes(t)}function mh(e,t){if(z&&z.isBundleInRemote(e,t))return!0;let n=fh(e);return!n||typeof n.bundles!=`object`?!1:Object.values(n.bundles).includes(t)}function hh(e){return z?z.remoteCount(e):0}function gh(e){return z?z.differingReports(e):[]}function _h(e){return ch(e,(e,t)=>e.onAutoDownloaded(t))}function vh(e){return ch(e,(e,t)=>e.onBundleAutoDownloaded(t))}function yh(e){return ch(e,(e,t)=>e.onChange(t))}var bh=null,xh=null,Sh=null,Ch=[];function wh(e){if(z){z.setRedraw(e);return}bh=e,oh(t=>{bh===e&&t.setRedraw(e)})}function Th(e){if(z){z.setAuthenticationResolver(e);return}xh=e,oh(t=>{xh===e&&t.setAuthenticationResolver(e)})}function Eh(e){if(z){z.setHydrationConflictResolver(e);return}Sh=e,oh(t=>{Sh===e&&t.setHydrationConflictResolver(e)})}async function Dh(e,t){if(rh()||!eh()&&!z)return;let n=await ih();if(n&&!rh())return n[e](...t)}function Oh(...e){return Dh(`downloadFileFromRemote`,e)}function kh(...e){return Dh(`fetchBundleFromRemote`,e)}function Ah(...e){return Dh(`putFile`,e)}function jh(...e){return Dh(`holdLocalChangeChecks`,e)}function Mh(...e){return Dh(`putBundleToRemote`,e)}function Nh(...e){return Dh(`deleteFromRemote`,e)}function Ph(...e){return Dh(`deleteBundleFromRemote`,e)}function Fh(...e){return Dh(`openWorkspace`,e)}async function Ih(...e){return(z??($m?await $m:null))?.closeWorkspace(...e)}function Lh(...e){return Dh(`recheckRemoteStorage`,e)}function Rh(...e){return Dh(`resolveReportDifference`,e)}function zh(e,t){if(z)return z.triageSync[e](...t);oh(n=>{n.triageSync[e](...t)})}var B={get status(){return z?z.triageSync.status:`off`},get openSessions(){return z?z.triageSync.openSessions:[]},get persistenceDegraded(){return z?z.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return z?z.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return rh()?Promise.resolve(null):ih().then(e=>{e.triageSync.setEnabled(!0);let t=Ch;Ch=[];for(let n of t)try{e.openWorkspace(n)}catch(e){console.warn(`client-sync: openWorkspace(${n}) failed during re-enable:`,e)}return null}).catch(e=>(console.warn(`client-sync: setEnabled load failed:`,e),null));if(z){Ch=z.openWorkspaceIds();for(let e of Ch)try{z.closeWorkspace(e)}catch(t){console.warn(`client-sync: closeWorkspace(${e}) failed during disable:`,t)}z.triageSync.setEnabled(!1);return}zh(`setEnabled`,[e])},isEnabled(){return z?z.triageSync.isEnabled():eh()},openSession(e){zh(`openSession`,[e])},closeSession(e){zh(`closeSession`,[e])},refreshSession(e){zh(`refreshSession`,[e])},dismissError(e){zh(`dismissError`,[e])},setForcedOff(e){zh(`setForcedOff`,[e])},setProtocolLocked(e){zh(`setProtocolLocked`,[e])},setServerUrl(e){zh(`setServerUrl`,[e])},getServerUrl(){return z?z.triageSync.getServerUrl():null},notify(){zh(`notify`,[])},onStatusChange(e){return ch(e,(e,t)=>e.triageSync.onStatusChange(t))},onServerInfo(e){return ch(e,(e,t)=>e.triageSync.onServerInfo(t))},onPersistenceDegraded(e){return ch(e,(e,t)=>e.triageSync.onPersistenceDegraded(t))},onProxyAuthRequired(e){return ch(e,(e,t)=>e.triageSync.onProxyAuthRequired(t))}},Bh=class extends _a{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Ns(e=>{this.observes(),e||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let e,t=Ns(n=>{if(!n){t(),this._dispose===t&&(this._dispose=null),this.updateComplete.then(()=>this.requestUpdate());return}e=this._render()});return this._dispose=t,e}),this._disposers.push(()=>this._dispose&&this._dispose())}disconnectedCallback(){for(super.disconnectedCallback();this._disposers.length>0;)this._disposers.pop()()}};function Vh(e){return e===`completed`||e===`not_planned`||e===`duplicate`?e:`unknown`}function Hh(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 Uh(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 i=`${r[1]}/${r[2]}`,a=Number(r[3]);return!Hh(i)||!Number.isSafeInteger(a)||a<=0?null:{repo:i,number:a}}function Wh(e){return Uh(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function Gh(e){return Uh(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function Kh(e){let t=Wh(e);if(t)return{...t,kind:`pull`};let n=Gh(e);return n?{...n,kind:`issue`}:null}function qh(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}function Jh(e){return F()&&P.currentManagedTeam&&P.managedSession&&!P.managedSession.publicShare?P.managedIssues.get(e?.id)??null:null}function Yh(e){return Jh(e)?.autoFix??``}function Xh(e,t={},n){let r=!1;for(let i of e){if(n&&P.managedIssues.get(i)!==n.get(i))continue;let e=Object.hasOwn(t,i)?t[i]:null,a=Gh(e?.url)?{url:e.url,autoFix:Wh(e.autoFix)?e.autoFix:null}:null,o=P.managedIssues.get(i);o?.url===a?.url&&o?.autoFix===a?.autoFix||(a?P.managedIssues.set(i,a):P.managedIssues.delete(i),r=!0)}return r}function Zh(e){return Object.fromEntries(Object.entries(e).filter(([e,t])=>e.startsWith(`revalidate`)&&t!=null))}function Qh(e,t,n){let r=Zh(t);if(!e._revalidationCopies){let t=Zh(e);if(Object.keys(t).length===0&&Object.keys(r).length===0)return[];e._revalidationCopies=Object.keys(t).length>0?[{reportName:e._reportName??``,fields:t}]:[]}return Object.keys(r).length>0&&e._revalidationCopies.push({reportName:n,fields:r}),e._revalidationCopies}function $h(e){let t=new Map,n=new Set(Fi);for(let{reportName:r,fields:i}of e)for(let[e,a]of Object.entries(i)){if(a==null)continue;let o=e===`revalidate`?Ii(i)||String(a).trim().toLowerCase():String(a).trim();if(e===`revalidate`&&!o||e===`revalidate`&&!n.has(o))continue;t.has(e)||t.set(e,new Map);let s=t.get(e);s.has(o)||s.set(o,new Set),s.get(o).add(r)}return[...t].filter(([,e])=>e.size>1).map(([e,t])=>({field:e,variants:[...t].map(([e,t])=>({value:e,reports:[...t]}))}))}var eg=new Set([`correctedSeverity`,`correctedSeverityReason`,`isApp`,`isUpstream`,`isSecurity`,`source`]);function tg(e,t){if(!e||!t||e===t)return!1;let n=!1;for(let[r,i]of Object.entries(t)){if(r.startsWith(`_`)||eg.has(r)||i==null)continue;if(r===`revalidate`){let a=Ii(t);if(!a)continue;let o=Ii(e);o?o!==a&&(n=!0):e[r]=i;continue}let a=e[r];if(a==null){e[r]=i;continue}r.startsWith(`revalidate`)&&String(a).trim()!==String(i).trim()&&(n=!0)}return n}function ng(e,t,n,r){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??``]:{severity:ji(e),reason:e.correctedSeverityReason}},e._correctedByReport[n]={severity:ji(t),reason:t.correctedSeverityReason});let i=Qh(e,t,n);(tg(e,t)||r.has(e.id))&&r.set(e.id,{finding:e,copies:i})}function rg(e,t=null){let n=t??e.filter(e=>e.isApp),r=e.filter(e=>!e.isApp);if(n.length===0||r.length===0||t&&e.some(e=>e.isApp)||r.some(e=>typeof e.id!=`string`||!e.id))return[e];let i=new Set(r.map(e=>e.id)),a=new Map,o=new Set;for(let t of n){let n=t.revalidateInputs===void 0?[]:t.revalidateInputs;if(!Array.isArray(n))return[e];for(let t of n){if(!i.has(t))return[e];o.add(t)}a.set(t,n)}if(o.size!==i.size)return[e];let s=new Map([...i].map(e=>[e,e])),c=e=>{let t=e;for(;s.get(t)!==t;)t=s.get(t);for(;s.get(e)!==t;){let n=s.get(e);s.set(e,t),e=n}return t};for(let e of a.values()){if(e.length===0)continue;let t=c(e[0]);for(let n of e)s.set(c(n),t)}let l=new Map;for(let t of e){let e=a.get(t),n=e?e.length>0?c(e[0]):t:c(t.id);l.has(n)||l.set(n,[]),l.get(n).push(t)}return l.size===1?[e]:[...l.values()]}function ig(e,{showRevalidation:t=!0,upstreamOnly:n=!1,hideRuledOut:r=!1,merges:i=[]}={}){let a=[],o=new Set;for(let i=0;i<e.length;i++){let s=e[i];for(let e of s.groups){for(let t of e)t.id&&[`refuted`,`unreachable`].includes(Ii(t))&&o.add(t.id);let c=n?e.filter(e=>e.isUpstream&&Ii(e)!==`revalidation`).map(og):t?r?e.filter(e=>![`refuted`,`unreachable`].includes(Ii(e))):e:e.filter(e=>Ii(e)!==`revalidation`).map(og),l=c.length===e.length&&c.every((t,n)=>t===e[n])?e:c;l.length>0&&a.push({group:l,sourceGroup:e,reportIndex:i,reportName:s.fileName??``,hasApp:l.some(e=>e.isApp)})}}let s=a.map((e,t)=>t),c=a.map(e=>e.hasApp),l=e=>{let t=e;for(;s[t]!==t;)t=s[t];for(;s[e]!==t;){let n=s[e];s[e]=t,e=n}return t},u=(e,t)=>{e=l(e),t=l(t),e!==t&&(s[t]=e,c[e]||=c[t])},d=new Map;for(let e=0;e<a.length;e++)for(let t of a[e].group)t.id&&(d.has(t.id)||d.set(t.id,[]),d.get(t.id).push({index:e,app:t.isApp}));for(let e of d.values()){let t=new Map,n=e.find(e=>e.app);for(let{index:r}of e){n&&u(n.index,r);let e=a[r].reportIndex;t.has(e)?u(t.get(e),r):t.set(e,r)}}for(let e of d.values()){let t=null;for(let{index:n}of e)c[l(n)]||(t===null?t=n:u(t,n))}for(let e of i){let t=null;for(let n of e)for(let{index:e}of d.get(n)??[])t===null?t=e:u(t,e)}let f=new Map;for(let e=0;e<a.length;e++){let t=l(e);f.has(t)||f.set(t,[]),f.get(t).push(a[e])}let p=new Map,m=[];for(let r of f.values()){let a=r[0].group,o=a.map(e=>e.id).filter(Boolean);if(r.length===1&&new Set(o).size===o.length&&i.length===0){let i=e.length>1&&a.find(e=>e.isApp);if(i){let e=[...a];e.workspaceKey=i.id??String(i._id),m.push(...ag(r,e,t,n))}else m.push(...ag(r,a,t,n));continue}let s=new Map,c=new Map,l=[];for(let{group:e,reportName:t}of r)for(let n of e)if(n.id&&c.has(n.id))ng(c.get(n.id),n,t,s);else{let e={...n,_reportName:n._reportName??t};n.id&&c.set(n.id,e),l.push(e)}let u=new Set;for(let e of i)for(let t of e)c.has(t)&&u.add(t);for(let{group:e}of r)if(e.length>1)for(let t of e)t.id&&u.add(t.id);let d=[...u].map(e=>c.get(e));for(let e of l)u.has(e.id)||d.push(e);if(e.length>1){let e=d.find(e=>e.isApp);e&&(d.workspaceKey=e.id??String(e._id))}m.push(...ag(r,d,t,n));for(let[e,t]of s){let n=p.get(e);p.set(e,n?{finding:n.finding,copies:[...n.copies,...t.copies]}:t)}}return Object.defineProperty(m,"ruledOutIds",{value:o,configurable:!0}),{groups:m,conflicts:p}}function ag(e,t,n,r){if(n)return[t];if(r){let n=rg(e.flatMap(e=>e.sourceGroup));if(n.length===1)return[t];let r=[],i=new Set;for(let e of n){let n=new Set(e.filter(e=>!e.isApp&&e.id).map(e=>e.id)),a=t.filter(e=>n.has(e.id));if(a.length>0){r.push(a);for(let e of a)i.add(e.id)}}let a=new Set(t.map(e=>e.id).filter(Boolean));return i.size===a.size?r:[t]}return rg(t,e.flatMap(e=>e.sourceGroup.filter(e=>e.isApp)))}function og(e){let t=Object.keys(e).filter(e=>e.startsWith(`revalidate`)||e===`_revalidationCopies`);if(t.length===0)return e;let n={...e};for(let e of t)delete n[e];return n}function sg(e,t=Gd){let n=_u(vu(e.flat()));return{linkedIds:e=>[...id(e),...n.linkedIds(e)],knownRows:e=>{let r=[...t(e),...Kd(e)];for(let e of r)for(let t of vu(e.members))n.add(t);return r}}}var cg=null,lg=0;function ug(){return P.currentView===`links`&&cg?.owner===P.currentLinks?cg:null}function dg(){lg++,cg=null}async function fg(e,t,n,r){if(P.currentView!==`links`||!P.currentLinks)return;let i=Ms(P.currentLinks),a=++lg;cg={owner:i,id:e,reportName:t,group:null,error:``},P.focusCodeStack=[],P.focusCodeAt=0;let o=()=>a===lg&&P.currentView===`links`&&P.currentLinks===i;try{if(F()){let a=Gd([e]).find(e=>e.report===t&&(!r||e.managedReportId===r)&&(n==null||e.index===Number(n)));if(!a)throw Error(`This finding is no longer in the report.`);cg={owner:i,id:e,reportName:t,group:a.members.map(e=>({...e})),error:``},P.activeTabByGroup.set(a.members[0].id,e);return}let a=await Ti(await Vc(t));if(!o())return;let s=(bi(a?.data)??[]).map(e=>Array.isArray(e)?e:[e]),c=t=>t?.some(t=>String(t?.id)===e),l=c(s[n])?s[n]:s.find(c);if(!l)throw Error(`This finding is no longer in the report.`);let{data:u}=a,d=l.filter(e=>e?.id).map(e=>{let n={...e,_reportName:t,_repoFallback:gi(u)??Zs(t),_repoDirectory:_i(u?.repo),_bundleHashes:u.bundleHashes??[],_source:e.source??u.source??null};return hi(n,u),n._analyzer=n._source??n.type??null,`isApp`in n||(n.isApp=Li(n,n._source)),n});if(await Promise.all([Ad(),zr(`report`,t),...tp(t).map(e=>zr(`workspace`,e.id))]),o()){let t=(e,t)=>t.includes(e.id)||Array.isArray(e.revalidateInputs)&&e.revalidateInputs.some(e=>t.includes(e));yi([d],sg([d],e=>[...Gd(e),...P.reports.flatMap(e=>e.groups??[]).filter(n=>n.some(n=>t(n,e))).map(e=>({members:e}))])),cg.group=d,P.activeTabByGroup.set(d[0].id,e)}}catch(e){o()&&(cg.error=e.message||`Unable to load this finding.`)}}function pg(e,t,n,r=n){let i=e.map((e,t)=>t),a=e=>{for(;i[e]!==e;)i[e]=i[i[e]],e=i[e];return e},o=e.map(n),s=new Map;for(let e=0;e<o.length;e++)for(let t of o[e])t.id&&(s.has(t.id)||s.set(t.id,[]),s.get(t.id).push(e));for(let[e,n]of s)for(let r of t(e))if(r!==e)for(let e of n)for(let t of s.get(r)??[]){let n=a(e),r=a(t);n!==r&&(i[r]=n)}let c=new Map;for(let t=0;t<e.length;t++){let e=a(t);c.has(e)||c.set(e,[]),c.get(e).push(t)}if(c.size===e.length)return e;let l=e=>e.id??String(e._id),u=[...c.values()].map(t=>{if(t.length===1)return e[t[0]];let n=new Map;for(let i of t)for(let t of r(e[i]))n.has(l(t))||n.set(l(t),t);let i=new Map;for(let r of t)for(let t of e[r])i.has(l(t))||i.set(l(t),n.get(l(t))??t);let a=[...i.values()],o=e[t[0]];return a.workspaceKey=o.workspaceKey??l(o[0]),a.linkedTabs=[...n.values()],a});return Object.defineProperty(u,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),u}function V(e){return e.workspaceKey??C(e[0])}function mg(e){return Array.isArray(e)?e:[e]}function hg(){return P.revalidationDetailed===!0}function gg(e){return e?._reportName??``}var _g=null,vg=!0;function yg(){let e=P.reports;return!Array.isArray(e)||e.length===0||(e!==_g&&(_g=e,vg=Cr(e)),vg)}function bg(e){return!e.isUpstream||P.showRevalidation===!1||P.upstreamOnly===!0||!yg()}function xg(){let e=P.managedSession;return F()&&(e?.publicShare===!0||!qe(e?.role,`triage`))}function Sg(e){return bg(e)&&!xg()}function Cg(e){if(!bg(e))return;let t=P.triage.get(C(e)),n=t?.triage===`ignored`&&o(e,Fr())?{...t,triage:void 0}:t;if(!F())return n;let r=P.managedComments?.get(e.id)??[];return r.length===0&&!n?.comment?n:{...n,comment:r.map(e=>e.authorLogin?`${e.authorLogin}: ${e.body}`:e.body).join(`
|
|
4
|
+
|
|
5
|
+
`)}}function wg(e){return bg(e)&&(s(e,P.triage.get(C(e)),Fr())===`ignored`||o(e,Fr())&&_n(P.triage,C(e),gg(e)))}function Tg(e,t=Cg(e)){if(bg(e))return s(e,t,Fr())??(wg(e)?`ignored`:void 0)}function Eg(e){return ug()?.group===e?e:e.linkedTabs?e.linkedTabs:hg()?e:Dg(e)}function Dg(e){return e.length<=1||!e.some(Dr)?e:e.filter(Dr)}function Og(e){let t=Eg(e);return t.length<=1?t:[...t].toSorted((e,t)=>{let n=+!!Dr(e),r=+!!Dr(t);if(n!==r)return r-n;let i=+!!Cg(e)?.color,a=+!!Cg(t)?.color;if(i!==a)return a-i;let o=ki[Ni(e,P.severityMode)]||0,s=ki[Ni(t,P.severityMode)]||0;if(o!==s)return s-o;let c=e.confidence??-1;return(t.confidence??-1)-c})}function kg(e){return e.length===1?e[0]:Og(e)[0]}function Ag(e){let t=[],n=[];for(let r of e)(r.isApp?t:n).push(r);return{app:t,source:n}}function jg(e){let t=Cg(e);return!!t?.comment||!!(t?.fix||Yh(e))||t?.flagged===!0}function Mg(e){if(e.length===1)return e[0];let t=Og(e);if(t.length===1)return t[0];let n=P.activeTabByGroup.get(V(e));if(n){let e=t.find(e=>C(e)===n);if(e)return e}let r=t;if(P.filterAnalyzer||P.filterModel){let e=t.filter(a_);e.length>0&&(r=e)}return r.find(jg)??r[0]}function Ng(e){return e?._repoFallback||P.repoUrl||``}function Pg(e){return{github:Ng(e),directory:e?._repoDirectory??``}}function Fg(e){for(let t of wf().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||Ng(e)||null}function Ig(e){if(!Array.isArray(e))return[];let t=e.filter(e=>!e.isUpstream);return t.length===0||t.length===e.length?e:t}function Lg(e){let t=Ig(e),n=0,r=!1,i,a=!1,o=!1,s,c=!1,l=null,u=!1,d=!0;for(let e of t){let t=Cg(e),f=Tg(e,t),p=t?.color;p===void 0&&f===void 0||(n++,p!==void 0&&(a?p!==i&&(r=!0):(a=!0,i=p)),c?f!==s&&(o=!0):(c=!0,s=f),f?(l===null&&(l=f),f===`ignored`&&t?.triage!==`ignored`?d=!1:u=!0):d=!1)}let f=r||o,p=!f&&a?i:null,m=n>0&&d,h=!f&&l!==null?l:null;return{hasConflict:f,commonColor:p,anyTriage:u,allTriaged:m,commonTriage:h,allIgnored:h===`ignored`&&n===t.length,isInProgress:h===`inprogress`,isFixed:h===`fixed`,isInvalid:h===`invalid`,isDeleted:h===`deleted`,isIgnored:h===`ignored`}}function Rg(e,t){if(!Array.isArray(e)||e.length<2)return!1;let n=e.filter(Sg);if(n.length<2)return!1;let r=(t??``).trim();return n.every(e=>zg(e,r))}function zg(e,t){if(!Sg(e))return!1;let n=(Cg(e)?.fix??``).trim();return n===``||n===(t??``).trim()}function Bg(e,t){if(!Sg(Mg(e)))return{targets:[],clearing:!1};let n=Lg(e);return{targets:Vg(e,n),clearing:t===`restore`||Hg(e,n)===t}}function Vg(e,t=Lg(e)){let n=Ig(e),r=e.linkedTabs||n!==e&&e.some(e=>e.isApp)?n:t.hasConflict?[Mg(e)]:n;return r.every(Sg)?r:r.filter(Sg)}function Hg(e,t=Lg(e),n=null){return e.linkedTabs||e.some(e=>e.isApp)&&Ig(e)!==e||!t.hasConflict?t.commonTriage??null:Tg(n??Mg(e))??null}function Ug(e){let t=Ig(e);if(t.length<2)return!1;let n=Lg(e).commonTriage;if(!n||n===`ignored`&&!t.some(e=>Cg(e)?.triage===`ignored`))return!1;let r=!1;for(let e of t){if(!Sg(e))continue;let t=C(e),i=P.triage.get(t);Tg(e,i)!==n&&(n===`ignored`&&o(e,Fr())||n!==`ignored`&&i?.ignoredReports?.length||S(P.triage,t,{triage:n})&&(r=!0))}return r}var Wg=null;function Gg(){Wg=null}function Kg(e,t=!1,n=!1){let r=P.reports,i=P.workspaceMerges,a=F();if(!Wg||Wg.reports.length!==r.length||Wg.reports.some((e,t)=>e!==r[t])||Wg.merges!==i||Wg.mergeCount!==i.length||Wg.securityLinksTick!==P.linksTick||Wg.findingIndexTick!==P.findingIndexTick||Wg.managed!==a){let e=r.flatMap(e=>e.groups??[]);yi(e,sg(e)),Wg={reports:[...r],merges:i,mergeCount:i.length,managed:a,securityLinksTick:P.linksTick,findingIndexTick:P.findingIndexTick}}let o=t?`upstream`:e?n?`workspace-app`:`app`:`code`;return Wg[o]||(Wg[o]=ig(r,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:n,merges:i})),Wg[o]}function qg(){return Kg(P.showRevalidation!==!1).groups}function Jg(){return Kg(!0).groups}function Yg(){return Kg(!0,!1,!!P.currentWorkspace).conflicts}function Xg(){let e=Kg(P.showRevalidation!==!1,P.upstreamOnly===!0,!!P.currentWorkspace),t=e.groups;if(P.showRevalidation===!1||P.upstreamOnly)return t;if(P.currentWorkspace){let n=hg();return(!e.linkedGroups||e.linksTick!==P.linksTick||e.linkedDetailed!==n)&&(e.linkedGroups=pg(t,id,Dg,Eg),e.linksTick=P.linksTick,e.linkedDetailed=n),e.linkedGroups}return hg()?t:e.visibleGroups??=(()=>{let e=t.flatMap(e=>{let t=e.filter(e=>!Or(e));return t.length===e.length?[e]:t.length===0?[]:(t.workspaceKey=V(e),[t])});return Object.defineProperty(e,"ruledOutIds",{value:t.ruledOutIds,configurable:!0}),e})()}function Zg(){let e=Xg();if(P.viewMode===`kanban`)return e;let t=e.filter(e=>Lg(e).commonTriage===P.shownTriage);return Object.defineProperty(t,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),t}function Qg(e){if(P.showRevalidation||P.upstreamOnly||!Array.isArray(e)||e.length===0)return e;let t=new Set(e.map(C)),n=new Map;for(let e of Jg())for(let r of rg(e))if(r.some(e=>t.has(C(e))))for(let e of r)n.set(C(e),e);return n.size===e.length&&e.every(e=>n.get(C(e))===e)?e:n.size>0?[...n.values()]:e}function $g(e){let t=ug()?.group;if(t&&V(t)===e)return t;for(let t of Xg())if(V(t)===e)return t;return null}function e_(){let e=new Set;if(P.currentWorkspace||!rd())return e;let t=P.currentFile??P.reports[0]?.fileName;if(!t)return e;let n=new Set;for(let e of P.reports)if(e.fileName===t)for(let t of e.groups)for(let e of t)e.id!=null&&n.add(String(e.id));for(let r of n)id(r).some(e=>!n.has(e)&&Ud(e).some(e=>e!==t))&&e.add(r);return e}var t_=`\0`,n_=`\x01`,r_=`\x02`;function i_(e){return Ri(e.model)||null}function a_(e){let t=m_();return!(t.filterAnalyzer&&(e._analyzer??null)!==(t.filterAnalyzer===t_?null:t.filterAnalyzer)||t.filterModel&&i_(e)!==(t.filterModel===r_?null:t.filterModel))}function o_(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 s_(e){let t=new Set;for(let n of e)for(let e of n)t.add(o_(e));return t}function c_(){P.filterSeverities=new Set,P.filterColors=new Set,P.filterSources=new Set,P.filterAnalyzer=``,P.filterModel=``,P.filterRepo=``,P.filterConfMin=0,P.filterConfMax=10,P.filterInclude=``,P.filterIncludeNegate=!1,P.filterComment=``,P.filterFix=``,P.filterFlagged=``,P.filterDuplicates=``,P.filterCrossContext=``,P.filterAppStacked=``,P.filterSecurity=``,P.filterRevalidate=``,P.filterPartial=``,P.sortBy=`severity`}var l_=[`filterSeverities`,`filterColors`,`filterSources`,`filterAnalyzer`,`filterModel`,`filterRepo`,`filterConfMin`,`filterConfMax`,`filterInclude`,`filterIncludeNegate`,`filterComment`,`filterFix`,`filterFlagged`,`filterDuplicates`,`filterCrossContext`,`filterAppStacked`,`filterSecurity`,`filterRevalidate`,`filterPartial`];function u_(){let e={};for(let t of l_){let n=P[t];e[t]=n instanceof Set?new Set(n):n}return e}var d_=null;function f_(e){d_=e}function p_(){d_=null}function m_(){return d_??P}function h_(e){return br(e)||(e._source&&!e._sourcePass?`revalidation`:``)}function g_(e){let t=ar(`confirmed`,``);return e.some(e=>t.includes(h_(e)))}function __(e,t){let n=e.map(Eg).filter(e=>e.length>0);return pr(n,t,dr(e,Eg,br),br)?`confirmed`:``}function v_(e,t=Eg){return lr(e,t)}function y_(e,{tabs:t=Eg,kindOf:n=br,severityMode:r=P.severityMode}={}){return mr(e,{tabs:t,kindOf:n,severityMode:r})}function b_(e){return P.showRevalidation===!1||P.upstreamOnly||hg()?!1:y_(e)}function x_(e,{resetSort:t=!0}={}){P.filterConfMin=v_(e),P.filterConfMax=10,P.filterRevalidate=__(e,P.filterConfMin),P.filterPartial=``,t&&(P.sortBy=S_(e)?`priority-desc`:`severity`)}function S_(e){return!Array.isArray(e)||e.length===0?!1:e.every(e=>{if(C_(e)===void 0)return!1;let t=e.filter(e=>e.isApp);if(t.length===0)return!0;let n=e.some(e=>e.priority!==void 0);return t.some(e=>e.priority!==void 0||!n&&Or(e))})}function C_(e){let t=e.find(e=>e.priority!==void 0);return t?t.priority:e.some(Or)?0:void 0}function w_(e){let t=m_();if(t.filterSources.size===1){let n=t.filterSources.has(`own`);if(n&&Ir(e.file)||!n&&!Ir(e.file))return!1}if(t.filterRevalidate){let n=ar(t.filterRevalidate,t.filterPartial);if(n&&!n.includes(h_(e)))return!1}if(!t.filterRevalidate){let n=Ar(e)?0:or(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}var T_={raw:``,inc:``,idWords:[]};function E_(e){if(T_.raw!==e){let t=e.toLowerCase();T_={raw:e,inc:t,idWords:t.length>=6?t.split(/\s+/u).filter(e=>e.length>=6):[]}}return T_}function D_(e){if(!w_(e))return!1;let t=m_(),{inc:n,idWords:r}=E_(t.filterInclude);if(t.filterSeverities.size>0&&!t.filterSeverities.has(Ni(e,P.severityMode)))return!1;if(t.filterColors.size>0){let n=Cg(e)?.color??`none`;if(!t.filterColors.has(n))return!1}if(!a_(e)||t.filterRepo&&o_(e)!==(t.filterRepo===n_?null:t.filterRepo))return!1;if(n){let i=Cg(e),a=An(e).includes(n)||(i?.comment??``).toLowerCase().includes(n)||(i?.fix??``).toLowerCase().includes(n)||r.some(t=>e.id?.toLowerCase().includes(t));return t.filterIncludeNegate?!a:a}return!0}function O_(e){let t=m_();if(!t.filterComment&&!t.filterFix&&!t.filterFlagged)return!0;let n=t=>e.some(e=>t(Cg(e)));if(t.filterComment){let e=n(e=>!!e?.comment);if(t.filterComment===`with`?!e:e)return!1}if(t.filterFix){let n=e.some(e=>!!(Cg(e)?.fix||Yh(e)));if(t.filterFix===`with`?!n:n)return!1}if(t.filterFlagged){let e=n(e=>e?.flagged===!0);if(t.filterFlagged===`with`?!e:e)return!1}return!0}function k_(e){let t=e?.package?.npm;if(typeof t?.name==`string`&&t.name&&!Qd(t))return t.name;let n=typeof e?.file==`string`?e.file:``;return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(n)?.[1]??null}function A_(){return P.showRevalidation!==!1&&!P.upstreamOnly}function j_(e){if(A_())return!1;let t=Eg(e);if(t.length<2)return!1;let n=new Set,r=new Set;for(let e of t){let t=o_(e);t&&n.add(t);let i=k_(e);i&&r.add(i)}return n.size>1||r.size>1}function M_(e){if(!A_()||Eg(e).length===0)return!1;let t=e.filter(e=>e.isApp);return t.length>0&&t.length>1}function N_(e){return e.some(e=>e.isSecurity===!0)}function P_(e){return e.some(N_)&&e.some(e=>!N_(e))}function F_(e){return e.filter(e=>e.some(w_)).map(Eg)}function I_(e){let t=!P.currentWorkspace&&m_().filterDuplicates,n=t?e_():null,r=m_().filterCrossContext,i=m_().filterAppStacked,a=m_().filterSecurity;return e.filter(e=>e.some(D_)&&O_(e)&&(!t||t===`with`===e.some(e=>n.has(C(e))))&&(!r||r===`with`===j_(e))&&(!i||i===`with`===M_(e))&&(!a||a===`with`===N_(e)))}function L_(e,t){let n=t===`desc`?-1:11;return(r,i)=>{let a=r[e]??n,o=i[e]??n;return(t===`desc`?o-a:a-o)||r.file.localeCompare(i.file)}}function R_(e){let t=e===`desc`?-1:11;return(n,r)=>{let i=n.confidence===void 0&&n.critical===!0,a=r.confidence===void 0&&r.critical===!0,o=n.confidence??(i?10:t),s=r.confidence??(a?10:t);return(e===`desc`?s-o:o-s)||(i===a?0:i?-1:1)||n.file.localeCompare(r.file)}}var z_=R_(`desc`),B_={severity:(e,t)=>(ki[Ni(t,P.severityMode)]||0)-(ki[Ni(e,P.severityMode)]||0)||z_(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":z_,"confidence-asc":R_(`asc`),"priority-desc":L_(`priority`,`desc`),"priority-asc":L_(`priority`,`asc`)};function V_(e){let t=B_[P.sortBy];if(!t)return[...e];if(P.sortBy===`priority-desc`||P.sortBy===`priority-asc`){let t=P.sortBy===`priority-desc`?`desc`:`asc`,n=t===`desc`?-1:11;return e.map(e=>({p:C_(e),g:e})).toSorted((e,r)=>{let i=e.p??n,a=r.p??n;return(t===`desc`?a-i:i-a)||kg(e.g).file.localeCompare(kg(r.g).file)}).map(e=>e.g)}return e.map(e=>({p:kg(e),g:e})).toSorted((e,n)=>t(e.p,n.p)).map(e=>e.g)}var H_=Oi;function U_(e){return e==null?`(none)`:H_[e]??e}function W_(e){return e??`(no model)`}var G_=class extends Bh{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 e=this.analyzers.length>1,t=this.models.length>1;if(!e&&!t)return j;let n=P.filterAnalyzer===``?void 0:P.filterAnalyzer===t_?null:P.filterAnalyzer,r=P.filterModel===``?void 0:P.filterModel===r_?null:P.filterModel,i=new Map,a=new Map;for(let e of this.groups){let t=new Set,o=new Set;for(let i of e){let e=i._analyzer??null,a=i_(i);(r===void 0||a===r)&&t.add(e),(n===void 0||e===n)&&o.add(a)}for(let e of t)i.set(e,(i.get(e)??0)+1);for(let e of o)a.set(e,(a.get(e)??0)+1)}let o=n===void 0?null:U_(n),s=r===void 0?null:W_(r),c=o!=null&&s!=null?`${o} \xB7 ${s}`:o??s??(e?`All analyzers`:`All models`);return k`<button type="button" class="${T({"analyzer-btn":!0,active:o!=null||s!=null})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${c}`}"><span class="analyzer-btn-label">${c}</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}">${e?this._column({dim:`analyzer`,heading:`Analyzer`,allLabel:`All analyzers`,values:this.analyzers,sentinel:t_,labelOf:U_,counts:i,current:P.filterAnalyzer}):j} ${e&&t?k`<div class="analyzer-menu-sep"></div>`:j} ${t?this._column({dim:`model`,heading:`Model`,allLabel:`All models`,values:this.models,sentinel:r_,labelOf:W_,counts:a,current:P.filterModel}):j}</div>`}_column({dim:e,heading:t,allLabel:n,values:r,sentinel:i,labelOf:a,counts:o,current:s}){return k`<div class="analyzer-menu-col" role="group" aria-label="${`Filter by ${e}`}"><div class="analyzer-menu-head">${t}</div><button type="button" aria-pressed="${String(s===``)}" class="${T({"analyzer-menu-item":!0,active:s===``})}" @click="${()=>this._pick(e,``)}"><span class="analyzer-menu-label">${n}</span></button> ${r.map(t=>{let n=t??i,r=o.get(t)??0,c=s===n;return k`<button type="button" aria-pressed="${String(c)}" class="${T({"analyzer-menu-item":!0,active:c,zero:r===0})}" @click="${()=>this._pick(e,n)}"><span class="analyzer-menu-label">${a(t)}</span><span class="analyzer-menu-count">${r}</span></button>`})}</div>`}_pick(e,t){let n=e===`analyzer`?P.filterAnalyzer:P.filterModel,r=t!==``&&n===t?``:t;this.dispatchEvent(new CustomEvent(`analyzer-change`,{detail:{analyzer:e===`analyzer`?r:P.filterAnalyzer,model:e===`model`?r:P.filterModel},bubbles:!0,composed:!0}))}_onToggle=e=>{this._open=e.newState===`open`,this._open&&this._position()};_position(){let e=this.querySelector(`.analyzer-menu`),t=this.querySelector(`.analyzer-btn`);if(!e||!t)return;let n=t.getBoundingClientRect(),r=e.offsetWidth||240,i=e.offsetHeight||200,a=n.left;a+r>window.innerWidth-4&&(a=window.innerWidth-r-4),a<4&&(a=4);let o=n.bottom+4;o+i>window.innerHeight-4&&n.top>i+4&&(o=n.top-i-4),e.style.top=`${o}px`,e.style.left=`${a}px`}updated(){this._open&&this.querySelector(`.analyzer-menu`)?.matches(`:popover-open`)&&this._position()}};customElements.define(`analyzer-select`,G_);var K_=0,q_=new AbortController;function H(){return K_}function J_(){return q_.signal}function Y_(){return q_.abort(),q_=new AbortController,++K_}var X_=e=>{let t=e.lastIndexOf(`.`);return t>0?e.slice(t).toLowerCase():``};function Z_(e,t=``){let n=e.map(e=>e.split(`/`)),r=[];for(;;){let e=r.length,t=new Set;for(let i of n)i.length>e+1&&r.every((e,t)=>i[t]===e)&&t.add(i[e]);if(t.size!==1)break;r.push(t.values().next().value)}let i=n.map(e=>{let n=0;for(;n<r.length&&e.length>n+1;)n++;let i=t+e.slice(0,n).map(e=>`${e}/`).join(``);return e.length>n+1?`${i}${e[n]}/`:`${i}*`});if(new Set(i).size>1){let t=new Map;i.forEach((e,r)=>{if(!e.endsWith(`*`))return;let i=t.get(e)??new Set;i.add(X_(n[r].at(-1))),t.set(e,i)});let r=e=>{let n=t.get(e);return n?.size===1&&!n.has(``)?`${e}${[...n][0]}`:e};return new Map(e.map((e,t)=>[e,r(i[t])]))}return new Map(e.map((e,t)=>{let r=X_(n[t].at(-1));return[e,r?`*${r}`:`No extension`]}))}var Q_=[{key:`metro`,label:`metro`,subtitle:`Metro bundle contents`},{key:`run`,label:`run`,subtitle:`Node.js CLI`},{key:`add`,label:`add`,subtitle:`Manually added files`}];function $_(e){let t=e.filter(e=>e.id!==`all`);if(t.length===0)return null;let n=new Map(t.map(e=>[String(e.id).replace(/^reason:/u,``),e]));return n.size!==t.length||[...n.keys()].some(e=>!Q_.some(t=>t.key===e))?null:[{id:``,label:`All files`,subtitle:`Everything`},...Q_.filter(e=>n.has(e.key)).map(({key:e,...t})=>({...t,id:n.get(e).id,subtitle:e===`run`&&n.has(`metro`)?`Bundler and Node.js CLI`:t.subtitle}))]}var ev=class extends _a{static properties={reasons:{attribute:!1},value:{attribute:!1},label:{type:String}};constructor(){super(),this.reasons=[],this.value=``,this.label=`Choose scope`}_select(e){this.dispatchEvent(new CustomEvent(`scope-change`,{detail:{value:e},bubbles:!0,composed:!0}))}render(){let e=this.reasons.filter(e=>e.id!==`all`);if(e.length===0)return j;let t=$_(e);if(!t)return k`<label class="scope-field"><span>Scope</span><select aria-label="${this.label}" .value="${st(this.value===`all`?``:this.value)}" @change="${e=>this._select(e.target.value)}"><option value="">All files</option>${e.map(e=>k`<option value="${e.id}">${e.label??e.id}</option>`)}</select></label>`;let n=t.find(e=>e.id===this.value)??t[0];return k`<div class="scope-toggle"><div class="scope-options" role="radiogroup" aria-label="${this.label}" aria-describedby="scope-description">${t.map(e=>k`<label class="scope-option"><input type="radio" name="scope" value="${e.id}" .checked="${n.id===e.id}" @change="${()=>this._select(e.id)}"><span>${e.label}</span></label>`)}</div><span class="scope-description" id="scope-description">${n.subtitle}</span></div>`}static styles=ha`:host{display:block;min-width:0}*{box-sizing:border-box}.scope-toggle,.scope-field{cursor:default;user-select:none;-webkit-user-select:none}.scope-toggle{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.4rem .7rem;min-width:0;min-height:var(--scope-height, 2rem)}.scope-options{display:flex;flex-shrink:0;min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);overflow:hidden;background:var(--bg)}.scope-option{position:relative;flex:1 0 auto}.scope-option+.scope-option{border-left:1px solid var(--border)}.scope-option input{position:absolute;width:1px;height:1px;opacity:0}.scope-option span{display:grid;place-items:center;height:calc(var(--scope-height, 2rem) - 2px);padding:.3rem .55rem;color:var(--muted);font-size:.74rem;white-space:nowrap}.scope-option:hover span{color:var(--text);background:var(--surface-active)}.scope-option input:checked+span{color:var(--text);background:var(--surface-active);font-weight:500}.scope-option input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}.scope-description{order:-1;min-width:0;color:var(--muted);font-size:.66rem;line-height:1rem;text-align:right}.scope-field{display:flex;align-items:center;justify-content:end;gap:.5rem;min-width:0;max-width:100%;margin-left:auto;color:var(--muted);font-size:.7rem}select{width:13rem;height:var(--scope-height, auto);min-width:0;max-width:100%;padding:.35rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.76rem}:host([compact]) .scope-toggle{min-height:0;gap:.3rem .5rem}:host([compact]) .scope-option span{height:auto;padding:2px 8px;font-size:.68rem;line-height:1.2}:host([compact]) .scope-field{font-size:.68rem}:host([compact]) .scope-description{display:none}:host([compact]) select{width:auto;max-width:22ch;padding:2px 6px;font-size:.68rem;line-height:1.2}`};customElements.get(`bundle-scope-selector`)||customElements.define(`bundle-scope-selector`,ev);var tv=6,nv=14,rv=2,iv=24,av=4,ov=1.5,sv=new Map,cv=new Map,lv=`treemap`,uv=``;function dv(e){let t=/^#?([0-9a-f]{6})$/iu.exec(e);if(!t)return`#fff`;let n=parseInt(t[1],16),r=n>>16&255,i=n>>8&255,a=n&255;return(.2126*r+.7152*i+.0722*a)/255>.6?`#1a1a1a`:`#fff`}function fv(e,t,n,r){let i=n*n,a=r*r;return Math.max(a*e/i,i/(a*t))}function pv(e,t){let n=[],r=e.filter(e=>e.value>0),{x:i,y:a,w:o,h:s}=t;if(r.length===0||o<=0||s<=0)return n;let c=0;for(let e of r)c+=e.value;let l=o*s/c,u=0;for(;u<r.length&&o>.5&&s>.5;){let e=Math.min(o,s),t=u,c=0,d=0,f=1/0,p=1/0;for(;t<r.length;){let n=r[t].value*l,i=n>d?n:d,a=n<f?n:f,o=fv(i,a,c+n,e);if(t===u||o<=p)p=o,c+=n,d=i,f=a,t++;else break}let m=c/e;if(o>=s){let e=a;for(let o=u;o<t;o++){let c=o===t-1?a+s-e:r[o].value*l/m;n.push({node:r[o],x:i,y:e,w:m,h:c}),e+=c}i+=m,o-=m}else{let e=i;for(let s=u;s<t;s++){let c=s===t-1?i+o-e:r[s].value*l/m;n.push({node:r[s],x:e,y:a,w:c,h:m}),e+=c}a+=m,s-=m}u=t}return n}function mv(e){for(;e.children&&e.children.size===1;){let t=e.children.values().next().value;if(t.isFile)break;e.name=`${e.name}/${t.name}`,e.children=t.children}if(e.children)for(let t of e.children.values())mv(t)}function hv(e,t,n,r){if(e.path=e.name?t?`${t}/${e.name}`:e.name:t,e.parent=n,e.isFile)return e.count=1,e.value;r.set(e.path,e);let i=0,a=0,o,s;for(let t of e.children.values())i+=hv(t,e.path,e,r),a+=t.count,s===void 0?s=t.pkg:s!==t.pkg&&(s=null),o===void 0?o=t.group:o!==t.group&&(o=null);return e.value=i,e.count=a,e.pkg=s??null,e.group=o??null,i}function gv(e,t,n,r){let i=new Set(e).size===1?Z_(t,n):new Map,a=new Map;return t.forEach((e,t)=>{i.has(e)&&a.set(i.get(e),(a.get(i.get(e))??0)+Math.max(r[t]??0,0))}),{groups:i,ranks:new Map([...a].toSorted((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0])).map(([e],t)=>[e,t]))}}function _v(e,t,n,r,i,a,o){if(r<av||i<av)return;if(e.isFile){o.push({kind:`file`,node:e,x:t,y:n,w:r,h:i});return}if(!(a<tv&&r>=iv&&i>=iv&&e.children.size>0)){o.push({kind:`agg`,node:e,x:t,y:n,w:r,h:i});return}o.push({kind:`dir`,node:e,x:t,y:n,w:r,h:i});let s=i>=nv+av+rv?nv:0,c=t+rv,l=n+s,u=r-rv*2,d=i-s-rv;if(u<av||d<av)return;let f=[...e.children.values()].toSorted((e,t)=>t.value-e.value);for(let e of pv(f,{x:c,y:l,w:u,h:d}))_v(e.node,e.x,e.y,e.w,e.h,a+1,o)}function vv(e,t){let n=e/(t||1)*100;return n>=10?n.toFixed(0):n.toFixed(n>=1?1:2)}function yv(e,t){if(t<=0||e.isFile||!e.children||e.children.size===0)return 0;let n=1;for(let r of e.children.values()){if(n>=t)break;let e=1+yv(r,t-1);e>n&&(n=e)}return n}function bv(e,t,n,r,i,a){let o=Math.min(a-i,Math.PI*2-1e-4),s=i+o,c=+(o>Math.PI),l=Math.cos(i),u=Math.sin(i),d=Math.cos(s),f=Math.sin(s),p=e=>e.toFixed(2);return`M${p(e+r*l)} ${p(t+r*u)}A${p(r)} ${p(r)} 0 ${c} 1 ${p(e+r*d)} ${p(t+r*f)}L${p(e+n*d)} ${p(t+n*f)}A${p(n)} ${p(n)} 0 ${c} 0 ${p(e+n*l)} ${p(t+n*u)}Z`}function xv(e,t){let n=Math.max(4,Math.floor(t/6.4));return e.length>n?`${e.slice(0,n-1)}\u2026`:e}var Sv=class extends _a{static properties={details:{attribute:!1},_w:{state:!0},_h:{state:!0},_focus:{state:!0},_mode:{state:!0},_reason:{state:!0},_kind:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this._w=0,this._h=0,this._root=null,this._focus=[],this._mode=lv,this._reason=``,this._kind=uv,this._mixedKinds=!1,this._reasons=new Map,this._dirByPath=new Map,this._status=`loading`,this._meta={total:0,prefix:``},this._ro=null,this._plot=null,this._tooltip=null,this._ttCell=null}willUpdate(e){e.has(`details`)&&(this._reason=cv.get(this.details?.integrity)??``),(e.has(`details`)||e.has(`_reason`)||e.has(`_kind`))&&this._rebuild()}firstUpdated(){this._plot=this.querySelector(`.bundle-treemap-plot`),this._tooltip=this.querySelector(`.bundle-treemap-tooltip`),this._plot&&typeof ResizeObserver<`u`&&(this._ro=new ResizeObserver(e=>{let t=e[0]?.contentRect;if(!t)return;let n=Math.floor(t.width),r=Math.floor(t.height);(n!==this._w||r!==this._h)&&(this._w=n,this._h=r)}),this._ro.observe(this._plot))}disconnectedCallback(){super.disconnectedCallback(),this._ro&&=(this._ro.disconnect(),null)}_onPointerMove(e){let t=e.target.closest(`.bundle-treemap-node`);if(!t||!this._tooltip){this._hideTooltip();return}if(t!==this._ttCell){this._ttCell=t;let e=t.dataset;M(k`<div class="bundle-treemap-tt-path">${e.ttPath}</div>${e.ttPkg?k`<div class="bundle-treemap-tt-head"><span class="bundle-treemap-tt-dot" style="${E({background:e.ttColor})}"></span> <span class="bundle-treemap-tt-pkg">${e.ttPkg}</span></div>`:``}<div class="bundle-treemap-tt-meta">${e.ttMeta}</div>`,this._tooltip)}this._positionTooltip(e.clientX,e.clientY)}_onPointerLeave(){this._hideTooltip()}_positionTooltip(e,t){let n=this._tooltip;if(!n||!this._plot)return;n.classList.add(`show`);let r=this._plot.getBoundingClientRect(),i=e-r.left,a=t-r.top,o=i+12;o+n.offsetWidth>r.width-4&&(o=i-n.offsetWidth-12),o<4&&(o=4);let s=a+12;s+n.offsetHeight>r.height-4&&(s=a-n.offsetHeight-12),s<4&&(s=4),n.style.left=`${o}px`,n.style.top=`${s}px`}_hideTooltip(){this._ttCell=null,this._tooltip&&this._tooltip.classList.remove(`show`)}_rebuild(){if(this._root=null,this._focus=[],this._dirByPath=new Map,this._reasons=new Map,this._mixedKinds=!1,this._meta={total:0,prefix:``},this._hideTooltip(),!this.details){this._status=`loading`;return}let e=Ht(this.details),t=[...e.keys()].filter(t=>e.get(t)!==null);if(t.length===0){this._status=`empty`;return}this._reasons=At(this.details,t),this._reasons.has(this._reason)||(this._reason=``,cv.delete(this.details.integrity));let n=this._reasons.get(this._reason),r=Gt(this.details),i=Ut(this.details),a=e=>i.get(e)===`resource`,o=t.filter(t=>e.get(t)>0);this._mixedKinds=o.some(a)&&!o.every(a);let s=this._mixedKinds?this._kind:``,{prefix:c,stripped:l}=kn(t),u=t.map(e=>Jr(e,{packageDir:r?.get(e)})),{groups:d,ranks:f}=gv(u,l,c,t.map(t=>e.get(t))),p={name:``,children:new Map,value:0,isFile:!1},m=0;for(let r=0;r<t.length;r++){if(n&&!n.has(t[r])||s&&a(t[r])!==(s===`resources`))continue;let o=e.get(t[r]);if(o<=0)continue;let c=l[r].split(`/`),f=p,h=!1;for(let e=0;e<c.length-1;e++){let t=f.children.get(c[e]);if(t&&t.isFile){h=!0;break}t||(t={name:c[e],children:new Map,value:0,isFile:!1},f.children.set(c[e],t)),f=t}if(h)continue;let g=c.at(-1),_=f.children.get(g);_&&!_.isFile||(_||(_={name:g,isFile:!0,value:0,origPath:t[r],pkg:u[r],group:d.get(l[r])??null,resource:i.get(t[r])===`resource`||this.details.listedOnly===!0},f.children.set(g,_)),_.value+=o,m+=o)}if(m===0){this._status=`empty`;return}for(let e of p.children.values())mv(e);let h=new Map;hv(p,``,null,h),this._groupRanks=f,this._root=p,this._dirByPath=h,this._meta={total:m,prefix:c},this._status=`ok`;let g=this.details?.integrity?sv.get(this.details.integrity):null;if(g){let e=h.get(g);e?this._focus=this._chainTo(e):sv.delete(this.details.integrity)}}get _focusNode(){return this._focus.length>0?this._focus.at(-1):this._root}_chainTo(e){let t=[];for(let n=e;n&&n!==this._root;n=n.parent)t.push(n);return t.reverse(),t}_rememberFocus(){let e=this.details?.integrity;if(!e)return;let t=this._focus.at(-1)?.path;t?sv.set(e,t):sv.delete(e)}_drillInto(e){!e||e.isFile||!e.children||e.children.size===0||(this._focus=this._chainTo(e),this._rememberFocus(),this._hideTooltip())}_focusTo(e){let t=e<0?[]:this._focus.slice(0,e+1);t.length!==this._focus.length&&(this._focus=t,this._rememberFocus(),this._hideTooltip())}_toggleMode(){this._mode=this._mode===`sunburst`?`treemap`:`sunburst`,lv=this._mode,this._hideTooltip()}_toggleKind(e){this._kind=this._kind?``:e,uv=this._kind}_changeReason(e){this._reason=e.detail.value.replace(/^reason:/u,``);let t=this.details?.integrity;t&&(this._reason?cv.set(t,this._reason):cv.delete(t))}_onPlotClick(e){let t=e.target.closest(`[data-treemap-into]`);if(!t)return;let n=this._dirByPath.get(t.dataset.treemapInto);n&&this._drillInto(n)}_renderCrumbs(){let e=this._focus,t=e.length===0,n=e.slice(0,-1),r=t?null:e.at(-1);return k`<nav class="bundle-treemap-crumbs" aria-label="Treemap location"><span class="bundle-treemap-crumbs-lead"><button type="button" class="${T({"bundle-treemap-crumb-home":!0,"at-root":t})}" @click="${()=>this._focusTo(-1)}">Source ${this._mode===`sunburst`?`sunburst`:`treemap`}</button> ${n.map((e,t)=>k`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><button type="button" class="bundle-treemap-crumb" @click="${()=>this._focusTo(t)}" data-tooltip-truncated data-tooltip="${e.path}">${e.name}</button>`)} </span>${r?k`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><span class="bundle-treemap-crumb-current" aria-current="location" data-tooltip-truncated data-tooltip="${r.path}">${r.name}</span>`:``}</nav>`}_paint(e){if(this._groupRanks?.size>0)return e.group==null?{color:tr(),label:null,named:!1}:{color:$n(this._groupRanks.get(e.group)??0),label:e.group,named:!0};let t=e.pkg??Jr(e.path);return{color:nr(t),label:Xr(t),named:e.pkg!=null}}_cell(e){let t=vv(e.node.value,this._meta.total),n={left:`${e.x}px`,top:`${e.y}px`,width:`${e.w}px`,height:`${e.h}px`},r=`${e.node.count} ${e.node.count===1?`file`:`files`}`;if(e.kind===`dir`)return k`<div class="bundle-treemap-node bundle-treemap-dir" style="${E(n)}" data-treemap-into="${e.node.path}" data-tt-path="${`${e.node.path}/`}" data-tt-meta="${`${On(e.node.value)} \xB7 ${r} \xB7 ${t}%`}"><span class="bundle-treemap-dirname">${e.node.name}</span></div>`;let{color:i,label:a}=this._paint(e.node),o=E({...n,background:i,color:dv(i)}),s=a??j;return e.kind===`agg`?k`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-agg" style="${o}" data-treemap-into="${e.node.path}" data-tt-path="${`${e.node.path}/`}" data-tt-pkg="${s}" data-tt-color="${i}" data-tt-meta="${`${On(e.node.value)} \xB7 ${r} \xB7 ${t}%`}"><span class="bundle-treemap-label">${e.node.name}/</span></div>`:k`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-file" style="${o}" data-bundle-view-source="${e.node.resource?j:e.node.origPath}" data-tt-path="${e.node.path}" data-tt-pkg="${s}" data-tt-color="${i}" data-tt-meta="${`${On(e.node.value)} \xB7 ${t}% of bundle`}"><span class="bundle-treemap-label">${e.node.name}</span></div>`}_arc(e,t,n){let r=vv(e.value,n),{color:i,label:a,named:o}=this._paint(e),s=a??j;if(e.isFile)return A`<path
|
|
6
|
+
class="bundle-treemap-node bundle-treemap-arc"
|
|
7
|
+
d=${t}
|
|
8
|
+
fill=${i}
|
|
9
|
+
data-bundle-view-source=${e.resource?j:e.origPath}
|
|
10
|
+
data-tt-path=${e.path}
|
|
11
|
+
data-tt-pkg=${s}
|
|
12
|
+
data-tt-color=${i}
|
|
13
|
+
data-tt-meta=${`${On(e.value)} \xB7 ${r}% of bundle`}
|
|
14
|
+
></path>`;let c=`${e.count} ${e.count===1?`file`:`files`}`;return A`<path
|
|
15
|
+
class="bundle-treemap-node bundle-treemap-arc"
|
|
16
|
+
d=${t}
|
|
17
|
+
fill=${i}
|
|
18
|
+
data-treemap-into=${e.path}
|
|
19
|
+
data-tt-path=${`${e.path}/`}
|
|
20
|
+
data-tt-pkg=${o?s:j}
|
|
21
|
+
data-tt-color=${o?i:j}
|
|
22
|
+
data-tt-meta=${`${On(e.value)} \xB7 ${c} \xB7 ${r}%`}
|
|
23
|
+
></path>`}_renderSunburst(e){let t=this._w,n=this._h,r=t/2,i=n/2,a=Math.min(t,n)/2-6;if(a<30)return j;let o=yv(e,tv),s=Math.min(Math.max(a*.18,26),a*.45),c=(a-s)/o,l=this._meta.total||1,u=[],d=(e,t,n,a)=>{let f=[...e.children.values()].toSorted((e,t)=>t.value-e.value),p=n-t,m=t;for(let t of f){let n=p*(t.value/e.value),f=s+(a-1)*c,h=f+c;n*h>=ov&&(u.push(this._arc(t,bv(r,i,f,h,m,m+n),l)),!t.isFile&&a<o&&t.children.size>0&&d(t,m,m+n,a+1)),m+=n}};d(e,-Math.PI/2,Math.PI*1.5,1);let f=this._focus.length>0,p=Math.max(s-4,10),m=f?A`<circle
|
|
24
|
+
class="bundle-treemap-node bundle-treemap-center"
|
|
25
|
+
cx=${r} cy=${i} r=${p}
|
|
26
|
+
data-treemap-into=${e.parent.path}
|
|
27
|
+
data-tt-path=${`${e.path}/`}
|
|
28
|
+
data-tt-meta=${`${On(e.value)} \xB7 ${e.count} ${e.count===1?`file`:`files`} \xB7 ${vv(e.value,l)}%`}
|
|
29
|
+
></circle>`:A`<circle class="bundle-treemap-center" cx=${r} cy=${i} r=${p}></circle>`,h=A`<text class="bundle-treemap-center-label" x=${r} y=${i} text-anchor="middle">
|
|
30
|
+
${f?A`<tspan x=${r} dy="-0.3em">${xv(e.name,p*2-12)}</tspan><tspan class="bundle-treemap-center-sub" x=${r} dy="1.5em">${On(e.value)}</tspan>`:A`<tspan x=${r} dy="0.35em">${On(e.value)}</tspan>`}
|
|
31
|
+
</text>`;return k`<svg class="bundle-treemap-sunburst" width="${t}" height="${n}" viewBox="${`0 0 ${t} ${n}`}">${u}${m}${h}</svg>`}render(){let e=this._focusNode,t=this._mode===`sunburst`,n=this._status===`ok`&&e&&e.children&&this._w>0&&this._h>0,r=[];if(n&&!t){let t=[...e.children.values()].toSorted((e,t)=>t.value-e.value);for(let e of pv(t,{x:0,y:0,w:this._w,h:this._h}))_v(e.node,e.x,e.y,e.w,e.h,1,r)}let{prefix:i}=this._meta,a=e?e.count:0,o=e?e.value:0;return k`<header class="bundle-treemap-head">${this._renderCrumbs()} <span class="bundle-treemap-head-right"><span class="bundle-treemap-sub">${a} ${a===1?`file`:`files`} · ${On(o)}${i?k` · <span class="mono">${i}</span>`:``}</span> ${this._reasons.size>0?k`<bundle-scope-selector compact="compact" .reasons="${[...this._reasons.keys()].map(e=>({id:`reason:${e}`,label:e}))}" .value="${this._reason?`reason:${this._reason}`:``}" label="Filter files" @scope-change="${this._changeReason}"></bundle-scope-selector>`:j} ${this._mixedKinds?k`<span class="bundle-treemap-kind" role="group" aria-label="Show only">${[[`code`,`Code`],[`resources`,`Resources`]].map(([e,t])=>k`<button type="button" aria-pressed="${String(this._kind===e)}" @click="${()=>this._toggleKind(e)}">${t}</button>`)}</span>`:j}<mode-switch compact="compact" label="Sunburst" .checked="${t}" accessible-label="Toggle sunburst view" @click="${this._toggleMode}"></mode-switch></span></header><div class="bundle-treemap-plot" @click="${this._onPlotClick}" @pointermove="${this._onPointerMove}" @pointerleave="${this._onPointerLeave}">${this._status===`loading`?k`<div class="bundle-treemap-empty">Loading…</div>`:this._status===`empty`?k`<div class="bundle-treemap-empty">${!this._mixedKinds||!this._kind?`This bundle doesn't carry any source content.`:this._kind===`code`?`No code here, only resources.`:`No resources here, only code.`}</div>`:t?n?this._renderSunburst(e):j:r.map(e=>this._cell(e))}<div class="bundle-treemap-tooltip"></div></div>`}};customElements.define(`bundle-treemap`,Sv);function Cv(e=document){if(e.querySelector(`:modal`))return!0;for(let t of e.querySelectorAll(`*`))if(t.shadowRoot&&Cv(t.shadowRoot))return!0;return!1}var wv=`a{cursor:default}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}button,summary,select,label,legend,header h3,.section-title,.ui-hint,.hint,.note,.lwd-note,.lwd-empty,.empty:not(.error,[role=alert]),.empty-discussion,.history-state[role=status],.history-summary{cursor:default;user-select:none;-webkit-user-select:none}input:not([type=checkbox],[type=radio]),textarea,[contenteditable],pre,code,.mono{cursor:text;user-select:text;-webkit-user-select:text}dialog{margin-top:5rem;margin-inline:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--surface);color:var(--text);padding:1.1rem 1.25rem 1rem;max-width:480px;width:min(94vw,480px);box-shadow:0 20px 60px #00000059;&::backdrop{background:rgb(from var(--theme-bar) r g b / .55);backdrop-filter:blur(2px)}}header h3{margin:0 0 .6rem;font-size:1rem;font-weight:600}.nwd-input{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:.88rem;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted)}}.nwd-note{margin:.55rem 0 0;color:var(--muted);font-size:.74rem;line-height:1.45}.nwd-intro{margin:0 0 .8rem;color:var(--muted);font-size:.82rem;line-height:1.5}.nwd-actions{display:flex;align-items:center;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}.nwd-spacer{flex:1}.nwd-actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.35rem .9rem;font:inherit;font-size:.8rem;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent);&:hover:not(:disabled){color:var(--surface);filter:brightness(1.08)}}&.quiet{border-color:transparent;color:var(--muted);&:hover:not(:disabled){border-color:transparent}}&.danger{color:var(--critical, #f87171);border-color:var(--border);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--critical, #f87171)}}&:disabled{opacity:.5}}:host-context(body.theme-w95){& dialog{border:0;box-shadow:var(--w95-window);&:before{content:"";display:block;flex:none;height:20px}&::backdrop{background:none;backdrop-filter:none}}& header h3{position:absolute;top:3px;right:3px;left:3px;display:flex;align-items:center;gap:4px;height:18px;margin:0;padding:0 24px 0 4px;overflow:hidden;background:var(--w95-title);color:#fff;font-size:11px;font-weight:700;line-height:18px;white-space:nowrap;& svg{flex:none;width:14px;height:14px}}& button[aria-label^=Close]{position:absolute;top:5px;right:5px;z-index:1;display:grid;place-items:center;width:16px;height:14px;padding:0;border:0;border-radius:0;background:var(--w95-face);color:#000;box-shadow:var(--w95-raised);font-size:13px;line-height:1;&:hover{background:var(--w95-face);color:#000}&:active{box-shadow:var(--w95-pressed)}}.nwd-actions button{min-width:75px;min-height:23px;border-color:transparent;background:var(--w95-face);color:#000;box-shadow:var(--w95-raised);font-size:11px;&:hover:not(:disabled){border-color:transparent;color:#000}&:active:not(:disabled){box-shadow:var(--w95-pressed)}&:disabled{color:var(--w95-shadow);text-shadow:1px 1px #fff;opacity:1}&:focus-visible{outline:1px dotted #000;outline-offset:-4px}&.primary,&.primary:hover:not(:disabled){box-shadow:var(--w95-default);color:#000;filter:none}&.primary:active:not(:disabled){box-shadow:inset 0 0 0 1px #000,inset 0 0 0 2px var(--w95-shadow)}&.quiet{box-shadow:none}&.danger,&.danger:hover:not(:disabled){color:var(--critical)}}.nwd-input{border-color:transparent;box-shadow:var(--w95-sunken);&:focus{border-color:transparent;box-shadow:var(--w95-sunken)}}}@media(display-mode:window-controls-overlay){dialog{-webkit-app-region:no-drag;app-region:no-drag}}:host-context(body.theme-w95) *{overscroll-behavior:none}
|
|
32
|
+
`,Tv=class extends _a{static styles=[ma(wv)];exclusive=!1;firstUpdated(){hr(this.renderRoot),this.beforeOpen();let e=this.renderRoot.querySelector(`dialog`);if(e){if(this.exclusive&&Cv()){this._conflict(new DOMException(`Another modal dialog is already open`,`InvalidStateError`));return}try{e.showModal()}catch(e){this._conflict(e);return}this.focusInitial()}}_conflict(e){this._settled=!0,this.dispatchEvent(new CustomEvent(`modal-conflict`,{detail:{cause:e}}))}beforeOpen(){}focusInitial(){(this.renderRoot.querySelector(`input, textarea`)??this.renderRoot.querySelector(`button.primary`)??this.renderRoot.querySelector(`button`))?.focus()}_finish(e){this._settled||(this._settled=!0,this.renderRoot.querySelector(`dialog`)?.close(),this.dispatchEvent(new CustomEvent(`resolve`,{detail:e})))}_onClose=()=>this._finish(null);_onBackdrop=e=>{if(e.target!==e.currentTarget)return;let{left:t,right:n,top:r,bottom:i}=e.currentTarget.getBoundingClientRect();(e.clientX<t||e.clientX>n||e.clientY<r||e.clientY>i)&&this._onClose()}};function Ev(e,t={}){return new Promise(n=>{let r=document.createElement(e);Object.assign(r,t),r.addEventListener(`resolve`,e=>{r.remove(),n(e.detail)}),document.body.append(r)})}function Dv(e,t,n){return new Promise((r,i)=>{let a=document.createElement(e);Object.assign(a,t),a.exclusive=!0,a.addEventListener(`resolve`,e=>{a.remove(),r(e.detail)}),a.addEventListener(`modal-conflict`,e=>{n(a),a.remove(),i(Xm(e.detail?.cause))}),document.body.append(a)})}var Ov=`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)}}
|
|
33
|
+
`,kv=class extends Tv{static styles=[...Tv.styles,ma(Ov)];static properties={_busy:{state:!0},_error:{state:!0}};constructor(){super(),this._busy=!1,this._error=``,this._abortController=null}_finish(e){if(!this._settled){if(this._abortController)try{this._abortController.abort()}catch{}super._finish(!!e)}}_onCancel=()=>this._finish(!1);_onUnlock=async()=>{if(!this._busy){this._busy=!0,this._error=``,this._abortController=new AbortController;try{if(await Mo({signal:this._abortController.signal})){this._finish(!0);return}this._error=``}catch(e){this._error=e?.message??String(e)}finally{this._busy=!1,this._abortController=null}}};render(){return k`<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?k`<p class="wsl-error">${this._error}</p>`:j}<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…`:`Unlock with passkey`}</button></footer></dialog>`}};customElements.define(`passkey-unlock-dialog`,kv);function Av(){return Ev(`passkey-unlock-dialog`)}var jv=`deepviewManagedNavigation`,Mv=`deepviewManagedLoginFinding`;function Nv(e,t){return e?.view===`findings`&&t?.view===`findings`&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Pv(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===`repository-code`?e.repoId===t.repoId&&e.commit===t.commit&&(e.path??``)===(t.path??``):e.view===`bundles`&&(e.teamSlug??null)===(t.teamSlug??null)&&e.bundleSlug===t.bundleSlug}function Fv(e){let t=e.location.hash,n=Xe(t),r=!1,i=null,a=0,o=null,s=null,c=!1,l=null,u=null,d=null;function f(){return e.location.hash.startsWith(`#public=`)&&e.location.hash!==t}function p(e){let t=ui(e),n=t?.view===`home`?Ur(e.hash):null;return t?{...t,...n?{finding:n}:{}}:null}function m(){try{let t=e.sessionStorage?.getItem(Mv);if(e.sessionStorage?.removeItem(Mv),!t)return null;let n=new URL(t,e.location.origin),r=n.origin===e.location.origin?p(n):null;return r?.finding?r:null}catch{return null}}function h(){if(!r||!Ur(e.location.hash)||l===e.location.href||e.history.state?.[jv]&&e.history.state[jv]!==i)return;let t=l=e.location.href;_(p(new URL(t))??{view:`home`},{replace:!0}).finally(()=>{l===t&&(l=null)})}function g(t){f()||(t=et(t,n),e.history.replaceState(r?{[jv]:i}:null,``,t),s=t)}async function _(t,{replace:c=!1,pop:l=!1}={}){if(!r||!o||f())return!1;t??={view:`home`};let d=oi(t);if(d===null)return!1;let p=++a,m=u={route:t,path:d,push:!l&&!c,shown:!1,findingRoute:null,codeRoute:null},h=()=>r&&p===a&&!f(),_=!1;try{_=await o(t,h)}catch(e){console.warn(`managed: navigation failed:`,e)}return h()?_?(typeof _==`object`&&(d=oi(_)??d),Nv(m.findingRoute,typeof _==`object`?_:t)&&(d=oi(m.findingRoute)),Pv(m.codeRoute,typeof _==`object`?_:t)&&(d=oi(m.codeRoute)),u=null,l||c||m.shown?g(d):et(d,n)!==s&&(d=et(d,n),e.history.pushState({[jv]:i},``,d),s=d),!0):(await o({view:`home`},h),h()&&(u=null,g(`/`)),!1):!1}function v(t){if(!f()){if(!r){t.state?.[jv]&&g(`/`);return}if((!t.state?.[jv]||t.state[jv]===i)&&Ur(e.location.hash)){h();return}if(!t.state?.[jv]){let t=p(new URL(e.location.href)),n=s==null?null:ui(new URL(s,e.location.href));if(t?.file!=null&&t.file===n?.file&&Pv(t,n)){g(oi(t));return}}_((t.state?.[jv]===i?p(new URL(e.location.href)):null)??{view:`home`},{pop:!0})}}function y(t){if(!r||t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let n=t.composedPath().find(e=>e.matches?.(`a.comment-self-ref[href]`));if(!n||n.hasAttribute(`download`)||n.target&&n.target!==`_self`)return;let i=new URL(n.href);if(i.origin!==e.location.origin)return;let a=p(i);if(a?.finding)return t.preventDefault(),_(a)}return{get active(){return r},rememberFinding(){let t=p(new URL(e.location.href));if(!t?.finding)return;let n=t.view===`home`?`/#${Vr(t.finding)}`:oi(t);try{e.sessionStorage?.setItem(Mv,n)}catch{}},start(t,{onCancel:n=null}={}){if(r)return;r=!0,o=t,d=n,i=typeof e.history.state?.[jv]==`string`?e.history.state[jv]:e.crypto.randomUUID(),c||=(e.addEventListener(`popstate`,v),e.addEventListener(`hashchange`,h),e.addEventListener(`click`,y),e.launchQueue?.setConsumer(({targetURL:t})=>{if(!r||!t)return;let n=new URL(t);if(n.origin!==e.location.origin)return;let i=p(n);i&&_(i)}),!0);let a=m(),s=p(new URL(e.location.href))??{view:`home`};return a&&s.view===`home`&&!s.finding&&(s=a),_(s,{replace:!0})},navigate:_,replaceFindingRoute(t){if(!r||t?.view!==`findings`||f())return;let i=oi(t);if(i!=null){if(u){(u.route.view===`home`&&u.route.finding||Nv(t,{...u.route,view:`findings`}))&&(u.findingRoute=t);return}Nv(t,ui(new URL(e.location.href)))&&et(i,n)!==s&&g(i)}},replaceCodeRoute(t){if(!r||f()||![`bundles`,`npm`,`repository-code`].includes(t?.view)||t.bundleTab!==`code`)return;let i=oi(t);if(i!=null){if(u){Pv(t,u.route)&&(u.codeRoute=t);return}Pv(t,ui(new URL(e.location.href)))&&et(i,n)!==s&&g(i)}},showing(t){let a=u;if(!r||f()||!a||a.route!==t||a.shown)return;a.shown=!0;let o=et(a.path,n);!a.push||o===s?g(a.path):(e.history.pushState({[jv]:i},``,o),s=o)},replaceRoute(e){if(!r||!e||f())return;let t=oi(e);t!=null&&!u&&g(t)},pushRoute(t){if(!r||!t||f())return;let o=oi(t);if(o==null)return;let c=u!==null;++a,u=null,o=et(o,n),o!==s&&(e.history.pushState({[jv]:i},``,o),s=o),c&&d?.()},reset({force:t=!1}={}){if(++a,u=null,r||t){try{e.sessionStorage?.removeItem(Mv)}catch{}r=!1,i=null,o=null,g(`/`)}}}}var U=typeof window>`u`?null:Fv(window);function Iv(e){return F()&&!P.managedSession?.publicShare&&qe(P.managedSession?.role,`triage`)&&!!(e?._managedReportId&&e.id)}function Lv(e){let t=e?.teams?.find(t=>t.id===e.teamId);return t?!t.cacheKey||!Array.isArray(t.reports)||t.reports.some(e=>!e.cacheKey)?e.teams:JSON.stringify([t.cacheKey,t.reports.map(e=>[e.id,e.cacheKey,e.visible!==!1]).toSorted()]):null}var Rv=class{constructor({context:e,fetchWorkspace:t,changed:n=()=>{},now:r=Date.now}){this.getContext=e,this.fetchWorkspace=t,this.changed=n,this.now=r,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 e=this.getContext();if(e?.key!==this.context?.key||e?.teamId!==this.context?.teamId||e?.reportId!==this.context?.reportId||e?.teams!==this.context?.teams){let t=Lv(e);(e?.key!==this.context?.key||e?.teamId!==this.context?.teamId||e?.reportId!==this.context?.reportId||t!==this.scope)&&this.reset(),this.context=e,this.scope=t}return this.scope===null?null:this.context}schedule(){!this.timer&&!this.run&&(this.timer=setTimeout(()=>{this.timer=null,this.flush()},0))}read(e,{refreshIfMissing:t=!1}={}){let n=this.syncContext()?.teamId&&Kh(e);if(!n)return null;let r=qh(n),i=this.entries.get(r)??null;return t&&!i&&(this.run?this.required.add(r):this.expires=0),this.expires<=this.now()&&this.schedule(),i}async flush(){let e=this.syncContext();if(!e?.teamId||this.run||this.expires>this.now())return;let t=this.run=new AbortController,n;try{n=await this.fetchWorkspace(e.teamId,t.signal,e.reportId)}catch{n=null}if(this.syncContext(),this.run!==t||t.signal.aborted)return;this.entries.clear();for(let e of Array.isArray(n)?n:[]){let t=Kh(e?.url);if(t&&typeof e.title==`string`&&[`open`,`draft`,`closed`,`merged`].includes(e.status)){let n=t.kind===`issue`&&e.status===`closed`?Vh(e.stateReason):null;this.entries.set(qh(t),{title:e.title,description:typeof e.description==`string`?e.description:null,status:e.status,stateReason:n})}}this.expires=this.now()+6e4,this.run=null;let r=[...this.required].some(e=>!this.entries.has(e));this.required.clear(),r&&(this.expires=0,this.schedule()),this.changed()}},zv=new Set,Bv=new Rv({context:()=>{let e=P.managedSession;return F()&&e?.id&&P.currentManagedTeam?{key:JSON.stringify([e.id,e.role,e.csrfToken]),teamId:P.currentManagedTeam,reportId:P.managedTeams.find(e=>e.id===P.currentManagedTeam)?.reports.find(e=>e.id===P.currentManagedReport&&e.visible===!1)?.id??null,teams:P.managedTeams}:null},fetchWorkspace:tx,changed:()=>{for(let e of zv)e()}});function Vv(e){return zv.add(e),()=>zv.delete(e)}function Hv(){Bv.reset();for(let e of zv)e()}function Uv(e){P.currentManagedTeam===e&&Hv()}function Wv(e,t,n){if(P.currentManagedTeam!==e)return;let r=[...t].map(e=>({id:e,issue:P.managedIssues.get(e)}));r.some(({id:e,issue:t})=>t?.url!==n.get(e)?.url)&&Uv(e);for(let{id:e,issue:t}of r)t?.autoFix&&t.autoFix!==n.get(e)?.autoFix&&Bv.read(t.autoFix,{refreshIfMissing:!0});let i=r.find(({issue:e})=>e?.url)?.issue.url;i&&Bv.read(i)}var Gv={claude:{name:`Claude`,mark:`anthropic`,accounts:[{id:81847,logins:[`claude`]},{logins:[`claude[bot]`]}],names:[`Claude`],emails:[`noreply@anthropic.com`]},codex:{name:`Codex`,mark:`openai`,accounts:[{id:199175422,logins:[`chatgpt-codex-connector`,`chatgpt-codex-connector[bot]`]}],names:[`Codex`],emails:[`codex@openai.com`]},copilot:{name:`Copilot`,mark:`github-copilot`,accounts:[{id:198982749,logins:[`Copilot`,`copilot-swe-agent`]},{id:175728472,logins:[`Copilot`,`copilot-pull-request-reviewer`,`copilot-pull-request-reviewer[bot]`]}],names:[`Copilot`]},dependabot:{name:`Dependabot`,avatar:`app-29110`,accounts:[{id:49699333,logins:[`dependabot`,`dependabot[bot]`]}],names:[`dependabot[bot]`]},actions:{name:`GitHub Actions`,avatar:`app-15368`,accounts:[{id:41898282,logins:[`github-actions`,`github-actions[bot]`]}],names:[`github-actions[bot]`]},cursor:{name:`Cursor`,accounts:[],names:[`Cursor Agent`],emails:[`cursoragent@cursor.com`]}},Kv=Object.entries(Gv),qv=new Map;for(let[e,{accounts:t}]of Kv)for(let{id:n,logins:r}of t)for(let t of r)qv.set(t.toLowerCase(),{agent:e,ids:[...qv.get(t.toLowerCase())?.ids??[],n]});var Jv=new Map(Kv.flatMap(([e,{names:t}])=>t.map(t=>[t.toLowerCase(),e])));new Map(Kv.flatMap(([e,{emails:t=[]}])=>t.map(t=>[t,e])));function Yv(e,t=null,n=null){if(typeof e!=`string`)return typeof n==`string`?Jv.get(n.trim().toLowerCase())??null:null;let r=qv.get(e.toLowerCase());return r&&(t===null||r.ids.includes(void 0)||r.ids.includes(t))?r.agent:null}function Xv(e,t){let n=new Set([...t].map(t=>Yv(e,t)));return n.size===1&&!n.has(null)}var Zv=new Map([[`author`,`authorId`],[`authorLogin`,`authorId`],[`mergedBy`,`mergedById`],[`login`,`id`]]),Qv=/^[A-Za-z\d][A-Za-z\d-]{0,38}(?:\[bot\])?$/u,$v=8,ey=e=>Number.isSafeInteger(e)&&e>0?e:null;function ty(e){let t=new Map;ny(e,t,0);let n=new Map;for(let[e,r]of t)n.set(e.toLowerCase(),new Set([...n.get(e.toLowerCase())??[],...r]));return new Map([...t.keys()].map(e=>{let t=n.get(e.toLowerCase());return t.size<=1?[e,[...t][0]??null]:[e,Xv(e,t)?null:`ambiguous`]}))}function ny(e,t,n){if(n>$v||typeof e!=`object`||!e)return;if(Array.isArray(e)){for(let r of e)ny(r,t,n+1);return}let r=e;for(let[e,i]of Object.entries(r)){let a=Zv.get(e);if(a&&typeof i==`string`&&Qv.test(i)){let e=ey(r[a]);t.set(i,new Set([...t.get(i)??[],...e===null?[]:[e]]))}else ny(i,t,n+1)}}var ry=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="M23.75 4.48c-.26-.12-.37.11-.51.24l-.14.13c-.37.4-.8.66-1.37.63a2.7 2.7 0 0 0-2.17.85 2 2 0 0 0-1.24-1.55c-.36-.16-.71-.31-.96-.65-.17-.24-.22-.51-.3-.78-.06-.16-.11-.32-.3-.35-.2-.03-.27.14-.35.28q-.46.87-.43 1.84a4 4 0 0 0 1.84 3.4q.2.12.13.32l-.26.83c-.06.18-.14.22-.33.14a6 6 0 0 1-1.74-1.18c-.86-.83-1.63-1.74-2.6-2.46l-.69-.47c-.98-.96.13-1.74.4-1.84.26-.1.09-.43-.79-.42-.87 0-1.67.3-2.68.68l-.47.14a10 10 0 0 0-2.88-.1 6.2 6.2 0 0 0-4.5 2.62 7.7 7.7 0 0 0-1.26 6.07 9.3 9.3 0 0 0 3.36 5.65 9 9 0 0 0 6.44 2.14 7.6 7.6 0 0 0 5-1.86c.46.24.96.33 1.77.4.63.06 1.24-.03 1.7-.13.74-.15.7-.84.43-.96-2.16-1-1.68-.6-2.11-.92 1.1-1.3 2.74-2.65 3.39-7 .05-.35 0-.57 0-.85 0-.17.03-.24.23-.26a4 4 0 0 0 1.54-.47c1.4-.77 1.96-2.02 2.1-3.52.02-.23 0-.47-.25-.59M11.58 18c-2.09-1.64-3.1-2.18-3.52-2.16-.4.02-.32.47-.23.76s.2.49.37.74c.11.17.19.42-.12.6-.67.42-1.84-.13-1.9-.16a8.7 8.7 0 0 1-3.3-3.3 10 10 0 0 1-1.3-4.5c-.01-.38.1-.51.48-.58a5 5 0 0 1 1.53-.04 9.6 9.6 0 0 1 5.47 2.77c.87.86 1.53 1.89 2.2 2.9a14 14 0 0 0 2.48 2.9q.51.45.9.68c-.8.1-2.15.11-3.06-.61m1-6.44a.3.3 0 0 1 .42-.29.3.3 0 0 1 .2.3.3.3 0 0 1-.31.3.3.3 0 0 1-.3-.31m3.11 1.6q-.3.13-.59.16a1.3 1.3 0 0 1-.8-.26c-.27-.23-.47-.36-.55-.76a2 2 0 0 1 .02-.58c.07-.33-.01-.54-.24-.73q-.3-.22-.69-.2l-.25-.08a.25.25 0 0 1-.12-.36 1 1 0 0 1 .2-.2c.35-.2.76-.14 1.14.01.35.14.62.4 1 .78.4.45.46.58.69.92q.27.38.44.84.1.3-.25.46"/></svg>`,iy=k`<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 24 24"><path fill="#4285F4" d="M21.35 12.27q0-1.19-.2-2.27H12v4.3h5.24a4.5 4.5 0 0 1-1.94 2.94v2.45h3.15c1.85-1.7 2.9-4.2 2.9-7.42"/><path fill="#34A853" d="M12 21.8c2.64 0 4.86-.87 6.48-2.35L15.33 17a6 6 0 0 1-3.33.92 5.9 5.9 0 0 1-5.51-4.06H3.24v2.52A9.8 9.8 0 0 0 12 21.8"/><path fill="#FBBC05" d="M6.49 13.86a6 6 0 0 1 0-3.72V7.62H3.24a9.8 9.8 0 0 0 0 8.76z"/><path fill="#EA4335" d="M12 6.08c1.43 0 2.72.49 3.74 1.45l2.8-2.8A9.3 9.3 0 0 0 12 2.2a9.8 9.8 0 0 0-8.76 5.42l3.25 2.52A5.9 5.9 0 0 1 12 6.08"/></svg>`,ay=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="m9.27 15.29 7.98-5.9c.39-.29.95-.17 1.13.27a6.6 6.6 0 0 1-1.4 7.17 6.5 6.5 0 0 1-7.15 1.41L7.1 19.5a8.96 8.96 0 0 0 13.95-9.38l.01.01c-.98-4.23.24-5.92 2.75-9.38L24 .5l-3.3 3.3zm-1.65 1.42c-2.79-2.67-2.3-6.8.07-9.18a6.7 6.7 0 0 1 7.17-1.43l2.7-1.25a8 8 0 0 0-1.82-1 9 9 0 0 0-9.76 1.97 9 9 0 0 0-1.96 9.76c1.02 2.5-.65 4.25-2.34 6.03-.6.63-1.2 1.25-1.68 1.92z"/></svg>`,oy=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="M6.9 4c1.91 0 3.51.93 5.43 3.38L12.6 7q.28-.36.58-.7l.31-.36C14.6 4.8 15.8 4 17.23 4a5 5 0 0 1 3.49 1.52l.21.2c1.73 1.77 2.92 4.72 3.06 8.04v.39l.01.25q0 2.27-.82 3.7l-.14.23-.1.15q-.45.64-1.1 1l-.26.15-.08.04-.3.12a4 4 0 0 1-1.34.2q-.78 0-1.43-.2a4.4 4.4 0 0 1-1.73-1.12l-.23-.24a22 22 0 0 1-2.49-3.59l-1.43-2.4-.54-.9-1.77 3.13-.34.6C7.6 19.15 6.23 20 4.36 20c-1.21 0-2.2-.42-2.94-1.18l-.17-.19a5 5 0 0 1-1.04-2.18l-.07-.32a9 9 0 0 1-.13-1.3L0 14.48q0-1.13.17-2.23l.1-.58c.3-1.53.83-2.95 1.54-4.15l.2-.34C3.2 5.34 4.82 4.1 6.64 4zm-.04 2.62h-.2c-.83.09-1.6.68-2.25 1.58l-.14.2v.02a11 11 0 0 0-1.46 3.84v.03a13 13 0 0 0-.21 2.25v.19q0 .27.04.54l.04.29q.15.75.49 1.2l.11.14q.46.5 1.17.5c1.1 0 1.8-.68 3.7-3.64l2.17-3.4.46-.7-.14-.2C9.11 7.3 8.08 6.62 6.86 6.62m10.2-.56-.18.01q-.93.08-1.82.93l-.2.2q-.64.7-1.36 1.8l.27.4.55.86.29.48 1.4 2.33.7 1.12q.84 1.37 1.4 2.08l.21.26q.41.48.78.68l.1.05q.34.14.72.13.27 0 .52-.07.5-.16.81-.64l.1-.16.07-.16q.3-.7.3-1.79l-.01-.45c-.08-2.87-.94-5.37-2.2-6.8l-.18-.18a3.2 3.2 0 0 0-2.27-1.08"/></svg>`,sy=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="gold" d="M3.43 3.4h3.43v3.43H3.43zm13.71 0h3.43v3.43h-3.43z"/><path fill="#FFAF00" d="M3.43 6.83h6.86v3.43H3.43zm10.28 0h6.86v3.43h-6.86z"/><path fill="#FF8205" d="M3.43 10.26h17.14v3.43H3.43z"/><path fill="#FA500F" d="M3.43 13.69h3.43v3.42H3.43zm6.86 0h3.43v3.42h-3.43zm6.85 0h3.43v3.42h-3.43z"/><path fill="#E10500" d="M0 17.11h10.29v3.43H0zm13.71 0H24v3.43H13.71z"/></svg>`,cy=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="m1.05 16.92 9.54 2.55a21 21 0 0 0 .06 2.03l5.96 1.6a12 12 0 0 1-5.59.86l-.18-.02h-.04l-.09-.01-.1-.01-.15-.02-.1-.01-.11-.02-.32-.05h-.05l-.07-.02-.1-.02-.08-.02-.1-.02-.07-.01-.1-.02-.09-.02-.1-.03-.06-.01-.09-.03-.09-.02-.1-.02-.08-.03-.1-.03-.07-.02-.08-.02-.1-.03-.1-.03-.06-.02-.08-.03-.09-.03-.06-.02-.05-.02-.06-.02-.1-.04-.06-.02-.08-.03-.09-.04-.09-.03-.08-.04-.1-.04-.05-.02-.07-.03-.04-.02-.06-.03-.1-.05-.06-.02-.1-.05-.06-.03-.08-.04-.09-.04-.1-.05-.04-.02-.1-.06-.06-.03-.06-.03-.05-.03-.1-.05-.05-.03-.05-.03-.07-.04-.09-.05-.09-.06-.05-.03-.08-.06-.07-.03-.07-.05-.07-.05-.06-.04-.05-.03-.05-.03-.04-.03-.04-.03-.06-.04-.07-.05-.07-.05-.08-.06-.05-.04-.08-.06-.07-.06-.09-.06-.04-.04-.07-.05-.07-.06-.1-.07-.04-.04-.04-.04-.05-.04-.04-.04-.06-.05-.07-.06-.07-.06-.06-.06-.07-.06-.05-.05-.1-.09-.09-.1-.03-.02-.04-.04-.07-.07-.05-.06-.05-.05-.17-.18-.08-.09-.06-.07-.07-.08-.04-.04-.05-.07-.06-.06-.05-.06-.03-.03-.04-.06-.07-.08-.04-.05-.05-.07-.02-.02a12 12 0 0 1-1.44-2.4m-1.02-5.8 11.36 3.04a21 21 0 0 0-.47 2.01l10.81 2.9a12 12 0 0 1-1.84 2L.66 15.92l-.02-.04-.03-.1-.05-.16-.01-.02-.2-.74-.04-.13-.02-.08-.02-.1-.02-.08-.01-.09-.02-.08-.02-.1-.07-.42-.02-.12v-.08l-.02-.1-.02-.17v-.04a12 12 0 0 1-.04-2.15m1.6-5.15 11.94 3.2q-.54.9-1 1.87l11.29 3.03q-.22 1.22-.67 2.36l-11.55-3.09L.12 10.26l.02-.1v-.05l.02-.07.01-.08.02-.1.09-.44.03-.13.02-.08.02-.1.07-.27.03-.1.02-.08.03-.1.03-.08.03-.1.02-.08.03-.1a12 12 0 0 1 1.01-2.23zm4.44-4.4L17.35 4.6a21 21 0 0 0-1.69 1.72l7.83 2.1q.4 1.28.51 2.66L2.1 5.2l.05-.06.03-.04.04-.06.04-.06.06-.08.05-.07.07-.09.05-.06.05-.07.06-.07.06-.08.05-.07.07-.07.05-.07.07-.08.05-.06.07-.08.06-.06.06-.07.06-.06.07-.08.06-.06.06-.07.17-.17.1-.1.06-.05.07-.07a12 12 0 0 1 2.28-1.68M12.02 0h.41l.08.01h.16l.09.01h.1l.15.02h.08l.05.01h.08l.08.02h.04l.1.01.06.01.1.01.09.01.04.01.06.01.2.03.08.01.06.02.14.02.1.02.1.02.05.01.08.02h.04l.06.02.04.01.07.02h.05l.07.02.1.03.1.03.12.03.11.03.05.02.07.02.08.02.07.02.05.02.05.01.08.03.1.03.1.04.05.02.06.02.1.03.1.04.12.05.1.04.05.02.06.02.04.02.06.03.04.01.06.03.1.05.1.04.08.04.08.03.06.03.09.05.09.04.1.06.05.02.05.03.05.02.06.04.04.02.05.03.1.05.1.06.08.05.06.03.05.03.1.06.09.06.1.06.03.02.07.05.08.05.04.03.06.04.06.04.03.02.16.11.08.06.07.05.05.05.09.06.08.06.04.03.05.05.09.06.07.07.09.07q1.07.9 1.9 2.03L7.23 1l.06-.02.07-.03.08-.04.09-.03q.15-.07.34-.13l.1-.04.09-.03.08-.03.1-.03.26-.09.1-.02.08-.03.1-.03.08-.02.1-.03.09-.02.09-.02.1-.02.09-.03.09-.02.1-.02.08-.02.1-.02.1-.01.1-.02.08-.02.1-.02h.1l.09-.02.1-.02.1-.01.08-.01.11-.01.09-.01.1-.01.29-.03h.1l.1-.01h.1l.1-.01h.29z"/></svg>`,ly=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="M10.21 8.98V7.62l.39-.02c3.6-.12 5.96 3.18 5.96 3.18s-2.55 3.65-5.28 3.65a3 3 0 0 1-1.07-.17v-4.11c1.4.17 1.68.8 2.52 2.25l1.88-1.62a5 5 0 0 0-3.67-1.85zm0-4.47v2.02l.39-.02c5-.17 8.26 4.23 8.26 4.23s-3.75 4.69-7.65 4.69q-.5 0-1-.1v1.25q.42.06.84.06c3.62 0 6.25-1.9 8.79-4.17.42.35 2.15 1.2 2.5 1.57-2.42 2.08-8.05 3.76-11.24 3.76q-.45 0-.9-.05v1.76H24v-15zm0 9.75v1.07c-3.36-.61-4.29-4.2-4.29-4.2a7.2 7.2 0 0 1 4.29-2.14v1.17a3.2 3.2 0 0 0-2.5 1.17s.6 2.28 2.5 2.94m-5.96-3.3a8.3 8.3 0 0 1 5.96-3.34v-1.1C5.8 6.9 2 10.72 2 10.72s2.16 6.43 8.21 7.02v-1.17c-4.44-.57-5.96-5.61-5.96-5.61"/></svg>`,uy=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="M18.65 3.87a5.09 5.09 0 1 1 0 10.17l5.05 5.05c.64.64.19 1.74-.72 1.74H8.48a8.48 8.48 0 0 1 0-16.96zM8.48 7.26a5.09 5.09 0 1 0 0 10.18 5.09 5.09 0 0 0 0-10.18"/></svg>`,dy=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="m12.6 1.34 1.18 2.08a.2.2 0 0 0 .15.09h5.56q.26 0 .44.32L21.4 6.4c.19.34.24.48.02.84l-.76 1.3-.37.66c-.1.2-.22.28-.04.51l2.66 4.64c.17.3.1.5-.05.77q-.65 1.17-1.33 2.34c-.16.27-.35.37-.68.37q-1.16-.03-2.33.01a.1.1 0 0 0-.08.05l-2.7 4.74c-.17.3-.38.37-.73.37h-3.02a.5.5 0 0 1-.46-.27l-1.34-2.32a.1.1 0 0 0-.08-.05H4.98q-.42.05-.8-.1l-1.6-2.77a.5.5 0 0 1 0-.54l1.2-2.12a.2.2 0 0 0 0-.2L1.9 11.38l-.79-1.4c-.16-.31-.17-.5.1-.96L2.6 6.57q.18-.34.58-.34h2.59a.1.1 0 0 0 .1-.06l2.81-4.9a.5.5 0 0 1 .42-.24h1.59L11.7 1c.35 0 .73.03.9.34m-3.43.4-.05.03L6.25 6.8a.2.2 0 0 1-.13.08H3.25q-.08 0-.04.07L9.02 17.1q.04.06-.03.06l-2.8.01a.2.2 0 0 0-.2.12L4.67 19.6q-.06.12.07.12h5.72q.06 0 .1.07l1.4 2.45q.08.12.14 0l5-8.76.8-1.38a.1.1 0 0 1 .09 0l1.42 2.53a.1.1 0 0 0 .1.06l2.77-.02.04-.02v-.04l-2.9-5.09a.1.1 0 0 1 0-.1l.29-.52 1.12-1.97q.03-.06-.04-.06H9.2q-.09 0-.04-.08l1.43-2.5a.1.1 0 0 0 0-.12l-1.37-2.4zm6.3 8.02q.06 0 .03.06l-.84 1.47-2.6 4.58-.06.03-.05-.03L8.5 9.84q-.03-.05.03-.05l.21-.02z"/></svg>`,fy=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="#FF7764" d="M7.52 2a4.47 4.47 0 0 0 8.96 0h4.55A9 9 0 0 1 12 10.98 9 9 0 0 1 2.98 2z"/><path fill="#FF563F" d="M16.48 22a4.47 4.47 0 0 0-8.96 0H2.98A9 9 0 0 1 12 13.02 9 9 0 0 1 21.03 22z"/></svg>`,py=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="M12 0C8.02 0 4.76.26 2.5 2.52.22 4.78 0 8.03 0 12.02c0 3.97.23 7.23 2.5 9.49C4.75 23.77 8.01 24 12 24s7.24-.23 9.5-2.5c2.28-2.24 2.5-5.5 2.5-9.48s-.23-7.24-2.5-9.5S15.98 0 12 0M4.9 7.4h5.63c1.47 0 3 .07 3.76.83.75.75.83 2.23.83 3.68v4.54a.15.15 0 0 1-.15.15h-1.95a.15.15 0 0 1-.15-.15v-4.62c0-.8-.04-1.63-.46-2.05-.36-.36-1.03-.44-1.72-.46H7.16a.15.15 0 0 0-.15.15v6.98a.15.15 0 0 1-.15.15H4.9a.15.15 0 0 1-.15-.15v-8.9a.15.15 0 0 1 .15-.14m12.14 0h1.95a.15.15 0 0 1 .15.15v8.9a.15.15 0 0 1-.15.14h-1.95a.15.15 0 0 1-.15-.14v-8.9a.15.15 0 0 1 .15-.14m-8.12 3.55h2.05q.13 0 .15.15v5.35a.15.15 0 0 1-.15.15H8.92a.15.15 0 0 1-.15-.15V11.1a.15.15 0 0 1 .15-.15"/></svg>`,my=k`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24"><path d="M12.1 2 9.94 4.95H.65L2.83 2zm11.15 17.05L21.08 22h-9.24L14 19.05zM24 2 9.26 22H0L14.74 2z"/></svg>`,hy=e=>k`<svg width="1em" height="1em" fill="currentColor" viewBox="4 5 8 8" aria-hidden="true"><path d="${e}"></path></svg>`,gy=hy(qi),_y=hy(Ji),vy={anthropic:gy,deepseek:ry,"github-copilot":k`<svg width="1em" height="1em" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="${Yi}"></path></svg>`,google:iy,meta:oy,mistralai:sy,moonshot:cy,moonshotai:cy,nvidia:ly,openai:_y,openrouter:uy,qwen:dy,unbiased:fy,xiaomi:py,"x-ai":ay,"z-ai":my},yy=k`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><rect x="4" y="4" width="12" height="12" rx="3"/><path d="M8 1v3m4-3v3M8 16v3m4-3v3M1 8h3m-3 4h3m12-4h3m-3 4h3"/></svg>`;function by(e){return Object.hasOwn(vy,e)?vy[e]:yy}var xy=new Map,Sy=new Map,Cy=new Set;function wy(e){let{users:t,...n}=e??{},r=t??{};for(let[e,t]of ty(n)){let n=e.toLowerCase();t===`ambiguous`||t!==null&&Sy.has(n)&&Sy.get(n)!==t&&!Xv(e,[t,Sy.get(n)])?Cy.add(n):t!==null&&Sy.set(n,t),(!Object.hasOwn(r,e)||Cy.has(n))&&xy.delete(n)}for(let[e,t]of Object.entries(r))Cy.has(e.toLowerCase())||(typeof t?.agent==`string`&&Object.hasOwn(Gv,t.agent)?xy.set(e.toLowerCase(),{agent:t.agent}):typeof t?.id==`string`&&typeof t.login==`string`?xy.set(e.toLowerCase(),{id:t.id,login:t.login,name:typeof t.name==`string`&&t.name.trim()?t.name.trim():null}):xy.delete(e.toLowerCase()));return e}var Ty=0;function Ey(){xy.clear(),Sy.clear(),Cy.clear(),jy.clear(),My.clear(),Ty++}async function Dy(e){let t=Ty,n=Ay,r=await e();return t!==Ty||(wy(r),n!==Ay&&Py(ky.userId,ky.profile)),r}var Oy=new Map,ky=null,Ay=0,jy=new Set,My=new Set;function Ny(e,t,n=!1,r=null){n&&Oy.set(e,(Oy.get(e)??0)+1),r&&jy.add(r.login.toLowerCase()),Number.isSafeInteger(r?.githubId)&&My.add(r.githubId),ky={userId:e,profile:t},Ay++,Py(e,t)}function Py(e,t){for(let[n,r]of xy)r.id===e&&((Sy.has(n)?My.has(Sy.get(n)):jy.has(n))?xy.delete(n):xy.set(n,{...r,login:t.login,name:t.name?.trim()||null}))}function Fy(e){let t=typeof e==`string`?xy.get(e.toLowerCase()):null;return t?.id?t:null}var Iy=e=>xy.get(e.toLowerCase())?.agent??null,Ly=e=>k`<img src="${e}" alt="" loading="lazy" decoding="async" @error="${e=>e.currentTarget.remove()}">`,Ry=e=>Ly(`/api/avatar/${encodeURIComponent(e.id)}${Oy.has(e.id)?`?v=${Oy.get(e.id)}`:``}`);function zy(e,t){let{name:n,mark:r,avatar:i}=Gv[e];return k`<span class="app-user" data-tooltip="${t}">${r||i?k`<span class="${`app-user-mark is-${e}`}" aria-hidden="true">${r?by(r):Ly(`/api/avatar/${i}`)}</span>`:k`<span class="app-user-avatar" aria-hidden="true">${n[0]}</span>`}<span class="app-user-name">${n}</span></span>`}function By(e){let t=typeof e==`string`?Iy(e):null;if(t)return Gv[t].name;let n=Fy(e);return n?n.name??n.login:e}function Vy(e,t=e){let n=typeof e==`string`?Iy(e):null;if(n)return zy(n,`@${e} on GitHub`);let r=Fy(e);return r?k`<span class="app-user" data-tooltip="${`@${e} on GitHub`}"><span class="app-user-avatar" aria-hidden="true">${(r.name??r.login)[0].toUpperCase()}${Ry(r)}</span><span class="app-user-name">${r.name??r.login}</span></span>`:t}function Hy(e){let t=new Map;for(let n of e){let e=Iy(n),r=e?`agent:${e}`:Fy(n)?.id??`login:${n.toLowerCase()}`;t.has(r)||t.set(r,n)}return[...t.values()]}function Uy(e,t=null){return typeof e==`string`?Iy(e):Yv(null,null,t)}function Wy(e,t=null,n=t??e??``){if(typeof e==`string`)return Vy(e,n);let r=Uy(null,t);return r?zy(r,t):n}function Gy(e,t=null){if(typeof e==`string`)return By(e);let n=Uy(null,t);return n?Gv[n].name:t}var Ky=/^(?:app|user)-[1-9]\d{0,11}$/u,qy=3,Jy=e=>typeof e==`string`&&Object.hasOwn(Gv,e)?e:null,Yy=e=>e.length>1?`${e.slice(0,-1).join(`, `)} and ${e.at(-1)}`:e[0]??``;function Xy({login:e=null,name:t=null,agent:n=null,avatar:r=null}){let i=Jy(n)??Uy(e,t);if(i){let{name:e,mark:t,avatar:n}=Gv[i];return k`<span class="${`commit-avatar is-${i}`}">${t?by(t):n?Ly(`/api/avatar/${n}`):e[0]}</span>`}if(typeof r==`string`&&Ky.test(r))return k`<span class="commit-avatar">${Ly(`/api/avatar/${r}`)}</span>`;let a=Fy(e),o=(a?.name??a?.login??t??e??``).trim()[0]?.toUpperCase()??`?`;return k`<span class="commit-avatar">${o}${a?Ry(a):j}</span>`}function Zy(e,t,n=null){return Jy(n)&&t?t:typeof e==`string`&&(Fy(e)||Iy(e))?By(e):t??Gy(e,t)??e??``}function Qy(e,t=null,n=[]){let r=(Array.isArray(n)?n:[]).filter(e=>typeof e?.name==`string`||typeof e?.login==`string`).slice(0,qy);if(r.length===0)return Wy(e,t);let i=Zy(e,t),a=r.map(e=>Zy(e.login??null,e.name??null,e.agent));return k`<span class="app-user commit-authors" data-tooltip="${Yy([i,...a])}"><span class="commit-avatars" aria-hidden="true">${[{login:e,name:t},...r].map(Xy)}</span><span class="app-user-name">${i}</span><span class="sr-only"> with ${Yy(a)}</span></span>`}var $y=null,eb=null;function tb(){return eb?.getPreviewRole()??null}function nb(){eb?.setPreviewRole(null)}function rb(){Ey(),ib=null,eb?.resetManagedAppState()}var ib=null;function ab(e){let t=e?`${e.id}\0${e.role}`:null;t!==ib&&(Ey(),ib=t),eb?.setManagedAppSession(e)}function ob(e){return eb?.setManagedReportCatalog(e)??new Set}function sb(e,t=P.currentManagedTeam){return eb?.readReportSources(e,t)}function cb(){eb?.clearReportSources(),eb?.clearFindingHistory()}async function lb(e,t=P.currentManagedTeam){return(await W()).fetchReportSources(e,t)}function W(){return $y||($y=(async()=>{try{return eb=await import(`./client-managed.js`),eb}catch(e){throw $y=null,e}})(),$y)}async function ub(e){return(await W()).probeSession(e)}async function db(e){return(await W()).probeTeams(e)}async function fb(e){return(await W()).fetchManagedBundleCatalog(e)}async function pb(e,t,n){return(await W()).fetchNpmPackage(e,t,n)}async function mb(e,t,n,r){return(await W()).fetchRepositoryCode(e,t,n,r)}async function hb(e){return(await W()).fetchBrowsableRepositories(e)}async function gb(e,t){return(await W()).fetchRepositoryRefs(e,t)}async function _b(e,t,n,r){return(await W()).fetchRepositoryContents(e,t,n,r)}function vb(e,t,n,r){return Dy(async()=>(await W()).fetchRepositoryHistory(e,t,n,r))}async function yb(e,t,n,r){return(await W()).fetchRepositoryChanges(e,t,n,r)}async function bb(e,t,n,r){return(await W()).fetchRepositoryTree(e,t,n,r)}function xb(e,t){return Dy(async()=>(await W()).fetchRepositoryAgents(e,t))}function Sb(e,t,n){return Dy(async()=>(await W()).fetchRepositoryIssues(e,t,n))}function Cb(e,t,n){return Dy(async()=>(await W()).fetchRepositoryItem(e,t,n))}async function wb(e,t,n){return(await W()).fetchPullDependencies(e,t,n)}async function Tb(e,t,n){return(await W()).fetchPullDependenciesOf(e,t,n)}async function Eb(e,t){return(await W()).fetchBranchDependencies(e,t)}async function Db(e,t,n,r){return(await W()).fetchNpmDelta(e,t,n,r)}function Ob(e,t,n){return Dy(async()=>(await W()).fetchRepositoryPulse(e,t,n))}function kb(e,t,n,r){return Dy(async()=>(await W()).fetchRepositoryPulseItems(e,t,n,r))}async function Ab(e,t){return(await W()).fetchNpmVersions(e,t)}async function jb(e,t){return(await W()).fetchNpmStats(e,t)}async function Mb(e,t){return(await W()).fetchNpmAdvisories(e,t)}async function Nb(e,t,n){return(await W()).fetchNpmTags(e,t,n)}async function Pb(e,t,n,r){return(await W()).fetchNpmRisk(e,t,n,r)}async function Fb(e,t,n){return(await W()).fetchNpmSocket(e,t,n)}async function Ib(e,t,n){return(await W()).fetchNpmProvenance(e,t,n)}async function Lb(e,t,n,r){return(await W()).fetchPrettyBundleFile(e,t,n,r)}async function Rb(e,t,n,r){return(await W()).fetchPrettyNpmFiles(e,t,n,r)}async function zb(e,t,n,r,i){return(await W()).fetchPrettyNpmFile(e,t,n,r,i)}async function Bb(e,t,n,r){return(await W()).fetchPrettyBundleChanges(e,t,n,r)}async function Vb(e,t,n,r,i){return(await W()).fetchPrettyNpmChanges(e,t,n,r,i)}async function Hb(e,t,n,r){return(await W()).fetchBundleRenameDiff(e,t,n,r)}async function Ub(e,t,n,r,i){return(await W()).fetchNpmRenameDiff(e,t,n,r,i)}async function Wb(e,t,n,r){return(await W()).fetchBundleRenameDiffs(e,t,n,r)}async function Gb(e,t,n,r,i){return(await W()).fetchNpmRenameDiffs(e,t,n,r,i)}async function Kb(e,t,n,r){return(await W()).fetchBundleTypeOnly(e,t,n,r)}async function qb(e,t,n,r,i){return(await W()).fetchNpmTypeOnly(e,t,n,r,i)}async function Jb(e,t,n){return(await W()).fetchBundleComparison(e,t,n)}async function Yb(e,t,n,r){return(await W()).fetchNpmComparison(e,t,n,r)}async function Xb(e){return(await W()).openManagedShareDialog(e,``,P.managedSession)}async function Zb({render:e,...t}){let n=()=>P.managedSession?.id===t.session.id&&P.managedSession?.csrfToken===t.session.csrfToken&&P.currentManagedTeam===t.teamId,r=await W();return n()?r.openManagedIssueDialog({...t,isCurrent:n,onCreated:r=>{if(!n())return;let i=t.context.findingId,a=P.managedIssues.get(i),o=Xh([i],{[i]:{url:r,autoFix:a?.url===r?a.autoFix:null}});Uv(t.teamId),o&&e()}}):null}async function Qb(e){if(!Iv(e))return null;let t=P.reports,n=P.managedSession,r=P.currentManagedTeam,i=()=>Iv(e)&&P.managedSession===n&&P.currentManagedTeam===r&&P.reports===t,a=await W();return i()?a.openFindingHistoryDialog({finding:e,teamId:r,isCurrent:i}):null}async function $b(e,t){return(await W()).fetchTeamAnnotations(e,t)}async function ex(e,t=P.currentManagedTeam,n){return(await W()).fetchReportTriage(e,t,n)}async function tx(e,t,n){return(await W()).fetchFixes(e,t,n)}async function nx(e,t=P.currentManagedTeam,n){return(await W()).fetchReportComments(e,t,n)}async function rx(e,t,n,r=P.currentManagedTeam){return(await W()).saveReportComment(e,t,n,r)}async function ix(e,t,n,r,i=P.currentManagedTeam){return(await W()).deleteReportComment(e,t,n,r,i)}async function ax(e,t,n,r=P.currentManagedTeam){return(await W()).pushReportTriage(e,t,n,r)}async function ox(e){return e&&U?.rememberFinding(),(await W()).login(e)}async function sx(e){return(await W()).logout(e)}async function cx(e){return(await W()).stopViewing(e)}async function lx(e){return(await W()).fetchProfile(e)}async function ux(e,t,n){return(await W()).chooseProfileAccounts(e,t,n)}async function dx(e,t,n){return(await W()).unlinkGithubAccount(e,t,n)}async function fx(e,t){return(await W()).fetchBundleMetadata(e,t)}async function px(e,t){return(await W()).fetchBundleContents(e,t)}async function mx(e,t){return(await W()).fetchTeamReports(e,t)}async function hx(e,t){return(await W()).watchTeamFeed(e,t)}async function gx(e,t=P.currentManagedTeam,n=``,r=!1,i=!1){return(await W()).fetchBundleAdvisories(e,t,n,r,i)}async function _x(...e){return(await W()).dependencyReviews(...e)}async function vx(...e){return(await W()).myDependencyReviews(...e)}async function yx(...e){return(await W()).teamDependencyReviews(...e)}async function bx(...e){return(await W()).discardDependencyReview(...e)}async function xx(...e){return(await W()).latestDependencyReview(...e)}var Sx=null,Cx=null,wx=0;function Tx(){return Sx||(Sx=document.createElement(`div`),Sx.id=`app-toast`,Sx.setAttribute(`role`,`status`),Sx.setAttribute(`aria-live`,`polite`),document.body.append(Sx),Sx)}function Ex(e,{kind:t=`info`,duration:n=5200}={}){let r=Tx(),i=++wx;clearTimeout(Cx),Cx=null,r.className=t,r.textContent=e,requestAnimationFrame(()=>{wx===i&&r.classList.add(`visible`)});let a=()=>{wx===i&&Dx()};return n>0&&(Cx=setTimeout(a,n)),a}function Dx(){wx++,Sx&&(clearTimeout(Cx),Cx=null,Sx.classList.remove(`visible`))}function Ox(e,t){let n=e.find(e=>e.integrity===t);return e.filter(e=>e.integrity!==t&&(n?.managedId?e.managedId&&n.repoId!=null&&e.repoId===n.repoId:!e.managedId))}function kx(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 Ax(e){return e.currentView===`bundles`?e.bundleDetails?e.bundleDetails.managedId??null:e.bundles?.find(t=>t.integrity===e.selectedBundle)?.managedId??null:null}function jx(e,t,n,r=`overview`,i=null,a=[t]){if(!t?.managedId)return null;let o=e.find(e=>e.id===n&&e.bundles?.some(e=>e.id===t.managedId));if(n!=null&&!o)return null;let s=[t,...a.filter(e=>e.managedId&&e.managedId===i?.compareId)];return fi({view:`bundles`,teamId:o?.id??null,bundleId:t.managedId,bundleTab:r,...i},e,s.map(e=>({id:e.managedId,slug:e.slug})))}function Mx(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:e,...t}=n;return t}if(!e.bundleSourceFile||e.bundleDetails?.integrity!==e.selectedBundle)return null;let r=zt(Lt(e.bundleDetails)).numbers.get(e.bundleSourceFile);if(r==null)return null;let i=e.bundleSourceTargetLine;return i?.bundle!==e.selectedBundle||i.path!==e.bundleSourceFile?{file:r}:{file:r,line:i.line,...i.end>i.line?{endLine:i.end}:{}}}function Nx(e,t=e.bundleDetailsTab){let n=e.bundleCompare;if(t!==`compare`||!n?.target||n.bundle!==e.selectedBundle)return null;let r=e.bundles?.find(t=>t.integrity===e.selectedBundle);if(r?.npm)return{compareSpec:n.target,...ri(n.mode)};if(r?.repository)return/^[a-f\d]{40}$/u.test(n.target)?{compareCommit:n.target,...ri(n.mode)}:null;let i=Ox(e.bundles??[],e.selectedBundle).find(e=>e.integrity===n.target);return i?.managedId?{compareId:i.managedId,...ri(n.mode)}:null}function Px(e,t=e.bundleDetailsTab){let n=e.bundles?.find(t=>t.integrity===e.selectedBundle)?.npm,r=e.npmReview?.bundle===e.selectedBundle?e.npmReview:null,i=e.bundleCompare?.bundle===e.selectedBundle?e.bundleCompare:null;if(n&&t===`review`&&e.bundleDetailsTab===`compare`&&i?.target&&!(r?.started&&r.user===e.managedSession?.id))return{reviewPackage:n.name,reviewSpec:i.target};if(n&&t===`compare`&&e.bundleDetailsTab===`review`&&r?.reviewPackage===n.name)return{compareSpec:r.reviewSpec,...ri(i?.mode??`code`)};if(t===`review`&&r){let{bundle:e,started:t,user:n,resume:i,...a}=r;return a}return Mx(e,t)??Nx(e,t)}function Fx(e,t,n=()=>null){let r=e.bundles?.find(t=>t.integrity===e.selectedBundle)?.npm;if(!r||t===e.bundleDetailsTab)return;let i=Px(e,t);if(t===`review`&&(e.npmReview={...e.npmReview?.bundle===e.selectedBundle&&e.npmReview.started&&e.npmReview.user===e.managedSession?.id?e.npmReview:{bundle:e.selectedBundle,...i},resume:!0}),t!==`compare`)return;let a=e.npmReview?.bundle===e.selectedBundle&&e.npmReview.reviewPackage===r.name?e.npmReview:null,o=i?.compareSpec??a?.reviewSpec??n(r);o&&(e.bundleDetailsTab===`review`||!i?.compareSpec)&&(e.bundleCompare={bundle:e.selectedBundle,target:o,mode:i?.compareMode??`overview`})}function Ix(e){return[...new Map(e.flatMap(e=>e.bundles??[]).map(e=>[e.id,kx(e)])).values()]}function Lx(e,t,n){if(e.currentView!==`findings`&&e.currentView!==`files`&&e.currentView!==`links`||!e.currentManagedTeam)return!1;let r=t.find(t=>t.id===e.currentManagedTeam);if(n.has(`team:${e.currentManagedTeam}`)||!r||e.managedReports.some(e=>n.has(e.id)))return!0;let i=new Set(r.reports.filter(t=>e.currentManagedReport!==null||t.visible!==!1).map(e=>e.id));if(e.currentManagedReport!==null)return!i.has(e.currentManagedReport);let a=new Set(e.managedReports.map(e=>e.id));return i.size!==a.size||[...i].some(e=>!a.has(e))}async function Rx(e,t,{fetchCatalog:n,isCurrent:r,render:i,replaceRoute:a}){let o=Ax(e);if(!o||!r())return!0;let s=[`admin`,`manage`].includes(e.managedSession?.role),c,l=null;if(e.currentManagedTeam!=null||!s){let n=e=>e.bundles?.some(e=>e.id===o);l=t.find(t=>t.id===e.currentManagedTeam&&n(t))??t.find(n)}if(l)c=Ix(t);else if(s)try{c=(await n()).map(kx)}catch(e){if(e.status!==401&&e.status!==403)throw e;c=[]}else c=[];if(!r())return!0;let u=c.find(e=>e.managedId===o);return u?(e.bundles=c,e.currentManagedTeam=l?.id??null,i(),a(jx(t,u,e.currentManagedTeam,e.bundleDetailsTab,Px(e),c)),!0):!1}var zx={...nt,[y]:ta},Bx=new Set(Object.keys(Oi)),Vx={...Oi,default:`DeepView`};function Hx(e){let t=e._source??e.source;return t!=="default"&&Object.hasOwn(it,t)?t:null}function Ux(e){return Wx(e,Pu(e))}function Wx(e,t){if(t===y)return y;if(t!==void 0)return Bx.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 Gx(e){return Pu(e)===y}var Kx=`.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)}}
|
|
34
|
+
`,qx=`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)}
|
|
35
|
+
`;function Jx({tabs:e,current:t,prefix:n,select:r,disabled:i=!1}){return k`<div class="dlg-tabs" role="tablist" @keydown="${i=>{if(i.key!==`ArrowLeft`&&i.key!==`ArrowRight`)return;i.preventDefault();let a=e[(e.findIndex(e=>e.id===t)+(i.key===`ArrowRight`?1:-1)+e.length)%e.length];if(!a||a.id===t)return;let o=i.currentTarget;r(a.id),requestAnimationFrame(()=>o.querySelector(`#${n}-tab-${a.id}`)?.focus())}}">${e.map(e=>k`<button type="button" role="tab" class="dlg-tab" id="${`${n}-tab-${e.id}`}" aria-controls="${`${n}-panel-${e.id}`}" aria-selected="${String(t===e.id)}" tabindex="${t===e.id?0:-1}" ?disabled="${i&&t!==e.id}" @click="${()=>r(e.id)}">${e.icon??j}${e.label}</button>`)}</div>`}function Yx(e){if(!e)return j;let t=e.replaceAll(`_`,` `);return k`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function Xx(e){return`bundle-${e.slice(7,19)}\u2026`}function Zx(e){return e.kind===`bundle`?e.label??Xx(e.identifier):e.identifier}function Qx(e){return e.kind===`bundle`?`bundle`:Gx(e.identifier)?`links file`:`report`}function $x(e){let t=e.length,n=t===1,r=new Set(e.map(Qx)),i=`items`;if(r.size===1){let e=[...r][0];i=n?e:`${e}s`}return{count:t,singular:n,kindLabel:i}}function eS(e){return k`<ul class="lwd-list">${e.map(e=>{let t=Qx(e);return k`<li>${Zx(e)}${t===`report`?j:k`<span class="lwd-kind-tag">${t}</span>`}</li>`})}</ul>`}function tS(e){return e.length===0?j:k`<ul class="lwd-list" role="alert">${e.map(e=>k`<li><strong>${e.label}</strong> — ${e.reason}</li>`)}</ul>`}function nS(e){return e?k`<span class="color"><span class="${`color-dot marker-${e}`}"></span> <span class="color-name">${e}</span></span>`:k`<em>none</em>`}function rS(e){return k`<span class="comment-text">${e||k`<em>empty</em>`}</span>`}function iS(e){return e?mi(e)?k`<span class="fix-text"><a href="${e}" target="_blank" rel="noopener noreferrer">${e}</a></span>`:k`<span class="fix-text">${e}</span>`:k`<span class="comment-text"><em>empty</em></span>`}function aS(e){return e?k`<span class="${`triage triage-${e}`}">${e}</span>`:k`<em>none</em>`}function oS(e){return e?k`<span class="${`flag-badge${e===`flagged`?` on`:``}`}">${e}</span>`:k`<em>none</em>`}function sS(e,t){return e===`color`?nS(t):e===`comment`?rS(t):e===`fix`?iS(t):e===`triage`?aS(t):e===`flagged`?oS(t):k`${String(t)}`}function cS(e,t){let n=e?.file?e.line?`${e.file}:${e.line}`:e.file:``;return k`<div class="card-head">${Yx(e?.severity)} ${n?k`<span class="loc" data-tooltip-truncated data-tooltip="${n}">${n}</span>`:j} <code class="id" data-tooltip="${t}">${t.slice(0,8)}…</code></div>${e?.description?k`<div class="desc" data-tooltip-truncated data-tooltip="${e.description}">${e.description}</div>`:j}`}var lS={title:`Triage conflicts`,intro:`disagree with your local triage on`,trailingNote:``,applyButton:`Apply`,importedSideLabel:`Apply imported`},uS={color:0,comment:1,fix:2,triage:3,flagged:4},dS={color:`Color`,comment:`Comment`,fix:`Fix`,triage:`Triage state`,flagged:`Flag`},fS=class extends Tv{static styles=[...Tv.styles,ma(Kx),ma(qx)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...lS},this._settled=!1}focusInitial(){}_blockEscClose=e=>e.preventDefault();_onClick=e=>{let t=e.target.closest(`[data-bulk]`);if(!t)return;let n=t.dataset.bulk;for(let e of this.renderRoot.querySelectorAll(`input[type="radio"][value="${n}"]`))e.checked=!0};_onSubmit=e=>{e.preventDefault();let t={};for(let e of this.conflicts){let n=`${e.id}:${e.property}`,r=this.renderRoot.querySelector(`input[name="conflict-${CSS.escape(n)}"]:checked`);r&&(t[n]=r.value)}this._finish(t)};render(){let e=this.labels,t=new Map;for(let e of this.conflicts)t.has(e.id)||t.set(e.id,[]),t.get(e.id).push(e);for(let e of t.values())e.sort((e,t)=>(uS[e.property]??99)-(uS[t.property]??99));let n=this.conflicts.filter(e=>e.property===`color`).length,r=this.conflicts.filter(e=>e.property===`comment`).length,i=this.conflicts.filter(e=>e.property===`fix`).length,a=this.conflicts.filter(e=>e.property===`triage`).length,o=this.conflicts.filter(e=>e.property===`flagged`).length,s=[n?`${n} color${n===1?``:`s`}`:``,r?`${r} comment${r===1?``:`s`}`:``,i?`${i} fix${i===1?``:`es`}`:``,a?`${a} triage state${a===1?``:`s`}`:``,o?`${o} flag${o===1?``:`s`}`:``].filter(Boolean).join(`, `),c=`${t.size} finding${t.size===1?``:`s`}`;return k`<dialog @click="${this._onClick}" @cancel="${this._blockEscClose}" @close="${this._onClose}"><header><h3>${e.title}</h3><p>${c} ${e.intro} ${s}.${e.trailingNote?` ${e.trailingNote}`:``}</p><div class="bulk"><button type="button" data-bulk="local">Keep all current</button> <button type="button" data-bulk="imported">${e.importedSideLabel} (all)</button></div></header><form @submit="${this._onSubmit}"><ul class="list">${[...t.entries()].map(([t,n])=>k`<li class="card" data-id="${t}">${cS(this.findingLookup.get(t),t)}<div class="rows">${n.map(t=>{let n=`${t.id}:${t.property}`,r=`conflict-${n}`;return k`<div class="row" data-key="${n}"><span class="row-label">${dS[t.property]??t.property}</span> <label class="choice"><input type="radio" name="${r}" value="local" required> <span class="choice-label">Keep current</span> <span class="choice-value">${sS(t.property,t.local)}</span></label> <label class="choice"><input type="radio" name="${r}" value="imported" required> <span class="choice-label">${e.importedSideLabel}</span> <span class="choice-value">${sS(t.property,t.imported)}</span></label></div>`})}</div></li>`)}</ul><footer class="actions"><button type="submit" class="primary">${e.applyButton}</button></footer></form></dialog>`}};customElements.define(`triage-conflict-dialog`,fS);function pS(e,t,n={}){return new Promise((r,i)=>{let a=document.createElement(`triage-conflict-dialog`);a.conflicts=e,a.findingLookup=t,a.labels={...lS,...n},a.addEventListener(`resolve`,e=>{a.remove(),r(e.detail)}),a.addEventListener(`modal-conflict`,e=>{a.remove(),i(Xm(e.detail?.cause))}),document.body.append(a)})}var mS=[`type`,`model`,`effort`,`exportsMode`],hS=[`security`,`correctness`],gS=[`max`,`xhigh`,`high`,`medium`,`low`,`minimal`],_S=[`list`,`isolate`];function vS(e,t){if(t==null)return e.length+1;let n=e.indexOf(t);return n===-1?e.length:n}var yS={type:e=>e===`terminal`?hS.length+2:vS(hS,e),model:e=>+(e==null),effort:e=>vS(gS,e),exportsMode:e=>vS(_S,e)};function bS(e,t,n){for(let r of n){let n=yS[r],i=n(e[r])-n(t[r]);if(i!==0)return i;let a=String(e[r]??``).localeCompare(String(t[r]??``));if(a!==0)return a}return 0}function xS(e,t,{typePrefix:n=!0}={}){return e===`type`?n?`analyzer: ${t??`null`}`:`${t??`null`}`:t??null}function SS(e,t){let n=t.filter(e=>e!==`exportsMode`),r=[],i=new Map;for(let t of e){if(t.exportsMode==null){r.push({...t});continue}let e=n.map(e=>t[e]??``).join(`|`),a=i.get(e);if(a){a.exportsMode=`${a.exportsMode}+${t.exportsMode}`;continue}let o={...t};i.set(e,o),r.push(o)}return r}function CS(e,t=mS){let n=new Map;for(let r of e){let e={};for(let n of t)e[n]=n===`model`?Ri(r.model)??null:r[n]??null;let i=t.map(t=>e[t]??``).join(`|`);n.has(i)||n.set(i,e)}let r=[...n.values()].toSorted((e,n)=>bS(e,n,t));if(r.length===0)return[];let i={};for(let e of t)i[e]=new Set(r.map(t=>t[e])).size===1;let a=t.filter(e=>!i[e]),o=a.includes(`exportsMode`)?SS(r,t):r,s=o.length>2&&a.includes(`type`)&&a.length>1,c=[`model`,`effort`].filter(e=>t.includes(e)&&i[e]),l=[...c,...t.filter(e=>!c.includes(e))],u=[],d=!1;for(let e of l)if(i[e]){let t=xS(e,o[0][e]);t!=null&&u.push(t)}else if(!d){for(let e of o){let t=a.map(t=>xS(t,e[t],{typePrefix:!s})).filter(e=>e!=null);t.length>0&&u.push(t.join(` · `))}d=!0}return u}function wS(e=!1,t=``){let n=new Set;return[`deepview`,...e?[`security`]:[],...t.split(`,`)].map(e=>e.trim()).filter(e=>{let t=e.toLowerCase();return!e||n.has(t)?!1:(n.add(t),!0)})}var TS=null;function ES(){return TS||(TS=(async()=>await import(`./prism.js`))(),TS)}var DS=1048576;function OS(e){return e.length<=DS&&fa(e)<=DS}var kS={__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 AS(e){return typeof e==`string`?kS[e.toLowerCase()]??null:null}async function jS(e,t,n=null){if(!t||!OS(e))return null;try{return(await ES()).highlight(e,t,n)}catch{return null}}function MS(e){let t=[],n=[],r=``,i=0;for(;i<e.length;){let a=e.indexOf(`<`,i),o=(a===-1?e.slice(i):e.slice(i,a)).split(`
|
|
36
|
+
`);r+=o[0];for(let e=1;e<o.length;e++){for(let e=n.length-1;e>=0;e--)r+=n[e].close;t.push(r),r=n.map(e=>e.open).join(``)+o[e]}if(a===-1)break;let s=e.indexOf(`>`,a);if(s===-1){r+=e.slice(a);break}let c=e.slice(a,s+1);c.startsWith(`</`)?n.pop():n.push({open:c,close:`</${/^<([a-zA-Z][^\s/>]*)/u.exec(c)?.[1]??`span`}>`}),r+=c,i=s+1}return t.push(r),t}var NS=new Map,PS=new Set,FS=!1;function IS(){FS||(FS=!0,queueMicrotask(()=>{FS=!1,P.codeBlockTick++,Z()}))}function LS(e,t){let n=AS(t);if(!n||!e)return null;let r=`${n}\0${e}`;return NS.has(r)?NS.get(r):(PS.has(r)||(PS.add(r),(async()=>{let t=await jS(e,n);NS.set(r,t??null),PS.delete(r),IS()})()),null)}var RS=new WeakMap,zS=new WeakMap;function BS(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),n=t?.[1]??``,r=t?.[2]??e,i=r.startsWith(`/`),a=[];for(let e of r.split(`/`))if(e&&e!==`.`){if(e===`..`&&a.length>0&&a.at(-1)!==`..`)a.pop();else{if(e===`..`&&i&&a.length===0)return null;a.push(e)}}return n+(i?`/`:``)+a.join(`/`)}function VS(e){let t=new Map;for(let n of e.keys()){let e=BS(n);e!==null&&t.set(e,t.has(e)?null:n)}return t}function HS(e,t,n,r){let i=BS(n);if(i===null)return null;let a=typeof r==`string`?BS(`${r}/package.json`):null,o=i.slice(0,i.lastIndexOf(`/`)+1),s=zS.get(e);for(s||(s=new Map,zS.set(e,s));;){if(o.endsWith(`node_modules/`))return null;let n=`${o}package.json`;if(t.has(n)){if(!s.has(n)){let r=e.get(t.get(n)),i=null;try{i=typeof r==`string`?JSON.parse(r.replace(/^\uFEFF/u,``))?.imports??null:null}catch{}s.set(n,i&&typeof i==`object`&&!Array.isArray(i)?i:null)}return{directory:o,imports:s.get(n)}}if(n===a||!o||o===`/`||o.endsWith(`../`)||/^[a-z][a-z\d+.-]*:\/\/[^/]*\/?$/iu.test(o))return null;let r=o.slice(0,-1);o=r.slice(0,r.lastIndexOf(`/`)+1)}}function US(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 e=r.indexOf(`*`);if(!r.startsWith(`#`)||e===-1||r.indexOf(`*`,e+1)!==-1)continue;let i=r.slice(0,e),a=r.slice(e+1);t.length<=i.length+a.length||!t.startsWith(i)||!t.endsWith(a)||(!n||e>n.star||e===n.star&&r.length>n.pattern.length)&&(n={pattern:r,star:e,suffix:a})}return n?{value:e[n.pattern],wildcard:t.slice(n.star,t.length-n.suffix.length)}:null}function WS(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(e=>WS(e,t,n+1)):[null]}function GS(e,t,n,r,i,a){if(typeof e!=`string`||/[\\\p{Cc}]/u.test(e)||/%2f|%5c/iu.test(e))return null;let o=e.startsWith(`./`),s=null;if(o){let n;try{n=decodeURIComponent(e.slice(2))}catch{return null}if(/[\\\p{Cc}]/u.test(n)||n.split(`/`).some(e=>[`.`,`..`,`node_modules`].includes(e.toLowerCase())))return null;s=BS(t.directory+n)}else if(e.startsWith(`../`)||e.startsWith(`/`)||e.startsWith(`#`)||e.includes(`:`))return null;let c=new Set([e]);if(o)for(let e of i?.keys()??[])(e.startsWith(`./`)||e.startsWith(`../`))&&BS(a+e)===s&&c.add(e);let l=!1,u=null;for(let e of c){if(!i?.has(e))continue;let t=i.get(e);if(typeof t!=`string`||!n.has(t)||l&&t!==u)return null;l=!0,u=t}return l?u:o?r.get(s)??null:null}function KS(e,t,n,r,i,a){let o=US(e?.imports,t);if(!o)return null;let s=WS(o.value,o.wildcard),c=null;for(let t of s){let o=GS(t,e,n,r,i,a);if(!o||c&&o!==c)return null;c=o}return c}function qS(e,t=Lt(e)){let n=new Map;if(e?.kind===`stasis`)for(let r of e.bundle?.imports?.values()??[])for(let[e,i]of r){if(!t.has(e))continue;n.has(e)||n.set(e,new Map);let r=n.get(e);for(let[e,n]of i){let i=typeof n==`string`&&t.has(n)?n:null;r.set(e,r.has(e)&&r.get(e)!==i?null:i)}}else if(e?.kind===`sourcemap`)for(let[r,i]of It(e))t.has(r)&&n.set(r,new Map([...i].map(([e,n])=>[e,t.has(n)?n:null])));return n}function JS(e,t,n=null,r=e,i=null){let a=RS.get(e);a||(a=VS(e),RS.set(e,a));let o=RS.get(r);o||(o=VS(r),RS.set(r,o));let s=n?.get(t),c=t.slice(0,t.lastIndexOf(`/`)+1),l=n?HS(r,o,t,i?.get(t)):null;return t=>{if(typeof t!=`string`||/\p{Cc}/u.test(t))return null;if(s?.has(t)){let n=s.get(t);return typeof n==`string`&&e.has(n)?n:null}if(t.startsWith(`#`))return KS(l,t,e,a,s,c);if(!t.startsWith(`./`)&&!t.startsWith(`../`))return null;let n=t.slice(t.lastIndexOf(`/`)+1),r=n.lastIndexOf(`.`);return r<=0||r===n.length-1?null:a.get(BS(c+t))??null}}var YS=new WeakMap;function XS(e,t){let n=Lt(e),r=YS.get(n);return r||(r={imports:qS(e,n),packageDirs:Gt(e)},YS.set(n,r)),JS(n,t,r.imports,Vt(e),r.packageDirs)}var ZS=/[\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,QS=new RegExp(ZS.source,`gu`),$S=new Map(`0000 NUL NULL
|
|
37
|
+
0001 SOH START OF HEADING
|
|
38
|
+
0002 STX START OF TEXT
|
|
39
|
+
0003 ETX END OF TEXT
|
|
40
|
+
0004 EOT END OF TRANSMISSION
|
|
41
|
+
0005 ENQ ENQUIRY
|
|
42
|
+
0006 ACK ACKNOWLEDGE
|
|
43
|
+
0007 BEL BELL
|
|
44
|
+
0008 BS BACKSPACE
|
|
45
|
+
000B VT LINE TABULATION
|
|
46
|
+
000C FF FORM FEED
|
|
47
|
+
000D CR CARRIAGE RETURN
|
|
48
|
+
000E SO SHIFT OUT
|
|
49
|
+
000F SI SHIFT IN
|
|
50
|
+
0010 DLE DATA LINK ESCAPE
|
|
51
|
+
0011 DC1 DEVICE CONTROL ONE
|
|
52
|
+
0012 DC2 DEVICE CONTROL TWO
|
|
53
|
+
0013 DC3 DEVICE CONTROL THREE
|
|
54
|
+
0014 DC4 DEVICE CONTROL FOUR
|
|
55
|
+
0015 NAK NEGATIVE ACKNOWLEDGE
|
|
56
|
+
0016 SYN SYNCHRONOUS IDLE
|
|
57
|
+
0017 ETB END OF TRANSMISSION BLOCK
|
|
58
|
+
0018 CAN CANCEL
|
|
59
|
+
0019 EM END OF MEDIUM
|
|
60
|
+
001A SUB SUBSTITUTE
|
|
61
|
+
001B ESC ESCAPE
|
|
62
|
+
001C FS FILE SEPARATOR
|
|
63
|
+
001D GS GROUP SEPARATOR
|
|
64
|
+
001E RS RECORD SEPARATOR
|
|
65
|
+
001F US UNIT SEPARATOR
|
|
66
|
+
007F DEL DELETE
|
|
67
|
+
0080 PAD PADDING CHARACTER
|
|
68
|
+
0081 HOP HIGH OCTET PRESET
|
|
69
|
+
0082 BPH BREAK PERMITTED HERE
|
|
70
|
+
0083 NBH NO BREAK HERE
|
|
71
|
+
0084 IND INDEX
|
|
72
|
+
0085 NEL NEXT LINE
|
|
73
|
+
0086 SSA START OF SELECTED AREA
|
|
74
|
+
0087 ESA END OF SELECTED AREA
|
|
75
|
+
0088 HTS CHARACTER TABULATION SET
|
|
76
|
+
0089 HTJ CHARACTER TABULATION WITH JUSTIFICATION
|
|
77
|
+
008A VTS LINE TABULATION SET
|
|
78
|
+
008B PLD PARTIAL LINE FORWARD
|
|
79
|
+
008C PLU PARTIAL LINE BACKWARD
|
|
80
|
+
008D RI REVERSE LINE FEED
|
|
81
|
+
008E SS2 SINGLE SHIFT TWO
|
|
82
|
+
008F SS3 SINGLE SHIFT THREE
|
|
83
|
+
0090 DCS DEVICE CONTROL STRING
|
|
84
|
+
0091 PU1 PRIVATE USE ONE
|
|
85
|
+
0092 PU2 PRIVATE USE TWO
|
|
86
|
+
0093 STS SET TRANSMIT STATE
|
|
87
|
+
0094 CCH CANCEL CHARACTER
|
|
88
|
+
0095 MW MESSAGE WAITING
|
|
89
|
+
0096 SPA START OF GUARDED AREA
|
|
90
|
+
0097 EPA END OF GUARDED AREA
|
|
91
|
+
0098 SOS START OF STRING
|
|
92
|
+
0099 SGC SINGLE GRAPHIC CHARACTER INTRODUCER
|
|
93
|
+
009A SCI SINGLE CHARACTER INTRODUCER
|
|
94
|
+
009B CSI CONTROL SEQUENCE INTRODUCER
|
|
95
|
+
009C ST STRING TERMINATOR
|
|
96
|
+
009D OSC OPERATING SYSTEM COMMAND
|
|
97
|
+
009E PM PRIVACY MESSAGE
|
|
98
|
+
009F APC APPLICATION PROGRAM COMMAND
|
|
99
|
+
00A0 NBSP NO-BREAK SPACE
|
|
100
|
+
00AD SHY SOFT HYPHEN
|
|
101
|
+
034F CGJ COMBINING GRAPHEME JOINER
|
|
102
|
+
061C ALM ARABIC LETTER MARK
|
|
103
|
+
115F HCF HANGUL CHOSEONG FILLER
|
|
104
|
+
1160 HJF HANGUL JUNGSEONG FILLER
|
|
105
|
+
1680 OSM OGHAM SPACE MARK
|
|
106
|
+
17B4 KIVAQ KHMER VOWEL INHERENT AQ
|
|
107
|
+
17B5 KIVAA KHMER VOWEL INHERENT AA
|
|
108
|
+
180E MVS MONGOLIAN VOWEL SEPARATOR
|
|
109
|
+
2000 NQSP EN QUAD
|
|
110
|
+
2001 MQSP EM QUAD
|
|
111
|
+
2002 ENSP EN SPACE
|
|
112
|
+
2003 EMSP EM SPACE
|
|
113
|
+
2004 3/MSP THREE-PER-EM SPACE
|
|
114
|
+
2005 4/MSP FOUR-PER-EM SPACE
|
|
115
|
+
2006 6/MSP SIX-PER-EM SPACE
|
|
116
|
+
2007 FSP FIGURE SPACE
|
|
117
|
+
2008 PSP PUNCTUATION SPACE
|
|
118
|
+
2009 THSP THIN SPACE
|
|
119
|
+
200A HSP HAIR SPACE
|
|
120
|
+
200B ZWSP ZERO WIDTH SPACE
|
|
121
|
+
200C ZWNJ ZERO WIDTH NON-JOINER
|
|
122
|
+
200D ZWJ ZERO WIDTH JOINER
|
|
123
|
+
200E LRM LEFT-TO-RIGHT MARK
|
|
124
|
+
200F RLM RIGHT-TO-LEFT MARK
|
|
125
|
+
2028 LS LINE SEPARATOR
|
|
126
|
+
2029 PS PARAGRAPH SEPARATOR
|
|
127
|
+
202A LRE LEFT-TO-RIGHT EMBEDDING
|
|
128
|
+
202B RLE RIGHT-TO-LEFT EMBEDDING
|
|
129
|
+
202C PDF POP DIRECTIONAL FORMATTING
|
|
130
|
+
202D LRO LEFT-TO-RIGHT OVERRIDE
|
|
131
|
+
202E RLO RIGHT-TO-LEFT OVERRIDE
|
|
132
|
+
202F NNBSP NARROW NO-BREAK SPACE
|
|
133
|
+
205F MMSP MEDIUM MATHEMATICAL SPACE
|
|
134
|
+
2060 WJ WORD JOINER
|
|
135
|
+
2061 FA FUNCTION APPLICATION
|
|
136
|
+
2062 IT INVISIBLE TIMES
|
|
137
|
+
2063 IS INVISIBLE SEPARATOR
|
|
138
|
+
2064 IP INVISIBLE PLUS
|
|
139
|
+
2066 LRI LEFT-TO-RIGHT ISOLATE
|
|
140
|
+
2067 RLI RIGHT-TO-LEFT ISOLATE
|
|
141
|
+
2068 FSI FIRST STRONG ISOLATE
|
|
142
|
+
2069 PDI POP DIRECTIONAL ISOLATE
|
|
143
|
+
2800 BLANK BRAILLE PATTERN BLANK
|
|
144
|
+
3000 IDSP IDEOGRAPHIC SPACE
|
|
145
|
+
3164 HF HANGUL FILLER
|
|
146
|
+
FEFF BOM ZERO WIDTH NO-BREAK SPACE
|
|
147
|
+
FFA0 HWHF HALFWIDTH HANGUL FILLER
|
|
148
|
+
E0001 LANG LANGUAGE TAG
|
|
149
|
+
E0020 SP TAG SPACE
|
|
150
|
+
E007F CANCEL CANCEL TAG`.split(`
|
|
151
|
+
`).map(e=>{let[,t,n,r]=/^(\S+) (\S+) (.+)$/u.exec(e);return[Number.parseInt(t,16),{label:n,name:r}]})),eC=e=>`U+${e.toString(16).toUpperCase().padStart(4,`0`)}`;function tC(e){let t=$S.get(e);if(t)return{label:t.label,title:`${eC(e)} ${t.name}`};if(e>917536&&e<917631){let t=String.fromCodePoint(e-917504);return{label:t,title:`${eC(e)} TAG ${t}`}}let n=e>=65024&&e<=65039?e-65024+1:e>=917760&&e<=917999?e-917760+17:0;return n?{label:`VS${n}`,title:`${eC(e)} VARIATION SELECTOR-${n}`}:{label:eC(e),title:`${eC(e)} ${aC(e)}`}}var nC=/\p{Cf}/u,rC=/\p{Default_Ignorable_Code_Point}/u,iC=/\p{Cn}/u;function aC(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 nC.test(t)?`format character`:rC.test(t)&&!iC.test(t)?`invisible character`:`unassigned code point`}function oC(e,t){let n=[];QS.lastIndex=0;for(let r=QS.exec(e);r;r=QS.exec(e)){let i=r[0].codePointAt(0),a=Ot(e,r.index,i,t);a===-1?n.push([r.index,i]):QS.lastIndex=a}return n}function sC(e){return ZS.test(e)}var cC=e=>{let{label:t,title:n}=tC(e);return k`<span class="code-control" data-tooltip="${n}">${t}</span>`};function lC(e,t=!1){if(!sC(e))return[e];let n=[],r=0;for(let[i,a]of oC(e,t))i>r&&n.push(e.slice(r,i)),n.push(cC(a)),r=i+(a>65535?2:1);return r<e.length&&n.push(e.slice(r)),n}var uC=e=>e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`);function dC(e,t=!1){if(!sC(e))return e;let n=``,r=[];for(let t=0;t<e.length;){let i=e.indexOf(`<`,t),a=i===-1?e.length:i;if(a>t&&(r.push({text:n.length,markup:t}),n+=e.slice(t,a)),i===-1)break;let o=e.indexOf(`>`,i);t=o===-1?e.length:o+1}let i=``,a=0,o=0;for(let[s,c]of oC(n,t)){for(;r[o+1]?.text<=s;)o++;let t=r[o].markup+s-r[o].text,{label:n,title:l}=tC(c);i+=`${e.slice(a,t)}<span class="code-control" data-tooltip="${uC(l)}">${uC(n)}</span>`,a=t+(c>65535?2:1)}return i+e.slice(a)}function fC(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 pC=[];function mC(e,t,n){if(!n)return null;if(!Array.isArray(e)||e.length===0||!fC(e[0],n))return{stack:pC,at:0,pos:n};let r=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:r,pos:e[r]}}function hC({stack:e,at:t,base:n},r){if(fC(e.length>0?e[t]:n,r))return null;let i=e.length>0?e.slice(0,t+1):[n];return{stack:[...i,r],at:i.length}}function gC(e,t,n){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+n,0),e.length-1)}function _C(e,t){if(!e||!t||t.length===0)return;let n=e.getBoundingClientRect().top,r=t[0].getBoundingClientRect(),i=t.item(t.length-1).getBoundingClientRect(),a=r.top-n+e.scrollTop,o=a+(i.bottom-n+e.scrollTop-a)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(o,a-r.height)),behavior:`instant`})}var vC=new Map,yC=new Map,bC=new Set,xC=new WeakMap,SC=new Set;function CC(e,t,n,r,i,a=yC,o=bC){let s=`${e}\0${t}`;if(a.has(s)||o.has(s))return;let c=Mt(t,r,n);if(!c){a.set(s,null);return}o.add(s),(async()=>{let e=await jS(n,c,i);a.set(s,typeof e==`string`?dC(e):null),o.delete(s),P.focusCodeTick++,queueMicrotask(Z)})()}async function wC(e){let t=vC.get(e);if(t&&(t.loading||t.sources))return;let n=(P.bundles??[]).find(t=>t.integrity===e);if(n){vC.set(e,{sources:null,loading:!0,error:null});try{let t=await KZ(e,n),r=Lt(t);vC.set(e,{sources:r,packageFiles:Vt(t),packageDirs:Gt(t),imports:qS(t,r),formats:t.kind===`stasis`?t.bundle?.formats:null,loading:!1,error:t.error??null})}catch(t){vC.set(e,{sources:null,loading:!1,error:t.message})}P.focusCodeTick++,queueMicrotask(Z),queueMicrotask(TC)}}function TC(){let e=R.querySelectorAll(`.focus-code-line-active`);e.length!==0&&_C(e[0].closest(`.focus-code-body`),e)}function EC(e){if(F()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;P.focusCodeTick;let t=sb(e._managedReportId);if(t?.data===null||t?.error)return null;let n={integrity:t?.data?.integrity??null,reportId:e._managedReportId},r=[e,...Array.isArray(e.evidence)?e.evidence:[]];for(let e of r){let t=DC(n,e?.file);if(t)return{...n,file:t,line:e.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null:Yf(e.fileHash).find(({integrity:e})=>t.includes(e))??null}function DC(e,t){if(typeof t!=`string`||!t)return null;if(!e.reportId)return Kf(e.integrity,t);let n=sb(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 OC(e,t,n){if(!F())return null;let r=sb(e);if(!r||r.data===void 0&&!r.error)return n&&!SC.has(e)&&(SC.add(e),lb(e).catch(()=>{}).finally(()=>{SC.delete(e),P.focusCodeTick++,queueMicrotask(Z),queueMicrotask(TC)})),n?{loading:!0}:null;let i=r.data;if(!i)return null;t=i.paths.get(t)??t;let a=i.sources.get(t);if(typeof a!=`string`)return null;let o=xC.get(i);return o||(o={cache:new Map,pending:new Set},xC.set(i,o)),CC(i.integrity,t,a,i.formats?.get(t),JS(i.sources,t,i.imports,i.sources,i.packageDirs),o.cache,o.pending),{content:a,highlighted:o.cache.get(`${i.integrity}\0${t}`)??null,loading:!1}}function kC(e,t,{kick:n=!0,reportId:r=null}={}){if(r)return OC(r,t,n);if(F())return null;let i=vC.get(e);if(!i)return n?(wC(e),{loading:!0}):null;if(i.loading&&!n)return null;if(i.loading)return{loading:!0};if(!i.sources)return null;let a=i.sources.get(t);if(typeof a!=`string`)return null;CC(e,t,a,i.formats?.get(t),JS(i.sources,t,i.imports,i.packageFiles,i.packageDirs));let o=`${e}\0${t}`;return{content:a,highlighted:yC.has(o)?yC.get(o):void 0,loading:!1}}function AC(e){let t=EC(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:Bn(t.reportId?t.line:e.line)}:null}function jC(e){return e?AC(Mg(e)):null}function MC(e){let t=jC(e);return t?{base:t,...mC(P.focusCodeStack,P.focusCodeAt,t)}:null}function NC(e){let t=AC(e);return t?mC(P.focusCodeStack,P.focusCodeAt,t).pos:null}function PC(e,t,n,r){let i=MC(e);if(!i||i.pos.integrity!==t||i.pos.file!==n)return null;let a=kC(t,r,{kick:!1,reportId:Mg(e)?._managedReportId});return a&&!a.loading?{integrity:t,file:r,range:null}:null}function FC(e){let t=e&&Mg(e),n=EC(t);if(n?.reportId&&!n.integrity)return OC(n.reportId,n.file,!0);let r=MC(e);if(!r)return null;let{pos:i}=r,a=kC(i.integrity,i.file,{reportId:t?._managedReportId});return!a||a.loading?a:{...a,file:i.file,integrity:i.integrity,range:i.range}}function IC(e,{teamOnly:t=!1,reportId:n}={}){if(!e)return null;let r=C(e);if(!$r(r))return null;if(F()){let i=t?null:n??(P.currentView===`links`?e._managedReportId:P.currentManagedReport),a=oi(fi({view:`findings`,teamId:P.currentManagedTeam,reportId:i,finding:{id:r}},P.managedTeams));return a?`${typeof location>`u`?``:location.origin}${a}`:null}let i=e._reportName||P.currentFile||``,a=P.currentWorkspace||LC(i);return Hr({id:r,report:P.currentWorkspace?null:Br(`report`,i),workspace:Br(`workspace`,a??``)})}function LC(e,t=P.currentReportWorkspace||P.currentWorkspace){let n=tp(e);return n.some(e=>e.id===t)?t:n.length===1?n[0].id:null}function RC(e){for(let t of[Xg(),qg()])for(let n of t)for(let t of n)if(C(t)===e)return{group:n,finding:t};return null}function zC(e,t){P.currentView=`findings`,P.viewMode===`graph`&&(P.viewMode=`table`,sr());let n=Lg(e).commonTriage;if(P.viewMode===`kanban`){let e=n??`untriaged`;P.kanbanExpandedColumn!==null&&P.kanbanExpandedColumn!==e&&(P.kanbanExpandedColumn=null)}else n!==P.shownTriage&&(P.shownTriage=n);P.upstreamOnly&&!e.every(e=>e.isUpstream)&&(P.upstreamOnly=!1),gr(P.showRevalidation,P.upstreamOnly);let r=e.find(e=>C(e)===t);if(Or(r)||b_(Zg())&&!g_(e)||!Og(e).some(e=>C(e)===t)){if(P.currentWorkspace){r?.isUpstream?P.upstreamOnly=!0:P.showRevalidation=!1,gr(P.showRevalidation,P.upstreamOnly);let e=Xg().find(e=>e.some(e=>C(e)===t));if(e)return zC(e,t)}else P.revalidationDetailed=!0}if(I_([e]).length===0){let e=P.sortBy;c_(),P.sortBy=e}let i=V(e);return e.length>1&&P.activeTabByGroup.set(i,t),P.viewMode===`table`?P.tableSelectedGid=i:P.viewMode===`focus`?P.focusGid=i:P.viewMode===`kanban`&&(P.kanbanPopoverGid=i),i}function BC(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role===`admin`)}function VC(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?e.id===t.id?0:e.id<t.id?-1:1:n}var HC=new Map;function UC(e,t){HC.has(e)||HC.set(e,new Set);let n=HC.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&HC.delete(e)}}function WC(e,t){P.managedComments.set(e,t);for(let t of HC.get(e)??[])t()}function GC(e){return F()?P.managedComments?.get(e?.id)??[]:[]}function KC(){return F()&&P.managedSession!=null&&qe(P.managedSession.role,`triage`)}function qC(e){return KC()&&BC(e,P.managedSession)}function JC(e){let t=P.reports,n=P.managedSession?.id;return()=>F()&&n!=null&&P.managedSession?.id===n&&P.reports===t&&P.managedReports.some(t=>t.id===e)}async function YC(e,{signal:t,readAnnotations:n}={}){let r=JC(e);if(!r())return!1;let i=new Set(P.reports.filter(t=>t._managedReportId===e).flatMap(e=>e.groups.flatMap(e=>e.map(e=>e.id)))),a=new Map([...i].map(e=>[e,P.managedComments.get(e)])),o=n?(await n(e))?.comments:await nx(e,P.currentManagedTeam,{signal:t});if(!r()||o==null||t?.aborted)return!1;let s=new Map([...i].map(e=>[e,[]]));for(let e of o)s.has(e.findingId)&&s.get(e.findingId).push(e);for(let[e,t]of s)P.managedComments.get(e)===a.get(e)&&!XC(a.get(e),t)&&WC(e,t);return!0}function XC(e=[],t){return e.length===t.length&&e.every((e,n)=>JSON.stringify(e)===JSON.stringify(t[n]))}async function ZC(e,t,n=null){let r=e?._managedReportId,i=JC(r);if(!i()||!KC()||n&&n.authorId!==P.managedSession.id)return{status:403};let a=await rx(r,{findingId:e.id,body:t,commentId:n?.id,version:n?.version},P.managedSession.csrfToken);if(!i())return{status:0};if(a.comment){let t=(P.managedComments.get(e.id)??[]).filter(e=>e.id!==a.comment.id);t.push(a.comment),t.sort(VC),WC(e.id,t)}return a}async function QC(e,t){let n=e?._managedReportId,r=JC(n);if(!r()||!qC(t))return 403;let i=await ix(n,t.id,t.version,P.managedSession.csrfToken);if(!r())return 0;if(i===204){let n=P.managedComments.get(e.id)??[];WC(e.id,n.filter(e=>e.id!==t.id))}return i}function $C(e,t){return e?Kr(e,k`<span class="managed-comment-avatar" aria-hidden="true"><span>${(t?.[0]??`?`).toUpperCase()}</span> ${Qe()?j:k`<img alt="" src="${`/api/avatar/${encodeURIComponent(e)}`}" loading="lazy" @error="${e=>{e.currentTarget.hidden=!0}}">`}</span>`):j}function ew(e){let t=e.version>1&&e.updatedAt!=null,n=e.createdAt??(t?e.updatedAt:null);if(n==null)return j;let r=new Date(n),i=[e.createdAt==null?``:`Posted ${new Date(e.createdAt).toLocaleString()}`,t?`Edited ${new Date(e.updatedAt).toLocaleString()}`:``].filter(Boolean).join(`
|
|
152
|
+
`);return k`<time class="managed-comment-time" datetime="${r.toISOString()}" data-tooltip="${i}">${e.createdAt==null?`edited `:``}${r.toLocaleString(void 0,{dateStyle:`short`,timeStyle:`short`})}${t&&e.createdAt!=null?` (edited)`:``}</time>`}function tw(e,t,n=j){let r=ew(e);return k`<div class="managed-comment"><div class="managed-comment-row">${e.authorId||e.authorLogin?k`<span class="managed-comment-author">${$C(e.authorId,e.authorLogin)} ${e.authorLogin?k`<strong>${e.authorLogin}</strong>`:j}</span>`:j}<div class="managed-comment-body">${t}</div>${r===j&&n===j?j:k`<div class="managed-comment-meta">${n===j?j:k`<div class="managed-comment-actions">${n}</div>`} ${r}</div>`}</div></div>`}function nw(e){return Zn(e,{managed:F()}).map(e=>typeof e==`string`?e:e.self?k`<a class="comment-self-ref" href="${e.url}">${e.label}</a>`:k`<a href="${e.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${e.url}">${e.label}</a>`)}var rw=k`<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>`,iw=k`<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>`,aw=k`<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>`,ow=k`<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>`,sw=k`<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>`,cw=k`<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"><rect x="1.5" y="2.5" width="13" height="11" rx="1.5"/><path d="m4.5 6 2 2-2 2M8.5 10h3"/></svg>`,lw=k`<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>`,uw=k`<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 dw(e){return e===`informational`?`info`:e.replaceAll(`_`,` `)}function fw(e,{variant:t=`full`}={}){let n=P.severityMode,r=Ni(e,n),i=k`<span class="${`badge ${r}`}">${dw(r)}</span>`,a=Mi(e),o=t===`tab`?null:Pi(e);if(!a&&!o)return i;let s=o?`Corrected severity varies across reports \u2014 ${Object.entries(o).map(([e,t])=>`${e||`(this report)`}: ${dw(t.severity)}`).join(`; `)}`:null,c=o?k`<span class="badge-varies" data-tooltip="${s}" aria-label="${s}">varies</span>`:j;if(!a)return k`<span class="${`badge-pair badge-pair-${t}`}">${i}${c}</span>`;let l=Ni(e,`original`),u=ji(e),d=e.correctedSeverityReason,f=(ki[u]??0)>(ki[l]??0),p=f?`up`:`down`,m=f?`▲`:`▼`,h=n!==`original`,g=(h?`Corrected ${p} from ${dw(l)}`:`Original severity \u2014 corrected ${p} to ${dw(u)}`)+(d?` \u2014 ${d}`:``),_=`Severity ${dw(r)}; ${h?`corrected ${p} from ${dw(l)}`:`original, corrected to ${dw(u)}`}${d?`; reason: ${d}`:``}`;if(t===`tab`)return k`<span class="badge-pair badge-pair-tab" data-tooltip="${g}" aria-label="${_}">${i}<span class="${`badge-corr-mark ${p}`}" aria-hidden="true">${m}</span></span>`;let v=h?l:u;return k`<span class="${`badge-pair badge-pair-${t}`}" data-tooltip="${g}" aria-label="${_}">${i}<span class="badge-orig-wrap"><span class="${`badge-arrow ${p}`}" aria-hidden="true">${m}</span>${h?k`<span class="badge-pre" aria-hidden="true">was</span>`:j}<span class="${`badge-orig ${v}${h?` struck`:``}`}">${dw(v)}</span></span>${c}</span>`}var pw=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|(?<![\p{L}\p{M}\p{N}_])_(?![\s_])(?:[^_\n]|(?<=[\p{L}\p{M}\p{N}])_(?=[\p{L}\p{M}\p{N}]))*?(?<!\s)_(?![\p{L}\p{M}\p{N}_])|"[^"\n]+"|`[^`\n]+`/gu;function mw(e){let t=[],n=0;for(let r of e.matchAll(pw)){r.index>n&&t.push(e.slice(n,r.index));let i=r[0].codePointAt(0);if(i===91){let e=Gn(r[0]);t.push(e?k`<a href="${e.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${e.url}">${e.label}</a>`:r[0])}else i===42?t.push(k`<strong>${mw(r[0].slice(2,-2))}</strong>`):i===95?t.push(k`<em>${mw(r[0].slice(1,-1))}</em>`):i===96?t.push(k`<span class="inline-code">${r[0].slice(1,-1)}</span>`):t.push(k`<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 hw({lang:e,code:t}){P.codeBlockTick;let n=LS(t,e);return k`<div class="code-block" data-lang="${e||j}">${e?k`<div class="code-block-lang">${e}</div>`:j}<pre><code>${n?O(n):t}</code></pre></div>`}function gw(e,{wrap:t=!1}={}){let n=e.split(/\n{2,}/u).filter(e=>e.trim()).flatMap(zn);return n.length<2&&typeof n[0]!=`object`?t?k`<div class="para">${mw(e)}</div>`:mw(e):n.map(e=>typeof e==`string`?k`<div class="para">${mw(e)}</div>`:_w(e))}function _w({level:e,text:t,rule:n}){return n?k`<hr class="md-rule">`:k`<div class="md-heading" role="heading" aria-level="${e}">${mw(t)}</div>`}var vw=/^\[([ xX])\][ \t]+/u;function yw({ordered:e,start:t,items:n}){let r=n.map(e=>{let t=vw.exec(e);return t?k`<li class="md-task"><input type="checkbox" disabled="disabled" ?checked="${t[1]!==` `}">${bw(e.slice(t[0].length))}</li>`:k`<li>${bw(e)}</li>`});return e?k`<ol class="md-list" start="${t>1?t:j}">${r}</ol>`:k`<ul class="md-list">${r}</ul>`}function bw(e,{paragraphs:t=!0}={}){if(!e)return e;let n=e.replaceAll(`\r
|
|
153
|
+
`,`
|
|
154
|
+
`),r=t?Rn(n):[n],i=r.length>1,a=e=>t?gw(e,{wrap:i}):mw(e),o=e=>{let t=Ln(e);return t.length===1&&typeof t[0]==`string`?a(t[0]):t.map(e=>typeof e==`string`?a(e):hw(e))};return r.length===1&&typeof r[0]==`string`?o(r[0]):r.map(e=>typeof e==`string`?o(e):yw(e))}function xw(e){let t=new Set;for(let n of e)t.add(Ux(n));return[...t]}function Sw(e){let t=Ux(e);return Vx[t]??t}function Cw(e,t){P.linksTick,P.findingIndexTick;let n=C(e),r=$r(n)?id(n).filter(e=>!t.has(e)):[];return r.length===0?j:k`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${r.map(e=>{let t=Xn(e),n=Ud(e),r=P.currentView===`links`&&P.currentLinks?.managedId?Gd([e])[0]:null,i=n.length===0?``:` \u2014 in ${n.map(e=>`${x(e)} (${Sw(e)})`).join(`, `)}`;return k`<a class="duplicate-ref" href="${F()?IC({id:e},{teamOnly:!0}):`#${Vr({id:e})}`}" data-links-preview="${r?e:j}" data-preview-report="${r?.report??j}" data-preview-row="${r?.index??j}" data-preview-managed-report="${r?.managedReportId??j}" data-tooltip="${`${t}${i}`}">${xw(n).map(e=>O(zx[e]??zx.default))}<span class="duplicate-ref-id">${Yn(e)??t}</span></a>`})}</div>`}function ww(e){let t=Tr(e);return t?k`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:j}function Tw(e){let t=vr()?zi(e.revalidateVerdict,e):``;return t?k`<div class="revalidate-verdict">${bw(In(t))}</div>`:j}function Ew(e,t,n=`section`,{collapsible:r=!1}={}){let i=t?k`<div class="section-body">${bw(In(t))}</div>`:j;return!r||!t?k`<div class="${n}"><div class="section-label">${e}</div>${i}</div>`:k`<details class="${n}"><summary class="section-label">${e}</summary>${i}</details>`}function Dw(e,t,n){let r=e?.integrity&&t?.file?DC(e,t.file):null;return r?k`<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>`:k`<span class="evidence-ref">${n}</span>`}function Ow(e,t){let n=Array.isArray(e.evidence)?e.evidence:[];if(n.length===0)return j;let r=Pg(e),i=EC(e),a=t===`focus`&&i!==null,o=a?NC(e):null;return k`<details class="evidence"><summary class="section-label">Evidence<span class="evidence-count">(${n.length})</span></summary><ol class="evidence-list">${n.map((t,n)=>{let s=Gi(t),c=Un(t,e,r,n),l=pi(t),u=Vw(e,`ev${n}`,i,t?.file,t?.line),d=Iw(c),f=a&&fC(o,{integrity:i.integrity,file:DC(i,t?.file),range:Bn(t?.line)});return k`<li class="${T({current:f})}">${a?Dw(i,t,s):c?k`<a class="evidence-ref" href="${c}" target="_blank" rel="noopener">${s}</a>`:k`<span class="evidence-ref">${s}</span>`} ${u?.mark??j} ${d} ${u?.tip??j} ${l?k`<div class="evidence-note">${bw(In(l))}</div>`:j} ${u?.body??j}</li>`})}</ol></details>`}function kw(e,t){let n=Gi(e);return t?k`<a href="${t}" target="_blank" rel="noopener">${n}</a>`:n}function Aw(e,t){if(!t)return j;let n=t.slice(0,7),r=qn(e,t);return r?k`<a href="${r}" target="_blank" rel="noopener" data-tooltip="${t}">${n}</a>`:k`<span data-tooltip="${t}">${n}</span>`}var jw=k`<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>`,Mw=k`<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>`,Nw=k`<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>`,Pw=k`<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>`,Fw=O(aa);function Iw(e){let t=Fn(e);return t?k`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${Fw}</a>`:j}function Lw(e,t,n,r){return`${C(e)}\0${t}\0${n}\0${r?`${r.start}-${r.end}`:``}`}var Rw={key:null,host:null};function zw(e,t){if(Rw.key===e)return;let n=Rw.host,r=e===null?null:t?.getRootNode?.()?.host??null;Rw={key:e,host:r},n?.requestUpdate?.(),r!==n&&r?.requestUpdate?.()}function Bw(e,t,n){P.codeBlockTick;let{text:r,lines:i,startLine:a}=Hn(e,t);if(i.length===0)return j;let o=n.lastIndexOf(`.`),s=LS(r,o<0?``:n.slice(o+1)),c=a+i.length-1;return k`<div class="code-preview" style="${E({"--lineno-width":`${String(c).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${i.map((e,n)=>{let r=a+n,i=!!t&&r>=t.start&&r<=t.end;return k`<div class="${T({"code-preview-lineno":!0,cited:i})}">${r}</div>`})}</aside><pre class="code-preview-source"><code>${s?O(s):r}</code></pre></div>`}function Vw(e,t,n,r,i){if(P.bundleHashTick,!n||!r)return null;let a=DC(n,r);if(!a)return null;let o=Bn(i),s=Lw(e,t,r,o),c=P.codePreviews.has(s);P.focusCodeTick;let l=k`<button type="button" class="${T({"code-preview-btn":!0,open:c})}" data-code-preview="${s}" aria-expanded="${String(c)}" aria-label="${c?`Hide the source at ${r}`:`Show the source at ${r}`}" @mouseenter="${e=>{zw(s,e.currentTarget),kC(n.integrity,a,{reportId:n.reportId})}}" @mouseleave="${e=>{Rw.key===s&&zw(null,e.currentTarget)}}" @focus="${e=>{zw(s,e.currentTarget),kC(n.integrity,a,{reportId:n.reportId})}}" @blur="${e=>{Rw.key===s&&zw(null,e.currentTarget)}}">${Pw}</button>`;if(c){let e=kC(n.integrity,a,{reportId:n.reportId}),t=!e||e.loading?k`<div class="code-preview code-preview-pending">${e?`Loading source…`:`Source unavailable`}</div>`:Bw(e.content,o,a);return{mark:l,tip:j,body:t}}if(Rw.key!==s)return{mark:l,tip:j,body:j};let u=kC(n.integrity,a,{kick:!1,reportId:n.reportId});return{mark:l,tip:u&&!u.loading?k`<div class="code-preview-tip" role="tooltip">${Bw(u.content,o,a)}</div>`:j,body:j}}var Hw=k`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${qi}"/></svg>`,Uw=k`<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>`,Ww=k`<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 Gw(e,t=!1){let n=Cg(e)?.flagged===!0,r=n?`Remove flag`:`Flag this finding`;return k`<button type="button" class="${T({"mark-flag":!0,flagged:n})}" data-flag-toggle="${C(e)}" ?disabled="${!Sg(e)}" aria-label="${r}" aria-pressed="${String(n)}">${Ww}${t?k`<span class="mark-btn-label">${n?`Flagged`:`Flag`}</span>`:j}</button>`}function Kw(e){let t=Vi(e)||e.file||`Security finding`;return t.length>120?`${t.slice(0,119)}\u2026`:t}function qw(e){let t=Pn(e,Pg(e)),n=Gi(e),r=[];e.file&&r.push(`File: ${t?`[${n}](${t})`:n}`),e.description&&r.push(e.description);let i=Wn(e);return i&&r.push(i),e.confidence!==void 0&&e.confidence!==null&&r.push(`Confidence: ${e.confidence}/10`),r.join(`
|
|
155
|
+
|
|
156
|
+
`)}function Jw(e){if(!P.currentWorkspace)return j;let t=e._reportName;if(!t||F()&&!e._managedReportId)return j;let n=it[Ux(t)]??it.default,r=k`${O(n)}<span class="report-chip-label report-button-label">${x(t)}</span>`;if(F()){let t=IC(e,{reportId:e._managedReportId});if(t)return k`<a class="report-chip report-button comment-self-ref" href="${et(t)}">${r}</a>`}return k`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${C(e)}" data-managed-report="${F()?e._managedReportId:j}">${r}</button>`}function Yw(e,t,n,r,i=null){let a=i===`table`?j:Jw(r),o=Cg(r),s=!bg(r),c=!Sg(r),l=o?.color??null,u=o?.comment??``,d=o?.fix??``,f=F()?`View comments`:u?`Edit comment: ${u}`:`Add comment`,p=d?`Edit fix link: ${d}`:`Add fix link (PR URL, etc.)`,m=i===`focus`&&a===j,h=F()?`Comments`:u?`Edit comment`:`Comment`,g=d?`Edit fix link`:`Fix link`,_=k`<button type="button" ?disabled="${s}" class="${T({"mark-comment":!0,"has-comment":u})}" data-tooltip="${u&&!F()?f:j}" aria-label="${f}">${jw}${m?k`<span class="mark-btn-label">${h}</span>`:j}</button>`,v=k`<button type="button" ?disabled="${c}" class="${T({"mark-fix":!0,"has-fix":d})}" data-tooltip="${d?p:j}" aria-label="${p}">${Mw}${m?k`<span class="mark-btn-label">${g}</span>`:j}</button>`,y=Gw(r,m),b=k`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${rw}${m?k`<span class="mark-btn-label">Copy</span>`:j}</button>`,ee=IC(r)?k`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${Nw}${m?k`<span class="mark-btn-label">Link</span>`:j}</button>`:j,te=F()?gi({repo:{github:r.repo?.github||r._repoFallback}}):Fg(r),ne=Jn(te,{title:Kw(r),body:qw(r),labels:wS(r.isSecurity===!0,P.githubNewIssueLabels)}),re=F()&&P.managedSession&&!P.managedSession.publicShare&&P.currentManagedTeam,ie=k`${Uw}${m?k`<span class="mark-btn-label">Issue</span>`:j}`,ae=Jh(r)?j:ne?re?k`<button type="button" class="mark-issue" data-issue-form="${ne}" data-tooltip="${m?j:`Create a GitHub issue for this finding`}" aria-label="Create a GitHub issue for this finding">${ie}</button>`:k`<a class="mark-issue" href="${ne}" target="_blank" rel="noopener" data-tooltip="${m?j:`Create a GitHub issue for this finding`}" aria-label="Create a GitHub issue for this finding">${ie}</a>`:j,oe=k`<button type="button" class="mark-claude" data-tooltip="${m?j:`Open in Claude Code (claude://) with a confirm-and-fix prompt`}" aria-label="Open finding in Claude Code">${Hw}${m?k`<span class="mark-btn-label">Claude</span>`:j}</button>`,se=k`<color-marker .selected="${l}" .disabled="${c}"></color-marker>`,ce=Ig(e)!==e,le=e.linkedTabs?`change triage state for linked findings`:ce?`change triage state for App and own-source findings`:n.hasConflict?`change triage state (colors mismatch — acts per-tab)`:t.length>1?`change triage state for the whole group`:`change triage state`;return k`<div class="finding-actions">${a}<div class="finding-action-controls"><span class="mark-action-group">${_}${v}${y}</span><span class="mark-action-group">${b}${ee}${ae}${oe}</span>${se}${Zw(e,le,i,n,r)}</div></div>`}function Xw(e){if(e.newState!==`open`)return;let t=e.currentTarget,n=t.getRootNode().querySelector?.(`[popovertarget="${t.id}"]`);if(!n)return;let r=n.getBoundingClientRect(),i=t.offsetWidth||110,a=t.offsetHeight||100,o=r.right-i;o<4&&(o=4),o+i>window.innerWidth-4&&(o=window.innerWidth-i-4);let s=r.bottom+4;s+a>window.innerHeight-4&&r.top>a+4&&(s=r.top-a-4),t.style.top=`${s}px`,t.style.left=`${o}px`}function Zw(e,t,n,r,i){let a=V(e),o=!Sg(i)||Vg(e,r).length===0,s=o?null:Hg(e,r,i),c={inprogress:`In progress`,fixed:`Fixed`,invalid:`Invalid`,deleted:`Deleted`,ignored:`Ignored`},l={inprogress:`In progress`,fixed:`Fixed`,invalid:`Invalid`,deleted:`Delete`,ignored:`Ignore`},u=!!P.shownTriage,d=u?c[P.shownTriage]:null,f=[`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`],p=u&&n!==`focus`?[{key:`restore`,label:`Restore`},...f.filter(e=>e!==P.shownTriage).map(e=>({key:e,label:l[e]}))]:f.map(e=>({key:e,label:l[e]})),m=[`mark-triage-menu`];u&&m.push(`with-label`,`triage-state-${P.shownTriage}`);let h=`triage-menu-${a.replaceAll(/[^A-Za-z0-9_-]/gu,`_`)}`;return k`<div class="triage-menu-wrap"><button type="button" class="${m.join(` `)}" popovertarget="${h}" popovertargetaction="toggle" aria-label="${t}" ?disabled="${o}">${d?k`<span class="mark-triage-label">${d}</span>`:j} <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="${h}" class="triage-menu" data-gid="${a}" role="menu" @beforetoggle="${Xw}">${p.map(e=>k`<button type="button" class="${T({"triage-menu-item":!0,[`triage-menu-${e.key}`]:!0,active:s===e.key})}" data-triage-action="${e.key}" ?disabled="${o}" role="menuitem">${e.label}</button>`)}</div></div>`}function Qw(e,t){let n=!!e?.comment,r=!!(e?.fix||Yh(t)),i=e?.flagged===!0;return!n&&!r&&!i?j:k`<span class="tab-marks">${n?k`<span class="has-comment" role="img" aria-label="Has a comment">${jw}</span>`:j}${r?k`<span class="has-fix" role="img" aria-label="Has a fix link">${Mw}</span>`:j}${i?k`<span class="flagged" role="img" aria-label="Flagged">${Ww}</span>`:j}</span>`}function $w(e,t,n){let{app:r,source:i}=Ag(e),a=e=>eT(e,C(e)===t,n);return k`<div class="tabs">${r.map(a)} ${r.length>0&&i.length>0?k`<span class="tab-level-separator" aria-hidden="true">•</span>`:j} ${i.map(a)}</div>`}function eT(e,t,n){let r=C(e),i=Cg(e),a=i?.color,o=Tg(e,i),s=[`tab`,`tab-severity-${Ni(e,P.severityMode)}`];t&&s.push(`active`),a&&s.push(`tab-mark-${a}`),o===`ignored`&&!n.allIgnored?s.push(`tab-ignored`):o&&o!==`ignored`&&n.commonTriage===null&&s.push(`tab-${o}`);let c=Hx(e),l=c?it[c]:null,u=!l&&e.confidence!=null;l?s.push(`tab-with-analyzer`):u&&s.push(`tab-with-confidence`);let d=l?k`<span class="tab-analyzer" role="img" aria-label="${Vx[c]}">${O(l)}</span>`:u?k`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:j;return k`<button type="button" class="${s.join(` `)}" data-tid="${r}" aria-pressed="${t}" aria-description="${a?`${a} color label`:j}"><span class="tab-label"><span class="tab-severity">${fw(e,{variant:`tab`})}</span><span class="tab-indicators">${Qw(i,e)}</span></span>${d}</button>`}function tT(e){if(P.viewMode===`table`||P.viewMode===`focus`){let t=e.confidence*10;return k`<div class="${`conf-ring ${Ni(e,P.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="${E({"stroke-dasharray":`${t} 100`})}"/></svg> <span>${e.confidence}<small>/10</small></span></div><div class="value-label">Confidence</div>`}return k`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}var nT=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function rT(e){if(Qd(e))return j;let t=e?.name;if(typeof t!=`string`||!nT.test(t))return j;let n=e?.version,r=typeof n==`string`&&n.length>0,i=r?`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`:`https://www.npmjs.com/package/${t}`,a=r?`${t}@${n}`:t;return k`<span class="line-num"><a class="npm-link" href="${i}" target="_blank" rel="noopener noreferrer">npm: ${a}</a></span>`}function iT(e,t,n,r,i,a){let o=C(e),s=Cg(e),c=s?.comment??``,l=s?.fix??``,u=Yh(e),d=Jh(e),f=Pn(e,Pg(e)),p=kw(e,f),m=Bi(e),h=EC(e),g=Vw(e,`loc`,h,e.file,e.line),_=Iw(f),v=k`<span class="line-num">${m?k`${p}, ${m}`:p}${g?.mark??j}${_}</span>`,y=jn(e),b=String(e.discoveredIn??``).trim(),ee=b===String(e.file??``).trim()?``:b,te=i===`focus`?rT(e.package?.npm):j,ne=j;if(i!==`focus`&&F()&&g)ne=k`<button type="button" class="finding-code-btn" data-finding-code-report="${h.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(i!==`focus`&&!F()&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){P.bundleHashTick;let t=new Set(e._bundleHashes),n=Yf(e.fileHash).find(({integrity:e})=>t.has(e));n&&(ne=k`<button type="button" class="finding-code-btn" data-finding-code-bundle="${n.integrity}" data-finding-code-file="${n.file}" data-finding-code-line="${e.line??``}" data-tooltip="${`Open ${n.file} in bundle source viewer`}">Code</button>`)}let{title:re,body:ie}=Hi(e),ae=Wi(ie),oe=ae.findIndex(e=>e.label!==null),se=oe===-1?ae:ae.slice(0,oe),ce=oe===-1?[]:ae.slice(oe);return k`<div class="${T({"tab-body":!0,active:t})}" data-tid="${o}">${r>1?k`<div class="print-case-label">${n+1} of ${r}</div>`:j}<div class="finding-left">${s?.color||s?.flagged===!0?k`<div class="${s?.color?`finding-top-marks color-${s.color}`:`finding-top-marks`}">${s?.color?k`<span class="finding-color-mark" role="img" aria-label="${`Color label: ${s.color}`}"></span>`:j} ${s?.flagged===!0?k`<span class="finding-bookmark-mark" role="img" aria-label="Bookmarked"></span>`:j}</div>`:j} ${fw(e,{variant:`full`})}<div class="value-label">Severity</div>${e.confidence===void 0?j:tT(e)} ${ww(e)} ${ne}</div><div class="finding-body"><div class="line-row">${v} ${g?.tip??j} ${te} ${ee?k`<span class="line-num discovered-in">(found analyzing ${ee})</span>`:j} ${y?k`<span class="run-meta">${y}</span>`:j}</div>${g?.body??j} ${re?k`<div class="desc-title">${mw(re)}</div>`:j} ${se.map(e=>k`<div class="desc">${bw(In(e.body))}</div>`)} ${Ow(e,i)} ${ce.map(e=>e.label===null?k`<div class="desc">${bw(In(e.body))}</div>`:Ew(e.label,e.body))} ${e.impact?Ew(`Impact`,zi(e.impact,e)):j} ${e.reproduction?Ew(`Reproduction`,zi(e.reproduction,e),`section`,{collapsible:!0}):j} ${e.recommendation?Ew(`Recommendation`,zi(e.recommendation,e),`recommendation`,{collapsible:!0}):j} ${e.confidenceReason?k`<div class="conf-reason">${bw(zi(e.confidenceReason,e))}</div>`:j} ${Tw(e)} ${e.revalidateRecommendation&&vr()?Ew(`Revalidation recommendation`,zi(e.revalidateRecommendation,e),`recommendation`,{collapsible:!0}):j} ${Mi(e)&&e.correctedSeverityReason?k`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${bw(e.correctedSeverityReason)}</div>`:j} ${Cw(e,a)} ${F()?GC(e).map(e=>k`<div class="comment-block">${tw(e,nw(e.body))}</div>`):c?k`<div class="comment-block"><span class="comment-label">Comment:</span> ${nw(c)}</div>`:j} ${d?k`<div class="fix-block"><span class="fix-label">Issue:</span><managed-fix-link .url="${d.url}"></managed-fix-link></div>`:j} ${l?k`<div class="fix-block"><span class="fix-label">Fix:</span> ${mi(l)?k`<managed-fix-link .url="${l}"></managed-fix-link>`:l}</div>`:j} ${u&&u!==l?k`<div class="fix-block"><span class="fix-label">Fix from issue:</span><managed-fix-link .url="${u}"></managed-fix-link></div>`:j}</div></div>`}function aT(e){let t=[`finding`,...sT(e)];return Og(e).length>1&&t.push(`multi-case`),t}function oT(e,t={}){let{context:n=null}=t,r=Lg(e),i=Og(e),a=new Set(i.map(C)),o=Mg(e),s=C(o),c=o.commitHash?k`<div class="commit-ref">introduced in ${Aw(o.repo?.github,o.commitHash)}</div>`:j,l=P.currentWorkspace&&c!==j;return k`${i.map((e,t)=>iT(e,C(e)===s,t,i.length,n,a))} ${l?k`<div class="marks-commit-row">${c}</div>`:j}<div class="marks"><div class="marks-left">${l?j:c} ${i.length>1?$w(i,s,r):j}</div>${Yw(e,i,r,o,n)}</div>`}function sT(e){let t=Lg(e),n=e.some(e=>e.critical||Ni(e,P.severityMode)===`critical`),r=[];return n&&r.push(`is-critical`),t.hasConflict?r.push(`has-conflict`):t.commonColor&&r.push(`mark-${t.commonColor}`),P.shownTriage&&r.push(`triage-${P.shownTriage}`),r}function cT(e){let t=Lg(e),n=Og(e),r=Mg(e),i=C(r),a=r,o=Vi(a),s=jn(a),c=Bi(a),l=c?`, ${c}`:``,u=Pn(a,Pg(a));return k`<div class="row-score">${fw(a,{variant:`compact`})} ${a.confidence===void 0?j:k`<span class="row-conf"><strong>${a.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${o}</span> ${s?k`<span class="row-type">${s}</span>`:j}</div><div class="meta-row"><span class="row-loc">${kw(a,u)}${l}</span> ${Iw(u)}<div class="marks">${Yw(e,n,t,r,`table`)}</div></div>${n.length>1?k`<div class="tabs-row">${$w(n,i,t)}</div>`:j}</div>`}function lT(e){if(!e)return j;let t=Yf(e)[0];return t?k`<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>`:j}function uT(e,t){let{allFiles:n,lowerFiles:r,importedBy:i}=fT(e),a=P.filesSearch.trim().toLowerCase(),o=a?n.filter((e,t)=>r[t].includes(a)):n,s=t=>e[t]?k`<a href="${`#${yr(t)}`}"><span class="name">${t}</span></a>`:k`<span class="name">${t}</span>`,c=e=>{let n=t.get(e);if(!n)return null;let r=Ai.filter(e=>(n[e]??0)>0);return r.length===0?null:k`<span class="tree-count-chips">${r.map(e=>k`<span class="${`tree-count-chip ${e}`}">${n[e]} ${e.replaceAll(`_`,` `)}</span>`)}</span>`},l=e=>{let n=t.get(e);return n?Ai.reduce((e,t)=>e+(n[t]??0),0):0},u=k`<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">${o.length} of ${n.length}</span></div></div>`;if(P.filesViewMode===`table`){let t=P.filesSelectedFile&&Object.hasOwn(e,P.filesSelectedFile)&&(!a||P.filesSelectedFile.toLowerCase().includes(a))?P.filesSelectedFile:null;return k`<div class="${t?`tree-view tree-view-table with-details`:`tree-view tree-view-table`}">${u}<div class="${t?`tree-table-layout open`:`tree-table-layout`}"><div class="tree-table-list">${o.length===0?k`<div class="tree-table-empty">No files match the search.</div>`:j} ${o.map(n=>{let r=l(n),i=n===t,a=On(e[n].size);return k`<div class="${`tree-table-row${i?` selected`:``}${r===0?` clean`:``}`}" data-tree-select="${n}"><span class="tree-table-name" data-tooltip-truncated data-tooltip="${n}">${n}</span> ${c(n)??k`<span class="tree-table-clean-marker">—</span>`} ${a?k`<span class="tree-table-size">${a}</span>`:j}</div>`})}</div>${t?k`<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">${mT(e[t],t,i.get(t)??[],s)}</div></aside>`:j}</div></div>`}return k`<div class="tree-view">${u} ${o.length===0?k`<div class="tree-table-empty">No files match the search.</div>`:j} ${o.map(t=>{let n=e[t],r=i.get(t)??[],a=On(n.size);return k`<section class="tree-file" id="${yr(t)}"><div class="tree-file-header"><span class="name">${t}</span> ${c(t)} ${a?k`<span class="tree-file-size">${a}</span>`:j} ${lT(n.fileHash)}</div>${pT(n,r,s)}</section>`})}</div>`}var dT={treeData:null,allFiles:[],lowerFiles:[],importedBy:new Map};function fT(e){if(dT.treeData===e)return dT;let t=Object.keys(e).toSorted(),n=new Map;for(let r of t)for(let t of e[r].imports??[]){let e=n.get(t)??[];e.push(r),n.set(t,e)}return dT={treeData:e,allFiles:t,lowerFiles:t.map(e=>e.toLowerCase()),importedBy:n},dT}function pT(e,t,n){return k`${e.fileHash||e.treeHash?k`<div class="tree-hashes hashes">${e.fileHash?k`<div class="tree-hash">file: ${e.fileHash}</div>`:j} ${e.treeHash?k`<div class="tree-hash">tree: ${e.treeHash}</div>`:j}</div>`:j} ${e.imports?.length>0?k`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(e=>k`<li>${n(e)}</li>`)}</ul></div>`:j} ${t.length>0?k`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(e=>k`<li>${n(e)}</li>`)}</ul></div>`:j} ${e.exports?.length>0?k`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(e=>k`<li><span class="name">${e}</span></li>`)}</ul></div>`:j}`}function mT(e,t,n,r){let i=On(e.size);return k`<div class="tree-detail-name"><span class="name">${t}</span> ${i?k`<span class="tree-detail-size">${i}</span>`:j} ${lT(e.fileHash)}</div>${pT(e,n,r)}`}var hT=null,gT=null;function _T(){return gT}function vT(){return hT||(hT=(async()=>{try{let e=await import(`./graph.js`);return gT=e,e}catch(e){throw hT=null,e}})(),hT)}async function yT(e,t,n,r,i){try{let a=await vT(),o=a.buildGraphFromPrep(t);M(k`<graph-layout .graph="${o}" .options="${n}"></graph-layout>`,e);let s=e.querySelector(`graph-layout`);return await s.updateComplete,r(),i(),a.attachGraph2Interaction(e,o,r,i),s}catch(t){return e.textContent=`Graph failed to load: ${t instanceof Error?t.message:String(t)}`,null}}var bT=null,xT=null;function ST(){xT=null}async function CT(){let e=await xT?.promise.catch(()=>null);e?.isConnected&&e.focusInput()}function wT(){return bT||(bT=(async()=>{try{return await import(`./terminal.js`)}catch(e){throw bT=null,e}})(),bT)}function TT(e){let t=new Map([...Vt(e)].filter(([,e])=>e?.format!==`digest`));if(t.size===0)return t;let n=[...t.keys()],{stripped:r}=kn(n),i=new Map;for(let e=0;e<n.length;e++)i.set(r[e],t.get(n[e]));return i}async function ET(e,t){let n=t?.integrity??``;(!xT||xT.integrity!==n||(t?.managedId||xT.managedId)&&xT.details!==t)&&(xT={integrity:n,managedId:t?.managedId,details:t?.managedId?t:null,promise:DT(t,n)});try{let t=await xT.promise;return!e.isConnected||e.contains(t)||e.replaceChildren(t),t}catch(t){return xT=null,e.textContent=`Terminal failed to load: ${t instanceof Error?t.message:String(t)}`,null}}async function DT(e,t){return(await wT()).createTerminalElement(TT(e),t)}var OT=(e,t,n)=>{for(let n of t)if(n[0]===e)return(0,n[1])();return n?.()},kT={},AT=la(class extends ua{constructor(){super(...arguments),this.ot=kT}render(e,t){return t()}update(e,[t,n]){if(Array.isArray(t)){if(Array.isArray(this.ot)&&this.ot.length===t.length&&t.every((e,t)=>e===this.ot[t]))return ga}else if(this.ot===t)return ga;return this.ot=Array.isArray(t)?Array.from(t):t,this.render(t,n)}}),jT=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let e of n)e._$AO?.(t,!1),jT(e,t);return!0},MT=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},NT=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),IT(t)}};function PT(e){this._$AN===void 0?this._$AM=e:(MT(this),this._$AM=e,NT(this))}function FT(e,t=!1,n=0){let r=this._$AH,i=this._$AN;if(i!==void 0&&i.size!==0){if(t){if(Array.isArray(r))for(let e=n;e<r.length;e++)jT(r[e],!1),MT(r[e]);else r!=null&&(jT(r,!1),MT(r))}else jT(this,e)}}var IT=e=>{e.type==ca.CHILD&&(e._$AP??=FT,e._$AQ??=PT)},LT=class extends ua{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,t,n){super._$AT(e,t,n),NT(this),this.isConnected=e._$AU}_$AO(e,t=!0){e!==this.isConnected&&(this.isConnected=e,e?this.reconnected?.():this.disconnected?.()),t&&(jT(this,e),MT(this))}setValue(e){if(Zr(this._$Ct))this._$Ct._$AI(e,this);else{let t=[...this._$Ct._$AH];t[this._$Ci]=e,this._$Ct._$AI(t,this,0)}}disconnected(){}reconnected(){}},RT=new WeakMap,zT=la(class extends LT{render(e){return j}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)),j}rt(e){if(this.G!==void 0){if(this.isConnected||(e=void 0),typeof this.G==`function`){let t=this.ht??globalThis,n=RT.get(t);n===void 0&&(n=new WeakMap,RT.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`?RT.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}}),BT=2**20,VT=Math.floor(2**25/15);function HT(e){let t=[];for(let n=0;n<e.length;){let r=Math.min(n+BT,e.length);r<e.length&&e.codePointAt(r-1)>65535&&r--,t.push(e.slice(n,r)),n=r}return t}function UT(e,t=!1){return e.length<=BT&&!sC(e)?e:lC(e,t).flatMap(e=>typeof e==`string`?HT(e):[e])}var WT=class extends n{};function G(e,t,n){if(!e)throw new WT(typeof n==`function`?n():n,t.line)}var GT=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,KT=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,qT=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,JT=[31,28,31,30,31,30,31,31,30,31,30,31];function YT(e){let t=GT.exec(e);if(t===null)return;let[n,r,i,a,o,s]=[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||i<1||i>(r===2&&c?29:JT[r-1])||a>23||o>59||s>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let l=[];(t[4]===`t`||t[9]===`z`)&&l.push(`a date-time with a lower-case "t" or "z" is not supported`),n===0&&l.push(`the year 0000 is not supported`),s===60&&l.push(`a leap second is not supported`);let u=t[10]===void 0?0:(t[10]===`-`?-1:1)*(Number(t[11])*60+Number(t[12]));return{year:n,month:r,day:i,hour:a,minute:o,second:s,fraction:t[8]?.slice(1)??``,offset:u,unsupported:l}}var XT=class{constructor(e){if(typeof e!=`string`||YT(e)?.unsupported.length!==0)throw TypeError(`expected an RFC 3339 offset date-time`);this.text=e,Object.freeze(this)}toString(){return this.text}toJSON(){return this.text}toDate(){let{year:e,month:t,day:n,hour:r,minute:i,second:a,fraction:o,offset:s}=YT(this.text),c=new Date(0);return c.setUTCFullYear(e,t-1,n),c.setUTCHours(r,i-s,a,Number(o.padEnd(3,`0`).slice(0,3))),c}};function ZT(e,n){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let r=YT(e);if(r?.unsupported.length===0)return new XT(e);throw G(!(/^\d{4}-\d\d-\d\d$/u.test(e)&&/^ \d\d:/u.test(n.text.slice(n.pos,n.pos+4))),n,`a date-time with a space in place of "T" is not supported`),G(!KT.test(e),n,()=>`local dates and times are not supported: ${t(e)}`),G(!qT.test(e),n,()=>`a date-time or a time without seconds is not supported: ${t(e)}`),G(r?.unsupported.length!==1,n,()=>`${r.unsupported[0]}: ${t(e)}`),new WT(`${t(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,n.line)}var QT=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,$T=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,eE=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,tE=2n**63n,nE=BigInt(2**53-1),rE={__proto__:null,x:16,o:21,b:63};function iE(e,n){let r=QT.test(e);if(!r&&!$T.test(e))return;let i=e.replaceAll(`_`,``),a=r?i.replace(/^[+-]/u,``):i.slice(2).replace(/^0+/u,``),o=a.length<=(r?19:rE[i[1]])?BigInt(r?i:`${i.slice(0,2)}${a||`0`}`):void 0;return G(o!==void 0&&o>=-tE&&o<tE,n,()=>`integer out of range ${t(e)}`),o>=-nE&&o<=nE?Number(o):o}var aE={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:NaN,"+nan":NaN,"-nan":NaN};function oE(e){if(typeof e!=`string`||!eE.test(e))return;if(e in aE)return aE[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 sE=class{constructor(e){let t=oE(e);if(t==null)throw TypeError(`expected a TOML float that a double can hold`);this.text=e,this.value=t,Object.freeze(this)}valueOf(){return this.value}toString(){return this.text}toJSON(){return this.value}};function cE(e,n){let r=oE(e);if(r!==void 0)return G(r!==null,n,()=>`float out of range ${t(e)}`),new sE(e)}var lE=64;function uE(e){for(;e.text[e.pos]===` `||e.text[e.pos]===` `;)e.pos++}function dE(e){if(e.pos>=e.text.length)return`the end of the text`;let n=/^[^\n]*/u.exec(e.text.slice(e.pos,e.pos+64+1))[0].replace(/\r$/u,``);return n===``?`the end of the line`:t(n)}var fE=`a carriage return must be followed by a line feed`;function pE(t,n,r){throw new WT(n===`\r`?fE:`${e(n)} is not allowed in ${r}`,t.line)}var mE=e=>e.pos>=e.text.length||e.text[e.pos]===`
|
|
157
|
+
`||e.text.startsWith(`\r
|
|
158
|
+
`,e.pos),hE=/#[^[\p{Cc}--[\t\u0080-\u009F]]]*/vy;function gE(e){e.text[e.pos]===`#`&&(r(e,hE),mE(e)||pE(e,e.text[e.pos],`a comment`))}function _E(e){if(e.text[e.pos]===`
|
|
159
|
+
`)e.pos+=1;else if(e.text.startsWith(`\r
|
|
160
|
+
`,e.pos))e.pos+=2;else return!1;return e.line++,!0}function vE(e){do uE(e),gE(e);while(_E(e))}var yE={__proto__:null,b:`\b`,t:` `,n:`
|
|
161
|
+
`,f:`\f`,r:`\r`,'"':`"`,"\\":`\\`},bE={__proto__:null,'"':/[^"\\[\p{Cc}--[\t\u0080-\u009F]]]*/vy,"'":/[^'[\p{Cc}--[\t\u0080-\u009F]]]*/vy},xE=/u([\dA-Fa-f]{4})|U([\dA-Fa-f]{8})/uy;function SE(e){let n=e.text[e.pos];if(n in yE)return yE[e.text[e.pos++]];let i=r(e,xE);G(i!==null,e,()=>`unsupported escape ${t(`\\${n??``}`)}`);let a=Number.parseInt(i[1]??i[2],16);return G(a<=1114111&&(a<55296||a>57343),e,()=>`\\${i[0]} is not a Unicode scalar value`),String.fromCodePoint(a)}var CE=/[\t ]*\r?\n(?:[\t ]|\r?\n)*/uy;function wE(e){let t=r(e,CE);return t===null?SE(e):(e.line+=t[0].split(`
|
|
162
|
+
`).length-1,``)}var TE=(e,t)=>e.text[e.pos+1]===t&&e.text[e.pos+2]===t,EE={__proto__:null,'"':/"/uy,"'":/'/uy,'"""':/"{3,5}/uy,"'''":/'{3,5}/uy};function DE(e,t){let n=TE(e,t),i=EE[n?t.repeat(3):t];e.pos+=n?3:1,n&&_E(e);let a=``;for(;;){if(a+=r(e,bE[t])[0],n&&_E(e)){a+=`
|
|
163
|
+
`;continue}G(!mE(e),e,`unterminated string`);let o=r(e,i);if(o!==null)return a+o[0].slice(3);let s=e.text[e.pos++];s===t?a+=s:s===`\\`?a+=n?wE(e):SE(e):pE(e,s,`a string`)}}var OE=/[\w-]+/uy;function kE(e){let t=e.text[e.pos];if(t===`"`||t===`'`)return G(!TE(e,t),e,`a multi-line string cannot be a key`),DE(e,t);let n=r(e,OE);return G(n!==null,e,()=>`expected a key, found ${dE(e)}`),n[0]}function AE(e){let t=[kE(e)];for(;;){if(uE(e),e.text[e.pos]!==`.`)return t;e.pos++,uE(e),t.push(kE(e)),G(t.length<=lE,e,`a key with too many parts`)}}var jE=/[\w+.:-]+/uy;function ME(e){let n=r(e,jE);G(n!==null,e,()=>`expected a value, found ${dE(e)}`);let i=n[0];if(i===`true`)return!0;if(i===`false`)return!1;let a=iE(i,e)??cE(i,e)??ZT(i,e);return G(a!==void 0,e,()=>`expected a value, found ${t(i)}`),a}function NE(e,n,r,i){G(n[r]===void 0,e,()=>`duplicate key ${t(r)}`),n[r]=i}function PE(e,t){let n=AE(e);return G(e.text[e.pos]===`=`,e,()=>`expected "=" after the key, found ${dE(e)}`),e.pos++,uE(e),{header:!1,keys:n,value:UE(e,t)}}function FE(e,t){e.pos++;let n=[];for(vE(e);e.text[e.pos]!==`]`&&(n.push(UE(e,t+1)),vE(e),e.text[e.pos]!==`]`);vE(e))G(e.text[e.pos]===`,`,e,()=>`expected "," or "]", found ${dE(e)}`),e.pos++;return e.pos++,n}var IE=e=>typeof e==`object`&&!!e&&Object.getPrototypeOf(e)===null,LE=new WeakSet;function RE(e,t,n,r,i,a){let o=t;for(let t of r.slice(0,-1)){t in o||n.add(o[t]=Object.create(null));let r=o[t];G(n.has(r),e,()=>a(t,r)),o=r}NE(e,o,r.at(-1),i)}var zE=e=>Array.isArray(e)?`an array`:IE(e)?`an inline table`:`a value`,BE=(e,n)=>`${t(e)} is ${zE(n)}, which a dotted key cannot add to`;function VE(e){uE(e),G(!mE(e)&&e.text[e.pos]!==`#`,e,`an inline table across lines is not supported`)}function HE(e,t){e.pos++;let n=Object.create(null);LE.add(n);let r=new Set;if(VE(e),e.text[e.pos]===`}`)e.pos++;else do{VE(e),G(e.text[e.pos]!==`}`,e,`a trailing comma in an inline table is not supported`);let{keys:i,value:a}=PE(e,t+1);RE(e,n,r,i,a,BE),VE(e);let o=e.text[e.pos];G(o===`,`||o===`}`,e,()=>`expected "," or "}" on the inline table's line, found ${dE(e)}`)}while(e.text[e.pos++]===`,`);return n}function UE(e,t){G(t<=lE,e,`nested too deep`);let n=e.text[e.pos];return n===`"`||n===`'`?DE(e,n):n===`[`?FE(e,t):n===`{`?HE(e,t):ME(e)}function WE(e){let t=e.text.startsWith(`[[`,e.pos);e.pos+=t?2:1,uE(e);let n=AE(e),r=t?`]]`:`]`;return G(e.text.startsWith(r,e.pos),e,()=>`expected "${r}", found ${dE(e)}`),e.pos+=r.length,{header:!0,keys:n,array:t}}function GE(e){uE(e);let t=e.text[e.pos];if(t===`[`)return WE(e);if(!(t===`#`||t===`\r`||mE(e)))return PE(e,0)}function KE(e){if(uE(e),gE(e),!(_E(e)||e.pos===e.text.length))throw G(e.text[e.pos]!==`\r`,e,fE),new WT(`expected the end of the line, found ${dE(e)}`,e.line)}function qE(e,t){return e.arrays.has(t)?`an array of tables`:Array.isArray(t)?`an array`:IE(t)?e.fixed.has(t)?`an inline table`:`a table`:`a value`}var JE=e=>t(e.join(`.`));function YE(e,n,r){let i=e.root;for(let a of r){a in i||e.implicit.add(i[a]=Object.create(null));let r=e.arrays.has(i[a])?i[a].at(-1):i[a];G(IE(r)&&!e.fixed.has(r),n,()=>`${t(a)} is ${qE(e,r)}, which a header cannot add to`),i=r}return i}function XE(e,t,n,r){e.pending.clear();let i=YE(e,t,n.slice(0,-1)),a=n.at(-1);if(r){a in i||e.arrays.add(i[a]=[]),G(e.arrays.has(i[a]),t,()=>`${JE(n)} is ${qE(e,i[a])}, not an array of tables`),i[a].push(e.current=Object.create(null));return}a in i?G(e.implicit.delete(i[a]),t,()=>`${JE(n)} is ${qE(e,i[a])} already`):i[a]=Object.create(null),e.current=i[a]}function ZE(e,n,r){return!IE(r)||e.fixed.has(r)?`${t(n)} is ${qE(e,r)}, which a dotted key cannot add to`:e.implicit.has(r)?`a dotted key through ${t(n)}, a table a header made on its way, is not supported`:`${t(n)} is a table declared elsewhere, which a dotted key cannot add to`}function QE(e,t,n,r){RE(t,e.current,e.pending,n,r,(t,n)=>ZE(e,t,n)),IE(r)&&e.fixed.add(r)}var $E={__proto__:null,"":`a byte order mark is not read`,"�":`U+FFFD is not supported: a decoder puts it where bytes are not UTF-8`};function eD(e){if(typeof e!=`string`)throw 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(`
|
|
164
|
+
`).length-1;throw new WT($E[t[0]]??`a lone surrogate is not well-formed Unicode`,n)}function tD(e){eD(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 e=GE(n);e?.header===!0?XE(r,n,e.keys,e.array):e!==void 0&&QE(r,n,e.keys,e.value),KE(n)}return t}function nD(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&&Pt(`github`,n)?n:null}function rD(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 iD=e=>e.replaceAll(`\\`,`/`).split(`/`).every(e=>e===``||e===`.`);function aD(e){if(typeof e!=`string`)return{};let t=e.replaceAll(`\\`,`/`).split(`/`);if(t.includes(`..`))return{};let n=t.filter(e=>e!==``&&e!==`.`).join(`/`);return Pt(`directory`,n)?{directory:n}:{}}function oD(e){let t=e?.repository,n=nD(typeof t==`string`?t:t?.url);if(!n)return;let r=t.directory;return typeof r!=`string`&&(r=rD(e.homepage,n),r!==void 0&&iD(r)&&(r=void 0)),{github:n,...aD(r)}}function sD(e,t){let n=e?.[t];if(typeof n!=`string`)return null;try{return t.endsWith(`.toml`)?tD(n):JSON.parse(n.replace(/^\uFEFF/u,``))}catch{return null}}function cD(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)?gi({repo:{github:n}}):null}function lD(e,t,n){let r=t?.ecosystem??e.ecosystem??`npm`,i=r===`composer`?sD(t?.files,`composer.json`):r===`cargo`?sD(t?.files,`Cargo.toml`)?.package:sD(t?.files,`package.json`),a=t?.name??e.name,o=t?.version??e.version??i?.version,s=gi(t),c=s?{github:s,directory:t.repo.directory}:r===`npm`||r===`soldeer`?oD(i):{github:[i?.repository,i?.support?.source,i?.source?.url,i?.homepage,i?.bugs].map(e=>cD(e)).find(Boolean)},l=typeof c?.directory==`string`?c.directory:void 0,u=s?qr(t.repo.commit):null;return{ecosystem:r,name:a,version:typeof o==`string`?o:void 0,github:c?.github??null,...l===void 0?{}:{directory:l},...u?{commit:u}:{},fileCount:n}}var uD=new WeakMap;function dD(e,t){let n=uD.get(e);if(n||uD.set(e,n=new Map),!n.has(t)){let r=`${t}/`,i=0,a=0;for(let[t,n]of e)t.startsWith(r)&&(i+=fa(n),a+=Yt(n));n.set(t,{bytes:i,loc:a})}return n.get(t)}var fD=new Set([`cargo`,`composer`,`soldeer`]);function pD(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(([t,r])=>typeof r==`string`&&(!n||n.has(`${e}/${t}`)));return r.length>0&&r.every(([e])=>/\.(?:php|phtml)$/iu.test(e))?`composer`:void 0}function mD(e,t=e,n=null){let r={path:``,files:new Map,dirs:new Map};for(let n=0;n<e.length;n++){let i=e[n].split(`/`),a=r,o=t[n].split(`/`);for(let[e,t]of i.slice(0,-1).entries())a.dirs.has(t)||a.dirs.set(t,{path:i.slice(0,e+1).join(`/`),sourcePath:o.slice(0,-(i.length-e-1)).join(`/`),files:new Map,dirs:new Map}),a=a.dirs.get(t);a.files.set(i.at(-1),t[n])}gD(r,n,n?new Set(t):null);let i=e=>{e.package&&(e.packageInfo=lD(e.package,n?.get(e.sourcePath),e.fileCount));for(let t of e.dirs.values())i(t)};return i(r),r}function hD(e,t=null,n=null){let r=/(?:^|\/)node_modules\//u.exec(e),i=r?r.index+ +!!r[0].startsWith(`/`):e.length,a=n?new Set(n):null;for(let[n,r]of t??[]){let t=pD(n,r,a);if(!fD.has(t)||!r.name||n===`.`||!e.startsWith(`${n}/`)&&!n.startsWith(e))continue;let o=(t===`soldeer`?/(?:^|\/)dependencies\//u:/(?:^|\/)vendor\//u).exec(`${n}/`),s=o?o.index+ +!!o[0].startsWith(`/`):n.lastIndexOf(`/`)+1;i=Math.min(i,s)}return e.slice(0,i)}function gD(e,t,n){for(let r of e.dirs.values())gD(r,t,n);e.fileCount=e.files.size+[...e.dirs.values()].reduce((e,t)=>e+t.fileCount,0);let r=t?.get(e.sourcePath),i=pD(e.sourcePath,r,n);if(fD.has(i)&&r.name&&(e.boundary=!0,e.package={name:r.name,version:r.version,ecosystem:i},e.hideSrc=e.dirs.size===1&&e.dirs.has(`src`),e.hideSrc&&(e.srcNameConflicts=new Set([...e.dirs.get(`src`).files.keys()].filter(t=>e.files.has(t))))),/(?:^|\/)dependencies$/u.test(e.path)&&[...e.dirs.values()].some(e=>e.package?.ecosystem===`soldeer`)&&(e.boundary=!0),/(?:^|\/)vendor$/u.test(e.path)){let t=new Map;for(let[n,r]of e.dirs)if(!r.package&&r.files.size===0&&r.dirs.size>0&&[...r.dirs.values()].every(e=>e.package?.ecosystem===`composer`)){e.boundary=!0;for(let[e,i]of r.dirs)t.set(`${n}/${e}`,i)}else fD.has(r.package?.ecosystem)&&(e.boundary=!0),t.set(n,r);e.dirs=t}if(/(?:^|\/)node_modules$/u.test(e.path)){e.boundary=!0;let t=new Map;for(let[n,r]of e.dirs)if(r.boundary=!0,n.startsWith(`@`)&&r.files.size===0&&[...r.dirs.keys()].every(e=>!e.startsWith(`.`)&&!e.startsWith(`@`)))for(let[e,i]of r.dirs)i.boundary=!0,i.package??={name:`${n}/${e}`},t.set(`${n}/${e}`,i);else!n.startsWith(`.`)&&!n.startsWith(`@`)&&(r.package??={name:n}),t.set(n,r);e.dirs=t}if(/(?:^|\/)node_modules\/\.pnpm$/u.test(e.path)){e.boundary=!0;let t=new Map;for(let[n,r]of e.dirs){if(r.boundary=!0,r.files.size>0||r.dirs.size!==1)continue;let i=r.dirs.get(`node_modules`);if(!i||i.files.size>0||i.dirs.size!==1)continue;let a=i.dirs.values().next().value;if(!a.package)continue;let o=`${a.package.name.replace(`/`,`+`)}@`;if(!n.startsWith(o))continue;let s=/^(\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?)([_(].*)?$/iu.exec(n.slice(o.length));if(!s)continue;a.package={...a.package,version:s[1]},e.dirs.set(n,a);let c=_D(n,a);t.has(c)||t.set(c,[]),t.get(c).push(a)}for(let e of t.values())if(!(e.length<2)){e.sort((e,t)=>e.path.localeCompare(t.path));for(let[t,n]of e.entries())n.package.variant=t+1}}return e}function _D(e,t){let n=t.package;return n?`${n.name}${n.version?`${fD.has(n.ecosystem)?` - `:`@`}${n.version}`:``}`:e}function vD(e,t,n=``,r=null){let i=t.toLowerCase(),a=(e,t,o=null)=>{let s=new Map([...e.files].filter(([e,a])=>{let s=n&&a.startsWith(n)?a.slice(n.length):a,c=o?.srcNameConflicts.has(e)?`src/${e}`:e;return(!r||r(a))&&(s.toLowerCase().includes(i)||`${t}/${c}`.toLowerCase().includes(i))})),c=new Map;for(let[n,r]of e.dirs){let i=e.hideSrc&&n===`src`,o=a(r,i?t:`${t}/${_D(n,r)}`,i?e:null);o&&c.set(n,o)}return s.size>0||c.size>0?{...e,files:s,dirs:c}:null};return i||r?a(e,``):e}function yD(e,t,n){let r=[e];if(t.hideSrc&&t.dirs.has(`src`)){let e=t.dirs.get(`src`),n=new Map(t.files);for(let[r,i]of e.files)n.set(t.srcNameConflicts.has(r)?`src/${r}`:r,i);return{names:r,node:{...t,sourcePath:e.sourcePath,files:n,dirs:e.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 i=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[e,n]=t.dirs.entries().next().value;if(n.boundary||[...r,e].join(`/`).length>i)break;r.push(e),t=n}return{names:r,node:t}}function bD(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 r=[...t.querySelectorAll(`summary, .bundle-code-tree-link`)].filter(e=>{let t=e.parentElement;return e.tagName===`SUMMARY`&&(t=t.parentElement),!t.closest(`details:not([open])`)}),i=r.indexOf(n),a=n.tagName===`SUMMARY`?n.parentElement:null,o=n;e.key===`ArrowDown`&&(o=r[Math.min(i+1,r.length-1)]),e.key===`ArrowUp`&&(o=r[Math.max(i-1,0)]),e.key===`Home`&&(o=r[0]),e.key===`End`&&(o=r.at(-1)),e.key===`ArrowRight`&&a&&(a.open?o=r[i+1]??n:n.click()),e.key===`ArrowLeft`&&(a?.open?n.click():o=(a??n).parentElement.closest(`details`)?.querySelector(`summary`)??n),o?.focus()}function xD([e,t],[n,r]){return _D(e,t).localeCompare(_D(n,r))||t.path.localeCompare(r.path)}function SD(e,t=0,n=[]){for(let[r,i]of[...e.dirs.entries()].toSorted(xD))SD(yD(r,i,t).node,t+1,n);for(let[,t]of[...e.files.entries()].toSorted(([e],[t])=>e.localeCompare(t)))n.push(t);return n}function CD(e,t,n,r,i){let a=[t,n].filter(Boolean).join(`/`),o=qr(r);return{href:`https://github.com/${e}/blob/${o??`HEAD`}/${a.split(`/`).map(encodeURIComponent).join(`/`)}`,github:e,path:a,commit:o,package:typeof i?.name==`string`&&i.name?{name:i.name,version:i.version,ecosystem:i.ecosystem}:null}}function wD(e,t,n=null){if(typeof t!=`string`)return null;let r=e?.npm?.manifest;if(r){let e=qr(r.gitHead);return r.github?.github&&e?CD(r.github.github,_i({directory:r.github.directory??``}),t,e,null):null}let i=e?.repository;if(i)return CD(i.repo,i.path,t,i.commit,null);if(e?.kind!==`stasis`)return null;let a=e.bundle,o=null;for(let[e,n]of a?.modules??[]){let r=e===`.`?t:t.startsWith(`${e}/`)?t.slice(e.length+1):null;if(r!==null&&Object.hasOwn(n.files,r)){o={dir:e,info:n,rel:r};break}}if(!o)return null;let{dir:s,info:c,rel:l}=o,u=s===`.`?void 0:pD(s,c,null)??(s.split(`/`).includes(`node_modules`)?`npm`:void 0);if(u===void 0){let e=gi(a),r=gi({repo:{github:n?.github}}),i=e??r;return i?CD(i,typeof a.repo?.directory==`string`?_i(a.repo):r?.toLowerCase()===i.toLowerCase()?_i({directory:n.directory}):``,t,e?a.repo?.commit:void 0,null):null}let d=lD({name:c.name,ecosystem:u},c,0);return d.github?CD(d.github,d.directory??``,l,d.commit,d):null}function TD(e,t=null){return k`<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??j}" data-tooltip-commit-info="${Re(t,e.commit,e.github)??j}" data-tooltip-package="${e.package?.name??j}" data-tooltip-ecosystem="${e.package?.ecosystem??j}" data-tooltip-version="${e.package?.version??j}">${O(aa)}${e.package?k`<span hidden data-tooltip-package-icon>${Tt(e.package.ecosystem)}</span>`:j}</a>`}var ED=`.bundle-code-main, .bundle-source-modal, .bundle-search-side`,DD=new Map,OD=new WeakMap,kD=null;function AD(e){if(!e){queueMicrotask(jD);return}if(jD(),DD.has(e))return;if(!e.isConnected){queueMicrotask(()=>{e.isConnected&&AD(e)});return}let t=e.querySelector(`:scope > .bundle-source-code`);if(!t)return;let n=new ResizeObserver(()=>{OD.get(e)?.width!==MD(e)&&ND(e)});n.observe(t),n.observe(e.parentElement);let r=new MutationObserver(()=>ND(e));r.observe(t,{childList:!0,subtree:!0,characterData:!0}),r.observe(e,{attributes:!0,attributeFilter:[`class`]}),DD.set(e,()=>{n.disconnect(),r.disconnect()})}function jD(){for(let[e,t]of DD)e.isConnected||(t(),DD.delete(e))}function MD(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 ND(e){let t=e.querySelector(`:scope > .bundle-source-code`),n=e.querySelector(`:scope > .bundle-source-lineno-col`),r=MD(e);if(!t||!n||!e.isConnected||r<=0)return;let i=e.classList.contains(`is-wrapped`),a=OD.get(e)?.rows??new Map,o=null;for(let e of n.children)if((!o||(a.get(e)??1)<a.get(o))&&(o=e),!a.has(e))break;let{rows:s,toggles:c}=PD(t,r,i,o?parseFloat(getComputedStyle(o).height)/(a.get(o)??1):parseFloat(getComputedStyle(t).lineHeight)),l=new Map;for(let[e,t]of s){let r=n.children[e];if(!r)continue;let i=`"${`\\A `.repeat(t-1)} "`;r.style.getPropertyValue(`--wrap-breaks`)!==i&&r.style.setProperty(`--wrap-breaks`,i),l.set(r,t)}for(let e of a.keys())l.has(e)||e.style.removeProperty(`--wrap-breaks`);OD.set(e,{rows:l,width:r});let u=e.closest(ED)?.querySelector(`[data-bundle-source-wrap]`);u&&(u.hidden=!c)}function PD(e,t,n,r){let i=getComputedStyle(e);kD??=document.createElement(`canvas`).getContext(`2d`),kD.font=`${i.fontSize} ${i.fontFamily}`;let a=t/(2*kD.measureText(`0`).width),o=[],s=null,c=null,l=0,u=0,d=()=>{l>a&&c&&o.push({line:u,first:s,last:c}),u++,l=0,s=c=null},f=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(let e=f.nextNode();e;e=f.nextNode()){let t=e.data;for(let n=0;n<t.length;){let r=t.indexOf(`
|
|
165
|
+
`,n),i=r===-1?t.length:r;if(i>n){s??={node:e,from:n,to:n+(t.codePointAt(n)>65535?2:1)};let r=i;for(;r>n&&(t[r-1]===` `||t[r-1]===` `);)r--;r>n&&(c={node:e,from:r-(r-2>=n&&t.codePointAt(r-2)>65535?2:1),to:r}),l+=i-n}if(r===-1)break;d(),n=r+1}}d();let p=new Map,m=document.createRange(),h=({node:e,from:t,to:n})=>(m.setStart(e,t),m.setEnd(e,n),m.getBoundingClientRect()),g=e.getBoundingClientRect().left+e.clientLeft+parseFloat(i.paddingLeft),_=!1;for(let{line:e,first:i,last:a}of o){let o=!!i.node.parentElement.closest(`.bundle-source-long-line`);if(n||o){let t=Math.round((h(a).top-h(i).top)/r)+1;t>1&&p.set(e,t),t>1&&!o&&(_=!0)}else!_&&h(a).right-g>t+.5&&(_=!0)}return{rows:p,toggles:_}}function FD(e){let t=e.closest(ED)?.querySelector(`.bundle-source-code-wrap`),n=t?.querySelectorAll(`.bundle-source-lineno-row`);if(!n?.length)return()=>{};let r=t.getBoundingClientRect().top,i=n.length-1,a=0;for(;a<i;){let e=a+i>>1;n[e].getBoundingClientRect().bottom<=r?a=e+1:i=e}let o=n[a],s=o.getBoundingClientRect().top-r;return()=>{o.isConnected&&(t.scrollTop+=o.getBoundingClientRect().top-r-s)}}var ID=new Set([`js`,`mjs`,`cjs`,`jsx`,`ts`,`mts`,`cts`,`tsx`,`css`,`json`]),LD=4194304;function RD(e){let t=/\.([a-z]+)$/iu.exec(e)?.[1]?.toLowerCase();return ID.has(t)?t:null}function zD(e,t,n=()=>me(e,t)){return RD(e)!==null&&fa(t)<=LD&&n().category===`minified`}var BD=e=>e.bundle??e.json??e,VD=/\\(?:x([\dA-Fa-f]{2})|u([\dA-Fa-f]{4})|u\{([\dA-Fa-f]{1,6})\}|([0-3][0-7]{0,2}|[4-7][0-7]?)|(\r\n|[\s\S]))/gu,HD={b:`\b`,f:`\f`,n:`
|
|
166
|
+
`,r:`\r`,t:` `,v:`\v`},UD=e=>e.replaceAll(VD,(e,t,n,r,i,a)=>{if(i!==void 0)return String.fromCodePoint(Number.parseInt(i,8));if(a!==void 0)return/^(?:\r\n|[\n\r\u2028\u2029])$/u.test(a)?``:HD[a]??a;let o=Number.parseInt(t??n??r,16);return o<=1114111?String.fromCodePoint(o):e}),WD={i:`ı`,k:`K`,s:`ſ`},GD=e=>new Set([e,e.toLowerCase(),e.toUpperCase(),...WD[e.toLowerCase()]??``]);function KD(e){let t=String.raw`(?=[.\\${[...e].map(e=>String.raw`\u{${e.codePointAt(0).toString(16)}}`).join(``)}])`,n=e=>String.raw`${e}(?=${t}((?:[^${e}\\\n]|\\(?:\r\n|[\s\S]))*)${e})`;return new RegExp(String.raw`(?<=(?:^|[^\\])(?:\\\\)*)(?:${n(`"`)}|${n(`'`)}|\x60(?=${t}((?:[^\x60\\]|\\[\s\S])*)\x60))`,`gu`)}function qD(e,t){return t.includes(`\\`)?e==="`"?t.replaceAll(/\\[\s\S]/gu,``).includes("${")?[]:[UD(t),t]:[UD(t)]:e==="`"&&t.includes("${")?[]:[t]}var JD=/(?<=(?<![\p{ID_Continue}$.#])(?:import|from)[ \t]*)/uy,YD=/(?<=(?<![\p{ID_Continue}$.#])import[ \t]*\([ \t]*)/uy,XD=/[ \t]*[,)]/uy,ZD=(e,t,n)=>(e.lastIndex=n,e.test(t)),QD=(e,t,n,r)=>t!=="`"&&ZD(JD,e,n)||ZD(YD,e,n)&&ZD(XD,e,r),$D=/^\.\.?(?:\/|$)/u,eO=/\.(?:json|node)$/u,tO=[`.js`,`.json`,`.node`],nO=/(?:^|\/)\.{0,2}$/u,rO=/[^/.][^/]*\.[^/]*$/u;function iO(e,t){let n=[...e];for(let e of t.split(`/`)){if(e===`..`&&n.pop()===void 0)return null;e!==`..`&&e!==`.`&&e!==``&&n.push(e)}return n}var aO=(e,t)=>t!==null&&e.every((e,n)=>n<t.length&&(t[n]===e||pO(t[n])===e))?t.slice(e.length).join(`/`):null,oO=(e,t,n)=>aO(e,iO([...e,...t===``?[]:t.split(`/`)],n)),sO=e=>new Set([e,e.replaceAll(`\\`,`/`)]),cO=(e,t,n)=>[...sO(n)].filter(e=>$D.test(e)).map(n=>oO(e,t,n)),lO=/[%?#\\\t\n\r]|[\0- ]$/u;function uO(e,t,n){if(!$D.test(n))return null;if(!lO.test(n))return oO(e,t,n);try{let r=[...e,...t===``?[]:t.split(`/`)].map(e=>`${encodeURIComponent(e)}/`).join(``),{pathname:i}=new URL(n,`file:///${r}`);return/%(?:2f|5c)/iu.test(i)?null:aO(e,iO([],decodeURIComponent(i)))}catch{return null}}var dO=/^(?:@[^/]+\/)?[^/@.][^/]*$/u,fO=e=>typeof e==`string`&&dO.test(e)&&e.split(`/`).every(e=>e!==`.`&&e!==`..`)?[`node_modules`,...e.split(`/`)].map(pO):[],pO=e=>e.toWellFormed().normalize(`NFC`).toUpperCase().toLowerCase();function mO(e){let t=new Map,n=new Map,r=(e,t,n)=>e.has(t)?e.get(t).push(n):e.set(t,[n]);for(let i of e.keys()){let e=/(?:^|\/)\.gitignore$/u.test(i)?[i,i.replace(/\.gitignore$/u,`.npmignore`)]:[i];for(let a of e)r(n,pO(a),i),r(t,a,i)}let i=e=>n.get(e)??[];return{installed:e=>e===null?[]:i(pO(e)),cased:{named:e=>t.get(e)??[],fold:e=>e},folding:{named:i,fold:pO}}}function hO(e){let t=[],n=[e];for(;n.length>0;){let e=n.pop();if(typeof e==`string`)t.push(e);else if(e&&typeof e==`object`)for(let t of Object.values(e))n.push(t)}return t}function gO(e,t){return(e&&typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).some(t)?Object.entries(e):[[`.`,e]]).flatMap(([e,t])=>hO(t).map(t=>({key:e,pattern:e.includes(`*`),target:t})))}function _O(e){let t={name:null,main:null,targets:[],exports:[],hasExports:!1,imports:[]};if(typeof e!=`string`)return t;try{let{name:t,main:n,exports:r,imports:i}=JSON.parse(e.replace(/^\uFEFF/u,``)),a=gO(r,e=>e.startsWith(`.`)).filter(({key:e,target:t})=>e.startsWith(`.`)&&t.startsWith(`./`)),o=gO(i,e=>e.startsWith(`#`)).filter(({key:e})=>e.startsWith(`#`)),s=[...a,...o.filter(({target:e})=>e.startsWith(`./`))];return{name:t,main:typeof n==`string`&&n!==``?n:null,targets:s,exports:a,hasExports:r!=null,imports:o}}catch{return t}}var vO=e=>e.replaceAll(/\/+/gu,`/`).replace(/^\//u,``);function yO(e,t,n,r,i){let a=uO(t,n,r);if(a===null||!i||!a.includes(`*`))return[a];let o=pO(a).split(`*`),s=o.length-1,c=o[0].replace(/\/+$/u,``),l=vO(o.join(`/`)),u=o.at(-1).replace(/^\/+/u,``),d=e=>e.includes(!0)&&e.includes(!1)?[``,`/`]:[``],f=d(o.slice(1).map(e=>e.startsWith(`/`))),p=d(o.slice(0,-1).map((e,t)=>e.endsWith(`/`)||t===0&&e===``)).flatMap(e=>f.map(t=>({after:t,at:vO(`${o[0]}${e}x`).length-1,before:e,length:vO(o.join(`${e}x${t}`)).length})));return e.filter(([e,t])=>!t.startsWith(c)||!t.endsWith(u)||o.at(-1)===``&&(rO.test(e)||ce.test(e))?!1:t===l||p.some(({after:e,at:n,before:r,length:i})=>{let a=(t.length-i)/s+1;if(!Number.isInteger(a)||a<=0)return!1;let c=o.join(`${r}${t.slice(n,n+a)}${e}`);return c===t||(c.includes(`//`)||c.startsWith(`/`))&&vO(c)===t})).map(([e])=>e)}var bO=65536,xO=Symbol(`every file`),SO=(e,t)=>e.flatMap(({dir:e,key:n,target:r})=>{let i=n.indexOf(`*`);if(i===-1?n!==t:i!==n.lastIndexOf(`*`)||t.length<n.length||!t.startsWith(n.slice(0,i))||!t.endsWith(n.slice(i+1)))return[];if(i===-1)return[{dir:e,target:r}];let a=t.slice(i,t.length-(n.length-i-1));return[{dir:e,target:(r.split(`*`).length-1)*a.length>bO?xO:r.replaceAll(`*`,a)}]}),CO=(e,{exports:t,hasExports:n},r)=>n?SO(t.map(e=>({...e,dir:``})),r).map(({target:t})=>t===xO?xO:uO(e,``,t)):[uO(e,``,r)];function wO({named:e,fold:t},n,r){let i=n===``?null:t(n),a=i===null?void 0:r.find(t=>e(`${i}${t}`).length>0);return a===void 0?null:`${n}${a}`}var TO=(e,t)=>wO(e,t===``?`index`:`${t}/index`,tO);function EO(e,t,n,r,i){if(r===null)return[];let a=i?null:wO(t,r,[``,...tO]);if(a!==null)return[a];let o=t.named(r===``?`package.json`:`${t.fold(r)}/package.json`).map(t=>_O(e.get(t)).main).filter(e=>e!==null).flatMap(e=>[...sO(e)].map(e=>oO(n,r,e))).filter(e=>e!==null).map(e=>wO(t,e,[``,...tO])??TO(t,e)).filter(e=>e!==null);return o.length>0?o:[TO(t,r)].filter(e=>e!==null)}var DO=e=>[...e].filter(([e])=>/(?:^|\/)package\.json$/iu.test(e)).flatMap(([e,t])=>_O(t).imports.map(({key:t,target:n})=>({dir:e.slice(0,-13),key:t,target:n}))),OO=64,kO=new WeakMap;function AO(e){let t=kO.get(BD(e));if(t)return t;t=new Set;let n=Vt(e),{installed:r,cased:i,folding:a}=mO(n),o=[],s=_O(n.get(n.has(`package.json`)?`package.json`:r(`package.json`)[0])),c=fO(s.name),l=(e,t)=>!(t===`require`?eO:rO).test(e),u=new Set,d=(e,i)=>{let a=e===null?null:`${i}\0${l(e,i)}\0${pO(e)}`;if(!(a===null||u.has(a))){u.add(a);for(let a of r(e)){let r=n.get(a);t.has(a)||kt(a,r)||r?.runnable===!1||!l(e,i)&&!l(a,i)||(t.add(a),typeof r==`string`&&o.push(a))}}},f=(e,t)=>{let r=EO(n,a,c,e,t);if(r.length>0)for(let a of[...r,...EO(n,i,c,e,t)])d(a,`require`)};f(``,!0);let p=[...n].filter(([e])=>/(?:^|\/)package\.json$/iu.test(e)).flatMap(([e,t])=>_O(t).targets.map(({pattern:t,target:n})=>[e.slice(0,-13),n,t&&n.includes(`*`)]));if(p.filter(([,,e])=>e).length>OO)for(let e of n.keys())d(e,`require`);else{let e=p.some(([,,e])=>e)?[...n.keys()].map(e=>[e,pO(e)]):[];for(let[t,n,r]of p)for(let i of yO(e,c,t,n,r))d(i,`require`)}for(let[e,t]of n)kt(e,t)&&o.push(e);let m=DO(n),h=e=>c.length>0&&e.length>s.name.length&&`/\\`.includes(e[s.name.length])&&pO(e.slice(0,s.name.length))===c.slice(1).join(`/`),g=new Set,_=KD([...c.length>0?GD(s.name[0]):[],...m.length>0?[`#`]:[]]),v=e=>CO(c,s,e),y=!1,b=(e,t)=>{if(e!==xO)return d(e,t);if(!y)for(let e of n.keys())d(e,`require`);y=!0},ee=(e,t)=>{if(!g.has(`${t}\0#\0${e}`)){g.add(`${t}\0#\0${e}`);for(let{dir:n,target:r}of SO(m,e)){let e=r===xO?[xO]:r.startsWith(`./`)?[uO(c,n,r)]:h(r)?v(`./${r.slice(s.name.length+1)}`):c.length>0&&r===s.name?v(`.`):[];for(let n of e)b(n,t)}}},te=(e,t,n)=>{if(e.startsWith(`#`))return ee(e,n()?`import`:`require`);let[r,i]=h(e)?[``,`./${e.slice(s.name.length+1)}`]:[t,e];if(!$D.test(i.replaceAll(`\\`,`/`)))return;let a=n()?`import`:`require`,o=`${a}\0${r}\0${i}`;if(!g.has(o)){if(g.add(o),h(e))for(let e of v(i))b(e,a);if(!(h(e)&&s.hasExports)){if(a===`require`)for(let e of cO(c,r,i))f(e,nO.test(i));d(uO(c,r,i),`import`)}}};for(let e=0;e<o.length;e++){let t=o[e],r=n.get(t),i=t.includes(`/`)?t.slice(0,t.lastIndexOf(`/`)):``;for(let{1:e,2:t,3:n,index:a}of r.matchAll(_)){let o=e??t??n,s=r[a];for(let e of qD(s,o))te(e,i,()=>QD(r,s,a,a+o.length+2))}}return kO.set(BD(e),t),t}var jO=new WeakMap;function MO(e,t){let n=jO.get(BD(e));if(n||jO.set(BD(e),n=new Map),!n.has(t)){let r=Vt(e).get(t);n.set(t,Ne(t,typeof r==`string`?r:null,Ht(e).get(t),AO(e).has(t)))}return n.get(t)}var NO=(e,t=e=>e)=>e?new Map(Object.entries(e).map(([e,n])=>[t(e),n])):null,PO=({stamps:e,readability:t,runsCode:n,exfiltration:r,hosts:i})=>({stamps:e,runsCode:NO(n),exfiltration:NO(r),hosts:NO(i),readability:t&&{...t,controls:NO(t.controls,Number)}});function FO(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(e=>({...e,found:NO(e.found),...e.added?{added:NO(e.added)}:{}}))};case`popularity`:return{...e,tier:e.tier??1/0};default:return e}}var IO=e=>({oldVersion:e.oldVersion??null,findings:e.findings.map(FO),files:new Map(Object.entries(e.files).map(([e,t])=>[e,PO(t)])),dependencies:e.dependencies,score:e.score??null}),LO=e=>e?.npm?e.risk?.()?.files??null:null,RO={stamps:[],readability:null,runsCode:null,exfiltration:null,hosts:null};function zO(e,t){return e?.npm?LO(e)?.get(t)??RO:MO(e,t)}var BO=({names:e,loop:t})=>[e>=ue&&`${e.toLocaleString(`en`)}${e===fe?` or more`:``} names such as _0x1a2b`,t&&`while(!![])`].filter(Boolean).join(`, and `);function VO(e,t,n){return n===Vt(e).get(t)&&typeof n==`string`?zO(e,t).readability:UO(e,t,n)}var HO=new WeakMap;function UO(e,t,n){let r=HO.get(e);r||HO.set(e,r=new Map);let i=r.get(t);if(i?.text===n)return i.read;let a=me(t,n);return r.set(t,{text:n,read:a}),a}function WO(e,t){let n=Ce(e,t),r=n.slice(0,6).map(([e,t])=>`U+${e.toString(16).toUpperCase().padStart(4,`0`)} \xD7${t.toLocaleString(`en`)}`);return`${xe.get(t).name}: ${r.join(`, `)}${n.length>6?`, and ${n.length-6} more`:``}`}var GO=({longLines:e,longest:t})=>`${e.toLocaleString(`en`)} ${e===1?`line`:`lines`} over ${oe} characters, the longest ${t.toLocaleString(`en`)}`;function KO(e){let{average:t,category:n,longLines:r,inlineMap:i}=e,a=()=>GO(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, ${Wr(i)}${r>0?`; minified: ${a()}`:``}`;case`minified`:return`Minified: ${r>0?a():`its lines of code ${t.toLocaleString(`en`)} characters long on average, strings and comments aside, with few spaces`}`;default:return j}}function qO(e,t=!1){if(!e)return j;let n=ge(e),{tag:r,short:i,mark:a}=xe.get(n);return k`<span class="${`npm-encoding-tag${a?` is-${a}`:``}`}" data-tooltip="${KO({...e,category:n})}">${t?i??r:r}</span>`}function JO(e){let t=e?.kind;return t!==`ascii`&&t!==`utf8`||ge(e)===t?j:qO({...e,category:t})}function YO(e,t=null){let n=e?ve(e).filter(n=>[`controls`,`invisible`,`long`].includes(n)&&(t===null||t.includes(ye(e,n)))):[];if(n.length===0)return j;let r=t=>t===`long`?`${GO(e)}${e.category===`long`?`, among readable ones`:``}`:WO(e.controls,t);return n.map(t=>k`<span class="${`npm-flag-tag is-${ye(e,t)}`}" data-tooltip="${r(t)}">${xe.get(t).tag}</span>`)}function XO(e){if(!e)return j;let t=ge(e);return t===`ascii`||t===`map`?YO(e):ZO(e)}var ZO=e=>e?k`${YO(e)}${qO(e)}`:j;function QO(e,t,n,r=!0){let{stamps:i,readability:a}=zO(e,t),o=r&&i.some(({name:e})=>e===`Large`),s=a?.obfuscation;return!o&&!s?j:k`${o?k`<span class="npm-flag-tag is-notice" data-tooltip="${`A code file of ${Wr(n)}, 256 KiB or more`}">Large</span>`:j}${s?k`<span class="npm-flag-tag is-warn" data-tooltip="${`An obfuscator's fingerprint: ${BO(s)}`}">Obfuscated</span>`:j}`}var $O=k`<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>`,ek=e=>e?.status===`loading`?`Pretty-printing…`:e?.status===`error`?`Couldn't pretty-print${e.of>1?` ${e.failed} of ${e.of} files`:``}: ${e.message}`:`Pretty-print`,tk=8,nk=4,rk=2,ik=30,ak=2,ok=`The server's copy is of another file than the one open.`,sk=`The server didn't pretty-print this file.`,ck=e=>!(e>=400&&e<500&&e!==429),lk=5e3,uk=3e5,dk=new Map;function fk(e,t,n,r){if(!t?.retry){dk.delete(e);return}let i=dk.get(e)??0;dk.set(e,i+1),setTimeout(()=>{n()&&r()?.()},Math.min(lk*2**i,uk))?.unref?.()}var pk=new Map,mk=0,hk=()=>mk,gk=new Map,_k=(e,t)=>`${e.integrity}\0${t}`,vk=new Map,yk=new Map,bk=new WeakMap;function xk(e,t,n,r){if(!(t?.managedId||t?.npm)||typeof r!=`string`)return!1;let i=bk.get(e);return i||bk.set(e,i=new Map),i.has(n)||i.set(n,zD(n,r,()=>UO(e,n,r))),i.get(n)}var Sk=!1,Ck=new Set,wk=new Set;function Tk(e,t){pk.delete(e),pk.set(e,t),Sk||(Sk=!0,wk=Ck,Ck=new Set,setTimeout(()=>{Sk=!1})),Ck.add(e),Ek()}function Ek(){for(let[e,t]of pk){if(pk.size<=tk)break;Ck.has(e)||wk.has(e)||t.status===`loading`||(pk.delete(e),gk.delete(e))}}var Dk=0,Ok=[];async function kk(e){Dk<ak?Dk++:await new Promise(e=>{Ok.push(e)});try{return await e()}finally{let e=Ok.shift();e?e():Dk--}}async function Ak(e,t,n,r,i,a){let o;try{let e=a??await Ei(i),{text:t,source:s}=await kk(()=>n.npm?zb(n.npm.name,n.npm.version,r,e):Lb(n.managedId,r,e));o=s===e&&typeof t==`string`?{status:`ready`,text:t,hash:await Ei(t)}:{status:`error`,message:ok,retry:!0}}catch(n){if(n?.name===`AbortError`){pk.get(e)===t&&(pk.delete(e),gk.delete(e));return}o={status:`error`,message:n?.message??String(n),retry:ck(n?.status)}}if(pk.get(e)!==t)return;pk.set(e,o),mk++;let s=gk.get(e),c=o.status===`error`&&o.retry;c||gk.delete(e),fk(`file ${e}`,c?o:null,()=>pk.get(e)===o&&pk.delete(e),()=>gk.get(e)),s?.(),Ek()}function jk(){for(let[e,t]of vk){if(vk.size<=nk)break;t.rest&&vk.delete(e)}}function Mk(e,t){let n=e.notifiers.get(t);e.notifiers.delete(t),n?.()}async function Nk(e,t,n,{npm:r}){let i=Vt(n),a;try{await Rb(r.name,r.version,async({path:e,source:n,text:r,status:a,message:o})=>{let s=i.get(e),c=typeof r==`string`&&typeof s==`string`&&n===await Ei(s)?{status:`ready`,text:r,hash:await Ei(r)}:typeof r==`string`?{status:`error`,message:ok,retry:!0}:{status:`error`,message:o,retry:ck(a)};t.copies.set(e,c),mk++,Mk(t,e)}),a={status:`error`,message:sk,retry:!1}}catch(n){if(n?.name===`AbortError`){vk.get(e)===t&&vk.delete(e);return}a={status:`error`,message:n?.message??String(n),retry:ck(n?.status)}}t.rest=a,mk++;for(let e of[...t.notifiers.keys()])Mk(t,e);jk()}function Pk(e,t,n,r,i){let a=e.integrity,o=vk.get(a);return vk.delete(a),o||(o={copies:new Map,notifiers:new Map,rest:null},Nk(a,o,e,t)),vk.set(a,o),jk(),r===Vt(e).get(n)?(o.copies.get(n)??o.rest)||(o.notifiers.set(n,i),{status:`loading`}):{status:`error`,message:ok,retry:!1}}function Fk(e,t,n,r,i){return P.bundleSourcePretty?t.npm?Pk(e,t,n,r,i):Ik(e,n,r,i,t):null}function Ik(e,t,n,r,i=e){let a=_k(e,t),o=pk.get(a),s=o??{status:`loading`};return Tk(a,s),(s.status===`loading`||s.retry)&&gk.set(a,r),o||Ak(a,s,i,t,n,e.fileHashes?.get(t)),s}var Lk=new Set;function Rk(e){e&&(Lk.size===0&&setTimeout(()=>{let e=[...Lk];Lk.clear();for(let t of e)t()},ik),Lk.add(e))}function zk(){for(let[e,t]of yk){if(yk.size<=rk)break;t.ended&&yk.delete(e)}}async function Bk(e,t,n,r){let i={base:n,other:r},a=null;try{let e=async({side:e,path:n,source:r,text:a,status:o,message:s})=>{if(typeof a!=`string`&&ck(o))return;let c=Object.hasOwn(i,e)?i[e]:null,l=c&&Vt(c).get(n),u=typeof a==`string`&&typeof l==`string`&&r===(c.fileHashes?.get(n)??await Ei(l));t.copies.set(`${e}\0${n}`,u?{status:`ready`,text:a,hash:await Ei(a)}:typeof a==`string`?{status:`error`,message:ok,retry:!0}:{status:`error`,message:s,retry:ck(o)}),mk++,Rk(t.notify)};await(n.npm?Vb(n.npm.name,n.npm.version,r.npm.version,e):Bb(n.managedId,r.managedId,e))}catch(n){if(n?.name===`AbortError`){yk.get(e)===t&&yk.delete(e);return}a={status:`error`,message:n?.message??String(n),retry:ck(n?.status)}}Object.assign(t,{ended:!0,rest:a}),mk++,fk(`comparison ${e}`,a,()=>yk.get(e)===t&&yk.delete(e),()=>t.notify),Rk(t.notify),zk()}function Vk(e,t,n,r,i,a){let o=`${e.integrity}\0${t.integrity}`,s=yk.get(o);yk.delete(o),s||(s={copies:new Map,notify:null,ended:!1,rest:null},Bk(o,s,e,t)),yk.set(o,s),zk();let c=n===`base`?e:t;return i===Vt(c).get(r)?(s.notify=a,s.copies.get(`${n}\0${r}`)??s.rest??(s.ended?Ik(c,r,i,a):{status:`loading`})):{status:`error`,message:ok,retry:!1}}function Hk(){if(P.bundleSourcePretty=!P.bundleSourcePretty,!P.bundleSourcePretty)return;let e=e=>e.status===`error`&&e.retry;for(let[t,n]of pk)e(n)&&pk.delete(t);for(let[t,n]of vk)n.rest&&(e(n.rest)||[...n.copies.values()].some(e))&&vk.delete(t);for(let[t,n]of yk)n.ended&&(n.rest?e(n.rest):[...n.copies.values()].some(e))&&yk.delete(t)}function Uk(e,t,n){return e?.bundle===t&&e.files[e.at]===n?e:{bundle:t,files:n?[n]:[],at:0}}function Wk(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 Gk(e,t){return{...e,at:Math.max(0,Math.min(e.at+t,e.files.length-1))}}function Kk(e){let t=e.slice(e.lastIndexOf(`/`)+1);return t===`package-lock.json`||t===`npm-shrinkwrap.json`?`npm`:t===`pnpm-lock.yaml`||/^pnpm-lock\..+\.yaml$/u.test(t)?`pnpm`:t===`yarn.lock`?`yarn`:null}var qk=4,Jk=new Map;function Yk(e,t,n,r,i){if(!P.bundleSourceLockfile)return null;let a=Kk(t);if(a===null)return null;let o=`${e.integrity}\0${t}`,s=Jk.get(o)??{status:`loading`};Jk.delete(o),Jk.set(o,s);for(let e of Jk.keys())Jk.size>qk&&Jk.delete(e);if(s.status===`loading`&&!s.started){s.started=!0;let e=r.get(`${t.slice(0,t.lastIndexOf(`/`)+1)}package.json`);import(`./chunk-IZ7POWI3.js`).then(({readLockfile:t})=>Object.assign(s,{status:`ready`,lockfile:{id:o,...t(a,n,{manifest:e})}})).catch(e=>Object.assign(s,{status:`error`,message:e instanceof Error?e.message:String(e)})).finally(i)}return s}function Xk(){P.bundleSourceLockfile=!P.bundleSourceLockfile;for(let[e,t]of Jk)t.status===`error`&&Jk.delete(e)}var Zk=e=>e?.status===`loading`?`Reading the lockfile…`:e?.status===`error`?`Couldn't read the lockfile: ${e.message}`:`View lockfile`,Qk=e=>`link:${e}`,$k=e=>e===`.`?`__own__`:e;function eA(e){let t=Object.entries(e?.importers??{}),n=Object.entries(e?.packages??{}),r=new Map([...t.map(([e])=>[Qk(e),$k(e)]),...n.map(([e,t])=>[e,t.name])]),i=new Map([...t.map(([e,t])=>[Qk(e),t]),...n]),a=e=>r.has(e)?e:e.startsWith(`link:`)&&r.has(e.slice(5))?e.slice(5):null,o=Object.create(null);for(let[e,{dependencies:t}]of i)o[e]={imports:[...new Set(t.map(a).filter(t=>t!==null&&t!==e))]};let s=[...i.keys()];if(s.length===0)return null;let c=[...new Set(t.map(([e])=>$k(e)))];return{treeData:o,files:s,ownCounts:new Map,transitiveCounts:null,severitySets:new Map,colorSets:new Map,fileFindings:new Map,options:{pkgOf:e=>r.get(e),packageInfoOf:e=>({version:i.get(e).version})},packagesOnly:!0,supportsLayers:!0,layerRoots:{roots:c,appImports:[]},ownSourcePackages:new Set(c),entryPackages:new Set(c),ownSourceFiles:new Set(t.map(([e])=>Qk(e))),hasIssues:!1,issuesShown:!1,viewId:e.id??null}}var tA=[`graph`,`matrix`,`dependencies`],nA=class extends _a{static properties={lockfile:{attribute:!1}};static styles=ha`:host{display:flex;flex-direction:column;min-height:0}.slot{display:flex;flex-direction:column;flex:1;min-height:0}graph-layout{flex:1;min-height:0;border:none;border-radius:0}.empty{color:var(--muted)}`;constructor(){super(),this.lockfile=null,this._prep=null,this._graphState=null,this._attachment=0,this._bundleLayout=null,this.addEventListener(`click`,e=>this._click(e)),this.addEventListener(`input`,e=>this._input(e))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this._prep&&this._attach()}disconnectedCallback(){super.disconnectedCallback(),this._detach()}willUpdate(e){e.has(`lockfile`)&&(this._prep=eA(this.lockfile),this._prep||this._detach(),w.selected=null,w.solo=null,w.focusedPkg=null)}render(){return this.lockfile?this._prep?k`<div class="slot"></div>`:k`<p class="empty">No packages.</p>`:null}updated(e){e.has(`lockfile`)&&this._prep&&this._attach()}_detach(){this._attachment++,this._graphState&&w.graphState===this._graphState&&sr(),this._graphState=null,this._bundleLayout!==null&&(w.bundleLayout=this._bundleLayout),this._bundleLayout=null}async _attach(){this._bundleLayout??=w.bundleLayout,w.bundleLayout=w.lockfileLayout;let e=this.renderRoot.querySelector(`.slot`);if(!e)return;let t=++this._attachment;if(await vT().catch(()=>{}),t!==this._attachment||!this.isConnected)return;let n={showBundleLayouts:!0,layouts:tA,hideAllFiles:!0};await yT(e,this._prep,n,()=>this._refreshSidebar(),()=>this._refreshTopPkgs()),this._graphState=w.graphState}get _host(){return this.renderRoot.querySelector(`graph-layout`)}_refreshSidebar(){_T()?.refreshSidebar(this._prep,{},this._host)}_refreshTopPkgs(){_T()?.refreshTopPkgs(this._prep,this._host)}_click(e){let t=t=>e.composedPath().find(e=>e.matches?.(t)),n=t(`[data-g2-layout]`)?.dataset.g2Layout,r=t(`[data-g2-pkg]`)?.dataset.g2Pkg;if(n!==void 0)tA.includes(n)&&n!==w.bundleLayout&&(w.lockfileLayout=w.bundleLayout=n,w.selected=null,w.solo=null,w.layoutCache=null,sr(),this._attach());else if(r!==void 0)w.solo=w.solo===r?null:r,this._refreshSidebar(),this._refreshTopPkgs(),w.graphState?.requestDraw?.();else if(t(`#g2-path-filter-clear`)){w.pathFilter=``;let e=this._host?.shadowRoot?.querySelector(`#g2-path-filter`);e&&(e.value=``),w.graphState?.requestDraw?.()}else if(t(`#g2-fullscreen`))document.body.classList.toggle(`report-fullscreen`);else return;e.stopPropagation()}_input(e){let t=e.composedPath()[0];t?.id===`g2-path-filter`&&(w.pathFilter=t.value,w.graphState?.requestDraw?.(),e.stopPropagation())}};customElements.define(`lockfile-graph`,nA);function rA({title:e,count:t,extra:n=j,tools:r=j,body:i,list:a=!1,className:o=``}){return k`<section class="${`bundles-overview-col ${o}`}"><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${a?` bundles-overview-col-body--list`:``}`}">${i}</div></section>`}var iA=1024,aA=1024*iA,oA=[`tiny`,`small`,`medium`,`large`,`gigantic`],sA={dependencies:[1,4,11,26],files:[3,24,192,1536],lines:[400,3200,25600,204800],unpacked:[16*iA,128*iA,aA,8*aA]};function cA(e,t){let n=sA[e].findIndex(e=>t<e);return oA[n===-1?oA.length-1:n]}function lA(e,t,n){return k`<span class="${`npm-sized is-${cA(e,t)}`}">${n}</span>`}var uA=[`preinstall`,`install`,`postinstall`];function dA(e,t=!1){let n={...e};return!n.preinstall&&!n.install&&t&&(n.install=`node-gyp rebuild`),uA.filter(e=>typeof n[e]==`string`).map(e=>[e,n[e]])}function fA(e,t=[]){return dA(e?.installScripts,!!(t&&(t instanceof Set?t.has(`binding.gyp`):t.includes(`binding.gyp`))))}function pA(e,t=!1){let n=null;try{n=typeof e==`string`?JSON.parse(e.replace(/^\uFEFF/u,``)):null}catch{}return dA(n&&typeof n==`object`&&n.scripts&&typeof n.scripts==`object`?n.scripts:{},t)}var mA=12096e5,hA=(e,{minimumReleaseAge:t=mA,now:n=Date.now()}={})=>t>0&&typeof e==`string`&&n-Date.parse(e)<t,gA=72,_A={top:6,right:0,bottom:18,left:40},vA=24,yA=4,bA=new Intl.NumberFormat(`en`,{notation:`compact`,maximumFractionDigits:1}),xA=new Intl.NumberFormat(`en`),SA=e=>new Intl.DateTimeFormat(`en`,{...e,timeZone:`UTC`}).format,CA=SA({month:`short`,day:`numeric`}),wA=SA({month:`short`,day:`numeric`,year:`numeric`}),TA=SA({month:`short`,year:`numeric`}),EA=SA({month:`long`,year:`numeric`}),DA=e=>e===1/0?`unpopular`:`top ${e.toLocaleString(`en`)}`,OA=(e,t)=>{let n=t&&Dt(e);return k`<dd class="${`npm-downloads-tier ${n?`is-mid`:Et(e)}`}" data-tooltip="${n?t:j}">${DA(e)}</dd>`},kA={week:{label:`Weekly`,of:e=>bt(e).slice(-52),name:e=>`${CA(e.from)} \u2013 ${wA(e.to)}`},month:{label:`Monthly`,of:St,name:e=>EA(e.from)}},AA=(e,t)=>`${xA.format(e)} downloads, ${t}`;function jA(e){let t=St(e).at(-1);return t?MA(t):null}var MA=({total:e,from:t})=>({total:e,month:EA(t)});function NA(e){if(!(e>0))return 1;let t=10**Math.floor(Math.log10(e));return[1,2,2.5,5,10].map(e=>e*t).find(t=>t>=e)}var PA=class extends _a{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(([e])=>{this._width=Math.floor(e.contentRect.width)})}connectedCallback(){super.connectedCallback(),this._resize.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this._resize.disconnect()}_key(e){let t=this._periods.length-1,n={ArrowLeft:-1,ArrowRight:1,Home:-t-1,End:t+1};e.key in n&&(e.preventDefault(),this._at=Math.min(t,Math.max(0,(this._at??t)+n[e.key])))}willUpdate(e){let t=kA[this._unit],{downloads:n}=this;if((e.has(`downloads`)||e.has(`_unit`))&&(this._periods=t.of(n)),e.has(`downloads`)){this._latest=n==null?null:Object.fromEntries(Object.entries(kA).map(([e,{of:t,name:r}])=>{let i=t(n).at(-1);return[e,{total:i?.total??0,tooltip:i&&AA(i.total,r(i))}]})),this._tier=wt(n);let e=n?.days.slice(-365),t=e?.reduce((e,t)=>e+t,0);this._year=n==null?null:{total:t,tooltip:AA(t,`${wA(vt(n.start,n.days.length-e.length))} \u2013 ${wA(Date.parse(n.end))}`)}}(e.has(`downloads`)||e.has(`_unit`)||e.has(`_width`))&&(this._shape=this._shapeOf(t))}_shapeOf(e){let t=this._periods,n=this._width;if(t.length===0||n<=_A.left+_A.right)return null;let r=n-_A.left-_A.right,i=gA-_A.bottom,a=NA(Math.max(...t.map(e=>e.total))),o=e=>i-e/a*(i-_A.top),s=e=>e.toFixed(1),c=this._unit===`month`,l=r/(c?t.length:Math.max(t.length-1,1)),u=c?e=>_A.left+(e+.5)*l:e=>_A.left+(t.length>1?e*l:r/2),d=t.length-1,f=e=>Math.min(d,Math.max(0,(c?Math.floor:Math.round)((e-_A.left)/l))),p=TA(t[0].from),m=t.at(-1),h;if(c){let e=Math.min(vA,l*.7)/2;h={bars:t.map(({total:t},n)=>{let[r,a,c]=[u(n)-e,u(n)+e,o(t)],l=Math.min(yA,e,i-c);return`M${s(r)},${i}V${s(c+l)}Q${s(r)},${s(c)} ${s(r+l)},${s(c)}H${s(a-l)}Q${s(a)},${s(c)} ${s(a)},${s(c+l)}V${i}Z`})}}else{let e=t.map((e,t)=>`${t===0?`M`:`L`}${s(u(t))},${s(o(e.total))}`).join(``);h={line:e,area:`${e}L${s(u(d))},${i}L${s(u(0))},${i}Z`}}return{x:u,y:o,bottom:i,indexAt:f,first:p,last:TA(m.to),...h,ticks:[[0,bA.format(0)],[a,bA.format(a)]],label:`${e.label} downloads over the last year, from ${p} to ${TA(m.to)}; the latest ${this._unit}: ${AA(m.total,e.name(m))}.`}}_stat(e,t,n){return k`<div class="npm-stat"><dt class="sr-only">${e}</dt><dd data-tooltip="${t?.tooltip||j}">${this._figure(t,n)}</dd></div>`}_figure(e,t){return k`${e?bA.format(e.total):this.status===`loading`?`…`:`—`}<span class="npm-stat-per">/${t}</span>`}_latestStat(){let e=this._latest?.[this._unit];return k`<div class="npm-stat"><dt class="sr-only">${kA[this._unit].label} downloads</dt><dd class="npm-stat-units" data-tooltip="${e?.tooltip||j}">${Object.keys(kA).map(e=>k`<span class="${e===this._unit?``:`is-held`}" aria-hidden="${e===this._unit?j:`true`}">${this._figure(this._latest?.[e],e)}</span>`)}</dd></div>`}_controls(e){return k`<div class="npm-downloads-controls"><span class="bundles-overview-sort" role="group" aria-label="Downloads by">${Object.entries(kA).map(([e,{label:t}])=>k`<button type="button" aria-pressed="${String(this._unit===e)}" @click="${()=>{this._unit=e,this._at=null}}">${t}</button>`)} </span><span class="npm-downloads-readout" aria-live="polite">${e?k`<strong>${xA.format(e.total)}</strong> <span>${kA[this._unit].name(e)}</span>`:j}</span></div>`}render(){let e=this.downloads!=null||this.status!==`ready`,t=this._at===null?null:this._periods[this._at]??null;return k`<div class="npm-downloads-head"><dl class="npm-stats">${this._latestStat()} ${this._stat(`Downloads, last 12 months`,this._year,`year`)} ${this._tier?k`<div class="npm-stat"><dt class="sr-only">Popularity</dt>${OA(this._tier,this.known)}</div>`:j}</dl>${e?this._controls(t):j}</div>${e?this._plot(t):j}`}_plot(e){let t=this._shape;if(!t)return k`<div class="npm-downloads-plot" style="${E({height:`${gA}px`})}"></div>`;let n=this._width;return k`<div class="npm-downloads-plot" style="${E({height:`${gA}px`})}" tabindex="0" role="img" aria-label="${t.label}" @pointermove="${e=>{this._at=t.indexAt(e.offsetX)}}" @pointerleave="${()=>{this._at=null}}" @keydown="${e=>this._key(e)}" @blur="${()=>{this._at=null}}"><svg width="${n}" height="${gA}" viewBox="0 0 ${n} ${gA}" aria-hidden="true">${t.ticks.map(([e,r])=>A`<line class="npm-downloads-grid" x1=${_A.left} x2=${n-_A.right} y1=${t.y(e)} y2=${t.y(e)}></line>
|
|
167
|
+
<text class="npm-downloads-tick" x=${_A.left-6} y=${t.y(e)} dy="0.32em" text-anchor="end">${r}</text>`)} ${t.bars?t.bars.map((e,t)=>A`<path class=${`npm-downloads-bar${t===this._at?` is-at`:``}`} d=${e}></path>`):A`<path class="npm-downloads-area" d=${t.area}></path><path class="npm-downloads-line" d=${t.line}></path>`}<text class="npm-downloads-tick" x="${_A.left}" y="${gA-4}">${t.first}</text><text class="npm-downloads-tick" x="${n-_A.right}" y="${gA-4}" text-anchor="end">${t.last}</text>${e&&!t.bars?A`<line class="npm-downloads-crosshair" x1=${t.x(this._at)} x2=${t.x(this._at)} y1=${_A.top} y2=${t.bottom}></line>
|
|
168
|
+
<circle class="npm-downloads-dot" cx=${t.x(this._at)} cy=${t.y(e.total)} r="4"></circle>`:j}</svg></div>`}};customElements.get(`npm-downloads-chart`)||customElements.define(`npm-downloads-chart`,PA);function FA(e,t){let n=IA(e);return[n,`${n}.js`,`${n}.cjs`,`${n}.mjs`,`${n}/index.js`].find(e=>e&&t?.has(e))}var IA=e=>e.replace(/^(?:\.\/)+/u,``).replace(/\/+$/u,``),LA=/^licen[cs]e(?:-[\w.]+)?(?:\.(?:md|txt))?$/iu;function RA(e,t){let n=t.filter(e=>LA.test(e)),r=e=>{let t=e.toLowerCase().match(/^[a-z]+/u)?.[0]??``;return n.find(e=>{let n=e.toLowerCase().match(/^licen[cs]e-([a-z]+)/u)?.[1];return n!==void 0&&t!==``&&(n.startsWith(t)||t.startsWith(n))})??(n.length===1?n[0]:null)};return e.split(/(\s+(?:OR|AND|WITH)\s+|[()])/u).filter(Boolean).map(e=>({text:e,file:/^[\w.+-]+$/u.test(e)&&!/^(?:OR|AND|WITH)$/u.test(e)?r(e):null}))}var zA=e=>e?.replace(/\.git$/u,``),BA=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,i,a]=e.split(`/`,5);return(!i||i===`tree`)&&n&&zA(r)?[n,zA(r),i?a: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,i]=e.split(`/`,4);return i!==`get`&&n&&zA(r)?[n,zA(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))&&zA(n.slice(r+1))?[n.slice(0,r),zA(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,i]=e.split(`/`,4);return i!==`raw`&&(n||r)?[r?n:null,zA(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,i]=e.split(`/`,4);return i!==`archive`&&n&&zA(r)?[n,zA(r),t.slice(1)]:null}}]]),VA=new Map([...BA.values()].map(e=>[e.domain,e])),HA=new Set([`git+ssh:`,`ssh:`,`git+https:`,`git:`,`http:`,`https:`,`git+http:`,...[...BA.keys()].map(e=>`${e}:`)]);function UA(e){let t=e.indexOf(`#`),n=e.indexOf(`/`);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(e=>e>-1&&!(t>-1&&e>t))}var WA=e=>{try{return new URL(e)}catch{return null}};function GA(e){let t=e.indexOf(`@`),n=e.indexOf(`:`),r=HA.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(WA(r))return WA(r);let i=e=>{let t=r.indexOf(`#`);return r.lastIndexOf(e,t>-1?t:1/0)},a=i(`:`)>i(`@`)?`${r.slice(0,i(`:`))}/${r.slice(i(`:`)+1)}`:r;return a.lastIndexOf(`:`,a.indexOf(`#`)>-1?a.indexOf(`#`):1/0)===-1&&!a.includes(`//`)&&(a=`git+ssh://${a}`),WA(a)}function KA(e){if(!e)return null;let t=GA(UA(e)?`github:${e}`:e);if(!t)return null;let n=BA.get(t.protocol.slice(0,-1)),r=n??VA.get(t.hostname.replace(/^www\./u,``)),i=n?[t.pathname.replace(/^\/?[^@]*@|^\//u,``),t.hash.slice(1)]:r?.protocols.includes(t.protocol)&&r.repo(t);try{return i?(i.forEach(e=>e&&decodeURIComponent(e)),r):null}catch{return null}}function qA(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=KA(t);if(n)return n.label;if(/^(?:git\+)?[a-z]+:/iu.test(t)){let e=/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#.*)?$/iu.exec(t);if(t.startsWith(`git+ssh:`)&&e&&!/:\d+(?:\/|$)/u.test(e[1]))return`git`;let n=WA(t)?.protocol;return/^(?:git|git\+(?:https?|rsync|ftp|file|ssh)):$/u.test(n)?`git`:/^https?:$/u.test(n)?`URL`:null}return/\/|[.](?:tgz|tar\.gz|tar)$/iu.test(t)?`path`:`registry`}function JA(e){let[,t,n=``]=/^npm:((?:@[^/@]+\/)?[^/@]+)(?:@(.*))?$/iu.exec(String(e??``).trim())??[];return t?{name:t,spec:n}:null}var YA=e=>qA(e)===`registry`,XA=[[`dependencies`,null],[`peerDependencies`,`peer`],[`optionalDependencies`,`optional`]];function ZA(e){let t=[];for(let[n,r]of XA)for(let[i,a]of Object.entries(e?.[n]??{})){let e=JA(a)?.name??i;t.push({name:i,range:a,kind:r,opens:ei(e)&&YA(a)?e:null})}return t.toSorted((e,t)=>e.name.localeCompare(t.name)||(e.kind??``).localeCompare(t.kind??``))}function QA(e,t){let n=e=>new Map(ZA(e).map(e=>[`${e.kind??``}\0${e.name}`,e])),r=n(t),i=n(e),a=[],o=[],s=[];for(let[e,{name:t,kind:n,range:a,opens:c}]of i){let i=r.get(e);i?i.range!==a&&o.push({key:e,name:t,kind:n,from:a,to:i.range,opens:i.opens}):s.push({key:e,name:t,kind:n,range:a,opens:c})}for(let[e,{name:t,kind:n,range:o,opens:s}]of r)i.has(e)||a.push({key:e,name:t,kind:n,range:o,opens:s});return{removed:s,added:a,changed:o}}var $A=(e=[])=>e.map(({check:e,label:t,tooltip:n})=>k`<span class="${`npm-dependency-flag is-${e}`}" data-tooltip="${n}">${t}</span>`);function ej(e,t=null,n=void 0){let r=xj(`risk`,`${e.name}@${e.version}${t===null?``:`..${t}`}`,()=>Pb(e.name,e.version,t,{signal:n}),IO);return r.status===`ready`?r:null}function tj(e){return e.map(e=>{let t=e.format===`npm`?`npm`:[`sourcemap`,`sourcemaps`].includes(e.kind)||e.filename.toLowerCase().endsWith(`.map`)?`sourcemap`:`stasis`,n=t===`npm`?e.detail??``:t===`sourcemap`?`Sourcemap`:`Stasis`,r=[];if(e.date&&r.push(e.date),typeof e.size==`string`&&![``,`—`].includes(e.size)&&r.push(e.size),e.files){r.push(`${e.files.length.toLocaleString()} files`);let{lines:t}=Gr(e.files);t!=null&&r.push(`${t.toLocaleString()} LoC`)}else e.summary&&(Number.isSafeInteger(e.summary.files)&&e.summary.files>=0&&r.push(`${e.summary.files.toLocaleString()} files`),Number.isSafeInteger(e.summary.lines)&&e.summary.lines>=0&&r.push(`${e.summary.lines.toLocaleString()} LoC`));return{value:e.id,label:e.filename,displayLabel:e.displayLabel,detail:n,format:t,secondary:r.join(` · `),...e.dateWarning&&{secondaryWarning:e.dateWarning}}})}var nj=e=>e.displayLabel??e.label,rj=class extends ct{static properties={bundles:{attribute:!1},noun:{},versions:{type:Boolean,reflect:!0}};static styles=[ct.styles,ha`.bundle-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 1.05rem;width:1.05rem;height:1.05rem;color:var(--muted)}.bundle-icon img,.bundle-icon svg{display:block;width:100%;height:100%;opacity:1;color:inherit}.option{gap:.5rem;padding-block:.25rem}.option-copy{gap:0}.option .name{line-height:1.3}.option .bundle-icon{flex-basis:1.35rem;width:1.35rem;height:1.35rem;margin-right:.15rem}.secondary{line-height:1.25;font-variant-numeric:tabular-nums}:host([versions]) .group{display:grid;gap:.1rem;font-size:.76rem;grid-template-columns:repeat(auto-fill,minmax(min(100%,calc(max(var(--option-width, 6ch),var(--secondary-width, 0ch) * .76) + 1rem)),1fr))}:host([versions]) .secondary{font-size:.76em}:host([versions]) .option{flex-wrap:wrap;align-content:start;gap:0 .8rem;padding:.3rem .45rem;font-variant-numeric:tabular-nums}:host([versions]) .option>svg,:host([versions]) .option .bundle-icon{display:none}:host([versions]) .option-copy{flex:0 1 auto}:host([versions]) .option .detail{font-size:.62rem;line-height:1.6}:host([versions]) .trigger .name:has(+.detail){flex:0 1 auto}:host([versions]) .trigger .detail{flex:1 1 0%;min-width:0;overflow:hidden;text-overflow:ellipsis;text-align:right}`];constructor(){super(),this.bundles=null,this.noun=`bundle`,this.versions=!1,this.label=`Choose bundle`,this.placeholder=`Choose bundle`}get searchLabel(){return`Search ${this.noun}s`}get optionsLabel(){return`${this.noun[0].toUpperCase()}${this.noun.slice(1)}s`}get noMatchesLabel(){return`No matching ${this.noun}s`}get emptyLabel(){return this.noun===`bundle`?`No stored bundles`:`No other ${this.noun}s`}get changeEvent(){return`bundle-change`}get menuWidth(){return this.versions?500:super.menuWidth}willUpdate(e){if(e.has(`bundles`)&&this.bundles&&(this.options=tj(this.bundles)),e.has(`options`)&&this.versions){let e=e=>Math.min(Math.max(0,...this.options.map(t=>e(t)?.length??0)),28);this.style.setProperty(`--option-width`,`${e(nj)}ch`),this.style.setProperty(`--secondary-width`,`${e(e=>e.secondary)}ch`)}}optionTooltip(e){return nj(e)}optionIcon(e){return e.format?k`<span class="bundle-icon" aria-hidden="true">${e.format===`npm`?O(Zi):e.format===`sourcemap`?O(Xi):k`<img src="./stasis.svg" alt="">`}</span>`:j}choices(){let e=this._query.normalize(`NFKC`).toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),t=this.options.filter(t=>e.every(e=>`${t.label} ${t.detail}`.normalize(`NFKC`).toLocaleLowerCase().includes(e))),n=this.versions?t:t.toSorted((e,t)=>e.label.localeCompare(t.label,void 0,{numeric:!0,sensitivity:`base`}));return{pinned:[],sections:[{label:null,options:n}],facets:[],showFacets:!1,count:n.length,total:this.options.length}}};customElements.get(`bundle-selector`)||customElements.define(`bundle-selector`,rj);var ij=/^https?:\/\/(?:www\.)?npmjs\.(?:com|org)\/package\/((?:@[^/]+\/)?[^/?#]+)(?:\/v\/([^/?#]+))?\/?(?:[?#].*)?$/u;function aj(e){let t=String(e??``).trim(),n=ij.exec(t),r,i=null;if(n)try{[r,i]=[decodeURIComponent(n[1]),n[2]?decodeURIComponent(n[2]):null]}catch{return null}else{let e=t.indexOf(`@`,1);[r,i]=e===-1?[t,null]:[t.slice(0,e),t.slice(e+1)]}return!ei(r)||i!==null&&!ti(i)?null:{name:r,spec:i}}var oj=(e,t=null)=>t==null?e:`${e}@${t}`;function sj(e,t){let n=new Set(t),r=[];for(let t of[e?.main,e?.module,`index.js`]){if(typeof t!=`string`)continue;let e=FA(t,n);e&&!r.includes(e)&&r.push(e)}return r}function cj(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 lj(e,t){let n=Bt(e,t.files);return{...n,npm:e.npm,npmEntries:sj(e.npm.manifest,n.json.sources),risk:()=>ej(e.npm)}}function uj(e,t=`overview`,n=null){return e?.npm?{view:`npm`,packageName:e.npm.name,packageSpec:e.npm.version,bundleTab:si.has(t)?t:`overview`,...n}:null}var dj=3,fj=new Map,pj=new Map,mj=1e4,hj=3e5,gj=null;function _j(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==gj&&(fj.clear(),pj.clear(),gj=e),fj}function vj(e,t){let n=_j();for(n.delete(e.name),n.set(e.name,{entry:e,details:t});n.size>dj;)n.delete(n.keys().next().value)}async function yj(e,t,n){let r=_j().get(`${e}@${t}`);if(r)return vj(r.entry,r.details),r;let i=await pb(e,t,n),a=cj(i),o=lj(a,i);return a.npm.private||vj(a,o),bj(i),{entry:a,details:o}}function bj({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[e,t]of Object.entries(r)){let r=`${e}\0${t}`;n[e]&&pj.get(r)?.status!==`ready`&&pj.set(r,{status:`known`,data:n[e]})}}function xj(e,t,n,r){_j();let i=`${e}\0${t}`,a=pj.get(i);if(a?.status===`known`){let e={status:`ready`,...r(a.data)};return pj.set(i,e),e}if(a&&!(a.status===`error`&&Date.now()>=a.retryAt))return a;let o={status:`loading`,failures:a?.failures??0};return pj.set(i,o),n().then(e=>({status:`ready`,...r(e)}),e=>{if(e?.name===`AbortError`)return null;let t=o.failures+1,n=Math.min(mj*2**(t-1),hj);return{status:`error`,failures:t,wait:n,retryAt:Date.now()+n}}).then(e=>pj.get(i)===o?e===null?(pj.delete(i),null):(pj.set(i,e),e.status===`error`&&setTimeout(()=>{pj.get(i)===e&&Z()},e.wait).unref?.(),Cj(),null):null).catch(()=>{}),o}var Sj=!1;function Cj(){Sj||(Sj=!0,queueMicrotask(()=>{Sj=!1,Z()}))}function wj(e,t=void 0){return xj(`versions`,e,()=>Ab(e,{signal:t}),e=>({versions:e.versions??[],distTags:e.distTags??{},times:e.times??{},created:typeof e.created==`string`?e.created:null,private:e.private===!0,teamScoped:e.teamScoped===!0}))}function Tj(e={}){let t=new Map;for(let[n,r]of Object.entries(e))t.set(r,[...t.get(r)??[],n]);return t}function Ej(e,t,n=Date.now()){let r=Tj(e.distTags);return(e.versions?.includes(t)?e.versions:[t,...e.versions??[]]).map(t=>{let i=e.times?.[t];return{id:t,detail:r.get(t)?.join(`, `)??``,...i&&{date:i.slice(0,10)},...i&&Dj(e,i,n)&&{age:jj(i,n)}}})}function Dj(e,t,n=Date.now()){return e.status===`ready`&&hA(t,{minimumReleaseAge:e.teamScoped?0:mA,now:n})}var Oj=new Intl.RelativeTimeFormat(`en`,{numeric:`auto`});function kj(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/864e5),r=n<60?Oj.format(-n,`day`):n<730?Oj.format(-Math.floor(n/30.44),`month`):Oj.format(-Math.floor(n/365.25),`year`);return`${wA(Date.parse(e))} \xB7 ${r}`}var Aj=new Intl.RelativeTimeFormat(`en`,{numeric:`always`});function jj(e,t=Date.now()){let n=Math.max(0,Math.floor((t-Date.parse(e))/6e4));return n<60?Aj.format(-n,`minute`):n<1440?Aj.format(-Math.floor(n/60),`hour`):Aj.format(-Math.floor(n/1440),`day`)}var Mj=e=>wA(Date.parse(e)),Nj=e=>`Published on ${Mj(e)}`;function Pj(e){let{name:t,version:n}=e.npm,r=wj(t),i=Ej(r,n).map(({id:e,detail:n,date:r,age:i})=>({id:e,name:`${t}@${e}`,displayLabel:e,format:`npm`,detail:n,...r&&{date:r},...i&&{dateWarning:i}}));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:i.filter(e=>e.id!==n),choices:i,name:r=>r===e.integrity||r===n?e.name:`${t}@${r}`,load:async e=>(await yj(t,e)).details,dependencies:Yj,openDependency:tM,open:(e,n,r)=>Fj(t,e,`compare`,n?{compareSpec:n,...ri(r)}:{})}}function Fj(e=null,t=null,n=`overview`,r={}){!F()||!U?.active||U.navigate(e==null?{view:`npm`}:{view:`npm`,packageName:e,packageSpec:t,bundleTab:n,...r})}function Ij(e,t=null){P.currentView=`npm`,P.npmLookup=e,P.npmOpening=t,P.currentManagedTeam=null,P.currentManagedReport=null,document.body.classList.remove(`report-fullscreen`),Z({animate:!1})}var Lj=/^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*)?$/u,Rj=new Set([`overview`,`compare`]);async function zj(e,t,n){let{packageName:r,packageSpec:i=null,bundleTab:a=`overview`}=e;if(r==null)return Ij({input:P.npmLookup?.input??``,error:null}),n(),{view:`npm`};let o=oj(r,i),s=P.currentView===`bundles`&&P.bundleDetails?.npm,c=s&&P.bundles?.[0]?.npm?.name===r&&P.bundles[0].npm.version===i?P.bundles[0]:null,l=c?P.bundleDetails:null;if(!c){let e=i!=null&&_j().has(`${r}@${i}`);!s&&!e&&(Ij({input:o,error:null},{name:r,spec:i,tab:a}),n());let u=new AbortController;wj(r,u.signal),i!=null&&Lj.test(i)&&Rj.has(a)&&ej({name:r,version:i},null,u.signal);try{({entry:c,details:l}=await yj(r,i??`latest`,{signal:J_()}))}catch(e){return u.abort(),e?.name===`AbortError`||!t()?!1:(Hj=null,Ij({input:o,error:e.message}),{view:`npm`})}if(!t()||!F())return u.abort(),!1}Hj?.name===r&&Hj.spec===i&&(Wj([o,...Uj().filter(e=>e!==o)]),Hj=null),sr();let u=P.bundleCompare?.bundle===c.integrity?P.bundleCompare:null;return a===`review`&&(P.npmReview={bundle:c.integrity,...e.reviewPackage?{reviewPackage:e.reviewPackage,reviewSpec:e.reviewSpec??null}:{}}),P.bundles=[c],qZ(c.integrity,a),a===`code`&&e.file!=null&&(P.bundleCodeFileRequest={bundle:c.integrity,file:e.file,...e.line==null?{}:{line:e.line},...e.endLine==null?{}:{endLine:e.endLine}}),a===`compare`&&e.compareSpec!=null?P.bundleCompare={bundle:c.integrity,target:e.compareSpec,mode:ni(e.compareMode)}:u&&(P.bundleCompare=u),P.bundleDetails=l,P.npmLookup={input:c.name,error:null},P.npmOpening=null,P.currentManagedTeam=null,P.currentManagedReport=null,P.reports=[],document.body.classList.remove(`report-fullscreen`),Z({animate:!1}),n(),document.querySelector(`#main-content`)?.scrollTo({top:0}),uj(c,P.bundleDetailsTab,Px(P))}var Bj=10,Vj=()=>`deepview.npm.recent.${P.managedSession?.id??`anonymous`}`,Hj=null;function Uj(){try{let e=JSON.parse(localStorage.getItem(Vj())??`[]`);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&aj(e)):[]}catch{return[]}}function Wj(e){try{localStorage.setItem(Vj(),JSON.stringify(e.slice(0,Bj)))}catch{}}function Gj(e){Wj(Uj().filter(t=>t!==e)),Z()}function Kj(e){let t=aj(e);if(!t){P.npmLookup={input:e??``,error:`Enter a package name, like lodash, @scope/name or name@1.2.3.`},Z();return}Hj=t,Fj(t.name,t.spec)}function qj(e){e.preventDefault(),Kj(e.currentTarget.querySelector(`input[name="package"]`)?.value)}function Jj(){let e=P.npmLookup??{input:``,error:null},t=[`admin`,`manage`].includes(P.managedSession?.role),n=Uj();return k`<section class="npm-lookup" aria-labelledby="npm-lookup-title"><header class="npm-lookup-head"><span class="npm-lookup-icon" aria-hidden="true">${O(Zi)}</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?j:`You can open public packages, and private ones in npm scopes your teams list.`}</p><form class="npm-lookup-form" @submit="${qj}"><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?k`<p class="npm-lookup-error" role="alert">${e.error}</p>`:j}</div>${n.length>0?k`<section class="npm-lookup-recent" aria-labelledby="npm-lookup-recent-title"><h2 id="npm-lookup-recent-title">Recent searches</h2><ul>${n.map(e=>k`<li><button type="button" class="npm-lookup-recent-open" @click="${()=>Kj(e)}">${e}</button> <button type="button" class="npm-lookup-recent-remove" aria-label="${`Remove ${e} from recent searches`}" @click="${()=>Gj(e)}">×</button></li>`)}</ul></section>`:j}</section>`}function Yj(e,t){let n=QA(e?.npm?.manifest,t?.npm?.manifest),r=e?.npm&&t?.npm?ej(t.npm,e.npm.version)?.dependencies:null,i=[e?.npm,t?.npm],a=(e,t)=>e.map(e=>({flags:[],...t?.find(({key:t})=>t===e.key),...e}));return{removed:n.removed,added:a(n.added,r?.added).map(e=>({...e,compared:i})),changed:a(n.changed,r?.changed)}}var Xj=e=>{let t=ej(e)?.dependencies;return new Map((t?.held??t?.added??[]).map(({key:e,flags:t})=>[e,t]))},Zj=({kind:e,name:t})=>`${e??``}\0${t}`,Qj=/^(?:[\^~]|=)?v?(\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?)$/u,$j=e=>Qj.exec(JA(e)?.spec??e.trim())?.[1]??null,eM=e=>JA(e)?.name??null;function tM({opens:e,from:t,to:n}){if(!e)return;let r=n&&$j(n),i=t&&$j(t);!i||!r||i===r||eM(t)!==eM(n)?Fj(e):Fj(e,r,`compare`,{compareSpec:i})}function nM(e){let t=ZA(e.npm.manifest);if(t.length===0)return j;let n=Xj(e.npm);return rA({title:`Dependencies`,count:t.length,list:!0,body:k`<ul class="bundles-sources-list npm-dependency-list">${t.map(e=>{let{name:t,range:r,kind:i,opens:a}=e,o=n.get(Zj(e))??[],s=k`<span class="npm-dependency-name"><span class="bundles-source-path" data-tooltip-truncated data-tooltip="${t}">${t}</span>${$A(o)}</span> ${i?k`<span class="npm-dependency-kind">${i}</span>`:j} <span class="bundles-source-size" data-tooltip-truncated data-tooltip="${r}">${r}</span>`;return k`<li>${a?k`<button type="button" class="bundles-source-row npm-dependency-row" data-npm-dependency="${a}" @click="${()=>Fj(a)}">${s}</button>`:k`<div class="bundles-source-row npm-dependency-row is-resource">${s}</div>`}</li>`})}</ul>`})}var rM=[[`source`,`Non-registry`,()=>`From elsewhere than npm's registry`],[`unimported`,`Unimported`,e=>`Imported by nothing of ${e}`]];function iM(e){let t=Xj(e),n=Map.groupBy(ZA(e.manifest).flatMap(e=>(t.get(Zj(e))??[]).map(({check:t})=>({...e,check:t}))),({check:e})=>e);return rM.filter(([e])=>n.has(e)).map(([t,r,i])=>k`<span class="npm-extension is-warn npm-dependency-check" data-tooltip="${`${i(e.version)}: ${n.get(t).map(({name:e,range:t})=>`${e} ${t}`).join(`, `)}`}"><span>${r}</span><span class="npm-extension-count">${n.get(t).length}</span></span>`)}function aM(e,t){let{name:n,version:r}=e.npm,i=xj(`tags`,`${n}@${r}`,()=>Nb(n,r),e=>({tags:Array.isArray(e.tags)?e.tags.filter(e=>typeof e==`string`&&e):[]}));return i.status!==`ready`||i.tags.length===0?j:k`<span class="bundle-origin-tags">${i.tags.map(e=>k`<a class="bundle-origin-link bundle-tag-link" href="${Ie(t,e)}" target="_blank" rel="noopener noreferrer">${O(Ki)}<span>${e}</span></a>`)}</span>`}function oM(e,t,n=e){let r=n===e||n===`./${e}`?j:`./${e}`;return t?.has(e)?k`<button type="button" class="bundle-entry-point" data-bundle-view-source="${e}" data-tooltip="${r}">${n}</button>`:n}function sM(e,t,n){let r=e.knownAccounts?.includes(t);return k`<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 cM=/^\s*(Package no longer supported\.)\s+Contact Support at https:\/\/www\.npmjs\.com\/support for more info\.\s*$/u,lM=e=>e.replace(cM,`$1`);function uM(e,{prefix:t=``,githubFigures:n=j,provenance:r=j,provenanceNamesBuilder:i=!1,files:a=null}={}){let{manifest:o}=e.npm,s=o.github?.github,c=s?Be({repo:{github:s,directory:o.github.directory??``,commit:o.gitHead}})[0]:null,l=wj(e.npm.name),u=e.npm.published??l.times?.[e.npm.version];return k`<dl class="bundles-detail-meta npm-facts">${e.npm.private?k`<dt>Access</dt><dd>Private</dd>`:j} ${o.deprecated?k`<dt>Deprecated</dt><dd class="npm-deprecated">${lM(o.deprecated)}</dd>`:j} ${o.description?k`<dt>Description</dt><dd>${o.description}</dd>`:j} ${o.license?k`<dt>License</dt><dd>${RA(o.license,[...a??[]]).map(({text:e,file:t})=>oM(t,a,e))}</dd>`:j} ${o.author?k`<dt>Author</dt><dd class="bundle-origin-row">${o.authorAccount?k`${sM(o,o.authorAccount,o.author)}${o.author===o.authorAccount?j:k`<span class="npm-publisher">~${o.authorAccount}</span>`}`:o.author}</dd>`:j} ${o.publisher&&o.publisher!==o.authorAccount?k`<dt>Publisher</dt><dd class="bundle-origin-row">${sM(o,o.publisher,`~${o.publisher}`)}</dd>`:o.trustedPublisher&&!i?k`<dt>Publisher</dt><dd class="npm-trusted-publisher">${o.trustedPublisher}</dd>`:j} ${u?k`<dt>Published</dt><dd>${Dj(l,u)?k`<span class="npm-recent">${kj(u)}</span>`:kj(u)}</dd>`:j} ${c?k`<dt>GitHub</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${c.href}" target="_blank" rel="noopener noreferrer">${O(aa)}<span>${c.text}</span></a> ${n}</dd><dt>Commit</dt><dd class="bundle-origin-row">${c.commit?k`<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">${O(oa)}<span>${c.commit.text}</span></a> ${aM(e,s)}`:k`<span class="npm-commit-missing">Not recorded at publish</span>`}</dd>`:j} ${r===j?j:k`<dt>Provenance</dt><dd class="bundle-origin-row">${r}</dd>`} ${o.homepage&&/^https?:\/\//iu.test(o.homepage)?k`<dt>Homepage</dt><dd><a class="bundle-origin-link" href="${o.homepage}" target="_blank" rel="noopener noreferrer"><span>${o.homepage}</span></a></dd>`:j}<dt>Integrity</dt><dd class="mono bundle-integrity" data-tooltip-truncated data-tooltip="${e.integrity}">${e.integrity}</dd>${t?k`<dt>Prefix</dt><dd class="mono">${t}</dd>`:j}</dl>`}var dM=(e,t)=>e.split(/(\s+)/u).map(e=>{let n=e.replace(/^\.\//u,``);return t?.has(n)?oM(n,t,e):e});function fM(e,t=null,n=null){let{manifest:r}=e.npm,i=[`main`,`module`,`types`].filter(e=>typeof r[e]==`string`).map(e=>({label:`${e[0].toUpperCase()}${e.slice(1)}`,path:r[e],file:FA(r[e],t)??IA(r[e])})),a=i.find(e=>e.label===`Main`),o=i.find(e=>e.label===`Module`);a&&o&&a.file===o.file&&(a.label=`Main, Module`,i.splice(i.indexOf(o),1));let s=Object.keys(r.bin??{}),c=fA(r,t),l=ZA(r).length;return k`${i.map(({label:e,path:r,file:i})=>k`<dt>${e}</dt><dd class="mono"><span class="npm-entry-point">${yt(i,_t(n,i))}${oM(i,t,r)}</span></dd>`)} ${r.type?k`<dt>Type</dt><dd class="mono">${r.type}</dd>`:j} ${s.length>0?k`<dt>Bin</dt><dd class="mono">${s.join(`, `)}</dd>`:j} ${r.engines?k`<dt>Engines</dt><dd class="mono">${Object.entries(r.engines).map(([e,t])=>`${e} ${t}`).join(`, `)}</dd>`:j} ${c.length>0||r.hasInstallScript?k`<dt>Install scripts</dt><dd class="npm-install-scripts">${c.length===0?`Yes`:c.map(([e,n])=>k`<div class="npm-install-script"><span class="npm-install-script-name">${e}</span><code>${dM(n,t)}</code></div>`)}</dd>`:j}<dt>Dependencies</dt><dd class="npm-dependencies-fact">${lA(`dependencies`,l,l===0?`None`:l)}${iM(e.npm)}</dd>`}var pM=class extends _a{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 e=Ej(this.list?.status===`ready`?this.list:{versions:[],distTags:{}},this.version).map(({id:e,detail:t,date:n,age:r})=>({value:e,label:e,detail:t,secondary:n,...r&&{secondaryWarning:r}}));return k`<bundle-selector .options="${e}" .value="${this.version}" noun="version" versions label="${`Version of ${this.name}`}" placeholder="${this.version}" ?disabled="${e.length<=1}" aria-busy="${this.list?.status===`loading`?`true`:j}" @bundle-change="${e=>{e.detail.value!==this.version&&Fj(this.name,e.detail.value,this.tab)}}"></bundle-selector>`}};customElements.get(`npm-version-select`)||customElements.define(`npm-version-select`,pM);var mM=e=>k`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`,hM=[[`commits`,`Commits`,mM(A`<circle cx="8" cy="8" r="2.75"/><path d="M8 1v4.25M8 10.75V15"/>`)],[`issues`,`Issues`,mM(A`<circle cx="8" cy="8" r="6.25"/><circle cx="8" cy="8" r="1.6" fill="currentColor" stroke="none"/>`)],[`pulls`,`Pull requests`,mM(A`<circle cx="4" cy="3.5" r="1.75"/><circle cx="4" cy="12.5" r="1.75"/><circle cx="12" cy="12.5" r="1.75"/>
|
|
169
|
+
<path d="M4 5.25v5.5M12 10.75V6.5a2 2 0 0 0-2-2H7.5M9 3 7.5 4.5 9 6"/>`)],[`agents`,`Agents`,mM(A`<rect x="2.25" y="4.5" width="11.5" height="9" rx="2.5"/><path d="M8 4.5V2M6 11h4"/>
|
|
170
|
+
<circle cx="5.75" cy="8.25" r="1.1" fill="currentColor" stroke="none"/><circle cx="10.25" cy="8.25" r="1.1" fill="currentColor" stroke="none"/>`)],[`pulse`,`Pulse`,mM(A`<path d="M1 8.5h3l1.75-4.5 3 9 2-6.5 1.25 2H15"/>`)],[`replay`,`Replay`,mM(A`<path d="M5 3.25v9.5L12.75 8z"/>`)]],gM=new Set(hM.map(([e])=>e)),_M=`commits`;function vM(e){return gM.has(e)&&(_M=e),_M}var yM=e=>k`<div class="activity-views" role="group" aria-label="Activity">${hM.map(([t,n,r])=>k`<button type="button" data-bundle-tab="${t}" aria-label="${n}" aria-pressed="${String(t===e)}">${r}</button>`)}</div>`,bM=/^[a-f\d]{40}$/iu,xM=(e,t)=>e.repoId===t.repoId&&e.commit===t.commit&&(e.path??``)===(t.path??``),SM=({repo:e,path:t})=>t?`${e}/${t}`:e,CM=new Map,wM=new Map,TM=3e4,EM=null;function DM(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==EM&&(CM.clear(),wM.clear(),EM=e),CM}function OM(e,t){let n=DM(),r=n.get(e);if(r&&!r.stale&&!(r.status===`error`&&Date.now()>=r.retryAt))return r;let i=r?.stale?{status:`ready`,value:r.value}:{status:`loading`};return n.set(e,i),t().then(e=>({status:`ready`,value:e}),e=>e?.name===`AbortError`?null:{status:`error`,retryAt:Date.now()+TM}).then(t=>{if(n.get(e)!==i)return null;if(t?.status===`ready`||t&&i.status===`loading`)n.set(e,t);else if(i.status===`loading`)n.delete(e);else return null;return Z(),null}).catch(()=>{}),i}function kM(e){let t=DM().get(e);t?.status===`ready`?DM().set(e,{...t,stale:!0}):DM().delete(e)}var AM=()=>OM(`repositories`,()=>hb()),jM=e=>OM(`refs\0${e}`,()=>gb(e)),MM=({repoId:e,repo:t})=>t??AM().value?.find(t=>t.repoId===e)?.fullName??null,NM=(e,t)=>wM.get(`${e}\0${t}`)??null;function PM(e,t,n){DM(),n&&wM.set(`${e}\0${t}`,n)}function FM(e,t=null){let{repoId:n,repo:r,commit:i,path:a}=e,o=Array.isArray(e.files)?e.files:[];return{integrity:`repository:${n}:${i}:${a}`,kind:`sourcemap`,name:`${SM({repo:r,path:a})}@${i.slice(0,7)}`,size:o.reduce((e,[,t])=>e+t,0),repository:{repoId:n,repo:r,commit:i,path:a,revision:t}}}var IM=/^readme(?:\.[^/]*)?$/iu;function LM(e){return e.filter(e=>IM.test(e)).toSorted((e,t)=>+!/\.md$/iu.test(e)-!/\.md$/iu.test(t)||e.localeCompare(t)).slice(0,1)}function RM(e,t){let n=Bt(e,t.files);return{...n,repository:e.repository,npmEntries:LM(n.json.sources)}}function zM(e,t=`code`,n=null){if(!e?.repository)return null;let{repoId:r,commit:i,path:a}=e.repository;return{view:`repository-code`,repoId:r,commit:i,path:a,bundleTab:ci.has(t)?t:`code`,...n}}function BM({repoId:e,commit:t=null,ref:n=null,revision:r=void 0,path:i=``,repo:a=null,file:o=null,bundleTab:s=`code`,compare:c=null}){if(!F()||!U?.active)return;let l=c?.target?{...bM.test(c.target)?{compareCommit:c.target.toLowerCase()}:{compareTarget:c.target},...ri(c.mode)}:{};U.navigate({view:`repository-code`,repoId:e,commit:t,path:i,bundleTab:s,...n==null?{}:{ref:n},...r===void 0?{}:{revision:r},...a?{repo:a}:{},...o?{filePath:o}:{},...l})}var VM=e=>e.commit??e.ref??``,HM=e=>e?.name?e.kind===`commit`?e.name.toLowerCase():`${e.kind===`branch`?`heads`:`tags`}/${e.name}`:``;function UM({repoId:e,repo:t,path:n},r,i){let a=r.kind===`commit`&&bM.test(r.name)?r.name.toLowerCase():null;BM({repoId:e,repo:t,path:n,commit:a,bundleTab:i,...a?{}:{ref:HM(r),revision:r}})}function WM({repoId:e,repo:t,commit:n,revision:r},i,a){BM({repoId:e,repo:t,path:i,commit:n,bundleTab:a,...n?{}:{ref:HM(r),revision:r}})}function GM(e){P.currentView=`repository-code`,P.repositoryCodeOpening=e,P.currentManagedTeam=null,P.currentManagedReport=null,document.body.classList.remove(`report-fullscreen`),Z({animate:!1})}function KM(e){let t=P.repositoryCodePending;return t&&t.integrity===e?.integrity&&t.generation===H()?t.repository:null}var qM=new Set([`directory-too-large`,`directory-unreadable`,`no-directory`]);async function JM(e,t){if(qM.has(t?.code))try{let t=await _b(e.repoId,VM(e),e.path,{signal:J_()}),n=(t.entries??[]).filter(e=>e.type===`dir`).toSorted((e,t)=>e.name.localeCompare(t.name));P.repositoryCodeOpening?.error&&xM(P.repositoryCodeOpening,e)&&n.length>0&&bM.test(t.commit)&&(P.repositoryCodeOpening={...P.repositoryCodeOpening,listing:{commit:t.commit.toLowerCase(),directories:n}},Z())}catch{}}async function YM(e){try{let t=await _b(e.repoId,VM(e),``,{signal:J_()});P.repositoryCodeOpening===e&&bM.test(t?.commit??``)&&(P.repositoryCodeOpening={...e,commit:t.commit.toLowerCase()},Z({animate:!1}))}catch{}}function XM({repoId:e,repo:t,commit:n,ref:r,path:i,revision:a},o){BM({repoId:e,repo:t,path:i,commit:n,bundleTab:o,...n?{}:{ref:r??``,revision:a}})}async function ZM(e,t,n){let{repoId:r,commit:i=null,path:a=``}=e,o=ci.has(e.bundleTab)?e.bundleTab:`code`;DM();let s=P.currentView===`bundles`&&P.bundles?.[0]?.repository&&P.bundleDetails?.integrity===P.bundles[0].integrity?P.bundles[0]:null,c=i&&s&&xM(s.repository,{repoId:r,commit:i,path:a})?s:null,l=c?P.bundleDetails:null,u=P.currentView===`repository-code`?P.repositoryCodeOpening:null;if(!c&&i&&u?.code===`directory-too-large`&&xM(u,{repoId:r,commit:i,path:a}))return GM({...u,tab:o}),{view:`repository-code`,repoId:r,commit:i,path:a,bundleTab:o};if(!c&&li.has(o)){let s=e.revision===void 0?i?wM.get(`${r}\0${i}`)??null:e.ref?null:{kind:`branch`,name:null}:e.revision;kM(`refs\0${r}`);let c=AM().value?.find(e=>e.repoId===r)?.fullName,l={repoId:r,commit:i,ref:e.ref??null,path:a,tab:o,repo:e.repo??c??null,revision:s,error:null},u=i;if(!u){GM(l),U?.showing(e),n();try{let t=await _b(r,VM(e),``,{signal:J_()});u=bM.test(t?.commit??``)?t.commit.toLowerCase():null}catch(e){return e?.name===`AbortError`||!t()?!1:(GM({...l,error:e.message,code:e?.code??null}),{view:`repository-code`,repoId:r,commit:null,path:a,bundleTab:o})}if(!t())return!1;if(!u)return GM({...l,error:`The server answered with no commit.`}),{view:`repository-code`,repoId:r,commit:null,path:a,bundleTab:o}}return s&&wM.set(`${r}\0${u}`,s),GM({...l,commit:u,ref:null,historyOnly:!0}),n(),{view:`repository-code`,repoId:r,commit:u,path:a,bundleTab:o}}if(!c){let u=e.revision===void 0?i?wM.get(`${r}\0${i}`)??null:e.ref?null:{kind:`branch`,name:null}:e.revision,d=AM().value?.find(e=>e.repoId===r)?.fullName,f={repoId:r,commit:i,ref:e.ref??null,path:a,tab:o,repo:e.repo??d??null,revision:u,error:null};kM(`refs\0${r}`);let p=o===`treemap`,m=s&&!p?{integrity:s.integrity,generation:H(),repository:{repoId:r,repo:f.repo,commit:i,path:a,revision:u}}:null;m?(P.repositoryCodePending=m,Z({animate:!1})):(GM(f),n()),p&&!i&&YM(f),U?.showing(e);let h;try{if(h=await mb(r,VM(e),a,{signal:J_()}),h?.repoId!==r||i&&h.commit!==i||h.path!==a||!bM.test(h.commit??``))throw Error(`The server answered with another directory.`)}catch(e){if(e?.name===`AbortError`||!t())return!1;let n=!i&&e?.code===`directory-too-large`&&bM.test(e.commit??``)?e.commit.toLowerCase():i,s={...f,commit:n,error:e.message,code:e?.code??null};return GM(s),JM(s,e),{view:`repository-code`,repoId:r,commit:n,path:a,bundleTab:o}}finally{m&&P.repositoryCodePending===m&&(P.repositoryCodePending=null,P.currentView===`bundles`&&P.selectedBundle===m.integrity&&Z({animate:!1}))}if(!t()||!F())return!1;u&&wM.set(`${r}\0${h.commit}`,u),c=FM(h,u),l=RM(c,h)}sr();let d=P.bundleCompare?.bundle===c.integrity?P.bundleCompare:null,f=e.compareCommit??e.compareTarget??null;return P.bundles=[c],qZ(c.integrity,o),o===`compare`&&f?P.bundleCompare={bundle:c.integrity,target:f,mode:ni(e.compareMode)}:d&&o!==`compare`&&(P.bundleCompare=d),o===`code`&&e.file!=null?P.bundleCodeFileRequest={bundle:c.integrity,file:e.file,...e.line==null?{}:{line:e.line},...e.endLine==null?{}:{endLine:e.endLine}}:o===`code`&&typeof e.filePath==`string`&&(P.bundleCodeFileRequest={bundle:c.integrity,path:e.filePath}),P.bundleDetails=l,P.repositoryCodeOpening=null,P.currentManagedTeam=null,P.currentManagedReport=null,P.reports=[],document.body.classList.remove(`report-fullscreen`),Z({animate:!1}),n(),document.querySelector(`#main-content`)?.scrollTo({top:0}),zM(c,P.bundleDetailsTab,Px(P))}function QM({revision:e,commit:t},n){if(e?.name)return e;let r=n?.status===`ready`?n.value:null;if(e)return{kind:`branch`,name:r?.defaultBranch??``};let i=e=>(Array.isArray(r?.[e])?r[e]:[]).flatMap(e=>e?.sha===t&&typeof e.name==`string`?[e.name]:[]),a=t?i(`branchCommits`):[],o=a.includes(r?.defaultBranch)?r.defaultBranch:a[0],s=t?i(`tagCommits`)[0]:null;return o?{kind:`branch`,name:o}:s?{kind:`tag`,name:s}:{kind:`commit`,name:t??``}}var $M=new Set([`issues`,`pulls`,`agents`,`pulse`]);function eN({how:e,kind:t,name:n}){let r=n.trim();return e===`kind`||e===`input`||!r||t===`commit`&&!/^[a-f\d]{7,40}$/iu.test(r)?null:{kind:t,name:r}}var tN=class extends _a{static properties={repository:{attribute:!1},tab:{type:String},repos:{attribute:!1},refs:{attribute:!1},_edit:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.repository=null,this.tab=`code`,this.repos=null,this.refs=null,this._edit=null,this._shownKey=null}willUpdate(){let{repoId:e,commit:t,path:n,revision:r}=this.repository??{},i=JSON.stringify([e,t,n,r]);i!==this._shownKey&&(this._shownKey=i,this._edit=null)}revisionChanged({detail:e}){let t=eN(e);this._edit=t??{kind:e.kind,name:e.name},t&&UM(this.repository,t,this.tab)}render(){if(!this.repository)return j;let{repoId:e,repo:t,commit:n,path:r}=this.repository,i=this.repos?.status===`ready`?this.repos.value:[],a=i.map(e=>({value:e.repoId,label:e.fullName}));i.some(t=>t.repoId===e)||a.unshift({value:e,label:t??`Repository ${e}`});let o=this._edit??QM(this.repository,this.refs),s=$M.has(this.tab),c=r&&!s?r.split(`/`):[],l=t??i.find(t=>t.repoId===e)?.fullName,u=l&&n?`https://github.com/${[...l.split(`/`),`tree`,n,...c].map(encodeURIComponent).join(`/`)}`:null;return k`<repository-selector class="repository-code-repo" label="Repository" .options="${a}" .value="${e}" @repository-change="${t=>{t.detail.value!==e&&BM({repoId:t.detail.value,repo:a.find(e=>e.value===t.detail.value)?.label,bundleTab:this.tab})}}"></repository-selector>${c.length>0?k`<nav class="repository-code-path" aria-label="Directory"><button type="button" aria-label="Open the repository's root" @click="${()=>WM(this.repository,``,this.tab)}">/</button> ${c.map((e,t)=>t===c.length-1?k`<span aria-current="location">${e}</span>`:k`<button type="button" @click="${()=>WM(this.repository,c.slice(0,t+1).join(`/`),this.tab)}">${e}</button><span aria-hidden="true">/</span>`)}</nav>`:j} ${s?j:k`<revision-select class="repository-code-revision" .refs="${this.refs?.status===`ready`?this.refs.value:null}" .kind="${o.kind}" .name="${o.name}" .installTooltips="${e=>hr(e)}" @revision-change="${this.revisionChanged}"></revision-select>`} ${u&&!s?k`<a class="bundles-slide-commit" href="${u}" data-tooltip="${n}" data-tooltip-icon="commit" target="_blank" rel="noopener noreferrer" aria-label="${`View this directory at commit ${n.slice(0,7)} on GitHub`}">${O(oa)}<span>${n.slice(0,7)}</span></a>`:j}`}};customElements.get(`repository-code-source`)||customElements.define(`repository-code-source`,tN);function nN(e){let{listing:t}=e;return t?k`<div class="repository-code-listing"><p>Open one of its directories:</p><ul>${t.directories.map(n=>k`<li><button type="button" class="repository-code-directory" @click="${()=>WM({...e,commit:t.commit},n.path,e.tab)}">${xt}<span>${n.name}</span></button></li>`)}</ul></div>`:j}var rN=e=>e.committedAt??-1/0;function iN(e){let t=new Map(e.map((e,t)=>[e.sha,t])),n=new Map(e.map(e=>[e.sha,0]));for(let r of e)for(let e of new Set(r.parents))t.has(e)&&n.set(e,n.get(e)+1);let r=(e,n)=>rN(e)-rN(n)||t.get(n.sha)-t.get(e.sha),i=e.filter(e=>n.get(e.sha)===0).toSorted(r),a=[];for(;i.length>0;){let o=i.pop();a.push(o);for(let a of new Set(o.parents)){if(!t.has(a))continue;let o=n.get(a)-1;if(n.set(a,o),o>0)continue;let s=e[t.get(a)],c=i.length,l=0;for(;l<c;){let e=l+c>>1;r(i[e],s)<0?l=e+1:c=e}i.splice(l,0,s)}}return a}function aN(e,t){let n=new Map(e.map(e=>[e.sha,e])),r=new Set;for(let e=n.get(t);e&&!r.has(e.sha);e=n.get(e.parents[0]))r.add(e.sha);return r}function oN(e,{linear:t=!1,trunk:n=null,colors:r=8}={}){let i=new Set(e.map(e=>e.sha)),a=+(n?.size>0),o=[],s=[],c=[],l=[],u=[],d=0,f=0,p=()=>{let e=o.indexOf(null,a);return e===-1?Math.max(o.length,a):e},m=e=>{if(n?.has(e))return 0;let t=o.indexOf(e);return t===-1?null:t},h=e=>{let t=Math.max(1,r-a),n=new Set([e-1,e+1].filter(e=>o[e]!=null).map(e=>s[e])),i=Array.from({length:t},(e,t)=>t).find(e=>!n.has(a+(f+e)%t))??0,c=a+(f+i)%t;return f=(f+i+1)%t,c};for(let[r,a]of e.entries()){let f=e[r+1],g=t?f?[f.sha]:a.parents.slice(0,1):[...new Set(a.parents)],_=g.filter(e=>i.has(e)),v=m(a.sha),y=v??p(),b=n?.has(a.sha)?0:v===null?h(y):s[y];for(let[e,t]of o.entries())t===a.sha&&(o[e]=null);c.push({commit:a,col:y,color:b});let ee=new Set;o[y]=_[0]??null,s[y]=b,_.length>0&&ee.add(y);let te=[];for(let e of _.slice(1)){let t=n?.has(e)?0:o.indexOf(e);if(t===-1||o[t]!==e){let t=p();s[t]=h(t),o[t]=e,ee.add(t)}else te.push(t)}let ne=o[y]===null;for(let e of g.filter(e=>!i.has(e)))u.push({row:r,col:y,straight:ne,color:b}),ne=!1;for(let e=0;e<o.length;e++)o[e]??=null;if(d=Math.max(d,o.length),f){let e=m(f.sha);for(let[t,n]of o.entries())n!==null&&l.push({row:r,from:ee.has(t)?y:t,to:n===f.sha?e:t,color:s[t]});for(let t of te)l.push({row:r,from:y,to:o[t]===f.sha?e:t,color:s[t]})}for(;o.length>0&&o.at(-1)===null;)o.pop()}return{rows:c,segments:l,stubs:u,width:Math.max(d,+(c.length>0))}}var sN=`100% 0px`,cN=new WeakMap,lN=new WeakMap,uN=[],dN=!1,fN=new WeakMap;function pN(e){let t=fN.get(e);if(t===void 0){let n=getComputedStyle(e).overflowY;t=n===`auto`||n===`scroll`||n===`overlay`,fN.set(e,t)}return t}function mN(e){let t=e.parentNode;for(;t;){if(t.nodeType===Node.DOCUMENT_FRAGMENT_NODE){t=t.host??null;continue}if(t.nodeType!==Node.ELEMENT_NODE||t===document.documentElement)return null;if(pN(t))return t;t=t.parentNode}return null}function hN(e){for(let t of e)lN.get(t.target)?.cb(t.isIntersecting)}function gN(e){let t=e??document,n=cN.get(t);return n||(n=new IntersectionObserver(hN,{root:e,rootMargin:sN,threshold:0}),cN.set(t,n)),n}function _N(e,t){let n=lN.get(e);n?.io&&n.io.unobserve(e),lN.set(e,{cb:t,io:null}),uN.push(e),dN||(dN=!0,queueMicrotask(vN))}function vN(){dN=!1;let e=uN;uN=[];for(let t of e){let e=lN.get(t);!e||e.io||(e.io=gN(mN(t)),e.io.observe(t))}}function yN(e){let t=lN.get(e);t&&(t.io?.unobserve(e),lN.delete(e))}function bN(e,t,n,{ready:r,failed:i,settled:a=()=>{},retryMs:o,repaint:s}){let c=e.get(t);if(c&&Date.now()<c.until)return c;let l=c?.status===`ready`?c:null;if(l?.rereading)return l;let u=l??{status:`loading`,until:1/0};return l?l.rereading=!0:e.set(t,u),n().then(n=>{if(e.get(t)!==u||l&&Date.now()<l.until)return null;let i=r(n);return e.set(t,i),a(i),null},n=>{if(e.get(t)!==u)return null;if(l)return n?.name!==`AbortError`&&(l.until=Date.now()+o),null;let r=i(n);return r?e.set(t,r):e.delete(t),null}).finally(()=>{l&&(l.rereading=!1),s()}),u}var xN=12,SN=24,CN=9,wN=8,TN=3,EN=`a[href], .history-commit`,DN=3e5,ON=15e3,kN=3e4,AN=25,jN=new Map,MN=new Set,NN=null,PN=`all`,FN=new Set;function IN(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==NN&&(jN.clear(),FN.clear(),NN=e),jN}var LN=()=>{for(let e of MN)e.requestUpdate()};function RN(e,t,n=new Set){let r={status:`ready`,until:Date.now()+DN,page:1,commits:e.commits,more:e.more===!0,branches:e.branches??[],tags:e.tags??[],defaultBranch:e.defaultBranch??null,unread:e.unread,cut:e.cut===!0,pulls:e.pulls,openPulls:e.openPulls,loadingMore:!1,moreError:null,sought:n};return t?.(r),r}function zN(e,t,n){return bN(IN(),e,()=>t(1),{ready:e=>RN(e,n),failed:e=>e?.name===`AbortError`?null:{status:`error`,until:Date.now()+kN,error:e?.message||`The history could not be read.`,code:e?.code??null},retryMs:kN,repaint:LN})}function BN(e,t,n,r,i){let a=t.sought;t.sought=new Set(a).add(i),t.refreshing=!0,n(1,null,!0).then(n=>{if(IN().get(e)!==t)return null;let o=t.retried===i?0:Math.min(Number(n.retryIn)||0,ON),s=RN(n,r,o>0?a:t.sought);return o>0&&(Object.assign(s,{retried:i,retryAt:Date.now()+o}),setTimeout(LN,o)),IN().set(e,s),null},()=>null).finally(()=>{t.refreshing=!1,LN()})}function VN(e){let t=new Set(e.commits.map(e=>e.sha));e.branches=[...e.branches,...e.unread.flatMap(({name:e,sha:n})=>t.has(n)?[{name:e,sha:n}]:[])],e.unread=e.unread.filter(e=>!t.has(e.sha)),e.asked??=new Set;let n=new Map,r=(t,r)=>{e.asked.has(t)||n.set(t,Math.max(n.get(t)??-1/0,r??0))};for(let n of e.commits)for(let e of n.parents)t.has(e)||r(e,n.committedAt);for(let t of e.unread)r(t.sha,t.at);e.next=[...n].toSorted((e,t)=>t[1]-e[1]).slice(0,AN).map(([e])=>e);for(let t of e.next)e.asked.add(t);return e.more&&=e.next.length>0,e}function HN(e,t,n,r){t.loadingMore||!t.more||(t.loadingMore=!0,t.moreError=null,t.until=Date.now()+DN,LN(),n(t.page+1,t).then(n=>{if(IN().get(e)!==t)return null;let i=new Set(t.commits.map(e=>e.sha));t.commits=[...t.commits,...n.commits.filter(e=>!i.has(e.sha))];let a=new Set(t.pulls.map(e=>e.merge));return t.pulls=[...t.pulls,...n.pulls.filter(e=>!a.has(e.merge))],t.page+=1,t.more=n.more===!0,r?.(t),t.until=Date.now()+DN,null},e=>(e?.name!==`AbortError`&&(t.moreError=e?.message||`More commits could not be read.`),null)).finally(()=>{t.loadingMore=!1,LN()}))}var UN=/^[a-f\d]{40}$/u,WN=e=>typeof e?.sha==`string`&&UN.test(e.sha)&&Array.isArray(e.parents);function GN(e){if(!Array.isArray(e?.commits))throw Error(`The server answered with no history.`);let t=e.commits.filter(WN),n=Array.isArray(e.unread)?e.unread.filter(e=>typeof e?.name==`string`&&typeof e.sha==`string`&&UN.test(e.sha)):[],r=Array.isArray(e.pulls)?e.pulls.filter(e=>typeof e?.merge==`string`&&UN.test(e.merge)&&Number.isSafeInteger(e.number)&&typeof e.head==`string`&&UN.test(e.head)&&Array.isArray(e.commits)).map(e=>({...e,commits:e.commits.filter(WN)})):[],i=Array.isArray(e.openPulls)?e.openPulls.filter(e=>Number.isSafeInteger(e?.number)&&typeof e.sha==`string`&&UN.test(e.sha)):[];return{...e,commits:t,unread:n,pulls:r,openPulls:i}}function KN(e,t,n){let r=qN(e,t),i=new Map(r.map(e=>[e.sha,e]));if(!i.has(n))return r;let a=new Set;for(let e=[n];e.length>0;){let t=e.pop();a.has(t)||!i.has(t)||(a.add(t),e.push(...i.get(t).parents))}let o=i.get(n);for(let e=new Set;i.has(o.parents[0])&&!e.has(o.sha);o=i.get(o.parents[0]))e.add(o.sha);let s=o.parents.length>0?o.committedAt??1/0:-1/0;return r.filter(e=>!a.has(e.sha)&&(e.committedAt??-1/0)>s)}function qN(e,t){if(t.length===0)return e;let n=new Map(t.map(e=>[e.merge,e])),r=new Set(e.map(e=>e.sha)),i=new Map;for(let e of t)for(let t of e.commits)!r.has(t.sha)&&!i.has(t.sha)&&i.set(t.sha,{...t,pull:e.number});return[...e.map(e=>{let t=n.get(e.sha);return t&&e.parents.length===1&&t.head!==e.parents[0]?{...e,parents:[e.parents[0],t.head]}:e}),...i.values()]}var JN=6e4,YN=60*JN,XN=24*YN;function ZN(e,t=Date.now()){if(e==null)return``;let n=t-e;if(n>=-JN&&n<JN)return`now`;if(n>0&&n<YN)return`${Math.floor(n/JN)}m`;if(n>0&&n<XN)return`${Math.floor(n/YN)}h`;if(n>0&&n<7*XN)return`${Math.floor(n/XN)}d`;let r=new Date(e);return r.toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,...r.getFullYear()===new Date(t).getFullYear()?{}:{year:`numeric`}})}function QN({branches:e=[],tags:t=[],pulls:n=[],openPulls:r=[]},i){let a=new Map,o=(e,t)=>a.set(e,[...a.get(e)??[],t]);for(let t of e.toSorted((e,t)=>+(t.name===i)-(e.name===i)))o(t.sha,{kind:`branch`,name:t.name,main:t.name===i});let s=new Set;for(let{number:e,sha:t}of[...n.map(e=>({number:e.number,sha:e.head})),...r])s.has(e)||(s.add(e),o(t,{kind:`pull`,name:`#${e}`,number:e}));for(let e of t)o(e.sha,{kind:`tag`,name:e.name});return a}function $N(e,t){if(!t)return e;let n=[],r=0;for(let i of e.matchAll(/(?<=^|[\s([])#(\d+)\b/gu))n.push(e.slice(r,i.index),k`<a href="${`${t}/issues/${i[1]}`}" target="_blank" rel="noopener noreferrer" tabindex="-1">${i[0]}</a>`),r=i.index+i[0].length;return r===0?e:[...n,e.slice(r)]}var eP=e=>CN+e*xN,tP=e=>e*SN+SN/2;function nP({row:e,from:t,to:n}){let[r,i,a,o]=[eP(t),eP(n),tP(e),tP(e+1)];if(r===i)return`M${r} ${a}V${o}`;let s=(a+o)/2;return`M${r} ${a}C${r} ${s} ${i} ${s} ${i} ${o}`}var rP=({row:e,col:t,straight:n})=>n?`M${eP(t)} ${tP(e)+6}v${SN*.55}`:`M${eP(t)+4} ${tP(e)+5}l${xN*.6} ${SN*.5}`;function iP(e,t){let n=Array.from({length:wN},()=>[]);for(let t of e.segments)n[t.color].push(nP(t));let r=Array.from({length:wN},()=>[]);for(let t of e.stubs)r[t.color].push(rP(t));let i=CN*2+(e.width-1)*xN;return k`<svg class="history-graph" width="${i}" height="${e.rows.length*SN}" aria-hidden="true">${n.map((e,t)=>e.length>0?A`<path class=${`lane-${t}`} d=${e.join(``)}/>`:j)} ${r.map((e,t)=>e.length>0?A`<path class=${`history-stub lane-${t}`} d=${e.join(``)}/>`:j)} ${e.rows.map(({commit:e,col:n,color:r},i)=>A`<circle class=${`lane-${r}${e.sha===t?` is-shown`:``}`} cx=${eP(n)} cy=${tP(i)}
|
|
171
|
+
r=${e.sha===t?4.5:e.parents.length>1?3:3.5}/>`)}</svg>`}function aP(e,t,n,r){if(!e?.length)return j;let i=e=>{let t=T({"history-ref":!0,[`is-${e.kind}`]:!0,"is-default":e.main===!0,"is-shown":e.kind===n.kind&&e.name===n.name}),i=k`${e.kind===`tag`?O(Ki):e.kind===`pull`?O(sa):j}<span>${e.name}</span>`;return e.kind===`pull`&&r?k`<a class="${t}" href="${`${r}/pull/${e.number}`}" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-label="${`Pull request ${e.name} on GitHub`}">${i}</a>`:k`<span class="${t}">${i}</span>`},a=e.slice(TN);return k`<span class="history-refs" style="${E({"--ref":`var(--lane-${t})`})}">${e.slice(0,TN).map(i)}${a.length>0?k`<span class="history-ref is-more" data-tooltip="${a.map(e=>e.name).join(`, `)}">+${a.length}</span>`:j}</span>`}function oP(e,t){let{repoId:n,commit:r,path:i}=e,a=t===`all`||t===`unmerged`,o=a?`all\0${n}`:`${n}\0${r}\0${i}`,s=(e,o,s=!1)=>vb(n,a?``:r,i,{page:e,all:a,...s?{fresh:!0}:{},...t!==`path`&&e>1?{from:o.next}:{}}).then(e=>{if(!a&&e?.commit!==r)throw Error(`The server answered with another revision's history.`);return GN(e)}),c=t===`path`?null:VN,l=zN(o,s,c);return a&&l.status===`ready`&&!l.refreshing&&!l.sought.has(r)&&!(l.retryAt>Date.now())&&!qN(l.commits,l.pulls??[]).some(e=>e.sha===r)&&BN(o,l,s,c,r),a&&l.status===`error`&&l.code===`github-token-required`?(FN.add(n),oP(e,`revision`)):{mode:t,key:o,entry:l,more:()=>HN(o,l,s,c)}}var sP=e=>oP(e,e.path?`path`:`revision`),cP=e=>{MN.add(e)},lP=e=>{MN.delete(e)};function uP(e){IN().delete(e),LN()}var dP=class extends _a{static properties={repository:{attribute:!1},repo:{attribute:!1},refs:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.repository=null,this.repo=null,this.refs=null,this._drawn=null,this._moreButton=null,this._mode=null}connectedCallback(){super.connectedCallback(),MN.add(this)}disconnectedCallback(){super.disconnectedCallback(),MN.delete(this),this._moreButton&&yN(this._moreButton),this._moreButton=null}updated(){let e=this.querySelector(`.history-more > button`);this._moreButton&&this._moreButton!==e&&yN(this._moreButton),this._moreButton=e,e&&_N(e,t=>{t&&this.readNear(e)})}readNear(e){e===this._moreButton&&e.isConnected&&!e.disabled&&!e.parentElement.querySelector(`[role=alert]`)&&this._mode!==`unmerged`&&e.click()}mode(){let{repoId:e,path:t}=this.repository;return t?`path`:(IN(),FN.has(e)?`revision`:PN)}history(e){return oP(this.repository,e)}layout(e,t,n){let r=this._drawn;if(r?.commits===t.commits&&r.pulls===t.pulls&&r.mode===e&&r.defaultBranch===n)return r.layout;let i=e===`path`,a=t.branches.find(e=>e.name===n)?.sha,o=i?t.commits:iN(e===`unmerged`?KN(t.commits,t.pulls??[],a):qN(t.commits,t.pulls??[])),s=e===`all`?a:e===`revision`?o[0]?.sha:null,c=oN(o,{linear:i,trunk:s&&!i?aN(o,s):null,colors:wN});return this._drawn={commits:t.commits,pulls:t.pulls,mode:e,defaultBranch:n,layout:c},c}pick(e){PN=e,LN()}open(e,t){let{repoId:n,repo:r,path:i}=this.repository,a=t?.find(e=>e.kind===`branch`)??t?.find(e=>e.kind===`tag`);BM({repoId:n,repo:r,path:i,commit:e.sha,bundleTab:`commits`,...a?{revision:{kind:a.kind,name:a.name}}:{}})}keydown(e){let t=[...this.querySelectorAll(`.history-row`)],n=e.target.closest(`.history-row`),r=n?[...n.querySelectorAll(EN)]:[],i=r.indexOf(e.target);if(i===-1)return;let a={ArrowLeft:-1,ArrowRight:1}[e.key],o={ArrowUp:-1,ArrowDown:1}[e.key],s=a?r[i+a]:(o?t[t.indexOf(n)+o]:{Home:t[0],End:t.at(-1)}[e.key])?.querySelector(`.history-commit`);if(s){e.preventDefault();for(let e of this.querySelectorAll(`.history-row :is(${EN})`))e.tabIndex=e===s?0:-1;s.focus()}}render(){if(!this.repository)return j;let{mode:e,key:t,entry:n,more:r}=this.history(this.mode());this._mode=e;let i=n.status===`ready`,a=e===`all`||e===`unmerged`?n.defaultBranch:this.refs?.status===`ready`?this.refs.value.defaultBranch??null:null,o=i?this.layout(e,n,a):null,s=e===`unmerged`?o?.rows.length??0:n.commits?.length??0,c=e===`unmerged`&&o?new Set(o.rows.map(e=>e.commit.sha)):null,l=i&&e===`all`?n.branches.length:c?n.branches.filter(e=>c.has(e.sha)).length:0,u=i?`${s}${n.more||n.cut?`+`:``} commit${s===1?``:`s`}`:``,d=FN.has(this.repository.repoId);return k`<div class="history-bar">${yM(`commits`)} ${e===`path`?k`<span class="history-scope">Commits touching <code>${this.repository.path}</code></span>`:d?k`<span class="history-scope">Every branch needs your GitHub sign-in.</span>`:k`<div class="history-modes" role="group" aria-label="Branches"><button type="button" aria-pressed="${String(e===`all`)}" @click="${()=>this.pick(`all`)}">All branches</button> <button type="button" aria-pressed="${String(e===`unmerged`)}" @click="${()=>this.pick(`unmerged`)}">Unmerged</button></div>`} ${i?k`<span class="history-summary">${u}${l>0?` on ${l} branch${l===1?``:`es`}`:``}</span>`:j}</div>${i?this.renderCommits(e,n,r,o,a):n.status===`error`?k`<div class="bundles-slide-placeholder is-error"><p role="alert">${n.error}</p><button type="button" @click="${()=>{IN().delete(t),LN()}}">Retry</button></div>`:k`<div class="bundles-slide-placeholder" role="status">Reading the history…</div>`}`}renderCommits(e,t,n,r,i){if(r.rows.length===0&&(e!==`unmerged`||!t.more&&!t.moreError))return k`<div class="bundles-slide-placeholder">${e===`unmerged`?`Every branch read is merged.`:`No commits.`}</div>`;let a=this.repository.commit,o=QM(this.repository,this.refs),s=QN(t,i),c=Math.max(0,r.rows.findIndex(e=>e.commit.sha===a)),l=CN*2+(r.width-1)*xN,u=this.repo??this.repository.repo,d=u?`https://github.com/${u.split(`/`).map(encodeURIComponent).join(`/`)}`:null;return k`<div class="history-scroll">${e===`all`&&!t.refreshing&&!(t.retryAt>Date.now())&&!r.rows.some(e=>e.commit.sha===a)?k`<p class="history-note"><code>${a.slice(0,7)}</code> isn’t among these commits.</p>`:j}<div class="history-lines" style="${E({"--history-graph":`${l}px`})}">${iP(r,a)}<ol class="history-list" aria-label="Commits" @keydown="${this.keydown}">${r.rows.map(({commit:e,color:t},n)=>{let r=s.get(e.sha),i=e.committedAt==null?null:new Date(e.committedAt),l=e.sha.slice(0,7);return k`<li class="${T({"history-row":!0,"is-shown":e.sha===a})}">${d?k`<a class="history-sha" href="${`${d}/commit/${e.sha}`}" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-label="${`Commit ${l} on GitHub`}">${l}</a>`:k`<code class="history-sha">${l}</code>`} ${aP(r,t,o,d)} <span class="history-subject" id="${`history-subject-${e.sha}`}">${$N(e.subject||`(no message)`,d)}</span> <button type="button" class="history-commit" id="${`history-commit-${e.sha}`}" tabindex="${n===c?0:-1}" aria-labelledby="${`history-subject-${e.sha} history-commit-${e.sha}`}" aria-current="${e.sha===a?`true`:j}" @click="${()=>this.open(e,r)}"><span class="history-author">${Qy(e.authorLogin,e.authorName,e.coauthors)}</span> ${i?k`<time class="history-time" datetime="${i.toISOString()}">${ZN(e.committedAt)}</time>`:k`<span class="history-time"></span>`}</button></li>`})}</ol></div>${t.cut?k`<p class="history-note">Only the first 5,000 branches by name are read.</p>`:j} ${t.more||t.moreError?k`<div class="history-more">${t.moreError?k`<span role="alert">${t.moreError}</span>`:j} <button type="button" ?disabled="${t.loadingMore}" @click="${n}">${t.loadingMore?`Reading…`:`Older commits`}</button></div>`:j}</div>`}};customElements.get(`repository-history`)||customElements.define(`repository-history`,dP);function fP(e){let t=e?.startsWith(`claude/`)?`claude`:e?.startsWith(`codex/`)?`codex`:null,n=t===`claude`?/^claude\/(issue|pr)-([1-9]\d{0,9})-/u.exec(e):null;return{agent:t,issue:n?.[1]===`issue`?Number(n[2]):null,pull:n?.[1]===`pr`?Number(n[2]):null}}var pP=e=>e.head&&e.fork?`${e.fork}:${e.head}`:e.head,mP=e=>[...e.agents,...e.sessions.length>0||e.claude?[`claude`]:[],...e.tasks.length>0||e.codex?[`codex`]:[]],hP=new Set([`claude`,`codex`]);function gP({pulls:e=[],commits:t=[],branches:n=[]}){let r=new Map,i=e=>{let t=e;for(;r.has(t)&&r.get(t)!==t;)t=r.get(t);return r.set(e,t),t},a=(e,t)=>{let[n,a]=[i(e),i(t)];n!==a&&r.set(a,n)},o=new Map,s=(e,t)=>{for(let n of t)o.set(e,new Set([...o.get(e)??[],n]))},c=(e,t)=>{if(i(e),t.agents.length===0)for(let n of t.sessions)a(e,`session:${n}`);if(t.agents.length===0)for(let n of t.tasks)a(e,`task:${n}`);s(e,mP(t))},l=new Set(n.map(e=>e.name));for(let e of n){let t=`branch:${e.name}`;c(t,e.signals);let{agent:n}=fP(e.name);n&&s(t,[n])}let u=new Map;for(let t of e){let e=pP(t);e!==null&&t.number>(u.get(e)??0)&&u.set(e,t.number)}for(let t of e){let e=`pull:${t.number}`;c(e,t.signals);let{agent:n,pull:r}=fP(t.head);n&&s(e,[n]);let i=pP(t);if(t.signals.agents.length>0){i!==null&&u.get(i)===t.number&&a(e,`branch:${i}`);continue}i&&(n||mP(t.signals).length>0||l.has(i))&&a(e,`branch:${i}`),r&&a(e,`pull:${r}`)}for(let e of t)c(`commit:${e.oid}`,e.signals);let d=new Map;for(let e of r.keys()){let t=i(e),n=d.get(t)??{agents:new Set,keys:[]};n.keys.push(e);for(let t of o.get(e)??[])n.agents.add(t);d.set(t,n)}return[...d.values()]}var _P=e=>(t,n)=>(e(t)??0)-(e(n)??0);function vP({agents:e,keys:t},{pulls:n,commits:r,issues:i,branches:a}){if(e.size===0)return null;let o=e=>t.filter(t=>t.startsWith(e)).map(t=>t.slice(e.length)),s=o(`pull:`).flatMap(e=>n.get(Number(e))??[]).toSorted(_P(e=>e.createdAt)),c=o(`commit:`).flatMap(e=>r.get(e)??[]).toSorted(_P(e=>e.at)),l=[...new Set([...o(`branch:`),...s.flatMap(e=>pP(e)??[])])],u=[...new Set([...s.flatMap(e=>e.closes),...s.flatMap(e=>fP(e.head).issue??[]),...o(`branch:`).flatMap(e=>fP(e).issue??[])])].flatMap(e=>i.get(e)??[]).toSorted(_P(e=>e.createdAt)),d=l.flatMap(e=>a.get(e)??[]),f=[...s,...c,...u,...d];if(f.length===0)return null;let[p,m]=[o(`task:`),o(`session:`)],h=f.flatMap(e=>(`createdAt`in e?e.createdAt:e.at)??[]),g=f.flatMap(e=>(`updatedAt`in e?e.updatedAt:e.at)??[]),_=new Set(s.map(e=>e.state)),v=[...s.map(e=>({at:e.createdAt,title:e.title})),...c.map(e=>({at:e.at,title:e.title}))].toSorted(_P(e=>e.at))[0],y=[...s,...c];return{id:m[0]??p[0]??(s[0]?`pull-${s[0].number}`:c[0]?.oid??l[0]??``),agents:[...[...e].filter(e=>!hP.has(e)),...[`claude`,`codex`].filter(t=>e.has(t))],sessions:m,tasks:p,title:v?.title??u[0]?.title??l[0]??``,authors:[...new Set(f.flatMap(e=>e.author??[]))],startedAt:h.length>0?Math.min(...h):null,updatedAt:g.length>0?Math.max(...g):null,state:_.has(`open`)?`open`:_.has(`merged`)||c.length>0?`merged`:_.has(`closed`)?`closed`:`branch`,pulls:s.map(({number:e,title:t,state:n,draft:r})=>({number:e,title:t,state:n,draft:r})).toReversed(),commits:c.map(({oid:e,title:t})=>({oid:e,title:t})).toReversed(),issues:u.map(({number:e,title:t,state:n})=>({number:e,title:t,state:n})),branches:l,commitCount:s.reduce((e,t)=>e+t.commits,0)+c.length,additions:y.reduce((e,t)=>e+t.additions,0),deletions:y.reduce((e,t)=>e+t.deletions,0)}}function yP(e,{branchesSince:t=null}={}){let n={pulls:new Map((e.pulls??[]).map(e=>[e.number,e])),commits:new Map((e.commits??[]).map(e=>[e.oid,e])),issues:new Map((e.issues??[]).map(e=>[e.number,e])),branches:new Map((e.branches??[]).map(e=>[e.name,e]))},r=e=>t!==null&&e.pulls.length===0&&e.commits.length===0&&(e.updatedAt??0)<t;return gP(e).flatMap(e=>vP(e,n)??[]).filter(e=>!r(e)).toSorted(_P(e=>e.updatedAt)).toReversed()}var K=e=>k`<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true">${e}</svg>`,bP=A`<circle cx="8" cy="8" r="6.25"/>`,xP=A`<circle cx="4.5" cy="3.5" r="1.6"/><circle cx="4.5" cy="12.5" r="1.6"/><path d="M4.5 5.1v5.8"/><circle cx="11.5" cy="12.5" r="1.6"/>`,SP={issues:{open:K(A`${bP}<circle class="fill" cx="8" cy="8" r="1.6"/>`),completed:K(A`${bP}<path d="M5.4 8.3l1.8 1.8 3.4-3.7"/>`),"not-planned":K(A`${bP}<path d="M3.9 12.1l8.2-8.2"/>`)},pulls:{open:K(A`${xP}<path d="M11.5 10.9V6.5a2 2 0 0 0-2-2H7.4M8.9 3 7.4 4.5 8.9 6"/>`),draft:K(A`${xP}<path class="dotted" d="M11.5 10.9V4"/>`),merged:K(A`<circle cx="4.5" cy="3.5" r="1.6"/><circle cx="4.5" cy="12.5" r="1.6"/><path d="M4.5 5.1v5.8M4.5 5.1c0 2.4 2.4 3.4 5.4 3.4"/><circle cx="11.5" cy="8.5" r="1.6"/>`),closed:K(A`${xP}<path d="M9.6 3.1l3.8 3.8M13.4 3.1 9.6 6.9"/>`)}},CP=K(A`<path d="M2.6 3.2h10.8v7.3H8l-3.2 2.6v-2.6H2.6z"/>`),wP={success:[`Checks passed`,K(A`<path d="M3.5 8.4l2.9 2.9 6.1-6.6"/>`)],failure:[`Checks failed`,K(A`<path d="M4.2 4.2l7.6 7.6M11.8 4.2l-7.6 7.6"/>`)],pending:[`Checks running`,K(A`<circle class="fill" cx="8" cy="8" r="3"/>`)]},TP={approved:[`Approved`,K(A`${bP}<path d="M5.4 8.3l1.8 1.8 3.4-3.7"/>`)],changes:[`Changes requested`,K(A`<path d="M3.75 1.75h5.5l3 3v9.5h-8.5z"/><path d="M8 4.5v4M6 6.5h4M6 11h4"/>`)],required:[`Review required`,K(A`<path d="M1.25 8S3.75 3.5 8 3.5 14.75 8 14.75 8 12.25 12.5 8 12.5 1.25 8 1.25 8z"/><circle cx="8" cy="8" r="2"/>`)]},EP=K(A`<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"/>`),DP=K(A`<circle cx="4" cy="3" r="1.5"/><circle cx="4" cy="13" r="1.5"/><circle cx="12" cy="3" r="1.5"/><path d="M4 4.5v7m0-3h3a5 5 0 0 0 5-4"/>`),OP=K(A`<circle cx="8" cy="8" r="3"/><path d="M1 8h4m6 0h4"/>`),kP=K(A`<path d="M8 1.75 2.25 4.5v7L8 14.25l5.75-2.75v-7z"/><path d="M2.25 4.5 8 7.25l5.75-2.75M8 7.25v7"/>`);function AP(e,t){return e===`pulls`?t.state===`merged`?[`merged`,`Merged`]:t.state===`closed`?[`closed`,`Closed`]:t.draft?[`draft`,`Draft`]:[`open`,`Open`]:t.state===`open`?[`open`,`Open`]:t.reason===`not-planned`||t.reason===`duplicate`?[`not-planned`,t.reason===`duplicate`?`Closed as duplicate`:`Closed as not planned`]:[`completed`,`Closed`]}var jP={claude:k`<span class="agent-logo" aria-hidden="true">${by(`anthropic`)}</span>`,codex:k`<span class="agent-logo" aria-hidden="true">${by(`openai`)}</span>`,copilot:k`<span class="agent-logo" aria-hidden="true">${by(`github-copilot`)}</span>`},MP={claude:`Claude`,codex:`Codex`},NP=new Map;function PP(e){for(let t of e)NP.set(t.id,t)}var FP=e=>MP[e]??NP.get(e)?.name??e;function IP(e){if(jP[e])return jP[e];let t=NP.get(e)?.avatar;return t?k`<img class="agent-avatar" src="${`/api/avatar/${t}`}" alt="" width="14" height="14" loading="lazy" decoding="async">`:j}var LP=e=>e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey;function RP(e){return e.sessions[0]?`https://claude.ai/code/${e.sessions[0]}`:e.tasks[0]?`https://chatgpt.com/codex/tasks/${e.tasks[0]}`:null}function zP(e,t){return t?e.pulls[0]?`https://github.com/${t}/pull/${e.pulls[0].number}`:e.commits[0]?`https://github.com/${t}/commit/${e.commits[0].oid}`:e.branches[0]?BP(t,e.branches[0]):null:null}function BP(e,t){let[n,r]=t.includes(`:`)?[t.slice(0,t.indexOf(`:`)),t.slice(t.indexOf(`:`)+1)]:[null,t],i=r.split(`/`).map(encodeURIComponent).join(`/`);return n?`https://github.com/${encodeURIComponent(n)}/${encodeURIComponent(e.split(`/`)[1]??``)}/tree/${i}`:`https://github.com/${e}/tree/${i}`}var VP=(e,t)=>RP(e)??zP(e,t),HP=3e5,UP=/^[a-z][a-z\d-]{0,31}$/u,WP=/^(?:app|user)-[1-9]\d{0,11}$/u,GP=3e4,KP=12,qP=new Map,JP=new Set,YP=null,XP=`all`;function ZP(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==YP&&(qP.clear(),YP=e),qP}var QP=()=>{for(let e of JP)e.requestUpdate()};function $P(e){if(!Array.isArray(e?.pulls)||!Array.isArray(e.commits))throw Error(`The server answered with no pull requests or commits.`);let t=(Array.isArray(e.agents)?e.agents:[]).filter(e=>typeof e?.id==`string`&&UP.test(e.id)&&![`claude`,`codex`,`all`].includes(e.id)&&typeof e.name==`string`&&e.name.trim()&&(e.avatar===void 0||typeof e.avatar==`string`&&WP.test(e.avatar))).map(({id:e,name:t,avatar:n})=>[e,{id:e,name:t.trim().slice(0,64),avatar:n??null}]),n=e=>Array.isArray(e?.signals?.sessions)&&Array.isArray(e.signals.tasks),r=e=>({...e,signals:{...e.signals,agents:Array.isArray(e.signals.agents)?e.signals.agents.filter(e=>typeof e==`string`&&UP.test(e)&&![`claude`,`codex`,`all`].includes(e)):[]}});return{pulls:e.pulls.filter(e=>Number.isSafeInteger(e?.number)&&typeof e.title==`string`&&Array.isArray(e.closes)&&n(e)).map(r),commits:e.commits.filter(e=>typeof e?.oid==`string`&&/^[a-f\d]{40}$/u.test(e.oid)&&n(e)).map(r),issues:Array.isArray(e.issues)?e.issues.filter(e=>Number.isSafeInteger(e?.number)):[],branches:Array.isArray(e.branches)?e.branches.filter(e=>typeof e?.name==`string`&&n(e)).map(r):[],agents:[...new Map(t).values()],more:e.more===!0,after:e.more===!0?{pulls:e.after?.pulls??null,commits:e.after?.commits??null}:null}}var eF=e=>Object.assign(e,{sessions:yP(e,{branchesSince:e.after?.pulls?Math.min(...e.pulls.map(e=>e.updatedAt??1/0)):null})});function tF(e,t){return bN(ZP(),e,()=>t(null).then(e=>(PP(e.agents),e)),{ready:e=>eF({status:`ready`,until:Date.now()+HP,...e,loadingMore:!1,moreError:null}),failed:e=>e?.name===`AbortError`?null:{status:`error`,until:Date.now()+GP,error:e?.message||`The agents' work could not be read.`},retryMs:GP,repaint:QP})}function nF(e,t,n){t.loadingMore||!t.more||(t.loadingMore=!0,t.moreError=null,t.until=Date.now()+HP,QP(),n(t.after).then(n=>{if(ZP().get(e)!==t)return null;let r=new Set(t.pulls.map(e=>e.number)),i=new Set(t.commits.map(e=>e.oid));t.pulls=[...t.pulls,...n.pulls.filter(e=>!r.has(e.number))],t.commits=[...t.commits,...n.commits.filter(e=>!i.has(e.oid))],t.more=n.more,t.after=n.after,t.until=Date.now()+HP;let a=t.sessions.length;return eF(t),t.stalled=t.sessions.length<=a,null},e=>(e?.name!==`AbortError`&&(t.moreError=e?.message||`More could not be read.`),null)).finally(()=>{t.loadingMore=!1,QP()}))}function rF(e,t,n){let r=n.trim().toLowerCase().split(/\s+/u).filter(Boolean);return e.filter(e=>{if(t!==`all`&&!e.agents.includes(t))return!1;if(r.length===0)return!0;let n=[e.title,...e.authors,...e.authors.map(By),...e.branches,...e.sessions,...e.tasks,...e.pulls.flatMap(e=>[`#${e.number}`,e.title]),...e.commits.flatMap(e=>[e.oid.slice(0,7),e.title]),...e.issues.flatMap(e=>[`#${e.number}`,e.title])].join(`
|
|
172
|
+
`).toLowerCase();return r.every(e=>n.includes(e))})}var iF={open:`open`,merged:`merged`,closed:`closed`,branch:`draft`},aF=e=>(e.agents??[]).map(e=>e.id).filter(t=>(e.sessions??[]).some(e=>e.agents.includes(t))),oF=e=>[`claude`,`codex`,...aF(e)],sF=[[`pulls`,EP,`pull request`,`pull requests`],[`branches`,DP,`branch`,`branches`],[`commits`,OP,`commit to the default branch without a pull request`,`commits to the default branch without a pull request`]];function cF(e){if(!e.after?.pulls)return 100;let t=Math.max(e.pulls.length,...e.pulls.map(e=>e.number),...(e.issues??[]).map(e=>e.number));return t>0?Math.min(99,Math.floor(100*e.pulls.length/t)):0}function lF(e,t,n){let r=2*Math.PI*9;return k`<span class="${`history-summary read-gauge${n?` is-reading`:``}`}" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="${e}" aria-label="${t}" data-tooltip="${t}"><svg class="read-gauge-ring" viewBox="0 0 22 22" aria-hidden="true"><circle class="read-gauge-track" cx="11" cy="11" r="9"/>${e>0?A`<circle class="read-gauge-arc" cx="11" cy="11" r="9" transform="rotate(-90 11 11)" stroke-dasharray=${`${r*e/100} ${r}`}/>`:j}</svg> ${e===100?k`<svg class="read-gauge-check" viewBox="0 0 16 16" aria-hidden="true"><path d="m4.25 8.5 2.5 2.5 5-5.5"/></svg>`:k`<span class="read-gauge-value" aria-hidden="true">${e}%</span>`}</span>`}function uF(e,t){let n=e.filter(e=>e.agents.includes(t));return{pulls:n.reduce((e,t)=>e+t.pulls.length,0),branches:new Set(n.flatMap(e=>e.branches)).size,commits:n.reduce((e,t)=>e+t.commits.length,0)}}var dF=class extends _a{static properties={repository:{attribute:!1},repo:{attribute:!1},_filter:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.repository=null,this.repo=null,this._filter=``,this._moreButton=null}connectedCallback(){super.connectedCallback(),JP.add(this)}disconnectedCallback(){super.disconnectedCallback(),JP.delete(this),this._moreButton&&yN(this._moreButton),this._moreButton=null}updated(){let e=this.querySelector(`.issues-more > button`);this._moreButton&&this._moreButton!==e&&yN(this._moreButton),this._moreButton=e,e&&_N(e,t=>{t&&this.readNear(e)})}readNear(e){e===this._moreButton&&e.isConnected&&!e.disabled&&!this._filter.trim()&&!e.parentElement.querySelector(`[role=alert]`)&&!this.list().entry.stalled&&e.click()}list(){let{repoId:e}=this.repository,t=`${e}`,n=t=>xb(e,t??{}).then($P),r=tF(t,n);return{key:t,entry:r,more:()=>nF(t,r,n)}}pick(e){XP=e,QP()}render(){if(!this.repository)return j;let{key:e,entry:t,more:n}=this.list(),r=t.status===`ready`,i=r?t.sessions:[],a=e=>r?k`<span class="n">${(e===`all`?i:i.filter(t=>t.agents.includes(e))).length}${t.more?`+`:``}</span>`:j,o=oF(t).includes(XP)?XP:`all`,s=rF(i,o,this._filter);return k`<div class="history-bar issues-bar">${yM(`agents`)}<div class="history-modes" role="group" aria-label="Agents"><button type="button" aria-pressed="${String(o===`all`)}" @click="${()=>this.pick(`all`)}">All${a(`all`)}</button> ${oF(t).map(e=>k`<button type="button" class="${`agent-pick is-${e}`}" aria-pressed="${String(o===e)}" @click="${()=>this.pick(e)}">${IP(e)}${FP(e)}${a(e)}</button>`)}</div><input class="issues-filter" type="search" placeholder="Filter" aria-label="Filter the sessions read" .value="${this._filter}" @input="${e=>{this._filter=e.target.value}}"> ${r?this.renderStats(t):j} ${r?lF(cF(t),`${t.pulls.length} pull request${t.pulls.length===1?``:`s`} read`,t.loadingMore):j}</div>${r?this.renderSessions(t,s,n,o):t.status===`error`?k`<div class="bundles-slide-placeholder is-error"><p role="alert">${t.error}</p><button type="button" @click="${()=>{ZP().delete(e),QP()}}">Retry</button></div>`:k`<div class="bundles-slide-placeholder" role="status">Reading what the agents did…</div>`}`}renderStats(e){let t={pulls:!!e.after?.pulls,branches:!!e.after?.pulls,commits:!!e.after?.commits},n=t=>e.sessions.some(e=>e.agents.includes(t));return k`<span class="agent-totals">${[...aF(e),`claude`,`codex`].filter(n).map(n=>{let r=uF(e.sessions,n);return k`<span class="agent-stats" role="group" aria-label="${FP(n)}"><span class="${`agent-mark is-${n}`}">${IP(n)}</span> ${sF.filter(([e])=>r[e]>0).map(([e,n,i,a])=>{let o=`${r[e].toLocaleString(`en-US`)}${t[e]?`+`:``}`,s=`${o} ${r[e]===1&&!t[e]?i:a}`;return k`<span class="agent-stat" role="img" aria-label="${s}" data-tooltip="${s}">${n}${o}</span>`})}</span>`})}</span>`}renderSessions(e,t,n,r){let i=r===`all`?`agents' sessions`:`${FP(r)} sessions`;return k`<div class="issues-scroll">${t.length>0?k`<ol class="issues-grid" aria-label="Sessions">${t.map(e=>this.renderSession(e))}</ol>`:k`<p class="history-note">${e.sessions.length>0&&this._filter.trim()?`None of the ${i} read match.`:`No ${i} among those read.`}</p>`} ${e.more||e.moreError?k`<div class="history-more issues-more">${e.moreError?k`<span role="alert">${e.moreError}</span>`:j} <button type="button" ?disabled="${e.loadingMore}" @click="${()=>{e.stalled=!1,n()}}">${e.loadingMore?`Reading…`:`More`}</button></div>`:j}</div>`}openSession(e,t){!LP(e)||e.target?.closest?.(`.agent-chip.is-commit`)||(e.preventDefault(),Ze({repository:{...this.repository,repo:this.repo??this.repository.repo},target:{session:t}}))}openItem(e,t,n){LP(e)&&(e.preventDefault(),e.stopPropagation(),Ze({repository:{...this.repository,repo:this.repo??this.repository.repo},target:{number:t,preview:n}}))}renderSession(e){let t=this.repo??this.repository.repo,n=VP(e,t),r=e.updatedAt==null?null:new Date(e.updatedAt),i=e.authors.find(e=>!Uy(e)),a=e.pulls.length+e.commits.length,o=a!==e.pulls.length+e.commits.length,s=r?k`<time datetime="${r.toISOString()}">${ZN(e.updatedAt)}</time>`:j,c=e.additions||e.deletions?k`<span class="issue-diff"><span class="is-added">+${e.additions.toLocaleString(`en-US`)}</span> <span class="is-deleted">−${e.deletions.toLocaleString(`en-US`)}</span></span>`:j,l=a===1,u=[i?k`<span class="issue-author">${Vy(i)}</span>`:j,l?j:s,a===0?k`<span>no pull request</span>`:o?k`<span>${a} tasks</span>`:j,l?j:c].filter(e=>e!==j),d=[...e.pulls.map(e=>[`is-${e.draft&&e.state===`open`?`draft`:e.state}`,`pull/${e.number}`,`#${e.number}`,{kind:`pulls`,...e}]),...e.commits.map(e=>[`is-commit`,`commit/${e.oid}`,k`<code>${e.oid.slice(0,7)}</code>`,null]),...e.issues.map(e=>[`is-issue is-${e.state===`open`?`open`:`merged`}`,`issues/${e.number}`,k`<span class="sr-only">Issue </span>#${e.number}`,{kind:`issues`,reason:null,...e}])];return k`<li class="${`issue-tile agent-tile is-${iF[e.state]}`}"><div class="issue-body" @click="${t=>this.openSession(t,e)}"><span class="issue-rail">${e.agents.map(e=>k`<span class="${`agent-mark is-${e}`}" role="img" aria-label="${FP(e)}">${IP(e)}</span>`)}</span> <span class="issue-lines">${n?k`<a class="issue-name" href="${n}" target="_blank" rel="noopener noreferrer">${e.title||`(no title)`}</a>`:k`<button type="button" class="issue-name">${e.title||`(no title)`}</button>`} ${u.length>0?k`<span class="issue-meta">${u}</span>`:j} ${d.length>0?k`<span class="agent-task-row"><span class="agent-chips">${d.slice(0,KP).map(([e,n,r,i],a)=>k`<a class="${`agent-chip ${e}`}" href="${t?`https://github.com/${t}/${n}`:j}" target="_blank" rel="noopener noreferrer" @click="${i?e=>this.openItem(e,i.number,i):j}" data-rest="${a<d.length-1?d.length-1-a:j}">${r}</a>`)}</span>${l&&(s!==j||c!==j)?k`<span class="issue-meta">${s}${c}</span>`:j}</span>`:j} ${e.branches[0]?k`<span class="issue-branch"><code>${e.branches[0]}</code>${e.branches.length>1?k`<span>+${e.branches.length-1}</span>`:j}</span>`:j}</span></div></li>`}};customElements.get(`repository-agents`)||customElements.define(`repository-agents`,dF);var fF=3e5,pF=3e4,mF=1e3,hF=5,gF=5e3,_F=12,q=864e5,vF=7*q,yF=8,bF=3,xF=[[1,`Week`,`the week before`],[4,`Month`,`the month before`],[13,`Quarter`,`the quarter before`],[52,`Year`,`the year before`]],SF=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],CF=[1,2,3,4,5,6,0],wF=6,TF=new Map,EF=new Map,DF=new Map,OF=new Map,kF=new Set,AF=null,jF=4,MF={pulls:`merged`,issues:`closed`},NF={pulls:[`Pull requests`,[[`merged`,`Merged`,`is:pr is:merged merged:`],[`opened`,`Opened`,`is:pr created:`]]],issues:[`Issues`,[[`closed`,`Closed`,`is:issue is:closed closed:`],[`created`,`Opened`,`is:issue created:`]]]},PF=[`merged`,`opened`,`closed`,`created`],FF=K(A`<circle cx="8" cy="8" r="2.75"/><path d="M8 1v4.25M8 10.75V15"/>`),IF={agent:`Commit with agents`,without:`Commit without agents`,release:`Release`},LF=10,RF=10;function zF(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==AF&&(TF.clear(),EF.clear(),DF.clear(),OF.clear(),AF=e),TF}var BF=()=>{for(let e of kF)e.requestUpdate()},J=e=>Number.isSafeInteger(e)&&e>=0?e:0,VF=(e,t)=>({count:J(e?.[t]?.count),previous:Number.isSafeInteger(e?.[t]?.previous)?e[t].previous:null,items:Array.isArray(e?.[t]?.items)?e[t].items.filter(e=>Number.isSafeInteger(e?.number)&&typeof e.title==`string`):[]});function HF(e){if(!Number.isSafeInteger(e?.since)||!xF.some(([t])=>t===e.weeks))throw Error(`The server answered with no period.`);let t=t=>VF(e,t),n=e=>Array.isArray(e)&&e.length===7&&e.every(Array.isArray)?e.map(([e,t])=>[J(e),J(t)]):null,r=e=>Array.isArray(e)&&e.length===7?e.map(J):null,i=Array.isArray(e.stats?.weeks)?e.stats.weeks.filter(e=>Number.isSafeInteger(e?.week)&&Array.isArray(e.days)).map(e=>({...e,dayLines:n(e.dayLines),agentDays:r(e.agentDays),releaseDays:r(e.releaseDays),directDays:r(e.directDays)})):[],a=e.stats&&Array.isArray(e.stats.weeks)&&Array.isArray(e.stats.contributors)&&Array.isArray(e.stats.punch)?{weeks:i,contributors:e.stats.contributors.filter(e=>(typeof e?.login==`string`||typeof e?.name==`string`)&&Array.isArray(e.weeks)).map(e=>({login:typeof e.login==`string`?e.login:null,id:Number.isSafeInteger(e.id)?e.id:null,name:typeof e.name==`string`?e.name:null,weeks:e.weeks,days:Array.isArray(e.days)?e.days:null})),punch:CF.map(t=>Array.from({length:24},(n,r)=>J(e.stats.punch[t]?.[r]))),periodPunch:e.stats.periodPunch===!0,lines:typeof e.stats.lines==`boolean`?e.stats.lines:null,agents:i.length>0&&i.every(e=>e.agentDays!==null),releases:i.length>0&&i.every(e=>e.releaseDays!==null),direct:i.length>0&&i.every(e=>e.directDays!==null)&&Array.isArray(e.stats.directCommits),directCommits:Array.isArray(e.stats.directCommits)?e.stats.directCommits.filter(e=>typeof e?.sha==`string`&&Number.isSafeInteger(e.at)).map(e=>({sha:e.sha,at:e.at,subject:typeof e.subject==`string`?e.subject:``,login:typeof e.login==`string`?e.login:null,id:Number.isSafeInteger(e.id)?e.id:null,name:typeof e.name==`string`?e.name:null,kind:typeof e.kind==`string`&&Object.hasOwn(IF,e.kind)?e.kind:null})):[]}:null;return{weeks:e.weeks,since:e.since,merged:t(`merged`),opened:t(`opened`),closed:t(`closed`),created:t(`created`),stats:a,reading:Number.isSafeInteger(e.reading)?e.reading:null,pulls:Number.isSafeInteger(e.pulls)?e.pulls:null,pending:e.pending===!0}}function UF(e,t){DF.set(e,t),t.answer.stats&&OF.set(e,t.answer)}var WF=e=>e.reading??e.pulls,GF=e=>WF(e)===null?e.pending?[gF,_F]:null:[mF,hF];function KF(e,t){let n=`${e}\0${t}`;return bN(zF(),n,()=>Ob(e,t).then(HF),{ready:e=>({status:`ready`,until:Date.now()+fF,answer:e,tries:0,asking:!1}),settled:r=>{UF(e,r),GF(r.answer)&&qF(n,r,e,t,GF(r.answer)[0])},failed:e=>e?.name===`AbortError`?null:{status:`error`,until:Date.now()+pF,error:e?.message||`The repository’s pulse could not be read.`},retryMs:pF,repaint:BF})}function qF(e,t,n,r,i){t.asking=!0,setTimeout(()=>{zF().get(e)===t&&Ob(n,r).then(HF).then(i=>{if(zF().get(e)!==t)return null;let a=WF(i)!==null&&WF(t.answer)!==null&&WF(i)>WF(t.answer);t.answer=i,t.until=Date.now()+fF,t.tries=a?0:t.tries+1;let o=GF(i);return o&&t.tries<o[1]?qF(e,t,n,r,o[0]):t.asking=!1,null},()=>(t.asking=!1,null)).finally(BF)},i)}function JF(e,t,n){return zF(),bN(EF,[e,t,n.from,n.to??``,n.authors.join(`,`)].join(`\0`),()=>kb(e,t,n),{ready:e=>({status:`ready`,until:Date.now()+fF,answer:Object.fromEntries(PF.map(t=>[t,VF(e,t)]))}),failed:e=>({status:`error`,until:Date.now()+pF,error:e?.message||`These couldn’t be read.`}),retryMs:pF,repaint:BF})}var YF=e=>e.agents===!0&&e.weeks.some(e=>e.agentDays.some(e=>e>0)),XF=e=>e.releases===!0&&e.weeks.some(e=>e.releaseDays.some(e=>e>0)),ZF=(e,t,n,r=`days`)=>e.reduce((e,i)=>e+i[r].reduce((e,r,a)=>{let o=i.week+a*q;return o>=t&&o<=n?e+J(r):e},0),0);function QF(e,t=Date.now()){let n=Math.floor(t/q)*q;return n-new Date(n).getUTCDay()*q-(e-1)*vF}function $F(e,t,n,r=Date.now()){return{weeks:n,since:e?.since??QF(n,r),merged:e?.merged??null,opened:e?.opened??null,closed:e?.closed??null,created:e?.created??null,stats:{...t.stats,otherPunch:t.weeks!==n},reading:e?.reading??null,pulls:e?.pulls??null,pending:e?.pending??!1}}function eI(e,t=Date.now()){let{stats:n,since:r}=e;if(!n)return{commits:null,previous:null,agents:null,previousAgents:null,releases:null,previousReleases:null,additions:null,deletions:null,authors:null};let i=Math.floor(t/q)*q,a=e.weeks*vF,o=n.weeks.filter(e=>e.week>=r),s=n.weeks.length>0&&n.weeks[0].week<=r-a,c=e=>n.lines===!0?o.reduce((t,n)=>t+J(n[e]),0):null;return{commits:ZF(n.weeks,r,i),previous:s?ZF(n.weeks,r-a,i-a):null,agents:n.agents?ZF(n.weeks,r,i,`agentDays`):null,previousAgents:n.agents&&s?ZF(n.weeks,r-a,i-a,`agentDays`):null,releases:n.releases?ZF(n.weeks,r,i,`releaseDays`):null,previousReleases:n.releases&&s?ZF(n.weeks,r-a,i-a,`releaseDays`):null,additions:c(`additions`),deletions:c(`deletions`),authors:nI(n.contributors,r).length}}function tI({id:e=null,login:t,name:n}){let r=Uy(t,n);if(r)return`agent:${r}`;let i=Fy(t)?.id;return i==null?e===null?t?`@${t.toLowerCase()}`:`=${n}`:`#${e}`:`user:${i}`}function nI(e,t,n=1/0){let r=new Map;for(let i of e){let{login:e,name:a}=i,o=tI(i);r.set(o,(i.days??i.weeks).reduce((e,[r,i,a,o])=>r>=t&&r<n?{...e,commits:e.commits+J(i),additions:e.additions+J(a),deletions:e.deletions+J(o)}:e,r.get(o)??{key:o,login:e,name:a,commits:0,additions:0,deletions:0}))}return[...r.values()].filter(e=>e.commits>0).toSorted((e,t)=>t.commits-e.commits||(e.login??e.name).localeCompare(t.login??t.name))}function rI(e,t){let n=e.contributors.filter(e=>tI(e)===t),r=n.length>0&&n.every(e=>e.days),i=e.weeks.map(({week:e})=>({week:e,days:Array.from({length:7},()=>0),dayLines:Array.from({length:7},()=>[0,0]),agentDays:Array.from({length:7},()=>0),releaseDays:Array.from({length:7},()=>0),directDays:Array.from({length:7},()=>0),commits:0,additions:0,deletions:0}));for(let[e,t,a,o,s,c,l]of n.flatMap(e=>r?e.days:e.weeks)){let n=i[Math.floor((e-(i[0]?.week??0))/vF)];if(!n||(n.commits+=J(t),n.additions+=J(a),n.deletions+=J(o),!r))continue;let u=Math.floor((e-n.week)/q);n.days[u]+=J(t),n.dayLines[u]=[n.dayLines[u][0]+J(a),n.dayLines[u][1]+J(o)],n.agentDays[u]+=J(s),n.releaseDays[u]+=J(c),n.directDays[u]+=J(l)}let a=e.agents===!0&&r&&n.every(e=>e.days.every(e=>e.length>4)),o=e.releases===!0&&r&&n.every(e=>e.days.every(e=>e.length>5)),s=e.direct===!0&&r&&n.every(e=>e.days.every(e=>e.length>6));return{...e,weeks:i,agents:a,releases:o,direct:s,byDays:r}}function iI(e,t,n,r=null,i=Date.now()){let a=r===null?e:rI(e,r);if(!e?.direct||!a.direct)return null;let o=Math.min(n-q,Math.floor(i/q)*q),s=e.directCommits.filter(e=>e.at>=t&&e.at<o+q&&(r===null||tI(e)===r));return{count:ZF(a.weeks,t,o,`directDays`),items:s}}function aI(e,t=Date.now()){let{stats:n,since:r,weeks:i}=e,a=n.lines===!0;if(i>4)return n.weeks.filter(e=>e.week>=r).map(e=>({from:e.week,to:e.week+vF,day:!1,commits:J(e.commits),agents:n.agents?e.agentDays.reduce((e,t)=>e+t,0):null,releases:n.releases?e.releaseDays.reduce((e,t)=>e+t,0):null,additions:a?J(e.additions):null,deletions:a?J(e.deletions):null,future:!1}));let o=Math.floor(t/q)*q;return Array.from({length:i*7},(e,t)=>{let i=r+t*q,s=n.weeks.find(e=>i>=e.week&&i<e.week+vF),c=s?Math.floor((i-s.week)/q):0,l=a?s?.dayLines?.[c]??null:null;return{from:i,to:i+q,day:!0,commits:J(s?.days[c]),agents:n.agents?J(s?.agentDays[c]):null,releases:n.releases?J(s?.releaseDays[c]):null,additions:l?.[0]??null,deletions:l?.[1]??null,future:i>o}})}function oI(e,t){if(!e.day||t.every(e=>e.days))return[e.from,e.to,!1];let n=e.from-new Date(e.from).getUTCDay()*q;return[n,n+vF,!0]}function sI(e){if(!(e>0))return{top:1,ticks:[0,1]};let t=e/3,n=10**Math.floor(Math.log10(t)),r=Math.max(1,[1,2,5,10].map(e=>e*n).find(e=>e>=t)),i=Math.ceil(e/r)*r;return{top:i,ticks:Array.from({length:i/r+1},(e,t)=>t*r)}}var Y=e=>e.toLocaleString(`en-US`),cI=new Intl.NumberFormat(`en-US`,{notation:`compact`,maximumFractionDigits:1}),lI=e=>cI.format(e),uI=(e,t,n=`${t}s`)=>`${Y(e)} ${e===1?t:n}`,dI=(e,t=!1)=>new Date(e).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,...t?{year:`numeric`}:{},timeZone:`UTC`}),fI=e=>new Date(e).toISOString().slice(0,10),pI=(e,t)=>new Date(e).getUTCFullYear()!==new Date(t).getUTCFullYear(),mI=(e,t)=>{let n=Math.floor(t/q)*q,r=pI(e,n);return e>=n?dI(n,r):`${dI(e,r)} \u2013 ${dI(n,r)}`},hI=(e,t)=>e.day?new Date(e.from).toLocaleDateString(`en-US`,{weekday:`short`,month:`short`,day:`numeric`,...pI(e.from,t)?{year:`numeric`}:{},timeZone:`UTC`}):`Week of ${dI(e.from,pI(e.from,t))}`,gI=(e,t,n={})=>`${hI(e,t)}: ${uI(e.commits,`commit`)}${n.agents?`, ${Y(e.agents)} with agents`:``}${n.releases?`, ${uI(e.releases,`release`)}`:``}${e.additions===null?``:`, +${Y(e.additions)} \u2212${Y(e.deletions)} lines`}`;function _I(e,t,n){let r=new Date(e[t].from);if(n===1)return`${r.toLocaleDateString(`en-US`,{weekday:`short`,timeZone:`UTC`})} ${r.getUTCDate()}`;if(n===4)return r.getUTCDay()===0?dI(e[t].from):``;if(n===13)return t%2==0?dI(e[t].from):``;let i=r.getUTCMonth();return(t===0?e.length>3&&new Date(e[3].from).getUTCMonth()===i:new Date(e[t-1].from).getUTCMonth()!==i)?i===0?String(r.getUTCFullYear()):r.toLocaleDateString(`en-US`,{month:`short`,timeZone:`UTC`}):``}var vI=(e,t,n)=>t===null||e===null?null:e===t?`Same as ${n}`:`${e>t?`↑`:`↓`}${t>0?` ${Math.max(1,Math.round(Math.abs(e-t)/t*100))}%`:``} from ${Y(t)} ${n}`,yI=(e,t)=>e===0?0:e===t?100:Math.min(99,Math.max(1,Math.round(e/t*100)));function bI(e,t=!1){let[n,r]=t?[`latest `,`: the year shown is as it was before.`]:[``,`.`];return e.reading===null?e.pulls===null?[`GitHub is still counting this repository\u2019s ${n}commits\u2026`,`GitHub hasn\u2019t counted this repository\u2019s ${n}commits yet.`,`Ask again`]:[`Reading the pull requests merged in this repository\u2026 ${Y(e.pulls)} so far`,`${Y(e.pulls)} of the pull requests merged in this repository read so far${r}`,`Read on`]:[`Reading this repository\u2019s ${n}commits\u2026 ${Y(e.reading)} of the last year so far`,`${Y(e.reading)} of this repository\u2019s commits of the last year read so far${r}`,`Read on`]}var xI=(e,t,n)=>e===t?`Same as ${n}`:`${e>t?`↑`:`↓`} from ${t}% ${n}`,SI=k`<svg 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 13 13 3M5 3h8v8"/></svg>`,CI=e=>e.endsWith(`[bot]`)?`https://github.com/apps/${encodeURIComponent(e.slice(0,-5))}`:`https://github.com/${encodeURIComponent(e)}`,wI=e=>e.login?Wy(e.login,e.name,e.login):Wy(null,e.name),TI=class extends _a{static properties={repository:{attribute:!1},repo:{attribute:!1},_column:{state:!0},_typed:{state:!0},_picked:{state:!0},_everyone:{state:!0},_person:{state:!0},_allDirect:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.repository=null,this.repo=null,this._column=null,this._typed=!1,this._picked=null,this._everyone=!1,this._person=null,this._allDirect=!1}connectedCallback(){super.connectedCallback(),kF.add(this)}disconnectedCallback(){super.disconnectedCallback(),kF.delete(this)}willUpdate(e){!e.has(`repository`)||e.get(`repository`)?.repoId===this.repository?.repoId||(this._column=null,this._picked=null,this._everyone=!1,this._person=null,this._allDirect=!1)}pick(e){jF=e,this._column=null,this._picked=null,this._everyone=!1,this._allDirect=!1,BF()}showList(e,t){MF[e]=t,BF()}askAgain(){let{repoId:e}=this.repository,t=`${e}\0${jF}`,n=zF().get(t);n?.status!==`ready`||n.asking||(n.tries=0,qF(t,n,e,jF,0),BF())}render(){if(!this.repository)return j;let{repoId:e}=this.repository,t=KF(e,jF);t.status===`ready`&&UF(e,t);let n=Date.now(),r=t.status===`ready`?t.answer:null,i=OF.get(e),a=r?.stats?r:i&&t.status!==`error`?$F(r,i,jF,n):r,o=!a&&t.status===`loading`?DF.get(e)??null:null,s=a?{answer:a,asking:t.asking===!0}:o,c=s?.answer.stats&&(WF(s.answer)!==null||s.answer.pending);return k`<div class="history-bar">${yM(`pulse`)}<div class="history-modes" role="group" aria-label="Period">${xF.map(([e,t])=>k`<button type="button" aria-pressed="${String(jF===e)}" @click="${()=>this.pick(e)}">${t}</button>`)}</div>${s?k`<span class="pulse-range">${mI(s.answer.since,n)}</span>`:j} ${c?k`<span class="pulse-updating" role="status">${this.renderWaiting(s,bI(s.answer,!0))}</span>`:j}</div>${s?k`<div class="${`pulse-scroll${o?` is-reading`:``}`}" aria-busy="${String(t.status!==`ready`)}">${this.renderPulse(s,n)}</div>`:t.status===`error`?k`<div class="bundles-slide-placeholder is-error"><p role="alert">${t.error}</p><button type="button" @click="${()=>{zF().delete(`${e}\0${jF}`),BF()}}">Retry</button></div>`:k`<div class="bundles-slide-placeholder" role="status">Reading the repository’s pulse…</div>`}`}renderPulse(e,t){let{answer:n}=e,r=xF.find(([e])=>e===n.weeks)[2],i=eI(n,t),a=this.narrowing(n,t),o=n.stats?null:n.reading===null?n.pulls===null?`Counting…`:`Reading pull requests…`:`Reading commits…`,s=o??(n.stats?.lines===null?`Counting…`:null),c=(e,t,i)=>n[t]?this.renderTile(e,Y(n[t].count),vI(n[t].count,n[t].previous,r),`${Y(n[i].count)} opened`):this.renderTile(e,`–`,`Reading…`,``),l=this.renderLists(n,a,t);return k`<section class="pulse-tiles" aria-label="Figures">${this.renderTile(`Commits`,i.commits===null?`–`:Y(i.commits),o??vI(i.commits,i.previous,r),`to the default branch`)} ${this.renderTile(`Contributors`,i.authors===null?`–`:Y(i.authors),o,`who made them`)} ${c(`Pull requests merged`,`merged`,`opened`)} ${c(`Issues closed`,`closed`,`created`)} ${n.stats?.lines===!1?j:this.renderTile(`Lines`,i.additions===null?`–`:k`<span class="is-added">+${Y(i.additions)}</span> <span class="is-removed">−${Y(i.deletions)}</span>`,s,`added and removed`,i.additions===null?j:this.renderRatio(i.additions,i.deletions))} ${i.agents===null||!YF(n.stats)?j:this.renderAgentsTile(i,r)}</section><div class="${`pulse-grid${l.length>2?` is-lists`:``}`}">${n.stats?k`${this.renderActivity(e,t)}${this.renderContributors(n,t)}`:k`<div class="pulse-pending pulse-wide" role="status">${this.renderWaiting(e,bI(n))}</div>`} ${l} ${n.stats?this.renderPunch(n.stats):j}</div>`}renderAgentsTile(e,t){let n=e.commits-(e.releases??0),r=e.previous===null?null:e.previous-(e.previousReleases??0),i=e.releases>0?`, ${uI(e.releases,`release`)} apart`:``;return this.renderTile(k`<span data-tooltip="${`Commits an agent made or co-authored, or merged from an agent’s branch or a pull request labelled for one; releases, tagged commits changing only package.json, lockfiles and changelogs, counted in neither`}">With agents</span>`,n===0?`–`:`${yI(e.agents,n)}%`,e.previousAgents===null||n===0||!r?null:xI(yI(e.agents,n),yI(e.previousAgents,r),t),n===0?`no commits${i}`:`${Y(e.agents)} of ${uI(n,`commit`)}${i}`)}renderWaiting(e,[t,n,r]){return e.asking?t:k`${n} <button type="button" class="history-link" @click="${()=>this.askAgain()}">${r}</button>`}renderTile(e,t,n,r,i=j){return k`<div class="pulse-tile"><span class="pulse-tile-label">${e}</span> <span class="pulse-tile-value">${t}</span> ${i} <span class="pulse-tile-note">${n??r}</span> ${n?k`<span class="pulse-tile-note">${r}</span>`:j}</div>`}renderRatio(e,t){return e+t===0?j:k`<span class="pulse-ratio" aria-hidden="true">${[[`is-added`,e],[`is-removed`,t]].map(([n,r])=>r>0?k`<span class="${n}" style="${E({"--share":`${r/(e+t)}`})}"></span>`:j)}</span>`}renderActivity(e,t){let{answer:n}=e,r=this._person===null?null:n.stats.contributors.find(e=>tI(e)===this._person)??null,i=r?rI(n.stats,this._person):n.stats,a=aI({...n,stats:i},t),o=a[0]?.day?`day`:`week`,s=r?Gy(r.login,r.name):null,c=r?k`<span>a ${o} by</span><button type="button" class="pulse-picked is-person" aria-label="${`${s}\u2019s: show everyone\u2019s`}" @click="${()=>this.showPerson(null)}">${wI(r)}<span aria-hidden="true">×</span></button>`:k`<span>a ${o}</span>`,l=r&&!i.byDays&&o===`day`?`GitHub counts each contributor’s commits a week, not a day, in a repository this large: the quarter and the year show theirs.`:a.some(e=>e.commits>0)?null:`No commits${r?` by ${s}`:``} in the period.`;if(l)return k`<figure class="pulse-panel pulse-activity"><figcaption class="pulse-head"><h3>Commits</h3>${c}</figcaption><p class="pulse-note">${l}</p></figure>`;let u=sI(Math.max(...a.map(e=>e.commits))),d=i.lines===!0&&a.every(e=>e.additions!==null)?sI(Math.max(...a.flatMap(e=>[e.additions,e.deletions]))):null,f={agents:YF(n.stats)&&a.some(e=>e.agents!==null),releases:XF(n.stats)&&a.some(e=>e.releases!==null)},p=f.agents||f.releases,m=n.weeks===1,h=Math.floor(t/q)*q,g=a[this._column]&&!a[this._column].future?this._column:null,_=a.findIndex(e=>e.from===this._picked),v=(e,r,i,o)=>k`<span class="${`pulse-column${r===g?` is-at`:``}${r===_?` is-picked`:``}${e.future?` is-future`:``}${e.day&&n.weeks===4&&[0,6].includes(new Date(e.from).getUTCDay())?` is-weekend`:``}`}" role="${i?`img`:j}" aria-label="${i?gI(e,t,f):j}" aria-hidden="${i?j:`true`}" @pointerenter="${()=>this.point(e.future?null:r)}" @click="${()=>this.pickColumn(a,r)}">${o}</span>`,y=(e,t)=>m&&!e.future?k`<span class="pulse-figure">${t}</span>`:j,b=(e,t,n=j)=>k`<span class="${`pulse-bar${e}`}" style="${E({"--value":`${t}`})}">${n}</span>`,ee=e=>{let t=f.releases?e.releases:0,n=e.commits-t;return[...f.agents?[[``,e.agents],[` is-without`,n-e.agents]]:[[``,n]],[` is-release`,t]].map(([e,t])=>t>0?k`<span class="${`pulse-part${e}`}" style="${E({"--part":`${t}`})}"></span>`:j)};return k`<figure class="${`pulse-panel pulse-activity${m?` is-written`:``}`}" tabindex="0" aria-label="${`Commits${d?` and lines`:``} a ${o}${r?` by ${s}`:``}: the arrow keys read each ${o}, Enter picks it for its contributors`}" @keydown="${e=>this.readColumns(e,a)}" @focus="${e=>this.focusColumns(e,a)}" @blur="${()=>this.point(null)}"><figcaption class="pulse-head"><h3>Commits</h3>${c}${p?k`<span class="pulse-legend">${f.agents?k`<span class="pulse-key"></span>With agents<span class="pulse-key is-without"></span>Without`:j}${f.releases?k`<span class="pulse-key is-release"></span>Releases`:j}</span>`:j}</figcaption><div class="pulse-plots" @pointerleave="${()=>this.point(null)}"><div class="pulse-plot">${this.renderTicks(u.ticks.map(e=>[e/u.top,lI(e),e===0]))}<div class="pulse-columns">${a.map((e,t)=>v(e,t,!0,k`${y(e,Y(e.commits))}${p?b(` is-split`,e.commits/u.top,ee(e)):b(``,e.commits/u.top)}`))}</div></div>${d?k`<div class="pulse-head is-sub"><h3>Lines</h3><span>added and removed a ${o}</span> <span class="pulse-legend"><span class="pulse-key is-added"></span>Added<span class="pulse-key is-removed"></span>Removed</span></div><div class="pulse-plot is-diverging">${this.renderTicks([[1,`+${lI(d.top)}`],[.5,`0`,!0],[0,`\u2212${lI(d.top)}`]])}<div class="pulse-columns">${a.map((e,t)=>v(e,t,!1,k`<span class="pulse-half">${y(e,`+${lI(e.additions)}`)}${b(` is-added`,e.additions/d.top)}</span> <span class="pulse-half is-below">${b(` is-removed`,e.deletions/d.top)}${y(e,`\u2212${lI(e.deletions)}`)}</span>`))}</div></div>`:i.lines===!1?k`<p class="pulse-note">GitHub doesn’t count lines added and removed in a repository of 10,000 commits or more.</p>`:i.lines===!0?k`<p class="pulse-note">GitHub counts this repository’s lines a week, not a day: the quarter and the year show them.</p>`:k`<p class="pulse-note" role="status">${this.renderWaiting(e,[`GitHub is still counting lines added and removed…`,`GitHub hasn’t counted lines added and removed yet.`,`Ask again`])}</p>`}<div class="${`pulse-axis${m?` is-each`:``}`}" aria-hidden="true">${a.map((e,t)=>k`<span class="${e.future?`is-future`:e.day&&e.from===h?`is-today`:``}">${_I(a,t,n.weeks)}</span>`)}</div>${g===null?j:this.renderTip(n,a,g,t,f,!r)}</div><span class="sr-only" aria-live="polite">${this._typed&&g!==null?gI(a[g],t,f):``}</span></figure>`}renderTip(e,t,n,r,i,a){let o=t[n],s=Math.floor(r/q)*q,[c,l,u]=oI(o,e.stats.contributors),d=a?nI(e.stats.contributors,c,l).slice(0,bF):[],f=(n+.5)/t.length;return k`<div class="${`pulse-tip${f>.6?` is-left`:``}`}" style="${E({"--x":`${f}`})}" aria-hidden="true"><span class="pulse-tip-when">${hI(o,r)}${o.day?o.from===s?k`<span>today</span>`:j:r<o.to?k`<span>so far</span>`:j}</span> <span class="pulse-tip-row"><span class="${`pulse-tip-key${i.agents||i.releases?` is-none`:``}`}"></span><strong>${Y(o.commits)}</strong> ${o.commits===1?`commit`:`commits`}</span> ${i.agents?k`<span class="pulse-tip-row"><span class="pulse-tip-key"></span><strong>${Y(o.agents)}</strong> with agents</span>`:j} ${i.releases?k`<span class="pulse-tip-row"><span class="pulse-tip-key is-release"></span><strong>${Y(o.releases)}</strong> ${o.releases===1?`release`:`releases`}</span>`:j} ${o.additions===null?j:k`<span class="pulse-tip-row"><span class="pulse-tip-key is-added"></span><strong>+${Y(o.additions)}</strong> added</span> <span class="pulse-tip-row"><span class="pulse-tip-key is-removed"></span><strong>−${Y(o.deletions)}</strong> removed</span>`} ${d.length>0?k`<span class="pulse-tip-people">${u?k`<span class="pulse-tip-note">Its week’s</span>`:j} ${d.map(e=>k`<span class="pulse-tip-person">${wI(e)}<strong>${Y(e.commits)}</strong></span>`)}</span>`:j}</div>`}point(e){this._column=e,this._typed=!1}showPerson(e){this._person=e===this._person?null:e,this._column=null,this._allDirect=!1}pickColumn(e,t){let n=e[t];!n||n.future||(this._picked=this._picked===n.from?null:n.from,this._everyone=!1,this._allDirect=!1)}focusColumns(e,t){if(!e.target.matches?.(`:focus-visible`))return;let n=t.findIndex(e=>e.from===this._picked);this._column=n>=0?n:t.findLastIndex(e=>!e.future),this._typed=!0}readColumns(e,t){let n=t.flatMap((e,t)=>e.future?[]:[t]);if(n.length===0)return;let r=t.findIndex(e=>e.from===this._picked),i=n.indexOf(n.includes(this._column)?this._column:n.includes(r)?r:n.at(-1)),a={ArrowLeft:i-1,ArrowRight:i+1,Home:0,End:n.length-1}[e.key];if(a!==void 0)this._column=n[Math.min(Math.max(a,0),n.length-1)];else if(e.key===`Enter`||e.key===` `)this._column=n[i],this.pickColumn(t,n[i]);else if(e.key===`Escape`&&(this._picked!==null||this._column!==null))this._picked=null,this._column=null;else return;this._typed=!0,e.preventDefault()}renderTicks(e){return k`<div class="pulse-ticks" aria-hidden="true">${e.map(([e,t,n])=>k`<span class="${n?`is-zero`:j}" style="${E({"--at":`${e}`})}"><span>${t}</span></span>`)}</div>`}renderContributors(e,t){let{contributors:n}=e.stats,r=aI(e,t).find(e=>e.from===this._picked)??null,[i,a,o]=r?oI(r,n):[e.since,1/0,!1],s=nI(n,i,a),c=s[0]?.commits??1,l=e.stats.lines===!0,u=r?o?`Week of ${dI(i,pI(i,t))}`:hI(r,t):null;return k`<figure class="pulse-panel pulse-people"><figcaption class="pulse-head"><h3>Contributors</h3>${u?k`<button type="button" class="pulse-picked" aria-label="${`${u}: show the whole period\u2019s`}" @click="${()=>{this._picked=null,this._everyone=!1}}">${u}<span aria-hidden="true">×</span></button>`:k`<span>by their commits in the period</span>`}</figcaption>${s.length===0?k`<p class="pulse-note">No commits ${r?o||!r.day?`that week`:`that day`:`in the period`}.</p>`:k`<ol class="${`pulse-ranks${this._person===null?``:` is-picking`}`}">${(this._everyone?s:s.slice(0,yF)).map(e=>k`<li class="${e.key===this._person?`is-person`:j}"><span class="pulse-rank-who"><button type="button" class="pulse-rank-name" aria-pressed="${String(e.key===this._person)}" @click="${()=>this.showPerson(e.key)}">${wI(e)}</button> ${e.login?k`<a class="pulse-rank-profile" href="${CI(e.login)}" target="_blank" rel="noopener noreferrer" aria-label="${`${Gy(e.login,e.name)} on GitHub`}">${SI}</a>`:j}</span> <span class="pulse-rank-bar"><span style="${E({"--value":`${e.commits/c}`})}"></span><span class="pulse-rank-value">${Y(e.commits)}</span></span> ${l?k`<span class="pulse-rank-lines"><span class="is-added">+${lI(e.additions)}</span> <span class="is-removed">−${lI(e.deletions)}</span></span>`:j}</li>`)}</ol>${s.length>yF?k`<button type="button" class="history-link pulse-more" @click="${()=>{this._everyone=!this._everyone}}">${this._everyone?`Fewer`:`and ${uI(s.length-yF,`more`,`more`)}`}</button>`:j}`}</figure>`}renderPunch(e){let{punch:t}=e,n=Math.max(1,...t.flat());return k`<figure class="${`pulse-panel${e.otherPunch?` is-reading`:``}`}" aria-busy="${String(e.otherPunch===!0)}"><figcaption class="pulse-head"><h3>When commits are made</h3><span>by day and hour, in each author’s own time zone${e.periodPunch?``:`, not only the period’s`}</span></figcaption><div class="pulse-punch">${t.map((e,t)=>k`<span class="pulse-punch-day">${SF[CF[t]].slice(0,3)}</span>${e.map((e,r)=>{let i=`${SF[CF[t]]}s, ${String(r).padStart(2,`0`)}:00\u2013${String(r+1).padStart(2,`0`)}:00: ${uI(e,`commit`)}`;return k`<span class="${`pulse-cell is-${e===0?0:Math.ceil(e/n*wF)}`}" role="img" aria-label="${i}" data-tooltip="${i}"></span>`})}`)} <span></span>${Array.from({length:24},(e,t)=>k`<span class="pulse-punch-hour">${t%6==0?`${t}h`:``}</span>`)}</div><div class="pulse-scale" aria-hidden="true">Fewer${Array.from({length:wF},(e,t)=>k`<span class="${`pulse-cell is-${t+1}`}"></span>`)}More</div></figure>`}renderLists(e,t,n){let r=e.stats?iI(e.stats,e.since,1/0,null,n):null,i=r!==null&&r.count>0,a=e.closed&&e.created?e.closed.count+e.created.count:null,o=i&&t?iI(e.stats,t.since??e.since,t.until??1/0,t.person??null,n)??{count:0,items:[]}:r;return[this.renderList(e,`pulls`,t),...i?[this.renderDirect(o,t)]:[],...i&&a===0?[]:[this.renderList(e,`issues`,t)]]}renderDirect(e,t){let n=this.repo??this.repository.repo,r=t?.who?Gy(t.who.login,t.who.name):null,i=t?[r&&`by ${r}`,t.when].filter(Boolean).join(` `):``,a=t?[r&&`by ${r}`,t.when??`in the period`].filter(Boolean).join(` `):`in the period`,o=this._allDirect?e.items:e.items.slice(0,LF),s=Math.max(0,e.count-e.items.length);return k`<section class="pulse-panel pulse-list" aria-label="Direct commits"><div class="pulse-head"><h3 data-tooltip="Commits pushed to the default branch, not merged from a pull request">Direct commits</h3>${t?k`<span class="pulse-narrowed">${i}</span>`:j}<span class="pulse-count">${Y(e.count)}</span></div>${e.count===0?k`<p class="pulse-note">None ${a}.</p>`:k`<ol>${o.map(e=>k`<li><a class="${`pulse-item is-commit${e.kind?` is-${e.kind}`:``}`}" href="${n?`https://github.com/${n}/commit/${e.sha}`:j}" target="_blank" rel="noopener noreferrer"><span class="issue-state" role="img" aria-label="${e.kind?IF[e.kind]:`Commit`}">${FF}</span> <span class="pulse-item-title">${e.subject||`(no message)`}</span> <span class="pulse-item-meta"><span>${e.sha.slice(0,7)}</span><span>${wI(e)}</span><time datetime="${new Date(e.at).toISOString()}">${ZN(e.at)}</time></span></a></li>`)}</ol>`} ${e.items.length>LF?k`<button type="button" class="history-link pulse-more" @click="${()=>{this._allDirect=!this._allDirect}}">${this._allDirect?`Fewer`:`and ${uI(e.items.length-LF,`more`,`more`)}`}</button>`:j} ${s>0?k`<p class="pulse-note">${e.items.length>0?uI(s,`older commit`,`older commits`):uI(s,`commit`)} not listed.</p>`:j}</section>`}narrowing(e,t){let n=this._picked===null||!e.stats?null:aI(e,t).find(e=>e.from===this._picked)??null,r=this._person===null||!e.stats?null:e.stats.contributors.filter(e=>tI(e)===this._person);if(!n&&!r)return null;let i=[...new Set((r??[]).flatMap(e=>e.login?[e.login]:[]))].slice(0,RF);return{from:fI(n?.from??e.since),to:n?fI(n.to-q):null,authors:i,nobody:r!==null&&i.length===0,who:r?.[0]??null,when:n?n.day?`on ${hI(n,t)}`:`in the w${hI(n,t).slice(1)}`:null,since:n?.from??e.since,until:n?.to??1/0,person:r?this._person:null}}renderList(e,t,n=null){let[r,i]=NF[t],[a,,o]=i.find(([e])=>e===MF[t]),s=n&&!n.nobody?JF(this.repository.repoId,e.weeks,n):null,c=n?s?.status===`ready`?s.answer:null:e,{count:l,items:u}=c?.[a]??{count:null,items:null},d=this.repo??this.repository.repo,f=n?n.to===null?`>=${n.from}`:`${n.from}..${n.to}`:`>=${fI(e.since)}`,p=(n?.authors??[]).map(e=>` author:${e.endsWith(`[bot]`)?`app/${e.slice(0,-5)}`:e}`).join(``),m=d?`https://github.com/${d}/${t===`pulls`?`pulls`:`issues`}?q=${encodeURIComponent(`${o}${f}${p}`)}`:null,h=n?.who?Gy(n.who.login,n.who.name):null,g=n?[h&&`by ${h}`,n.when??`in the period`].filter(Boolean).join(` `):`in the period`,_=n?[h&&`by ${h}`,n.when].filter(Boolean).join(` `):``;return k`<section class="pulse-panel pulse-list" aria-label="${r}"><div class="pulse-head"><h3>${r}</h3>${n?k`<span class="pulse-narrowed">${_}</span>`:j}<div class="history-modes" role="group" aria-label="${`${r} shown`}">${i.map(([e,n])=>k`<button type="button" aria-pressed="${String(e===a)}" @click="${()=>this.showList(t,e)}">${n}<span class="n">${c?.[e]?Y(c[e].count):`–`}</span></button>`)}</div></div>${n?.nobody?k`<p class="pulse-note">${h}’s commits name no GitHub account to find their ${r.toLowerCase()} by.</p>`:s?.status===`error`?k`<p class="pulse-note" role="alert">${s.error}</p>`:u===null?k`<p class="pulse-note" role="status">Reading…</p>`:u.length===0?k`<p class="pulse-note">None ${g}.</p>`:k`<ol>${u.map(e=>{let[n,r]=AP(t,e);return k`<li><a class="${`pulse-item is-${n}`}" href="${d?`https://github.com/${d}/${t===`pulls`?`pull`:`issues`}/${e.number}`:j}" target="_blank" rel="noopener noreferrer" @click="${n=>this.openItem(n,t,e)}"><span class="issue-state" role="img" aria-label="${r}">${SP[t][n]}</span> <span class="pulse-item-title">${e.title||`(no title)`}</span> <span class="pulse-item-meta"><span>#${e.number}</span>${e.author?k`<span>${Vy(e.author)}</span>`:j} ${e.at==null?j:k`<time datetime="${new Date(e.at).toISOString()}">${ZN(e.at)}</time>`}</span></a></li>`})}</ol>`} ${m&&u!==null&&l>u.length?k`<a class="pulse-all" href="${m}" target="_blank" rel="noopener noreferrer">All ${Y(l)} on GitHub</a>`:j}</section>`}openItem(e,t,n){LP(e)&&(e.preventDefault(),Ze({repository:{...this.repository,repo:this.repo??this.repository.repo},target:{number:n.number,preview:{...n,kind:t,labels:[],comments:0}}}))}};customElements.get(`repository-pulse`)||customElements.define(`repository-pulse`,TI);var EI=864e5,DI=[100,300,1e3];function OI(e,t){return iN(e).filter(e=>e.parents.length<=1&&Number.isFinite(e.committedAt)).slice(0,t).toReversed()}var kI=1,AI=.08,jI=.6;function MI(e){let t=[];for(let[n,r]of e.entries()){let i=n===0?0:(r.committedAt-e[n-1].committedAt)/EI;t.push(n===0?0:t[n-1]+Math.min(jI,Math.max(AI,i*kI)))}return t}function NI(e){let t=e.slice(e.lastIndexOf(`/`)+1),n=t.lastIndexOf(`.`);return n>0?t.slice(n+1).toLowerCase():``}function PI(e,t,n){let r=new Set(e.values()),i=Array.from({length:n},(e,t)=>t).filter(e=>!r.has(e)),a=[...t].filter(([t])=>t!==``&&!e.has(t)).toSorted((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0]));for(let[t]of a.slice(0,i.length))e.set(t,i.shift());return e}var FI=.9,II=2,LI=1,RI=5,zI=1,BI=.06;function VI(){let e=HI(``,null);return{root:e,dirs:new Map([[``,e]]),files:new Map,going:new Set,users:new Map,beams:[],due:[],layout:!0}}function HI(e,t){return{path:e,name:e.slice(e.lastIndexOf(`/`)+1),parent:t,dirs:[],files:[],depth:t?t.depth+1:0,x:t?.x??0,y:t?.y??0,tx:t?.tx??0,ty:t?.ty??0,cluster:0,radius:0,node:[0,0],at:[0,0],lx:void 0,ly:void 0,packed:!1,dirty:!0,touched:-1/0}}function UI(e,t){let n=e.dirs.get(t);if(n)return n;let r=t.lastIndexOf(`/`),i=UI(e,r===-1?``:t.slice(0,r)),a=HI(t,i),[o,s]=[0,i.dirs.length];for(;o<s;){let e=o+s>>1;i.dirs[e].name<a.name?o=e+1:s=e}return i.dirs.splice(o,0,a),e.dirs.set(t,a),oL(i),e.layout=!0,a}function WI(e,t,n,r){let i=e.files.get(t);if(n===`D`&&!i)return null;if(!i){let a=t.lastIndexOf(`/`),o=UI(e,a===-1?``:t.slice(0,a));i={path:t,name:t.slice(a+1),extension:NI(t),dir:o,ox:0,oy:0,touched:r,kind:n,removed:null},o.files.push(i),e.files.set(t,i),oL(o),e.layout=!0}i.touched=r,i.kind=n,i.removed=n===`D`?i.removed??r:null,n===`D`?e.going.add(i):e.going.delete(i);for(let e=i.dir;e;e=e.parent)e.touched=r;return i}function GI(e,t){let{dir:n}=t;n.files.splice(n.files.indexOf(t),1),e.files.delete(t.path),e.going.delete(t);let r=n;for(;r.parent&&r.files.length===0&&r.dirs.length===0;r=r.parent)r.parent.dirs.splice(r.parent.dirs.indexOf(r),1),e.dirs.delete(r.path);oL(r),e.layout=!0}var KI=e=>e.flatMap(([e,t,n])=>t===`R`?[[n,`D`],[e,`A`]]:[[e,t]]);function qI(e,t,n,r,i){let a=t.map(t=>{let n=e.users.get(t.key)??{...t,x:NaN,y:NaN,active:r};return e.users.set(t.key,n),n.active=r,n}),o=KI(n),s=o.length>1?Math.min(BI,i/o.length):0;for(let[t,[n,i]]of o.entries())e.due.push({at:r+t*s,path:n,kind:i,users:a});e.due.sort((e,t)=>e.at-t.at)}function JI(e,t){for(let[n,r]of KI(t)){let t=WI(e,n,r,-1/0);t&&r===`D`&&GI(e,t)}}function YI(e,t,n,r=[]){let i=new Set([...e.files.values()].filter(e=>e.removed===null).map(e=>e.path));for(let[t,n]of[...e.due.map(e=>[e.path,e.kind]),...r])n===`D`?i.delete(t):i.add(t);let a=new Set(t);return[...t.filter(e=>!i.has(e)).map(e=>[e,`A`]),...n?[]:[...i].filter(e=>!a.has(e)).map(e=>[e,`D`])]}function XI(e,t){let n=0;for(;n<e.due.length&&e.due[n].at<=t;n++){let{at:t,path:r,kind:i,users:a}=e.due[n],o=WI(e,r,i,t);if(o)for(let n of a)e.beams.push({user:n,file:o,kind:i,at:t})}n>0&&e.due.splice(0,n),e.beams=e.beams.filter(e=>t-e.at<FI);for(let n of[...e.going])t-n.removed>=LI&&GI(e,n);for(let[n,r]of e.users)t-r.active>RI+zI&&e.users.delete(n)}var ZI=6,QI=2.2,$I=12,eL=Math.PI*(3-Math.sqrt(5)),tL=46,nL=34,rL=e=>e===0?0:ZI*.62*Math.sqrt(e)+QI;function iL(e){let t=ZI*.62*Math.sqrt(e+.5);return[t*Math.cos(e*eL),t*Math.sin(e*eL)]}function aL(e){sL(e.root),cL(e.root,-e.root.node[0],-e.root.node[1],0),e.layout=!1}function oL(e){for(let t=e;t&&!t.dirty;t=t.parent)t.dirty=!0}function sL(e){if(!e.dirty)return;for(let t of e.dirs)sL(t);e.cluster=Math.max(rL(e.files.length),QI)+$I/2;let t={x:0,y:0,r:e.cluster},n=e.dirs.map(e=>({child:e,x:e.lx,y:e.ly,r:e.radius}));if(e.packed)SL(t,n);else{lL([t,...n.toSorted((e,t)=>t.r-e.r||(e.child.name<t.child.name?-1:1))]);for(let e of n)[e.x,e.y]=[e.x-t.x,e.y-t.y];[t.x,t.y]=[0,0]}let r=mL([t,...n]);e.radius=r.r,e.node=[-r.x,-r.y];for(let e of n)[e.child.lx,e.child.ly]=[e.x,e.y],e.child.at=[e.x-r.x,e.y-r.y];e.packed=!0,e.dirty=!1}function cL(e,t,n,r){let[i,a]=[Math.cos(r),Math.sin(r)],o=([e,r])=>[t+e*i-r*a,n+e*a+r*i];[e.tx,e.ty]=o(e.node);for(let t of e.dirs){let[n,r]=o(t.at);cL(t,n,r,Math.atan2(r-e.ty,n-e.tx))}}function lL(e){let[t,n,r]=e;if(!t||([t.x,t.y]=[0,0],!n)||([t.x,n.x,n.y]=[-n.r,t.r,0],!r))return;uL(n,t,r);let i={c:t},a={c:n},o={c:r};i.next=o.previous=a,a.next=i.previous=o,o.next=a.previous=i;e:for(let t=3;t<e.length;t++){let n=e[t];uL(i.c,a.c,n);let r=a.next,o=a.c.r,s=i.previous,c=i.c.r;do if(o<=c){if(dL(r.c,n)){a=r,i.next=a,a.previous=i,t--;continue e}o+=r.c.r,r=r.next}else{if(dL(s.c,n)){i=s,i.next=a,a.previous=i,t--;continue e}c+=s.c.r,s=s.previous}while(r!==s.next);let l={c:n,previous:i,next:a};i.next=a.previous=a=l;let u=fL(i);for(let e=l.next;e!==a;e=e.next){let t=fL(e);t<u&&([i,u]=[e,t])}a=i.next}}function uL(e,t,n){let[r,i]=[e.x-t.x,e.y-t.y],a=r*r+i*i;if(!a){[n.x,n.y]=[t.x+n.r,t.y];return}let o=(t.r+n.r)**2,s=(e.r+n.r)**2;if(o>s){let t=(a+s-o)/(2*a),c=Math.sqrt(Math.max(0,s/a-t*t));[n.x,n.y]=[e.x-t*r-c*i,e.y-t*i+c*r]}else{let e=(a+o-s)/(2*a),c=Math.sqrt(Math.max(0,o/a-e*e));[n.x,n.y]=[t.x+e*r-c*i,t.y+e*i+c*r]}}var dL=(e,t)=>{let n=e.r+t.r-1e-6;return n>0&&n*n>(t.x-e.x)**2+(t.y-e.y)**2};function fL(e){let[t,n]=[e.c,e.next.c],r=t.r+n.r;return((t.x*n.r+n.x*t.r)/r)**2+((t.y*n.r+n.y*t.r)/r)**2}var pL=64;function mL(e){let t=e.toSorted((e,t)=>TL(`${e.x},${e.y}`)-TL(`${t.x},${t.y}`)),n=[],r=null,i=0;for(let a=0;a<t.length;a++)if(!(r&&vL(r,t[a]))){if(n=gL(n,t[a]),r=yL(n),!Number.isFinite(r.x+r.y+r.r)||++i>pL*t.length)return hL(e);a=-1}return r}function hL(e){let[t,n]=[0,1].map(t=>{let n=e.flatMap(e=>t===0?[e.x-e.r,e.x+e.r]:[e.y-e.r,e.y+e.r]);return(Math.min(...n)+Math.max(...n))/2});return{x:t,y:n,r:Math.max(...e.map(e=>Math.hypot(e.x-t,e.y-n)+e.r))}}function gL(e,t){if(e.every(e=>vL(t,e)))return[t];for(let n of e)if(!_L(t,n)&&e.every(e=>vL(yL([n,t]),e)))return[n,t];for(let[n,r]of e.entries())for(let i of e.slice(n+1))if(!_L(yL([r,i]),t)&&!_L(yL([r,t]),i)&&!_L(yL([i,t]),r)&&e.every(e=>vL(yL([r,i,t]),e)))return[r,i,t];return[...e,t].length<=3?[...e,t]:[t]}var _L=(e,t)=>e.r-t.r>=0&&(e.r-t.r)**2>=(t.x-e.x)**2+(t.y-e.y)**2;function vL(e,t){let n=e.r-t.r+Math.max(e.r,t.r,1)*1e-9;return n>0&&n*n>(t.x-e.x)**2+(t.y-e.y)**2}function yL([e,t,n]){if(!t)return{x:e.x,y:e.y,r:e.r};if(!n){let[n,r,i]=[t.x-e.x,t.y-e.y,t.r-e.r],a=Math.hypot(n,r)||1e-12;return{x:(e.x+t.x+n/a*i)/2,y:(e.y+t.y+r/a*i)/2,r:(a+e.r+t.r)/2}}let[r,i,a,o,s,c]=[e.x-t.x,e.x-n.x,e.y-t.y,e.y-n.y,t.r-e.r,n.r-e.r],l=e.x**2+e.y**2-e.r**2,[u,d]=[l-t.x**2-t.y**2+t.r**2,l-n.x**2-n.y**2+n.r**2],f=i*a-r*o,[p,m,h,g]=[(a*d-o*u)/(f*2)-e.x,(o*s-a*c)/f,(i*u-r*d)/(f*2)-e.y,(r*c-i*s)/f],[_,v,y]=[m**2+g**2-1,2*(e.r+p*m+h*g),p**2+h**2-e.r**2],b=-(Math.abs(_)>1e-6?(v+Math.sqrt(v*v-4*_*y))/(2*_):y/v);return{x:e.x+p+m*b,y:e.y+h+g*b,r:b}}var bL=60,xL=.5;function SL(e,t){let n=t.filter(e=>e.x!==void 0);for(let r of t)r.x===void 0&&(CL(r,e,n),n.push(r));for(let n=0;n<bL;n++){let n=!1;for(let r of t){let t=Math.hypot(r.x,r.y),i=e.r+r.r;if(t>=i-xL)continue;let a=t>1e-6?Math.atan2(r.y,r.x):TL(r.child.name);[r.x,r.y]=[Math.cos(a)*i,Math.sin(a)*i],n=!0}let r=t.toSorted((e,t)=>e.x-e.r-(t.x-t.r));for(let[e,t]of r.entries())for(let i=e+1;i<r.length&&r[i].x-r[i].r<t.x+t.r;i++){let e=r[i],a=t.r+e.r,[o,s]=[e.x-t.x,e.y-t.y];if(Math.abs(s)>=a-xL)continue;let c=Math.hypot(o,s);if(c>=a-xL)continue;let l=c>1e-6?Math.atan2(s,o):TL(e.child.name),[u,d]=[e.r**2,t.r**2].map(n=>n/(t.r**2+e.r**2)*(a-c));[t.x,t.y]=[t.x-Math.cos(l)*u,t.y-Math.sin(l)*u],[e.x,e.y]=[e.x+Math.cos(l)*d,e.y+Math.sin(l)*d],n=!0}if(!n)return}}function CL(e,t,n){let r=r=>Math.hypot(r.x,r.y)>=t.r+e.r-xL&&n.every(t=>Math.hypot(t.x-r.x,t.y-r.y)>=t.r+e.r-xL),i=[],a=(t,n)=>{for(let[r,a]of[[t,n],[n,t]]){let t={r:e.r};uL(r,a,t),i.push(t)}};for(let e of n)a(t,e);let o=n.toSorted((e,t)=>e.x-e.r-(t.x-t.r));for(let[t,n]of o.entries())for(let r=t+1;r<o.length&&o[r].x-o[r].r<n.x+n.r+2*e.r;r++){let t=o[r];Math.hypot(t.x-n.x,t.y-n.y)<n.r+t.r+2*e.r&&a(n,t)}let s=TL(e.child.name);n.length===0&&i.push({x:Math.cos(s)*(t.r+e.r),y:Math.sin(s)*(t.r+e.r)});let c=null;for(let e of i)r(e)&&(!c||Math.hypot(e.x,e.y)<Math.hypot(c.x,c.y))&&(c=e);let l=Math.max(t.r,...n.map(e=>Math.hypot(e.x,e.y)+e.r))+e.r;[e.x,e.y]=c?[c.x,c.y]:[Math.cos(s)*l,Math.sin(s)*l]}function wL(e,t,n=nL){let r=e=>1-Math.exp(-t*e),i=r(3),a=r(6),o=r(2.5);for(let t of e.dirs.values()){t.x+=(t.tx-t.x)*i,t.y+=(t.ty-t.y)*i;for(let[e,n]of t.files.entries()){let[t,r]=iL(e);n.ox+=(t-n.ox)*a,n.oy+=(r-n.oy)*a}}let s=new Map;for(let{user:t,file:n}of e.beams){let e=s.get(t)??s.set(t,{x:0,y:0,count:0}).get(t);e.x+=n.dir.x+n.ox,e.y+=n.dir.y+n.oy,e.count++}for(let[e,t]of s){let[n,r]=[t.x/t.count,t.y/t.count];if(Number.isNaN(e.x)){let t=TL(e.key);[e.x,e.y]=[n+Math.cos(t)*tL*3,r+Math.sin(t)*tL*3]}let i=Math.hypot(e.x-n,e.y-r)||1,[a,s]=[n+(e.x-n)/i*tL,r+(e.y-r)/i*tL];e.x+=(a-e.x)*o,e.y+=(s-e.y)*o}let c=[...e.users.values()].filter(e=>!Number.isNaN(e.x));for(let[e,t]of c.entries())for(let r of c.slice(e+1)){let[e,i]=[r.x-t.x,r.y-t.y],a=Math.hypot(e,i);if(a>=n)continue;let[s,c]=a>0?[e/a,i/a]:[Math.cos(TL(r.key)),Math.sin(TL(r.key))],l=(n-a)/2*o;[t.x,t.y,r.x,r.y]=[t.x-s*l,t.y-c*l,r.x+s*l,r.y+c*l]}}function TL(e){let t=0;for(let n of e)t=t*31+n.codePointAt(0)|0;return(t>>>0)/2**32*2*Math.PI}function EL(e){e.layout&&aL(e);for(let t of e.dirs.values()){t.x=t.tx,t.y=t.ty;for(let[e,n]of t.files.entries())[n.ox,n.oy]=iL(e)}}function DL(e){let t={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0},n=(e,n,r)=>{t.minX=Math.min(t.minX,e-r),t.minY=Math.min(t.minY,n-r),t.maxX=Math.max(t.maxX,e+r),t.maxY=Math.max(t.maxY,n+r)};for(let t of e.dirs.values())n(t.x,t.y,rL(t.files.length)+QI);for(let t of e.users.values())Number.isNaN(t.x)||n(t.x,t.y,14);return t}var OL=[.5,1,2,4,8],kL=20,AL=50,jL=8,ML={side:40,top:64,bottom:40},NL=3,PL=10,FL=11,IL=72,LL=250,RL=1.8,zL=2,BL=new Set([`A`,`M`,`D`,`R`]),VL=/^(?:app|user)-[1-9]\d{0,11}$/u,HL=new Map,UL=new Map,WL=new Set,GL=new Map,KL=new Set,qL=new Map,JL=null,YL=300,XL=1;function ZL(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==JL&&(HL.clear(),UL.clear(),WL.clear(),GL.clear(),JL=e),HL}var QL=()=>{for(let e of KL)e.requestUpdate()},$L=()=>globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches===!0;function eR(e,t){let{repoId:n,commit:r,path:i}=e,a=`${n}\0${r}\0${i}\0${t}`,o=ZL().get(a);if(o)return o;let s={key:a,repoId:n,path:i,count:t,commits:null,times:[],reading:!1,treeReading:!1,error:null,counted:``,counts:new Map,colors:new Map,people:null,scene:VI(),clock:0,next:0,playing:!1,waiting:!1,ended:!1,started:!1};return HL.set(a,s),s}var tR={files:[],cut:!1},nR=e=>e.commits[0]?.parents[0]??null,rR=e=>`${e.repoId}\0${e.path}\0${nR(e)}`,iR=e=>nR(e)?GL.get(rR(e)):tR,aR=(e,t)=>`${e.repoId}\0${e.path}\0${t}`,oR=(e,t)=>UL.get(aR(e,t)),sR=(e,t)=>WL.has(aR(e,t)),cR=(e,t)=>GL.get(aR(e,t)),lR=(e,t)=>!(!oR(e,t.sha)||sR(e,t.sha)&&!cR(e,t.sha));function uR(e){let t=0;for(;t<(e.commits?.length??0)&&lR(e,e.commits[t]);)t++;return t}function dR(e,t){if(!Array.isArray(e)||!BL.has(e[1]))return null;let n=e=>typeof e==`string`&&(t===``||e.startsWith(`${t}/`))?e.slice(t===``?0:t.length+1):null,[r,i,a]=[n(e[0]),e[1],n(e[2])];return!r||i===`R`&&!a?null:i===`R`?[r,i,a]:[r,i]}function fR(e){let t=iR(e),n=e.commits.filter(t=>oR(e,t.sha)),r=`${t?t.files.length:`-`}\0${n.length}`;if(r===e.counted)return;e.counted=r,e.counts=new Map;let i=t=>e.counts.set(NI(t),(e.counts.get(NI(t))??0)+1);for(let e of t?.files??[])i(e);for(let t of n)for(let[n,r]of KI(oR(e,t.sha)))r!==`D`&&i(n);PI(e.colors,e.counts,jL)}function pR(e){if(e.treeReading||e.error)return;let t=[...e.commits.slice(e.next),...e.commits.slice(0,e.next)],n=nR(e)&&!iR(e),r=n?nR(e):t.find(t=>sR(e,t.sha)&&!cR(e,t.sha))?.sha;if(!r)return;e.treeReading=!0;let i=aR(e,r);bb(e.repoId,e.path,r).then(t=>{if(ZL().get(e.key)!==e)return null;let r=Array.isArray(t?.files)?t.files.map(t=>dR([t,`A`],e.path)?.[0]).filter(Boolean):[];return GL.set(i,{files:r,cut:t?.cut===!0||!n&&!Array.isArray(t?.files)}),null},t=>(t?.name!==`AbortError`&&(e.error=t?.message||(n?`The files the commits start from could not be read.`:`The files a commit leaves could not be read.`)),null)).finally(()=>{e.treeReading=!1,QL()})}function mR(e,t,n){let r=oR(e,n.sha),i=sR(e,n.sha)?cR(e,n.sha):null;return i?[...r,...YI(t,i.files,i.cut,KI(r))]:r}function hR(e,t){let n=VI();n.start=iR(e),JI(n,n.start.files.map(e=>[e,`A`]));for(let r of e.commits.slice(0,t))JI(n,mR(e,n,r));return EL(n),n}function gR(e){if(e.reading||e.error||!e.commits)return;let t=uR(e)===0?kL:AL,n=[...e.commits.slice(e.next),...e.commits.slice(0,e.next)].filter(t=>!oR(e,t.sha)).slice(0,t).map(e=>e.sha);n.length!==0&&(e.reading=!0,yb(e.repoId,e.path,n).then(t=>{if(ZL().get(e.key)!==e)return null;let r=new Map((Array.isArray(t?.changes)?t.changes:[]).filter(e=>typeof e?.sha==`string`).map(e=>[e.sha,e]));for(let t of n)UL.set(aR(e,t),Array.isArray(r.get(t)?.files)?r.get(t).files.map(t=>dR(t,e.path)).filter(Boolean):[]),r.get(t)?.more===!0&&WL.add(aR(e,t));return null},t=>(t?.name!==`AbortError`&&(e.error=t?.message||`What the commits changed could not be read.`),null)).finally(()=>{e.reading=!1,QL()}))}function _R(e){let t=new Map;for(let{login:n=null,name:r=null,agent:i=null,avatar:a=null}of[{login:e.authorLogin,name:e.authorName},...e.coauthors??[]]){if(typeof n!=`string`&&typeof r!=`string`)continue;let e=typeof i==`string`&&Object.hasOwn(Gv,i)?i:Uy(n,r),o=e?null:Fy(n),s=e?`agent:${e}`:o?`user:${o.id}`:typeof n==`string`?`login:${n.toLowerCase()}`:`name:${r.toLowerCase()}`;if(t.has(s))continue;let c=e?Gv[e].name:o?o.name??o.login:r??n,l=e?Gv[e].mark??null:null,u=e?!l&&Gv[e].avatar?`/api/avatar/${Gv[e].avatar}`:null:o?`/api/avatar/${encodeURIComponent(o.id)}`:typeof a==`string`&&VL.test(a)?`/api/avatar/${a}`:null;t.set(s,{key:s,label:c,letter:c.trim()[0]?.toUpperCase()??`?`,agent:e,mark:l,image:u})}return[...t.values()]}var vR={anthropic:[qi,4,5,8],openai:[Ji,4,5,8],"github-copilot":[Yi,0,0,24]},yR={claude:[`#d97757`,`#fff`],codex:[`#fff`,`#000`],copilot:[`#0d1117`,`#fff`]},bR=new Map,xR=e=>bR.get(e)??bR.set(e,new Path2D(vR[e][0])).get(e);function SR(e){let t=qL.get(e);return t||(t=new Image,t.decoding=`async`,t.src=e,qL.set(e,t)),t.complete&&t.naturalWidth>0?t:null}var CR=e=>e.toLocaleString(`en-US`),wR=e=>new Date(e).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,year:`numeric`}),TR=e=>e===.5?`½×`:`${e}\xD7`,ER=A`<path d="M5 3.25v9.5L12.75 8z" fill="currentColor"/>`,DR=A`<path d="M5.25 3.5v9M10.75 3.5v9"/>`,OR=A`<path d="M3.25 8a4.75 4.75 0 1 0 1.4-3.36M3.25 2.5v2.75H6"/>`,kR=class extends _a{static properties={repository:{attribute:!1},repo:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.repository=null,this.repo=null,this.replay=null,this._frame=null,this._last=0,this._camera=null,this._colors=null,this._themes=null,this._resize=null,this._restless=0,this._laidOut=-1/0,this._pointer=null,this._hovered=null,this._shownNext=-1}connectedCallback(){super.connectedCallback(),KL.add(this),cP(this),this._themes=new AbortController,globalThis.addEventListener(`deepview-theme-changed`,()=>this.themeChanged(),{signal:this._themes.signal}),this._resize=globalThis.ResizeObserver?new ResizeObserver(()=>{this.restless()}):null,this._resize?.observe(this),this._last=performance.now(),this._frame=requestAnimationFrame(e=>this.frame(e))}disconnectedCallback(){super.disconnectedCallback(),KL.delete(this),lP(this),this._themes?.abort(),this._resize?.disconnect(),cancelAnimationFrame(this._frame),this._frame=null,this.replay&&![...KL].some(e=>e.replay===this.replay)&&(this.replay.playing=!1)}updated(){let e=this.replay;if(!e)return;if(this.restless(),!e.commits){let{entry:t,more:n}=sP(this.repository);if(t.status!==`ready`)return;if(t.commits.filter(e=>e.parents.length<=1&&Number.isFinite(e.committedAt)).length<e.count&&t.more){!t.loadingMore&&!t.moreError&&n();return}e.commits=OI(t.commits,e.count),e.times=MI(e.commits)}pR(e),gR(e);let t=iR(e);t&&(fR(e),e.scene.start!==t&&this.seek(e.next),!e.started&&uR(e)>0&&(e.started=!0,e.playing=!$L(),this.requestUpdate()))}pickCount(e){YL=e,QL()}pickSpeed(e){XL=e,QL()}toggle(){let e=this.replay;e?.commits?.length&&(e.ended?(this.seek(0),e.playing=!0):e.playing=!e.playing,e.started=!0,this.requestUpdate())}seek(e){let t=this.replay;if(!t?.commits||!iR(t))return;let n=Math.max(0,Math.min(e,uR(t)));Object.assign(t,{scene:hR(t,n),next:n,clock:n>0?t.times[n-1]:-.001,ended:!1,waiting:!1}),this._camera=null,this.requestUpdate()}restless(){this._restless=performance.now()+3e3}themeChanged(){this.readColors(),this.restless(),this.replay&&this.draw(this.replay,0)}frame(e){this._frame=requestAnimationFrame(e=>this.frame(e));let t=Math.min(.1,Math.max(0,(e-this._last)/1e3));this._last=e;let n=this.replay;n&&(n.playing&&n.commits&&this.play(n,t),n.next!==this._shownNext&&(this._shownNext=n.next,this.requestUpdate()),this._colors||this.readColors(),(n.playing||e<this._restless)&&(XI(n.scene,n.clock),n.scene.layout&&e-this._laidOut>=LL&&(aL(n.scene),this._laidOut=e),wL(n.scene,t,Math.max(nL,IL/(this._camera?.zoom??1))),this.draw(n,t)))}play(e,t){let n=e.clock+t*XL,r=e.waiting;for(e.waiting=!1;e.next<e.commits.length&&e.times[e.next]<=n;){let t=e.commits[e.next];if(!lR(e,t)){n=e.times[e.next],e.waiting=!0;break}let r=e.times[e.next],i=(e.times[e.next+1]??r+jI)-r;qI(e.scene,_R(t),mR(e,e.scene,t),r,i*.8),e.next++}e.clock=n,e.next>=e.commits.length&&n>(e.times.at(-1)??0)+zL&&(e.playing=!1,e.ended=!0),(r!==e.waiting||e.ended)&&this.requestUpdate()}readColors(){let e=this.querySelector(`.replay-swatches`);if(!e)return;let t=t=>getComputedStyle(e.querySelector(`.is-${t}`)).color,n={background:t(`background`),text:t(`text`),muted:t(`muted`),surface:t(`surface`),added:t(`added`),modified:t(`modified`),removed:t(`removed`),kinds:Array.from({length:jL},(e,n)=>t(`kind-${n}`)),font:getComputedStyle(this).fontFamily},r=Object.assign(document.createElement(`canvas`),{width:1,height:1}).getContext(`2d`,{willReadFrequently:!0});n.pixels=new Map([n.muted,...n.kinds].map(e=>(r.clearRect(0,0,1,1),r.fillStyle=e,r.fillRect(0,0,1,1),[e,[...r.getImageData(0,0,1,1).data]]))),this._colors=n}draw(e,t){let n=this.querySelector(`canvas`),r=this._colors;if(!n||!r)return;let{clientHeight:i,clientWidth:a}=n;if(a===0||i===0)return;let o=globalThis.devicePixelRatio||1;(n.width!==Math.round(a*o)||n.height!==Math.round(i*o))&&(n.width=Math.round(a*o),n.height=Math.round(i*o));let s=n.getContext(`2d`);if(!s)return;s.setTransform(o,0,0,o,0,0),s.clearRect(0,0,a,i);let{scene:c,clock:l}=e,u=this.aim(c,a,i,t),d=e=>(e-u.x)*u.zoom+a/2,f=e=>(e-u.y)*u.zoom+i/2,p=e=>d(e.dir.x+e.ox),m=e=>f(e.dir.y+e.oy);s.lineCap=`round`,s.strokeStyle=r.muted,s.globalAlpha=.35,s.lineWidth=Math.max(1,Math.min(2.5,1.5*u.zoom)),s.beginPath();for(let e of c.dirs.values())e.parent&&(s.moveTo(d(e.parent.x),f(e.parent.y)),s.lineTo(d(e.x),f(e.y)));s.stroke();let h=Math.max(1.2,QI*u.zoom),g=h<RL,_=t=>e.colors.has(t.extension)?r.kinds[e.colors.get(t.extension)]:r.muted,v=[],y=new Map;for(let e of c.files.values()){if(e.removed!==null||l-e.touched<II){v.push(e);continue}let[t,n]=[p(e),m(e)];if(t<-h||n<-h||t>a+h||n>i+h)continue;let r=_(e);(y.get(r)??y.set(r,[]).get(r)).push(t,n)}if(g)s.globalAlpha=1,s.drawImage(this.dotLayer(n,y,o,h*o,.85),0,0,a,i);else{s.globalAlpha=.85;for(let[e,t]of y){s.fillStyle=e,s.beginPath();for(let e=0;e<t.length;e+=2)s.moveTo(t[e]+h,t[e+1]),s.arc(t[e],t[e+1],h,0,2*Math.PI);s.fill()}}for(let e of v){let t=Math.max(0,1-(l-e.touched)/II),n=e.removed===null?1:Math.max(0,1-(l-e.removed)/LI);s.globalAlpha=.85*n+.15*t,s.fillStyle=_(e),s.beginPath(),s.arc(p(e),m(e),h*(1+t)*n,0,2*Math.PI),s.fill()}s.lineWidth=1.5;for(let e of c.beams)Number.isNaN(e.user.x)||(s.globalAlpha=Math.max(0,1-(l-e.at)/FI)*.85,s.strokeStyle=e.kind===`A`?r.added:e.kind===`D`?r.removed:r.modified,s.beginPath(),s.moveTo(d(e.user.x),f(e.user.y)),s.lineTo(p(e.file),m(e.file)),s.stroke());let b=(e,t,n)=>{s.strokeText(e,t,n),s.fillText(e,t,n)};s.lineJoin=`round`,s.globalAlpha=1,s.textBaseline=`middle`,s.font=`11px ${r.font}`,s.fillStyle=r.muted,s.strokeStyle=r.background,s.lineWidth=3;for(let e of c.dirs.values())!e.parent||e.depth>1&&l-e.touched>II||b(e.name,d(e.x)+Math.max(6,(rL(e.files.length)+3)*u.zoom),f(e.y));let ee=v.filter(e=>e.removed===null);if(ee.length<=PL){s.fillStyle=r.text;for(let e of ee)s.globalAlpha=Math.max(0,1-(l-e.touched)/II),b(e.name,p(e)+h*2+3,m(e))}s.textAlign=`center`;for(let e of c.users.values()){if(Number.isNaN(e.x))continue;let[t,n]=[d(e.x),f(e.y)];s.globalAlpha=Math.max(0,Math.min(1,1-(l-e.active-RI)/zI));let[i,a]=Object.hasOwn(yR,e.agent)?yR[e.agent]:[r.surface,r.text];s.fillStyle=i,s.beginPath(),s.arc(t,n,FL,0,2*Math.PI),s.fill();let o=e.image?SR(e.image):null;if(e.mark&&Object.hasOwn(vR,e.mark)){let[,r,i,o]=vR[e.mark],c=FL*2*.62;s.save(),s.translate(t-c/2,n-c/2),s.scale(c/o,c/o),s.translate(-r,-i),s.fillStyle=a,s.fill(xR(e.mark)),s.restore(),s.beginPath(),s.arc(t,n,FL,0,2*Math.PI)}else o?(s.save(),s.clip(),s.drawImage(o,t-FL,n-FL,FL*2,FL*2),s.restore()):(s.fillStyle=r.text,s.font=`600 11px ${r.font}`,s.fillText(e.letter,t,n+.5));s.strokeStyle=r.muted,s.lineWidth=1,s.stroke(),s.fillStyle=r.text,s.strokeStyle=r.background,s.lineWidth=3,s.font=`11px ${r.font}`,b(e.label,t,n+FL+9)}s.textAlign=`start`,s.globalAlpha=1,this.hover(c,d,f,p,m,h)}dotLayer(e,t,n,r,i){let[a,o]=[e.width,e.height];if(this._dots?.wide!==a||this._dots?.high!==o){let e=new ImageData(a,o);this._dots={wide:a,high:o,image:e,pixels:new Uint32Array(e.data.buffer),layer:Object.assign(document.createElement(`canvas`),{width:a,height:o})}}let{image:s,pixels:c,layer:l}=this._dots;c.fill(0);for(let[e,s]of t){let[t,l,u,d]=this._colors.pixels.get(e)??[128,128,128,255],f=(Math.round(d*i)<<24|u<<16|l<<8|t)>>>0;for(let e=0;e<s.length;e+=2){let t=s[e]*n,i=s[e+1]*n,l=Math.max(0,Math.round(t-r)),u=Math.min(a,Math.round(t+r)),d=Math.min(o,Math.round(i+r));for(let e=Math.max(0,Math.round(i-r));e<d;e++)for(let t=e*a+l,n=e*a+u;t<n;t++)c[t]=f}}return l.getContext(`2d`).putImageData(s,0,0),l}aim(e,t,n,r){let i=DL(e),a=Number.isFinite(i.minX),o=a?Math.max(.02,Math.min(NL,(t-2*ML.side)/Math.max(1,i.maxX-i.minX),(n-ML.top-ML.bottom)/Math.max(1,i.maxY-i.minY))):1,s={x:a?(i.minX+i.maxX)/2:0,y:a?(i.minY+i.maxY)/2-(ML.top-ML.bottom)/2/o:0,zoom:o};if(this._camera){let e=1-Math.exp(-r*1.8);this._camera.x+=(s.x-this._camera.x)*e,this._camera.y+=(s.y-this._camera.y)*e,this._camera.zoom=Math.exp(Math.log(this._camera.zoom)+(Math.log(s.zoom)-Math.log(this._camera.zoom))*e)}else this._camera=s;return this._camera}hover(e,t,n,r,i,a){let o=this._pointer,s=null;if(o){let c=(e,t)=>Math.hypot(e-o.x,t-o.y),l=[...e.users.values()].find(e=>!Number.isNaN(e.x)&&c(t(e.x),n(e.y))<=FL+2),u=a+4,d=null;if(!l)for(let t of e.files.values()){let e=c(r(t),i(t));e<=u&&([u,d]=[e,t])}let f=l||d?null:[...e.dirs.values()].find(e=>e.parent&&c(t(e.x),n(e.y))<=6);s=l?l.label:d?this.pathName(d.path):f?`${this.pathName(f.path)}/`:null}let c=s?{text:s,x:o.x,y:o.y}:null;(c?.text!==this._hovered?.text||c?.x!==this._hovered?.x||c?.y!==this._hovered?.y)&&(this._hovered=c,this.requestUpdate())}pathName(e){return this.repository.path?`${this.repository.path}/${e}`:e}pointer(e){let t=e.currentTarget.getBoundingClientRect();this._pointer=e.type===`pointerleave`?null:{x:e.clientX-t.left,y:e.clientY-t.top},this.restless()}render(){if(!this.repository)return j;let e=eR(this.repository,YL);this.replay&&this.replay!==e&&(this.replay.playing=!1),this.replay=e;let t=e.commits?null:sP(this.repository),n=e.commits?.length??0,r=uR(e),i=e.next>0?e.commits[e.next-1]:null,a=e.commits?e.people??=new Set(e.commits.flatMap(e=>_R(e).map(e=>e.key))).size:0,o=(e.commits?iR(e):null)?.cut||e.commits?.some(t=>sR(e,t.sha)&&cR(e,t.sha)?.cut),s=e.commits&&n>0?`${CR(n)} commit${n===1?``:`s`} by ${CR(a)}, ${wR(e.commits[0].committedAt)} \u2013 ${wR(e.commits.at(-1).committedAt)}${o?`, drawn in part: more files than are read`:``}`:``;return k`<div class="history-bar">${yM(`replay`)}<div class="history-modes" role="group" aria-label="Commits played">${DI.map(e=>k`<button type="button" aria-pressed="${String(YL===e)}" @click="${()=>this.pickCount(e)}">Last ${CR(e)}</button>`)}</div>${s?k`<span class="history-summary">${s}</span>`:j}</div><div class="replay-stage"><canvas class="replay-canvas" role="img" aria-label="${i?`The repository\u2019s files as of ${wR(i.committedAt)}, ${CR(e.next)} of ${CR(n)} commits played`:`The repository’s files, as its commits change them`}" @pointermove="${this.pointer}" @pointerleave="${this.pointer}"></canvas>${i?k`<div class="replay-day"><time datetime="${new Date(i.committedAt).toISOString()}">${wR(i.committedAt)}</time> <span>${CR(e.next)} of ${CR(n)}</span></div>${this.renderCommit(i)}`:j} ${this.renderKey(e)} ${this.renderStatus(e,t,r)} ${this._hovered?k`<div class="replay-tip" style="${E({left:`${this._hovered.x}px`,top:`${this._hovered.y}px`})}">${this._hovered.text}</div>`:j}<div class="replay-swatches" aria-hidden="true">${[`background`,`text`,`muted`,`surface`,`added`,`modified`,`removed`,...Array.from({length:jL},(e,t)=>`kind-${t}`)].map(e=>k`<span class="${`is-${e}`}"></span>`)}</div></div>${this.renderControls(e,n,r)}`}renderCommit(e){let t=this.repo??this.repository.repo,n=t?`https://github.com/${t.split(`/`).map(encodeURIComponent).join(`/`)}`:null,r=e.sha.slice(0,7);return k`<p class="replay-commit">${n?k`<a class="replay-sha" href="${`${n}/commit/${e.sha}`}" target="_blank" rel="noopener noreferrer" aria-label="${`Commit ${r} on GitHub`}">${r}</a>`:k`<code class="replay-sha">${r}</code>`} <span class="replay-commit-subject">${$N(e.subject||`(no message)`,n)}</span> <span class="replay-commit-author">${Qy(e.authorLogin,e.authorName,e.coauthors)}</span></p>`}renderKey(e){if(e.colors.size===0)return j;let t=[...e.colors].toSorted((t,n)=>(e.counts.get(n[0])??0)-(e.counts.get(t[0])??0));return k`<ul class="replay-key" aria-label="Kinds of files">${t.map(([e,t])=>k`<li><span class="${`replay-dot is-kind-${t}`}"></span>.${e}</li>`)}<li><span class="replay-dot is-muted"></span>Other</li><li class="replay-beams"><span class="replay-beam is-added"></span>Added</li><li><span class="replay-beam is-modified"></span>Modified</li><li><span class="replay-beam is-removed"></span>Removed</li></ul>`}renderStatus(e,t,n){if(t?.entry.status===`error`)return k`<div class="replay-status is-error"><p role="alert">${t.entry.error}</p><button type="button" @click="${()=>uP(t.key)}">Retry</button></div>`;if(e.error)return k`<div class="replay-status is-error"><p role="alert">${e.error}</p><button type="button" @click="${()=>{e.error=null,QL()}}">Retry</button></div>`;if(t?.entry.status===`ready`&&t.entry.moreError)return k`<div class="replay-status is-error"><p role="alert">${t.entry.moreError}</p><button type="button" @click="${()=>t.more()}">Retry</button></div>`;if(t){let e=t.entry.status===`ready`?t.entry.commits.length:0;return k`<div class="replay-status" role="status">${e>0?`Reading commits\u2026 ${CR(e)} so far`:`Reading the history…`}</div>`}return e.commits.length===0?k`<div class="replay-status">No commits to play.</div>`:iR(e)?n===0?k`<div class="replay-status" role="status">Reading what the commits changed…</div>`:e.waiting?k`<div class="replay-status is-waiting" role="status">Reading what the next commits changed…</div>`:j:k`<div class="replay-status" role="status">Reading the files as they were before ${wR(e.commits[0].committedAt)}…</div>`}renderControls(e,t,n){let r=e.ended?`Play again`:e.playing?`Pause`:`Play`,i=n>0&&!!(e.commits&&iR(e)),a=e=>`${t>0?e/t*100:0}%`;return k`<div class="replay-controls"><button type="button" class="replay-play" aria-label="${r}" ?disabled="${!i}" @click="${()=>this.toggle()}"><svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e.ended?OR:e.playing?DR:ER}</svg></button><div class="replay-track" style="${E({"--buffered":a(n),"--played":a(e.next)})}"><input type="range" min="0" max="${t}" step="1" .value="${String(e.next)}" aria-label="Commits played" ?disabled="${!i}" aria-valuetext="${`${CR(e.next)} of ${CR(t)} commits`}" @input="${e=>this.seek(Number(e.target.value))}"></div><div class="history-modes" role="group" aria-label="Speed">${OL.map(e=>k`<button type="button" aria-pressed="${String(XL===e)}" @click="${()=>this.pickSpeed(e)}">${TR(e)}</button>`)}</div></div>`}};customElements.get(`repository-replay`)||customElements.define(`repository-replay`,kR);var AR=new Map,jR=new Set,MR=null;function NR(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==MR&&(AR.clear(),MR=e),AR}var PR=()=>{for(let e of jR)e.requestUpdate()};function FR({repoId:e,commit:t,path:n}){let r=`${e}\0${t}\0${n}`,i=NR().get(r);if(i)return i;let a={key:r,status:`loading`};return AR.set(r,a),bb(e,n,t).then(e=>{if(e?.files===null)throw Error(`GitHub has no files at this commit.`);if(!Array.isArray(e?.files)||!Array.isArray(e.sizes)||e.sizes.length!==e.files.length)throw Error(`The server answered with no files.`);let t=new Map(e.files.map((t,n)=>[t,Number.isSafeInteger(e.sizes[n])&&e.sizes[n]>0?e.sizes[n]:0]));return AR.get(r)===a&&AR.set(r,{key:r,status:`ready`,cut:e.cut===!0,details:{integrity:`tree\0${r}`,kind:`tree`,metadataOnly:!0,listedOnly:!0,fileSizes:t}}),null}).catch(e=>{AR.get(r)===a&&(e?.name===`AbortError`?AR.delete(r):AR.set(r,{key:r,status:`error`,error:e?.message||`Its files could not be read.`}))}).finally(PR),a}var IR=class extends _a{static properties={repository:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.repository=null}connectedCallback(){super.connectedCallback(),jR.add(this)}disconnectedCallback(){jR.delete(this),super.disconnectedCallback()}render(){if(!this.repository?.commit)return j;let e=FR(this.repository);return e.status===`error`?k`<div class="bundles-slide-placeholder is-error"><p role="alert">${e.error}</p><button type="button" @click="${()=>{AR.delete(e.key),PR()}}">Retry</button></div>`:e.status===`ready`?k`${e.cut?k`<p class="history-note">Only the ${e.details.fileSizes.size.toLocaleString(`en-US`)} files nearest its root are drawn.</p>`:j}<bundle-treemap .details="${e.details}"></bundle-treemap>`:k`<div class="bundles-slide-placeholder" role="status">Reading its files…</div>`}};customElements.define(`repository-treemap`,IR);var LR=3e5,RR=3e4,zR=2,BR=20,VR=new Map,HR=[],UR=[],WR=new Map,GR=new Set,KR=null,qR=0;function JR(e){return GR.add(e),()=>GR.delete(e)}var YR=e=>{for(let t of GR)t(e)};function XR(){VR.clear(),HR.length=0,UR.length=0,WR.clear()}globalThis.addEventListener?.(`dependency-review-changed`,()=>{XR(),YR()});function ZR(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==KR&&(XR(),KR=e),VR}var QR=e=>e?.touchesLockfile===!0||e?.touchesLockfile===null,$R=e=>Number.isSafeInteger(e)&&e>=0?e:null,ez=new Set([`git`,`tarball`,`integrity`]);function tz(e){if(typeof e?.name!=`string`)return[];let{was:t,reviews:n,rejected:r,commented:i,baseline:a,reviewed:o,unsupported:s,patched:c,...l}=e;return[{...l,...Array.isArray(t)&&t.length>0&&t.every(e=>typeof e==`string`)?{was:t}:{},...c===!0?{patched:c}:{},...ez.has(s)?{unsupported:s}:a===!0?{baseline:a}:o===!0?{reviewed:o}:$R(n)===null?{}:{reviews:n,...r===!0?{rejected:r}:{},...$R(i)>0?{commented:i}:{}}}]}var nz=e=>Array.isArray(e)?e.flatMap(tz):[];function rz(e){if(!Array.isArray(e?.lockfiles))throw Error(`The server answered with no lockfiles.`);let t=e.lockfiles.filter(e=>Array.isArray(e?.paths)&&(Array.isArray(e.added)||typeof e.error==`string`)).map(e=>e.error?e:{...e,added:e.added.flatMap(tz),more:$R(e.more)??0,unreviewed:nz(e.unreviewed),moreUnreviewed:$R(e.moreUnreviewed)??0,unsupported:nz(e.unsupported),moreUnsupported:$R(e.moreUnsupported)??0,moreLocked:$R(e.moreLocked)??0}),n=e.review;return{lockfiles:t,cut:e.cut===!0,...typeof e.formatted==`string`&&e.formatted.trim()!==``?{formatted:e.formatted}:{},...$R(n?.required)>0?{review:{required:n.required,since:typeof n.since==`string`?n.since:null,canReview:n.canReview===!0,...$R(n.toReview)===null?{}:{toReview:n.toReview},...$R(n.unreviewed)===null?{}:{unreviewed:n.unreviewed},...$R(n.unsupported)===null?{}:{unsupported:n.unsupported},...Array.isArray(n.baselineUnread)&&n.baselineUnread.every(e=>typeof e==`string`)?{baselineUnread:n.baselineUnread}:{},...n.reviewedDependencies===!0?{reviewedDependencies:!0}:{},...$R(n.unasked)>0?{unasked:n.unasked}:{},...$R(n.commentReviews)>0?{commentReviews:n.commentReviews}:{},...n.commentsFailed===!0?{commentsFailed:!0}:{},...typeof n.baselineError==`string`?{baselineError:n.baselineError}:{},...[`exclude`,`include`].includes(n.lockfiles?.mode)&&Array.isArray(n.lockfiles.paths)&&n.lockfiles.paths.every(e=>typeof e==`string`)?{lockfiles:{mode:n.lockfiles.mode,paths:n.lockfiles.paths}}:{}}}:{}}}function iz(){for(;qR<zR&&HR.length+UR.length>0;){let e=HR.shift()??UR.shift(),t=[e];for(let n=0;e.background&&n<UR.length&&t.length<BR;){let r=UR[n];r.pull.repoId===e.pull.repoId&&r.review===e.review?t.push(...UR.splice(n,1)):n++}for(let e of t)WR.delete(e.key);qR++,oz(t).finally(()=>az(t))}}function az(e){qR--;for(let t of e)YR(t.pull);iz()}function oz(e){let[{pull:{repoId:t,number:n},review:r}]=e;return e.length===1?wb(t,n,{review:r}).then(e[0].settle,e[0].settle):Tb(t,e.map(e=>e.pull.number),{review:r}).then(t=>{for(let n of e)n.settle(t.get(n.pull.number)??Error(`The server answered with none of it.`));return null},t=>{for(let n of e)n.settle(t)})}function sz(e,t,n=!1,{background:r=!1}={}){let i=ZR(),a=`${e}\0${t}\0${n}`,o=i.get(a);if(o&&Date.now()<o.until){let e=WR.get(a);return!r&&e?.background&&(UR.splice(UR.indexOf(e),1),e.background=!1,HR.push(e)),o}let s=o?.status===`ready`?{...o,until:1/0,refreshing:!0}:{status:`loading`,until:1/0};i.set(a,s);let c={key:a,background:r,review:n,pull:{repoId:e,number:t},settle:e=>{if(i.get(a)!==s)return;let t=e instanceof Error?e:null;if(!t)try{i.set(a,{status:`ready`,until:Date.now()+LR,...rz(e)});return}catch(e){t=e}t?.name===`AbortError`?o?.status===`ready`?i.set(a,o):i.delete(a):i.set(a,{status:`error`,until:Date.now()+RR,error:t?.message||`Its lockfiles could not be read.`})}};return WR.set(a,c),(r?UR:HR).push(c),iz(),s}var cz=new WeakMap;function lz(e,{lockfiles:t,review:n},r){let i=cz.get(t)??cz.set(t,new Map).get(t),a=i.get(e);if(a&&a.review===n)return a.value;let o=r();return i.set(e,{review:n,value:o}),o}function uz(e){return lz(`added`,e,()=>dz(e))}function dz({lockfiles:e,review:t}){let n=new Map;for(let r of e.flatMap(e=>e.added??[])){let e=`${r.name}@${r.version??``}`,i=n.get(e);if(!i){n.set(e,r);continue}let{reviews:a,baseline:o,reviewed:s,unsupported:c,patched:l,...u}=i;n.set(e,{...u,...r.was||i.was?{was:[...new Set([...i.was??[],...r.was??[]])]}:{},...pz(i,r,t)})}let r=[...n.values()],i=r.filter(e=>!e.was);return{versions:[...i,...r.filter(e=>e.was)],fresh:i.length,updated:r.length-i.length,more:e.some(e=>e.more>0),toReview:t?.toReview??r.filter(e=>mz(e,t)===`wanted`).length}}var fz={unsupported:0,wanted:1,passed:2,baseline:3};function pz(e,t,n){let r=e=>fz[mz(e,n)]??4,{unsupported:i,baseline:a,reviewed:o,reviews:s,rejected:c}=r(t)<r(e)||r(t)===r(e)&&(t.reviews??1/0)<(e.reviews??1/0)?t:e,l=Math.max(e.commented??0,t.commented??0);return{...e.patched||t.patched?{patched:!0}:{},...i?{unsupported:i}:a?{baseline:a}:o?{reviewed:o}:s==null?{}:{reviews:s,...c?{rejected:c}:{},...l>0?{commented:l}:{}}}}function mz(e,t){return t?e.unsupported?`unsupported`:e.baseline?`baseline`:e.reviewed?`passed`:e.reviews==null?null:e.reviews>=t.required&&!e.rejected?`passed`:`wanted`:null}function hz(e){return lz(`unreviewed`,e,()=>gz(e))}function gz({lockfiles:e,review:t}){let n=new Map;for(let t of e.flatMap(e=>e.unreviewed??[])){let e=`${t.name}@${t.version??``}`;n.has(e)||n.set(e,t)}return{versions:[...n.values()],count:t?.unreviewed??n.size+e.reduce((e,t)=>e+(t.moreUnreviewed??0),0)}}function _z(e){return lz(e.cut?`failures-cut`:`failures`,e,()=>vz(e))}function vz({lockfiles:e,cut:t,review:n}){if(!n)return null;let r=new Map;for(let t of e.flatMap(e=>e.unsupported??[])){let e=`${t.source}\0${t.name}@${t.version??``}\0${t.from??``}`;r.has(e)||r.set(e,t)}let i=t=>e.reduce((e,n)=>e+(n[t]??0),0),a={versions:[...r.values()],count:n.unsupported??r.size+i(`moreUnsupported`),unread:e.filter(e=>e.error),unchecked:i(`moreLocked`),cut:t};return a.count>0||a.unread.length>0||a.unchecked>0||t?a:null}var yz=K(A`<path d="M3.5 8.4l2.9 2.9 6.1-6.6"/>`),bz=K(A`<circle class="fill" cx="8" cy="8" r="3"/>`),xz=K(A`<path d="M4.2 4.2l7.6 7.6M11.8 4.2l-7.6 7.6"/>`),Sz=K(A`<circle class="dotted" cx="8" cy="8" r="5.5"/>`),Cz=K(A`<path d="M2.6 3.2h7.6v5.3H6.3L4 10.4V8.5H2.6z"/><path d="M12.2 6.2h1.2v5.3H12v1.9l-2.3-1.9H7"/>`),wz={approved:[`approved`,TP.approved[1],`Approved`],changes:[`changes`,TP.changes[1],`Changes requested`],commented:[`commented`,CP,`Commented`],dismissed:[`dismissed`,CP,`Review dismissed`]},Tz={done:[`reviewed`,yz,`Reviewed`],running:[`running`,bz,`Reviewing`],failed:[`failed`,xz,`Review failed`],requested:[`requested`,Sz,`Asked to review again`]},Ez=[`requested`,Sz,`Review requested`],Dz=e=>e.slice(0,7),Oz=e=>new Date(e).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,year:`numeric`}),kz=(e,t,n=!1)=>`${e.toLocaleString(`en-US`)}${n?`+`:``} ${t}${e===1&&!n?``:`s`}`;function Az(e){return e?e.failed?Tz.failed:e.requested?Tz.requested:Tz[e.code?.status]??null:null}function jz(e){let t=Az(e.codex),n=e.codex?.code?.commit??null;return[...t?[{who:Vy(e.codex.login,`Codex`),standing:t,commit:n,stale:n!==null&&n!==e.head}]:[],...e.reviewers.map(t=>({who:Vy(t.login,t.login??`someone`),standing:wz[t.state]??Ez,requested:t.requested&&!!wz[t.state],workflow:t.workflow??null,commit:t.commit,at:t.at,stale:t.commit!==null&&t.commit!==e.head}))]}var Mz=e=>(e.moreReviews??0)+(e.moreRequests??0),Nz=e=>[e.moreReviews>0?kz(e.moreReviews,`more review`):null,e.moreRequests>0?kz(e.moreRequests,`more review request`):null].filter(Boolean).join(` and `);function Pz(e){if(!e.head)return!0;let t=e.codex?.code;return t?.status===`done`&&t.commit===e.head||e.reviewers.some(t=>wz[t.state]&&t.state!==`dismissed`&&t.commit===e.head)?!0:e.moreReviews>0&&null}var Fz=e=>e?k`<span class="${`review-severity is-${e}`}">${e.toUpperCase()}</span>`:j;function Iz(e){if(!e)return j;let t=jz(e),{open:n,more:r,severity:i}=e.threads,a=n>0?`${kz(n,`open review thread`,r)}${i?`, the gravest ${i.toUpperCase()}`:``}`:r?`No open review thread among those read; more on GitHub`:null,o=Pz(e);return k`<span class="issue-reviews">${t.map(({who:e,standing:[t,n,r],commit:i,stale:a,requested:o})=>{let s=`${r}${o?`, and requested again`:``}${a?`, on an earlier commit (${Dz(i)})`:i?`, on the latest commit`:``}`;return k`<span class="${`review-mark is-${t}${a?` is-stale`:``}`}"><span class="review-glyph" role="img" aria-label="${s}" data-tooltip="${s}">${n}</span><span class="review-who">${e}</span></span>`})} ${Mz(e)>0?k`<span class="review-more" data-tooltip="${`${Nz(e)}, on GitHub`}">+${Mz(e)}</span>`:j} ${a?k`<span class="review-threads" role="img" aria-label="${a}" data-tooltip="${a}">${Cz}<span>${n}${r?`+`:``}</span>${Fz(i)}</span>`:j} ${o===!1?k`<span class="review-unreviewed" data-tooltip="${t.length>0?`No review is on the latest commit`:`No reviews yet`}">Unreviewed</span>`:o===null?k`<span class="review-unreviewed" data-tooltip="No review read is on the latest commit; more on GitHub">Unreviewed?</span>`:j}</span>`}function Lz(e,t,n){if(!e)return j;let r=k`<code>${Dz(e)}</code>`;return k`<span class="review-on">on ${n?k`<a href="${`https://github.com/${n}/commit/${e}`}" target="_blank" rel="noopener noreferrer">${r}</a>`:r}${e===t?`, the latest commit`:`, an earlier commit`}</span>`}function Rz(e,t){if(!e)return j;let{head:n,codex:r}=e,i=(e,[i,a,o],s)=>k`<li class="review-row">${Vy(r.login,`Codex`)} <span class="${`review-state is-${i}`}">${a}${s}: ${o.toLowerCase()}</span>${Lz(e.commit,n,t)}</li>`,a=[...r?.code?[i(r.code,Az(r)??Tz.done,`Code review`)]:[],...r?.security?[i(r.security,Tz[r.security.status]??Tz.done,`Security review`)]:[],...jz({...e,codex:null}).map(({who:e,standing:[r,i,a],commit:o,at:s,requested:c,workflow:l})=>k`<li class="review-row">${e} <span class="${`review-state is-${r}`}">${i}${a}${c?`, requested again`:``}</span>${l?k`<span class="review-on">by the workflow <code>${l}</code></span>`:j}${Lz(o,n,t)}${s?k`<time datetime="${new Date(s).toISOString()}">${Oz(s)}</time>`:j}</li>`)],{open:o,resolved:s,more:c,list:l=[]}=e.threads;return k`<section class="repo-item-section"><h4>Reviews</h4>${a.length>0?k`<ul>${a}</ul>`:k`<p class="repo-item-quiet">No reviews yet.</p>`} ${Mz(e)>0?k`<p class="repo-item-quiet">And ${Nz(e)}, on GitHub.</p>`:j} ${Pz(e)===null?k`<p class="repo-item-quiet">No review read is on the latest commit, <code>${Dz(n)}</code>; one of those on GitHub may be.</p>`:a.length>0&&!Pz(e)?k`<p class="repo-item-quiet">No review is on the latest commit, <code>${Dz(n)}</code>.</p>`:j}</section>${o>0||s>0?k`<section class="repo-item-section"><h4>Open threads</h4>${l.length>0?k`<ul>${l.map(e=>k`<li><a class="repo-item-row review-thread" href="${e.url??j}" target="_blank" rel="noopener noreferrer">${Fz(e.severity)}<span class="repo-item-title">${e.title||`(no comment)`}</span> ${e.path?k`<code class="review-path">${e.path}${e.line?`:${e.line}`:``}</code>`:j} ${e.outdated?k`<span class="repo-item-quiet">outdated</span>`:j}</a></li>`)}</ul>`:k`<p class="repo-item-quiet">${c?`None open among those read.`:`None open.`}</p>`} ${s>0||c?k`<p class="repo-item-quiet">${s>0?`${kz(s,`thread`)} resolved`:``}${c?`${s>0?`; `:``}more on GitHub`:``}.</p>`:j}</section>`:j}`}var zz=Ms({items:new Map,changes:0}),Bz=null,Vz=()=>P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null,Hz=(e,t,n)=>`${e}\0${t}\0${n}`,Uz=e=>Number.isSafeInteger(e?.readAt)&&e.readAt>0?e.readAt:Date.now();function Wz(e,t,n,r=null){let i=Vz();i!==Bz&&(zz.items.clear(),Bz=i);let a=!1;for(let o of t){let t=Hz(i,e,o.number),s=zz.items.get(t);if(s&&s.readAt>n)continue;let c=s&&(s.item.state===`open`?`open`:`closed`),l=!c||c===(o.state===`open`?`open`:`closed`)?s?.moved??null:{from:c,before:s.readAt};zz.items.set(t,{item:{...o,kind:o.kind??r??s?.item.kind??null},readAt:n,moved:l}),a=!0}a&&zz.changes++}var Gz=(e,t)=>zz.items.get(Hz(Vz(),e,t))??null;function Kz(e,t){let n=Hz(Vz(),e,``);return zz.changes,[...zz.items].flatMap(([e,r])=>e.startsWith(n)&&r.item.kind===t?[r]:[])}var qz=()=>zz.changes,Jz=e=>e.state===`open`?`open`:`closed`;function Yz(e,t){let n=Jz(e.item);if(e.readAt<=t||!e.moved)return n;if(e.moved.before>=t)return e.moved.from;let r=e.item.closedAt??e.item.mergedAt??null;return n===`closed`&&r!==null&&r>t?e.moved.from:n}var Xz=3e5,Zz=3e4,Qz=8,$z=20,eB=new Map,tB=new Set,nB=null,rB={issues:`open`,pulls:`open`};function iB(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==nB&&(eB.clear(),nB=e),eB}var aB=()=>{for(let e of tB)e.requestUpdate()};JR(e=>{for(let t of tB)(!e||t.repository?.repoId===e.repoId)&&t.requestUpdate()});function oB(e){if(!Array.isArray(e?.items))throw Error(`The server answered with no list.`);return{items:e.items.filter(e=>Number.isSafeInteger(e?.number)&&typeof e.title==`string`&&Array.isArray(e.labels)),counts:{open:e.counts?.open??0,closed:e.counts?.closed??0},more:e.more===!0,after:e.more===!0?e.after:null,readAt:Uz(e)}}function sB(e,t,n,r){let i=e=>e.state===`open`==(n===`open`),a=r.items.map(t=>Gz(e,t.number)??{item:t,readAt:r.readAt}),o=a.map(({item:e})=>e),s=new Set(o.map(e=>e.number)),c=r.more?r.items.at(-1)?.updatedAt??0:null,l=Kz(e,t).filter(({item:e,readAt:t})=>t>r.readAt&&!s.has(e.number)&&i(e)&&(c===null||(e.updatedAt??0)>=c)).toSorted((e,t)=>(t.item.updatedAt??0)-(e.item.updatedAt??0));for(let{item:e}of l){let t=o.findIndex(t=>(t.updatedAt??0)<(e.updatedAt??0));o.splice(t===-1?o.length:t,0,e)}let u=r.countsAt??r.readAt,d=e=>{let t=Jz(e.item),n=e.item.closedAt??e.item.mergedAt??null;return(t===`closed`?n!==null&&n<=u:(e.item.updatedAt??1/0)<=u)?t:r.counted?.get(e.item.number)??Yz(e,u)},f=new Map(Kz(e,t).map(e=>[e.item.number,e]));for(let e of a)f.has(e.item.number)||f.set(e.item.number,e);let p=0;for(let e of f.values()){let t=d(e);t!==Jz(e.item)&&(p+=t===n?1:-1)}let m=n===`open`?`closed`:`open`;return{items:o,counts:{[n]:Math.max(0,r.counts[n]-p),[m]:Math.max(0,r.counts[m]+p)}}}function cB(e,t,n){let r=new Map(Kz(e,t).map(e=>[e.item.number,Yz(e,n.countsAt)]));for(let e of n.items)r.has(e.number)||r.set(e.number,Jz(e));n.counted=r}function lB(e,t,n){return bN(iB(),e,()=>t(null),{ready:e=>{let t={status:`ready`,until:Date.now()+Xz,...e,countsAt:e.readAt,loadingMore:!1,moreError:null};return n(t),t},failed:e=>e?.name===`AbortError`?null:{status:`error`,until:Date.now()+Zz,error:e?.message||`The list could not be read.`},retryMs:Zz,repaint:aB})}function uB(e,t,n,r){t.loadingMore||!t.more||(t.loadingMore=!0,t.moreError=null,t.until=Date.now()+Xz,aB(),n(t.after).then(n=>{if(iB().get(e)!==t)return null;let i=new Set(t.items.map(e=>e.number));return t.items=[...t.items,...n.items.filter(e=>!i.has(e.number))],n.readAt>=t.countsAt&&(t.counts=n.counts,t.countsAt=n.readAt,r(t)),t.more=n.more,t.after=n.after,t.until=Date.now()+Xz,null},e=>(e?.name!==`AbortError`&&(t.moreError=e?.message||`More could not be read.`),null)).finally(()=>{t.loadingMore=!1,aB()}))}function dB(e,t){let n=t.trim().toLowerCase().split(/\s+/u).filter(Boolean);return n.length===0?e:e.filter(e=>{let t=[`#${e.number}`,e.title,e.author??``,By(e.author)??``,e.head??``,...e.labels.map(e=>e.name)].join(`
|
|
173
|
+
`).toLowerCase();return n.every(e=>t.includes(e))})}var fB=new Intl.NumberFormat(`en-US`,{notation:`compact`,maximumSignificantDigits:2}),pB=e=>e<1e3?String(e):fB.format(e);function mB(e){let t=e.labels.length+(e.moreLabels??0),n=e.labels.slice(0,t>Qz?Qz-1:Qz),r=e=>k`<span class="issue-label" style="${E(e.color?{"--label":`#${e.color}`}:{})}" data-tooltip-truncated data-tooltip="${e.name}">${e.name}</span>`,i=e=>k`${r(e[0])}${e.length>1?k`<span class="issue-labels-rest" style="${E({"--labels":String(e.length-1)})}">${i(e.slice(1))}</span>`:j}`;return k`${n.length>0?i(n):j}${t>n.length?k`<span class="issue-label is-more">+${t-n.length}</span>`:j}`}var hB={git:`from git`,tarball:`a tarball not npm’s registry’s`,integrity:`locked with no integrity`};function gB({versions:e,count:t,unread:n,unchecked:r,cut:i}){let a=t-Math.min(e.length,$z);return[t>0?`${e.slice(0,$z).map(e=>`${e.name}${e.version?`@${e.version}`:``} (${hB[e.unsupported]})`).join(`, `)}${a>0?` and ${a.toLocaleString(`en-US`)} more`:``} can\u2019t be reviewed`:null,n.length>0||r>0||i?`not every lockfile it changes was read`:null].filter(Boolean).join(`; `)}function _B(e){if(e.status!==`ready`)return j;let{versions:t,fresh:n,updated:r,more:i,toReview:a}=uz(e),o=e.review?hz(e).count:0,s=_z(e);if(t.length===0&&o===0&&!s)return j;let c=i?`+`:``,l=t=>{let n=mz(t,e.review);return n===`unsupported`?`, can\u2019t be reviewed: ${hB[t.unsupported]}`:n===`baseline`?`, needs no review`:t.reviewed?`, reviewed`:t.rejected?`, rejected`:t.patched&&n===`wanted`?`, patched, unreviewed`:n?`, ${t.reviews}/${e.review.required} reviews`:``},u=e=>`${e.name}@${e.version??`?`}${e.was?` (was ${e.was.join(`, `)}${l(e)})`:` (new${l(e)})`}`,d=t.length-$z,f=[t.length>0?`New in its lockfiles: ${t.slice(0,$z).map(u).join(`, `)}${d>0?` and ${d.toLocaleString(`en-US`)}${c} more`:i?` and more`:``}`:null,o>0?`${o.toLocaleString(`en-US`)} other ${o===1?`version`:`versions`} in its lockfiles unreviewed`:null,s?`Its review fails: ${gB(s)}`:null].filter(Boolean).join(`. `),p=[n?`${n.toLocaleString(`en-US`)} new`:null,r?`${r.toLocaleString(`en-US`)} updated`:null].filter(Boolean).join(`, `),m=a&&o?`${a.toLocaleString(`en-US`)} + ${o.toLocaleString(`en-US`)} to review`:a?`${a.toLocaleString(`en-US`)} to review`:o?`${o.toLocaleString(`en-US`)} unreviewed`:``;return k`<span class="issue-deps" data-tooltip="${f}">${kP}<span class="issue-deps-names">${[...new Set(t.map(e=>e.name))].join(`, `)}</span> ${p?k`<span class="issue-deps-count">${p}${c}</span>`:j} ${s?k`<span class="issue-deps-review is-failed">${s.count>0?`${s.count.toLocaleString(`en-US`)} can\u2019t be reviewed`:`lockfiles unread`}</span>`:e.review?m?k`<span class="issue-deps-review is-wanted">${m}</span>`:k`<span class="issue-deps-review is-passed" role="img" aria-label="Every version reviewed">${wP.success[1]}</span>`:j}</span>`}var vB=class extends Bh{static properties={repository:{attribute:!1},repo:{attribute:!1},kind:{},_filter:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.repository=null,this.repo=null,this.kind=`issues`,this._filter=``,this._moreButton=null}connectedCallback(){super.connectedCallback(),tB.add(this)}disconnectedCallback(){super.disconnectedCallback(),tB.delete(this),this._moreButton&&yN(this._moreButton),this._moreButton=null}updated(){let e=this.querySelector(`.issues-more > button`);this._moreButton&&this._moreButton!==e&&yN(this._moreButton),this._moreButton=e,e&&_N(e,t=>{t&&this.readNear(e)})}readNear(e){e===this._moreButton&&e.isConnected&&!e.disabled&&!this._filter.trim()&&!e.parentElement.querySelector(`[role=alert]`)&&e.click()}list(e){let{repoId:t}=this.repository,n=this.kind,r=`${t}\0${n}\0${e}`,i=r=>Sb(t,n,{state:e,after:r}).then(oB).then(e=>(Wz(t,e.items,e.readAt,n),e)),a=e=>cB(t,n,e),o=lB(r,i,a);return{key:r,entry:o,more:()=>uB(r,o,i,a)}}pick(e){rB[this.kind]=e,aB()}render(){if(!this.repository)return j;let e=rB[this.kind],{key:t,entry:n,more:r}=this.list(e),i=n.status===`ready`,a=this.kind===`pulls`?`pull requests`:`issues`,o=e===`open`?`closed`:`open`,s=iB().get(`${this.repository.repoId}\0${this.kind}\0${o}`),c=i?sB(this.repository.repoId,this.kind,e,n):null,l=c?c.counts:s?.status===`ready`?sB(this.repository.repoId,this.kind,o,s).counts:null,u=e=>l?k`<span class="n">${l[e].toLocaleString(`en-US`)}</span>`:j,d=c?dB(c.items,this._filter):[];return k`<div class="history-bar issues-bar">${yM(this.kind)}<div class="history-modes" role="group" aria-label="${this.kind===`pulls`?`Pull requests`:`Issues`}"><button type="button" aria-pressed="${String(e===`open`)}" @click="${()=>this.pick(`open`)}">Open${u(`open`)}</button> <button type="button" aria-pressed="${String(e===`closed`)}" @click="${()=>this.pick(`closed`)}">Closed${u(`closed`)}</button></div><input class="issues-filter" type="search" placeholder="Filter" aria-label="${`Filter the ${a} read`}" .value="${this._filter}" @input="${e=>{this._filter=e.target.value}}"> ${c&&this._filter.trim()?k`<span class="history-summary">${d.length} of ${c.items.length} read</span>`:j}</div>${c?this.renderTiles(n,c.items,d,r,`${e} ${a}`):n.status===`error`?k`<div class="bundles-slide-placeholder is-error"><p role="alert">${n.error}</p><button type="button" @click="${()=>{iB().delete(t),aB()}}">Retry</button></div>`:k`<div class="bundles-slide-placeholder" role="status">Reading the ${a}…</div>`}`}renderTiles(e,t,n,r,i){if(t.length===0)return k`<div class="bundles-slide-placeholder">No ${i}.</div>`;let a=this.repo??this.repository.repo,o=this.kind===`pulls`?`pull`:`issues`;return k`<div class="issues-scroll">${n.length===0?k`<p class="history-note">None of the ${i} read match.</p>`:k`<ol class="issues-grid" aria-label="${i}">${n.map(e=>{let[t,n]=AP(this.kind,e),r=this.renderTile(e,t,n);return k`<li class="${T({"issue-tile":!0,[`is-${t}`]:!0})}">${a?k`<a class="issue-body" href="${`https://github.com/${a}/${o}/${e.number}`}" target="_blank" rel="noopener noreferrer" @click="${t=>this.openTile(t,e)}">${r}</a>`:k`<div class="issue-body" @click="${t=>this.openTile(t,e)}">${r}</div>`}</li>`})}</ol>`} ${e.more||e.moreError?k`<div class="history-more issues-more">${e.moreError?k`<span role="alert">${e.moreError}</span>`:j} <button type="button" ?disabled="${e.loadingMore}" @click="${r}">${e.loadingMore?`Reading…`:`More`}</button></div>`:j}</div>`}openTile(e,t){LP(e)&&(e.preventDefault(),Ze({repository:{...this.repository,repo:this.repo??this.repository.repo},target:{number:t.number,preview:{...t,kind:this.kind}}}))}renderTile(e,t,n){let r=this.kind===`pulls`,i=r&&e.state===`open`&&QR(e)?sz(this.repository.repoId,e.number,!0):null,a=e.updatedAt==null?null:new Date(e.updatedAt),o=r&&e.checks?wP[e.checks]:null,s=r&&e.state===`open`&&e.review?TP[e.review]:null,c=e.comments>0?`${e.comments.toLocaleString(`en-US`)} comment${e.comments===1?``:`s`}`:null,l=(t,[n,r])=>k`<span class="${`issue-${t} is-${e[t]}`}" role="img" aria-label="${n}" data-tooltip="${n}">${r}</span>`;return k`<span class="issue-rail"><span class="issue-state" role="img" aria-label="${n}">${SP[this.kind][t]}</span> ${r?k`<span class="issue-marks">${s?l(`review`,s):j}${o?l(`checks`,o):j}</span>`:j} ${c?k`<span class="issue-comments" role="img" aria-label="${c}" data-tooltip="${c}">${CP}<span>${pB(e.comments)}</span></span>`:j} </span><span class="issue-lines"><span class="issue-name">${e.title||`(no title)`}</span> <span class="issue-meta"><span class="issue-number">#${e.number}</span> <span class="issue-author">${Vy(e.author,e.author??`ghost`)}</span> ${a?k`<time datetime="${a.toISOString()}">${ZN(e.updatedAt)}</time>`:j} </span>${e.labels.length>0||e.moreLabels>0?k`<span class="issue-labels">${mB(e)}</span>`:j} ${r&&e.head?k`<span class="issue-branch"><code>${e.head}</code>${e.base?k`<span aria-hidden="true">→</span><code>${e.base}</code>`:j} <span class="issue-diff"><span class="is-added">+${e.additions.toLocaleString(`en-US`)}</span> <span class="is-deleted">−${e.deletions.toLocaleString(`en-US`)}</span></span></span>`:j} ${r&&e.state===`open`?Iz(e.reviews):j} ${i?_B(i):j}</span>`}};customElements.get(`repository-issues`)||customElements.define(`repository-issues`,vB);var yB=k`<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>`,bB=new Map([[`registry`,{label:`Source: npm registry`,icon:Ct}],[`repository`,{label:`Source: GitHub repository`,icon:O(aa)}],[`osv`,{label:`Source: OSV`,icon:yB}]]);function xB(e){return e===`unknown`?`Unrated`:e.charAt(0).toUpperCase()+e.slice(1)}function SB(e){if(typeof e!=`string`)return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var CB=k`<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 wB(e){let t=/^CWE-(\d+)$/u.exec(e);if(!t)return k`<span>${e}</span>`;let n=`https://cwe.mitre.org/data/definitions/${t[1]}.html`;return k`<a class="bundle-advisory-cwe" href="${n}" target="_blank" rel="noopener noreferrer">${e}</a>`}function TB(e,t){return k`<div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${e}`}">${xB(e)}</span> ${typeof t==`number`?k`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${t.toFixed(1)}</span></span>`:j}</div>`}function EB(e){let t=typeof e.url==`string`&&/^https?:\/\//iu.test(e.url)?e.url:null,n=e.ghsa??SB(t)??(typeof e.id==`string`?e.id:null),r=bB.get(e.source);return!r&&!(n&&t)?j:k`<span class="bundle-advisory-reference">${r?k`<span class="bundle-advisory-source" role="img" aria-label="${r.label}">${r.icon}</span>`:j} ${n&&t?k`<a class="bundle-advisory-ghsa" href="${t}" target="_blank" rel="noopener noreferrer">${n}${CB}</a>`:j}</span>`}function DB(e){let t=Array.isArray(e)?e.filter(e=>typeof e==`string`):[];return t.length>0?k`<span class="bundle-advisory-cwes">${t.map((e,t)=>k`${t===0?``:`, `}${wB(e)}`)}</span>`:j}function OB(e,t=null){let n=typeof e.cvss?.vectorString==`string`?e.cvss.vectorString:``,r=typeof e.vulnerable_versions==`string`?e.vulnerable_versions:null,i=Array.isArray(e.versions)?e.versions.filter(e=>typeof e==`string`):[];return k`<li class="bundle-advisory-row">${TB(e.severity,e.cvss?.score)}<div class="bundle-advisory-body"><div class="bundle-advisory-header">${t&&typeof e.details==`string`&&e.details.trim()?k`<button type="button" class="bundle-advisory-title" aria-haspopup="dialog" @click="${()=>t(e)}">${e.title}</button>`:k`<span class="bundle-advisory-title">${e.title}</span>`} ${EB(e)}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${e.informational?k`<span>${e.informational}</span>`:j} ${r?k`<span>Affected <span class="mono">${r}</span></span>`:j} ${i.length>0?k`<span>Matches <span class="mono">${i.join(`, `)}</span></span>`:j} ${DB(e.cwe)}</div>${n?k`<div class="bundle-advisory-cvss-vector mono">${n}</div>`:j}</div></div></li>`}var kB=(e,t)=>zO(e,t).runsCode,AB=(e,t=e.length>=jt)=>e.length===1?`line ${e[0]}`:`lines ${e.slice(0,5).join(`, `)}${e.length>5?` and ${(e.length-5).toLocaleString(`en`)}${t?`+`:``} more`:``}`,jB=/^[\w$.]+$/u,MB=(e,t=null)=>[...Map.groupBy([...e],([e])=>{let{name:t,tag:n}=Ae.get(e);return t&&jB.test(t)?t:n})].map(([e,n])=>`${e} (${AB([...new Set(n.flatMap(([,e])=>e))].toSorted((e,t)=>e-t),n.some(([,e])=>e.length>=jt))}${n.some(([e])=>t?.has(e))?`, new`:``})`).join(`, `),NB=e=>{let t=new Set(e.flat());return t.size===1?[...t][0]:void 0},PB=(e,t)=>t===void 0?{path:j,line:j}:{path:e,line:t},FB=(e,t=null)=>[...e].map(([e,n])=>`${Ae.get(e).name} (${AB(n)}${t?.has(e)?`, new`:``})`).join(`, `);function IB(e,t,n){return e?[...Map.groupBy(e,([e])=>Ae.get(e).tag)].map(([e,r])=>{let{note:i,mark:a}=Ae.get(r[0][0]),o=r.map(([e,t])=>[Ae.get(e).name,AB(t)]),s=t===void 0?[]:r.filter(([e])=>!t?.has(e)).map(([e])=>Ae.get(e).name),c=s.length===0?null:s.length===r.length?`New in this version`:`New in this version: ${s.join(`, `)}`,l=PB(n,n===void 0?void 0:NB(r.map(([,e])=>e)));return k`<span data-bundle-view-source="${l.path}" data-bundle-view-line="${l.line}" class="${`npm-runs-code${a?` is-${a}`:``}`}" data-tooltip="${[`${i}: ${o.map(e=>e.join(`, `)).join(`; `)}`,c].filter(Boolean).join(` · `)}" .tooltipContent="${k`<div class="compare-tip"><div class="compare-tip-head">${i}</div><div class="compare-tip-rows is-files">${o.map(([e,t])=>k`<span class="compare-tip-path">${e}</span><span class="compare-tip-said">${t}</span>`)}</div>${c?k`<div class="compare-tip-notice">${c}</div>`:j}</div>`}">${e}</span>`}):j}var LB=(e,t)=>zO(e,t).exfiltration,RB=e=>[...De].filter(([t])=>e.some(e=>e.has(t))).map(([,{name:e}])=>e).join(`, `),zB=(e,t)=>[...e].map(([e,n])=>`${De.get(e).name} (${AB(n)}${t!==void 0&&!t?.has(e)?`, new`:``})`).join(`, `),BB=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 VB(e,t,n){return e?Oe(e).map(([e,r])=>{let i=PB(n,n===void 0?void 0:NB([...r.values()]));return k`<span data-bundle-view-source="${i.path}" data-bundle-view-line="${i.line}" class="${`npm-exfiltration is-${ke(e,r,t)}`}" data-tooltip="${`${BB.get(e)}: ${zB(r,t)}`}">${e}</span>`}):j}var HB=e=>e.toLowerCase().replaceAll(` `,`-`),UB=({id:e,aliases:t,cwe:n,title:r})=>[e,...t??[]].some(e=>(e??``).startsWith(`MAL-`))||(n??[]).includes(`CWE-506`)||/\bmalware\b/iu.test(r??``),WB={accept:`Accept`,"accept-with-nits":`Accept with nits (non-blocking)`,"request-changes":`Request changes`,reject:`Reject`};function GB(e,t){return[e,t].every(e=>e===void 0||typeof e==`string`)&&[e,t].some(e=>typeof e==`string`)}function KB(e,t,n=[]){let r=Object.keys(WB),i=new Set(n??[]),a=e.filter(e=>n!==null&&!i.has(e.file)&&r.includes(e.status)),o=r.findLast(e=>a.some(t=>t.status===e))??`accept`;if(t===null)return{coverage:null,checkedFiles:null,totalFiles:null,verdictLimit:o};let s=new Set(a.map(e=>e.file)),c=t.filter(e=>s.has(e)).length;return{coverage:c===t.length?`full`:`partial`,checkedFiles:c,totalFiles:t.length,verdictLimit:o}}function qB(e,t=`accept`){let n=Object.keys(WB);return n.slice(Math.max(n.indexOf(t),n.indexOf(KB(e,null).verdictLimit)))}function JB({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 YB(e,t,n,r){if(!e)return`accept`;let i=t?.versions?.indexOf(e.version)??-1,a=i<0?[]:t.advisories.filter(e=>e.affected.includes(i)),o=e.private?[]:n?.alerts??[];return r?.findings?.some(e=>e.id===`malware`)||JB({npm:e})||o.some(e=>e.type===`malware`)||a.some(e=>UB(e)||e.id?.startsWith(`MAL-`)||/^Malicious package\b/iu.test(e.title??``))?`reject`:a.some(e=>e.severity===`critical`)||o.some(e=>e.type===`criticalCVE`)?`request-changes`:`accept`}function XB(e,t,n=[]){return KB(e,t,n).coverage===`partial`&&(n===null||n.includes(`package.json`)||!e.some(e=>e.file===`package.json`&&Object.keys(WB).includes(e.status)))}function ZB(e){return e.replaceAll(/\r\n?/gu,`
|
|
174
|
+
`).split(/(?:^|\n)[\t ]*\*[\t ]+/u).map((e,t)=>({text:e.trim(),bullet:t>0})).filter(e=>e.text)}var QB=[`critical`,`high`,`moderate`,`low`,`unknown`],$B=e=>QB.includes(e.severity)?e.severity:`unknown`,eV=[[`affects`,e=>`Affects ${e}`],[`later`,()=>`Later versions`],[`fixed`,e=>`Fixed in ${e}`]];function tV(e){return xj(`stats`,e,()=>jb(e),e=>({downloads:e.downloads??null,github:e.github??null}))}function nV(e){return xj(`advisories`,e,()=>Mb(e),e=>({versions:e.versions??[],advisories:e.advisories??[],repository:e.repository!==!1,keptAt:e.keptAt??null}))}function rV(e){let{name:t,version:n}=e.npm,r=(e,t)=>k`<a class="npm-package-link" href="${e}" target="_blank" rel="noopener noreferrer">${t}${CB}</a>`;return k`<span class="npm-package-links">${r(`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(n)}`,`npmjs`)} ${e.npm.private?j:r(iV(e),`socket.dev`)}</span>`}var iV=e=>`https://socket.dev/npm/package/${e.npm.name}/overview/${encodeURIComponent(e.npm.version)}`;function aV(e){let{name:t,version:n}=e.npm;if(e.npm.private)return null;let r=xj(`socket`,`${t}@${n}`,()=>Fb(t,n),e=>({socket:e.socket??null}));return r.status===`ready`?r.socket:null}var oV=[[`supplyChain`,`Supply chain`,85,85],[`vulnerability`,`Vulnerability`,85,85],[`quality`,`Quality`,70,80],[`maintenance`,`Maintenance`,70,80],[`license`,`License`,80,80]],sV=50,cV=(e,t)=>e===100?`is-good is-max`:e>=t?`is-good`:e>=50?`is-fair`:`is-poor`,lV=e=>k`<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 uV(e){let t=aV(e)?.scores;return t?k`<ul class="npm-extensions npm-socket-scores" aria-label="Socket scores">${oV.map(([n,r,,i])=>{let a=Math.round(t[n]*100);return k`<li><a class="${`npm-extension npm-socket-score ${cV(a,i)}`}" href="${iV(e)}" target="_blank" rel="noopener noreferrer">${lV(a)}<span>${r}</span><span class="npm-extension-count">${a}</span></a></li>`})}</ul>`:j}var dV=new Map([[`critical`,`critical`],[`high`,`high`],[`middle`,`moderate`],[`low`,`low`]]),fV=e=>e.replaceAll(/(?<=[a-z])(?=[A-Z])/gu,` `).toLowerCase().replace(/^./u,e=>e.toUpperCase()),pV=new Map,mV=new WeakMap;function hV(e){let t=e?aV({npm:e}):null;return t?(mV.has(t)||mV.set(t,Map.groupBy(t.alerts.filter(e=>e.file),e=>e.file)),mV.get(t)):pV}var gV=(e=[])=>e.map(e=>{let t=dV.get(e.severity)??`low`;return k`<span class="${`npm-socket-file-alert sev-${t}`}" data-tooltip="${`Socket: ${fV(e.type)}, ${t}${e.note?` \xB7 ${e.note}`:``}`}">${fV(e.type)}</span>`});function _V(e,t){return YB(e.npm,nV(e.npm.name),aV(e),ej(e.npm,t?t.npm?.version??`(empty)`:null))}function vV(e,t){let n=JB(e),r=n&&t!==null&&[...t].every(QH)?[]:aV(e)?.alerts??[];if(!n&&r.length===0)return j;let i=[...t??[]].find(e=>/^readme(?:\.md)?$/iu.test(e));return k`<div class="npm-alerts">${n?k`<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${i?k`: ${oM(i,t,`its readme`)}`:``}.</p>`:j} ${r.length>0?yV(e,r,t):j}</div>`}function yV(e,t,n){return k`<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="${iV(e)}" target="_blank" rel="noopener noreferrer">socket.dev${CB}</a></span><ul>${t.map(e=>{let t=dV.get(e.severity)??`info`;return k`<li><span class="${`bundle-advisory-severity sev-${t}`}">${t}</span> <span class="npm-socket-alert-type">${fV(e.type)}</span> ${e.file?k`<span class="npm-socket-alert-file">in ${oM(e.file,n)}</span>`:j} ${e.note?k`<p class="npm-socket-alert-note">${e.note}</p>`:j}</li>`})}</ul></div>`}function bV(e,t,n=j){let r=tV(e.npm.name),i=zH(ej(e.npm)?.findings.find(({id:e})=>e===`popularity`));return k`<div class="npm-figures"><npm-downloads-chart role="region" aria-label="Downloads" .downloads="${r.downloads}" .status="${r.status}" .known="${i}"></npm-downloads-chart><div class="npm-figures-actions">${rV(e)}${t}</div>${n}</div>`}var xV=k`<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>`,SV=k`<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>`,CV=O(sa),wV=k`<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 TV(e){if(!e.npm.manifest.github?.github)return j;let t=tV(e.npm.name),n=t.status===`ready`?t.github:null;if(!n)return j;let r=(e,t,r,i)=>k`<a class="bundle-origin-link npm-github-figure" href="${`https://github.com/${Pe(n.repo)}/${i}`}" data-tooltip="${`${t.toLocaleString(`en`)} ${r}`}" target="_blank" rel="noopener noreferrer">${e}<span>${bA.format(t)}</span></a>`,i=typeof n.openPulls==`number`?n.openPulls:null,a=i===null?n.openIssues:Math.max(n.openIssues-i,0);return k`${r(xV,n.stars,n.stars===1?`star`:`stars`,`stargazers`)} ${r(wV,n.forks,n.forks===1?`fork`:`forks`,`forks`)} ${r(SV,a,i===null?`open issues and pull requests`:a===1?`open issue`:`open issues`,`issues`)} ${i===null?j:r(CV,i,i===1?`open pull request`:`open pull requests`,`pulls`)} ${n.archived?k`<span class="npm-github-archived">Archived</span>`:j}`}var EV=({name:e,version:t,private:n,manifest:r})=>n||!r.provenance?null:xj(`provenance`,`${e}@${t}`,()=>Ib(e,t),e=>({provenance:e.provenance??null}));function DV(e){let t=EV(e);return t!==null&&(t.status===`loading`||!!t.provenance?.builder)}function OV(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 kV=(e,t)=>t?t===`github-hosted`||t===`gitlab-hosted`:e===`GitHub Actions`;function AV(e){if(e.npm.private)return j;let t=EV(e.npm);if(!t)return k`<span class="npm-commit-missing">None</span>`;if(t.status===`loading`)return k`<span class="npm-commit-missing">Checking…</span>`;if(t.status===`error`)return k`<span class="npm-commit-missing">Couldn't be read</span>`;if(!t.provenance)return k`<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:i,workflow:a,ref:o,builder:s,run:c,logIndex:l,runner:u}=t.provenance,d=(e,t,n=j)=>k`<a class="bundle-origin-link" href="${e}" data-tooltip="${n}" target="_blank" rel="noopener noreferrer"><span>${t}</span></a>`,f=/^https:\/\/github\.com\/([^/]+\/[^/]+)$/u.exec(r)?.[1]??null,p=OV(s,u),m=p?.startsWith(`GitLab CI`),h=f??r.replace(/^https:\/\//u,``),g=n.github?.github??(n.gitlab?`gitlab.com/${n.gitlab}`:null),_=g&&g.toLowerCase()!==h.toLowerCase(),v=a?.split(`/`).at(-1),y=[a?f&&i?d(`${r}/blob/${i}/${a.split(`/`).map(encodeURIComponent).join(`/`)}`,v,a===v?j:a):k`<span class="mono" data-tooltip="${a===v?j:a}">${v}</span>`:j,c?d(c,`Run`):j,l===null?j:d(`https://search.sigstore.dev/?logIndex=${l}`,`Transparency log`)].filter(e=>e!==j);return k`<span class="npm-provenance"><span class="npm-provenance-line">${p?k`<span class="${kV(p,u)&&!_?`npm-provenance-builder is-hosted`:`npm-provenance-builder`}">${p}</span>`:j} <span class="npm-provenance-sep">from</span> ${i?d(f?`${r}/commit/${i}`:m?`${r}/-/commit/${i}`:r,`${h}@${i.slice(0,7)}`,`${r} at ${i}${o?` (${o})`:``}`):d(r,h)} ${_?k`<span class="npm-provenance-warning" data-tooltip="${`The package names ${g}`}">Not the repository it names</span>`:j}</span> ${y.length>0?k`<span class="npm-provenance-line is-how">${y.map((e,t)=>t===0?e:k`<span class="npm-provenance-sep" aria-hidden="true">·</span>${e}`)}</span>`:j}</span>`}function jV(e,t,n){let r=e.affected.map(e=>t[e]).filter(Boolean);return r.includes(n)?`affects`:r.length>0&&r.every(e=>i(e,n)<0)?`fixed`:`later`}function MV(){let e=P.managedSession?.id;return()=>P.managedSession?.id===e}function NV(e,t){return OB({...e,title:e.title??e.id,severity:$B(e),cvss:{score:e.cvss},vulnerable_versions:e.range},({title:e,severity:n,details:r})=>_e({heading:e,severity:n,markdown:r,isCurrent:t}))}function PV(e){let{name:t,version:n}=e.npm,r=nV(t),i=MV(),a=r.status===`ready`,o=a?r.advisories:[],s=o.map(e=>jV(e,r.versions,n)),c=eV.map(([e,t])=>({status:e,heading:t(n),advisories:o.filter((t,n)=>s[n]===e)})).filter(e=>e.advisories.length>0),l=s.filter(e=>e===`affects`).length,u=a&&r.keptAt?k`<p class="npm-advisories-note">GitHub's repository advisories are as of ${GH(Date.now()-Date.parse(r.keptAt))} ago: they couldn't be checked now.</p>`:a&&!r.repository?k`<p class="npm-advisories-note">GitHub's repository advisories couldn't be checked; npm's are shown.</p>`:j,d=r.status===`loading`?k`<p class="bundles-overview-col-empty">Checking advisories…</p>`:r.status===`error`?k`<p class="bundles-overview-col-empty">Couldn't check advisories.</p>`:c.length===0?k`${u}<p class="bundles-overview-col-empty">No advisories for any version.</p>`:k`${u}${c.map(e=>k`<section class="${`npm-advisory-group is-${e.status}`}"><h4 class="npm-advisory-group-head">${e.heading} <span class="bundles-overview-col-count">${e.advisories.length}</span></h4><ul class="bundle-advisories-rows">${e.advisories.map(e=>NV(e,i))}</ul></section>`)}`;return rA({title:`Advisories`,count:a?o.length:`…`,body:d,className:`npm-advisories-col`,extra:a?k`<span class="${`npm-advisories-active${l>0?` is-active`:``}`}">${l} active</span>`:j})}var FV=[...xe].filter(([,{mark:e}])=>e!==null).map(([e])=>e),IV=[...xe].filter(([,{mark:e}])=>e===null).map(([e])=>e),LV=[null,`notice`,`warn`];function RV(e){let t=new Map,n=new Map,r=0;for(let i of e){let e=ve(i);for(let r of e){t.set(r,(t.get(r)??0)+1);let e=ye(i,r);LV.indexOf(e)>LV.indexOf(n.get(r)??null)&&n.set(r,e)}e.some(e=>xe.get(e).mark)&&r++}return{counts:t,marks:n,unreadable:r}}var zV=new WeakMap;function BV(e){let t=e.npm?LO(e):e,n=zV.get(e);if(n?.of!==t){let{sources:r,sourcesContent:i}=e.json,a=new Map(r.map((t,n)=>[t,VO(e,t,i[n])]).filter(([,e])=>e)),o=new Set(r.filter((e,t)=>typeof i[t]!=`string`)),{counts:s,marks:c,unreadable:l}=RV(a.values()),u=Xt(e),d=Ht(e),f={files:0,lines:0,unpacked:0};for(let e of r.filter(e=>!QH(e)))o.has(e)||f.files++,f.lines+=u.get(e)??0,f.unpacked+=d.get(e)??0;n={of:t,paths:new Set(r),byPath:a,counts:s,marks:c,unreadable:l,sizes:d,extensions:new Map(r.map(e=>[e,YH(e)])),binaries:new Set([...o].toSorted((e,t)=>e.localeCompare(t))),types:$H(r,d,u),content:f},zV.set(e,n)}return n}var VV={key:null,chip:null},HV=e=>`${e.npm.name}@${e.npm.version}`,UV=e=>VV.key===HV(e)?VV.chip:null;function WV(e){let t=UV(e);return t&&{label:t.label,keeps:t.keeps,clear:()=>{VV={key:null,chip:null},Z()}}}function GV(e,t,n,r,{classes:i=``,tooltip:a=j}={}){let o=UV(e)?.id===t.id;return k`<li><button type="button" class="${`npm-extension npm-category${i}`}" aria-pressed="${String(o)}" data-tooltip="${a}" @click="${()=>{VV={key:HV(e),chip:o?null:t},Z()}}">${n}<span class="npm-extension-count">${r.toLocaleString(`en`)}</span></button></li>`}function KV(e,t,n){let{name:r}=xe.get(n),{byPath:i,counts:a,marks:o}=BV(t),s=o.get(n);return GV(e,{id:`category:${n}`,label:r,keeps:e=>i.has(e)&&ve(i.get(e)).includes(n)},k`<span>${r}</span>`,a.get(n),{classes:s?` is-${s}`:``})}function qV({counts:e,marks:t,unreadable:n},r,i,a){let o=FV.filter(t=>e.has(t));if(o.length===0)return j;let s=o.some(e=>t.get(e)===`warn`);return k`<div class="${`npm-readability-warning${s?` is-warn`:``}`}" role="note"><span class="npm-readability-warning-text"><strong>${n.toLocaleString(`en`)} of ${r.toLocaleString(`en`)} ${i}</strong> can be hard to review by reading them:</span><ul class="npm-extensions">${o.map(a)}</ul></div>`}function JV(e,t){return qV(BV(t),t.json.sources.length,`files`,n=>KV(e,t,n))}function YV(e,t,n=!1,r=void 0){let{byPath:i,sizes:a}=BV(e),o=n?t:void 0;return k`${IB(kB(e,t),void 0,o)}${VB(LB(e,t),XV(r),o)}${QO(e,t,a.get(t))}${XO(i.get(t))}`}var XV=e=>e===void 0||e?.details.npm&&!LO(e.details)?void 0:e&&LB(e.details,e.path);function ZV(e,t,n=[],r=void 0){let{stamps:i,exfiltration:a}=zO(e,t),o=XV(r),s=o===void 0?null:new Map(Oe(a).map(([e,t])=>[e,ke(e,t,o)]));return[...n.map(e=>({name:fV(e.type),severity:dV.get(e.severity)??`low`})),...i.map(e=>s?.has(e.name)?{...e,severity:s.get(e.name)}:e)]}var QV=new WeakMap;function $V(e,t){let n=e&&t?.npm?ej(t.npm,e.npm?.version??`(empty)`):null;if(!n)return null;if(!QV.has(n)){let t=new Map;for(let{host:r,places:i}of sH(n).get(`new-hosts`)?.hosts??[])for(let{path:n,line:a}of i)t.set(n,[...t.get(n)??[],{host:r,line:a,was:e.npm?.version??null}]);QV.set(n,t)}return QV.get(n)}function eH(e){if(!e?.length)return j;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 k`<span class="npm-new-host" data-tooltip="${`${t}: ${e.map(({host:e,line:t})=>`${e}, line ${t}`).join(`; `)} \xB7 ${r}`}" .tooltipContent="${k`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${e.map(({host:e,line:t})=>k`<span class="compare-tip-path">${e}</span><span class="compare-tip-said">line ${t}</span>`)}</div><div class="compare-tip-note">${r}</div></div>`}">${t}</span>`}var tH={icon:(e,t)=>yt(e,t.map(([e,t])=>_t(e,t)).find(gt)),alerts:e=>hV(e?.npm),alertTags:gV,newHosts:$V,newHostTag:eH,tag:(e,t,n)=>YV(e,t,!1,n),flags:(e,t,n)=>ZV(e,t,[],n),warning(e,t){let{byPath:n}=BV(e),r=RV(t.filter(e=>n.has(e)).map(e=>n.get(e))),{counts:i,marks:a}=r;return qV(r,t.length,t.length===1?`file added or changed`:`files added or changed`,e=>{let{name:t}=xe.get(e),n=a.get(e);return k`<li><span class="${`npm-extension is-${n}`}"><span>${t}</span><span class="npm-extension-count">${i.get(e).toLocaleString(`en`)}</span></span></li>`})}},nH=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`]]),rH={critical:`is-critical`,high:`is-warn`,moderate:`is-moderate`,low:`is-low`},iH=e=>e>=730?`${Math.floor(e/365)} years`:e>=60?`${Math.floor(e/30)} months`:`${e} days`;function aH(e){let t=e?.score;if(!t)return j;let{score:n,level:r,raised:i,lowered:a}=t,o=i.map(({id:e,severity:t})=>[nH.get(e)??e,t]),s=a&&o.length>0?`Lowered by ${Math.round(a.by*100)}%: out ${iH(a.days)}${a.tier===null?``:`, its package npm's ${DA(a.tier)} by downloads`}`:null,c=[`Risk ${n} of 100`,...o.length===0?[`Nothing found that calls for a look`]:o.map(([e,t])=>`${e}, ${t}`),...s?[s]:[]].join(`
|
|
175
|
+
`);return k`<li><span class="${`npm-extension npm-risk-score ${rH[r]}`}" data-tooltip="${c}" .tooltipContent="${k`<div class="compare-tip"><div class="compare-tip-head">Risk ${n} of 100</div>${o.length===0?k`<span class="compare-tip-none">Nothing found that calls for a look</span>`:k`<div class="compare-tip-rows">${o.map(([e,t])=>k`<span class="npm-risk-finding">${e}</span><span class="${`compare-tip-said npm-risk-severity sev-${t}`}">${t}</span>`)}</div>`} ${s?k`<div class="compare-tip-note">${s}</div>`:j}</div>`}">${lV(n)}<span>Risk</span><span class="npm-extension-count">${n}</span></span></li>`}var oH=(e,t)=>[gH(t.get(`malware`)),_H(t.get(`deprecated`)),xH(e,t.get(`publisher`)),SH(e,t.get(`provenance-lost`)),CH(e,t.get(`held-install-scripts`)),...AH(e,t),...TH(e,t),EH(t.get(`new-hosts`)),jH(t.get(`too-new`))],sH=e=>new Map((e?.findings??[]).map(e=>[e.id,e]));function cH(e,t){if(!e||!t?.npm)return j;let n=[e.npm??{name:t.npm.name,version:`Empty package`,private:!0},t.npm],r=pH(n),i=ej(t.npm,e.npm?.version??`(empty)`),a=sH(i),o=[aH(i),...oH(n,a),MH(n,r),...LH(n,r,a.get(`malware`)),VH(t.npm.name,a.get(`popularity`))].filter(e=>e!==j);return o.length===0?j:k`<ul class="npm-extensions npm-compare-badges" aria-label="Versions at a glance">${o}</ul>`}function lH(e){let{npm:t}=e,n=pH([t]),r=ej(t),i=sH(r),a=r?.oldVersion?[{name:t.name,version:r.oldVersion},t]:[t],o=[aH(r),...oH(a,i),MH([t],n),...LH([t],n,i.get(`malware`))].filter(e=>e!==j);return o.length===0?j:k`<ul class="npm-extensions npm-overview-badges" aria-label="Version at a glance">${o}</ul>`}function uH(e){let t=e?.files??[],n=t=>[`${t.was.toLocaleString(`en`)} \u2192 ${t.now.toLocaleString(`en`)} characters`,...t.rebuilt?[`its source map rebuilt with it`]:[],...e.major?[`in a major release`]:[]];return e?.severity===`critical`||!e?DH(`npm-compare-unreadable`,`Now unreadable`,t,n):OH(`${dH[e.severity]} npm-held-file npm-compare-unreadable`,`Now unreadable`,t,n)}var dH={critical:`is-critical`,high:`is-warn`,moderate:`is-moderate`},fH=e=>[...Te.keys()].map(t=>{let n=e.get(`held-${HB(t)}`),r=n?.files??[],i=e=>e.added?new Map([...e.found].filter(([t])=>!e.added.has(t))):void 0;return OH(`${dH[n?.severity]} npm-held-file npm-files-${HB(t)}`,t,r,e=>zB(e.found,i(e)),RB(r.map(e=>e.found)))});function pH(e){let t=nV(e.at(-1).name);return t.status===`loading`?null:e.map(({version:e})=>{let n=t.status===`ready`?t.versions.indexOf(e):-1;return n===-1?[]:t.advisories.filter(e=>e.affected.includes(n))})}var mH=(e,t)=>e===t?`${t??`–`}`:`${e??`–`} \u2192 ${t??`–`}`,hH=e=>QB.find(t=>e.some(e=>$B(e)===t));function gH(e){if(!e)return j;let t=[...e.takenDown?[`Taken down by npm`]:[],...(e.advisories??[]).map(({id:e,title:t})=>t?`${e}: ${t}`:e)];return k`<li><span class="npm-extension npm-malware" data-tooltip="${t.join(`
|
|
176
|
+
`)}">Malware</span></li>`}function _H(e){return e?k`<li><span class="npm-extension npm-compare-deprecated" data-tooltip="${lM(e.message)}">Deprecated</span></li>`:j}var vH={critical:`is-from-known`,high:`is-to-unknown`},yH={known:`is-known`,maintainer:`is-maintainer`},bH={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 xH([e,t],n){if(!n)return j;let{was:r,now:i,wasKnown:a,nowKnown:o,severity:s,major:c}=n,l=n.wasStanding??(a?`known`:`unknown`),u=n.nowStanding??(o?`known`:`unknown`),d=(e,t)=>k`<span class="${`npm-compare-account ${yH[t]??`is-unknown`}`}">~${e}</span>`,f=vH[s]??`is-to-known`,p=k`A different npm account published the open version,<br>${bH[u]},<br>after ${bH[l]}${c?k`<br>in a major release`:j}`;return k`<li><a class="${`npm-extension npm-compare-publisher ${f}`}" href="${`https://www.npmjs.com/~${encodeURIComponent(i)}`}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Published by ~${r} (${e.version}), then ~${i} (${t.version})`}" .tooltipContent="${PH(`Published by`,[e,t],[d(r,l),d(i,u)],p)}"><span>Publisher</span><span class="npm-extension-count">${d(r,l)} → ${d(i,u)}</span></a></li>`}function SH([e,t],n){return n?k`<li><span class="npm-extension npm-compare-provenance" data-tooltip="${`npm lists provenance for ${e.version}, none for ${t.version}`}" .tooltipContent="${PH(`npm provenance`,[e,t],[`Listed by npm`,k`<span class="compare-tip-none">None</span>`],`The open version was published without the provenance the one compared with has`)}">Provenance lost</span></li>`:j}function CH(e,t){if(!t)return j;let{scripts:n,flagged:r=[],was:i}=t,a=new Map(i??[]),o=i?e:e.slice(-1),s=i?[i,n]:[n],c=(e,t)=>e.length===0?k`<span class="compare-tip-none">None</span>`:NH(e.map(([e,n])=>[e,n,t.includes(e)])),l=n.map(([e])=>r.includes(e)?`${e} ${a.has(e)?`changed`:`added`}`:e).join(`, `);return k`<li><span class="npm-extension is-warn npm-compare-install" data-tooltip="${o.map(({version:e},t)=>`${e}: ${s[t].map(([e,t])=>`${e}: ${t}`).join(`; `)||`none`}`).join(` · `)}" .tooltipContent="${PH(`Install scripts`,o,s.map((e,t)=>c(e,t===s.length-1?r:[])))}"><span>${n.length===1?`Install script`:`Install scripts`}</span><span class="npm-extension-count">${l}</span></span></li>`}var wH=8;function TH(e,t){let n=e=>t.get(e)?.files??[],r=(e,n)=>`${dH[t.get(e)?.severity]} npm-held-file ${n}`;return[OH(r(`held-runs-code`,`npm-files-runs`),`Runs code`,n(`held-runs-code`),e=>MB(e.found,e.added),je(n(`held-runs-code`).map(e=>e.found)),null,!1),OH(r(`held-credentials`,`npm-files-credentials`),`Credentials`,n(`held-credentials`),e=>FB(e.found,e.added)),...fH(t),DH(`npm-compare-large`,`Large new code`,n(`large-code`),e=>Wr(e.bytes)),uH(t.get(`now-unreadable`)),OH(r(`held-obfuscated`,`npm-files-obfuscated`),`Obfuscated`,n(`held-obfuscated`),t=>`${BO(t.found)}${t.added?`, new since ${e[0].version}`:``}`),DH(`npm-compare-binary`,`Binary code`,n(`binary-code`),e=>`${Wr(e.bytes)}, not UTF-8 or holding a NUL`)]}function EH(e){let t=e?.hosts??[],n=t.map(({host:e,places:t})=>{let n=t.slice(0,wH).map(({path:e,line:t})=>`${e}, line ${t}`);return{path:e,at:t.length>n.length?[...n,`and ${(t.length-n.length).toLocaleString(`en`)} more files`]:n}}),[r]=t,i=t.length===1&&r.places.length===1?{path:r.path,line:r.line,query:r.host}:null;return OH(`is-warn npm-compare-hosts`,n.length===1?`New host`:`New hosts`,n,e=>e.at,n.length===1?n[0].path:null,i&&(e=>e.currentTarget.dispatchEvent(new CustomEvent(`compare-open-line`,{detail:i,bubbles:!0,composed:!0}))))}function DH(e,...t){return OH(`npm-compare-file ${e}`,...t)}function OH(e,t,n,r,i=null,a=null,o=!0){if(n.length===0)return j;let s=n.slice(0,wH),c=n.length>s.length?`and ${(n.length-s.length).toLocaleString(`en`)} more`:null,l=e=>[r(e)].flat(),u=`${t}: ${[...s.map(e=>`${e.path} (${l(e).join(`; `)})`),...c?[c]:[]].join(`, `)}`,d=k`<div class="compare-tip"><div class="compare-tip-head">${t}</div><div class="compare-tip-rows is-files">${s.map(e=>k`<span class="compare-tip-path">${e.path}</span><span class="compare-tip-said">${l(e).length>1?k`<span class="compare-tip-lines">${l(e).map(e=>k`<span>${e}</span>`)}</span>`:r(e)}</span>`)}</div>${c?k`<div class="compare-tip-note">${c}</div>`:j}</div>`,f=k`${o?k`<span>${t}</span>`:k`<span class="sr-only">${t}</span>`}${i!==null||n.length>1?k`<span class="npm-extension-count">${i??n.length.toLocaleString(`en`)}</span>`:j}`;return a?k`<li><button type="button" class="${`npm-extension is-open ${e}`}" data-tooltip="${u}" .tooltipContent="${d}" @click="${a}">${f}</button></li>`:k`<li><span class="${`npm-extension ${e}`}" data-tooltip="${u}" .tooltipContent="${d}">${f}</span></li>`}var kH=(e,{created:t,gap:n,level:r,tier:i,installs:a,missing:o,was:s,severity:c})=>[c===`notice`?`no risk counted`:null,s===void 0?null:`was ${s}`,t?`new package, ${n>=0?`${GH(n)} old`:`published later`}`:o?`no package npm has`:r?`npm's ${DA(i??1/0)}`:null,a?.scripts?`installs ${a.version}${a.latest&&a.latest!==a.version?` (its latest ${a.latest})`:``}${a.new?`, published since ${e[0].version}`:``}, running its install scripts`:null].filter(Boolean).join(`; `)||null;function AH(e,t){let{version:n}=e.at(-1),r=t.get(`held-non-registry-deps`)?.dependencies??[],i=t.get(`held-unused-deps`),a=i?.dependencies??[],o=t=>t.some(e=>e.added)?`; new since ${e[0].version}: ${t.filter(e=>e.added).map(({name:e})=>e).join(`, `)}`:``,s=[];if(r.length>0){let t=r.filter(e=>e.added).map(e=>`${e.name} was ${e.was??`none`}`);s.push(k`<li><span class="npm-extension is-warn npm-compare-registry" data-tooltip="${`From elsewhere than npm's registry: ${r.map(e=>`${e.name} ${e.now}`).join(`, `)}${o(r)}`}" .tooltipContent="${PH(`From elsewhere than npm's registry`,[e.at(-1)],[NH(r.map(e=>[e.name,e.now,e.added]))],t.length>0?`New since ${e[0].version}: ${t.join(`, `)}`:null)}"><span>Non-registry deps</span><span class="npm-extension-count">${r.length.toLocaleString(`en`)}</span></span></li>`)}if(a.length>0){let[t,r]=a.length===1?[`it`,`its`]:[`them`,`their`],c=e=>e.kind?`${e.name} (${e.kind})`:e.name;s.push(k`<li><span class="${`npm-extension ${i.severity===`notice`?`is-notice`:dH[i.severity]??`is-warn`} npm-compare-unimported`}" data-tooltip="${`Imported by nothing of ${n}: ${a.map(t=>`${t.name} ${t.range}${kH(e,t)?` (${kH(e,t)})`:``}`).join(`, `)}${o(a)}`}" .tooltipContent="${PH(`Nothing imports ${t}`,[e.at(-1)],[NH(a.map(t=>[[c(t),kH(e,t)].filter(Boolean).join(`, `),t.range,t.added]))],`No code file of ${n} names ${t} as an import would, nor does an install script; npm installs ${t} all the same, running ${r} install scripts`)}"><span>Unused deps</span><span class="npm-extension-count">${a.length.toLocaleString(`en`)}</span></span></li>`)}return s}function jH(e){return e?k`<li><span class="npm-extension is-warn npm-compare-published" data-tooltip="${Nj(e.published)}">${jj(e.published)}</span></li>`:j}function MH(e,t){if(!t)return j;let n=t.at(-1),r=e.length>1?t[0]:n;if(r.length===0&&n.length===0)return j;let i=n.length===0?`is-cleared`:`sev-${hH(n)}`,a=n.filter(e=>!r.includes(e)).length,o=r.filter(e=>!n.includes(e)).length,s=PH(`Advisories affecting`,e,t.map(e=>e.length===0?k`<span class="compare-tip-none">none</span>`:k`<span class="compare-tip-count">${e.length}</span><span class="compare-tip-severities">${QB.map(t=>[t,e.filter(e=>$B(e)===t).length]).filter(([,e])=>e>0).map(([e,t])=>k`<span class="${`compare-tip-severity sev-${e}`}">${t} ${e}</span>`)}</span>`),e.length>1?`${a} new \xB7 ${o} fixed`:null),c=`Advisories affecting ${e.map(({version:e},n)=>`${e}: ${t[n].length}`).join(`, `)}`,l=k`<span>Advisories</span><span class="npm-extension-count">${mH(r.length,n.length)}</span>`;return e.length>1?k`<li><button type="button" class="${`npm-extension npm-compare-advisories ${i}`}" aria-haspopup="dialog" data-tooltip="${c}" .tooltipContent="${s}" @click="${()=>FH(e,t)}">${l}</button></li>`:k`<li><span class="${`npm-extension npm-compare-advisories ${i}`}" data-tooltip="${c}" .tooltipContent="${s}">${l}</span></li>`}var NH=e=>k`<span class="compare-tip-lines">${e.map(([e,t,n])=>t==null?k`<span class="compare-tip-none">${e}: none</span>`:k`<span class="${n?`is-flagged`:j}">${e}: <code>${t}</code></span>`)}</span>`,PH=(e,t,n,r=null)=>k`<div class="compare-tip"><div class="compare-tip-head">${e}</div><div class="compare-tip-rows">${t.map(({version:e},t)=>k`<span class="compare-tip-version">${e}</span><span class="compare-tip-said">${n[t]}</span>`)}</div>${r?k`<div class="compare-tip-note">${r}</div>`:j}</div>`;function FH([e,t],[n,r]){let i=MV(),a=[[`new`,`New in ${t.version}`,r.filter(e=>!n.includes(e))],[`kept`,`Still affecting ${t.version}`,r.filter(e=>n.includes(e))],[`fixed`,`Fixed in ${t.version}`,n.filter(e=>!r.includes(e))]].filter(([,,e])=>e.length>0).map(([e,t,n])=>({status:e,heading:t,rows:n.map(e=>NV(e,i))}));ie({heading:`Advisories \xB7 ${e.name} ${e.version} \u2192 ${t.version}`,groups:a,isCurrent:i})}function IH(e,t,n){if(e===null||e>=n)return!1;let r=hH(t);return r===void 0||QB.indexOf(e<=25?`critical`:`high`)<QB.indexOf(r)}function LH(e,t,n=null){let r=e.at(-1),i=e.map(e=>aV({npm:e})?.scores??null);return!i.at(-1)||n?[]:oV.flatMap(([n,a,o,s])=>{let c=i.map(e=>e?Math.round(e[n]*100):null),l=c.at(-1),u=e.length>1?c[0]:l;return l===null||l>=o||n===`vulnerability`&&!(t&&IH(l,t.at(-1),o))||n===`maintenance`&&r.manifest?.deprecated&&l>=sV?[]:[k`<li><a class="${`npm-extension npm-socket-score ${cV(l,s)}`}" href="${iV({npm:r})}" target="_blank" rel="noopener noreferrer" data-tooltip="${`Socket's ${a.toLowerCase()} score: ${e.map(({version:e},t)=>`${c[t]??`none`} for ${e}`).join(`, `)}`}" .tooltipContent="${PH(`Socket's ${a.toLowerCase()} score`,e,c.map(e=>e===null?k`<span class="compare-tip-none">none</span>`:k`<span class="${`compare-tip-score ${cV(e,s)}`}">${lV(e)}${e}</span>`),n===`vulnerability`?`Shown under ${o}, where worse than the advisories found`:`Shown under ${o}`)}">${lV(l)}<span>${a}</span><span class="npm-extension-count">${mH(u,l)}</span></a></li>`]})}var RH={critical:`is-unpopular`,high:`is-low`,moderate:`is-mid`};function zH({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 BH(e,t=null,n=!1){let{tier:r,level:i,severity:a}=e,o=t?.total.toLocaleString(`en`),s=n?`npm-extension npm-popularity npm-downloads-tier ${RH[a]??`is-low`}`:`npm-downloads-tier ${i}`,c=n?zH(e):null,l=[t&&`${o} downloads/month, ${t.month}`,c].filter(Boolean).join(` · `);return k`<span class="${s}" data-tooltip="${l||j}" .tooltipContent="${t||c?k`${t?k`<div><strong>${o}</strong> downloads/month</div><div class="compare-tip-note">${t.month}</div>`:j}${c?k`<div class="compare-tip-note">${c}</div>`:j}`:null}">${DA(r??1/0)}</span>`}function VH(e,t){let n=tV(e);return t?k`<li>${BH(t,n.status===`ready`&&n.downloads?jA(n.downloads):null,!0)}</li>`:j}var HH=k`<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>`,UH=e=>new Intl.NumberFormat(`en`,{style:`unit`,unit:e,unitDisplay:`long`}),WH={minute:UH(`minute`),hour:UH(`hour`),day:UH(`day`),month:UH(`month`),year:UH(`year`)};function GH(e){let t=Math.max(0,Math.floor(e/6e4)),n=Math.floor(t/1440);return t<60?WH.minute.format(t):t<1440?WH.hour.format(Math.floor(t/60)):n<60?WH.day.format(n):n<730?WH.month.format(Math.floor(n/30.44)):WH.year.format(Math.floor(n/365.25))}function KH({compared:e},{created:t,gap:n}){if(!t)return j;let[r,i]=e,a=GH(Math.abs(n)),o=[`First published on ${Mj(t)}`,`${a} ${n>=0?`before`:`after`} ${i.version} was`],s=`npm had no package by its name when ${n>=0?r.version:`either version`} was published`;return k`<span class="npm-dependency-flag is-new" data-tooltip="${[...o,s].join(` · `)}" .tooltipContent="${k`<div class="compare-tip"><div class="compare-tip-head">New package</div>${o.map(e=>k`<div>${e}</div>`)}<div class="compare-tip-note">${s}</div></div>`}">${n>=0?`${a} old`:`published later`}</span>`}function qH(e,t){let n=$A(e.flags);if(t!==`added`||!e.level)return[n,j];let r=e.month?MA({total:e.month.total,from:new Date(e.month.from)}):null;return[n,e.uncounted?HH:BH(e,r),e.compared?KH(e,e):j]}function JH(e,t){let{counts:n}=BV(t),r=IV.filter(e=>n.has(e));return r.length===0?j:k`<ul class="npm-extensions" aria-label="Readable files">${r.map(n=>KV(e,t,n))}</ul>`}function YH(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 XH(e,t,n=new Map){let r=new Map;for(let i of e){let e=YH(i),a=r.get(e)??{extension:e,files:0,bytes:0,lines:null};a.files++,a.bytes+=t.get(i)??0,n.has(i)&&(a.lines=(a.lines??0)+n.get(i)),r.set(e,a)}return[...r.values()].toSorted((e,t)=>t.files-e.files||e.extension.localeCompare(t.extension))}var ZH=/^(?:package\.json|readme(?:\.md)?)$/iu,QH=e=>ZH.test(e)||LA.test(e);function $H(e,t,n=new Map){let r=e.filter(QH),i=new Set(e.filter(e=>!QH(e)).map(YH)),{files:a,bytes:o,lines:s}=XH(r,t,n).reduce((e,t)=>({files:e.files+t.files,bytes:e.bytes+t.bytes,lines:t.lines===null?e.lines:(e.lines??0)+t.lines}),{files:0,bytes:0,lines:null});return{package:r.length>0?{files:a,bytes:o,lines:s}:null,extensions:XH(e,t,n).filter(e=>i.has(e.extension))}}var eU=({bytes:e,lines:t})=>t===null?Wr(e):`${Wr(e)} \xB7 ${t.toLocaleString(`en`)} LoC`;function tU(e,t){let{types:n,extensions:r}=BV(t);return!n.package&&n.extensions.length===0?j:k`<ul class="npm-extensions" aria-label="File types">${n.package?GV(e,{id:`package`,label:`Package`,keeps:QH},k`<span>Package</span>`,n.package.files,{tooltip:`package.json, readme and license: ${eU(n.package)}`}):j} ${n.extensions.map(t=>GV(e,{id:`extension:${t.extension}`,label:t.extension||`No extension`,keeps:e=>r.get(e)===t.extension},k`<span class="npm-extension-name">${t.extension||`no extension`}</span>`,t.files,{tooltip:eU(t)}))}</ul>`}function nU(e,t,n){let r=[[`languages`,`Languages`,t],[`readable`,`Readable`,JH(e,n)],[`types`,`File types`,tU(e,n)],[`socket`,`Socket`,uV(e)]].filter(([,,e])=>e!==j);return r.length===0?j:k`<dl class="npm-contents" aria-label="Contents">${r.map(([e,t,n])=>k`<div class="${`npm-contents-${e}`}"><dt>${t}</dt><dd>${n}</dd></div>`)}</dl>`}function rU(e,t){return e.size===0?j:rA({title:`Binary files`,count:e.size,list:!0,body:k`<ul class="bundles-sources-list">${[...e].map(e=>k`<li><div class="bundles-source-row is-resource">${yt(e,`binary`)}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${e}">${e}</span> ${t.has(e)?k`<span class="bundles-source-size">${Wr(t.get(e))}</span>`:j}</div></li>`)}</ul>`})}var iU=({severity:e})=>Me.indexOf(e),aU=(e,t)=>e.reduce((e,n,r)=>e||n.name.localeCompare(t[r].name),0);function oU(e,t,n){return e.map(e=>({row:e,path:n(e),flags:t(e).toSorted((e,t)=>iU(e)-iU(t)||e.name.localeCompare(t.name))})).toSorted((e,t)=>(t.flags.length>0)-(e.flags.length>0)||e.flags.length>0&&(iU(e.flags[0])-iU(t.flags[0])||t.flags.length-e.flags.length||aU(e.flags,t.flags))||e.path.localeCompare(t.path)).map(({row:e})=>e)}function sU(e){return{...Pj(e),files:tH,badges:cH,dependencyTags:qH,reviewVerdictLimit:_V}}var cU=/^[a-f\d]{40}$/iu,lU={removed:[],added:[],changed:[]},uU=e=>e.kind===`commit`&&cU.test(e.name)?e.name.toLowerCase():HM(e);function dU(e,t,n){return QM({revision:cU.test(t)?NM(e,t)??{kind:`commit`,name:t}:t.startsWith(`heads/`)?{kind:`branch`,name:t.slice(6)}:t.startsWith(`tags/`)?{kind:`tag`,name:t.slice(5)}:{kind:`commit`,name:t},commit:t},n)}var fU=(e,t)=>e.kind===`commit`||!e.name?(e.name||t).slice(0,7):e.name;function pU(e){let{repoId:t,repo:n,commit:r,path:i}=e.repository,a=jM(t),o=QM(e.repository,a);return{noun:`revision`,base:r,options:[],choices:[],name:n=>n===e.integrity||n===r?fU(o,r):fU(dU(t,n,a),n),async load(e){let n=await mb(t,e,i,{signal:J_()});if(n?.repoId!==t||n.path!==i||!cU.test(n.commit??``)||cU.test(e)&&n.commit.toLowerCase()!==e.toLowerCase())throw Error(`The server answered with another directory.`);let r=n.commit.toLowerCase();return cU.test(e)||PM(t,r,dU(t,e,null)),{...RM(FM({...n,commit:r},NM(t,r)),n),compareId:r}},open:(e,r,a)=>BM({repoId:t,repo:n,path:i,bundleTab:`compare`,compare:{target:r,mode:a},...cU.test(e)?{commit:e.toLowerCase()}:{ref:e,revision:dU(t,e,null)}}),dependencies:()=>lU,files:{icon:(e,t)=>yt(e,t.map(([e,t])=>_t(e,t)).find(gt))},select:(e,n)=>k`<repository-revision-pick .refs="${a.status===`ready`?a.value:null}" label="${n}" ?empty="${!e.value}" .revision="${e.value?e.value===r?o:dU(t,e.value,a):null}" @revision-pick="${t=>e.pick(uU(t.detail))}"></repository-revision-pick>`}}var mU=class extends _a{static properties={refs:{attribute:!1},revision:{attribute:!1},label:{},_edit:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.refs=null,this.revision=null,this.label=``,this._edit=null,this._shownKey=null}willUpdate(){let e=JSON.stringify(this.revision);e!==this._shownKey&&(this._shownKey=e,this._edit=null)}changed({detail:e}){let t=eN(e);this._edit=t??{kind:e.kind,name:e.name},t&&this.dispatchEvent(new CustomEvent(`revision-pick`,{detail:t}))}render(){let e=this._edit??this.revision??{kind:`branch`,name:``};return k`<revision-select role="group" aria-label="${this.label}" .refs="${this.refs}" .kind="${e.kind}" .name="${e.name}" .installTooltips="${e=>hr(e)}" @revision-change="${this.changed}"></revision-select>`}};customElements.get(`repository-revision-pick`)||customElements.define(`repository-revision-pick`,mU);var hU=500,gU=14;function _U(e){if(!e)return null;let t={};e.color&&(t.color=e.color);let n=hn(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 vU(e){return e==null?``:JSON.stringify([e.color??``,e.triage??``,e.fix??``,e.flagged])}function yU(e,t){return e.length>100?!1:t==null||(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}var bU=e=>new TextEncoder().encode(e).length,xU=new Map,SU=new Set,CU=(e,t=P.currentManagedTeam)=>JSON.stringify([t,e]),wU=new Map,TU=null,EU=Promise.resolve();function DU(){let e=new Set;for(let t of P.reports)for(let n of t.groups)for(let t of n)typeof t.id==`string`&&t.id&&e.add(t.id);return e}function OU(){return Array.isArray(P.managedReports)&&P.managedReports.length>0?P.managedReports:P.managedReport==null?[]:[P.managedReport]}function kU(e){let t=new Set,n=!1;for(let r of P.reports)if(r._managedReportId===e){n=!0;for(let e of r.groups??[])for(let n of e)typeof n.id==`string`&&n.id&&t.add(n.id)}return n||P.reports.length===0?t:new Set(DU())}function AU(e){let t=OU();for(let n of P.reports)if(n._managedReportId!=null&&(n.groups??[]).some(t=>t.some(t=>t.id===e))){let e=t.find(e=>e.id===n._managedReportId);if(e)return e}return t[0]??null}function jU(){let e=P.managedSession;return P.serverMode===`managed`&&P.localMode!==!0&&e!=null&&qe(e.role,`triage`)}function MU(e){return e===403&&P.managedSession?.viewer?!0:e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function NU(e,t){let n=wU.get(e.key);n??(n={report:e.report,key:e.key,teamId:e.teamId,changes:new Map},wU.set(e.key,n));for(let r of t)n.changes.has(r)||n.changes.set(r,e.changes.get(r))}async function PU(e,t,n){if(!jU())return;let r=[...e.changes.keys()],i=0;for(;i<r.length;){let a=i,o={},s=0,c=gU;for(;i<r.length&&s<200;){let t=r[i],n=bU(`${JSON.stringify(t)}:${JSON.stringify(e.changes.get(t))},`);if(s>0&&c+n>262144)break;o[t]=e.changes.get(t),c+=n,s++,i++}let l=await ax(e.report.id,o,P.managedSession?.csrfToken,e.teamId),u=l>=200&&l<300;if(!u&&!MU(l)){NU(e,r.slice(a));return}u||console.warn(`managed: the server refused a triage batch`,e.report.id,l,Object.keys(o)),!u&&l===403&&P.managedSession?.viewer&&n.add(e.report.id);for(let[n,r]of Object.entries(o)){let i=xU.get(n)?.fix??``,a=u?r?.fix??``:i;a!==i&&t.add(e.teamId),xU.set(n,{key:vU(r),fix:a})}}}function FU(){TU!=null&&(clearTimeout(TU),TU=null);let e=[...wU.values()];if(wU.clear(),e.length===0)return;let t=new Set,n=new Set;for(let r of e)EU=EU.then(()=>PU(r,t,n)).catch(e=>{console.warn(`managed: triage push failed`,e)});EU=EU.finally(()=>{for(let e of t)Uv(e);for(let e of n)HU(e)}).catch(e=>{console.warn(`managed: Fix cache invalidation failed`,e)})}function IU(){if(OU().length!==0&&jU()&&SU.size!==0){for(let e of DU()){let t=_U(P.triage.get(e)),n=vU(t);if((xU.get(e)?.key??``)===n)continue;if(!yU(e,t)){console.warn(`managed: triage entry exceeds the server caps, kept local only`,e),xU.set(e,{key:n,fix:xU.get(e)?.fix??``});continue}let r=AU(e);if(r==null||!SU.has(CU(r.id)))continue;let i=P.currentManagedTeam,a=CU(r.id,i),o=wU.get(a);o??(o={report:r,key:a,teamId:i,changes:new Map},wU.set(a,o)),o.changes.set(e,t)}wU.size!==0&&(TU!=null&&clearTimeout(TU),TU=setTimeout(FU,hU))}}var LU=!1;function RU(){LU||!jU()||(LU=!0,dd(IU))}function zU(){bu(),P.managedComments?.clear(),P.managedIssues.clear(),globalThis.document?.dispatchEvent(new Event(`managed-comments-reset`)),TU!=null&&(clearTimeout(TU),TU=null),wU.clear(),SU.clear(),xU.clear()}async function BU(e,{renderView:t=!0,signal:n,readAnnotations:r}={}){let i=P.reports,a=P.currentManagedTeam,o=P.managedSession?.role,s=P.managedSession?.id,c=()=>!n?.aborted&&P.serverMode===`managed`&&P.localMode!==!0&&P.managedSession!=null&&P.managedSession.id===s&&P.managedSession.role===o&&P.reports===i&&P.currentManagedTeam===a&&OU().some(t=>t.id===e);if(!c()||(SU.delete(CU(e)),FU(),!await VU(n)||!c()))return!1;let l=new Map(P.managedIssues),u=r?await r(e):null,d=r?u?.entries:await ex(e,a,{signal:n});if(d==null||!c())return!1;let f=!1,p=kU(e),m=u&&Xh(p,u.issues,l);for(let e of p){if(!Object.hasOwn(d,e)){xU.delete(e);continue}let t=_U(d[e]);xU.set(e,{key:vU(t),fix:t?.fix??``});let n=t?.triage==null||t.triage===`ignored`?P.triage.get(e)?.ignoredReports:void 0;bn(P.triage,e,{...t,ignoredReports:n,scopedIgnoredReports:P.triage.get(e)?.scopedIgnoredReports})&&(f=!0)}if(SU.add(CU(e)),u&&Wv(a,p,l),m&&!f&&t&&Z(),f){if(await Cd(),!c())return!1;t&&Z()}return IU(),!0}function VU(e){return e?e.aborted?Promise.resolve(!1):new Promise(t=>{let n=n=>{e.removeEventListener(`abort`,r),t(n)},r=()=>n(!1);e.addEventListener(`abort`,r,{once:!0}),EU.then(()=>n(!0),()=>n(!1))}):EU.then(()=>!0)}async function HU(e,{signal:t,readAnnotations:n}={}){let r=P.reports,i=P.currentManagedTeam,a=P.managedSession?.role,o=P.managedSession?.id,s=()=>!t?.aborted&&P.serverMode===`managed`&&!P.localMode&&P.reports===r&&P.currentManagedTeam===i&&P.managedSession?.id===o&&P.managedSession?.role===a&&SU.has(CU(e,i));if(!s()||(FU(),!await VU(t)||!s()))return!1;let c=kU(e),l=new Map([...c].map(e=>[e,xU.get(e)])),u=new Map(P.managedIssues),d=n?await n(e):null,f=n?d?.entries:await ex(e,i,{signal:t});if(f==null||!s())return!1;let p=d&&Xh(c,d.issues,u),m=!1,h=!1;for(let e of c){let t=l.get(e),n=_U(P.triage.get(e));if(xU.get(e)!==t||vU(n)!==(t?.key??``))continue;let r=_U(f[e]);(t?.fix??``)!==(r?.fix??``)&&(h=!0),xU.set(e,{key:vU(r),fix:r?.fix??``});let i=r?.triage==null||r.triage===`ignored`?P.triage.get(e)?.ignoredReports:void 0;bn(P.triage,e,{...r,ignoredReports:i,scopedIgnoredReports:P.triage.get(e)?.scopedIgnoredReports})&&(m=!0)}if(h&&Uv(i),d&&Wv(i,c,u),p&&!m&&Z(),m){if(await Cd(),!s())return!1;Z()}return!0}function UU(e,t){if(!e)return;let n=P.currentManagedReport;if(n!=null&&(P.managedReports.length!==1||P.managedReports[0].id!==n))return;let r;return async i=>(r??=(async()=>(FU(),!await VU(t)||t?.aborted?null:$b(e,{signal:t,reportId:n})))(),(await r)?.(i)??null)}async function WU(e){let t=await g(e),n=await em(t);if(n.kind===`reports`)return{kind:`reports`,reports:n.reports};let r;if(n.kind===`encrypted`){if(r=await ht({tryPassword:e=>_(t,e)}),!r)return null}else r=v(n.text);let i=await Zp(r,{conflictResolver:async(t,n)=>{try{return await pS(t,n,{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 n=t.length;return alert(`Imported ${e.name}. Kept your local triage on ${n} conflicting entr${n===1?`y`:`ies`} because another dialog is open \u2014 re-drop the file to pick again.`),null}}});return(P.currentFile||P.currentWorkspace)&&Z(),{kind:`workspace`,workspace:i}}var GU=`deepview.passkey.firstImportPrompted`;function KU(){try{return localStorage.getItem(GU)===`1`}catch{return!1}}function qU(){try{localStorage.setItem(GU,`1`)}catch{}}async function JU(){if(!(bo()||!So()||KU())){if(!confirm(`Encrypt your DeepView data with a passkey?
|
|
177
|
+
|
|
178
|
+
Your triage notes, workspaces, and report files are stored on this device. Encryption locks them under a passkey (TouchID, Windows Hello, security key) so scripts running here can't read them without the passkey.
|
|
179
|
+
|
|
180
|
+
You can change this anytime from the lock icon in the sidebar header.`)){qU();return}await Ke(),bo()&&qU()}}var YU=null,XU=()=>Promise.resolve(!0);function ZU(e){XU=e}function QU(){YU?.controller.abort(),YU=null}function $U(e,t,n){let{promise:r,resolve:i}=Promise.withResolvers(),a=!1,o=e=>{clearTimeout(l),t.removeEventListener(`abort`,s),i(e)},s=()=>o(!1),c=()=>(!a&&!t.aborted&&(a=!0,clearTimeout(l),Promise.resolve().then(()=>n()&&e(t)).then(e=>o(!!e&&n()),()=>o(!1))),r),l=setTimeout(c,1e3);return t.addEventListener(`abort`,s,{once:!0}),t.aborted&&s(),{promise:r,start:c}}function eW(e,t){return t.aborted?Promise.resolve(!1):new Promise(n=>{let r=e=>{t.removeEventListener(`abort`,i),n(e)},i=()=>r(!1);t.addEventListener(`abort`,i,{once:!0}),e.then(r,()=>r(!1))})}function tW({catalogOnly:e=!1,hydrate:t}={}){let n=P.managedSession,r=J_(),i=[`findings`,`files`,`links`].includes(P.currentView),a=[`workspace-reports`,`workspace-bundles`,`workspace-repositories`,`workspace-dependencies`].includes(P.currentView),o=a||i&&(!e||YU?.teamId===P.currentManagedTeam&&!YU.signal.aborted)?P.currentManagedTeam:null;if(!F()||!n||n.role===`none`||n.publicShare&&!o)return QU(),t?Promise.resolve(!1):void 0;let s=P.managedTeams?.find(e=>e.id===o)?.reports.find(e=>e.id===P.currentManagedReport&&e.visible===!1)?.id??null,c=JSON.stringify([o,s,n.id,n.role,n.csrfToken,!!n.publicShare]);if(YU?.key!==c||YU.signal.aborted){QU();let e=new AbortController,t={key:c,controller:e,signal:e.signal,teamId:o,reportId:s,version:0,target:null};t.current=(e=t.signal)=>!e.aborted&&!t.signal.aborted&&YU===t&&F()&&P.managedSession?.id===n.id&&P.managedSession?.role===n.role&&P.managedSession?.csrfToken===n.csrfToken&&!!P.managedSession?.publicShare==!!n.publicShare,YU=t,nW(t)}let l=YU;if(e||a||!o)return l.target?.ready;let u=Ms(P.reports),d=l.target;if(d?.view===r&&d.reports===u&&!d.signal.aborted)return d.ready;d?.controller.abort();let f=new AbortController,p=AbortSignal.any([f.signal,l.signal,r]),m={controller:f,signal:p,view:r,reports:u,version:d?.reports===u?d.version:0};return l.target=m,m.current=()=>l.current()&&!p.aborted&&l.target===m&&P.currentManagedTeam===o&&Ms(P.reports)===u,m.hydration=t?$U(async e=>{let n=l.version,r=await t(e);return r&&m.current()&&(m.version=n),r},p,m.current):null,m.ready=m.hydration?.promise,(l.version||l.finished)&&(m.hydration?m.hydration.start():m.version<l.version&&rW(l,m,l.signal).then(e=>(!e&&m.current()&&(QU(),tW()),e))),m.ready}function nW(e){let{signal:t,controller:n,current:r}=e;hx(e.teamId,{signal:t,reportId:e.reportId,onTeams:async(e,t)=>{let n=()=>r(e);return n()?await XU(n,e,t)&&n():!1},onUpdate:t=>r(t)?(e.version++,rW(e,e.target,t)):!1,onClose:()=>{r()&&document.dispatchEvent(new Event(`managed-feed-closed`)),n.abort()}}).catch(e=>{r()&&console.warn(`managed: team feed failed`,e)}).finally(()=>{e.finished=!0,r()&&e.target?.hydration?.start()})}async function rW(e,t,n){if(!e.current(n))return!1;if(!t?.current())return!0;if(!t.refresh||t.refresh.controller.signal.aborted){let n=new AbortController,r={controller:n,promise:null},i=AbortSignal.any([n.signal,t.signal]);t.refresh=r,r.promise=iW(e,t,i).catch(()=>!1).finally(()=>{t.refresh===r&&(t.refresh=null)})}let r=t.refresh,i=AbortSignal.any([n,t.signal,r.controller.signal]),a=()=>r.controller.abort();n.addEventListener(`abort`,a,{once:!0});let o;try{o=await eW(r.promise,i)}finally{n.removeEventListener(`abort`,a)}return e.current(n)?t.current()?o?t.version<e.version?rW(e,t,n):!0:!1:!0:!1}async function iW(e,t,n){if(t.hydration&&!await eW(t.hydration.start(),n))return!1;for(;t.current()&&!n.aborted&&t.version<e.version;){let r=e.version,i=UU(e.teamId,n),a=P.managedReports.filter(e=>t.reports.some(t=>t._managedReportId===e.id));if(!(await Promise.all(a.flatMap(e=>[HU(e.id,{signal:n,readAnnotations:i}),YC(e.id,{signal:n,readAnnotations:i})]))).every(Boolean)||!t.current()||n.aborted)return!1;t.version=r}return!n.aborted&&t.current()}function aW(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(e=>Ii(e)===`revalidation`);return t.length>0?t:e}function oW(e){let t=e.map(aW).filter(e=>e.length>0);return t.length>0&&t.every(e=>e.every(e=>e.isApp&&e._source&&!e._sourcePass&&Ii(e)===``))}function sW(e,t=()=>[],{countFindings:n=!1}={}){let{groups:r,conflicts:i}=ig(e,{hideRuledOut:!0}),a=pg(r,t,aW),o=n?{appMode:!1,findings:a.length}:{appMode:!1};return i.size>0||!oW(a)&&!mr(a,{tabs:aW,kindOf:Ii,severityMode:`corrected`})?o:{appMode:!0,appFindings:a.filter(e=>aW(e).some(e=>e.isApp)).length}}var cW=null,lW=0;$u(()=>{lW++});function uW(e,t,n,{complete:r,isCurrent:i}){cW={id:e.id,membership:JSON.stringify(e.reports.toSorted()),reports:t,token:n,complete:r,isCurrent:i}}function dW(e){return!cW||cW.id!==e.id||!cW.isCurrent()||cW.membership!==JSON.stringify(e.reports.toSorted())||!bm(e,cW.token)?null:(cW.linksRevision!==lW&&(cW.metadata=cW.complete?sW(cW.reports,id):{appMode:!1},cW.linksRevision=lW),cW.metadata)}async function fW(e,t,n,{complete:r,isCurrent:i,onReady:a}){if(!i()||(await sd(),!i()))return;let o=await wm(e,n);if(!o||!i())return;let s=r?sW(t,id):{appMode:!1};await Tm(e,s,o)&&i()&&await a(s)}var pW=`deepview.lastFile`;function mW(e,t=`overview`,{push:n=!1}={}){if(F()){let r=P.bundles.find(t=>t.integrity===e),i=r?.npm?uj(r,t,Px(P,t)):r?.repository?zM(r,t,Px(P,t)):jx(P.managedTeams,r,P.currentManagedTeam,t,Px(P,t),P.bundles);n?U.pushRoute(i):U.replaceRoute(i);return}Ua(pW,`b:${e}${t&&t!==`overview`&&Qr.has(t)?` ${t}`:``}`).catch(()=>{})}var X=e=>e!==H();function hW(){return new Promise(e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(e):setTimeout(e,0)})}async function gW(e){return await hW(),e!==null&&X(e)?!1:(Z(),QZ(P.reports.flatMap(e=>e.bundleHashes??[]),()=>e===null||!X(e)).catch(()=>{}),!0)}function _W(){w.selected=null,w.focusedPkg=null,w.layoutCache=null,w.solo=null,w.hidden.clear(),w.pathFilter=``,sr()}function vW(e){for(let t of B.openSessions)t&&!e.has(t.workspaceId)&&(B.closeSession(t.workspaceId),Ih(t.workspaceId))}function yW(){R.classList.remove(`active`),R.replaceChildren(),qm.classList.remove(`hidden`),document.title=`DeepView`}function bW(e){return e instanceof DOMException&&e.name===`NotFoundError`||typeof e?.message==`string`&&e.message.startsWith(`File not found:`)}function xW(e){let t=SW(e.toLowerCase());return t.endsWith(`.map`)?`sourcemap`:t===`stasis.code.br`||t.endsWith(`.stasis.code.br`)?`stasis`:null}function SW(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,``)}async function CW({name:e,content:t,existingNames:n}){if(!n.has(e))return await zc(e,t),n.add(e),{name:e,content:t};let r;try{r=await Vc(e)}catch(r){if(!bW(r))throw r;return await zc(e,t),n.add(e),{name:e,content:t}}if(r===t)return{name:e,content:t};let i=L().filter(t=>Array.isArray(t.reports)&&t.reports.includes(e)).filter(t=>ph(t.id,e)),a=await Fe({name:e,workspaceNames:i.map(e=>e.name),existingNames:n});if(a.action===`cancel`)return null;if(a.action===`rename`){let e=a.newName;return await zc(e,t),n.add(e),{name:e,content:t}}let o;if(i.length>0)try{o=await jh(e)}catch(t){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,t)}try{await zc(e,t),i.length>0&&await TW(e,i)}finally{typeof o==`function`&&o()}return{name:e,content:t}}async function wW(e,t){let n=typeof t?.github==`string`?t.github:``;if(n)try{await ic(e,n)}catch(t){console.warn(`Import: failed to adopt the repository "${n}" for "${e}":`,t)}}async function TW(e,t){let n;try{n=await Hc(e)}catch(t){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,t);return}for(let r of t)try{await Fh(r.id);let t=await Ah(r.id,e,n);t&&t.ok===!1&&console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}): ${t.reason??`unknown`}`)}catch(t){console.warn(`Import: failed to upload "${e}" to workspace "${r.name}" (${r.id}):`,t)}}async function EW(e){if(e=[...e],e.length===0||(await $1(),F())||(await JU(),F()))return;let t=null,n=null,r=new Set,i=new Set(await Rc()),a=[];for(let o of e)try{let e=SW(o.name.toLowerCase());if(e.endsWith(`.gz`)||e.endsWith(`.deepview-workspace.enc`)){let e=await WU(o);if(e?.kind===`reports`)for(let n of e.reports){if(typeof n?.name!=`string`||!n.name||typeof n?.content!=`string`)continue;let e=Lu(n.content);if(!e.recognized){a.push(n.name);continue}let r=await CW({name:n.name,content:n.content,existingNames:i});r&&(Fu(r.name,e.count,e.source),await wW(r.name,n.repo),t={name:r.name,content:r.content})}try{let e=await Rc();i.clear();for(let t of e)i.add(t)}catch(e){console.warn(`Import: failed to refresh existingNames after workspace import:`,e)}continue}if(xW(o.name)){let e=new Uint8Array(await o.arrayBuffer()),{integrity:t}=await sl(o.name,e);n=t,r.add(t);continue}let s=await o.text(),c=ut(s,o.name);if(c)for(let e of c){let{count:n,source:r}=Lu(e.content),a=await CW({...e,existingNames:i});a&&(Fu(a.name,n,r),t={name:a.name,content:a.content})}else if(xi(s,e)===`codex`){let e=vi(s);for(let{displayName:n,data:r}of e){let e=n.replaceAll(`/`,`__`)+`.codex`,a=JSON.stringify(r),{count:o,source:s}=Lu(a),c=await CW({name:e,content:a,existingNames:i});c&&(Fu(c.name,o,s),t={name:c.name,content:c.content})}}else{let e=Lu(s);if(!e.recognized)throw Error(`not a recognized DeepView, DeepSec, Piolium, Claude Security, Codex, or Markdown (generic) report, and not a links file`);let n=await CW({name:o.name,content:s,existingNames:i});if(!n)continue;Fu(n.name,e.count,e.source),t={name:n.name,content:n.content}}}catch(e){alert(`Failed to load ${o.name}: ${e.message}`)}if(a.length>0){let e=a.length;alert(`Skipped ${e} report${e===1?``:`s`} no parser recognised: ${a.join(`, `)}`)}await $(),t?await DW(t.name,t.content):n&&(qZ(n),mW(n,P.bundleDetailsTab),Z(),await $(),$Z(n)),QZ(r).catch(()=>{})}async function DW(e,t,{workspaceId:n}={}){if(F())return;let r=Y_();P.currentManagedTeam=null,P.currentManagedReport=null,P.currentReportWorkspace=LC(e,n);let i=new Set(L().filter(t=>Array.isArray(t.reports)&&t.reports.includes(e)).map(e=>e.id));if(vW(i),P.reports=[],Gg(),P.workspaceMerges=[],P.revalidateConflicts=new Map,P.currentFile=e,P.currentWorkspace=null,P.currentLinks=null,P.managedReport=null,P.managedReports=[],P.managedComments.clear(),P.managedIssues.clear(),P.currentView!==`findings`&&P.currentView!==`files`&&(P.currentView=`findings`),P.repoUrl=Zs(e),P.repoEditing=!1,_W(),Ua(pW,Nd(e,P.currentReportWorkspace)).catch(()=>{}),t===void 0){try{t=await Vc(e)}catch(t){if(X(r))return;if(t&&t.message?.includes(`vault locked`)){if(await Av()&&!X(r)){await DW(e);return}X(r)||(P.currentFile=null,await $());return}if(bW(t)){let t=L().find(t=>Array.isArray(t.reports)&&t.reports.includes(e)&&ph(t.id,e));if(t)try{if(await Fh(t.id),X(r))return;let n=await tt({workspaceId:t.id,items:[{kind:`report`,identifier:e}]});if(X(r))return;if(n?.downloaded?.some(t=>t.kind===`report`&&t.identifier===e)){await DW(e);return}}catch(t){if(console.warn(`Re-download prompt for missing "${e}" failed:`,t),X(r))return}X(r)||(P.currentFile=null,await $());return}alert(`Failed to read ${e}: ${t.message}`),P.currentFile=null,await $();return}if(X(r))return}let a=b(t);if(a?(P.currentLinks={name:e,...a},P.currentView=`links`,Z()):await RW(e,t,r),!X(r)){for(let e of i)B.openSession(e),B.refreshSession(e),Fh(e);return await $(),!0}}function OW(e){return P.managedSession?.role===`admin`&&AW({id:null,reports:[{id:e}]},e,{history:!1,deduplication:!0})}async function kW(e,t,{history:n=!0,tab:r=P.teamDependenciesTab}={}){let i=F();if(![`reports`,`bundles`,...i?[`repositories`,`dependencies`]:[]].includes(t))return!1;let a=`workspace-${t}`,o=i?P.managedTeams.find(t=>t.id===e):L().find(t=>t.id===e);if(!o||t===`dependencies`&&(o.dependencyReview!==!0||!ai.has(r)))return!1;if(i&&n&&U.active)return U.navigate(fi({view:a,teamId:e,...t===`dependencies`?{dependencyTab:r}:{}},P.managedTeams));t===`dependencies`&&(P.teamDependenciesTab=r);let s=i?`managed-team:${e}`:e,c=Y_();return vW(new Set),NW({forgetLastView:!1}),P.currentWorkspace=s,P.currentManagedTeam=i?e:null,P.currentView=a,i&&(P.bundles=Ix(P.managedTeams)),R.classList.add(`active`),qm.classList.add(`hidden`),document.body.classList.remove(`report-fullscreen`),Z({animate:!1}),document.querySelector(`#main-content`)?.scrollTo({top:0}),i||Ua(pW,`${t===`reports`?`wrs`:`wbs`}:${e}`).catch(()=>{}),await $(),!X(c)&&(Z({animate:!1}),!X(c))}async function AW(e,t=null,{history:n=!0,deduplication:r=!1}={}){if(!F()||!e||!Array.isArray(e.reports))return!1;if(n&&U.active)return U.navigate(fi({view:`findings`,teamId:e.id,reportId:t},P.managedTeams));if(t!==null&&!e.reports.some(e=>e.id===t))return!1;let i=Y_(),a=e.reports.find(e=>e.id===t&&e.visible===!1),o=J_(),s;try{s=r?await(await W()).fetchManagedLinkWorkspace(t,{signal:o}):await mx(e.id,{reportId:a?.id??null})}catch(e){return X(i)||Ex(e.message||`Could not load link report.`),!1}if(X(i))return!1;if(cb(),s===null||t!==null&&!s.some(e=>e.id===t))return Ex(`Could not load all team reports. Please try again.`),!1;let c=s.find(e=>e.id===t&&e.data.source===`links`&&Array.isArray(e.data.links)),l=s.filter(e=>t===null||c||e.id===t),u=l.filter(e=>e.data.source!==`links`||!Array.isArray(e.data.links));vW(new Set),vZ(t===null&&!r?e.id:null),R.classList.add(`active`),qm.classList.add(`hidden`),P.currentView=`findings`,P.reports=[],Gg(),P.workspaceMerges=[],P.revalidateConflicts=new Map,P.currentFile=t===null?null:s.find(e=>e.id===t).filename,P.currentWorkspace=t===null?`managed-team:${e.id}`:null,P.currentManagedTeam=e.id,P.currentManagedReport=t,Su(e.id,s),P.managedReports=l.map(e=>({id:e.id,filename:e.filename})),P.managedComments.clear(),P.managedIssues.clear(),P.managedReport=t===null?null:P.managedReports[0]??null,P.currentReportWorkspace=null,P.currentLinks=null,P.selectedBundle=null,P.selectedBundleWorkspace=null,P.scanSelection=null,P.repoUrl=``,P.repoEditing=!1,_W();for(let e of u)if(await RW(e.filename,e.data,i,{renderView:!1,managedReportId:e.id,managedRepo:e.repo}),X(i))return!1;if(u.length>0){let e=async e=>{let t=UU(P.currentManagedTeam,e);return(await Promise.all(u.flatMap(n=>[BU(n.id,{renderView:!1,signal:e,readAnnotations:t}),YC(n.id,{signal:e,readAnnotations:t})]))).every(Boolean)&&!e.aborted&&!X(i)},t=r?await e(J_()):await tW({hydrate:e});if(X(i))return!1;if(!t)return await FW({history:!1}),Ex(`Could not load report annotations. Open the team or report again to retry.`),!1}if(c){if(P.currentView=`links`,P.currentLinks={name:c.filename,groups:c.data.links,skipped:0,...r?{managedId:t}:{}},!await gW(i))return!1}else if(u.length===0)yZ();else if(x_(Zg()),!await gW(i))return!1;return tW(),await $(),!0}async function jW(e){if(F())return;P.currentManagedTeam=null,P.currentManagedReport=null,P.managedReport=null,P.managedReports=[],P.managedComments.clear(),P.managedIssues.clear();let t=L().find(t=>t.id===e);if(!t)return;let n=Y_();vW(new Set([e])),P.currentView!==`findings`&&P.currentView!==`files`&&(P.currentView=`findings`),zr(`workspace`,e),P.reports=[],Gg(),P.workspaceMerges=[],P.revalidateConflicts=new Map,P.currentFile=null,P.currentWorkspace=e,P.currentReportWorkspace=null,P.currentLinks=null,P.repoUrl=``,P.repoEditing=!1,_W(),Ua(pW,`ws:${e}`).catch(()=>{}),t.reports.length===0&&yW();let r=await wm(t);if(X(n))return;let i=!0,a=t.reports.map(e=>Vc(e).catch(()=>null)),o=0;for(let e=0;e<t.reports.length;e++){let r=await a[e];if(X(n))return;if(r===null){i=!1;continue}if(!b(r)&&(await RW(t.reports[e],r,n,{renderView:!1})?o++:i=!1,X(n)))return}o===0&&t.reports.length>0&&yW(),i&&Cm(t)?.appMode&&(P.showRevalidation=!0,P.upstreamOnly=!1,P.revalidationDetailed=!1,PZ());let s=P.reports.slice();uW(t,s,r,{complete:i,isCurrent:()=>!X(n)&&P.currentWorkspace===e&&[`findings`,`files`].includes(P.currentView)});let c=$().catch(e=>console.warn(`workspace sidebar:`,e));if(o>0){if(x_(Zg()),!await gW(n))return}else yZ();let l=[`showRevalidation`,`upstreamOnly`,`revalidationDetailed`,`filterConfMin`,`filterConfMax`,`filterRevalidate`,`filterPartial`,`sortBy`,`severityMode`],u=l.map(e=>P[e]);fW(t,s,r,{complete:i,isCurrent:()=>!X(n),onReady:async t=>{!t.appMode||P.currentWorkspace!==e||![`findings`,`files`].includes(P.currentView)||l.some((e,t)=>P[e]!==u[t])||(P.showRevalidation=!0,P.upstreamOnly=!1,P.revalidationDetailed=!1,PZ(),x_(Zg()),await gW(n))}}).catch(e=>console.warn(`workspace App metadata:`,e)),B.openSession(e),B.refreshSession(e),Fh(e),await c}async function MW({triage:e=`keep`,deleteFromRemoteWorkspaceIds:t=[]}={}){if(!P.currentFile)return;let n=Y_(),r=P.currentFile;Iu(r),tc(r,``);for(let e of t)try{let t=await Nh(e,r);if(X(n))return;t&&t.ok===!1&&t.reason!==`not-found`&&console.warn(`Failed to delete '${r}' from workspace ${e} remote: ${t.reason}`)}catch(t){console.warn(`Failed to delete '${r}' from workspace ${e} remote:`,t)}if(await Gc(r),!X(n)&&(await uu(r,null),!X(n))){if(e===`wipe`){try{await Mp()}catch(e){console.warn(`Skipped orphan-triage GC:`,e)}if(X(n))return}X(n)||(NW(),await $())}}function NW({forgetLastView:e=!0}={}){ST(),P.currentManagedTeam=null,P.currentManagedReport=null,P.currentFile=null,P.currentWorkspace=null,P.currentReportWorkspace=null,P.currentLinks=null,P.managedReport=null,P.managedReports=[],P.managedComments.clear(),P.managedIssues.clear(),P.selectedBundle=null,P.selectedBundleWorkspace=null,P.scanSelection=null,P.bundleDetails=null,P.bundleDetailsTab=`overview`,P.bundleSourceFile=null,P.bundleSourceFindingIdx=null,P.selectedPackage=null,P.selectedPackageVersion=null,P.packageDetailsTab=`overview`,P.packageSlideTriage=null,P.packageSlideTransient=!1,P.expandedPackages.clear(),P.selectedRepository=null,P.repositoryDetailsTab=`overview`,P.repositorySlideTriage=null,P.repositorySlideTransient=!1,P.filesSelectedFile=null,P.tableSelectedGid=null,P.kanbanPopoverGid=null,P.kanbanExpandedColumn=null,P.focusGid=null,P.activeTabByGroup.clear(),P.reports=[],Gg(),P.workspaceMerges=[],P.revalidateConflicts=new Map,P.repoUrl=``,P.repoEditing=!1,P.shownTriage=null,P.currentView=`findings`,_W(),e&&Wa(pW),yW()}function PW(e){Y_(),vW(new Set),NW(e)}async function FW({history:e=!0}={}){return e&&F()&&U.active?U.navigate({view:`home`}):(Y_(),vW(new Set),NW({forgetLastView:!F()}),await $(),!0)}async function IW({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!P.selectedBundle)return;let t=Y_(),n=P.selectedBundle;for(let r of e)try{let e=await Ph(r,n);if(X(t))return;e&&e.ok===!1&&e.reason!==`not-found`&&console.warn(`Failed to delete bundle from workspace ${r} remote: ${e.reason}`)}catch(e){console.warn(`Failed to delete bundle from workspace ${r} remote:`,e)}if(await cl(n),X(t)||(await pu(n,null),X(t)))return;P.selectedBundle=null,P.selectedBundleWorkspace=null,P.bundleDetails=null,P.bundleSourceFile=null,P.bundleSourceFindingIdx=null;let r=Ha(pW);typeof r==`string`&&(r===`b:${n}`||r.startsWith(`b:${n} `))&&Wa(pW),Gf(n),P.bundles=await rl(),!X(t)&&(Z(),await $())}async function LW(e,t=`detach`,{triage:n=`keep`}={}){let r=L().find(t=>t.id===e);if(!r)return;Y_();let i=Array.isArray(r.reports)?[...r.reports]:[];if(B.closeSession(e),Ih(e),t===`delete`){for(let e of i){try{await Gc(e)}catch{}Iu(e),tc(e,``)}if(n===`wipe`)try{await Mp()}catch(e){console.warn(`Skipped orphan-triage GC:`,e)}}let a=P.currentWorkspace===e,o=t===`delete`&&P.currentFile!=null&&i.includes(P.currentFile);(a||o)&&NW(),await tu(e),await $()}async function RW(e,t,n=null,{renderView:r=!0,managedReportId:i=null,managedRepo:a=null}={}){let o=()=>n!==null&&X(n);try{if(await Promise.all([zr(`report`,e),zr(`workspace`,P.currentWorkspace||P.currentReportWorkspace)]),o()||(await Ad(),o()))return;let{data:s,reason:c}=i===null?F()?ne(t,e):Si(t):{data:structuredClone(t),reason:null};if(!s)throw Error(c);let l=P.reports.length===0,u=bi(s)??[],d=u.flatMap(mg);if(await wi(d),o())return;let f=new Set(d.filter(er).map(e=>e.source??s.source??null)),p=a??s?.repo,m=gi({repo:p}),h=m??(i==null?Zs(e):``),g=_i(p),_=Rr([{groups:u.map(mg),tree:s.tree}]),v=[];for(let t of u){let n=mg(t);if(n.length===0)continue;let r=[];for(let t of n){let n={...t,_id:P.nextFindingId++,_repoFallback:h,_repoDirectory:g,_reportName:e,_depsDirectory:_,_managedReportId:i,_bundleHashes:s.bundleHashes??[]};hi(n,s),n._source=n.source??s.source??null,`isApp`in n||(n.isApp=Li(n,n._source)),n._sourcePass=f.has(n._source),n._analyzer=n._source??n.type??null,r.push(n)}v.push(r)}return yi(v),P.reports.push({type:s.type||`analysis`,source:s.source??null,fileName:e,_managedReportId:i,groups:v,repo:m,tree:s.tree??null,bundleHashes:s.bundleHashes??[]}),Nr(P.reports),Lr(P.reports)&&Gg(),P.revalidateConflicts=Yg(),PZ(),l&&(c_(),x_(Zg())),r&&await gW(n),!0}catch(t){alert(`Failed to parse ${e}: ${t.message}`)}}window.__loadFile=(e,t)=>RW(e,t),window.__setFilters=({severities:e,confMin:t}={})=>{e!=null&&(P.filterSeverities=new Set(e)),t!==void 0&&(P.filterConfMin=t),Z()},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`)&&EW(e.dataTransfer.files)}),qm.addEventListener(`dragover`,e=>{e.preventDefault(),F()||qm.classList.add(`hover`)}),qm.addEventListener(`dragleave`,()=>qm.classList.remove(`hover`)),qm.addEventListener(`drop`,e=>{e.preventDefault(),qm.classList.remove(`hover`),EW(e.dataTransfer.files)});var zW=null;function BW(){F()||(zW||(zW=document.createElement(`input`),zW.type=`file`,zW.multiple=!0,zW.hidden=!0,zW.addEventListener(`change`,()=>{let e=[...zW.files];e.length>0&&EW(e),zW.value=``}),document.body.append(zW)),zW.click())}qm.addEventListener(`click`,e=>{let t=e.target.closest(`[data-managed-page]`);if(t){Z1(t.dataset.managedPage);return}if(e.target.closest(`[data-managed-login]`)){ox(P.managed?.loginPath);return}let n=e.target.closest(`[data-managed-team]`);if(n){let e=P.managedTeams.find(e=>e.id===n.dataset.managedTeam);e&&AW(e);return}let r=e.target.closest(`[data-landing-workspace]`);if(r){jW(r.dataset.landingWorkspace);return}e.target.closest(`.drop-prompt-action`)&&BW()});function VW({hostname:e,devServer:t,serverMode:n,localMode:r,deepviewScanServer:i}){return n===`managed`&&!r?null:n===`e2e`?nn(i):nn(t)??(e===`127.0.0.1`?tn:null)}function HW(){return VW({hostname:window.location.hostname,devServer:document.querySelector(`meta[name="deepview-scan-server"]`)?.content,serverMode:P.serverMode,localMode:P.localMode,deepviewScanServer:P.deepviewScanServer})}function UW(e){return F()?!!e.managedId&&[`admin`,`manage`].includes(P.managedSession?.role):!e.managedId&&!!HW()}async function WW(e=null,{mode:t}={}){let n=P.selectedBundleWorkspace,r=H();if(await $1(),r!==H()||e&&!UW(e))return;if(F()){e&&await Z1(`manage-scans`,{bundleId:e.managedId,...t?{scanMode:t}:{}});return}if(!HW())return;let i=await mt().then(()=>!0,()=>!1);if(!HW()||r!==H())return;if(!i){Ex(`Couldn’t load Scans. Try again.`,{kind:`warning`});return}let a=FW(),o=H();await a,HW()&&o===H()&&(P.scanSelection=e?{bundleId:e.integrity,...n?{repoId:n}:{},...t?{mode:t}:{}}:null,P.currentView=`scan`,Z(),$())}function GW(){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=rr(`${na}<span>Scan</span>`),t.addEventListener(`click`,()=>{WW()}),e.append(t));let n=HW();t.hidden=!n,document.querySelector(`local-scan-page`)?.setScanServer(n);let r=document.querySelector(`.bundles-scan-button`),i=P.bundles?.find(e=>e.integrity===P.selectedBundle);r&&(r.hidden=!i||!UW(i))}var KW=ft(`./compare.js`),qW=!1,JW=null;async function YW(){qW=!0;try{await KW.load()}catch(e){JW=String(e?.message??e)}qW=!1,Z()}function XW(e){return KW.module?e():JW?k`<div class="bundles-slide-placeholder is-error">Couldn’t load: ${JW} <button type="button" @click="${()=>{JW=null,Z()}}">Retry</button></div>`:(qW||YW(),k`<div class="bundles-slide-placeholder">Loading…</div>`)}var ZW=`@preventive/triage`;function QW(e,t){let n=e.toLowerCase(),r=``,i=n;if(n.startsWith(`@`)){let e=n.indexOf(`/`);e>0&&(r=n.slice(0,e),i=n.slice(e+1))}return`pkg:npm/${r?`${encodeURIComponent(r)}/`:``}${encodeURIComponent(i)}@${encodeURIComponent(t)}`}function $W(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,``)||e}function eG(e){let t=[];if(e?.kind!==`stasis`||!e.bundle?.modules)return t;let n=new Map;for(let[r,i]of e.bundle.modules){if(!i?.name||typeof i.version!=`string`||!i.version)continue;let e=`${i.name}@${i.version}`,a=n.get(e);if(a!==void 0){r===`.`&&(t[a].dir=`.`);continue}n.set(e,t.length),t.push({name:i.name,version:i.version,dir:r})}return t}function tG(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 nG(e,t){let n=e.find(e=>e.dir===`.`)??null,r=n?e.filter(e=>e!==n):e;return{root:n?{name:n.name,version:n.version,purl:QW(n.name,n.version)}:{name:$W(t?.name??`bundle`),version:null,purl:null},rest:r}}function rG(e){return e??globalThis.crypto.randomUUID()}function iG(e,t,{now:n=new Date,uuid:r}={}){let{root:i,rest:a}=nG(eG(e),t),o={type:`application`,"bom-ref":i.purl??`application:${i.name}`,name:i.name};i.version&&(o.version=i.version),i.purl&&(o.purl=i.purl);let s={bomFormat:`CycloneDX`,specVersion:`1.5`,serialNumber:`urn:uuid:${rG(r)}`,version:1,metadata:{timestamp:n.toISOString(),tools:{components:[{type:`application`,name:ZW}]},component:o},components:a.map(e=>{let t=QW(e.name,e.version);return{type:`library`,"bom-ref":t,name:e.name,version:e.version,purl:t}})};return`${JSON.stringify(s,null,2)}
|
|
181
|
+
`}function aG(e){return{referenceCategory:`PACKAGE-MANAGER`,referenceType:`purl`,referenceLocator:e}}function oG(e,t,{now:n=new Date,uuid:r}={}){let{root:i,rest:a}=nG(eG(e),t),o=$W(t?.name??`bundle`),s=n.toISOString().replace(/\.\d{3}Z$/u,`Z`),c=(e,t,n,r)=>{let i={SPDXID:e,name:t,downloadLocation:`NOASSERTION`,filesAnalyzed:!1,licenseConcluded:`NOASSERTION`,licenseDeclared:`NOASSERTION`,copyrightText:`NOASSERTION`};return n&&(i.versionInfo=n),r&&(i.externalRefs=[aG(r)]),i},l=`SPDXRef-Package-root`,u=[c(l,i.name,i.version,i.purl)],d=[{spdxElementId:`SPDXRef-DOCUMENT`,relationshipType:`DESCRIBES`,relatedSpdxElement:l}];a.forEach((e,t)=>{let n=`SPDXRef-Package-${t+1}`;u.push(c(n,e.name,e.version,QW(e.name,e.version))),d.push({spdxElementId:l,relationshipType:`DEPENDS_ON`,relatedSpdxElement:n})});let f={spdxVersion:`SPDX-2.3`,dataLicense:`CC0-1.0`,SPDXID:`SPDXRef-DOCUMENT`,name:o,documentNamespace:`https://spdx.org/spdxdocs/${encodeURIComponent(o)}-${rG(r)}`,creationInfo:{created:s,creators:[`Tool: ${ZW}`]},packages:u,relationships:d};return`${JSON.stringify(f,null,2)}
|
|
182
|
+
`}function sG(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(e){return{error:e.message}}}}function cG(e,t,n){if(t){let t=sG(e,n);if(t.error)return{error:t.error};let{re:r}=t;return{ranges(e){r.lastIndex=0;let t=[],n;for(;(n=r.exec(e))!==null;){if(n[0].length===0){r.lastIndex++;continue}if(t.push([n.index,n.index+n[0].length]),t.length>=50)break}return t}}}let r=n?e:e.toLowerCase(),i=r.length;return{ranges(e){let t=n?e:e.toLowerCase(),a=[],o=0,s;for(;(s=t.indexOf(r,o))!==-1&&(a.push([s,s+i]),o=s+i,!(a.length>=50)););return a}}}function lG(e,t,n){let r=[],i=0,a=!1;for(let o of n){let n=e.get(o);if(typeof n!=`string`)continue;let s=n.split(`
|
|
183
|
+
`),c=[];for(let e=0;e<s.length;e++){let n=t.ranges(s[e]);if(n.length!==0&&(c.push({ln:e+1,ranges:n}),i++,i>=5e3)){a=!0;break}}if(c.length>0&&r.push({path:o,lines:s,hits:c}),a)break;if(r.length>=500){a=!0;break}}return{fileResults:r,totalHits:i,truncated:a}}function uG(e,t){let n=[],r=0;for(let{path:i,lines:a,hits:o}of e.fileResults){let e=[];for(let{ln:n}of o){let i=t.ranges(a[n-1]);i.length!==0&&(e.push({ln:n,ranges:i}),r++)}e.length>0&&n.push({path:i,lines:a,hits:e})}return{fileResults:n,totalHits:r,truncated:!1}}var dG={tag:null,useRegex:!1,caseSensitive:!1,entries:[]};function fG(e,t,n,r,i,a=null){if(!n)return{fileResults:[],totalHits:0,truncated:!1};let o=cG(n,r,i);if(o.error)return{error:o.error};(dG.tag!==e||dG.useRegex!==r||dG.caseSensitive!==i)&&(dG.tag=e,dG.useRegex=r,dG.caseSensitive=i,dG.entries.length=0);let s=r||i?e=>e:e=>e.toLowerCase(),c=s(n),l=null,u=-1;for(let e=0;e<dG.entries.length;e++){let t=dG.entries[e],n=s(t.query);if(n===c)return dG.entries.splice(e,1),dG.entries.unshift(t),t.result;r||t.result.truncated||n.length<=u||!c.includes(n)||(l=t.result,u=n.length)}let d=l?uG(l,o):lG(t,o,a??[...t.keys()].toSorted());return dG.entries.unshift({query:n,result:d}),dG.entries.length>8&&dG.entries.pop(),d}var pG=200,mG=28,hG=12;function gG(e,t){let n=t.length>0?t[0][0]:0;return vG(e,t,n-(e.length-e.trimStart().length)>mG?n-hG:0,pG)}function _G(e,t){let n=gG(e,t);return k`${n.clipped?k`<span class="bundle-search-clip">…</span>`:j}${yG(n.text,n.ranges)}`}function vG(e,t,n,r){let i=e.slice(n,n+r);if(n===0)return{text:i,ranges:t,clipped:!1};let a=[];for(let[e,r]of t){let t=e-n,o=r-n;o<=0||t>=i.length||a.push([Math.max(0,t),Math.min(i.length,o)])}return{text:i,ranges:a,clipped:!0}}function yG(e,t){if(t.length===0)return e;let n=[],r=0;for(let[i,a]of t){let t=Math.max(r,Math.min(i,e.length)),o=Math.max(t,Math.min(a,e.length));o<=t||(t>r&&n.push(e.slice(r,t)),n.push(k`<mark class="bundle-search-mark">${e.slice(t,o)}</mark>`),r=o)}return r<e.length&&n.push(e.slice(r)),n}function bG(e,t){let n=new Map(e.map(e=>[e,[...t.get(e)].map(([n,r])=>{let i=t.get(e),a=t.get(n),o=i.size<a.size?i:a,s=0,c=0;for(let e of o.keys())if(i.has(e)&&a.has(e)&&s++,++c===32)break;return{to:n,score:r*2+s}}).toSorted((e,n)=>n.score-e.score||t.get(e.to).size-t.get(n.to).size||e.to.localeCompare(n.to))])),r=[],i=new Set;for(let t of e){let e=[t];for(;e.length>0;){let t=e.pop();if(!i.has(t)){i.add(t),r.push(t);for(let{to:r}of n.get(t).toReversed())i.has(r)||e.push(r)}}}return r}function xG(e,t,n){let r=e.toSorted(),i=new Set(r),a=new Map,o=new Map(r.map(e=>[e,new Map]));for(let e of r){a.set(e,new Map);for(let n of t.get(e)??[])e===n||!i.has(n)||(a.get(e).set(n,{to:n,count:1}),o.get(e).set(n,(o.get(e).get(n)??0)+1),o.get(n).set(e,(o.get(n).get(e)??0)+1))}let s=kr(r,a),c=r.map((e,t)=>({col:t%n,row:Math.floor(t/n)})),l=c.map(({col:e,row:t})=>({col:t%2?n-e-1:e,row:t})),u=(e,t)=>Math.abs(e.col-t.col)+Math.abs(e.row-t.row),d=e=>r.reduce((t,n)=>t+[...o.get(n)].reduce((t,[r,i])=>t+i*u(e.get(n),e.get(r)),0),0),f=new Map(r.map((e,t)=>[e,c[t]])),p=d(f);for(let e of[s,bG(r,o)])for(let t of[c,l]){let n=new Map(e.map((e,n)=>[e,t[n]])),r=d(n);r<p&&(f=n,p=r)}let m=({col:e,row:t})=>`${e},${t}`,h=new Map([...f].map(([e,t])=>[m(t),e])),g=(e,t,n,r)=>{let i=0;for(let[a,s]of o.get(e))i+=s*u(t,a===n?r:f.get(a));return i};for(let e=0;e<8;e++){let e=!1;for(let t of r){let n=f.get(t),r=o.get(t),i=0,a=0,s=0;for(let[e,t]of r)i+=f.get(e).col*t,a+=f.get(e).row*t,s+=t;if(!s)continue;let c=new Set;for(let e of[n,{col:Math.round(i/s),row:Math.round(a/s)}])for(let n=-1;n<=1;n++)for(let r=-1;r<=1;r++){let i=h.get(`${e.col+n},${e.row+r}`);i!==void 0&&i!==t&&c.add(i)}let l=0,u=null;for(let e of c){let r=f.get(e),i=g(t,r,e,n)+g(e,n,t,r)-g(t,n,e,r)-g(e,r,t,n);i<l&&(l=i,u=e)}if(u!==null){let r=f.get(u);f.set(t,r),f.set(u,n),h.set(m(r),t),h.set(m(n),u),e=!0}}if(!e)break}return r.map(e=>({id:e,...f.get(e)})).toSorted((e,t)=>e.row-t.row||e.col-t.col)}var SG=216,CG=48,wG=32,TG=20,EG=24,DG=20,OG=10;function kG(e,t){let n=e=>e&&(e.collapsed||e.members.length===1),r=e.map((t,r)=>e.length>5&&n(t)&&n(e[r+1])),i=0,a=0;e.forEach((t,n)=>{r[n]?a+=t.width:i+=t.width+(n===e.length-1?0:TG)});let o=Math.min(t,SG*5+TG*4),s=a?Math.max(.3,Math.min(.9,(o-i)/a)):1,c=0;return{groups:e.map((t,n)=>{let i=t.width*(r[n]?s:1),a={...t,x:c,visibleWidth:i,stacked:!!(r[n]||r[n-1])};return c+=i+(r[n]||n===e.length-1?0:TG),a}),width:c,height:Math.max(...e.map(e=>e.height))}}function AG(e){let t=`M${e[0].join(`,`)}`;for(let n=1;n<e.length-1;n++){let[r,i]=e[n],[a,o]=e[n-1],[s,c]=e[n+1],l=Math.hypot(s-r,c-i),u=Math.hypot(r-a,i-o);if(!u||!l)continue;let d=Math.min(6,u/2,l/2);t+=` L${r-(r-a)/u*d},${i-(i-o)/u*d} Q${r},${i} ${r+(s-r)/l*d},${i+(c-i)/l*d}`}return`${t} L${e.at(-1).join(`,`)}`}var jG=({count:e,index:t})=>(t-(e-1)/2)*Math.min(8,48/Math.max(1,e-1));function MG(e,t,n,r){let i=e.packages.find(e=>e.id===t),a=jG(r),o=n?e.y-12:e.rowBottom;if(e.members.length===1||e.collapsed){let t=e.x+e.visibleWidth/2+a;return[[t,n?e.y-5:e.y+e.height],[t,o]]}let s=e.x+i.x+(n?0:SG),c=e.y+i.y+CG/2+a/2,l=s+(n?-7-r.lane*6:3+r.lane*6);return[[s+(n?-4:0),c],[l,c],[l,o]]}function NG(e,t){let n=(t,n)=>{let r=e.get(t[n]),i=r.packages.find(e=>e.id===t[`${n}Package`]);return r.members.length===1||r.collapsed?[r.x+r.visibleWidth/2,r.y+r.height/2]:i?[r.x+i.x+SG/2,r.y+i.y+CG/2]:[r.x+r.width/2,r.y+r.height/2]},r=(r,i,a=e=>n(e,i))=>{let o=new Map,s=Map.groupBy(t,t=>{let n=e.get(t[r]);return n.collapsed?n:t[`${r}Package`]});for(let e of s.values())e.toSorted((e,t)=>{let[n,o]=a(e),[s,c]=a(t);return(e.bypassLane??n)-(t.bypassLane??s)||o-c||e[`${i}Package`].localeCompare(t[`${i}Package`])||e[`${r}Package`].localeCompare(t[`${r}Package`])}).forEach((t,n)=>o.set(t,{count:e.length,index:n}));for(let e of Map.groupBy(t,e=>e[r]).values())e.toSorted((e,t)=>{let[i,a]=n(e,r),[s,c]=n(t,r);return i-s||a-c||jG(o.get(e))-jG(o.get(t))}).forEach((t,n)=>{let i=n/Math.max(1,e.length-1);o.get(t).lane=r===`from`?1-i:i});return o},i=r(`from`,`to`),a=r(`to`,`from`,t=>{let n=MG(e.get(t.from),t.fromPackage,!1,i.get(t));return[n.at(-1)[0],n[0][1]]}),o=t.map(t=>{let n=e.get(t.from),r=e.get(t.to),o=MG(n,t.fromPackage,!1,i.get(t)),s=MG(r,t.toPackage,!0,a.get(t));return{edge:t,end:s,start:o,rowBottom:n.rowBottom,x1:o.at(-1)[0],x2:t.bypassLane??s.at(-1)[0]}});for(let e of Map.groupBy(o,e=>e.rowBottom).values())for(let t of[!0,!1]){let n=e.filter(e=>e.x2<e.x1===t).toSorted((e,n)=>(t?1:-1)*(e.x1-n.x1||e.x2-n.x2));n.forEach((e,t)=>{e.bendY=e.rowBottom+9+12*t/Math.max(1,n.length-1)})}return o.map(({edge:e,end:t,start:n,x1:r,x2:i,bendY:a})=>{let o=[[r,a],[i,a]],{bypassLane:s,...c}=e;return s!==null&&o.push([i,t.at(-1)[1]]),{...c,path:AG([...n,...o,...t.toReversed()])}})}function PG(e,t){let n=Math.sign(t.x-e.x),r=Math.sign(t.y-e.y),i=CG,a=SG;if(r===0&&Math.abs(t.x-e.x)===a+TG){let r=e.y+i/2-n*6;return`M${e.x+(n>0?a:0)},${r} L${t.x+(n>0?-4:a+4)},${r}`}if(n===0&&Math.abs(t.y-e.y)===i+EG){let n=e.x+a/2+r*8;return`M${n},${e.y+(r>0?i:0)} L${n},${t.y+(r>0?-4:i+4)}`}let o=n||r,s=e.x+(o>0?a:0),c=e.y+i/2,l=s+o*(TG/2-3),u=t.x+a/2+o*8,d=r>0||r===0&&n>0,f=t.y+(d?-10:i+10),p=t.y+(d?-4:i+4);return AG([[s,c],[l,c],[l,f],[u,f],[u,p]])}function FG(e,t,n,r=1184,i=!1){if(i)return{id:e,members:t,collapsed:i,packages:[],internalEdges:[],width:SG+OG*2,height:CG};let a=t.length>1,o=Math.max(1,Math.floor((r-OG*2+TG)/(SG+TG))),s=a?Math.min(o,Math.max(2,Math.ceil(Math.sqrt(t.length/2)))):1,c=a?OG:0,l=Math.ceil(t.length/s),u=a?DG:0,d=(a?xG(t,n,s):[{id:t[0],col:0,row:0}]).map(e=>({id:e.id,x:c+e.col*(SG+TG),y:c+u+e.row*(CG+EG)})),f=new Map(d.map(e=>[e.id,e])),p=[];if(a)for(let e of t)for(let t of n.get(e)??[])e!==t&&f.has(t)&&p.push({from:e,to:t,path:PG(f.get(e),f.get(t))});return{id:e,members:t,collapsed:i,packages:d,internalEdges:p,width:s*SG+(s-1)*TG+c*2,height:l*CG+(l-1)*EG+c*2+u}}function IG(e,t={}){let n=t.ecosystem??(/(?:^|\/)node_modules\//u.test(e)?`npm`:``);return{id:e,name:t.name||(e===`.`?`App`:e),ecosystem:n,version:t.version??``,own:e===`.`,root:!1,target:!1}}var LG=e=>e.ecosystem===`npm`?e.name:`${e.ecosystem}:${e.name}`;function RG(e,t){let n=e?.bundle?.modules.get(t);if(!t||t===`.`||!n)return null;let r=IG(t,n);return{packageKey:r.ecosystem?LG(r):r.name,packageGroup:Jr(``,{packageDir:t})}}function zG(e,{packageKey:t,packageGroup:n,version:r,reason:i=``}){let a=new Map,o=new Map,s=new Map,c=Gt(e)??new Map,l=new Map([...c.keys()].map(e=>[e,e])),u=At(e).get(i),d=new Map([...l].filter(([e])=>!u||u.has(e)));for(let t of new Set([...d.keys()].map(e=>c.get(e))))s.set(t,IG(t,e.bundle.modules.get(t)));let f=(e,t)=>{e!==t&&(o.has(e)||o.set(e,new Set),a.has(t)||a.set(t,new Set),o.get(e).add(t),a.get(t).add(e))};for(let[t,n]of de(e))if(d.has(t))for(let e of n){if(!d.has(e))continue;let n=c.get(t),r=c.get(e);if(jr(t,e,r===`.`,n===`.`))f(n,r);else if(n!==r){let e=s.get(r);e.excludedImporters??=new Set,e.excludedImporters.add(n)}}let{roots:p,appImports:m}=he(e,d,e=>c.get(e),c,l);m.length>0&&!s.has(`.`)&&s.set(`.`,IG(`.`));for(let e of m)f(`.`,e);for(let[e,t]of s){if(!(t.own||t.ecosystem===`npm`&&(t.name===`@babel/core`||t.name===`react-native`&&o.get(`.`)?.has(e))))continue;t.traceBoundary=!0;let n=a.get(e);for(let t of n??[])t!==`.`&&(n.delete(t),o.get(t).delete(e))}for(let e of p){let t=s.get(e===`__own__`?`.`:e);t&&(t.root=!0)}let h=[];for(let e of s.values()){let i=LG(e),a=n===void 0?e.ecosystem===`github`?i.toLowerCase()===t.toLowerCase():i===t:Jr(``,{packageDir:e.id})===n,o=e.ecosystem===`github`&&e.version===`.`?`0.0.0`:e.version;!e.own&&a&&(r===void 0||o===r)&&(e.target=!0,h.push(e.id))}let g=new Set(h),_=[...h];for(let e=0;e<_.length;e++)for(let t of a.get(_[e])??[])g.has(t)||(g.add(t),_.push(t));let v=e=>new Map([...g].map(t=>[t,new Set([...e.get(t)??[]].filter(e=>g.has(e)))]));return{nodes:new Map([...s].filter(([e])=>g.has(e))),imports:v(o),importedBy:v(a),targets:h}}function BG(e,{maxWidth:t=1280,expandedCycles:n=new Set}={}){let r=[...e.nodes.keys()].toSorted(),{groups:i,componentOf:a}=Pr(r,e.imports),o=i.map(()=>new Set),s=[];for(let[t,n]of e.imports){let e=a.get(t);for(let r of n){let n=a.get(r);e!==n&&(o[e].add(n),s.push({from:e,to:n,fromPackage:t,toPackage:r}))}}let c=i.map(()=>0),l=i.map(()=>0);for(let e of o)for(let t of e)l[t]++;let u=i.flatMap((e,t)=>l[t]===0?[t]:[]);for(let e=0;e<u.length;e++){let t=u[e];for(let e of o[t])c[e]=Math.max(c[e],c[t]+1),--l[e]===0&&u.push(e)}let d=o.some((e,t)=>[...e].some(e=>c[e]!==c[t]+1)),f=t-wG-24-(d?56:0),p=[...Map.groupBy(i.map((t,r)=>{let i=t.length>10;return{...FG(r,t,e.imports,f,i&&!n.has(r)),collapsible:i}}),e=>c[e.id])].toSorted(([e],[t])=>e-t).map(([,e])=>kG(e,f)),m=p.reduce((e,t)=>Math.max(e,t.width+24),240),h=new Map,g=12;for(let{groups:e,width:t,height:n}of p){for(let r of e)h.set(r.id,{...r,x:r.x+(m-t)/2,y:g,rowBottom:g+n});g+=n+36}let _=0,v=NG(h,s.map(e=>{let t=c[e.to]===c[e.from]+1?null:m+8+_++%4*10;return{...e,bypassLane:t}}));return{boxes:[...h.values()],componentOf:a,edges:v,width:m+(_?56:0),height:Math.max(0,g-24)}}function VG(e,t){if(t===null)return null;let n=new Set,r=new Set([t]);for(let i of[!1,!0]){let a=new Map,o=[t],s=new Set([t]);for(let t of e.edges){let e=i?t.to:t.from,n=i?t.from:t.to;a.has(e)||a.set(e,[]),a.get(e).push(n)}for(let e=0;e<o.length;e++)for(let t of a.get(o[e])??[])s.has(t)||(s.add(t),r.add(t),o.push(t));for(let t of e.edges)s.has(t.from)&&s.has(t.to)&&n.add(t)}return{groups:r,edges:n}}var HG=new Map,UG=new Map,WG=[];function GG(e){if(!e?.managedId)return HG;let t=P.managedSession,n=P.managedTeams&&Ms(P.managedTeams),r=[t?.id,t?.role,t?.csrfToken,P.currentManagedTeam,n];return r.some((e,t)=>e!==WG[t])&&(WG=r,UG=new Map),UG}var KG=new WeakMap;function qG(e){return KG.has(e)||KG.set(e,{reasons:At(e),selected:``}),KG.get(e)}function JG(e,t=qG(e).selected){return JSON.stringify([e.managedId??e.integrity,t])}var YG=`deepview.advisories.proxyConsent`;function XG(){try{return localStorage.getItem(YG)===`1`}catch{return!1}}function ZG(){try{localStorage.setItem(YG,`1`)}catch{}}function QG(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 $G(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 eK(e){if(e.bundle&&!$G(e))return!0;let t=GG(e).get(JG(e,``));return t?.state===`ok`&&t.query.size===0&&t.skipped.length===0}function tK(e,t,n=!1){return!e||e.managedId&&!rK(e)||nK(e,t)<1||e.summary?.versionedPackages===0?!1:n?!0:xW(e.name)===`stasis`?!t||t.integrity!==e.integrity?!0:e.managedId?!t.bundle||$G(t):QG(t):!1}function nK(e,t){let n=t?.integrity===e.integrity&&t.bundle?t.bundle.version:e.summary?.stasisVersion;return Number.isSafeInteger(n)?n:1/0}function rK(e){let t=P.managedSession?.role;return[`admin`,`manage`].includes(t)?!0:[`view`,`triage`].includes(t)?P.managedTeams.some(t=>(P.currentManagedTeam==null||t.id===P.currentManagedTeam)&&t.permissions?.security===!0&&t.bundles?.some(t=>t.id===e.managedId)):!1}function iK(e){return Object.fromEntries([...e].map(([e,t])=>[e,[...t].toSorted()]))}var aK=e=>e.ecosystem===`npm`?e.name:`${e.ecosystem}:${e.name}`;function oK(e){return{...e,title:e.title||e.id,severity:e.severity??`unknown`,cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function sK(e){let t=Array.isArray(e),n=t?Map.groupBy(e.map(oK),aK):new Map(Object.entries(e??{}));for(let[e,r]of n){let i=Array.isArray(r)?r.filter(e=>e&&typeof e.title==`string`&&typeof e.severity==`string`):[];i.length>0?n.set(e,t?i:i.map(e=>({...e,source:`registry`}))):n.delete(e)}return n}function cK(e,t){return!!(e?.managedId&&t?.state===`ok`&&!t.recheckingRepositories&&t.query.size>0)}async function lK(e){let t=await fetch(`/api/npm-advisories`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(iK(e))});if(!t.ok){let e=`HTTP ${t.status}`;try{let n=await t.json();typeof n?.error==`string`&&n.error&&(e=`${n.error} (HTTP ${t.status})`)}catch{}throw Error(e)}return t.json()}function uK(e,t){return fK(e,t)}function dK(e,t){return fK(e,t,!0)}async function fK(e,t,n=!1){if(!e?.integrity||!e.managedId&&!XG())return;let r=GG(e),i=JG(e),a=r.get(i);if(n){if(!cK(e,a))return;r.set(i,{...a,recheckingRepositories:!0,repositoryError:null}),t()}else if(a)return;let{reasons:o,selected:s}=qG(e),c=e.managedId?new Map:Kt(e,o.get(s)??null);n||r.set(i,{state:`loading`,query:c});try{let t,a=[];if(e.managedId){let r=await gx(e.managedId,void 0,s,n,n);c=Array.isArray(r.packages)?new Map(r.packages.map(e=>[aK(e),new Set(e.versions)])):new Map(Object.entries(r.packages).map(([e,t])=>[e,new Set(t)])),t=r.advisories,a=Array.isArray(r.skipped)?r.skipped:[]}else t=c.size>0?await lK(c):{};r.set(i,{state:`ok`,byPackage:sK(t),query:c,skipped:a})}catch(e){let t=e?.message??`fetch-failed`;r.set(i,n&&![401,403,404].includes(e?.status)?{...a,recheckingRepositories:!1,repositoryError:t}:{state:`error`,reason:t,query:c})}t()}async function pK(e,t){if(!e?.integrity)return;let n=GG(e),r=JG(e);n.get(r)?.state===`error`&&(n.delete(r),await uK(e,t))}var mK={critical:0,high:1,moderate:2,low:3,info:4};function hK(e){return mK[e]??999}function gK(){let e=typeof window>`u`?``:window.location.host;return k`<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 _K(e,t=()=>{},n=null){let r=e?qG(e):null,i=[...r?.reasons.keys()??[]].map(e=>({id:`reason:${e}`,label:e})),a=yK(e),o=!!e?.managedId&&!eK(e);return k`<div class="bundle-advisories-panel">${a!==j||i.length>0||o?k`<div class="bundle-advisories-toolbar">${a} ${i.length>0||o?k`<div class="bundle-advisories-scopes">${i.length>0?k`<bundle-scope-selector .reasons="${i}" .value="${r.selected?`reason:${r.selected}`:``}" label="Choose advisory scope" @scope-change="${n=>{let i=n.detail.value.replace(/^reason:/u,``);r.selected=r.reasons.has(i)?i:``;let a=uK(e,t);return t(),a}}"></bundle-scope-selector>`:j} ${o?vK(e,t):j} ${o&&n?k`<button type="button" class="bundle-advisories-retry bundle-advisories-scan" @click="${n}">${O(na)}<span>Validate</span></button>`:j}</div>`:j}</div>`:j} ${xK(e)}</div>`}function vK(e,t){if(!e?.managedId)return j;let n=GG(e).get(JG(e)),r=!!n?.recheckingRepositories;return k`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!cK(e,n)}" aria-busy="${String(r)}" @click="${()=>dK(e,t)}">${r?`Rechecking…`:`Recheck against repositories`}</button>`}function yK(e){if(!e||!e.managedId&&!XG())return j;let t=GG(e).get(JG(e));if(t?.state!==`ok`)return j;let n=t.query.size,r=t.byPackage.size;if(r===0)return j;let i=[...t.byPackage.values()].reduce((e,t)=>e+t.length,0);return k`<div class="bundle-advisories-summary">${i} ${i===1?`advisory`:`advisories`} across ${r} of ${n} ${n===1?`package`:`packages`}</div>`}function bK(e,t){let n=t.query.size;return n===0&&t.skipped.length>0?k`No packages could be audited.`:k`No advisories for the ${n} ${t.skipped.length>0?`audited `:``}${n===1?`package`:`packages`} in ${qG(e).selected?`this scope`:`this bundle`}.`}function xK(e){if(!e)return k`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!==`stasis`||!e.managedId&&!e.bundle)return k`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!e.managedId&&!XG())return gK();let t=GG(e).get(JG(e));if(!t||t.state===`loading`)return k`<div class="bundle-advisories-empty">Loading advisories…</div>`;if(t.state===`error`)return k`<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?k`<div class="bundle-advisories-empty"><span>${bK(e,t)}</span></div>`:j;if(t.byPackage.size===0&&t.skipped.length===0&&!t.repositoryError)return n;let r=[...t.byPackage.entries()].toSorted(([e,t],[n,r])=>{let i=Math.min(...t.map(e=>hK(e.severity))),a=Math.min(...r.map(e=>hK(e.severity)));return i===a?e.localeCompare(n):i-a});return k`${n}<div class="bundle-advisories">${t.repositoryError?k`<div class="bundle-advisories-empty is-error" role="alert">Repository recheck failed: ${t.repositoryError}. Previous results are shown.</div>`:j} ${t.skipped.length>0?k`<section class="bundle-advisories-skipped" aria-label="Dependencies not audited"><h3>Not audited</h3><ul>${t.skipped.map(e=>k`<li><span class="mono">${aK(e)}@${e.version}</span>: ${e.because}</li>`)}</ul></section>`:j}<ul class="bundle-advisories-list">${r.map(([n,r])=>SK(e,n,r,t.query.get(n),()=>GG(e).get(JG(e))?.byPackage===t.byPackage))}</ul></div>`}function SK(e,t,n,r,i){let a=[...n].toSorted((e,t)=>{let n=hK(e.severity)-hK(t.severity);return n===0?(e.title??``).localeCompare(t.title??``):n}),o=r?[...r].toSorted():[];return k`<li class="bundle-advisories-section"><div class="bundle-advisories-package"><span class="bundle-advisories-section-name">${t}</span> ${o.length>0?k`<span class="bundle-advisories-section-versions">${o.map(n=>k`<button type="button" class="bundle-advisories-version" aria-haspopup="dialog" aria-label="${`Why is ${t}@${n} here?`}" @click="${()=>lt({details:e,packageKey:t,version:n,reason:qG(e).selected,isCurrent:i})}">${n}</button>`)}</span>`:j}</div><ul class="bundle-advisories-rows">${a.map(e=>OB(e,({title:e,severity:t,details:n})=>_e({heading:e,severity:t,markdown:n,isCurrent:i})))}</ul></li>`}var CK=e=>F()?[]:Sf(e),wK=()=>F()?0:Cf(),TK=null,EK=new WeakMap;function DK(e){if(EK.has(e))return EK.get(e);let t=Wt(e),n=de(e),r=[...t.keys()],{stripped:i}=kn(r),a=new Map(r.map((e,t)=>[e,i[t]])),o={};for(let e of r){let r=a.get(e),i=n.get(e);o[r]={imports:i?[...i].map(e=>a.get(e)).filter(Boolean):[],size:t.get(e)}}let s={tree:o,origToStripped:a};return EK.set(e,s),s}function OK(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[i,a]of e.fileHashes)if((!t||t.has(i))&&!r.has(a)){r.add(a);for(let e of CK(a)){let t=s(e,P.triage.get(C(e)));t&&n[t]!==void 0&&n[t]++}}return n}function kK(e,t=`graph`){if(!e||e.size===0)return new Map;let n=new Map;for(let[r,i]of e){let e=CK(i);if(e.length===0)continue;let a=e.filter(e=>{let n=s(e,P.triage.get(C(e)))??null;return t===`issues`?n!==`invalid`&&n!==`deleted`:n===P.shownTriage});a.length!==0&&n.set(r,a)}return n}function AK(e){let t=DK(e),n=At(e,t.origToStripped.keys());w.bundleReasonFor!==e.integrity&&(w.bundleReasonFor=e.integrity,w.dependencyPackagesView=!1,w.bundleReason=null);let r=MK(t,n,w.bundleReason),{tree:i,origToStripped:a,selected:o}=r;w.bundleReason=o;let s=r.files;if(s.length===0)return null;let c=null;if(e.fileHashes&&e.fileHashes.size>0){c=new Map;for(let[t,n]of e.fileHashes){let e=a.get(t);e!==void 0&&c.set(e,n)}}let l=kK(c),u=l.size>0||[...e.fileHashes??[]].some(([e,n])=>t.origToStripped.has(e)&&CK(n).length>0),d=u&&w.bundleIssues,f=new Map,p=new Map,m=new Map,h=new Map;for(let[e,t]of d?l:[]){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},r=new Set,i=new Set,a=[];for(let e of t){n[e.severity]=(n[e.severity]||0)+1,r.add(e.severity);let t=P.triage.get(C(e))?.color??`none`;i.add(t),a.push({severity:e.severity,color:t})}f.set(e,n),p.set(e,r),m.set(e,i),h.set(e,a)}let g=[`matrix`,`flow`].includes(w.bundleLayout)||f.size===0?null:wr(i,f),_=new Map;for(let[e,t]of a)_.set(t,e);let v=Gt(e),y=new Map(v?[...e.bundle.modules].map(([e,t])=>[e,{directory:e,version:typeof t.version==`string`?t.version:void 0}]):[]),b=e=>{let t=_.get(e)??e;return Jr(t,{packageDir:v?.get(t)})},ee=s.filter(e=>b(e)===`__own__`),te=he(e,a,b,v,t.origToStripped),ne=new Set;for(let e of s)if(ne.add(b(e)),ne.size>=3)break;let re=ne.size>=3,ie=s;if(w.focusedPkg){r.focused.has(w.focusedPkg)||r.focused.set(w.focusedPkg,s.filter(e=>b(e)===w.focusedPkg));let e=r.focused.get(w.focusedPkg);e.length>0?ie=e:w.focusedPkg=null}return w.selected&&!Object.hasOwn(i,w.selected)&&(w.selected=null),{treeData:i,files:ie,ownCounts:f,transitiveCounts:g,severitySets:p,colorSets:m,fileFindings:h,options:{pkgOf:b,packageInfoOf:e=>y.get(v?.get(_.get(e)??e))},strippedToOrig:_,canPackagesView:re,hasIssues:u,issuesShown:d,viewId:e.integrity??null,supportsLayers:!0,layerRoots:te,flowEntries:w.bundleLayout===`flow`?pe(e,a,t.origToStripped,v):void 0,ownSourcePackages:ae(a,b,v),entryPackages:se(e,a,b),ownSourceFiles:new Set(ee),reasons:[...n.keys()]}}var jK=new WeakMap;function MK(e,t,n){let r=t.has(n)?n:null;jK.has(e)||jK.set(e,new Map);let i=jK.get(e);if(!i.has(r)){let n=le(e.tree,e.origToStripped,t,r);i.set(r,{...n,files:Object.keys(n.tree),focused:new Map})}return i.get(r)}function NK(){if(!TK)return;let e=_T();e&&e.refreshSidebar(TK,{isBundleContext:!0,findingsJump:!F()})}function PK(){if(!TK)return;let e=_T();e&&e.refreshTopPkgs(TK)}function FK(e){TK=e}function IK(e,t,n){let{totalByPkg:r,whyQueries:i,total:a}=e;if(a===0)return j;e.sorted.has(t)||e.sorted.set(t,[...r.entries()].toSorted((e,n)=>+(n[0]===`__own__`)-(e[0]===`__own__`)||(t===`size`?n[1]-e[1]:0)||Xr(e[0]).localeCompare(Xr(n[0]))||e[0].localeCompare(n[0])));let o=e.sorted.get(t);return k`<div class="bundles-dist"><div class="bundles-dist-bar" aria-hidden="true">${D(o,([e])=>e,([e,t])=>k`<span class="bundles-dist-seg" style="${E({flexGrow:t,background:nr(e)})}" data-tooltip="${e===`__own__`?j:`${e}: ${Wr(t)}`}"></span>`)}</div><ul class="bundles-dist-list">${D(o,([e])=>e,([e,t])=>{let r=(t/a*100).toFixed(1),o=Xr(e),s=nr(e),c=i.get(e);return k`<li><span class="bundles-dist-dot" style="${E({background:s})}"></span> ${c?k`<button type="button" class="bundles-dist-pkg" aria-haspopup="dialog" aria-label="${`Show dependency chains for ${o}`}" @click="${()=>LK(n,c)}" data-tooltip-truncated data-tooltip="${e}">${o}</button>`:k`<span class="bundles-dist-pkg" data-tooltip-truncated data-tooltip="${e===`__own__`?j:e}">${o}</span>`} <span class="bundles-dist-bar-row" aria-hidden="true"><span class="bundles-dist-bar-fill" style="${E({width:`${r}%`,background:s})}"></span> </span><span class="bundles-dist-size">${Wr(t)}</span> <span class="bundles-dist-percent">${r}%</span></li>`})}</ul></div>`}function LK(e,t){let n=P.currentManagedTeam,r=P.currentWorkspace,i=P.managedSession&&Ms(P.managedSession);return lt({details:e,...t,isCurrent:()=>P.currentView===`bundles`&&P.selectedBundle===e.integrity&&(P.bundleDetails&&Ms(P.bundleDetails))===Ms(e)&&P.currentWorkspace===r&&P.currentManagedTeam===n&&(P.managedSession&&Ms(P.managedSession))===i})}var RK=new WeakMap;function zK(e,t,n,r){let i=RK.get(e);if(i&&i.packageDirs===n&&i.details===r&&i.sizes.length===t.length&&i.sizes.every((e,n)=>e===t[n]))return i;let{prefix:a,stripped:o}=kn(e),s=t=>n?.get(e[t]),c=new Set;for(let t=0;t<o.length;t++)c.add(Jr(e[t],{packageDir:s(t)}));let l=o.map((e,t)=>t).toSorted((e,t)=>o[e].localeCompare(o[t])),u=o.map((e,t)=>t).toSorted((e,n)=>(t[n]??-1)-(t[e]??-1)||o[e].localeCompare(o[n])),d=BK(e.map((e,n)=>({path:e,size:t[n],pkgDir:s(n)})),r),f={sizes:[...t],packageDirs:n,details:r,prefix:a,stripped:o,packages:c,byName:l,bySize:u,dist:d};return RK.set(e,f),f}function BK(e,t){let n=new Map,r=new Map,i=0;for(let{path:a,size:o,pkgDir:s}of e){if(typeof o!=`number`||o<=0)continue;let e=Jr(a,{packageDir:s});n.set(e,(n.get(e)??0)+o),r.has(e)||r.set(e,RG(t,s)),i+=o}return{totalByPkg:n,whyQueries:r,total:i,sorted:new Map}}function VK(e,t,n,r,i,a,{bundleSize:o=null,unpackedSize:s=null,resources:c=null,details:l=null,leadColumn:u=null,trailColumns:d=j,summaryExtra:f=j,fileTag:p=null,fileIcon:m=null,fileFlags:h=null,overviewClass:g=``,fileFilter:_=null,lines:v=null,sized:y=(e,t,n)=>n}={}){let b=zK(n,r,i,l),{prefix:ee,stripped:te,packages:ne}=b,re=te.map((e,t)=>t).filter(e=>!_||_.keeps(n[e])),ie=e=>h?.(n[e])??[],ae=re.some(e=>ie(e).length>0),oe=P.bundleOverviewFilesSort===`flags`&&!ae?`name`:P.bundleOverviewFilesSort,se=oe===`size`?b.bySize:b.byName,ce=oe===`flags`?oU(re,ie,e=>te[e]):_?se.filter(e=>_.keeps(n[e])):se,le=P.bundleOverviewPackagesSort,ue=IK(b.dist,le,l),de=ue===j?k`<p class="bundles-overview-col-empty">No size information for this bundle's sources.</p>`:ue,fe={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},pe=0,me=new Map;if(P.bundleDetails?.fileHashes){let e=kK(P.bundleDetails.fileHashes,`issues`);for(let t of e.values())for(let e of t){fe[e.severity]!==void 0&&fe[e.severity]++,pe++;for(let t of Ef(e.fileHash,e))me.set(t,(me.get(t)??0)+1)}}let he=[...me.keys()].toSorted(),ge=Ai.filter(e=>fe[e]>0).map(e=>k`<span class="${`tree-count-chip ${e}`}">${fe[e]} ${e.replaceAll(`_`,` `)}</span>`),_e=n.length>0?k`<ul class="bundles-sources-list">${ce.map(e=>{let t=n[e],i=r[e],a=k`${m?m(t):j}<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${t}">${te[e]}</span> ${p?p(t):j} ${i==null?j:k`<span class="bundles-source-size">${Wr(i)}</span>`}`;return k`<li>${c?.has(t)?k`<div class="bundles-source-row is-resource">${a}</div>`:k`<button type="button" class="bundles-source-row" data-bundle-view-source="${t}">${a}</button>`}</li>`})}</ul>`:k`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,ve=he.length>0?k`<ul class="bundles-reports-list">${he.map(e=>{let t=zx[Ux(e)]??zx.default,n=me.get(e)??0;return k`<li><button type="button" class="report-chip bundles-report-chip" data-bundle-issue-report="${e}">${O(t)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${e}">${x(e)}</span> <span class="bundles-report-count">${n} ${n===1?`issue`:`issues`}</span></button></li>`})}</ul>`:k`<p class="bundles-overview-col-empty">No matching reports indexed yet.</p>`,ye=n.length-(c?.size??0);return k`<div class="bundles-overview ${g}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e(ee)}<dl class="bundles-detail-meta is-build">${t}<dt>Sources</dt><dd>${v==null?y(`files`,ye,ye):k`${y(`files`,ye,`${ye} ${ye===1?`file`:`files`}`)} · ${y(`lines`,v,`${v.toLocaleString(`en`)} LoC`)}`}</dd>${o==null?j:k`<dt>Size</dt><dd>${Wr(o)}</dd>`} ${s==null?j:k`<dt>Unpacked</dt><dd>${y(`unpacked`,s,Wr(s))}</dd>`} ${c?.size?k`<dt>Resources</dt><dd>${c.size}</dd>`:j}</dl>${a??j}</div>${pe>0?k`<div class="bundles-issue-summary tree-count-chips">${ge}</div>`:j} ${f}</div><div class="bundles-overview-columns">${u??rA({title:`Packages`,count:ne.size,body:de,tools:k`<span class="bundles-overview-sort" role="group" aria-label="Package order">${[[`name`,`Name`],[`size`,`Size`]].map(([e,t])=>k`<button type="button" aria-pressed="${String(le===e)}" @click="${()=>{P.bundleOverviewPackagesSort=e,Z()}}">${t}</button>`)}</span>`})} ${rA({title:`Files`,count:_?`${ce.length} of ${n.length}`:n.length,body:_e,list:!0,extra:_?k`<button type="button" class="bundles-overview-filter" aria-label="${`Show every file, not only ${_.label}`}" @click="${_.clear}">${_.label}<span aria-hidden="true">×</span></button>`:j,tools:k`<span class="bundles-overview-sort" role="group" aria-label="File order">${[[`name`,`Name`],[`size`,`Size`],...ae?[[`flags`,`Flags`]]:[]].map(([e,t])=>k`<button type="button" aria-pressed="${String(oe===e)}" @click="${()=>{P.bundleOverviewFilesSort=e,Z()}}">${t}</button>`)}</span>`})} ${he.length>0?rA({title:`Reports`,count:he.length,body:ve,list:!0}):j} ${d}</div></div>`}var HK=16,UK=new Map,WK=new Set,GK=()=>k`<button type="button" class="bundle-source-wrap-toggle" data-bundle-source-wrap hidden aria-pressed="${P.bundleSourceWrap?`true`:`false`}" aria-label="Wrap lines" data-tooltip="Wrap lines">${ow}</button>`;function KK(e){let t=e?.status;return k`<button type="button" class="${T({"bundle-source-pretty-toggle":!0,"is-loading":t===`loading`,"is-error":t===`error`})}" data-bundle-source-pretty aria-pressed="${P.bundleSourcePretty?`true`:`false`}" aria-busy="${t===`loading`?`true`:j}" aria-label="Pretty-print" data-tooltip="${ek(e)}">${$O}</button>`}function qK(e,t,n,r,i,a){let o=xk(e,t,n,r),s=o?Fk(e,t,n,r,()=>{P.bundleSourceFile===n&&Z()}):null,c=s?.status===`ready`;return{pretty:c,toggle:o?KK(s):j,content:c?s.text:r,fileFindings:c?[]:i,lineFindings:c?new Map:a}}function JK(e){let t=e?.status;return k`<button type="button" class="${T({"bundle-source-lockfile-toggle":!0,"is-loading":t===`loading`,"is-error":t===`error`})}" data-bundle-source-lockfile aria-pressed="${P.bundleSourceLockfile?`true`:`false`}" aria-busy="${t===`loading`?`true`:j}" aria-label="View lockfile" data-tooltip="${Zk(e)}">${O($i)}</button>`}var YK=null;function XK(){queueMicrotask(()=>{document.querySelector(`.bundle-code-rail-body .bundle-code-tree-link.current`)?.scrollIntoView({block:`nearest`})})}function ZK(e){requestAnimationFrame(()=>requestAnimationFrame(()=>{document.querySelector(`.bundle-code-main .bundle-source-lineno-row[data-line="${e}"]`)?.scrollIntoView({block:`center`})}))}function QK(e){for(let t of Ai)for(let n of e)if(n.severity===t)return t;return e[0]?.severity??null}var $K={content:``,parts:``};function eq(e){if($K.content===e)return $K.parts;let t=e;if(e.length>BT||sC(e)){let n=e=>[UT(e)].flat();t=[];let r=0;for(let i=0;i<e.length;){let a=e.indexOf(`
|
|
184
|
+
`,i),o=a===-1?e.length:a+1;(a===-1?o:a)-i>VT&&(t.push(...n(e.slice(r,i)),k`<span class="bundle-source-long-line">${n(e.slice(i,o))}</span>`),r=o),i=o}t.push(...n(e.slice(r)))}return $K={content:e,parts:t},t}function tq(e,t,n,r,i=null,a=!1,o=!1){let s=Rt(e),c=P.bundleSourceTargetLine,l=!o&&c&&c.path===t&&c.bundle===(n?.integrity??null)?c.line:null,u=l==null?null:Math.max(c.end??l,l),d=String(s).length,f=Mt(t,n?.kind===`stasis`?n.bundle?.formats?.get(t):void 0,e),p=`${n?.integrity??``}\0${t}${o?`\0pretty`:``}`;f&&!UK.has(p)&&!WK.has(p)&&(WK.add(p),(async()=>{let r=await jS(e,f,XS(n,t));UK.set(p,typeof r==`string`?dC(r):null),UK.size>HK&&UK.delete(UK.keys().next().value),WK.delete(p),P.bundleSourceFile===t&&Z()})());let m=UK.get(p);UK.has(p)&&(UK.delete(p),UK.set(p,m));let h=P.bundleSourceFindingIdx,g=[...r].map(([e,t])=>`${e}:${QK(t.map(e=>e.f))}:${t.map(e=>e.idx).join(`,`)}`).join(` `);return k`<div class="${T({"bundle-source-lines":!0,"is-wrapped":P.bundleSourceWrap})}" style="${E({"--lineno-width":`${d}ch`})}" ${zT(AD)}><aside class="bundle-source-lineno-col" aria-hidden="true">${AT([s,g,h,i,a,l,u],()=>Array.from({length:s},(e,t)=>{let n=t+1,o=r.get(n),s=o?QK(o.map(e=>e.f)):null,c=o&&h!=null&&o.some(e=>e.idx===h);return k`<div class="${T({"bundle-source-lineno-row":!0,"is-match":i?.has(n)??!1,"is-target":l!=null&&n>=l&&n<=u})}" data-line="${n}">${o?k`<button type="button" class="${T({"bundle-source-dot":!0,[`sev-${s}`]:!0,active:c})}" data-bundle-source-finding="${o[0].idx}" data-tooltip="${`${o.length} ${o.length===1?`issue`:`issues`} on line ${n}`}" aria-label="${`${o.length} issues on line ${n}`}"></button>`:k`<span class="bundle-source-dot-placeholder"></span>`} <span class="bundle-source-lineno-num" data-bundle-source-line="${a?n:j}">${n}</span></div>`}))}</aside><pre class="bundle-source-code" tabindex="-1" aria-label="${t}"><code class="${f?`language-${f}`:``}">${typeof m==`string`?O(m):eq(e)}</code></pre></div>`}function nq(e){let t=P.bundleSourceFindingIdx;if(t==null)return j;let n=e[t];if(!n)return j;let r=n.fileHash?Ef(n.fileHash,n):[],i=s(n,P.triage.get(C(n))),a=i===`fixed`?`Fixed`:i===`inprogress`?`In progress`:i===`ignored`?`Ignored`:null,o=jn(n),c=fJ(n.line);return k`<aside class="bundle-source-panel"><header class="bundle-source-panel-bar"><span class="${`bundle-source-panel-sev sev-${n.severity}`}">${n.severity.replaceAll(`_`,` `)}</span> ${a?k`<span class="${`bundle-source-panel-triage triage-${i}`}">${a}</span>`:j} <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">${c||o?k`<div class="bundle-source-panel-line-row">${c?k`<span class="bundle-source-panel-line">${c}</span>`:j} ${o?k`<span class="bundle-source-panel-meta" data-tooltip-truncated data-tooltip="${o}">${o}</span>`:j}</div>`:j}<div class="bundle-source-panel-desc">${bw(Ui(n),{paragraphs:!1})}</div>${r.length>0?k`<div class="bundle-source-panel-reports"><div class="bundle-source-panel-reports-label">Reported by</div>${r.map(e=>{let t=it[Ux(e)]??it.default;return k`<button type="button" class="report-chip bundle-source-panel-report" data-bundle-issue-report="${e}">${O(t)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${e}">${x(e)}</span></button>`})}</div>`:j}</div></aside>`}function rq(e,t,n,r=null){let i=[],a=new Map;if(typeof n==`string`&&e?.fileHashes){let n=(r??kK(e.fileHashes,`issues`)).get(t)??[];for(let e=0;e<n.length;e++){let t=n[e];i.push(t);let r=parseInt(t.line,10);Number.isFinite(r)&&r>0&&(a.has(r)||a.set(r,[]),a.get(r).push({f:t,idx:e}))}}return{fileFindings:i,lineFindings:a}}function iq(e,t=null,n=j){return k`<header class="bundle-source-bar"><div class="bundle-source-title mono" data-tooltip-truncated data-tooltip="${e}">${e}</div>${t?.files.length>1?zq(t):j} ${GK()} ${n} <button type="button" class="bundle-source-close" data-action="bundle-source-close" aria-label="Close source viewer">×</button></header>`}function aq(e,t,n,r,i,a=null,o=!1,s=!1){return k`<div class="bundle-source-code-wrap">${typeof t==`string`?tq(t,e,n,i,a,o,s):k`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${nq(r)}`}function oq(){let e=P.bundleSourceFile;if(!e||P.bundleDetailsTab===`code`||P.bundleDetailsTab===`search`)return j;let t=P.bundleDetails,n=t?.sourceError||t?.error,r=!n&&(!t||t.metadataOnly===!0),i=Lt(t),{fileFindings:a,lineFindings:o}=rq(t,e,i.get(e)),s=P.bundles?.find(e=>e.integrity===t?.integrity)??(t?.npm?{npm:t.npm}:null),c=r||n?null:qK(t,s,e,i.get(e),a,o);return k`<div class="bundle-source-overlay"><div class="${T({"bundle-source-modal":!0,"with-panel":P.bundleSourceFindingIdx!=null})}">${iq(e,Uk(P.bundleCodeHistory,t?.integrity??null,e),c?.toggle)}<div class="bundle-source-body" aria-busy="${String(r)}">${n?k`<div class="bundles-slide-placeholder is-error" role="status">Failed to load source: ${n}</div>`:r?k`<div class="bundles-slide-placeholder" role="status">Loading source…</div>`:aq(e,c.content,t,c.fileFindings,c.lineFindings,null,!1,c.pretty)}</div></div></div>`}var sq=new Map,cq=null,lq=null,uq=0;function dq(e,t){let n=vq(e??``,t).split(`/`);for(let e=1;e<n.length;e++)sq.set(n.slice(0,e).join(`/`),!0);uq++}function fq(e,t){P.bundleCodeSearchMode=`files`,P.bundleCodeSearchQuery=``,dq(e,t),Z(),XK()}function pq(e){let t=e=>{for(let n of e.dirs.values())sq.set(n.path,!1),t(n)};t(e),uq++,Z()}function mq(e){P.bundleCodeTerminal=e,Z(),e?CT():document.querySelector(`[data-bundle-code-terminal-toggle]`)?.focus()}function hq(){return k`<bundle-code-terminal-splitter role="separator" tabindex="0" aria-orientation="horizontal" aria-label="Resize terminal" data-tooltip="Drag to resize · double-click to reset"></bundle-code-terminal-splitter><section class="bundle-code-terminal" aria-label="Terminal"><header class="bundle-code-terminal-bar"><span class="bundle-code-rail-label">Terminal</span> <button type="button" class="bundle-code-rail-action" aria-label="Close terminal" @click="${()=>mq(!1)}">×</button></header><div id="bundle-terminal-slot" class="bundle-code-terminal-slot"></div></section>`}function gq(e,t){let n=0,r=null;if(!t||t.size===0)return{count:n,worst:r};let i=e=>{for(let i of e.files.values()){let e=t.get(i);if(!e||e.length===0)continue;n+=e.length;let a=QK(e);(r===null||(ki[a]??0)>(ki[r]??0))&&(r=a)}for(let t of e.dirs.values())i(t)};return i(e),{count:n,worst:r}}function _q(e,t,n=0,r=null,i=!1,a=null,o=null){let s=[...e.dirs.entries()].toSorted(([e,t],[n,r])=>_D(e,t).localeCompare(_D(n,r))||t.path.localeCompare(r.path)),c=[...e.files.entries()].toSorted(([e],[t])=>e.localeCompare(t)),l=e=>{if(!t)return!1;for(let n of e.files.values())if(n===t)return!0;for(let t of e.dirs.values())if(l(t))return!0;return!1},u=(e,t)=>i?!0:sq.has(e)?sq.get(e):n===0||l(t),d=e=>t=>{sq.set(e,!t.currentTarget.parentElement.open)};return k`<ul class="${T({"bundle-code-tree":!0,root:n===0})}" aria-label="${n===0?`Source files`:j}" @keydown="${n===0?bD:j}">${D(s,([,e])=>e.path,([e,s])=>{let c=s.path,l=yD(e,s,n),f=s.package,p=f?.ecosystem===`cargo`||f?.ecosystem===`composer`||f?.ecosystem===`soldeer`,m=Tt(f?.ecosystem),h=f?.variant?`${l.node.sourcePath}
|
|
185
|
+
Variant ${f.variant}`:l.node.sourcePath,g=s.packageInfo,_=!!g||!!f?.variant,v=g&&o?e=>{let{bytes:t,loc:n}=dD(o,s.sourcePath);Object.assign(e.dataset,{tooltipLoc:String(n),tooltipSize:Wr(t)})}:void 0,y=gq(s,r);return k`<li class="bundle-code-tree-dir"><details .open="${st(u(c,s))}"><summary @click="${d(c)}" .prepareTooltip="${v}" data-tooltip-package="${g?.name??j}" data-tooltip-ecosystem="${g?.ecosystem??j}" data-tooltip-version="${g?.version??j}" data-tooltip-files="${g?.fileCount??j}" data-tooltip-repo="${g?.github?g.github+(g.directory?`/${g.directory}`:``):j}" data-tooltip-commit="${g?.commit??j}" data-tooltip="${_?h:j}" data-tooltip-placement="${_?`right-start`:j}"><span class="bundle-code-tree-chevron" aria-hidden="true"></span> ${f?m:j} <span class="${T({"bundle-code-tree-dirname":!0,"bundle-code-tree-package":!!f,"bundle-code-tree-package-vendored":p})}" data-tooltip-truncated data-tooltip="${_?j:h}">${f?k`<span class="bundle-code-tree-package-name">${f.name}</span>${f.version?k`<span class="bundle-code-tree-package-version">${p?`- `:`@`}${f.version}</span>`:j}`:l.names.map((e,t)=>k`${t>0?k`<span class="bundle-code-tree-separator">/</span>`:j}${e}`)} </span>${f?.variant?k`<span class="bundle-code-tree-variant">variant ${f.variant}</span>`:j} ${y.count>0?k`<span class="${`bundle-code-tree-count sev-${y.worst}`}" data-tooltip="${`${y.count} ${y.count===1?`issue`:`issues`} inside`}">${y.count}</span>`:j}</summary>${_q(l.node,t,n+1,r,i,a,o)}</details></li>`})} ${D(c,([,e])=>e,([e,n])=>{let i=r?.get(n),o=i&&i.length>0?QK(i):null,s=i?.length??0;return k`<li class="bundle-code-tree-file"><button type="button" class="${T({"bundle-code-tree-link":!0,current:n===t})}" data-bundle-view-source="${n}" aria-current="${n===t?`true`:j}">${yt(n,a?.get(n))}<span class="bundle-code-tree-name" data-tooltip-truncated data-tooltip="${n}">${e}</span> ${s>0?k`<span class="${`bundle-code-tree-count sev-${o}`}" data-tooltip="${`${s} ${s===1?`issue`:`issues`}`}">${s}</span>`:j}</button></li>`})}</ul>`}function vq(e,t){return t&&e.startsWith(t)?e.slice(t.length):e}var yq={tree:null,query:``,prefix:``,filtered:null};function bq(e,t,n,r,i=``,a=null,o=null){let s=yq;n&&(s.tree!==e||s.query!==n||s.prefix!==i)&&(yq={tree:e,query:n,prefix:i,filtered:vD(e,n,i)});let c=n?yq.filtered:e;return AT([c,t,xq(r),a,o,uq],()=>c?_q(c,t,0,r,!!n,a,o):k`<div class="bundle-code-search-empty">No files match.</div>`)}function xq(e){return[...e].map(([e,t])=>`${e}\0${t.length}\0${QK(t)}`).join(`
|
|
186
|
+
`)}var Sq=new WeakMap;function Cq(e,t){let n=Sq.get(t);return n||(n=Yr([...t.keys()].toSorted(),Gt(e)),Sq.set(t,n)),n}var wq=1e3,Tq=new WeakMap;function Eq(e,t,n,r,i=``){let a=Wt(e),o=Tq.get(t);o||(o=[...t.keys()].filter(e=>a.get(e)!=null).toSorted((e,t)=>a.get(t)-a.get(e)||e.localeCompare(t)),Tq.set(t,o));let s=n.toLowerCase(),c=s?o.filter(e=>vq(e,i).toLowerCase().includes(s)):o;if(c.length===0)return k`<div class="bundle-code-search-empty">No files match.</div>`;let l=c.length>wq?c.slice(0,wq):c;return k`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${l.length<c.length?`${l.length.toLocaleString()} largest of ${c.length.toLocaleString()} files`:`${c.length.toLocaleString()} ${c.length===1?`file`:`files`} by size`}</div><ul class="bundle-code-largest">${D(l,e=>e,e=>k`<li><button type="button" class="${T({"bundle-code-largest-file":!0,current:e===r})}" data-bundle-view-source="${e}" aria-current="${e===r?`true`:j}"><span class="bundle-code-largest-path" data-tooltip-truncated data-tooltip="${e}">${vq(e,i)}</span><span class="bundle-code-largest-size">${Wr(a.get(e))}</span></button></li>`)}</ul></div>`}var Dq=20,Oq=100,kq={sources:null,query:``,hits:null};function Aq(e,t,n){let r=fG(e.integrity??``,t,n,!1,!1,Cq(e,t));if(r.fileResults.length>Oq||!r.truncated||r.totalHits<5e3||r.fileResults.length===Oq&&r.fileResults.at(-1).hits.length>=Dq){let e=r.fileResults.slice(0,Oq).map(({path:e,lines:t,hits:n})=>({path:e,hits:n.slice(0,Dq).map(({ln:e,ranges:n})=>({ln:e,text:t[e-1],ranges:n}))}));return{results:e,totalHits:e.reduce((e,{hits:t})=>e+t.length,0)}}if(kq.sources===t&&kq.query===n)return kq.hits;let i=cG(n,!1,!1),a=[],o=0;for(let n of Cq(e,t)){let e=t.get(n);if(typeof e!=`string`)continue;let r=[],s=e.split(`
|
|
187
|
+
`);for(let e=0;e<s.length;e++){let t=i.ranges(s[e]);if(t.length!==0&&(r.push({ln:e+1,text:s[e],ranges:t}),o++,r.length>=Dq))break}if(r.length>0&&a.push({path:n,hits:r}),a.length>=Oq)break}return kq={sources:t,query:n,hits:{results:a,totalHits:o}},kq.hits}function jq(e,t,n,r,i=``){if(!n)return k`<div class="bundle-code-search-hint">Type to search across every source in this bundle.</div>`;let{results:a,totalHits:o}=Aq(e,t,n);return a.length===0?k`<div class="bundle-code-search-empty">No matches.</div>`:k`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${o} ${o===1?`hit`:`hits`} in ${a.length} ${a.length===1?`file`:`files`}</div>${a.map(({path:e,hits:t})=>{let n=vq(e,i);return k`<div class="${T({"bundle-code-search-file":!0,current:e===r})}"><button type="button" class="bundle-code-search-file-name" data-bundle-view-source="${e}" data-tooltip-truncated data-tooltip="${e}">${n}</button><ul class="bundle-code-search-hits">${t.map(t=>k`<li class="bundle-code-search-hit"><button type="button" class="bundle-code-search-hit-link" data-bundle-view-source="${e}" data-bundle-view-line="${t.ln}" data-bundle-view-scroll-block="start"><span class="bundle-code-search-hit-ln">${t.ln}</span> <span class="bundle-code-search-hit-text mono">${_G(t.text,t.ranges)}</span></button></li>`)}</ul></div>`})}</div>`}function Mq(e,t,n,r=``){if(!e.fileHashes)return k`<div class="bundle-code-search-empty">Computing file hashes…</div>`;let i=kK(e.fileHashes,`issues`);if(i.size===0)return k`<div class="bundle-code-search-empty">No issues match this bundle's files.</div>`;let a=t.toLowerCase(),o=[];for(let[e,t]of i)for(let n=0;n<t.length;n++){let r=t[n],i=r.description??``;a&&!e.toLowerCase().includes(a)&&!r.severity.includes(a)&&!r.severity.replaceAll(`_`,` `).includes(a)&&!i.toLowerCase().includes(a)||o.push({file:e,finding:r,fileIdx:n})}return o.sort((e,t)=>{let n=ki[e.finding.severity]??0,r=ki[t.finding.severity]??0;return r===n?e.file.localeCompare(t.file):r-n}),o.length===0?k`<div class="bundle-code-search-empty">No matches.</div>`:k`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${o.length} ${o.length===1?`issue`:`issues`}</div><ul class="bundle-code-search-issues">${o.map(({file:e,finding:t,fileIdx:i})=>{let a=t.severity,o=vq(e,r),s=e===n&&P.bundleSourceFindingIdx===i;return k`<li class="${T({"bundle-code-search-issue":!0,current:s})}"><button type="button" class="bundle-code-search-issue-link" data-bundle-view-source="${e}" data-bundle-view-finding-idx="${i}" data-bundle-view-line="${t.line??``}"><div class="bundle-code-search-issue-row"><span class="${`bundle-code-search-issue-sev sev-${a}`}">${a.replaceAll(`_`,` `)}</span> <span class="bundle-code-search-issue-path mono" data-tooltip-truncated data-tooltip="${e}">${o}${t.line?`:${t.line}`:``}</span></div><div class="bundle-code-search-issue-desc">${bw(Ui(t),{paragraphs:!1})}</div></button></li>`})}</ul></div>`}var Nq=new WeakMap;function Pq(e,t){if(e.kind!==`stasis`)return t;if(Nq.has(t))return Nq.get(t);let n=Gt(e),r=new Map([...t].filter(([e])=>!/(?:^|\/)node_modules(?:\/|$)/u.test(e)&&!/(?:^|\/)(?:node_modules|dependencies|vendor)(?:\/|$)/u.test(n?.get(e)??e))),i=r.size>0?r:t;return Nq.set(t,i),i}var Fq=new WeakMap;function Iq(e,t,n){let r=Fq.get(t);if(!r){let i=e.kind===`stasis`?e.bundle.modules:null,a=hD(kn(n).prefix,i,n);r={prefix:a,tree:mD(n.map(e=>vq(e,a)),n,i)},Fq.set(t,r)}return r}function Lq(e,t,n){let r=null,i=-1,a=0;for(let[e,o]of n){if(typeof t.get(e)!=`string`)continue;let n=ki[QK(o)]??0;(n>i||n===i&&o.length>a||n===i&&o.length===a&&(r===null||e.localeCompare(r)<0))&&(r=e,i=n,a=o.length)}if(r)return r;if(e.kind===`stasis`&&e.bundle){for(let n of e.bundle.entries)if(typeof t.get(n)==`string`)return n}for(let n of e.npmEntries??[])if(typeof t.get(n)==`string`)return n;let o=null,s=-1;for(let[e,n]of t)typeof n==`string`&&n.length>s&&(o=e,s=n.length);return o}function Rq(e,t=null){let n=Lt(e);if(n.size===0)return k`<div class="bundle-code-empty">This bundle doesn't carry any source content.</div>`;cq!==P.selectedBundle&&(sq.clear(),uq++,cq=P.selectedBundle,lq=null);let r=zt(n).paths,{prefix:i,tree:a}=Iq(e,n,r),o=e.fileHashes?kK(e.fileHashes,`issues`):new Map,s=Pq(e,n),c=()=>e.kind===`stasis`?new Map([...o].filter(([e])=>s.has(e))):o,l=P.bundleSourceFile,u=P.bundleCodeFileRequest;if(u?.bundle===P.selectedBundle){P.bundleCodeFileRequest=null;let t=u.path==null?r[u.file-1]:n.has(u.path)?u.path:null;if(t){l=t,P.bundleSourceFile=t,XK();let r=u.endLine??u.line;P.bundleSourceTargetLine=u.line&&r<=Rt(n.get(t))?{bundle:e.integrity,path:t,line:u.line,...r>u.line?{end:r}:{}}:null,P.bundleSourceTargetLine&&ZK(u.line)}}if(YK&&(YK.bundle!==P.selectedBundle||l&&l!==YK.path)&&(YK=null),l){if(YK&&!YK.hadIssues&&o.size>0&&c().size>0){YK.hadIssues=!0;let t=Lq(e,s,c());t&&t!==l&&(l=t,P.bundleSourceFile=t,P.bundleSourceFindingIdx=null,YK.path=t,XK())}}else{let t=c();l=Lq(e,s,t),l&&(P.bundleSourceFile=l,YK={bundle:P.selectedBundle,path:l,hadIssues:t.size>0},XK())}l!==lq&&(dq(l,i),lq=l),l&&t?.managedId&&F()?U?.replaceCodeRoute(jx(P.managedTeams,t,P.currentManagedTeam,`code`,Mx(P))):l&&t?.npm&&F()?U?.replaceCodeRoute(uj(t,`code`,Mx(P))):l&&t?.repository&&F()&&U?.replaceCodeRoute(zM(t,`code`,Mx(P)));let d=l?n.get(l):null,{fileFindings:f,lineFindings:p}=rq(e,l,d,o),m=o.size>0?[`files`,`code`,`issues`,`largest`]:[`files`,`code`,`largest`],h=m.includes(P.bundleCodeSearchMode)?P.bundleCodeSearchMode:`files`,g=P.bundleCodeSearchQuery;return k`<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">${r.length}</span> <span class="bundle-code-rail-actions"><button type="button" class="bundle-code-rail-action" aria-label="Terminal" data-tooltip="Terminal" data-bundle-code-terminal-toggle aria-pressed="${P.bundleCodeTerminal?`true`:`false`}" @click="${()=>mq(!P.bundleCodeTerminal)}">${cw}</button> <button type="button" class="bundle-code-rail-action" aria-label="Reveal current file" data-tooltip="Reveal current file" ?disabled="${!l}" @click="${()=>fq(l,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="${h!==`files`||!!g||a.dirs.size===0}" @click="${()=>pq(a)}">${sw}</button></span></div>${i?k`<div class="bundle-code-rail-prefix mono" data-tooltip-truncated data-tooltip="${i}">${i}</div>`:j}<bundle-code-search .modes="${m}"></bundle-code-search><div class="bundle-code-rail-body">${OT(h,[[`files`,()=>bq(a,l,g,o,i,e.kind===`stasis`?e.bundle.formats:null,n)],[`code`,()=>jq(e,n,g,l,i)],[`issues`,()=>Mq(e,g,l,i)],[`largest`,()=>Eq(e,n,g,l,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="${T({"bundle-code-main":!0,"with-panel":P.bundleSourceFindingIdx!=null})}">${l?Hq(e,l,d,f,p,t):k`<div class="bundle-code-placeholder">Pick a file from the tree to view its source.</div>`} ${P.bundleCodeTerminal?hq():j}</div></div>`}function zq(e){return k`<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}">${iw}</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}">${aw}</button></span>`}var Bq=[];function Vq(e){let t=Bq.find(t=>t.text===e);if(t)return t.stats;let n=Rt(e),r=`${n.toLocaleString()} ${n===1?`line`:`lines`} \xB7 ${Wr(fa(e))}`;return Bq.unshift({text:e,stats:r}),Bq.length=Math.min(Bq.length,2),r}function Hq(e,t,n,r,i,a=null){let o=Uk(P.bundleCodeHistory,e.integrity,t),s=qK(e,a,t,n,r,i),{pretty:c,toggle:l,fileFindings:u,lineFindings:d}=s,f=typeof n==`string`&&Kk(t)!==null,p=f?Yk(e,t,n,Lt(e),()=>{P.bundleSourceFile===t&&Z()}):null,m=p?.status===`ready`,h=m?n:s.content,g=u.map((e,t)=>({idx:t,line:parseInt(e.line,10)||0})).toSorted((e,t)=>e.line-t.line||e.idx-t.idx),_=wD(e,t,a?.managedId&&a.repoId!=null?{github:a.repoFullName,directory:a.repoDirectory}:null);return k`<header class="bundle-code-main-bar">${zq(o)} ${yt(t,_t(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">${rw}</button> ${_?TD(_,a?.commitInfo):j} <span class="bundle-code-main-spacer"></span> ${u.length>0&&!m?k`<span class="bundle-code-main-issues" data-bundle-code-issue-order="${JSON.stringify(g)}"><span class="${`bundle-code-tree-count sev-${QK(u)}`}" data-tooltip="${`${u.length} ${u.length===1?`issue`:`issues`} in this file`}">${u.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>`:j} ${m?j:GK()} ${m?j:l} ${f?JK(p):j} ${typeof h==`string`?k`<span class="bundle-code-main-stats">${l===j?j:k`<span class="bundle-code-main-stats-room" aria-hidden="true">${Vq(n)}</span>`}<span>${Vq(h)}</span></span>`:j}</header><div class="bundle-code-main-body">${m?k`<lockfile-graph .lockfile="${p.lockfile}"></lockfile-graph>`:aq(t,h,e,u,d,null,!c&&!!(a?.managedId||a?.npm)&&F()&&!Qe(),c)}</div>`}var Uq=400;function Wq(e){return e<=5?8:e<=15?6:e<=40?4:e<=120?3:2}function Gq(e,t,n){let r=[];for(let i of e){let e=Math.max(1,i.ln-n),a=Math.min(t,i.ln+n),o=r.at(-1);o&&e<=o.end+1?o.end=Math.max(o.end,a):r.push({start:e,end:a})}return r}function Kq(e,t,n){if(e.length<=n)return{text:e,ranges:t,clipped:!1};let r=t.length>0?t[0][0]:0;return vG(e,t,r>n-60?Math.max(0,r-60):0,n)}function qq(e,t,n){let r=Kq(e,n??[],Uq);return k`<div class="${T({"bundle-search-line":!0,"is-match":n!=null})}"><span class="bundle-search-lineno">${t}</span> <span class="bundle-search-code">${r.clipped?k`<span class="bundle-search-clip">…</span>`:j}${yG(r.text,r.ranges)}</span></div>`}function Jq(e,t,n,r,i){let{start:a,end:o}=n,s=a;for(let e=a;e<=o;e++)if(r.has(e)){s=e;break}let c=String(o).length,l=[];for(let e=a;e<=o;e++)l.push(qq(t[e-1]??``,e,r.get(e)??null));return k`${i?k`<div class="bundle-search-gap" aria-hidden="true"></div>`:j} <button type="button" class="bundle-search-snippet" style="${E({"--bundle-search-lineno-w":`${c}ch`})}" data-bundle-view-source="${e}" data-bundle-view-line="${s}" data-bundle-view-scroll-block="center">${l}</button>`}function Yq(e,t,n){let{path:r,lines:i,hits:a}=e,o=vq(r,t),s=Gq(a,i.length,n),c=new Map(a.map(e=>[e.ln,e.ranges])),l=a[0].ln,u=r===P.bundleSourceFile;return k`<section class="${T({"bundle-search-file":!0,current:u})}"><header class="bundle-search-file-head"><button type="button" class="bundle-search-file-name mono" data-bundle-view-source="${r}" data-bundle-view-line="${l}" data-bundle-view-scroll-block="center" data-tooltip-truncated data-tooltip="${r}">${o}</button> <span class="bundle-search-file-count">${a.length} ${a.length===1?`match`:`matches`}</span></header><div class="bundle-search-snippets">${s.map((e,t)=>Jq(r,i,e,c,t>0))}</div></section>`}function Xq(e,t,n,r,i,a){if(!n)return k`<div class="bundle-search-results"><div class="bundle-search-hint">Search across every ${e.npm?`file of this version`:e.repository?`file of this directory`:`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 o=fG(e.integrity??``,t,n,r,i,Cq(e,t));if(o.error)return k`<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">${o.error}</span></div></div>`;let{fileResults:s,totalHits:c,truncated:l}=o,u=Qq(t);if(s.length===0)return k`<div class="bundle-search-results"><div class="bundle-search-empty">No matches.</div></div>`;let d=a?Wq(c):0,f=s.length;return k`<div class="bundle-search-results"><div class="bundle-search-summary"><span>${c}${l?`+`:``} ${c===1?`match`:`matches`} in ${f}${l?`+`:``} ${f===1?`file`:`files`}</span> ${u?k`<span class="bundle-search-summary-prefix mono" data-tooltip-truncated data-tooltip="${u}">${u}</span>`:j} ${l?k`<span class="bundle-search-summary-more">results capped — refine to narrow</span>`:j}</div>${D(s,e=>e.path,e=>Yq(e,u,d))}</div>`}var Zq=new WeakMap;function Qq(e){return Zq.has(e)||Zq.set(e,kn([...e.keys()].toSorted()).prefix),Zq.get(e)}var $q={content:null,path:null,query:``,useRegex:!1,caseSensitive:!1,lines:null};function eJ(e,t,n,r,i,a){let o=t.get(n);if(!r||typeof o!=`string`)return null;let s=$q;if(s.content===o&&s.path===n&&s.query===r&&s.useRegex===i&&s.caseSensitive===a)return s.lines;let c=fG(e.integrity??``,t,r,i,a,Cq(e,t));if(c.error)return null;let l;if(c.truncated){let e=cG(r,i,a);l=new Set;let t=o.split(`
|
|
188
|
+
`);for(let n=0;n<t.length;n++)e.ranges(t[n]).length>0&&l.add(n+1)}else l=new Set(c.fileResults.find(e=>e.path===n)?.hits.map(({ln:e})=>e));return $q={content:o,path:n,query:r,useRegex:i,caseSensitive:a,lines:l},l}function tJ(e,t,n,r){let i=P.bundleSourceFile;if(!i)return j;let a=t.get(i),{fileFindings:o,lineFindings:s}=rq(e,i,a),c=qK(e,r,i,a,o,s);return k`<aside class="bundle-search-side">${iq(i,null,c.toggle)}<div class="bundle-source-body">${aq(i,c.content,e,c.fileFindings,c.lineFindings,c.pretty?null:n,!1,c.pretty)}</div></aside>`}function nJ(e,t=null){let n=Lt(e);if(n.size===0)return k`<div class="bundle-search-view"><div class="bundle-code-empty">${e.npm?`This version has no text files to search.`:e.repository?`This directory has no text files to search.`:`This bundle doesn't carry any source content.`}</div></div>`;let r=P.bundleSearchQuery,i=P.bundleSearchRegex,a=P.bundleSearchCase,o=null;if(P.bundleSourceFile){let t=eJ(e,n,P.bundleSourceFile,r,i,a);t&&t.size===0?(P.bundleSourceFile=null,P.bundleSourceFindingIdx=null):o=t}let s=P.bundleSearchContext;return k`<div class="bundle-search-view"><div class="bundle-search-bar-row"><bundle-search></bundle-search><mode-switch data-bundle-search-context label="Context" .checked="${s}" accessible-label="Toggle context lines"></mode-switch></div><div class="bundle-search-main">${Xq(e,n,r,i,a,s)} ${tJ(e,n,o,t)}</div></div>`}var rJ=(e,t,n,r=!1,i=null)=>i?k`<button type="button" class="${T({"bundles-tab":!0,active:n===e})}" aria-selected="${String(n===e)}" role="tab" @click="${()=>{e!==n&&i(e)}}">${t}</button>`:k`<button type="button" class="${T({"bundles-tab":!0,active:n===e})}" data-bundle-tab="${e}" aria-selected="${String(n===e)}" role="tab" ?disabled="${r}">${t}</button>`,iJ=()=>[[`treemap`,`Treemap`],[`code`,`Code`],[`search`,`Search`],[`compare`,`Compare`],...P.managedSession&&!P.managedSession.publicShare&&(P.managedSession.dependencyReview===!0||P.managedTeams?.some(e=>e.dependencyReview===!0))?[[`review`,`Review`]]:[],[`overview`,`Overview`]],aJ=e=>[[`treemap`,`Treemap`],[`code`,`Code`],[`search`,`Search`],[`compare`,`Compare`],[vM(e),`Activity`]];function oJ(e,t){return t===`commits`?k`<repository-history .repository="${e}" .repo="${MM(e)}" .refs="${jM(e.repoId)}"></repository-history>`:t===`agents`?k`<repository-agents .repository="${e}" .repo="${MM(e)}"></repository-agents>`:t===`pulse`?k`<repository-pulse .repository="${e}" .repo="${MM(e)}"></repository-pulse>`:t===`replay`?k`<repository-replay .repository="${e}" .repo="${MM(e)}"></repository-replay>`:k`<repository-issues .repository="${e}" .repo="${MM(e)}" .kind="${t}"></repository-issues>`}function sJ(e,t,n,r,{overview:i=!1,opening:a=!1,onTab:o=null}={}){let{npm:s}=e,c=e.repository&&!a?KM(e):null,l=c??e.repository,u=!!c||a&&!!l&&!P.repositoryCodeOpening?.error,d=o?e=>{let n=e.target.closest?.(`[data-bundle-tab]`)?.dataset.bundleTab;n&&(e.stopPropagation(),n!==t&&o(n))}:j;return k`<div class="bundles-view bundles-slide-view"><bundle-slide-header class="bundles-slide-header"><header class="bundles-slide-bar">${F()&&e.managedId&&e.repoId==null?k`<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>`:j} ${s?k`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>Fj()}">npm</button> <span aria-hidden="true">></span></span>`:j} <span class="bundles-slide-icon" aria-hidden="true">${O(s?Zi:l?ia:Xi)}</span><div class="${T({"bundles-slide-title":!0,"bundles-slide-repository":!!l})}">${s?k`<div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${s.name}">${s.name}</div><npm-version-select .name="${s.name}" .version="${s.version}" .tab="${t}" .list="${a?null:wj(s.name)}"></npm-version-select>`:l?k`<repository-code-source .repository="${l}" .tab="${t}" .repos="${AM()}" .refs="${jM(l.repoId)}"></repository-code-source>`:k`<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="${!UW(e)}" @click="${()=>{WW(e)}}">${O(na)}<span>Scan</span></button><div class="bundles-slide-tabs" role="tablist">${n.map(([e,n])=>rJ(e,n,t,a||!!c,o))}</div>${u?k`<span class="bundles-slide-progress" role="progressbar" aria-label="${`Opening ${l.repo?SM(l):`the repository`}`}"></span>`:j}</header></bundle-slide-header><div class="${T({"bundles-slide-body":!0,"bundles-slide-body-overview":i,"is-pending":!!c})}" ?inert="${!!c}" aria-busy="${c?`true`:j}" @click="${d}">${r}</div></div>`}function cJ({name:e,spec:t,tab:n}){return sJ({npm:{name:e,version:t??`latest`}},n,iJ(),k`<div class="bundles-slide-placeholder" role="status">Opening ${oj(e,t)}…</div>`,{opening:!0})}function lJ(e){let{repoId:t,commit:n,path:r,tab:i,repo:a,revision:o,error:s,code:c,historyOnly:l=!1}=e,u=a?SM({repo:a,path:r}):r||`the repository`,d=n?` at ${n.slice(0,7)}`:``,f={repoId:t,repo:a,commit:n,path:r,revision:o},p=!!(n&&(l||s));return sJ({repository:f},i,aJ(i),p&&li.has(i)?oJ(f,i):i===`treemap`&&n&&(!s||c===`directory-too-large`)?k`<repository-treemap .repository="${f}"></repository-treemap>`:s?k`<div class="bundles-slide-placeholder is-error repository-code-failed"><p role="alert">Couldn't open ${u}${d}: ${s}</p>${nN(e)}</div>`:k`<div class="bundles-slide-placeholder" role="status">Opening ${u}${d}…</div>`,{opening:!l,onTab:p?t=>XM(e,t):null})}function uJ(e){let t=!!e.npm;t&&!si.has(P.bundleDetailsTab)&&(P.bundleDetailsTab=`overview`);let n=!!e.repository;n&&!ci.has(P.bundleDetailsTab)&&(P.bundleDetailsTab=`code`);let r=!t&&!n&&tK(e,P.bundleDetails,P.bundleDetailsTab===`advisories`);P.bundleDetailsTab===`advisories`&&!r&&(P.bundleDetailsTab=`overview`);let i=t||P.bundleDetailsTab===`compare`||Ox(P.bundles??[],P.selectedBundle).length>0,a=!F();P.bundleDetailsTab===`issues`&&!a&&!n&&(P.bundleDetailsTab=`overview`);let o=P.bundleDetailsTab,s=o===`overview`,c=P.bundleDetails,l=!!(c&&c.integrity===e.integrity),u=l&&!c.error&&!!(c.json||c.bundle)&&!(c.metadataOnly&&qt(o));return o===`advisories`&&r&&u&&c.kind===`stasis`&&uK(c,Z).catch(()=>{}),sJ(e,o,t?iJ():n?aJ(P.bundleDetailsTab):[...r?[[`advisories`,`Advisories`]]:[],...a?[[`issues`,`Issues`]]:[],[`terminal`,`Terminal`],[`treemap`,`Treemap`],[`graph`,`Graph`],[`code`,`Code`],[`search`,`Search`],...i?[[`compare`,`Compare`]]:[],[`overview`,`Overview`]],s?AJ(e,c):u?OT(o,[[`terminal`,()=>k`<div id="bundle-terminal-slot" class="bundle-terminal-slot"></div>`],[`graph`,()=>k`<div id="bundle-graph-slot" class="bundle-graph-slot"></div>`],[`treemap`,()=>k`<bundle-treemap .details="${c}"></bundle-treemap>`],[`code`,()=>Rq(c,e)],[`search`,()=>nJ(c,e)],[`commits`,()=>oJ(e.repository,`commits`)],[`pulls`,()=>oJ(e.repository,`pulls`)],[`agents`,()=>oJ(e.repository,`agents`)],[`pulse`,()=>oJ(e.repository,`pulse`)],[`replay`,()=>oJ(e.repository,`replay`)],[`review`,()=>XW(()=>k`<npm-review .entry="${e}" .details="${c}" .request="${P.npmReview}" .session="${P.managedSession}" .source="${sU(e)}"></npm-review>`)],[`compare`,()=>XW(()=>k`<bundle-compare .details="${c}" .integrity="${e.integrity}" .request="${P.bundleCompare}" .source="${t?sU(e):n?pU(e):null}"></bundle-compare>`)],[`issues`,()=>n?oJ(e.repository,`issues`):mJ(c)],[`advisories`,()=>_K(c,Z,UW(e)?()=>{WW(e,{mode:`dependencies`})}:null)]]):l&&c.sourceError?k`<div class="bundles-slide-placeholder is-error">${c.sourceError} <button type="button" data-bundle-retry-sources>Retry</button></div>`:l&&!c.metadataOnly?k`<div class="${T({"bundles-slide-placeholder":!0,"is-error":!!c.error})}">${c.error?`Failed to parse: ${c.error}`:`Bundle contents not parsed.`}</div>`:k`<div class="bundles-slide-placeholder">Loading bundle…</div>`,{overview:s})}function dJ(e,t={}){if(!e)return j;let n=[];if(e.fileHash&&(n=Ef(e.fileHash,e)),n.length===0&&t.bucketKey&&(t.kind===`package`?n=Df(t.bucketKey,e):t.kind===`repository`&&(n=Of(t.bucketKey,e))),n.length===0)return j;let r=n.slice(0,2),i=n.length-r.length;return k`<div class="bundle-issue-reports">${r.map(e=>{let t=it[Ux(e)]??it.default;return k`<button type="button" class="report-chip" data-bundle-issue-report="${e}">${O(t)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${e}">${x(e)}</span></button>`})} ${i>0?k`<span class="bundle-issue-reports-more">, and ${i} more…</span>`:j}</div>`}function fJ(e){if(e==null||e===``)return``;let t=String(e),n=t.indexOf(`-`);if(n>0){let e=parseInt(t.slice(0,n),10),r=parseInt(t.slice(n+1),10);return Number.isFinite(e)&&Number.isFinite(r)&&r>e?`Lines ${e}-${r}`:Number.isFinite(e)?`Line ${e}`:``}let r=parseInt(t,10);return Number.isFinite(r)?`Line ${r}`:``}function pJ(e,t){return k`<div class="bundle-issues-empty"><p class="bundle-issues-empty-primary">${e}</p>${t?k`<p class="bundle-issues-empty-hint">${t}</p>`:j}</div>`}function mJ(e){if(e.managedId)return pJ(`Open a report to review its findings.`,`Bundle metadata includes source hashes; reports are available through your teams.`);if(!e.fileHashes)return pJ(`Computing file hashes…`,`Hashing this bundle's sources so findings from your reports can be matched against them.`);if(e.fileHashes.size===0)return pJ(`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=kK(e.fileHashes,`issues`);if(t.size===0){let t=wK();if(t===0)return pJ(`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 — hash matching needs the analyzer's native JSON reports; drop one and any matches will appear here automatically.`);let n=0;for(let t of e.fileHashes.values())n+=CK(t).length;return n>0?pJ(`All matching issues are dismissed.`,`${n} ${n===1?`finding matches`:`findings match`} this bundle's files, but every one is triaged invalid or deleted.`):pJ(`No issues match this bundle's files.`,`None of the ${t.toLocaleString()} indexed ${t===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 hJ(t,{kind:`bundle`})}function hJ(e,{kind:t,bucketKey:n}={}){let r=[...e.keys()],{prefix:i,stripped:a}=kn(r),c=new Map(r.map((e,t)=>[e,a[t]])),l=[...e.entries()].toSorted(([e,t],[n,r])=>{let i=ki[QK(t)]??0,a=ki[QK(r)]??0;return a===i?(c.get(e)??e).localeCompare(c.get(n)??n):a-i}),u=[...e.values()].reduce((e,t)=>e+t.length,0);return k`<div class="bundle-issues"><div class="bundle-issues-summary">${u} ${u===1?`issue`:`issues`} across ${e.size} ${e.size===1?`file`:`files`} ${i?k`<span class="mono">${i}</span>`:j}</div><ul class="bundle-issues-list">${D(l,([e])=>e,([e,r])=>{let i=c.get(e)??e,a=[...r].toSorted((e,t)=>{let n=ki[e.severity]??0,r=ki[t.severity]??0;return r===n?(parseInt(e.line,10)||0)-(parseInt(t.line,10)||0):r-n}),l=t===`repository`&&n?`${/^https?:/iu.test(n)?n.replace(/\/$/u,``):`https://github.com/${n}`}/blob/HEAD/${e}`:null;return k`<li class="bundle-issues-file-group"><header class="bundle-issues-file-header">${t===`bundle`?k`<button type="button" class="bundle-issues-file-name mono" data-bundle-view-source="${e}" data-tooltip-truncated data-tooltip="${e}">${i}</button>`:l?k`<a class="bundle-issues-file-name bundle-issues-file-name-link mono" href="${l}" target="_blank" rel="noopener" data-tooltip-truncated data-tooltip="${e}">${i}</a>`:k`<span class="bundle-issues-file-name bundle-issues-file-name-static mono" data-tooltip-truncated data-tooltip="${e}">${i}</span>`} <span class="bundle-issues-file-count">${r.length} ${r.length===1?`issue`:`issues`}</span></header><ul class="bundle-issues-findings">${D(a,t=>JSON.stringify([t.id??`${e}\0${t.line??``}\0${t.severity??``}\0${t.description??``}`,o(t)]),i=>{let a=r.indexOf(i),o=i.severity,c=fJ(i.line),l=s(i,P.triage.get(C(i))),u=l===`fixed`||l===`invalid`||l===`deleted`?l.toUpperCase():l===`inprogress`?`In progress`:l===`ignored`?`Ignored`:null,d=k`<div class="bundle-issues-finding-head"><span class="${`bundle-issue-sev sev-${o}`}">${o.replaceAll(`_`,` `)}</span> ${c?k`<span class="bundle-issues-finding-line">${c}</span>`:j} ${u?k`<span class="${`bundle-issues-finding-triage triage-${l}`}">${u}</span>`:j} <span class="bundle-issues-finding-spacer"></span> ${dJ(i,{kind:t,bucketKey:n})}</div><div class="bundle-issues-finding-desc">${bw(Ui(i),{paragraphs:!1})}</div>`;return k`<li class="bundle-issues-finding">${t===`bundle`?k`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${e}" data-bundle-view-finding-idx="${a}" data-bundle-view-line="${i.line??``}">${d}</button>`:k`<div class="bundle-issues-finding-link bundle-issues-finding-static">${d}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function gJ(e){let t=P.selectedBundle,n=t?e.find(e=>e.integrity===t):null;return n?uJ(n):k`<div class="bundles-view bundles-view-empty"><p class="bundles-empty-hint">Pick a bundle from the sidebar to open it.</p></div>`}var _J=k`<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>`,vJ=k`<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>`,yJ=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`}),bJ=Object.freeze([`#8b5cf6`,`#ec4899`,`#14b8a6`,`#f97316`,`#06b6d4`,`#84cc16`,`#e11d48`,`#a855f7`]);function xJ(e){if(yJ[e])return yJ[e];let t=0;for(let n of e)t=Math.imul(t,31)+n.codePointAt(0)|0;return bJ[(t>>>0)%bJ.length]}function SJ(e){let t=e.currentTarget,n=e.target.closest?.(`.bundles-languages-segment`);!n||!t.contains(n)||(t.dataset.tooltip=n.dataset.languageTooltip??``,ur(t))}function CJ(e){delete e.currentTarget.dataset.tooltip,fr()}var wJ=e=>e.codeStats??=Nt(e.npm?new Map([...Xt(e)].filter(([e])=>!LA.test(e.slice(e.lastIndexOf(`/`)+1)))):Xt(e),Ht(e));function TJ(e,{legend:t=!1}={}){if(!(e?.kind===`stasis`&&e.bundle)&&!(e?.npm&&e.json))return j;let n=wJ(e),r=n.lines,i=n.languages.filter(e=>e.lines>0);if(r<=0||i.length===0)return j;let a=e=>{let t=e/r*100;return t<.1?`<0.1`:t<1?t.toFixed(1):t.toFixed(0)},o=t?k`<ul class="bundles-languages-legend">${i.slice(0,4).map(({key:e,label:t,lines:n})=>k`<li><span class="bundles-languages-swatch" style="${E({background:xJ(e)})}"></span>${t}<span class="bundles-languages-share">${a(n)}%</span></li>`)}</ul>`:j;return k`<div class="bundles-languages-bar" data-tooltip-managed aria-label="Languages in this bundle" @pointerover="${SJ}" @pointerleave="${CJ}">${i.map(({key:e,label:t,lines:n})=>k`<span class="bundles-languages-segment" style="${E({flexGrow:n,background:xJ(e)})}" data-language-tooltip="${`${t} \xB7 ${a(n)}% \xB7 ${n.toLocaleString()} LoC`}"></span>`)}</div>${o}`}async function EJ(e){try{await(await W()).downloadManagedBundle(e.managedId,e.filename??e.name??`bundle`)}catch(e){alert(e.message)}}function DJ(e,t){let n=tG(t),r=TJ(t);return k`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${e.managedId?Qe()?k`<button type="button" class="bundles-download-btn" @click="${()=>{EJ(e)}}">${_J}<span>Download bundle</span></button>`:k`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${_J}<span>Download bundle</span></a>`:k`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${_J}<span>Download bundle</span></button>`} ${n?k`<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)">${vJ}<span>SPDX</span></button></div>`:j}</div>${r}</div>`}function OJ(e,t,{placeholder:n=j,overviewClass:r=``}={}){return k`<div class="bundles-overview ${r}"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e}${t}</div></div>${n}</div>`}function kJ(e){let t=e.filter(e=>typeof e==`number`);return t.length>0?t.reduce((e,t)=>e+t,0):null}function AJ(e,t){if(e.npm)return NJ(e,t);let n=t?.integrity===e.integrity,r=e.summary?.commit,i=n?!t.error&&t.kind===`stasis`?t.bundle:null:e.managedId&&e.repoFullName&&r?{repo:{github:e.repoFullName,directory:e.repoDirectory??``,commit:r}}:null,a=n?t.size:e.managedId?e.size:null,o=(t=``,n=!1)=>k`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd>${e.managedId?k`<dt>Repository</dt><dd>${e.repoFullName||`Unattached`}</dd>${e.repoId==null?j:k`<dt>Directory</dt><dd class="mono">/${e.repoDirectory??``}</dd>`}`:j} ${Be(i,t,e.commitInfo).map(t=>k`<dt>${t.label}</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${t.href}" target="_blank" rel="noopener noreferrer">${t.label===`GitHub`?O(aa):j}<span>${t.text}</span></a> ${t.commit?k`<a class="bundle-origin-link bundle-commit-link" href="${t.commit.href}" data-tooltip="${t.commit.hash}" data-tooltip-icon="commit" data-tooltip-commit-info="${Re(e.commitInfo,t.commit.hash)??j}" target="_blank" rel="noopener noreferrer">${O(oa)}<span>${t.commit.text}</span></a>`:j} ${t.commit?.tags?k`<span class="bundle-origin-tags">${t.commit.tags.map(e=>k`<a class="bundle-origin-link bundle-tag-link" href="${e.href}" target="_blank" rel="noopener noreferrer">${O(Ki)}<span>${e.name}</span></a>`)}</span>`:j}</dd>`)}<dt>Integrity</dt><dd class="mono bundle-integrity">${e.integrity}</dd>${t?k`<dt>Prefix</dt><dd class="mono">${t}</dd>`:j} ${i?.entries?.size>0?k`<dt>${i.entries.size===1?`Entry`:`Entries`}</dt><dd class="mono"><ul class="bundles-entry-points">${[...i.entries].map(e=>k`<li><button type="button" class="bundle-entry-point" data-bundle-view-source="${e}">${vq(e,t)}</button></li>`)}</ul></dd>`:j} ${n&&Number.isSafeInteger(a)?k`<dt>Size</dt><dd>${Wr(a)}</dd>`:j}</dl>`,s=DJ(e,t);if(!n)return OJ(o(``,!0),s);if(t.error)return OJ(o(``,!0),s,{placeholder:k`<div class="bundles-overview-placeholder is-error">Failed to parse: ${t.error}</div>`});if(t.kind===`sourcemap`&&t.json){let e=t.json,n=Ht(t),r=e.sources??[...n.keys()],i=t.sourceSizes??(n.size===r.length?r.map(e=>n.get(e)??null):r.map((t,n)=>typeof e.sourcesContent?.[n]==`string`?fa(e.sourcesContent[n]):null));return VK(o,k`<dt>Version</dt><dd>${String(e.version??`?`)}</dd>${e.file?k`<dt>Output</dt><dd class="mono">${e.file}</dd>`:j} ${e.sourceRoot?k`<dt>Source root</dt><dd class="mono">${e.sourceRoot}</dd>`:j} ${e.names||t.namesCount!=null?k`<dt>Names</dt><dd>${e.names?.length??t.namesCount}</dd>`:j}`,r,i,null,s,{bundleSize:t.size,unpackedSize:kJ(i)})}if(t.kind===`stasis`&&t.bundle){let e=t.bundle,n=Ht(t),{sourceNames:r,resources:i}=MJ(Ut(t)),a=new Set;for(let t of e.imports.keys()){let e=t.replace(/\s*\(with: .*\)\s*$/u,``);for(let t of e.split(`, `))a.add(t)}let c=[...a].toSorted(),l=r.map(e=>n.get(e));return VK(o,k`<dt>Version</dt><dd>${String(e.version)}</dd>${c.length>0?k`<dt>Resolution kinds</dt><dd>${c.join(`, `)}</dd>`:j}`,r,l,Gt(t),s,{bundleSize:t.size,unpackedSize:kJ(l),resources:i,details:t})}return OJ(o(``,!0),s,{placeholder:k`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`})}var jJ=new WeakMap;function MJ(e){if(!jJ.has(e)){let t=[...e.keys()];jJ.set(e,{sourceNames:t,resources:new Set(t.filter(t=>e.get(t)===`resource`))})}return jJ.get(e)}function NJ(e,t){let n=`/api/npm/download?${new URLSearchParams({name:e.npm.name,version:e.npm.version})}`,r=k`<a class="bundles-download-btn" href="${n}">${_J}<span>Tarball</span></a>`,i=k`<div class="bundles-overview-exports"><div class="bundles-overview-exports-row">${rV(e)}${r}</div></div>`;if(t?.integrity!==e.integrity||!t.json)return OJ(uM(e,{githubFigures:TV(e),provenance:AV(e),provenanceNamesBuilder:DV(e.npm)}),i,{overviewClass:`npm-overview`});let{sources:a}=t.json,o=Ht(t),s=a.map(e=>o.get(e)??null),{paths:c,binaries:l,content:u}=BV(t),d=hV(e.npm);return VK(t=>uM(e,{prefix:t,githubFigures:TV(e),provenance:AV(e),provenanceNamesBuilder:DV(e.npm),files:c}),fM(e,c,t),a,s,null,j,{bundleSize:t.size,unpackedSize:kJ(s),resources:l,leadColumn:k`${nM(e)}${PV(e)}`,trailColumns:rU(l,o),summaryExtra:k`${vV(e,c)}${JV(e,t)}${nU(e,TJ(t,{legend:!0}),t)}${bV(e,r,lH(e))}`,overviewClass:`npm-overview`,lines:wJ(t).lines,sized:(e,t,n)=>lA(e,u[e],n),fileTag:e=>k`${gV(d.get(e))}${YV(t,e,!0)}`,fileFlags:e=>ZV(t,e,d.get(e)),fileIcon:e=>yt(e,l.has(e)?`binary`:void 0),fileFilter:WV(e)})}function PJ(){If().catch(()=>{});let e=wf(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[r,i]of e){let e=[],a=[],o=new Map,c=new Set;for(let[n,r]of i.byVersion){let i=[],l=new Map;for(let e of r.findings){let n=s(e,P.triage.get(C(e)))??null;n===`inprogress`?t.inprogress++:n===`fixed`?t.fixed++:n===`invalid`?t.invalid++:n===`deleted`?t.deleted++:n===`ignored`&&t.ignored++,n===P.shownTriage&&(i.push(e),l.has(e.file)||l.set(e.file,[]),l.get(e.file).push(e))}if(i.length!==0){e.push([n,{findings:i,files:l,reports:r.reports}]);for(let e of i)a.push(e),o.has(e.file)||o.set(e.file,[]),o.get(e.file).push(e);for(let e of r.reports)c.add(e)}}e.length!==0&&(e.sort(([e],[t])=>sf(e,t)),n.push([r,{findings:a,files:o,reports:c,versions:e}]))}let r=P.selectedPackage,i=r?n.find(([e])=>e===r)??null:null,a=null;if(i){let e=i[1].versions,t=P.selectedPackageVersion;a=e.find(([e])=>e===t)??null,!a&&e.length===1&&(a=e[0])}let o=a?a[1]:i?i[1]:null;if(i&&P.packageDetailsTab===`issues`)return VJ(i[0],o,a?a[0]:void 0);let c=P.packagesSearchQuery.trim().toLowerCase(),l=c?n.filter(([e])=>e.toLowerCase().includes(c)):n.slice();zJ(l,P.packagesSortBy);let u=n.reduce((e,[,t])=>e+t.findings.length,0),d=new Set;for(let[,e]of n)for(let t of e.reports)d.add(t);let f=i?`packages-layout open`:`packages-layout`;return k`<div class="${T({"packages-view":!0,"with-details":!!i})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${l.length===n.length?k`${n.length} ${n.length===1?`package`:`packages`}`:k`${l.length} of ${n.length} ${n.length===1?`package`:`packages`}`}</span> ${u>0?k`<span>${u} ${u===1?`finding`:`findings`} across ${d.size} ${d.size===1?`report`:`reports`}</span>`:j}</div></div>${LJ(t)}</header>${n.length===0?k`<p style="${E({color:`var(--muted)`})}">${e.size===0?`Indexing reports… this view populates as the OPFS scan finishes.`:P.shownTriage?`No ${P.shownTriage} findings in any package.`:`No untriaged findings in any package.`}</p>`:l.length===0?k`<p style="${E({color:`var(--muted)`})}">No packages match "${P.packagesSearchQuery}".</p>`:k`<div class="${f}"><ul class="packages-list">${D(FJ(l),IJ,e=>HJ(e,r,P.selectedPackageVersion))}</ul>${i?k`<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">${GJ(i[0],o,a?a[0]:void 0)}</div></aside>`:j}</div>`}</div>`}function FJ(e){let t=[];for(let[n,r]of e){let e=r.versions;if(e.length<=1){let[r,i]=e[0];t.push({kind:`single`,pkg:n,version:r,bucket:i,totalVersions:1});continue}let[i,a]=e[0],o=P.expandedPackages.has(n);if(t.push({kind:`latest`,pkg:n,version:i,bucket:a,totalVersions:e.length,expanded:o}),o)for(let r=1;r<e.length;r++){let[i,a]=e[r];t.push({kind:`other`,pkg:n,version:i,bucket:a,totalVersions:e.length})}}return t}function IJ(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function LJ(e){return k`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${RJ}"></triage-selector></div>`}var RJ=[`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`];function zJ(e,t){let n=t===`name-asc`?(e,t)=>e[0].localeCompare(t[0]):t===`files-desc`?(e,t)=>t[1].files.size-e[1].files.size||e[0].localeCompare(t[0]):t===`reports-desc`?(e,t)=>t[1].reports.size-e[1].reports.size||e[0].localeCompare(t[0]):(e,t)=>t[1].findings.length-e[1].findings.length||e[0].localeCompare(t[0]);e.sort(n)}function BJ(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 e of r)for(let t of e){let e=s(t,P.triage.get(C(t)))??null;e===`invalid`?n.invalid++:e===`deleted`?n.deleted++:n.live++}return n}function VJ(e,t,n){let r=wf().get(e),i=BJ(r,n),a=P.packageSlideTriage??`live`,o=r?KJ(r,e,a,n):new Map,s=[...o.values()].reduce((e,t)=>e+t.length,0),c=a===`live`?s===1?`issue`:`issues`:s===1?`${a} issue`:`${a} issues`,l=a===`live`?`No live issues for this package.`:`No ${a} issues for this package.`,u=typeof n==`string`?` @ ${n}`:``;return k`<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}${u}`}">${e}${u}</div><div class="bundles-slide-integrity">${s} ${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="${i}"></slide-triage-tabs></header><div class="bundles-slide-body">${o.size===0?k`<div class="bundle-issues-empty">${l}</div>`:hJ(o,{kind:`package`,bucketKey:e})}</div></div>`}function HJ(e,t,n){let{kind:r,pkg:i,version:a,bucket:o}=e,s={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let e of o.findings){let t=Ni(e,P.severityMode);s[t]!==void 0&&s[t]++}let c=Ai.filter(e=>s[e]>0),l=nr(i),u={selected:i===t&&UJ(e,n),"packages-row-latest":r===`latest`,"packages-row-other":r===`other`},d=a===null?``:a,f=a===null?`Open issues for ${i}`:`Open issues for ${i}@${a}`;return k`<li class="${T(u)}" data-select-package="${i}" data-select-package-version="${d}"><span class="packages-dot" style="${E({background:l})}"></span><div class="packages-row-text"><div class="packages-name-line"><span class="packages-name" data-tooltip-truncated data-tooltip="${a===null?i:`${i}@${a}`}">${i}${a===null?j:k`<span class="packages-version">@${a}</span>`} </span>${r===`latest`?WJ(i,e.expanded,e.totalVersions-1):j}</div><span class="packages-row-meta">${o.findings.length} ${o.findings.length===1?`finding`:`findings`} · ${o.files.size} ${o.files.size===1?`file`:`files`} · ${o.reports.size} ${o.reports.size===1?`report`:`reports`}</span></div>${c.length>0?k`<div class="packages-row-chips">${c.map(e=>k`<span class="${`tree-count-chip ${e}`}" data-tooltip="${e.replaceAll(`_`,` `)}">${s[e]}</span>`)}</div>`:j} <button type="button" class="packages-row-issues" data-package-row-issues="${i}" data-package-row-issues-version="${d}" aria-label="${f}">Issues →</button></li>`}function UJ(e,t){return e.kind===`single`||e.version===t}function WJ(e,t,n){let r=t?`Hide`:`+${n} ${n===1?`version`:`versions`}`;return k`<button type="button" class="${T({"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 GJ(e,t,n){let r=wf().get(e),i=[...(r?KJ(r,e,`live`,n):new Map).values()].reduce((e,t)=>e+t.length,0);return k`<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> ${i>0?k`<button type="button" class="bundles-tab bundles-tab-action" data-package-tab="issues">Issues (${i}) →</button>`:j}</div>${qJ(e,t,n)}`}function KJ(e,t,n=`live`,r){let i=new Map,a=r===void 0?e.files:e.byVersion.get(r)?.files??new Map;for(let[e,r]of a){let a=r.filter(e=>{let t=s(e,P.triage.get(C(e)))??null;return n===`invalid`?t===`invalid`:n===`deleted`?t===`deleted`:t!==`invalid`&&t!==`deleted`});if(a.length===0)continue;let o=JJ(t,e);i.has(o)||i.set(o,[]);let c=i.get(o);for(let e of a)c.push(e)}return i}function qJ(e,t,n){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let e of t.findings){let t=Ni(e,P.severityMode);r[t]!==void 0&&r[t]++}let i=Ai.filter(e=>r[e]>0),a=[...t.files.entries()].toSorted(([e,t],[n,r])=>r.length===t.length?e.localeCompare(n):r.length-t.length),o=[...t.reports].toSorted((e,t)=>e.localeCompare(t)),s=wf().get(e)?.repos,c=s&&s.size===1?[...s][0]:null,l=c?/^https?:/iu.test(c)?c:`https://github.com/${c}`:null;return k`<dl class="packages-detail-meta"><dt>Package</dt><dd class="mono">${e}</dd>${n?k`<dt>Version</dt><dd class="mono">${n}</dd>`:j} ${l?k`<dt>Repository</dt><dd class="mono"><a href="${l}" target="_blank" rel="noopener">${c}</a></dd>`:j}<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>${i.length>0?k`<div class="packages-detail-chips">${i.map(e=>k`<span class="${`tree-count-chip ${e}`}">${r[e]} ${e.replaceAll(`_`,` `)}</span>`)}</div>`:j}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${o.map(e=>{let t=zx[Ux(e)]??zx.default;return k`<li><button type="button" class="packages-detail-report" data-package-report="${e}">${O(t)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${e}">${x(e)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${a.map(([t,n])=>{let r=JJ(e,t);return k`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${t}">${r}</span> <span class="packages-detail-file-count">${n.length}</span></li>`})}</ul>`}function JJ(e,t){for(let n of[`node_modules`,`dependencies`]){let r=`${n}/${e}/`,i=t.indexOf(r);if(i>=0)return t.slice(i+r.length)}return t.startsWith(`${e}/`)?t.slice(e.length+1):t}function YJ(){If().catch(()=>{});let e=Tf(),t={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},n=[];for(let[r,i]of e){let e=[],a=new Map;for(let n of i.findings){let r=s(n,P.triage.get(C(n)))??null;r===`inprogress`?t.inprogress++:r===`fixed`?t.fixed++:r===`invalid`?t.invalid++:r===`deleted`?t.deleted++:r===`ignored`&&t.ignored++,r===P.shownTriage&&(e.push(n),a.has(n.file)||a.set(n.file,[]),a.get(n.file).push(n))}e.length>0&&n.push([r,{findings:e,files:a,reports:i.reports}])}let r=P.selectedRepository,i=r?n.find(([e])=>e===r)??null:null;if(i&&P.repositoryDetailsTab===`issues`)return eY(i[0],i[1]);let a=P.repositoriesSearchQuery.trim().toLowerCase(),o=a?n.filter(([e])=>e.toLowerCase().includes(a)||Mn(e).toLowerCase().includes(a)):n.slice();QJ(o,P.repositoriesSortBy);let c=n.reduce((e,[,t])=>e+t.findings.length,0),l=new Set;for(let[,e]of n)for(let t of e.reports)l.add(t);let u=i?`packages-layout open`:`packages-layout`;return k`<div class="${T({"packages-view":!0,"with-details":!!i})}"><header class="page-head"><div class="page-title"><h1>Repositories</h1><div class="meta-row"><span>${o.length===n.length?k`${n.length} ${n.length===1?`repository`:`repositories`}`:k`${o.length} of ${n.length} ${n.length===1?`repository`:`repositories`}`}</span> ${c>0?k`<span>${c} ${c===1?`finding`:`findings`} across ${l.size} ${l.size===1?`report`:`reports`}</span>`:j}</div></div>${XJ(t)}</header>${n.length===0?k`<p style="${E({color:`var(--muted)`})}">${e.size===0?`Indexing reports… this view populates as the OPFS scan finishes.`:P.shownTriage?`No ${P.shownTriage} findings in any repository.`:`No untriaged findings in any repository.`}</p>`:o.length===0?k`<p style="${E({color:`var(--muted)`})}">No repositories match "${P.repositoriesSearchQuery}".</p>`:k`<div class="${u}"><ul class="packages-list">${D(o,([e])=>e,([e,t])=>tY(e,t,e===r))}</ul>${i?k`<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">${nY(i[0],i[1])}</div></aside>`:j}</div>`}</div>`}function XJ(e){return k`<div class="packages-toolbar"><entity-search kind="repositories"></entity-search><entity-sort kind="repositories"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${ZJ}"></triage-selector></div>`}var ZJ=[`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`];function QJ(e,t){let n=t===`name-asc`?(e,t)=>Mn(e[0]).localeCompare(Mn(t[0])):t===`files-desc`?(e,t)=>t[1].files.size-e[1].files.size||Mn(e[0]).localeCompare(Mn(t[0])):t===`reports-desc`?(e,t)=>t[1].reports.size-e[1].reports.size||Mn(e[0]).localeCompare(Mn(t[0])):(e,t)=>t[1].findings.length-e[1].findings.length||Mn(e[0]).localeCompare(Mn(t[0]));e.sort(n)}function $J(e){let t={live:0,invalid:0,deleted:0};if(!e)return t;for(let n of e.files.values())for(let e of n){let n=s(e,P.triage.get(C(e)))??null;n===`invalid`?t.invalid++:n===`deleted`?t.deleted++:t.live++}return t}function eY(e,t){let n=Tf().get(e),r=$J(n),i=P.repositorySlideTriage??`live`,a=n?rY(n,i):new Map,o=[...a.values()].reduce((e,t)=>e+t.length,0),s=i===`live`?o===1?`issue`:`issues`:o===1?`${i} issue`:`${i} issues`,c=i===`live`?`No live issues for this repository.`:`No ${i} issues for this repository.`;return k`<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="${Mn(e)}">${Mn(e)}</div><div class="bundles-slide-integrity">${o} ${s} · ${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">${a.size===0?k`<div class="bundle-issues-empty">${c}</div>`:hJ(a,{kind:`repository`,bucketKey:e})}</div></div>`}function tY(e,t,n){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let e of t.findings){let t=Ni(e,P.severityMode);r[t]!==void 0&&r[t]++}let i=Ai.filter(e=>r[e]>0),a=nr(e),o=Mn(e);return k`<li class="${n?`selected`:``}" data-select-repository="${e}"><span class="packages-dot" style="${E({background:a})}"></span><div class="packages-row-text"><span class="packages-name" data-tooltip-truncated data-tooltip="${o}">${o}</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>${i.length>0?k`<div class="packages-row-chips">${i.map(e=>k`<span class="${`tree-count-chip ${e}`}" data-tooltip="${e.replaceAll(`_`,` `)}">${r[e]}</span>`)}</div>`:j} <button type="button" class="packages-row-issues" data-repository-row-issues="${e}" aria-label="${`Open issues for ${o}`}">Issues →</button></li>`}function nY(e,t){let n=Tf().get(e),r=[...(n?rY(n):new Map).values()].reduce((e,t)=>e+t.length,0);return k`<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> ${r>0?k`<button type="button" class="bundles-tab bundles-tab-action" data-repository-tab="issues">Issues (${r}) →</button>`:j}</div>${iY(e,t)}`}function rY(e,t=`live`){let n=new Map;for(let[r,i]of e.files){let e=i.filter(e=>{let n=s(e,P.triage.get(C(e)))??null;return t===`invalid`?n===`invalid`:t===`deleted`?n===`deleted`:n!==`invalid`&&n!==`deleted`});e.length>0&&n.set(r,e)}return n}function iY(e,t){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let e of t.findings){let t=Ni(e,P.severityMode);n[t]!==void 0&&n[t]++}let r=Ai.filter(e=>n[e]>0),i=[...t.files.entries()].toSorted(([e,t],[n,r])=>r.length===t.length?e.localeCompare(n):r.length-t.length),a=[...t.reports].toSorted((e,t)=>e.localeCompare(t)),o=/^https?:/iu.test(e)?e:`https://github.com/${e}`;return k`<dl class="packages-detail-meta"><dt>Repository</dt><dd class="mono"><a href="${o}" target="_blank" rel="noopener">${Mn(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?k`<div class="packages-detail-chips">${r.map(e=>k`<span class="${`tree-count-chip ${e}`}">${n[e]} ${e.replaceAll(`_`,` `)}</span>`)}</div>`:j}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${a.map(e=>{let t=zx[Ux(e)]??zx.default;return k`<li><button type="button" class="packages-detail-report" data-package-report="${e}">${O(t)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${e}">${x(e)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${i.map(([e,t])=>k`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${e}">${e}</span> <span class="packages-detail-file-count">${t.length}</span></li>`)}</ul>`}function aY(e,t){let n=new Set(e),r=new Set,i=new Map,a=new Map(e.map((e,t)=>[e,t]));for(let e of t){let t=[...new Map(e.members.map(e=>[JSON.stringify([e.id,o(e)]),e])).values()],s=t.filter(e=>n.has(e.id));if(s.length===0)continue;for(let e of s)r.add(e.id);let c=t.filter(e=>n.has(e.id)||e.isApp),l=JSON.stringify([t.map(e=>e.id).toSorted(),c.map(e=>[e.id,o(e),e.title??``,e.source??null,e.revalidate??``]).toSorted(([e,t],[n,r])=>e.localeCompare(n)||Number(t)-Number(r))]),u=i.get(l);u||(u={key:l,members:c,reports:[],first:Math.min(...s.map(e=>a.get(e.id)))},i.set(l,u)),u.reports.some(t=>t.name===e.report&&t.managedReportId===e.managedReportId)||u.reports.push({name:e.report,...e.managedReportId?{managedReportId:e.managedReportId}:{},findingId:s[0].id,rowIndex:e.index})}return{rows:[...i.values()].toSorted((e,t)=>e.first-t.first),missing:e.filter(e=>!r.has(e))}}function oY(e,t,n){return`${e} ${e===1?t:n}`}function sY(e,t){let n=s(e,P.triage.get(e.id)),r=o(e)?t.filter(({name:t})=>_n(P.triage,e.id,t)):[],i=n??(r.length>0?`ignored`:null);if(!i)return j;let a=n!==`ignored`&&i===`ignored`&&r.length<t.length,c=a?`Ignored in ${r.length}/${t.length} reports`:Di[i];return k`<span class="${`links-finding-status triage-${i}`}" data-tooltip="${a?r.map(({name:e})=>x(e)).join(`, `):j}">${c}</span>`}function cY(e,t=[],n=!0,r=j){let{id:i,title:a}=e,o=t[0]?.name,s=Xn(i),c=Yn(i)??s;return k`<li class="${n?`links-finding`:`links-finding links-finding-context`}">${o?k`<button type="button" class="links-finding-id mono" data-links-preview="${i}" data-preview-report="${o}" data-preview-row="${t[0].rowIndex??j}" data-preview-managed-report="${t[0].managedReportId??j}" data-tooltip="${s}" aria-haspopup="dialog">${c}</button>`:$r(i)?k`<a class="links-finding-id mono" href="${`#${Vr({id:i})}`}" data-tooltip="${s}">${c}</a>`:k`<span class="links-finding-id mono">${c}</span>`} ${a?k`<span class="links-finding-title">${a}</span>`:j} ${sY(e,t)} ${n?j:k`<span class="links-member-context">not in this link</span>`} ${r}</li>`}function lY(e){let t=!!P.currentLinks?.managedId;return k`<div class="links-finding-reports">${e.map(({name:e,findingId:n,managedReportId:r,rowIndex:i})=>k`<button type="button" class="links-finding-report report-button" data-links-report="${t?j:e}" data-links-finding="${n}" data-managed-report="${r??j}" data-links-preview="${t?n:j}" data-preview-report="${t?e:j}" data-preview-row="${t?i:j}" data-preview-managed-report="${t?r:j}">${O(it[Ux(e)]??it.default)}<span class="links-finding-report-label report-button-label" data-tooltip-truncated data-tooltip="${x(e)}">${x(e)}</span></button>`)}</div>`}function uY(e,t){let n=e.reports.toSorted((e,t)=>x(e.name).localeCompare(x(t.name)));if(e.members.length===1){let r=e.members[0];return k`<li class="links-report-row links-report-row-single"><ul class="links-row-members">${cY(r,n,t.has(r.id),lY(n))}</ul></li>`}return k`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${oY(e.members.length,`finding`,`findings`)} in row</span> ${lY(n)}</div><ul class="links-row-members">${e.members.map(e=>cY(e,n,t.has(e.id)))}</ul></li>`}function dY(e,t){let{rows:n,missing:r}=aY(e,Gd(e)),i=new Set(e);return k`<li class="links-group"><div class="links-group-head"><span class="links-group-index">Link ${t+1}</span> <span class="links-group-count">${oY(e.length,`finding`,`findings`)}</span></div><ul class="links-group-rows">${D(n,e=>e.key,e=>uY(e,i))}</ul>${r.length>0?k`<div class="links-unlocated"><div class="links-finding-missing">Not in your reports</div><ul class="links-row-members">${r.map(e=>cY({id:e,title:Wd(e)}))}</ul></div>`:j}</li>`}function fY(e=j){let t=P.currentLinks;if(!t)return j;If().catch(()=>{});let{name:n,groups:r,skipped:i}=t,a=new Set,o=new Set,s=0;for(let e of r)for(let t of e){if(a.has(t))continue;a.add(t);let e=Ud(t);if(e.length!==0){s++;for(let t of e)o.add(t)}}return k`<div class="links-view">${t.managedId?k`<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>`:j}<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}">${O(zx[Ux(n)]??zx.default)}${x(n)}</span> <span>${oY(r.length,`link`,`links`)}</span> <span>${oY(a.size,`finding`,`findings`)}</span> ${o.size>0?k`<span>found in ${oY(o.size,`report`,`reports`)}</span>`:j}</div></div></header>${s<a.size?k`<p class="links-note">${oY(a.size-s,`linked finding is`,`linked findings are`)} not in any report you hold. Import the reports they came from and this page fills in.</p>`:j} ${i>0?k`<p class="links-note">${oY(i,`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>`:j} ${r.length===0?k`<p class="links-empty">This file declares no links: every entry in it named fewer than two findings this app can reach.</p>`:k`<ol class="links-list">${D(r,(e,t)=>`${t}:${e.join(` `)}`,(e,t)=>dY(e,t))}</ol>`}</div>`}function pY(e,t,n){let r=new Set(t);for(let e of n)r.add(e);return e.filter(e=>r.has(e))}function mY(){if(P.currentWorkspace){let e=L().find(e=>e.id===P.currentWorkspace),t=P.reports.map(e=>e.fileName).filter(e=>typeof e==`string`);return{mode:`workspace`,workspaceId:P.currentWorkspace,fileNames:e?pY(e.reports??[],P.storedFiles??[],t):t}}if(P.currentFile){let e=L().find(e=>Array.isArray(e.reports)&&e.reports.includes(P.currentFile));return e?{mode:`single`,workspaceId:e.id,fileNames:[P.currentFile]}:null}return null}var hY=1500;function gY({open:e,later:t=(e,t)=>setTimeout(e,t),modalOpen:n=()=>Cv()}){let r=new Set,i=!1;function a(a,o,{onSync:s,retry:c}={}){!a||!Array.isArray(o)||o.length===0||i||r.has(a)||(i=!0,t(async()=>{let l;if(n())l={shown:!1,sync:!1};else try{l=await e([...o])}catch{l={shown:!1,sync:!1}}if(i=!1,!l.shown){typeof c==`function`&&t(c,hY);return}r.add(a),l.sync&&typeof s==`function`&&s()},0))}return{suggestSync:a,isClosedFor:e=>r.has(e)}}function _Y(e,t,n=0){let{viewMode:r,focusGid:i,tableSelectedGid:a,kanbanPopoverGid:o}=t,s=r===`focus`?i:r===`table`?a:r===`kanban`?o:null;return(s?e.find(e=>V(e)===s):null)||(r===`focus`?e[Math.min(n,e.length-1)]??null:null)}function vY(e,t){if(t.currentView!==`findings`)return null;let n=fi({view:`findings`,teamId:t.currentManagedTeam,reportId:t.currentManagedReport},t.managedTeams);if(!n||!e)return n;let r={...n,finding:{id:C(Mg(e))}};return oi(r)?r:n}function yY(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:``}`:``}function bY(e){let t=e.summary,n=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&n.push(Wr(e.byteSize)),t&&[t.files,t.lines].every(e=>Number.isSafeInteger(e)&&e>=0)&&n.push(`${t.files.toLocaleString()} files`,`${t.lines.toLocaleString()} LoC`),n.join(` · `)}function xY(e,t=``){let n=t.trim().toLowerCase(),r=e=>String(e??``).toLowerCase().includes(n);return(Array.isArray(e)?e:[]).flatMap(e=>{let t=(e.reports??[]).filter(e=>r(e.filename)||r(x(e.filename??``))),n=(e.bundles??[]).filter(e=>r(e.filename));return r(e.name)||t.length>0||n.length>0?[{team:e,reports:t,bundles:n}]:[]})}function SY(e,t){return e?.appMode===!0||e?.appReports===0&&t>0}function CY(e){return(e?.appMode?e.appFindings:e?.findings)??null}var wY=class{constructor(){this.expanded=new Map}sync(e,t=!1){let n=JSON.stringify([e.managedSession?.id,e.managedSession?.role,e.managedSession?.csrfToken]);n!==this.owner&&(this.expanded.clear(),this.focus=``,this.owner=n);let r=e.managedTeams??[];for(let e of this.expanded.keys())r.some(t=>t.id===e)||this.expanded.delete(e);let i=Ax(e),a=[`findings`,`files`,`links`].includes(e.currentView)?e.currentManagedReport:null,o=i?`bundles`:`reports`,s=r.find(t=>t.id===e.currentManagedTeam&&(i?t.bundles?.some(e=>e.id===i):t.reports?.some(e=>e.id===a))),c=JSON.stringify([o,i||a,s?.id]);if((t||c!==this.focus)&&(this.focus=c,s)){let e=this.expanded.get(s.id)??new Set;e.add(o),this.expanded.set(s.id,e)}}toggle(e,t){let n=this.expanded.get(e)??new Set;n.has(t)?n.delete(t):n.add(t),this.expanded.set(e,n)}shown(e,t,n,r){return!n||r||this.expanded.get(e)?.has(t)===!0}};function TY(e,t,n=()=>null){if(!e.currentWorkspace)return null;if(e.currentManagedTeam){let t=e.managedTeams.find(t=>t.id===e.currentManagedTeam);if(!t)return null;let n=(t.reports??[]).filter(e=>e.analyzer!==`links`).map(e=>({...e,managedId:e.id,name:e.filename,hidden:e.visible===!1,available:!0})),r=(t.bundles??[]).map(e=>({...kx(e),hidden:e.visible===!1,available:!0})),i=e.managedSession;return{id:t.id,scope:`team`,title:`Team: ${t.name}`,findings:CY(t.app),reports:n,bundles:r,repositories:EY(t.repos??[],n,r,Ye(i)),dependencyReview:t.dependencyReview===!0}}let r=t.find(t=>t.id===e.currentWorkspace);if(!r)return null;let i=new Map(e.bundles.map(e=>[e.integrity,e])),a=new Set(e.storedFiles??[]);return{id:r.id,scope:`workspace`,title:`Workspace: ${r.name}`,reports:[...new Set(r.reports??[])].filter(e=>n(e)!==`links`).map(e=>({name:e,available:a.has(e)})),bundles:[...new Set(r.bundles??[])].map(e=>{let t=i.get(e);return t?{...t,available:!0}:{integrity:e,name:`${e.slice(0,24)}\u2026`,available:!1}})}}function EY(e,t,n,r){let i=new Map;for(let{repoId:t,fullName:n,path:a}of e){let e=i.get(t)??{repoId:t,name:n,paths:[],reports:0,bundles:0,available:r};a&&e.paths.push(a),i.set(t,e)}let a=new Map([...i.values()].map(e=>[e.name,e]));for(let e of t)a.has(e.repoFullName)&&a.get(e.repoFullName).reports++;for(let e of n)i.has(e.repoId)&&i.get(e.repoId).bundles++;return[...i.values()]}var DY=[[`findings`,`Findings`],[`reports`,`Reports`],[`bundles`,`Bundles`],[`repositories`,`Repositories`],[`dependencies`,`Dependencies`]],OY=e=>e===`findings`||e===`files`?`findings`:e.slice(10);function kY(e,t,{findings:n=e.findings,statusBar:r=j}={}){let i=OY(t),a={findings:n,reports:e.reports.length,bundles:e.bundles.length,repositories:e.repositories.length};return k`<bundle-slide-header class="bundles-slide-header team-slide-header"><header class="bundles-slide-bar team-slide-bar"><h1 class="team-slide-name" data-tooltip-truncated data-tooltip="${e.title}">${e.title}</h1>${r}<div class="bundles-slide-tabs" role="tablist" aria-label="Team">${DY.filter(([t])=>t!==`dependencies`||e.dependencyReview).map(([e,t])=>k`<button type="button" class="${T({"bundles-tab":!0,"team-slide-tab":!0,active:i===e})}" role="tab" aria-selected="${String(i===e)}" data-action="${`workspace-${e}`}">${t}${a[e]==null?j:k`<span class="n">${a[e].toLocaleString()}</span>`}</button>`)}</div></header></bundle-slide-header>`}function AY(e){return k`${e?.scope===`team`?kY(e,`findings`):j}<p class="triage-loading" role="status">Loading report triage…</p>`}function jY(e,t){return t===`findings`?e.title:k`<button type="button" class="workspace-title-link" data-action="workspace-findings">${e.title}</button>`}function MY(e,t,n){if(!e)return j;let r=e[t].length;if(t===`bundles`&&r===0)return j;let i=n===`workspace-${t}`;return k`<button type="button" class="${`files-toggle-btn${i?` active`:``}`}" data-action="${`workspace-${t}`}" aria-pressed="${String(i)}">${`${r} ${r===1?t.slice(0,-1):t}`}</button>`}function NY(e,t){if(!(e>1))return j;let n=t===`files`;return k`<button type="button" class="${`files-toggle-btn${n?` active`:``}`}" data-action="toggle-files" aria-pressed="${String(n)}">${`${e} files`}</button>`}function PY(e){let t=[e.reports?`${e.reports.toLocaleString()} report${e.reports===1?``:`s`}`:null,e.bundles?`${e.bundles.toLocaleString()} bundle${e.bundles===1?``:`s`}`:null].filter(Boolean).join(` · `),n=k`<span class="workspace-content-icon">${O(ia)}</span> <span class="workspace-content-label"><span class="workspace-content-name">${e.name}</span> ${e.paths.length>0?k`<span class="workspace-content-repo">${e.paths.join(`, `)}</span>`:j} </span><span class="workspace-content-stats">${t}</span> ${e.available?k`<span class="workspace-content-arrow" aria-hidden="true">→</span>`:j}`;return k`<li>${e.available?k`<button type="button" class="workspace-content-row" data-workspace-repository="${e.repoId}" data-repository-name="${e.name}" data-repository-path="${e.paths.length===1?e.paths[0]:``}">${n}</button>`:k`<div class="workspace-content-row">${n}</div>`}</li>`}function FY(e,t){if(!e)return k`<p class="workspace-content-empty">This workspace is no longer available.</p>`;let n=`workspace-${t}`;if(t===`dependencies`&&e.scope===`team`)return k`<section class="workspace-content-view">${kY(e,n)} ${e.dependencyReview?k`<team-dependencies .repositories="${e.repositories}" .team="${e.id}"></team-dependencies>`:k`<p class="workspace-content-empty">You review no dependencies in this team.</p>`}</section>`;let r=e[t]??[];return k`<section class="workspace-content-view">${e.scope===`team`?kY(e,n):k`<header class="page-head"><div class="page-title"><h1>${jY(e,n)}${MY(e,`reports`,n)}${MY(e,`bundles`,n)}</h1></div></header>`} ${r.length>0?k`<ul class="workspace-content-list">${t===`repositories`?r.map(PY):r.map(e=>{let n=[e.kind===`stasis`?`Stasis`:e.kind===`sourcemap`?`Sourcemap`:null,Number.isFinite(e.size)?Wr(e.size):null,Number.isFinite(e.summary?.files)?`${e.summary.files.toLocaleString()} files`:null,Number.isFinite(e.summary?.lines)?`${e.summary.lines.toLocaleString()} LoC`:null].filter(Boolean).join(` · `),r=e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:``}`:null;return k`<li class="${e.hidden?`workspace-content-hidden`:``}"><button type="button" class="workspace-content-row" data-workspace-report="${t===`reports`?e.managedId??e.name:j}" data-workspace-bundle="${t===`bundles`?e.managedId??e.integrity:j}" ?disabled="${!e.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">${e.name}${e.hidden?k`<span class="workspace-content-visibility">Hidden</span>`:j}</span> ${r?k`<span class="workspace-content-repo">${r}</span>`:j} </span><span class="workspace-content-stats">${e.available?n:`Not available locally`}</span> ${e.available?k`<span class="workspace-content-arrow" aria-hidden="true">→</span>`:j}</button></li>`})}</ul>`:k`<p class="workspace-content-empty">No ${t} in this ${e.scope}.</p>`}</section>`}var IY=2,LY=6e4,RY=new Map,zY=[],BY=new Set,VY=null,HY=0,UY=e=>{for(let t of BY)t(e)};function WY(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==VY&&(RY.clear(),zY.length=0,VY=e),RY}function GY(){for(;HY<IY&&zY.length>0;){let{key:e,read:t}=zY.shift();HY++,t().finally(()=>KY(e))}}function KY(e){HY--,UY(e),GY()}var qY=e=>Number.isSafeInteger(e)&&e>=0?e:null,JY=e=>qY(e?.additions)===null||qY(e?.deletions)===null?null:{additions:e.additions,deletions:e.deletions};function YY(e,t,n){let r=WY(),i=`${e}\0${t}\0${n}`,a=r.get(i);if(a&&Date.now()<a.until)return a;let o={status:`loading`,until:1/0};return r.set(i,o),zY.push({key:i,read:()=>Db(e,t,n).then(e=>{let t=JY(e);return r.get(i)!==o||r.set(i,t?{status:`ready`,until:1/0,...t,typeless:JY(e.typeless),binary:e.binary===!0}:{status:`error`,until:Date.now()+LY,error:`The server answered with no lines.`}),null},e=>(r.get(i)!==o||(e?.name===`AbortError`?r.delete(i):r.set(i,{status:`error`,until:Date.now()+LY,error:e?.message||`Its lines couldn’t be counted.`})),null))}),GY(),o}var XY=e=>e.was?.find(t=>t!==e.version)??`(empty)`,ZY=(e,t)=>k`<span class="is-added">+${e.toLocaleString(`en-US`)}</span> <span class="is-deleted">−${t.toLocaleString(`en-US`)}</span>`,QY=class extends _a{static properties={name:{attribute:!1},version:{attribute:!1},base:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this._near=!1,this._notify=e=>{this._near&&(!e||e===`${this.name}\0${this.version}\0${this.base??`(empty)`}`)&&this.requestUpdate()}}connectedCallback(){super.connectedCallback(),this._watch()}disconnectedCallback(){super.disconnectedCallback(),this._unwatch()}_watch(){BY.add(this._notify),!this._near&&_N(this,e=>{!e||this._near||(this._near=!0,yN(this),this.requestUpdate())})}_unwatch(){BY.delete(this._notify),yN(this)}render(){if(!this._near||!this.name||!this.version)return j;let e=YY(this.name,this.version,this.base??`(empty)`),t=this.base&&this.base!==`(empty)`?`against ${this.base}`:`the whole package`;return e.status===`loading`?k`<span class="npm-delta is-loading" aria-label="Counting its lines">…</span>`:e.status===`error`?k`<span class="npm-delta is-error" data-tooltip="${e.error}">?</span>`:k`<span class="npm-delta" data-tooltip="${`Lines it adds and removes, ${t}`}">${ZY(e.additions,e.deletions)}${e.binary?k`<span class="npm-delta-binary" data-tooltip="Binary files changed too, which no line counts">, binary</span>`:j}${e.typeless?k`<span class="npm-delta-typeless" data-tooltip="Leaving out the declaration files changed in types alone">(${ZY(e.typeless.additions,e.typeless.deletions)} -types)</span>`:j}</span>`}};customElements.get(`npm-delta`)||customElements.define(`npm-delta`,QY);var $Y=class extends _a{static properties={text:{attribute:!1},label:{attribute:!1},_copied:{state:!0},_error:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.text=null,this.label=`Copy dependency review`}disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this._timer)}async _copy(){if(this._copyable()){this._error=!1;try{await navigator.clipboard.writeText(this.text),this._copied=!0,clearTimeout(this._timer),this._timer=setTimeout(()=>{this._copied=!1},2e3)}catch{this._error=!0}}}_copyable(){return typeof this.text==`string`&&this.text.trim()!==``}render(){return this._copyable()?k`<button type="button" class="${`bundle-code-copy-path dependency-review-copy-button${this._copied?` copied`:``}`}" aria-label="${this.label}" data-tooltip="${this.label}" @click="${()=>this._copy()}">${rw}</button> ${this._error?k`<span role="alert">Could not copy to the clipboard.</span>`:j}`:j}};customElements.define(`dependency-review-copy`,$Y);var eX=12e4,tX=3e4,nX=20,rX=12,iX=48,aX=[``,``,` is-span-2`],oX=3,sX=[[`pulls`,`Pull requests`],[`versions`,`Versions`],[`branch`,`Default branch`],[`reviews`,`Reviews`]],cX=new Map,lX=new Set,uX=[],dX=null,fX=0,pX=()=>{for(let e of lX)e()};globalThis.addEventListener?.(`dependency-review-changed`,()=>{cX.clear(),uX.length=0,pX()});function mX(){let e=P.managedSession?`${P.managedSession.id}\0${P.managedSession.role}`:null;return e!==dX&&(cX.clear(),uX.length=0,dX=e),cX}function hX(){for(;fX<oX&&uX.length>0;)fX++,uX.shift()().finally(gX)}function gX(){fX--,pX(),hX()}async function _X(e){let t=[],n=null;for(let r=0;r<nX;r++){let r=await Sb(e,`pulls`,{state:`open`,...n?{after:n}:{}});if(t.push(...(Array.isArray(r?.items)?r.items:[]).filter(e=>Number.isSafeInteger(e?.number)&&e.number>0)),r?.more!==!0||typeof r.after!=`string`)return{items:t,more:!1};n=r.after}return{items:t,more:!0}}var vX=new Set([`no-directory`,`no-repository`]);async function yX(e){try{let t=await Eb(e);return t?.review?{branch:rz(t),pulls:await _X(e)}:{branch:null}}catch(e){if(vX.has(e?.code))return{branch:null};throw e}}function bX(e){let t=mX(),n=t.get(e);if(n&&Date.now()<n.until)return n;let r=n?.status===`ready`?{...n,until:1/0,refreshing:!0}:{status:`loading`,until:1/0};return t.set(e,r),uX.push(()=>yX(e).then(n=>(t.get(e)===r&&t.set(e,{status:`ready`,until:Date.now()+eX,...n}),null),i=>(t.get(e)!==r||(i?.name===`AbortError`?n?.status===`ready`?t.set(e,n):t.delete(e):t.set(e,{status:`error`,until:Date.now()+tX,error:i?.message||`It couldn’t be read.`})),null))),hX(),r}var xX=(e,t)=>`${e.toLocaleString(`en-US`)} ${t}${e===1?``:`s`}`,SX=e=>`${e.name}@${e.version??``}${e.patched?`+patch`:``}`,CX=({repo:e,item:t})=>`${e.name}#${t.number}`,wX={git:`From git, which isn’t reviewed`,tarball:`A tarball not npm’s registry’s of its version, which isn’t reviewed`,integrity:`Locked with no integrity, which its reviews are held to`};function TX(e,t){let n=mz(e,t);return n===`unsupported`?k`<span class="team-deps-review is-failed" data-tooltip="${wX[e.unsupported]??j}">can’t review</span>`:e.rejected?k`<span class="team-deps-review is-failed" data-tooltip="A reviewer rejects it: it wants their newer accepting review">rejected</span>`:e.patched&&n===`wanted`?k`<span class="team-deps-review is-wanted" data-tooltip="Reviews here pass no patch: the server’s reviewed dependencies, or reviews of its patch in the pull request’s comments, pass it">patched</span>`:n===`wanted`?k`<span class="team-deps-review is-wanted" data-tooltip="${`${xX(e.reviews,`review`)} of ${t.required} required${e.commented?`; ${xX(e.commented,`reviewer`)} in its comments, which count here alone`:``}`}">${e.reviews}/${t.required}</span>`:j}function EX(e,t,{others:n=[],adders:r=!1,elsewhere:i=[]}={}){let a=e.source===`registry`&&e.version,o=e.was?.find(t=>t!==e.version),s=t?.canReview&&!e.patched&&mz(e,t)!==`unsupported`,c=a?oi({view:`npm`,packageName:e.name,packageSpec:e.version,...s?{bundleTab:`review`,...o?{reviewPackage:e.name,reviewSpec:o}:{}}:{}}):null,l=k`${kP}<span class="team-deps-name">${e.name}${e.version?k`<span class="team-deps-version">@${e.version}</span>`:j}</span> ${a&&mz(e,t)===`wanted`?k`<npm-delta .name="${e.name}" .version="${e.version}" .base="${XY(e)}"></npm-delta>`:j} ${TX(e,t)} ${i.length>0?k`<span class="team-deps-elsewhere" data-tooltip="${`Reviewed in the comments of ${i.join(`, `)}, which count there alone`}">in review in ${i[0]}${i.length>1?` +${i.length-1}`:``}</span>`:j} ${n.length>0?k`<span class="team-deps-also" data-tooltip="${`Added by ${n.join(`, `)}${r?``:` too`}`}">${r?`${n[0]}${n.length>1?` +${n.length-1}`:``}`:`+${n.length}`}</span>`:j}`;return k`<li>${c?k`<a class="team-deps-row" href="${c}" target="_blank" rel="noopener noreferrer">${l}</a>`:k`<span class="team-deps-row">${l}</span>`}</li>`}var DX=K(A`<path d="m6 4 4 4-4 4"/>`),OX=class extends Bh{static properties={repositories:{attribute:!1},team:{attribute:!1},_open:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.repositories=[],this.team=null,this._open=new Set,this._notify=()=>this.requestUpdate()}pick(e,{push:t=!0}={}){P.teamDependenciesTab=e;let n=fi({view:`workspace-dependencies`,teamId:this.team,dependencyTab:e},P.managedTeams);t?U?.pushRoute(n):U?.replaceRoute(n)}updated(){this._shown&&this._shown!==P.teamDependenciesTab&&this.pick(this._shown,{push:!1})}toggle(e){let t=new Set(this._open);t.delete(e)||t.add(e),this._open=t}connectedCallback(){super.connectedCallback(),lX.add(this._notify),this._unsubscribe=JR(this._notify)}disconnectedCallback(){super.disconnectedCallback(),lX.delete(this._notify),this._unsubscribe?.()}open(e,{repo:t,item:n}){e.preventDefault(),Ze({repository:{repoId:t.repoId,repo:t.name},target:{number:n.number,preview:{...n,kind:`pulls`}}})}rows(e,t,n,r=rX){if(t.length===0)return j;let i=this._open.has(e);return k`<ul class="team-deps-versions">${(i?t:t.slice(0,r)).map(n)}</ul>${t.length>r?k`<button type="button" class="team-deps-more" aria-expanded="${String(i)}" @click="${()=>this.toggle(e)}">${DX}${i?`Show fewer`:`and ${(t.length-r).toLocaleString(`en-US`)} more`}</button>`:j}`}disclosed(e,t,n,r,i=0){let a=this._open.has(e);return k`<div class="team-deps-disclosed"><button type="button" class="team-deps-more" aria-expanded="${String(a)}" @click="${()=>this.toggle(e)}">${DX}${t}</button> ${a?k`${this.rows(e,n,r,iX)}${i>0?k`<p class="team-deps-quiet">and ${i.toLocaleString(`en-US`)} more, not listed</p>`:j}`:j}</div>`}render(){let e=[...new Map((this.repositories??[]).map(e=>[e.repoId,e])).values()].map(e=>({repo:e,read:bX(e.repoId)})),t=e.filter(({read:e})=>e.status===`ready`&&e.branch),n=t.flatMap(({repo:e,read:t})=>t.pulls.items.filter(QR).map(t=>({repo:e,item:t,entry:sz(e.repoId,t.number,!0,{background:!0})}))),r=n.filter(({entry:e})=>e.status===`ready`&&e.review).map(e=>{let t=uz(e.entry).versions.filter(t=>[`wanted`,`unsupported`].includes(mz(t,e.entry.review))),n=t.filter(t=>mz(t,e.entry.review)===`wanted`).length,r=Math.max(e.entry.review.toReview??n,n);return{...e,wanted:t,failed:_z(e.entry),toReview:r,untold:r-n,size:t.length+r-n,others:hz(e.entry).count}}).filter(e=>e.size>0||e.others>0||e.failed).toSorted((e,t)=>+(e.size===0)-(t.size===0)||e.size-t.size||e.others-t.others||(e.repo.name<t.repo.name?-1:e.repo.name>t.repo.name?1:t.item.number-e.item.number)),i=t.filter(({read:e})=>e.pulls.more),a=new Map;for(let e of r)for(let t of e.wanted){let n=a.get(SX(t));n?n.pulls.push(e):a.set(SX(t),{pkg:t,pulls:[e]})}let o=e.some(({read:e})=>e.status===`loading`)||n.some(({entry:e})=>e.status===`loading`),s=[...e.filter(({read:e})=>e.status===`error`).map(({repo:e,read:t})=>[e.name,t.error]),...n.filter(({entry:e})=>e.status===`error`).map(e=>[CX(e),e.entry.error])],c=t.flatMap(({repo:e,read:t})=>{let{count:n}=hz(t.branch),r=_z(t.branch);return n>0||r?[{repo:e,read:t,count:n+(r?.count??0)}]:[]}),l=new Map;for(let e of n.filter(({entry:e})=>e.status===`ready`&&e.review))for(let t of[...uz(e.entry).versions,...hz(e.entry).versions])t.commented>0&&!t.patched&&(l.get(SX(t))??l.set(SX(t),new Set).get(SX(t))).add(CX(e));let u=new Set(e.filter(({read:e})=>e.status!==`ready`||e.branch).map(({repo:e})=>e.name.split(`/`)[0])).size===1?e=>e.slice(e.indexOf(`/`)+1):e=>e,d={elsewhere:(e,t=null)=>e.patched?[]:[...l.get(SX(e))??[]].filter(e=>!t||e!==CX(t)).map(u),named:e=>u(CX(e)),shorten:u},f=s.map(([e,t])=>`${u(e)}: ${t}`),p=P.teamDependenciesTab,m=sX.filter(([e])=>e!==`branch`||c.length>0||o&&p===`branch`),h=m.some(([e])=>e===p)?p:`pulls`;this._shown=h;let g={pulls:r.length,versions:a.size,branch:c.reduce((e,{count:t})=>e+t,0)};return k`<div class="team-deps">${Jx({tabs:m.map(([e,t])=>({id:e,label:k`${t}${g[e]==null||o&&g[e]===0?j:k`<span class="team-deps-tab-n">${g[e].toLocaleString(`en-US`)}</span>`}`})),current:h,prefix:`team-deps`,select:e=>this.pick(e)})}<div class="team-deps-panel" role="tabpanel" id="${`team-deps-panel-${h}`}" aria-labelledby="${`team-deps-tab-${h}`}">${h===`reviews`?XW(()=>k`<dependency-review-list .session="${P.managedSession}" .team="${this.team}"></dependency-review-list>`):k`${o?k`<p class="team-deps-quiet" role="status">Reading their pull requests…</p>`:j} ${f.length===1?k`<p class="team-deps-quiet" role="alert">${f[0]}</p>`:f.length>1?k`<p class="team-deps-quiet" role="alert" data-tooltip="${f.join(`
|
|
189
|
+
`)}">${xX(f.length,`repository or pull request`)} couldn’t be read.</p>`:j} ${!o&&e.length>0&&t.length===0&&s.length===0?k`<p class="workspace-content-empty">None of this team’s repositories reviews its dependencies for you.</p>`:j} ${h===`branch`?j:i.map(({repo:e,read:t})=>k`<p class="team-deps-quiet" role="alert">Only ${u(e.name)}’s ${xX(t.pulls.items.length,`open pull request`)} updated latest are checked; its others aren’t.</p>`)} ${t.length===0?j:h===`pulls`?this.renderPulls(r,a,o,i.length>0,d):h===`versions`?this.renderVersions(a,o,d):c.map(({repo:e,read:t})=>this.renderBranch(e,t,d))}`}</div></div>`}renderPulls(e,t,n,r,{elsewhere:i,named:a}){if(e.length===0)return n?j:k`<p class="workspace-content-empty">No open pull request${r?` checked`:``} wants its dependencies reviewed.</p>`;let o=new Set,s=e=>n=>EX(n,e.entry.review,{others:(t.get(SX(n))?.pulls??[]).filter(t=>t!==e).map(a),elsewhere:i(n,e)});return k`<ol class="team-deps-pulls" aria-label="Pull requests wanting reviews">${e.map(e=>{let t=e.wanted.filter(e=>!o.has(SX(e))),n=e.wanted.filter(e=>o.has(SX(e)));for(let e of t)o.add(SX(e));let r=CX(e),c=hz(e.entry),l=`https://github.com/${e.repo.name}/pull/${e.item.number}`,u=[`own`,`above`,`others`].some(e=>this._open.has(`${r}:${e}`));return k`<li class="${`team-deps-pull${u?` is-wide`:aX[t.length]??` is-wide`}`}"><div class="team-deps-pull-top"><a class="team-deps-pull-head" href="${l}" target="_blank" rel="noopener noreferrer" @click="${t=>this.open(t,e)}"><span class="team-deps-pull-name">${a(e)}</span><span class="team-deps-pull-title">${e.item.title||`(no title)`}</span> <span class="${`team-deps-count${e.failed?` is-failed`:``}`}">${e.failed?`review fails`:e.size>0?`${xX(e.toReview,`version`)} to review`:`${xX(e.others,`other version`)} unreviewed`}</span> </a>${e.entry.formatted?k`<dependency-review-copy .text="${e.entry.formatted}" .label="${`Copy your dependency reviews of its versions`}"></dependency-review-copy>`:j}</div>${this.rows(`${r}:own`,t,s(e))} ${e.untold>0?k`<p class="team-deps-quiet">and ${xX(e.untold,`more version`)} past those listed</p>`:j} ${n.length>0?this.disclosed(`${r}:above`,`${xX(n.length,`version`)} a pull request above adds too`,n,s(e)):j} ${e.others>0?this.disclosed(`${r}:others`,e.size>0||e.failed?`${xX(e.others,`other version`)} its lockfiles lock ${e.others===1?`wants`:`want`} reviews`:`Its own versions pass; ${xX(e.others,`version`)} its lockfiles locked before ${e.others===1?`wants`:`want`} reviews`,c.versions,t=>EX(t,e.entry.review,{elsewhere:i(t,e)}),e.others-c.versions.length):j}</li>`})}</ol>`}renderVersions(e,t,{elsewhere:n,named:r}){return e.size===0?t?j:k`<p class="workspace-content-empty">No version an open pull request adds wants a review.</p>`:k`<section class="team-deps-section" aria-label="Versions to review">${this.rows(`versions`,[...e.values()],({pkg:e,pulls:t})=>EX(e,t[0].entry.review,{others:t.map(r),adders:!0,elsewhere:n(e)}),1/0)}</section>`}renderBranch(e,t,{elsewhere:n,shorten:r}){let{versions:i,count:a}=hz(t.branch),o=_z(t.branch),s=o?.unread.flatMap(e=>e.paths)??[],c=[...i,...o?.versions??[]];return k`<section class="team-deps-section" aria-label="${`${r(e.name)}\u2019s default branch`}"><h2>${r(e.name)}</h2><p class="team-deps-quiet">${xX(a,`version`)} unreviewed${o?.count?`, ${o.count.toLocaleString(`en-US`)} can\u2019t be reviewed`:``}${s.length>0?`, ${xX(s.length,`lockfile`)} unread`:``}</p>${s.length>0?k`<p class="team-deps-quiet" role="alert">Unread, so what ${s.length===1?`it locks isn’t`:`they lock aren’t`} checked: ${s.map((e,t)=>k`${t>0?`, `:``}<code>${e}</code>`)}</p>`:j} ${this.rows(`branch:${e.repoId}`,c,e=>EX(e,t.branch.review,{elsewhere:n(e)}),iX)} ${a>i.length?k`<p class="team-deps-quiet">and ${(a-i.length).toLocaleString(`en-US`)} more, not listed</p>`:j}</section>`}};customElements.define(`team-dependencies`,OX);var kX=null;function AX(e){let t=kX=document.startViewTransition(e);return t.ready.catch(()=>{}),t.finished.finally(()=>{kX===t&&(kX=null)}).catch(()=>{}),t}function jX(e){let t=null;return n=>{t!==null&&t!==n&&kX?.skipTransition(),t=n,e()}}function MX(){R.classList.add(`active`),qm.classList.add(`hidden`)}function NX(){let e=Sr(P.reports);if(!e)return null;let t=Object.keys(e),n=Xg().filter(e=>Lg(e).commonTriage===P.shownTriage),r=xr(n,P.severityMode),i=wr(e,r),a=new Map,o=new Map,s=new Map;for(let e of n)for(let t of e){let e=Ni(t,P.severityMode);a.has(t.file)||a.set(t.file,new Set),a.get(t.file).add(e);let n=Cg(t)?.color??`none`;o.has(t.file)||o.set(t.file,new Set),o.get(t.file).add(n),s.has(t.file)||s.set(t.file,[]),s.get(t.file).push({severity:e,color:n})}let c;return w.focusedPkg?(c=t.filter(e=>(Qn(e)??`__own__`)===w.focusedPkg),w.showAll||(c=c.filter(e=>Er(e,r,i)))):c=w.showAll?t:t.filter(e=>Er(e,r,i)),{treeData:e,files:c,ownCounts:r,transitiveCounts:i,severitySets:a,colorSets:o,fileFindings:s,ownSourceFiles:Dn(c)}}function PX(){let e=_T();if(!e)return;let t=NX();if(!t)return;let n=P.currentView===`bundles`;e.refreshSidebar(t,{isBundleContext:n,findingsJump:!(n&&F())})}function FX(){let e=_T();if(!e)return;let t=NX();t&&e.refreshTopPkgs(t)}function IX(e){return`${Oi[e]??e} findings`}function LX(e,t,n){return n?k`<repo-chip url="${n}"></repo-chip>`:F()?j:P.currentWorkspace?t?k`<repo-chip url="${t}"></repo-chip>`:j:e?k`<repo-chip url="${P.repoUrl}" editable ?editing="${P.repoEditing}" ?empty="${!P.repoUrl}"></repo-chip>`:t?k`<repo-chip url="${t}"></repo-chip>`:j}function RX(e,t,n,r,i){let a=e.length,o=new Set(P.reports.map(e=>e.source)),s=o.size===1?[...o][0]:null,c=P.currentWorkspace?L().find(e=>e.id===P.currentWorkspace):null,l=TY(P,c?[c]:[],Pu),u=c?`Workspace: ${c.name}`:s?IX(s):`Findings`,d=s&&zx[s]?s:`default`,f=O(zx[d]),p=k`<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>`,m=j;if(l)m=MY(l,`reports`,P.currentView);else if(t.length===1){let e=x(t[0]);m=k`<button type="button" class="file-chip" data-copy-report="${e}">${f}<span>${e}</span></button>`}else t.length>1&&(m=k`<button type="button" class="file-chip" data-copy-report="${t.map(x).join(`
|
|
190
|
+
`)}">${p}<span>${t.length} reports</span></button>`);let h=`${a} ${`finding${a===1?``:`s`}`}`,g=P.currentWorkspace?[]:MZ(!!s),_=j;if(a>0){let t={};for(let n of e){let e=Ni(kg(n),P.severityMode);e&&(t[e]=(t[e]||0)+1)}let n=Ai.filter(e=>t[e]>0);n.length>0&&(_=k`<span class="status-bar" aria-hidden="true">${n.map(e=>{let n=`${t[e]} ${e.replaceAll(`_`,` `)}`;return k`<span class="${`status-seg sev-${e}`}" style="${E({flexGrow:t[e]})}" data-tooltip="${n}"></span>`})}</span>`)}if(l?.scope===`team`)return kY(l,P.currentView,{findings:a,statusBar:_});let v=new Set(P.reports.map(e=>e.repo??null)),y=LX(n,r,v.size===1?[...v][0]:null),b=k`<span class="sep" aria-hidden="true"></span>`,ee=l?j:NY(i,P.currentView);return k`<header class="page-head"><div class="page-title"><h1>${l?jY(l,P.currentView):u}${m}${MY(l,`bundles`,P.currentView)}${y}${ee}${VX()}</h1><div class="meta-row"><span>${h}</span> ${_} ${g.length>0?k`${b}${g.map(e=>k`<span class="tag">${e}</span>`)}`:j}</div></div></header>`}var{suggestSync:zX}=gY({open:e=>rt({names:e})}),BX=new Set([`findings`,`files`,`links`]);function VX(){if(B.status!==`online`||!BX.has(P.currentView))return j;let e=mY();if(!e)return j;let{workspaceId:t,fileNames:n,mode:r}=e,i=gh(t);if(i.length>0&&zX(t,i,{onSync:()=>HX(t,r,n),retry:Z}),r===`single`){let e=n[0];if(i.includes(e))return UX({status:`differ`,label:`differs`,title:`Your copy of "${e}" doesn't match its cloud copy. Click to re-check and bring them in line.`,onClick:()=>HX(t,r,n)});let a=lh(t,e)?`cloud`:`local`;return UX({status:a,label:a,title:a===`cloud`?`Synced to remote`:`Local only — click to upload`,onClick:a===`local`?()=>qX({workspaceId:t,items:[{kind:`report`,identifier:e}]}):null})}let a=L().find(e=>e.id===t),o=a&&Array.isArray(a.bundles)?a.bundles:[],s=hh(t),c=n.filter(e=>!lh(t,e)),l=o.filter(e=>!uh(t,e)),u=[...c.map(e=>({kind:`report`,identifier:e})),...l.map(e=>({kind:`bundle`,identifier:e}))];if(s===0&&u.length===0)return j;let d=[s>0?`${s} in cloud`:null,u.length>0?`${u.length} local-only`:null,i.length>0?`${i.length} differ from the cloud`:null,s>0?`click "cloud" to re-check storage`:null,u.length>0?`click "local" to upload ${u.length}`:null].filter(Boolean).join(` — `),f=i.length===1?`Your copy of "${i[0]}" doesn't match its cloud copy. Click to re-check and bring them in line.`:`${i.length} reports don't match their cloud copies. Click to re-check and bring them in line.`,p=i.length===0?j:k`<button type="button" class="sync-badge-chunk differ" data-tooltip="${f}" aria-label="${`${i.length} report${i.length===1?``:`s`} differ from the cloud \u2014 re-check`}" @click="${e=>{e.stopPropagation(),HX(t,r,n)}}">${GX()}<span>${i.length} differ</span></button>`,m=s===0?j:k`<button type="button" class="sync-badge-chunk cloud" aria-label="${`re-check ${s} cloud object${s===1?``:`s`}`}" @click="${e=>{e.stopPropagation(),We({workspaceId:t,cloudCount:s,localFileNames:n,localBundles:o})}}">${KX()}<span>${s} cloud</span></button>`,h=u.length===0?j:k`<button type="button" class="sync-badge-chunk local" aria-label="${`${u.length} items not yet uploaded \u2014 open upload dialog`}" @click="${e=>{e.stopPropagation(),qX({workspaceId:t,items:u})}}">${WX()}<span>${u.length} local</span></button>`,g=k`<span class="sync-badge-divider" aria-hidden="true"></span>`,_=[m,p,h].filter(e=>e!==j);return k`<div class="report-sync-badge report-sync-badge-clickable" data-status="mixed" data-tooltip="${d}">${_.map((e,t)=>t===0?e:k`${g}${e}`)}</div>`}function HX(e,t,n){let r=L().find(t=>t.id===e),i=t===`single`?pY(r?.reports??[],P.storedFiles??[],n):n,a=r&&Array.isArray(r.bundles)?r.bundles:[];return We({workspaceId:e,cloudCount:hh(e),localFileNames:i,localBundles:a,autoRun:!0})}function UX({status:e,label:t,title:n,onClick:r}){let i=e===`cloud`?KX():e===`differ`?GX():WX(),a=k`<span class="sync-badge-label">${t}</span>`;return typeof r==`function`?k`<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}">${i}${a}</button>`:k`<span class="report-sync-badge" data-status="${e}" data-tooltip="${n}" aria-label="${`report sync status: ${t}`}">${i}${a}</span>`}function WX(){return k`<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 GX(){return k`<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 KX(){return k`<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 qX({workspaceId:e,items:t}){let n=t.filter(e=>e.kind===`bundle`);if(n.length>0){let e=await rl(),t=new Map(e.map(e=>[e.integrity,e.name]));for(let e of n){let n=t.get(e.identifier);n&&(e.label=n)}}await at({workspaceId:e,items:t})}function JX(e){return Object.values(e).some(e=>e>0)||P.filterSeverities.size>0?k`<severity-chips .counts="${e}"></severity-chips>`:j}function YX(e){return Object.values(e).some(e=>e>0)||P.filterColors.size>0?k`<triage-filter .counts="${e}"></triage-filter>`:j}function XX(e,t,n,r,i,a,o,s){let{showSource:c,showConfidence:l,showPriority:u,showGraphMode:d,showFileSort:f,kanbanMode:p,showRepo:m,hasComment:h,hasFix:g,hasFlagged:_,hasDuplicates:v,hasCrossContext:y,hasAppStacked:b,showSecurity:ee,showSeverityMode:te,revalidateOptions:ne,showPartial:re,canDropLayer:ie,canDetailLayer:ae,canUpstreamLens:oe,confirmedLocked:se}=a;return k`<div class="toolbar"><div class="toolbar-row"><view-mode-buttons modes="${d?`kanban,focus,table,list,grouped,graph`:`kanban,focus,table,list,grouped`}"></view-mode-buttons><findings-sort ?show-file="${f}" ?show-confidence="${l}" ?show-priority="${u}"></findings-sort>${c?k`<source-filter></source-filter>`:j} ${!se&&(l||ne.length>0)?k`<conf-filter ?range-disabled="${!l}" .revalidateOptions="${ne}" ?has-partial="${re}"></conf-filter>`:j} ${h||g||_||P.filterComment||P.filterFix||P.filterFlagged?k`<annotation-filter .hasComment="${h}" .hasFix="${g}" .hasFlagged="${_}"></annotation-filter>`:j} ${p?j:k`<triage-selector .counts="${n}"></triage-selector>`}<div class="toolbar-end"><download-button></download-button>${!P.currentWorkspace&&(v||P.filterDuplicates)||y||b||ee||P.filterCrossContext||P.filterAppStacked?k`<annotation-filter group="context" .hasDuplicates="${v}" .hasCrossContext="${y}" .hasAppStacked="${b}" .hasSecurityContrast="${ee}"></annotation-filter>`:j} ${ie||P.revalidateConflicts.size>0?k`<revalidation-switch ?can-drop="${ie}" ?can-detail="${ae}" ?can-upstream="${oe&&ie}" .upstreamDisabled="${P.showRevalidation===!1&&ie}"></revalidation-switch>`:j}</div></div><div class="toolbar-row sev-row">${te?k`<severity-mode-switch></severity-mode-switch>`:j} ${JX(r)} ${o.analyzers.length>1||o.models.length>1?k`<analyzer-select .analyzers="${o.analyzers}" .models="${o.models}" .groups="${o.groups}"></analyzer-select>`:j} ${m&&s.length>1?k`<repo-filter .options="${s}"></repo-filter>`:j} ${YX(i)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function ZX(e,t){return e.map(e=>({p:kg(e),g:e})).toSorted((e,n)=>t(e.p,n.p)).map(e=>e.g)}var QX=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),$X=null,eZ=0,tZ=null;function nZ(e,t=!1,n=null,r=!1,i=!1){return k`<finding-card data-gid="${V(e)}" .group="${e}" ?in-group="${t}" context="${n??j}" ?lazy="${r}" ?popup="${i}"></finding-card>`}var rZ=k`<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>`,iZ=k`<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>`,aZ={critical:`C`,high:`H`,medium:`M`,low:`L`,high_bug:`H`,bug:`B`,informational:`i`};function oZ(e,t={}){let{variant:n=`kanban`,active:r=!1,expandedTrackLast:i=!1}=t,a=t.groupSt??Lg(e),o=Mg(e),s=Vi(o)||`(untitled finding)`,c=n===`kanban`,l=n===`kanban-side`,u=c&&P.currentWorkspace?Hx(o):null,d={"kanban-card":!0,"has-conflict":a.hasConflict,"focus-side-card":!c,"kanban-expanded-track-last":i,active:r};!a.hasConflict&&a.commonColor&&(d[`mark-${a.commonColor}`]=!0);let f=parseInt(o.line,10),p=Number.isFinite(f)?`:${f}`:``,m=Ni(o,P.severityMode),h=aZ[m]??`?`,g=Mi(o)&&P.severityMode!==`original`,_=Cg(o),v=_?.flagged===!0,y=_?.fix||Yh(o),b=_?.comment??``,ee=j;c&&y?ee=mi(y)?k`<managed-fix-link class="kanban-action kanban-fix-link" compact="compact" .url="${y}">${Mw}</managed-fix-link>`:Sg(o)?k`<button type="button" class="kanban-action mark-fix" data-tooltip="${`Edit fix link: ${y}`}" aria-label="${`Edit fix link: ${y}`}">${Mw}</button>`:k`<span class="kanban-action kanban-fix-note" role="img" data-tooltip="${`Fix: ${y}`}" aria-label="${`Fix: ${y}`}">${Mw}</span>`:c&&(b||F()&&bg(o))&&(ee=k`<comment-preview class="kanban-action" .finding="${o}" .comment="${b}">${jw}</comment-preview>`);let te=k`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${m}`}" data-tooltip="${g?`${dw(m)} \u2014 corrected from ${dw(o.severity)}`:j}" aria-label="${g?`Severity ${dw(m)}, corrected from ${dw(o.severity)}`:`Severity ${dw(m)}`}">${h}${g?`*`:``}</span> ${v?k`<span class="kanban-flag" aria-label="Flagged">${Ww}</span>`:j} ${ee}</div><span class="kanban-title">${s}</span><div class="kanban-meta"><span class="kanban-loc">${o.file}${p}</span> ${o.confidence===void 0||o.confidence===null?j:k`<span class="kanban-conf" data-tooltip="${`Confidence ${o.confidence}/10`}">${o.confidence}</span>`} ${u?k`<span class="kanban-analyzer" role="img" data-tooltip="${Vx[u]}" aria-label="${Vx[u]}">${O(it[u])}</span>`:j}</div>`;return c?k`<div class="${T(d)}" data-gid="${V(e)}" data-kanban-source draggable="${Vg(e,a).length>0?`true`:`false`}" role="button" tabindex="0" aria-current="${r?`true`:`false`}" aria-label="${`Open details for ${s}`}">${te}</div>`:l?k`<div class="${T(d)}" data-gid="${V(e)}" data-kanban-select role="button" tabindex="0" aria-current="${r?`true`:`false`}" aria-label="${`Show details for ${s}`}">${te}</div>`:k`<div class="${T(d)}" data-gid="${V(e)}" data-focus-select role="button" tabindex="0" aria-current="${r?`true`:`false`}" aria-label="${`Focus on ${s}`}">${te}</div>`}var sZ={content:``,parts:``};function cZ(e){return sZ.content!==e&&(sZ={content:e,parts:UT(e)}),sZ.parts}function lZ(e){let{content:t,range:n,highlighted:r}=e,i=t.split(`
|
|
191
|
+
`).length,a=String(i).length;return k`<div class="focus-code-lines" style="${E({"--lineno-width":`${a}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:i},(e,t)=>{let r=t+1,i={"focus-code-lineno":!0,"focus-code-line-active":!!n&&r>=n.start&&r<=n.end};return k`<div class="${T(i)}" data-focus-code-line="${r}">${r}</div>`})}</aside><pre class="focus-code-source" tabindex="-1" aria-label="${e.file}"><code>${typeof r==`string`?O(r):cZ(t)}</code></pre></div>`}function uZ(e){return!e||!Iv(Mg(e))?j:k`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${V(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 dZ(e,t=j,n=!1){P.focusCodeTick;let r=FC(e),i=MC(e),a=r?`focus-main with-code`:`focus-main`,o=E({"--focus-split":String(P.focusSplit)});return k`<div class="${a}" style="${o}" data-gid="${V(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${n?j:uZ(e)} ${nZ(e,!1,`focus`,!1,n)}</div></div>${t} ${r?k`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${Hs}" aria-valuemax="${Us}" aria-valuenow="${Math.round(P.focusSplit)}" data-tooltip="Drag to resize · double-click to reset"></div><div class="focus-pane focus-pane-code" data-focus-code-file="${r.file??j}" data-focus-code-integrity="${r.integrity??j}">${r.loading?k`<div class="focus-code-empty">Loading source…</div>`:k`<header class="focus-code-bar"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${r.file}">${r.file}</span> ${r.range?k`<span class="focus-code-line">:${Vn(r.range)}</span>`:j} ${(i?.stack.length??0)>1?k`<div class="focus-code-nav"><button type="button" class="focus-code-nav-btn" data-code-history="back" ?disabled="${i.at===0}" aria-label="Back to the previously shown file">${iw}</button> <button type="button" class="focus-code-nav-btn" data-code-history="forward" ?disabled="${i.at===i.stack.length-1}" aria-label="Forward to the next shown file">${aw}</button></div>`:j}</header><div class="focus-code-body">${lZ(r)}</div>`}</div>`:j}</div>`}function fZ(e,t,n=[],r=null){if(!e&&!r)return j;let i=e?Lg(e):{},a=P.kanbanDetailFullscreen,o={"kanban-detail-modal":!0,fullscreen:a,"has-conflict":i.hasConflict},s=e?V(e):null,c=t?.items??[],l=c.findIndex(e=>V(e)===s),u=k`<div class="kanban-detail-actions">${uZ(e)} <button type="button" class="kanban-detail-expand detail-action" data-kanban-detail-fullscreen aria-pressed="${a?`true`:`false`}" aria-label="${a?`Back to the readable width`:`Fill the available space`}">${a?iZ:rZ}</button> <button type="button" class="kanban-detail-close detail-action" aria-label="Close details">×</button></div>`;return k`<div class="${T({"kanban-detail-backdrop":!0,"links-preview-backdrop":!!r})}"><div class="kanban-detail-dim"></div><div class="${T(o)}" role="dialog" aria-modal="true" aria-label="${r?`Finding preview`:`Finding details`}">${a&&e?j:u}<div class="kanban-detail-body">${e?a?dZ(e,u,!0):nZ(e,!1,`kanban-detail`,!1,!0):k`<div class="links-preview-message" role="status">${r.error||`Loading finding…`}</div>`}</div></div>${c.length===0?j:k`<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(e=>{let n=e.key===t.key,r=n?e.label:`${e.label} (${e.count})`;return k`<option value="${e.key}" data-gid="${e.firstGid}" .selected="${n}" ?disabled="${e.count===0}">${r}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${l===0}" aria-label="Previous finding">${iw}</button> <span class="count">${l<0?c.length:`${l+1} / ${c.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${l===c.length-1}" aria-label="Next finding">${aw}</button></div></div><kanban-rail class="kanban-detail-side-body" .items="${c}" .activeKey="${s}" .keyOf="${V}" .renderItem="${e=>oZ(e,{variant:`kanban-side`,active:V(e)===s})}"></kanban-rail></aside>`}</div>`}function pZ(e,t,n=new Map){if(P.viewMode===`table`){let n=P.sortBy===`file`?ZX(e,QX):e;return n.length===0?j:($X=n,k`<div class="${t?`findings-table-layout open`:`findings-table-layout`}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?k`<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">${nZ(t)}</div></aside>`:j}</div>`)}if(P.viewMode===`focus`){if(e.length===0)return j;let n=e.indexOf(t);eZ=n;let r=t,i=n===0,a=n===e.length-1;return k`<div class="focus-view">${dZ(r)}<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="${i}" aria-label="Previous finding">${iw}</button> <span class="count">${n+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${a}" aria-label="Next finding">${aw}</button></div></div><div class="focus-sidebar-body">${D(e,e=>V(e),e=>oZ(e,{variant:`focus`,active:V(e)===V(r)}))}</div></aside></div>`}if(P.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`}],i=new Map(r.map(e=>[e.key,[]])),a=e=>{let t=n.get(e);return t||n.set(e,t=Lg(e)),t};for(let t of e){let e=a(t).commonTriage??`untriaged`,n=i.get(e);n&&n.push(t)}let o=r.some(e=>e.key===P.kanbanExpandedColumn)?P.kanbanExpandedColumn:null,s=o?r.filter(e=>e.key===o):r,c={"--kanban-cols":String(r.length)},l=t,u=l?r.find(e=>e.key===(a(l).commonTriage??`untriaged`)):null;return k`<div class="kanban-board" style="${E(c)}">${D(s,e=>e.key,e=>{let t=i.get(e.key),n=e.key===o;return k`<div class="${`kanban-column kanban-column-${e.key}${n?` expanded`:``}`}" data-kanban-target="${e.key}"><div class="kanban-column-header"><span class="label">${e.label}</span> <span class="count">${t.length}</span> <button type="button" class="kanban-expand" data-kanban-expand="${e.key}" aria-pressed="${n}" aria-label="${n?`Show all columns`:`Show only ${e.label}`}">${n?iZ:rZ}</button></div><div class="kanban-column-body">${t.length===0?k`<div class="kanban-empty">No ${e.label.toLowerCase()} findings.</div>`:D(t,e=>V(e),(e,t)=>oZ(e,{active:V(e)===P.kanbanPopoverGid,expandedTrackLast:(t+1)%r.length===0,groupSt:a(e)}))}</div></div>`})}</div>${fZ(l,u&&{key:u.key,label:u.label,items:i.get(u.key)},r.map(e=>{let t=i.get(e.key);return{key:e.key,label:e.label,count:t.length,firstGid:t.length>0?V(t[0]):``}}))}`}if(P.viewMode===`grouped`){let t=new Map;for(let n of e){let e=kg(n).file;t.has(e)||t.set(e,[]),t.get(e).push(n)}let n=P.sortBy===`file`?[...t.keys()].toSorted():[...t.keys()];return k`${D(n,e=>e,e=>{let n=P.sortBy===`file`?ZX(t.get(e),(e,t)=>parseInt(e.line,10)-parseInt(t.line,10)):t.get(e),r=kg(n[0]);return k`<div class="file-group"><div class="file-header"><span>${Nn(r,Pg(r))}</span> <span class="count">${n.length}</span></div><div class="file-body">${D(n,e=>V(e),e=>nZ(e,!1,null,!0))}</div></div>`})}`}let r=P.sortBy===`file`?ZX(e,QX):e;return k`${D(r,e=>V(e),e=>{let t=Mg(e),n=Kn(t,Pg(t)),r=jn(t),i=Bi(t),a=e.length>1;return k`<div class="${T({"flat-group":!0,"multi-case":a})}"><div class="flat-group-loc"><span class="file">${Nn(t,Pg(t))}</span> ${n===j?j:k`<span class="line-num">${n}</span>`} ${i?k`<span class="meta">${i}</span>`:j} ${r?k`<span class="run-meta">${r}</span>`:j}</div>${nZ(e,!0,null,!0)}</div>`})}`}function mZ(){P.bundleSourceFile&&eQ().catch(()=>{});let e=document.querySelector(`#bundle-source-overlay-slot`);e&&M(oq(),e)}var hZ=jX(IZ);function Z(){hZ(P.currentView)}var gZ=e=>Object.assign(document.createElement(`div`),{id:e});function _Z(e){let t=document.querySelector(`#${e}`);return(!t||!R.contains(t)||R.firstElementChild!==t)&&(t=gZ(e),R.replaceChildren(t)),t}function vZ(e=null){let t=e==null?null:P.managedTeams.find(t=>t.id===e),n=t?TY({currentWorkspace:`managed-team:${t.id}`,currentManagedTeam:t.id,managedTeams:P.managedTeams,managedSession:P.managedSession},[]):null;M(AY(n),_Z(`triage-loading-slot`))}function yZ(){let e=TY(P,L(),Pu);document.title=e?`${e.title} \u2014 findings`:`DeepView`;let t=_Z(`empty-workspace-slot`);t&&M(k`${RX([],[],!1,null,0)}<p class="workspace-content-empty">No findings available.</p>`,t),MX()}var bZ={"manage-deduplication":{slot:`manage-deduplication-slot`,tag:`managed-admin-deduplication`,title:`DeepView — deduplication`},manage:{slot:`manage-slot`,tag:`managed-admin-home`,title:`DeepView — manage`},"admin-users":{slot:`admin-users-slot`,tag:`managed-admin-users`,title:`DeepView — users`},"manage-repos":{slot:`manage-repos-slot`,tag:`managed-admin-repos`,title:`DeepView — repositories`},"manage-repo-risk":{slot:`manage-repo-risk-slot`,tag:`managed-admin-repo-risk`,title:`DeepView — repository risk`},"manage-reports":{slot:`manage-reports-slot`,tag:`managed-admin-reports`,title:`DeepView — reports`},"manage-bundles":{slot:`manage-bundles-slot`,tag:`managed-admin-bundles`,title:`DeepView — bundles`},"manage-history":{slot:`manage-history-slot`,tag:`managed-admin-history`,title:`DeepView — history`},"manage-teams":{slot:`manage-teams-slot`,tag:`managed-admin-teams`,title:`DeepView — teams`},"manage-import":{slot:`manage-import-slot`,tag:`managed-admin-import`,title:`DeepView — import`},"manage-links":{slot:`manage-links-slot`,tag:`managed-admin-links`,title:`DeepView — links`},"manage-scans":{slot:`manage-scans-slot`,tag:`managed-admin-scans`,title:`DeepView — scans`}},xZ=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),SZ=null;function CZ(e){let t=[e,Fr(),vr()];if(SZ?.key.every((e,n)=>e===t[n]))return SZ;let n=S_(e),r=e.some(e=>e.some(e=>Ir(e.file))),i=e.some(e=>e.some(e=>!Ir(e.file))),a=!1,o=!1,s;e:for(let t of e)for(let e of t)if(!o)o=!0,s=e.file;else if(e.file!==s){a=!0;break e}let c=e.some(e=>e.some(e=>!e.repo?.github&&!Ir(e.file))),l=new Set;for(let t of e)for(let e of t)!Ir(e.file)&&e.repo?.github&&l.add(e.repo.github);let u=l.size===1?[...l][0]:null,d=new Set,f=new Set;for(let t of e)for(let e of t)d.add(e._analyzer??null),f.add(i_(e));let p=Object.keys(H_),m=e=>{if(e==null)return 1/0;let t=p.indexOf(e);return t===-1?p.length:t},h=[...d].toSorted((e,t)=>{let n=m(e),r=m(t);return n===r?String(e??``).localeCompare(String(t??``)):n-r}),g=[...f].toSorted(xZ);return SZ={key:t,hasAnyPriority:n,hasAnyModulesPath:r,hasAnySourcePath:i,hasMultipleFiles:a,repoInputUseful:c,knownRepo:u,analyzerSet:d,modelSet:f,analyzerOptions:h,modelOptions:g},SZ}var wZ=null;function TZ(e,t){if(wZ?.groups===e&&wZ.workspace===t)return wZ;let n=!1,r=!1,i=!1;for(let a of e){let e=!1,o=!1;for(let n of a){let a=Ii(n);a===`partial`&&(r=!0),!((a===`unreachable`||a===`refuted`)&&(i=!0,t))&&(a===`revalidation`?e=!0:o=!0)}e&&o&&(n=!0)}return wZ={groups:e,workspace:t,hasFoldedRows:n,hasPartialRow:r,hasRuledOutRow:i},wZ}var EZ=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),DZ={reports:[],value:!1};function OZ(){return EZ(DZ.reports,P.reports)||(DZ={reports:[...P.reports],value:Cr(P.reports)}),DZ.value}var kZ={reports:[],depsDir:null,value:!1};function AZ(){let e=Fr();return(kZ.depsDir!==e||!EZ(kZ.reports,P.reports))&&(Lr(P.reports)&&Gg(),kZ={reports:[...P.reports],depsDir:e,value:P.reports.some(e=>(e.groups??[]).some(e=>e.some(e=>e.isUpstream)))}),kZ.value}var jZ={reports:[],single:!1,tags:[]};function MZ(e){if(jZ.single!==e||!EZ(jZ.reports,P.reports)){let t=P.reports.flatMap(e=>e.groups.flat());jZ={reports:[...P.reports],single:e,tags:CS(t,e?mS.filter(e=>e!==`type`):mS)}}return jZ.tags}var NZ=null;function PZ(){let e=P.revalidateConflicts.size>0,t=!e&&OZ();return e?P.showRevalidation!==!1&&(NZ=P.showRevalidation,P.showRevalidation=!1):(NZ!==null&&(P.showRevalidation=NZ,NZ=null),!t&&P.showRevalidation===!1&&(P.showRevalidation=!0)),P.upstreamOnly&&(!t||P.showRevalidation===!1||!AZ())&&(P.upstreamOnly=!1),gr(P.showRevalidation,P.upstreamOnly),t}var FZ=null;function IZ(){ug()||dg(),mZ(),Nr(P.reports),xd()&&queueMicrotask(()=>{Cd()});let e=AZ(),t=PZ(),n=e;if([`workspace-reports`,`workspace-bundles`,`workspace-repositories`,`workspace-dependencies`].includes(P.currentView)){let e=P.currentView.slice(10),t=TY(P,L(),Pu),n=_Z(`workspace-content-slot`);n&&M(FY(t,e),n),document.title=t?`${t.title} \u2014 ${e}`:`DeepView \u2014 ${e}`;return}if(P.currentView===`bundles`){if((P.bundles??[]).length===0)P.currentView=`findings`;else{qt(P.bundleDetailsTab,P.bundleSourceFile)&&eQ().catch(()=>{});let e=_Z(`bundles-slot`);e&&M(gJ(P.bundles),e);let t=P.bundleDetails,n=P.selectedBundle&&t&&(t.json||t.bundle);if(n&&P.bundleDetailsTab===`graph`){let e=document.querySelector(`#bundle-graph-slot`);if(e){let n=AK(P.bundleDetails);if(n){FK(n);let r={hideAllFiles:!0,triageCounts:OK(P.bundleDetails,new Set(n.strippedToOrig.values())),triageStates:[`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`],showPackagesView:n.canPackagesView,showBundleLayouts:!0,hasIssues:n.hasIssues},i=FZ,a=e.querySelector(`graph-layout`);!n.issuesShown&&i&&!i.issuesShown&&a&&i.state===w.graphState&&i.details===t&&i.reason===w.bundleReason?a.options=r:(FZ=null,yT(e,n,r,NK,PK).then(e=>(e&&w.graphState&&(FZ={state:w.graphState,details:t,reason:w.bundleReason,issuesShown:n.issuesShown}),null)))}}}if(n&&!t.metadataOnly&&(P.bundleDetailsTab===`terminal`||P.bundleDetailsTab===`code`&&P.bundleCodeTerminal)){let e=document.querySelector(`#bundle-terminal-slot`);e&&ET(e,P.bundleDetails)}MX();let{npm:r,repository:i}=P.bundles.find(e=>e.integrity===P.selectedBundle)??{};document.title=r?`DeepView \u2014 ${r.name}@${r.version}`:i?`DeepView \u2014 ${SM(i)}`:`DeepView — bundles`;return}}if(P.currentView===`reviews`){let e=_Z(`dependency-reviews-slot`);e&&M(XW(()=>k`<dependency-review-list .session="${P.managedSession}"></dependency-review-list>`),e),MX(),document.title=`DeepView — my reviews`;return}if(P.currentView===`profile`){let e=_Z(`managed-profile-slot`);e&&M(k`<managed-profile .session="${P.managedSession}" .linkError="${P.profileLinkError}"></managed-profile>`,e),MX(),document.title=`DeepView — profile`;return}if(P.currentView===`npm`){let e=P.npmOpening,t=_Z(e?`bundles-slot`:`npm-slot`);t&&M(e?cJ(e):Jj(),t),MX(),document.title=e?`DeepView \u2014 ${oj(e.name,e.spec)}`:`DeepView — npm packages`;return}if(P.currentView===`repository-code`){let e=P.repositoryCodeOpening,t=_Z(`bundles-slot`);t&&e&&M(lJ(e),t),MX(),document.title=`DeepView \u2014 ${e?.repo??`code`}`;return}if(P.currentView===`packages`){let e=_Z(`packages-slot`);e&&M(PJ(),e),MX(),document.title=`DeepView — packages`;return}if(P.currentView===`repositories`){let e=_Z(`repositories-slot`);e&&M(YJ(),e),MX(),document.title=`DeepView — repositories`;return}if(P.currentView===`links`){if(P.currentLinks){let e=_Z(`links-slot`),t=ug();e&&M(k`${fY(VX())}${t?fZ(t.group,null,[],t):j}`,e),MX(),document.title=`DeepView \u2014 ${P.currentLinks.name}`;return}P.currentView=`findings`}if(P.currentView===`scan`&&customElements.get(`local-scan-page`)){let e=_Z(`scan-slot`);if(e&&!e.firstElementChild){let t=document.createElement(`local-scan-page`);t.selection=P.scanSelection,e.append(t),t.updateComplete.then(()=>hr(t.renderRoot,{gate:e=>!Object.hasOwn(e.dataset,`tooltipTruncated`)||e.scrollWidth>e.clientWidth}))}MX(),document.title=`DeepView — scans`;return}let r=bZ[P.currentView];if(r){let e=_Z(r.slot);e?.classList.add(`managed-page-slot`);let t=e?.firstElementChild?.session;if((t?.id!==P.managedSession?.id||t?.role!==P.managedSession?.role)&&e?.replaceChildren(),e&&!e.firstElementChild){let t=document.createElement(r.tag),n=e=>hr(e,{gate:e=>!Object.hasOwn(e.dataset,`tooltipTruncated`)||e.scrollWidth>e.clientWidth});t.localImportSource=up(),P.currentView===`manage-import`&&(t.localDeps=cp(),t.promptPassword=ht,t.resolveConflicts=pS,t.confirmTriageImport=Ve,t.confirmContentImport=ze,t.showTriageComparison=ot),t.session=P.managedSession,t.allowShare=P.managed?.allowShare===!0,P.currentView===`manage-scans`&&(t.selection=P.scanSelection),P.currentView===`manage-bundles`&&(t.createRepoId=P.bundleCreationRepoId,t.installTooltips=n),e.append(t),(async()=>{await customElements.whenDefined(r.tag),await t.updateComplete,n(t.renderRoot)})().catch(()=>{})}e?.firstElementChild&&(e.firstElementChild.session=P.managedSession,e.firstElementChild.allowShare=P.managed?.allowShare===!0),P.currentView===`manage-scans`&&e?.firstElementChild&&(e.firstElementChild.selection=P.scanSelection),P.currentView===`manage-bundles`&&e?.firstElementChild&&(e.firstElementChild.createRepoId=P.bundleCreationRepoId),MX(),document.title=r.title;return}if(P.reports.length===0){P.currentWorkspace&&document.querySelector(`#empty-workspace-slot`)&&yZ();return}let i=Xg(),a=P.viewMode===`kanban`,o={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},s=[],c=new Map;for(let e of i){let t=Lg(e);c.set(e,t);let n=t.commonTriage;n&&o[n]++,(a||n===P.shownTriage)&&s.push(e)}Object.defineProperty(s,"ruledOutIds",{value:i.ruledOutIds});let l=!1,u=!1,d=!1,f=!1;for(let e of i)for(let t of e){Mi(t)&&(f=!0);let e=Cg(t);Yh(t)&&(u=!0),e&&(e.comment&&(l=!0),e.fix&&(u=!0),e.flagged===!0&&(d=!0))}let p=e_(),m=i.some(e=>e.some(e=>p.has(e.id)));m||(P.filterDuplicates=``);let h=s.some(j_),g=s.some(M_);h||(P.filterCrossContext=``),g||(P.filterAppStacked=``);let _=P_(s);_||(P.filterSecurity=``);let v=new Set;for(let e of s)for(let t of e){let e=br(t);e&&v.add(e)}let{hasFoldedRows:y,hasPartialRow:b,hasRuledOutRow:ee}=TZ(Jg(),!!P.currentWorkspace),te=[...new Set(P.reports.map(e=>e.type))].join(`, `),ne=P.reports.map(e=>e.fileName),re=s.map(Eg).filter(e=>e.length>0),ie=re.length>0&&cr(re),{hasAnyPriority:ae,hasAnyModulesPath:oe,hasAnySourcePath:se,hasMultipleFiles:ce,repoInputUseful:le,knownRepo:ue,analyzerSet:de,modelSet:fe,analyzerOptions:pe,modelOptions:me}=CZ(i);if(P.filterAnalyzer){let e=P.filterAnalyzer===t_?null:P.filterAnalyzer;(!de.has(e)||de.size<2)&&(P.filterAnalyzer=``)}if(P.filterModel){let e=P.filterModel===r_?null:P.filterModel;(!fe.has(e)||fe.size<2)&&(P.filterModel=``)}let he=Mr(v);P.filterRevalidate&&!he.some(e=>e.value===P.filterRevalidate)&&(P.filterRevalidate=``);let ge=b_(s);ge&&(P.filterRevalidate=`confirmed`);let _e=v.has(`partial`)&&hg();_e||(P.filterPartial=``);let ve=t&&(y||b||!P.currentWorkspace&&ee),ye=!(t&&P.showRevalidation!==!1)&&!P.upstreamOnly&&oe&&se;!ye&&P.filterSources.size>0&&P.filterSources.clear(),ie||(P.filterConfMin=0,P.filterConfMax=10,(P.sortBy===`confidence-desc`||P.sortBy===`confidence-asc`)&&(P.sortBy=`severity`)),!ae&&(P.sortBy===`priority-desc`||P.sortBy===`priority-asc`)&&(P.sortBy=`severity`),!ce&&P.sortBy===`file`&&(P.sortBy=`severity`);let be=F_(s),xe={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Se={red:0,blue:0,green:0,gray:0,none:0};for(let e of be){if(e.length===1){let t=Ni(e[0],P.severityMode);xe[t]=(xe[t]||0)+1;let n=Cg(e[0])?.color??`none`;Se[n]=(Se[n]||0)+1;continue}let t=new Set(e.map(e=>Ni(e,P.severityMode)));for(let e of t)xe[e]=(xe[e]||0)+1;let n=new Set(e.map(e=>Cg(e)?.color??`none`));for(let e of n)Se[e]=(Se[e]||0)+1}let Ce=s_(be),we=[...Ce].toSorted(xZ);if(P.filterRepo){let e=P.filterRepo===n_?null:P.filterRepo;Ce.has(e)||(P.filterRepo=``)}let Te=V_(I_(s)),Ee=Sr(P.reports),De=Ee?Object.keys(Ee).length:0,Oe=De>1;!Oe&&P.currentView===`files`&&(P.currentView=`findings`),!Oe&&P.viewMode===`graph`&&(P.viewMode=`kanban`);let ke=RX(i,ne,le,ue,De);if(P.currentView===`files`){let e=xr(i,P.severityMode),t=document.querySelector(`#header-slot`),n=document.querySelector(`#tree-view-slot`);(!t||!n||!R.contains(t)||!R.contains(n))&&(t=gZ(`header-slot`),n=gZ(`tree-view-slot`),R.replaceChildren(t,n)),t&&M(ke,t),n&&M(uT(Ee,e),n),MX(),document.title=`DeepView \u2014 ${te||`no analyzer`}`;return}let Ae=P.viewMode===`table`&&P.tableSelectedGid&&Te.some(e=>V(e)===P.tableSelectedGid),je=null;P.viewMode===`graph`&&Ee&&(je=NX(),je||(P.viewMode=`kanban`));let Me=!!je,Ne=`findings-content`;Ae&&(Ne+=` with-details`),Me&&(Ne+=` with-graph`),a&&(Ne+=` with-kanban`),P.viewMode===`focus`&&(Ne+=` with-focus`);let Pe=j,Fe=j,Ie=j,Le=_Y(Te,P,eZ);$X=null,Me||(Pe=XX(Te.length,s.length,o,xe,Se,{showSource:ye,showConfidence:ie,showPriority:ae,showGraphMode:Oe,showFileSort:ce,kanbanMode:a,showRepo:!!P.currentWorkspace,hasComment:l,revalidateOptions:he,showPartial:_e,canDropLayer:t,canDetailLayer:ve,canUpstreamLens:n,confirmedLocked:ge,hasFix:u,hasFlagged:d,hasDuplicates:m,hasCrossContext:h,hasAppStacked:g,showSecurity:_,showSeverityMode:f||P.severityMode===`original`},{analyzers:pe,models:me,groups:be},we),P.shownTriage&&s.length===0?Fe=k`<p style="${E({color:`var(--muted)`,margin:`1rem 0`})}">No ${P.shownTriage} findings.</p>`:Te.length===0&&s.length>0&&!a?Fe=k`<p style="${E({color:`var(--muted)`,margin:`1rem 0`})}">No findings match the current filters.</p>`:s.length===0&&(Fe=i.length>0?k`<p style="${E({color:`var(--green)`})}">All ${te} issues triaged.</p>`:k`<p style="${E({color:`var(--green)`})}">No ${te} issues found.</p>`),Ie=pZ(Te,Le,c));let Re=document.querySelector(`#header-slot`),Be=R.querySelector(`:scope > .findings-content`),He=Be&&Be.querySelector(`:scope > #findings-graph-slot`),Ue=Be&&Be.querySelector(`:scope > #findings-body-slot`),We=Be&&(He?`graph`:Ue?`body`:null)===(Me?`graph`:`body`);!Re||!Be||!R.contains(Re)||!R.contains(Be)||!We?(Re=gZ(`header-slot`),Be=Object.assign(document.createElement(`div`),{className:Ne}),Be.append(...Me?[gZ(`findings-graph-slot`)]:[gZ(`toolbar-slot`),gZ(`empty-state-slot`),gZ(`findings-body-slot`)]),R.replaceChildren(Re,Be)):Be.className!==Ne&&(Be.className=Ne),Re&&M(ke,Re);let Ge=document.querySelector(`#toolbar-slot`);Ge&&M(Pe,Ge);let Ke=document.querySelector(`#empty-state-slot`);Ke&&M(Fe,Ke);let qe=document.querySelector(`#findings-body-slot`);if(qe&&M(Ie,qe),je){let e=document.querySelector(`#findings-graph-slot`);if(e){let t={extraTopRow:k`<view-mode-buttons modes="kanban,focus,table,list,grouped,graph"></view-mode-buttons>`,triageCounts:o,triageStates:[`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`]};yT(e,je,t,PX,FX)}}if($X){let e=R.querySelector(`.finding-table-slot`);e&&(tZ||=document.createElement(`finding-table`),tZ.items=$X,tZ.selectedGid=P.tableSelectedGid,tZ.parentNode!==e&&e.append(tZ))}MX(),document.title=`DeepView \u2014 ${te||`no analyzer`}`,F()&&U?.replaceFindingRoute(vY(Le,P))}var LZ=new Map,RZ=new Map,zZ=new Map,BZ=new WeakMap;async function VZ(e){try{let t=await ul(e);return t?Qt(t,e):null}catch{return null}}var HZ=null;function UZ(e){let t=new Map(e.filter(e=>e&&!e.error).map(e=>[e.integrity,e]));return HZ=t.size>0?{bundles:t}:null,HZ}function WZ(e){HZ===e&&(HZ=null)}function GZ(e,t=()=>!0){let n=HZ?.bundles.get(e);return!n||!t(n)?null:(HZ.bundles.delete(e),HZ.bundles.size===0&&(HZ=null),n)}function KZ(e,t,{sources:n=!0}={}){if(!t.managedId&&F())return Promise.reject(new DOMException(`Local bundle closed`,`AbortError`));let r=n?LZ:RZ,i=t.name.toLowerCase().endsWith(`.map`)?`sourcemap`:`stasis`,a=P.bundleDetails;if(a?.integrity===e&&a.kind===i&&a.managedId===t.managedId&&!a.error&&(!n||!a.metadataOnly))return Promise.resolve(a);let o=GZ(e,e=>e.kind===i&&e.managedId===t.managedId&&(!n||!e.metadataOnly));if(o)return Promise.resolve(o);let s=`${t.managedId??`local`}:${e}:${i}`,c=t.managedId&&n?J_():void 0,l=r.get(s);if(l&&l.signal===c)return l.job;let u=(async()=>{if(t.managedId)try{let r=n?$t(await px(t.managedId,{signal:c}),{integrity:e,kind:i,size:t.size}):Qt(await fx(t.managedId),e);return r.managedId=t.managedId,r}catch(n){if(n.name===`AbortError`)throw n;return{integrity:e,kind:i,size:t.size,managedId:t.managedId,error:n.message}}if(!n){let n=await VZ(e);return n?.kind===i&&!n.stale?n:KZ(e,t)}let[r,a]=await Promise.all([YZ(e,t),VZ(e)]);if(!r.error){let t=a?.kind===r.kind&&!a.stale;t&&(r.fileHashes=a.fileHashes,r.fileSizes=a.fileSizes,r.lineCounts=a.lineCounts),t||Zt(r).then(t=>dl(e,t)).catch(()=>{})}return r})();return r.set(s,{job:u,signal:c}),u.finally(()=>{r.get(s)?.job===u&&r.delete(s)}).catch(()=>{}),u}function qZ(e,t=P.currentView===`bundles`?P.bundleDetailsTab:`overview`,{workspaceId:n=null}={}){let r=P.bundleDetails,i=P.bundleCodeFileRequest,a=i?.bundle===P.selectedBundle&&(!r||r.metadataOnly===!0&&!r.sourceError),o=P.currentView===`bundles`&&P.bundleDetailsTab===`code`&&t===`code`?P.bundleSourceFile??(a?i.path:null):null;Y_(),P.currentView=`bundles`,P.selectedBundle=e,P.selectedBundleWorkspace=n,P.bundleDetails=null,P.bundleSourceFile=null,P.bundleCodeHistory=null,P.bundleCodeFileRequest=o?{bundle:e,path:o}:null,P.bundleCompare=null,P.bundleSourceFindingIdx=null,P.bundleCodeSearchQuery=``,P.bundleCodeSearchMode=`files`,P.bundleSearchQuery=``,P.bundleSearchRegex=!1,P.bundleSearchCase=!1,P.bundleSearchContext=!0,P.bundleDetailsTab=t??`overview`,w.showAll=!0,P.shownTriage=null}function JZ(e,{preserveSource:t=!1}={}){qt(P.bundleDetailsTab,P.bundleSourceFile)&&!qt(e,t?P.bundleSourceFile:null)&&Y_(),P.bundleDetailsTab=e,P.bundleCodeFileRequest=null,t||(P.bundleSourceFile=null,P.bundleCodeHistory=null),P.bundleSourceFindingIdx=null}async function YZ(e,t){try{let n=await ll(e);if(F())throw new DOMException(`Local bundle closed`,`AbortError`);let r=t.name.toLowerCase().endsWith(`.map`),i=r?`sourcemap`:`stasis`;try{if(r)return $t(pa(n),{integrity:e,kind:i,size:n.byteLength});let t=pa(await Km(n,()=>!F())),a=Ft.parse(t);return{integrity:e,kind:i,size:n.byteLength,bundle:a}}catch(t){if(t.name===`AbortError`)throw t;return{integrity:e,kind:i,size:n.byteLength,error:t.message}}}catch(t){if(t.name===`AbortError`)throw t;return{integrity:e,error:t.message,size:0}}}function XZ(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Wf(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Jt(e);if(Wf(e.integrity,t),P.bundleDetails!==e)return;e.fileHashes=t,Z()}catch{}})()}}function ZZ(e){if(Xf(e))return Promise.resolve();if(zZ.has(e))return zZ.get(e);let t=(P.bundles??[]).find(t=>t.integrity===e);if(!t||t.managedId)return Promise.resolve();let n=(async()=>{let t=await VZ(e);if(t?.json||t?.bundle)try{Wf(e,await Jt(t))}catch{}})();return zZ.set(e,n),n.finally(()=>{zZ.get(e)===n&&zZ.delete(e)}).catch(()=>{}),n}async function QZ(e,t=()=>!0){let n=new Set(e);if(n.size!==0){await new Promise(e=>{let t=()=>setTimeout(e,0);typeof requestAnimationFrame==`function`?requestAnimationFrame(t):t()});for(let e of n){if(!t())return;await ZZ(e)}}}async function $Z(e){let t=(P.bundles??[]).find(t=>t.integrity===e);if(!t)return;let n;try{n=await KZ(e,t,{sources:qt(P.bundleDetailsTab,P.bundleSourceFile)})}catch(e){if(e.name===`AbortError`)return;throw e}P.selectedBundle!==e||t.managedId&&!P.bundles.includes(t)||(P.bundleDetails=n,Z(),XZ(n),t.managedId||If().catch(()=>{}))}function eQ(e=P.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?J_():void 0,n=BZ.get(e);if(n&&n.signal===t)return n.job;let r=(P.bundles??[]).find(t=>t.integrity===e.integrity);if(!r)return Promise.resolve(null);let i=KZ(e.integrity,r).then(n=>(t?.throwIfAborted(),P.bundleDetails===e?n.error&&e.managedId?(e.sourceError=n.error,Z(),null):(n.error||(n.fileHashes=e.fileHashes,n.fileSizes=e.fileSizes,n.lineCounts=e.lineCounts,n.codeStats=e.codeStats,e.edges&&(n.edges=e.edges)),P.bundleDetails=n,Z(),n):n)).catch(e=>{if(e.name===`AbortError`)return null;throw e});return BZ.set(e,{job:i,signal:t}),i.finally(()=>{BZ.get(e)?.job===i&&BZ.delete(e)}).catch(()=>{}),i}async function tQ({bundleId:e,teamId:t,bundleTab:n,file:r,line:i,endLine:a,compareId:o,compareMode:s},c,l,u){let d=c.find(t=>t.managedId===e);if(!d||!l()||!F())return!1;let f=GZ(d.integrity,t=>t.managedId===e),p=P.bundleDetails?.managedId===e&&P.bundleDetails.integrity===d.integrity&&!P.bundleDetails.error?P.bundleDetails:null;try{P.bundles=c,sr(),qZ(d.integrity,n),n===`code`&&r!=null&&(P.bundleCodeFileRequest={bundle:d.integrity,file:r,...i==null?{}:{line:i},...a==null?{}:{endLine:a}});let e=n===`compare`&&o!=null?Ox(c,d.integrity).find(e=>e.managedId===o):null;e&&(P.bundleCompare={bundle:d.integrity,target:e.integrity,mode:ni(s)}),P.bundleDetails=f??p,P.currentManagedTeam=t,P.currentManagedReport=null,P.reports=[],document.body.classList.remove(`report-fullscreen`),Z({animate:!1}),u(),document.querySelector(`#main-content`)?.scrollTo({top:0})}catch(e){return l()&&e.name!==`AbortError`&&Ex(`Couldn't open bundle: ${e.message}`,{kind:`error`}),!1}let m=P.bundleDetails,h=()=>F()&&P.currentView===`bundles`&&P.selectedBundle===d.integrity&&P.bundles.some(t=>t.managedId===e&&t.integrity===d.integrity)&&P.bundleDetails===m,g=(t,n)=>(t?.name===`AbortError`||(l()?n&&Ex(`Couldn't open bundle: ${t.message}`,{kind:`error`}):h()&&(P.bundleDetails={integrity:d.integrity,kind:d.kind,size:d.size,managedId:e,error:t.message},Z())),!1),_=H(),v;for(;;){let t=J_();try{v=await fx(e,{signal:t});break}catch(e){if(e?.name===`AbortError`&&t.aborted&&h())continue;return g(e,!1)}}try{if(v.integrity!==d.integrity)throw Error(`the metadata is for another version of this bundle`);if(h()){let t=Qt(v,v.integrity),n=f?.integrity===t.integrity?Object.assign(f,{fileHashes:t.fileHashes,fileSizes:t.fileSizes,lineCounts:t.lineCounts,codeStats:t.codeStats},t.edges?{edges:t.edges}:{}):t;n.managedId=e,P.bundleDetails=n,Z({animate:!1})}return l()&&_===H()&&P.bundleDetails?.managedId===e&&P.selectedBundle===d.integrity}catch(e){return g(e,!0)}}function nQ(e){let t=1/0,n=Date.now()+5e3;for(let r of e)for(let e of r.bundles??[])[`stasis`,`sourcemap`].includes(e.kind)&&e.summary==null&&(t=Math.min(t,Math.max(n,e.summaryRetryAt??0)));return t}function rQ(e){let t=null,n=null,r=null;return async({generation:i,session:a,signal:o,reuse:s=!1,revision:c=null})=>{if(o.aborted)return null;let l=JSON.stringify([i,a?.id,a?.role,a?.csrfToken]);if(r!==l&&(t?.controller.abort(),t=null,n=null,r=l),n&&Date.now()<n.expiresAt&&(s||c!==null&&c===n.revision))return n.teams;if(!t||t.signal.aborted||c!==null&&t.revision!==c){t?.controller.abort(),n=null;let i=new AbortController,a=AbortSignal.any([o,i.signal]),s={controller:i,signal:a,promise:null,revision:c};t=s;let u=null;s.promise=e({fallback:null,signal:a,onRevision:e=>{u=e}}).then(e=>a.aborted||r!==l?null:(e!==null&&(n={teams:e,revision:u,expiresAt:nQ(e)}),e)).finally(()=>{t===s&&(t=null)})}let u=t,d=()=>u.controller.abort();o.addEventListener(`abort`,d,{once:!0});try{let e=await u.promise;return o.aborted||u.signal.aborted?null:e}finally{o.removeEventListener(`abort`,d)}}}function iQ(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(e=>Array.from(e)[0]).join(``);return/^\p{Ll}/u.test(n)?n:n.toUpperCase()}var aQ=`*,*: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}}}:host-context(body.theme-w95) .sidebar-header{position:fixed;z-index:1;top:calc(var(--w95-gap) + var(--w95-frame));right:calc(var(--w95-gap) + var(--w95-frame) + var(--wco-right-toolbar, 0px));left:calc(var(--w95-gap) + var(--w95-frame));height:var(--w95-title-height);min-height:0;justify-content:normal;gap:0;padding:0 20px 0 max(2px,env(titlebar-area-x,0px) - var(--w95-gap) - var(--w95-frame));background:var(--w95-title);color:#fff;.brand{display:flex;gap:4px;margin-right:4px;font-size:11px;letter-spacing:0;&:before{content:"";flex:none;width:16px;height:16px;background:url(./icon.svg) center / contain no-repeat}}.brand-button:focus-visible{outline:1px dotted #fff;outline-offset:1px}.brand-tag{padding:0;color:inherit;font-size:inherit;font-weight:inherit;letter-spacing:0;&:before{content:"- " / ""}&[role=button]:hover{color:inherit;background:none}&:focus-visible{outline:1px dotted #fff;outline-offset:1px}}:is(#encryption-toggle,#sidebar-toggle){display:grid;width:16px;height:14px;background:var(--w95-face);box-shadow:var(--w95-raised);-webkit-app-region:no-drag;app-region:no-drag;& svg{display:none}&:active{box-shadow:var(--w95-pressed)}&:focus-visible{outline:1px dotted #000;outline-offset:-4px}}#sidebar-toggle{background:var(--w95-glyph-maximize),var(--w95-face)}#encryption-toggle{background:var(--w95-glyph-unlock),var(--w95-face)}#encryption-toggle:is(.encrypted,.locked-pending){background:var(--w95-glyph-lock),var(--w95-face)}}:host-context(body.theme-w95):host(.collapsed) .sidebar-header #sidebar-toggle{background:var(--w95-glyph-restore),var(--w95-face)}:host-context(body.theme-w95) .sidebar-actions{position:fixed;z-index:1;right:calc(var(--w95-gap) + var(--w95-frame));bottom:calc(var(--w95-gap) + var(--w95-frame));left:calc(var(--w95-gap) + var(--w95-frame));height:var(--w95-status-height);flex-direction:row;justify-content:normal;gap:2px;padding:0;border-top:0;& sidebar-delete-current{display:contents}:is(button,#sync-status,#auth-status,#manage-status,#public-status){display:inline-flex;align-items:center;gap:4px;width:auto;height:100%;max-width:none;padding:0 6px;border:0;background:none;color:var(--text);box-shadow:var(--w95-status);font-size:11px;&:hover{background:none;color:var(--text)}&:active{box-shadow:inset 1px 1px #000,inset -1px -1px #fff;opacity:1}&[hidden]{display:none}}:is(#sync-status,#auth-status){order:-1}#manage-status{order:2}&:after{content:"";flex:1;order:1;align-self:stretch;box-shadow:var(--w95-status)}#sync-status .sync-label{display:inline}}#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}}:host-context(body.theme-w95){.sidebar-search{margin:2px 2px 4px;border:0;background:#fff;box-shadow:var(--w95-sunken);&:has(input:focus){background:#fff}& input{font-size:11px}}.file-group-header{padding-top:.35rem;font-size:11px;color:#000;text-transform:none;letter-spacing:0}.file-item button.file-name{font-size:11px}.file-item.indented:before{background:none;border-left:1px dotted var(--w95-shadow)}#storage-status{border-color:#000;background:var(--w95-tooltip);color:#000;&:hover{border-color:#000;background:var(--w95-tooltip)}}#file-list{padding-right:0;scrollbar-width:auto;scrollbar-color:auto}::-webkit-scrollbar,#file-list::-webkit-scrollbar{width:16px;height:16px;background:var(--w95-dither)}::-webkit-scrollbar-thumb,#file-list::-webkit-scrollbar-thumb{background:var(--w95-face);border-radius:0;box-shadow:var(--w95-raised)}}:host-context(body.theme-w95) ::-webkit-scrollbar-button:single-button{display:block;width:16px;height:16px;background:var(--w95-arrow-down),var(--w95-face);box-shadow:var(--w95-raised)}:host-context(body.theme-w95) ::-webkit-scrollbar-button:single-button:vertical:decrement{background:var(--w95-arrow-up),var(--w95-face)}:host-context(body.theme-w95) .file-item.current{--text: #fff;--muted: var(--w95-light);&:after{display:none}&:is(.workspace-item,.team-item),&:not(.workspace-item,.team-item) button.file-name{background:var(--w95-title);border-color:transparent;box-shadow: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,:host-context(body.theme-w95) .workspace-rename-input,:host-context(body.theme-w95) .file-item button.file-name .file-label,:host-context(body.theme-w95) .file-item.bundle-missing .file-label,:host-context(body.theme-w95) .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)}:host-context(body.theme-w95) *{overscroll-behavior:none}
|
|
192
|
+
`,oQ=`: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)}
|
|
193
|
+
`,sQ=null,cQ=null,lQ=!1,uQ=!1,dQ=0;function fQ(){let e=navigator.userAgent;return/AppleWebKit/u.test(e)&&!/Chrome\/|Chromium|Edg\/|OPR\/|Android/u.test(e)?`webkit`:/Firefox\//u.test(e)?`firefox`:`chromium`}function pQ(){return fQ()===`webkit`}function mQ(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 hQ(){if(!sQ)return;if(F()||!cQ||cQ.persisted!==!1||!lQ){sQ.hidden=!0;return}sQ.hidden=!1;let e=cQ.usage===null||cQ.quota===null?``:` Using ${mQ(cQ.usage)} of ${mQ(cQ.quota)}.`;sQ.querySelector(`.storage-label`).textContent=`Storage at risk`,sQ.dataset.tooltip=`Reports, bundles and triage are in best-effort storage — the browser may delete them all under disk pressure or after long inactivity. `+(pQ()?`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 — if the browser declines, instructions for enabling it follow.`)+e}function gQ(e,t){let n=t?` (user gesture)`:``;if(e){console.info(`storage: persistent-storage request granted${n}`);return}let r=!pQ()&&location.hostname===`localhost`?` Note: plain localhost can NEVER pass — 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 `+(pQ()?`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 _Q(){if(await $1(),!sQ||F()){hQ();return}let[e,t]=await Promise.all([pp(),(async()=>{try{return(await Rc()).length>0||await il()}catch{return!1}})()]);cQ=e,lQ=t,hQ()}function vQ(){!sQ||dQ||(dQ=setTimeout(()=>{dQ=0,_Q()},1e3))}async function yQ(){uQ||(await _Q(),F()||cQ?.persisted!==!1||!lQ||uQ)||(uQ=!0,gQ(await fp(),!1),await _Q())}async function bQ(){if(cQ&&cQ.persisted===!1){uQ=!0;let e=await fp();gQ(e,!0),e||await $e()}await _Q()}function xQ(e){sQ=e,sQ&&(sQ.addEventListener(`click`,()=>{bQ()}),Ic((e,t)=>{vQ(),t===`save`&&yQ()}),yQ())}function SQ(e){let t=document.querySelector(`#landing-workspaces`);if(!t)return;let n=e.filter(e=>e.reports.length>0||e.bundles?.length>0).toSorted((e,t)=>t.reports.length-e.reports.length||e.name.localeCompare(t.name)).slice(0,5);M(n.length>0?k`<nav class="landing-workspaces" aria-label="Workspaces"><div class="landing-workspace-row">${D(n,e=>e.id,e=>{let t=Cm(e),n=e.reports.filter(e=>Pu(e)!==y).length;return k`<button type="button" class="landing-workspace" data-landing-workspace="${e.id}">${O(Qi)} <span class="landing-workspace-text"><span class="landing-workspace-name">${e.name}</span> <span class="landing-workspace-count">${t?.appMode?`${t.appFindings.toLocaleString()} finding${t.appFindings===1?``:`s`} \xB7 `:``}${n.toLocaleString()} report${n===1?``:`s`}</span></span></button>`})}</div></nav>`:j,t)}var CQ=null;function wQ(e){return{reports:e.reports.filter(e=>e?.analyzer!==`links`).length,bundles:e.bundles?.length??0,repositories:new Set((e.repos??[]).map(e=>e.repoId)).size}}function TQ(e){let t=(e,t,n=`${t}s`)=>`${e.toLocaleString()} ${e===1?t:n}`,n=CY(e.app),{reports:r,bundles:i,repositories:a}=wQ(e);return[n==null?null:t(n,`finding`),r?t(r,`report`):null,i?t(i,`bundle`):null,a?t(a,`repository`,`repositories`):null].filter(Boolean).join(` · `)}function EQ(e){let{serverMode:t,session:n,sessionPending:r=!1,teamsPending:i=!1,teams:a=[],alternateMode:o=`local`,onSwitchMode:s}=e,c=document.querySelector(`#drop-zone`),l=c?.querySelector(`.managed-landing`);if(!l)return;let u=t===`managed`,d=t===`local`,f=u&&(n?n.role!==`none`&&i:r);f?CQ?CQ.options=e:CQ={options:e,elapsed:!1,timer:setTimeout(()=>{CQ.elapsed=!0,EQ(CQ.options)},1e3)}:(clearTimeout(CQ?.timer),CQ=null);let p=f&&!CQ.elapsed;c.dataset.serverMode=u?`managed`:`local`,c.setAttribute(`aria-label`,u?p?n?`Loading teams`:`Loading session`:n?.role===`none`?`No workspace access`:n?`Team findings`:`Log in`:`Drop reports here`);let m=c.querySelector(`.drop-local-copy`);if(m&&(m.textContent=d?`Review locally in your browser.`:`Review locally in your browser. Sync across devices when you need it.`),!u||p){M(j,l);return}let h=n?.role===`admin`||n?.role===`manage`,g=a.filter(e=>Object.values(wQ(e)).some(Boolean));if(Qe()&&!n){M(k`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,l);return}M(n==null?k`<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="${s}">${o} mode</button></div></section>`:n.role===`none`?k`<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>`:k`<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">${g.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>${g.length>0?k`<nav class="managed-team-list" aria-label="Teams">${D(g,e=>e.id,e=>k`<button type="button" class="managed-team-button" data-managed-team="${e.id}"><span class="managed-team-icon" aria-hidden="true">${O(Qi)}</span> <span class="managed-team-copy"><strong>${e.name}</strong> <span>${TQ(e)}</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>`:k`<p class="managed-landing-empty">No team reports are available yet.</p>`}<nav class="managed-content-links" aria-label="Content and activity">${[...h?[[`manage-bundles`,`Bundles`,Xi],[`manage-scans`,`Scans`,na],[`manage-reports`,`Reports`,ra]]:[],[`npm`,`npm packages`,Zi]].map(([e,t,n])=>k`<button type="button" class="managed-content-card" data-managed-page="${e}"><span class="managed-content-icon" aria-hidden="true">${O(n)}</span> <span>${t}</span></button>`)}</nav>${h?k`<div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${O(ea)}</span><span>Manage</span></button></div>`:j}`,l)}async function DQ(e){await dt({workspace:e})}var OQ=class extends Tv{focusInitial(){this.renderRoot.querySelector(`button.primary`)?.focus()}_onReload=()=>this._finish(`reload`);render(){return k`<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`,OQ);function kQ(){return new Promise(e=>{let t=document.createElement(`proxy-auth-dialog`);t.exclusive=!0;let n=(n,r)=>{t.remove(),e({shown:n,reload:r})};t.addEventListener(`resolve`,e=>n(!0,e.detail===`reload`)),t.addEventListener(`modal-conflict`,()=>n(!1,!1)),document.body.append(t)})}async function AQ(e,{openManagedReport:t,readTeam:n=mx,isCurrent:r=()=>!0}){let i=P.managedSession,a=()=>r()&&F()&&P.managedSession?.id===i?.id&&P.managedSession?.role===i?.role,o=P.managedTeams;if(!a())return null;async function s(n,r){return!a()||(P.currentManagedTeam!==n.id||P.currentManagedReport!==r)&&!await t(n,r)||!a()||P.currentManagedTeam!==n.id||P.currentManagedReport!==r?null:RC(e.id)}if(e.teamId){let t=o.find(t=>t.id===e.teamId);return!t||e.reportId&&!t.reports.some(t=>t.id===e.reportId)?null:s(t,e.reportId??null)}let c=o.flatMap(e=>e.reports.map(t=>({team:e,report:t}))),l=new Set,u=new Map;async function d(t){for(let{team:r,report:i}of t){if(!a())return null;if(l.has(`${r.id}:${i.id}`))continue;l.add(`${r.id}:${i.id}`),u.has(r.id)||u.set(r.id,await n(r.id));let t=u.get(r.id)?.find(e=>e.id===i.id);if(!a())return null;if(t==null)continue;let o=await re(JSON.stringify(t.data),i.filename);if(!a())return null;if(o?.findings.some(t=>t.id===e.id))return s(r,i.id)}return null}if(e.report){let t=await Promise.all(c.map(({report:e})=>zr(`report`,e.filename))),n=await d(c.filter((n,r)=>t[r]===e.report));if(n||!a())return n}if(e.workspace){let t=o[(await Promise.all(o.map(e=>zr(`workspace`,`managed-team:${e.id}`)))).indexOf(e.workspace)];if(t){let e=await s(t,null);if(e||!a())return e}}if(!a())return null;let f=o.find(e=>e.id===P.currentManagedTeam);if(f&&(P.currentManagedReport==null||f.reports.some(e=>e.id===P.currentManagedReport))){let t=RC(e.id);if(t)return t}return d(c)}async function jQ(e,t,n,{openReport:r,openManagedReport:i}){if(F()){let e=P.managedTeams.find(e=>e.id===P.currentManagedTeam);if(!n||!e?.reports.some(e=>e.id===n)||(P.currentManagedReport!==n||P.currentWorkspace)&&!await i(e,n)||!F()||P.currentManagedTeam!==e.id||P.currentManagedReport!==n||P.currentWorkspace)return null}else if(n||((P.currentFile!==t||P.currentWorkspace)&&await r(t),F()||P.currentFile!==t||P.currentWorkspace))return null;return RC(e)}async function MQ(e,t){if(F())return AQ(e,t);let{openReport:n,openWorkspace:r}=t,[i,a]=await Promise.all([Qf(e.report),Zf(e.workspace)]);async function o(t){let r=LC(t,a?.id);return(P.currentFile!==t||P.currentWorkspace||P.currentReportWorkspace!==r)&&await n(t,void 0,{workspaceId:r}),RC(e.id)}if(i){let e=await o(i);if(e)return e}if(a){P.currentWorkspace!==a.id&&await r(a.id);let t=RC(e.id);if(t)return t}let s=RC(e.id);if(s)return s;let c=P.reports.map(e=>e.fileName).filter(Boolean),l=await ep(e.id,{skip:c});return l?await o(l):null}var NQ=1600,PQ=`link-target`,FQ=`Couldn't find that finding in any of your reports. Import the report it came from, then open the link again.`,IQ=null,LQ=3,RQ=150,zQ=5;function BQ(e){IQ!==null&&clearTimeout(IQ);for(let e of document.querySelectorAll(`.${PQ}`))e.classList.remove(PQ);e.classList.add(PQ),IQ=setTimeout(()=>{e.classList.remove(PQ),IQ=null},NQ)}function VQ(e){return new Promise(t=>{let n=null,r=0,i=0,a=()=>{let o=Math.round(e.getBoundingClientRect().top);r=o===n?r+1:0,n=o,r>=LQ||++i>=RQ?t():requestAnimationFrame(a)};requestAnimationFrame(a)})}function HQ(e){let t=0,n=window.innerHeight,r=mN(e);if(r){let e=r.getBoundingClientRect();t=Math.max(t,e.top),n=Math.min(n,e.bottom)}return{top:t,bottom:n}}function UQ(e){let t=e.getBoundingClientRect();if(t.height===0)return!1;let{top:n,bottom:r}=HQ(e);if(r<=n)return!1;let i=(n+r)/2;return t.top>=n&&t.bottom<=r||t.top<=i&&t.bottom>=i}async function WQ(e){e.scrollIntoView({block:`center`,behavior:`smooth`});for(let t=0;t<zQ;t++){if(await VQ(e),!e.isConnected||UQ(e))return;e.scrollIntoView({block:`center`,behavior:`instant`})}}async function GQ(e){let t=CSS.escape(e);if(P.viewMode===`table`){let t=R.querySelector(`finding-table`);if(t){try{await t.updateComplete}catch{}for(let n of t.shadowRoot?.querySelectorAll(`finding-row`)??[])if(n.group&&V(n.group)===e)return n}}if(P.viewMode===`kanban`){let e=R.querySelector(`.kanban-card[data-gid="${t}"]`);if(e)return e}return R.querySelector(`finding-card[data-gid="${t}"]`)??R.querySelector(`[data-gid="${t}"]`)}async function KQ(e,t,n=()=>!0){let r=zC(e.group,t),i=$g(r);if(i&&Ug(i)&&queueMicrotask(Cd),Z(),await $({revealSelection:!0}),!n())return{ok:!1};let a=await GQ(r);return n()?a?(typeof a.ensureRendered==`function`&&await a.ensureRendered(),await WQ(a),n()?(BQ(a),{ok:!0}):{ok:!1}):{ok:!0}:{ok:!1}}async function qQ(e,{openManagedReport:t=AW,isCurrent:n=()=>!0}={}){if(!e?.id)return{ok:!1,reason:`This link is missing a finding id.`};let r=await MQ(e,{openReport:DW,openWorkspace:jW,openManagedReport:t,isCurrent:n});return n()?r?await KQ(r,e.id,n):{ok:!1,reason:F()?`Couldn't find that finding in the team reports you can access.`:FQ}:{ok:!1}}async function JQ(e,t,n=null){if(!e||!t)return{ok:!1,reason:`Missing finding id or report name.`};let r=await jQ(e,t,n,{openReport:DW,openManagedReport:AW});return r?await KQ(r,e):{ok:!1,reason:n?`Could not open that finding in "${t}". Open the team and try again.`:`Couldn't find that finding in "${t}". It may have been re-imported since this links file was written.`}}var YQ=null,Q=null,XQ=null;function ZQ(e){let t=document.querySelector(`#drop-zone`);t&&(e?t.dataset.serverModePending=`true`:delete t.dataset.serverModePending)}_r();function QQ(){return wf().size}function $Q(){return Tf().size}var e$=typeof location>`u`||location.hostname.endsWith(`.github.io`)?``:`${location.protocol===`https:`?`wss:`:`ws:`}//${location.host}/api/sync`,t$=`application/x-deepview-report`,n$=`application/x-deepview-source-ws`,r$=`application/x-deepview-bundle`,i$=!1,a$=!1,o$={default:`Reports`,"claude-security":`Claude Security`,"codex-security":`Codex Security`,deepsec:`DeepSec`,piolium:`Piolium`,"markdown-generic":`Markdown (generic)`,[y]:`Links`},s$=[`default`,`claude-security`,`codex-security`,`deepsec`,`piolium`,`markdown-generic`,y],c$=``,l$=!1,u$=new Map,d$=``,f$=new wY;function p$(e,t){let n=P.currentView===`bundles`?P.selectedBundle:null,r=[`findings`,`files`,`links`].includes(P.currentView)?P.currentFile:null,i=n?`bundles`:`reports`,a=r?LC(r):null,o=e.filter(e=>n?e.bundles.includes(n):e.id===a),s=JSON.stringify([i,n||r,o.map(e=>e.id)]);if(t||s!==d$){d$=s;for(let e of o){let t=u$.get(e.id)??new Set;t.add(i),u$.set(e.id,t)}}}function m$(e,t={}){let n=`file-item${h$(e,t.workspaceId??null)?` current`:``}${t.indented?` indented`:``}`,r=x(e),i=Nu(e),a=zx[Ux(e)]??zx.default;return k`<li class="${n}" data-file="${e}" data-workspace-id="${t.workspaceId??j}" draggable="true"><button type="button" class="file-name" data-tooltip="${r}">${O(a)}<span class="file-label">${r}</span>${i===void 0?j:k`<span class="file-count">${i}</span>`}</button></li>`}function h$(e,t){return e===P.currentFile&&t===LC(e)&&(P.currentView===`findings`||P.currentView===`files`||P.currentView===`links`)}function g$(e,t={}){let n=`file-group-header${t.dropTarget?` default-reports`:``}`;return k`<li class="${n}" data-default-reports="${t.dropTarget?`true`:j}"><span class="group-label">${e}</span></li>`}var _$=k`<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>`,v$=k`<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 y$(){return k`<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">${_$}</button></span></li>`}function b$(){let e=xY(P.managedTeams,c$);return e.length===0?j:k`${g$(`Teams`)} ${D(e,({team:e})=>e.id,({team:e,reports:t,bundles:n})=>{let r=e.app,i=SY(r,(e.reports??[]).filter(e=>e.analyzer!==y).length),a=f$.shown(e.id,`reports`,i,l$),o=f$.shown(e.id,`bundles`,i,l$),s=t.filter(e=>e.analyzer!==y).length,c=CY(r);return k`<li class="${`file-item team-item${w$(e)?` current`:``}`}" data-team-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name" @click="${()=>{AW(e)}}">${L$}<span class="file-label">${e.name}</span></button> ${P.managed?.allowShare&&[`admin`,`manage`].includes(P.managedSession?.role)?k`<button type="button" class="workspace-share" aria-label="${`Share ${e.name} publicly`}" @click="${()=>{Xb(e)}}">${B$}</button>`:j}</div>${i?k`<div class="workspace-meta">${c===null?j:k`<span class="workspace-findings">${c.toLocaleString()} finding${c===1?``:`s`}</span>`} <span class="workspace-sections" role="group" aria-label="Team files"><button type="button" data-team-section="reports" aria-expanded="${String(a)}" ?disabled="${l$}">${s.toLocaleString()} report${s===1?``:`s`}</button> ${n.length>0?k`<button type="button" data-team-section="bundles" aria-expanded="${String(o)}" ?disabled="${l$}">${n.length.toLocaleString()} bundle${n.length===1?``:`s`}</button>`:j}</span></div>`:j}</li>${a?D(t,e=>e.id,t=>D$(e,t)):j} ${o?D(n,e=>e.id,t=>k$(e,t)):j}`})}`}function x$(e,t,n,r){return k`<li><button type="button" class="${n?`rail-item current`:`rail-item`}" aria-label="${e}" aria-current="${n?`true`:j}" data-tooltip="${e}" @click="${r}">${t}<span aria-hidden="true">${iQ(e)}</span></button></li>`}function S$(){return D(P.managedTeams??[],e=>e.id,e=>x$(e.name,L$,w$(e)||(e.reports??[]).some(t=>T$(e,t))||(e.bundles??[]).some(t=>E$(e,t)),()=>{AW(e)}))}function C$(e){return D(e,e=>e.id,e=>x$(e.name,I$,V$(e)||e.reports.some(t=>h$(t,e.id))||e.bundles.some(t=>M$(t,e.id)),()=>J$(e.id)))}function w$(e){return P.currentManagedTeam===e.id&&!!P.currentWorkspace&&[`findings`,`files`,`workspace-reports`,`workspace-bundles`,`workspace-repositories`,`workspace-dependencies`].includes(P.currentView)}function T$(e,t){return P.currentManagedTeam===e.id&&P.currentManagedReport===t.id&&[`findings`,`links`].includes(P.currentView)}function E$(e,t){return P.currentManagedTeam===e.id&&Ax(P)===t.id}function D$(e,t){let n=x(t.filename),r=T$(e,t);return k`<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)`:j}" data-tooltip="${n}" data-tooltip-repo="${yY(t)||j}" data-tooltip-placement="right-start" @click="${()=>{O$(e,t)}}">${O(zx[Wx(t.filename,t.analyzer)])}<span class="file-label">${n}</span></button></li>`}function O$(e,t){return AW(e,t.id)}function k$(e,t){let n=E$(e,t);return k`<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)`:j}" data-managed-bundle="${t.id}" data-managed-team="${e.id}" data-tooltip="${t.filename}" data-tooltip-repo="${yY(t)||j}" data-tooltip-bundle="${t.kind||j}" data-tooltip-built="${t.provenance===`build`?`true`:j}" data-tooltip-stats="${bY(t)||j}" data-tooltip-commit="${t.summary?.commit||j}" data-tooltip-commit-info="${Re(t.commitInfo,t.summary?.commit,t.repoFullName)??j}" data-tooltip-placement="right-start">${j$}<span class="file-label">${t.filename}</span></button></li>`}function A$(){return k`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var j$=k`${O(Xi)}`;function M$(e,t){return P.selectedBundle===e&&P.currentView===`bundles`&&t===P.selectedBundleWorkspace}function N$(e,t={}){let{integrity:n,name:r}=e,i=M$(n,t.workspaceId??null),a=`file-item bundle-item${t.workspaceId==null?``:` indented`}${i?` current`:``}`;return k`<li class="${a}" data-bundle-integrity="${n}" data-workspace-id="${t.workspaceId??j}" draggable="true"><button type="button" class="file-name" data-tooltip="${`${r}
|
|
194
|
+
${n}`}">${j$}<span class="file-label">${r}</span></button></li>`}function P$(e,t){let n=e.slice(0,15);return k`<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 F$(e,t){return k`<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 · ${x(e)}</em></span></span></li>`}var I$=k`${O(Qi)}`,L$=k`<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>`,R$=k`<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>`,z$=k`<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>`,B$=k`<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 V$(e){return P.currentWorkspace===e.id&&[`findings`,`files`,`workspace-reports`,`workspace-bundles`].includes(P.currentView)}function H$(e,{app:t,compact:n,reports:r,bundles:i,showReports:a,showBundles:o}){let s=`file-item workspace-item${V$(e)?` current`:``}`;return k`<li class="${s}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${I$}<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">${B$}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${R$}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${z$}</button></div>${n?k`<div class="workspace-meta">${t?.appMode?k`<span class="workspace-findings">${t.appFindings.toLocaleString()} finding${t.appFindings===1?``:`s`}</span>`:j} <span class="workspace-sections" role="group" aria-label="Workspace files"><button type="button" data-workspace-section="reports" aria-expanded="${String(a)}" ?disabled="${l$}">${r.toLocaleString()} report${r===1?``:`s`}</button> ${i>0?k`<button type="button" data-workspace-section="bundles" aria-expanded="${String(o)}" ?disabled="${l$}">${i.toLocaleString()} bundle${i===1?``:`s`}</button>`:j}</span></div>`:j}</li>`}function U$(e){return!c$||x(e).toLowerCase().includes(c$)}var W$=(e,t)=>x(e).localeCompare(x(t));async function $({revealSelection:e=!1}={}){await $1();let t=uc();if(EQ({serverMode:t,session:P.managedSession,teams:P.managedTeams,sessionPending:D1,teamsPending:O1,alternateMode:on(P.serverModeConfig)?`e2e`:`local`,onSwitchMode:q$}),GW(),F()){if(f$.sync(P,e),!D1&&!O1&&!E1&&!k1&&tW({catalogOnly:!0}),P.bundles=(P.bundles??[]).filter(e=>e.managedId||e.npm||e.repository),P.storedFiles=[],SQ([]),!Q)return;M(k`${b$()}`,XQ);let t=Q.querySelector(`#sidebar-rail`);t?.setAttribute(`aria-label`,`Teams`),t&&M(S$(),t),Q.querySelector(`sidebar-view-button[kind="packages"]`)?.setAttribute(`hidden`,``),Q.querySelector(`sidebar-view-button[kind="repositories"]`)?.setAttribute(`hidden`,``),Q.querySelector(`#storage-status`)?.setAttribute(`hidden`,``),s1();return}if(f$.sync({managedTeams:[]}),Q?.querySelector(`sidebar-view-button[kind="packages"]`)?.removeAttribute(`hidden`),Q?.querySelector(`sidebar-view-button[kind="repositories"]`)?.removeAttribute(`hidden`),await op(),t!==uc()){await $();return}If().catch(()=>{}),sd().catch(()=>{});let n=await Rc();if(t!==uc()){await $();return}let r=L();p$(r,e),SQ(r);let[i]=await Promise.all([rl(),...r.map(e=>zr(`workspace`,e.id))]);if(t!==uc()){await $();return}if(P.bundles=i,P.storedFiles=n,vQ(),!Q)return;let a=new Set(n),o=new Set;for(let e of r)for(let t of e.reports)a.has(t)&&o.add(t);let s=new Map(i.map(e=>[e.integrity,e])),c=new Set;for(let e of r)for(let t of e.bundles)s.has(t)&&c.add(t);let l=new Map;for(let e of s$)l.set(e,[]);for(let e of n){if(o.has(e)||!U$(e))continue;let t=Ux(e);l.has(t)||l.set(t,[]),l.get(t).push(e)}let u=r.filter(e=>!c$||e.name.toLowerCase().includes(c$)||e.reports.some(e=>U$(e))?!0:e.bundles.some(e=>{let t=s.get(e);return t&&U$(t.name)})),d=i.filter(e=>!c.has(e.integrity)&&U$(e.name));M(k`${y$()} ${D(u,e=>e.id,e=>{let t=[],n=[];for(let r of e.reports)U$(r)&&(a.has(r)?t.push(r):n.push(r));t.sort(W$),n.sort(W$);let r=[],i=[];for(let t of e.bundles){let e=s.get(t);e?(!c$||U$(e.name))&&r.push(e):c$||i.push(t)}let o=dW(e)??Cm(e),c=o?.appMode??Sm(e)===!0,l=u$.get(e.id),u=!c||l$||l?.has(`reports`)===!0,d=!c||l$||l?.has(`bundles`)===!0,f=[...t,...n].filter(e=>Pu(e)!==y).length,p=r.length+i.length;return k`${H$(e,{app:o,compact:c,reports:f,bundles:p,showReports:u,showBundles:d})} ${u?k`${t.map(t=>m$(t,{indented:!0,workspaceId:e.id}))}${n.map(t=>F$(t,e.id))}`:j} ${d?k`${r.map(t=>N$(t,{workspaceId:e.id}))}${i.map(t=>P$(t,e.id))}`:j}`})} ${s$.map(e=>{let t=(l.get(e)??[]).toSorted(W$),n=e==="default";return t.length===0&&!(n&&i$)?null:k`${g$(o$[e]??e,{dropTarget:n})} ${t.map(e=>m$(e))}`})} ${d.length>0||a$?A$():null} ${D(d,e=>e.integrity,e=>N$(e))}`,XQ);let f=Q.querySelector(`#sidebar-rail`);f?.setAttribute(`aria-label`,`Workspaces`),f&&M(C$(r),f);let p=Q.querySelector(`sidebar-view-button[kind="packages"]`);p&&(p.count=QQ());let m=Q.querySelector(`sidebar-view-button[kind="repositories"]`);m&&(m.count=$Q()),s1(),Hu(n,K$)}var G$=!1;function K$(){G$||(G$=!0,requestAnimationFrame(()=>{G$=!1,$().catch(e=>console.warn(`counts repaint:`,e))}))}Ao(()=>{$()}),Dm(K$);async function q$(){Q?.querySelector(`#user-menu`)?.hidePopover?.(),S1?await I1():lc()&&await P1()}function J$(e){let t=P.currentView===`findings`||P.currentView===`files`;(e!==P.currentWorkspace||!t)&&jW(e)}async function Y$(e){let t=e.target.closest(`[data-team-section]`);if(t){if(l$||t.disabled)return;let e=t.closest(`[data-team-id]`)?.dataset.teamId;e&&f$.toggle(e,t.dataset.teamSection),await $();return}let n=e.target.closest(`.file-item.team-item[data-team-id]`);if(n){let t=e.target.closest(`button`)?null:P.managedTeams.find(e=>e.id===n.dataset.teamId);t&&AW(t);return}let r=e.target.closest(`[data-workspace-section]`);if(r){if(l$||r.disabled)return;let e=r.closest(`[data-workspace-id]`)?.dataset.workspaceId;if(!e)return;let t=r.dataset.workspaceSection,n=u$.get(e)??new Set;n.has(t)?n.delete(t):n.add(t),u$.set(e,n),await $();return}if(e.target.closest(`[data-action="toggle-client-mode"]`)){await q$();return}if(e.target.closest(`[data-action="go-home"]`)){await FW();return}let i=e.target.closest(`[data-managed-bundle]`);if(i){U.navigate(fi({view:`bundles`,teamId:i.dataset.managedTeam,bundleId:i.dataset.managedBundle,bundleTab:P.currentView===`bundles`?P.bundleDetailsTab:`overview`},P.managedTeams));return}let a=e.target.closest(`.file-item[data-bundle-integrity]`);if(a){if(a.classList.contains(`bundle-missing`))return;let e=a.dataset.bundleIntegrity,t=a.dataset.workspaceId??null;if(P.selectedBundle===e&&P.currentView===`bundles`&&P.selectedBundleWorkspace===t)return;qZ(e,void 0,{workspaceId:t}),mW(e,P.bundleDetailsTab),Z(),$(),$Z(e);return}let o=e.target.closest(`sidebar-view-button`);if(o){let e=o.getAttribute(`kind`);(e===`packages`||e===`repositories`)&&(P.currentView=e,Z(),$());return}if(e.target.closest(`[data-action="new-workspace"]`)){if(F())return;let e=await He();e&&(await JU(),await eu(e),$());return}let s=e.target.closest(`[data-action="share-workspace"]`);if(s){let e=s.closest(`[data-workspace-id]`),t=e?L().find(t=>t.id===e.dataset.workspaceId):null;t&&pt({id:t.id,name:t.name,privateKeyBase64:t.privateKey}).catch(e=>alert(`Failed to open share dialog: ${e.message}`));return}let c=e.target.closest(`[data-action="export-workspace"]`);if(c){let e=c.closest(`[data-workspace-id]`),t=e?L().find(t=>t.id===e.dataset.workspaceId):null;t&&DQ(t).catch(e=>alert(`Failed to open export dialog: ${e.message}`));return}let l=e.target.closest(`[data-action="leave-workspace"]`);if(l){let e=l.closest(`[data-workspace-id]`),t=e?L().find(t=>t.id===e.dataset.workspaceId):null;if(!t)return;let n=Array.isArray(t.reports)?t.reports:[],r;try{r=await jp(n)}catch(e){alert(`Couldn't read reports to analyze triage impact: ${e.message}`);return}let{confirmed:i,mode:a,triage:o}=await Le({name:t.name,reportCount:n.length,bundleCount:t.bundles.length,triageImpact:r});if(!i)return;if(!L().some(e=>e.id===t.id)){alert(`Workspace "${t.name}" was removed elsewhere; nothing to leave.`);return}try{await LW(t.id,a,{triage:o})}catch(e){alert(`Failed to leave workspace: ${e.message}`)}return}let u=e.target.closest(`.file-item.workspace-item[data-workspace-id]`);if(u){let e=u.dataset.workspaceId;e&&J$(e);return}let d=e.target.closest(`.file-item[data-file]`);if(d){let e=d.dataset.file,t=P.currentView===`findings`||P.currentView===`links`,n=d.dataset.workspaceId??null;e&&(e!==P.currentFile||n!==P.currentReportWorkspace||!t)&&DW(e,void 0,{workspaceId:n});return}if(e.target.closest(`sidebar-delete-current`)){if(P.currentView===`bundles`&&P.selectedBundle){let e=P.selectedBundle,t=(P.bundles??[]).find(t=>t.integrity===e)?.name??e,n=L().filter(t=>Array.isArray(t.bundles)&&t.bundles.includes(e)).filter(t=>mh(t.id,e)).map(e=>e.id),{confirmed:r}=await be({name:t,inRemote:n.length>0});if(!r)return;if(P.selectedBundle!==e){alert(`Active bundle changed during confirmation; aborting delete of "${t}".`);return}try{await IW({deleteFromRemoteWorkspaceIds:n})}catch(e){alert(`Failed to delete bundle: ${e.message}`)}return}if(!P.currentFile)return;let e=P.currentFile,t;try{t=await jp([e])}catch(e){alert(`Couldn't read reports to analyze triage impact: ${e.message}`);return}let n=L().filter(t=>Array.isArray(t.reports)&&t.reports.includes(e)).filter(t=>ph(t.id,e)).map(e=>e.id),r=n.length>0,i=Gx(e)?`links file`:`report`,{confirmed:a,triage:o}=await Se({name:e,kindLabel:i,triageImpact:t,inRemote:r});if(!a)return;if(P.currentFile!==e){alert(`Active file changed during confirmation; aborting delete of "${e}".`);return}try{await MW({triage:o,deleteFromRemoteWorkspaceIds:n})}catch(e){alert(`Failed to delete ${i}: ${e.message}`)}return}if(e.target.closest(`#sync-status`)){B.status===`error`?B.dismissError():B.status===`off`?(!B.getServerUrl()&&e$&&B.setServerUrl(e$),B.setEnabled(!0)):B.setEnabled(!1);return}if(e.target.closest(`[data-action="manage"]`)){Q?.querySelector(`#user-menu`)?.hidePopover?.(),Z1(`manage`);return}if(e.target.closest(`[data-action="view-as-stop"]`)){Q?.querySelector(`#user-menu`)?.hidePopover?.(),cx(P.managedSession?.csrfToken);return}if(e.target.closest(`[data-action="my-reviews"]`)){Q?.querySelector(`#user-menu`)?.hidePopover?.(),U.navigate({view:`reviews`});return}if(e.target.closest(`[data-action="my-profile"]`)){Q?.querySelector(`#user-menu`)?.hidePopover?.(),U.navigate({view:`profile`});return}if(e.target.closest(`[data-action="managed-logout"]`)){sx(P.managedSession?.csrfToken);return}if(e.target.closest(`#sidebar-toggle`)){YQ.classList.toggle(`collapsed`);try{localStorage.setItem(`deepview.sidebarCollapsed`,YQ.classList.contains(`collapsed`)?`1`:`0`)}catch{}}}var X$={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||t.scrollWidth>t.clientWidth}};function Z$(e){l$=e.target.value.length>0,c$=e.target.value.trim().toLowerCase(),$()}var Q$={off:`Sync off`,online:`Online`,offline:`Offline`,connecting:`Connecting…`,error:`Sync error`};function $$(){return B.getServerUrl()||e$?L().length>0:!1}function e1(){let e=Q?.querySelector(`#auth-status`);if(!e)return;let t=Q?.querySelector(`#manage-status`),n=Q?.querySelector(`#user-menu`),r=P.managedSession;YQ?.toggleAttribute(`data-authenticated`,r!=null),YQ?.toggleAttribute(`data-workspace-access`,r!=null&&r.role!==`none`),t1(r);let i=Q?.querySelector(`#public-status`);if(i&&(i.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`),M(j,e),n&&M(j,n);return}if(r.publicShare){t&&(t.hidden=!0),e.removeAttribute(`popovertarget`),n&&M(j,n);return}let a=(r.login[0]??`?`).toUpperCase(),o=typeof r.name==`string`&&/\s/u.test(r.name.trim())?r.name.trim():`@${r.login}`;e.dataset.authed=`1`,e.setAttribute(`popovertarget`,`user-menu`),e.setAttribute(`aria-label`,`Account: ${r.login}`),M(k`${r1(a,r.id)}<span class="auth-login">${o}</span>`,e),t&&(t.hidden=!F()||r.role!==`admin`&&r.role!==`manage`),n&&M(k`<div class="user-card">${r1(a,r.id,!0)} <span class="user-id"><span class="user-login">${r.login}</span> ${r.name?k`<span class="user-name">${r.name}</span>`:j}</span></div>${r.viewer?k`<button type="button" class="user-menu-row" data-action="view-as-stop">Return to @${r.viewer.login}</button>`:j} ${r.role===`none`?j:k`<button type="button" class="user-menu-row" data-action="my-profile">Profile</button> <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">${on(P.serverModeConfig)?`e2e mode`:`Local mode`}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${v$}<span>Log out</span></button>`,n)}function t1(e){let t=Q?.querySelector(`#view-as-status`);t&&(t.hidden=!e?.viewer,YQ?.toggleAttribute(`data-view-as`,e?.viewer!=null),M(e?.viewer?k`<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>`:j,t))}document.addEventListener(`managed-view-only`,()=>{let e=P.managedSession;e?.viewer&&Ex(`Viewing as @${e.login} is read only: changes are not saved.`,{kind:`error`})});var n1=0;document.addEventListener(`managed-profile-change`,e=>{let t=P.managedSession;!t||t.id!==e.detail.userId||(e.detail.avatarChanged&&n1++,P.managedSession={...t,name:e.detail.name},ab(P.managedSession),e1())});function r1(e,t,n=!1){let r=`/api/avatar/${encodeURIComponent(t)}${n1?`?v=${n1}`:``}`;return k`<span class="${n?`user-avatar user-avatar-lg`:`user-avatar`}"><span class="user-avatar-fallback">${e}</span> ${tb()||P.managedSession?.role===`none`?j:k`<img alt="" src="${r}" @error="${i1}">`}</span>`}function i1(e){e.currentTarget.classList.add(`broken`)}function a1(){let e=Q?.querySelector(`.brand-tag`);if(e){let t=P.serverMode===`managed`||on(P.serverModeConfig);e.textContent=uc(),t?(e.setAttribute(`role`,`button`),e.setAttribute(`tabindex`,`0`),e.setAttribute(`aria-label`,`Switch from ${uc()} mode`)):(e.removeAttribute(`role`),e.removeAttribute(`tabindex`),e.removeAttribute(`aria-label`))}}function o1(){YQ&&(YQ.dataset.mode=uc()),F()?(Q?.querySelector(`sidebar-delete-current`)?.setAttribute(`hidden`,``),Q?.querySelector(`#encryption-toggle`)?.setAttribute(`hidden`,``),Q?.querySelector(`#auth-status`)?.removeAttribute(`hidden`)):(Q?.querySelector(`sidebar-delete-current`)?.removeAttribute(`hidden`),Q?.querySelector(`#encryption-toggle`)?.removeAttribute(`hidden`),Q?.querySelector(`#manage-status`)?.setAttribute(`hidden`,``),Q?.querySelector(`#auth-status`)?.setAttribute(`hidden`,``),Q?.querySelector(`#public-status`)?.setAttribute(`hidden`,``),Q?.querySelector(`#view-as-status`)?.setAttribute(`hidden`,``)),u0()}function s1(e){let t=Q?.querySelector(`#sync-status`);if(!t)return;if(a1(),o1(),P.serverMode===`managed`&&P.localMode){t.hidden=!0,B.setForcedOff(!0);let e=Q?.querySelector(`#auth-status`);e&&(e.hidden=!0),Q?.querySelector(`#public-status`)?.setAttribute(`hidden`,``);return}if(F()){t.hidden=!0,B.setForcedOff(!0),e1();return}if(P.serverMode===`standalone`){t.hidden=!0;let e=Q?.querySelector(`#auth-status`);e&&(e.hidden=!0);return}let n=Q?.querySelector(`#auth-status`);n&&(n.hidden=!0);let r=$$(),i=fn()!=null;if(r&&i&&B.isEnabled()&&ih().catch(e=>{console.warn(`sync: load failed`,e)}),r&&i&&!B.getServerUrl()&&e$&&B.isEnabled()&&B.setServerUrl(e$),B.setForcedOff(!r),!r){t.hidden=!0;return}t.hidden=!1;let a=e??B.status;t.dataset.status=a;let o=B.persistenceDegraded;t.toggleAttribute(`data-degraded`,o);let s=B.proxyAuthRequired;t.toggleAttribute(`data-proxy-auth`,s);let c=o?`Not saving to this browser right now (storage may be full, or another tab is on a newer version). Changes that haven’t synced could be lost on reload.`:s?`Can’t reach the sync server — 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 l=t.querySelector(`.sync-label`);l&&(l.textContent=Q$[a]??``)}B.onStatusChange(s1);var c1=!1,l1=!1;async function u1(){if(!B.persistenceDegraded||l1||c1)return;c1=!0;let{shown:e,unloaded:t}=await Je().catch(()=>({shown:!1,unloaded:!0}));if(c1=!1,e){l1=!0;return}B.persistenceDegraded&&setTimeout(u1,t?3e4:1500)}B.onPersistenceDegraded(e=>{s1(),e?u1():l1=!1});var d1=!1,f1=!1;async function p1(){if(!B.proxyAuthRequired||f1||d1)return;d1=!0;let{shown:e,reload:t}=await kQ();if(d1=!1,!e){B.proxyAuthRequired&&setTimeout(p1,1500);return}f1=!0,t&&location.reload()}B.onProxyAuthRequired(e=>{s1(),e?p1():f1=!1});function m1(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,i=L().find(e=>e.id===r);if(!i)return;e.preventDefault();let a=document.createElement(`input`);a.type=`text`,a.value=i.name,a.className=`workspace-rename-input`,n.textContent=``,n.append(a),a.focus(),a.select();let o=!1,s=async e=>{if(!o){o=!0;try{e&&await nu(r,a.value)}catch(e){alert(`Failed to rename workspace: ${e.message}`)}finally{n.contains(a)&&(n.textContent=L().find(e=>e.id===r)?.name??i.name),$()}}};a.addEventListener(`keydown`,e=>{e.key===`Enter`?(e.preventDefault(),s(!0)):e.key===`Escape`&&(e.preventDefault(),s(!1))}),a.addEventListener(`blur`,()=>s(!0)),a.addEventListener(`click`,e=>e.stopPropagation()),a.addEventListener(`dblclick`,e=>e.stopPropagation())}function h1(){for(let e of Q.querySelectorAll(`.drag-over`))e.classList.remove(`drag-over`)}function g1(e){return e.dataTransfer.types.includes(t$)||e.dataTransfer.types.includes(r$)}function _1(e){let t=e.target.closest(`.file-item[data-bundle-integrity]`);if(t){if(t.classList.contains(`bundle-missing`)){e.preventDefault();return}let n=t.dataset.bundleIntegrity;e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(r$,n),e.dataTransfer.setData(n$,t.dataset.workspaceId??``),e.dataTransfer.setData(`text/plain`,n),t.classList.add(`dragging`),a$=!0,$();return}let n=e.target.closest(`.file-item[data-file]`);n&&(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(t$,n.dataset.file),e.dataTransfer.setData(n$,n.dataset.workspaceId??``),e.dataTransfer.setData(`text/plain`,n.dataset.file),n.classList.add(`dragging`),i$=!0,$())}function v1(){for(let e of Q.querySelectorAll(`.dragging`))e.classList.remove(`dragging`);h1(),(i$||a$)&&(i$=!1,a$=!1,$())}function y1(e){if(!g1(e))return;e.preventDefault();let t=e.target.closest(`[data-workspace-id]`),n=Q.querySelector(`.dragging`)?.closest(`[data-workspace-id]`)?.dataset.workspaceId??null,r=t&&n&&t.dataset.workspaceId===n||!t&&!n;if(e.dataTransfer.dropEffect=r?`none`:`move`,h1(),!r){if(t){let e=t.dataset.workspaceId;for(let t of Q.querySelectorAll(`[data-workspace-id="${CSS.escape(e)}"]`))t.classList.contains(`dragging`)||t.classList.add(`drag-over`)}else{let t=e.dataTransfer.types.includes(r$)?`[data-default-bundles]`:`[data-default-reports]`,n=Q.querySelector(t);n&&n.classList.add(`drag-over`)}}}function b1(e){Q.contains(e.relatedTarget)||h1()}async function x1(e){if(!g1(e))return;e.preventDefault(),e.stopPropagation(),h1();let t=e.target.closest(`[data-workspace-id]`),n=t?t.dataset.workspaceId:null,r=e.dataTransfer.getData(n$)||null;if(e.dataTransfer.types.includes(r$)){let t=e.dataTransfer.getData(r$);if(!t)return;if(r&&r!==n&&mh(r,t)){let e=(P.bundles??[]).find(e=>e.integrity===t)?.name??t,n=L().find(e=>e.id===r),{confirmed:i}=await we({name:e,workspaceName:n?.name??``});if(!i)return;try{await Ph(r,t)}catch(t){console.warn(`Failed to remove '${e}' from source workspace ${r} remote:`,t)}}n&&await mu(t,n),r&&r!==n&&await hu(t,r),$();return}let i=e.dataTransfer.getData(t$);if(i){if(r&&r!==n&&ph(r,i)){let e=L().find(e=>e.id===r),{confirmed:t}=await Ee({name:i,workspaceName:e?.name??``});if(!t)return;try{await Nh(r,i)}catch(e){console.warn(`Failed to remove '${i}' from source workspace ${r} remote:`,e)}}n&&await du(i,n),r&&r!==n&&await fu(i,r),P.currentWorkspace&&(P.currentWorkspace===n||P.currentWorkspace===r)?await jW(P.currentWorkspace):$()}}var S1=null,C1=null,w1=0,T1=0,E1=null,D1=!0,O1=!0,k1=!1,A1=null,j1=null,M1;function N1(){let e=M1;return M1=void 0,e}async function P1({forgetLastView:e=!0,resetNavigation:t=!0}={}){U.reset({force:t}),A1?.remove(),A1=null;let n=++w1;if(O1=!0,k1=!1,rb(),Hv(),QU(),zU(),nh(P.serverMode!==`e2e`),B.setForcedOff(!0),B.setProtocolLocked(P.serverMode!==`e2e`||!!S1),PW({forgetLastView:e}),P.triage.clear(),F()){let e=R1();if(tb()&&(await e,n!==w1))return}else{if(P.managedSession=null,P.managedTeams=[],await Ka(),n!==w1||(await Od(),n!==w1))return;Jl()}document.dispatchEvent(new CustomEvent(`managed-client-mode-change`)),GW(),a1(),s1(B.status),Z(),await $()}async function F1(e){if(e!==void 0&&!Ge(e))throw TypeError(`Unknown managed preview role: ${e}. Expected ${Ue.join(`, `)}.`);if(await $1(),e===void 0&&(S1||F()))return;let t=w1,n=e===void 0?null:await W();t===w1&&(S1??={serverMode:P.serverMode,serverModeConfig:P.serverModeConfig,serverModeSelection:P.serverModeSelection,localMode:P.localMode,managed:P.managed},n&&n.setPreviewRole(e),P.serverMode=`managed`,sc(!1),P.managedSession=null,P.managedTeams=[],await P1({forgetLastView:!1}))}async function I1(){let e=S1,t=C1;S1=null,C1=null,nb(),Object.assign(P,e),await P1({forgetLastView:!1}),t&&L1(t)}function L1(e,{runtime:t=!0}={}){if(S1){C1=e;return}ZQ(!1);let n=fn()!=null,r=F(),i=P.serverMode;Qe()&&e.managed&&(P.serverModeSelection=`managed`),cc(e.mode),Qe()&&e.managed&&sc(!1),F()||(M1=void 0);let a=i!==P.serverMode;P.managed=e.managed;let o=t&&P.githubNewIssueLabels!==(e.githubNewIssueLabels??``);if(t&&(P.githubNewIssueLabels=e.githubNewIssueLabels??``),t&&(P.deepviewScanServer=e.mode===`managed`?null:e.deepviewScanServer??null),GW(),nh(P.serverMode!==`e2e`),B.setProtocolLocked(P.serverMode!==`e2e`),pn(e),r!==F()){P1({forgetLastView:!1,resetNavigation:n&&!Qe()&&!sn(e.mode,location.pathname)}).catch(e=>console.warn(`client mode transition:`,e));return}s1(B.status),a&&P.serverMode===`e2e`&&$$()&&B.isEnabled()&&ih().then(e=>{if(e&&P.serverMode===`e2e`)for(let t of e.triageSync.openSessions)e.openWorkspace(t.workspaceId)}).catch(e=>console.warn(`sync: resume failed`,e)),a&&$(),o&&Z({animate:!1}),F()&&R1()}function R1(){if(E1?.generation===w1)return E1.promise;D1=!0;let e={generation:w1,promise:null};return E1=e,e.promise=z1().finally(()=>{E1===e&&(E1=null,$())}),e.promise}async function z1(){let e=w1,t=++T1,n=()=>e===w1&&t===T1&&F();try{let e=P.managedSession,t=await ub({fallback:e,sent:N1()});if(!n())return;P.managedSession=t,D1=!1,(!e||e.id!==t?.id||e.role!==t?.role)&&(O1=!0),$(),ab(t),e&&(e.id!==t?.id||e.role!==t?.role)?(P.managedTeams=[],P.bundles=[],QU(),zU(),U.reset(),FW({history:!1})):Object.hasOwn(ii,P.currentView)&&K1(P.currentView)&&Z({animate:!1}),e1(),RU(),document.querySelector(`base`)||(A1=document.createElement(`base`),A1.href=`/`,document.head.prepend(A1));let r=j1=U1(n,{signal:new AbortController().signal}).finally(()=>{j1===r&&(j1=null)}),i=U.active&&Object.hasOwn(ii,P.currentView)&&!K1(P.currentView)?U.navigate({view:K1(`manage`)?`manage`:`home`},{replace:!0}):t?U.start(Y1,{onCancel:J1}):null;await Promise.all([r,i])}catch(e){console.warn(`managed: session probe failed:`,e)}finally{n()&&(D1||O1)&&(D1=!1,O1=!1,$())}}ZU((e,t,n)=>U1(e,{strict:!0,signal:t,revision:n}));var B1=rQ(db);function V1(e){return j1??U1(e,{reuse:!0})}var H1=0;async function U1(e,{strict:t=!1,signal:n=J_(),reuse:r=!1,revision:i=null}={}){let a=w1,o=P.managedSession,s=await B1({generation:a,session:o,signal:n,reuse:r,revision:i}),c=s??(t?null:P.managedTeams);if(n.aborted||c===null||!e()||a!==w1||!F())return!1;let l=P.managedTeams.find(e=>e.id===P.currentManagedTeam)?.name,u=ob(c);P.managedTeams=c;let d=s===null?H1:++H1;O1=!1;let f=Ax(P);if(s!==null&&f&&!k1){let t=H(),r=()=>e()&&!n.aborted&&!k1&&d===H1&&t===H()&&a===w1&&P.managedSession?.id===o?.id&&P.managedSession?.role===o?.role&&F()&&Ax(P)===f,i;try{i=await Rx(P,c,{fetchCatalog:()=>fb({signal:AbortSignal.any([n,J_()])}),isCurrent:r,render:()=>Z({animate:!1}),replaceRoute:e=>U.replaceRoute(e)})}catch(t){return r()?(t.name!==`AbortError`&&Ex(`Couldn't refresh bundle access: ${t.message}`,{kind:`error`}),$(),!1):e()}if(!r())return e();if(!i){G1=null;let t=FW({history:!1}),n=H();return await t,n===H()&&a===w1&&e()&&P.managedSession?.id===o?.id&&P.managedSession?.role===o?.role&&U.replaceRoute({view:`home`}),e()}}if(Lx(P,c,u)){let n=c.find(e=>e.id===P.currentManagedTeam),r=n&&(P.currentManagedReport===null||n.reports.some(e=>e.id===P.currentManagedReport))?fi({view:P.currentView===`links`?`findings`:P.currentView,teamId:n.id,reportId:P.currentManagedReport},c):null;G1=null;let i=FW({history:!1}),s=H();if(await i,t)return s===H()&&a===w1&&P.managedSession?.id===o?.id&&P.managedSession?.role===o?.role&&F()&&await U.navigate(r??{view:`home`},{replace:!0}),e();if(!e())return!1}if(!k1&&[`workspace-reports`,`workspace-bundles`,`workspace-repositories`,`workspace-dependencies`].includes(P.currentView)&&!c.some(e=>e.id===P.currentManagedTeam)){let t=FW({history:!1}),n=H();return await t,n===H()&&a===w1&&e()&&P.managedSession?.id===o?.id&&P.managedSession?.role===o?.role&&U.replaceRoute({view:`home`}),e()}return!k1&&(P.currentWorkspace||P.bundleDetails?.npm||l!==c.find(e=>e.id===P.currentManagedTeam)?.name)&&Z({animate:!1}),$(),!0}var W1=new Set([`admin-users`,`manage-repos`,`manage-repo-risk`,`manage-teams`,`manage-import`,`manage-deduplication`]),G1=null;function K1(e){let t=P.managedSession?.role;return e===`manage-links`&&!P.managed?.allowShare?!1:[`admin`,`manage`].includes(t)&&(!W1.has(e)||t===`admin`)}var q1=0;function J1(){++q1,k1=!1,Y_();let e=w1;V1(()=>e===w1&&F())}async function Y1(e,t){let n=++q1;k1=!0;try{return await X1(e,t)}finally{n===q1&&(k1=!1,$())}}async function X1(e,t){let n=G1===H()?G1:null;if(Y_(),([`findings`,`files`,`bundles`,`workspace-reports`,`workspace-bundles`,`workspace-repositories`,`workspace-dependencies`].includes(e?.view)||e?.finding)&&(!await V1(t)||!t()))return!1;let r=[];if(e?.view===`bundles`&&e.teamSlug==null&&(!K1(`manage-bundles`)||(r=await fb(),!t()||!F()))||(e=di(e,P.managedTeams,r),!e))return!1;let i=n!==null&&G1===n&&P.currentManagedTeam===e.teamId&&P.currentManagedReport===e.reportId;if(!t()||!F()||e.view!==`home`&&(!P.managedSession||P.managedSession.role===`none`))return!1;if(e.finding){let n=await qQ({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(e,t)=>AW(e,t,{history:!1}),isCurrent:t});return t()?n.ok?(G1=H(),tW(),fi({view:`findings`,teamId:P.currentManagedTeam,reportId:P.currentManagedReport,finding:{id:e.finding.id}},P.managedTeams)):(n.reason&&Ex(n.reason),!1):!1}if([`workspace-reports`,`workspace-bundles`,`workspace-repositories`,`workspace-dependencies`].includes(e.view))return kW(e.teamId,e.view.slice(10),{history:!1,tab:e.dependencyTab??`pulls`});if(e.view===`bundles`){let n=e.teamId==null?r.map(kx):Ix(P.managedTeams);if(!await tQ(e,n,t,$))return!1;let{compareId:i,compareMode:a,...o}=e;return fi({...o,bundleTab:P.bundleDetailsTab,...Nx(P)},P.managedTeams,r)}if(e.view===`home`)return FW({history:!1});if(e.view===`npm`)return zj(e,t,$);if(e.view===`repository-code`)return Ye(P.managedSession)&&ZM(e,t,$);if(e.view===`reviews`||e.view===`profile`)return!P.managedSession.publicShare&&(sr(),P.currentView=e.view,P.profileLinkError=e.linkError??null,P.currentManagedTeam=null,P.currentManagedReport=null,document.body.classList.remove(`report-fullscreen`),Z({animate:!1}),$(),e);if(e.view===`manage-deduplication`&&e.linkId)return K1(e.view)&&await OW(e.linkId);if(Object.hasOwn(ii,e.view))return Z1(e.view,{...e,history:!1});let a=P.managedTeams.find(t=>t.id===e.teamId);return!a||!i&&!await AW(a,e.reportId,{history:!1})||!t()?!1:(P.currentView!==e.view&&sr(),P.currentView=P.currentLinks?`links`:e.view,document.body.classList.remove(`report-fullscreen`),Z({animate:!1}),G1=H(),tW(),$(),document.querySelector(`#main-content`)?.scrollTo({top:0}),fi({...e,view:P.currentView===`links`?`findings`:P.currentView},P.managedTeams))}document.addEventListener(`managed-bundle-open`,e=>{if(F()&&typeof e.detail?.id==`string`){let t=kx(e.detail),n=P.managedTeams,r=n.find(e=>e.id===P.currentManagedTeam&&e.bundles?.some(e=>e.id===t.managedId))??n.find(e=>e.bundles?.some(e=>e.id===t.managedId));U.navigate(jx(n,t,r?.id,P.currentView===`bundles`?P.bundleDetailsTab:`overview`))}}),document.addEventListener(`managed-import-complete`,()=>{R1()}),document.addEventListener(`managed-feed-closed`,()=>{D1=!0,QU(),zU(),FW({history:!1}).then(()=>R1()),Ex(`Workspace access changed. Refreshing your session.`)});async function Z1(e,t={}){if(t.history!==!1&&F()&&(U.active||await R1(),U.active))return U.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(ii,e)||!F()||!K1(e))return!1;let n=Y_(),r=w1;try{let t=await W();e===`manage-import`&&K1(e)&&await t.loadWorkspaceImportPage()}catch(t){return console.warn(`${e}: managed bundle load failed:`,t),!1}return r!==w1||n!==H()||!F()||!K1(e)?!1:(P.currentView=e,P.scanSelection=e===`manage-scans`?t.scanMode===`link`?{mode:`report`,reportMode:`link`}:t.bundleId?{bundleId:t.bundleId,...t.scanMode===`dependencies`?{mode:`dependencies`}:{}}:null:null,P.bundleCreationRepoId=e===`manage-bundles`?t.createRepoId??null:null,Z({animate:!1}),$(),R1(),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=>Ex(e.detail.message,{kind:`error`})),document.addEventListener(`managed-admin-navigate`,e=>{let t=e.detail?.view,n=e.detail?.actor;typeof t==`string`&&Z1(t,{actor:n,scanMode:e.detail?.scanMode,linkId:e.detail?.linkId})}),document.addEventListener(`managed-repository-code-open`,e=>{let{repoId:t,repo:n=null,path:r=``}=e.detail??{};F()&&Number.isSafeInteger(t)&&t>0&&BM({repoId:t,repo:typeof n==`string`&&n?n:null,path:typeof r==`string`?r:``})});var Q1;function $1(){return Q1??=t0().then(()=>document.querySelector(`app-sidebar`)?.removeAttribute(`inert`))}function e0(){let e=un();return M1=dn(e).then(e=>e?.session),e}async function t0(){let e=fn();if(e){cc(e.mode),P.managed=e.managed,e0().then(e=>{if(e&&e!==`standalone`)return L1(e)}).catch(e=>console.warn(`server mode revalidation:`,e));return}ZQ(!rn());let t=e0(),n=await dn(t,rn()?0:3e3),r=fn();if(r)return n&&n!==`standalone`?L1(n):L1(r,{runtime:!1});if(n&&n!==`standalone`)return L1(n);n===`standalone`&&an(),P.serverMode=`standalone`,P.serverModeConfig=null,P.serverModeSelection=null,sc(n===null),nh(!0),ZQ(!1),s1(B.status),$(),n===null&&t.then(e=>{let t=fn(),n=e&&e!==`standalone`?e:t??e;if(n===`standalone`){if(an(),S1){S1.serverMode=`standalone`,S1.serverModeConfig=null,S1.serverModeSelection=null,S1.localMode=!1;return}return sc(!1),s1(B.status),$()}if(n)return L1(n,{runtime:n!==t})}).catch(e=>console.warn(`server mode probe:`,e))}function n0(){let e=Q?.querySelector(`#user-menu`),t=Q?.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 r0(e){YQ=e,Q=e.renderRoot,XQ=Q.querySelector(`#file-list`),d0(Q.querySelector(`#encryption-toggle`)),xQ(Q.querySelector(`#storage-status`)),Q.addEventListener(`click`,Y$),Q.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&e.target.closest?.(`[data-action="toggle-client-mode"]`)&&(e.preventDefault(),Y$(e))}),Q.addEventListener(`dblclick`,m1),Q.addEventListener(`dragstart`,_1),Q.addEventListener(`dragend`,v1),Q.addEventListener(`dragover`,y1),Q.addEventListener(`dragleave`,b1),Q.addEventListener(`drop`,x1),hr(Q,X$),Q.querySelector(`#sidebar-search-input`)?.addEventListener(`input`,Z$),n0(),s1(B.status),fn()||ZQ(!rn()),$(),B.onServerInfo(e=>{if(P.serverMode!==`e2e`)return;let t=fn(),n=t&&{...t,...P.deepviewScanServer?{deepviewScanServer:P.deepviewScanServer}:{}};return L1(ln(n,e))}),$1(),P.serverMode===`managed`&&R1()}var i0=class extends _a{static styles=[ma(oQ),ma(aQ)];render(){return k`<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">${uc()}</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">${O(ea)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){r0(this)}};customElements.define(`app-sidebar`,i0);var a0=k`<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>`,o0=k`<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>`,s0=null;async function c0(){if(!s0)return;if(await $1(),F()){s0.hidden=!0;return}if(!So()){s0.hidden=!0;return}let e=bo();s0.hidden=!1;let t=xo();s0.classList.toggle(`encrypted`,e&&t),s0.classList.toggle(`locked-pending`,e&&!t),e&&t?(s0.dataset.tooltip=`Encryption on — click to disable`,s0.setAttribute(`aria-label`,`Disable encryption`),M(a0,s0)):e?(s0.dataset.tooltip=`Encryption on, locked — click to unlock`,s0.setAttribute(`aria-label`,`Unlock encrypted data`),M(a0,s0)):(s0.dataset.tooltip=`Encryption off — click to enable`,s0.setAttribute(`aria-label`,`Enable encryption`),M(o0,s0))}async function l0(){if(confirm(`Disable encryption?
|
|
195
|
+
|
|
196
|
+
Your local triage and report data will be rewritten as plaintext.
|
|
197
|
+
|
|
198
|
+
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 Fo({migrate:async({open:e})=>{await Za({open:e}),await Md({open:e}),await gl({open:e}),await Sl({open:e})}}))?.disabled&&alert(`Encryption disabled. Your data is now plaintext.
|
|
199
|
+
|
|
200
|
+
To complete cleanup, remove the DeepView passkey from your password manager / OS settings:
|
|
201
|
+
• macOS / iOS: Settings → Passwords
|
|
202
|
+
• Windows: Settings → Accounts → Sign-in options → Passkeys
|
|
203
|
+
• Chrome: chrome://settings/passkeys
|
|
204
|
+
• Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function u0(){c0()}function d0(e){if(!e||e===s0)return;s0=e;let t=!1;s0.addEventListener(`click`,async()=>{if(await $1(),!F()&&!t){t=!0;try{if(!bo()){await Ke();return}if(!xo()){await Av();return}await l0()}finally{t=!1}}}),Ao(c0),c0()}export{Ns as a,fo as b,bo as c,xo as d,So as e,wo as f,Ao as g,Mo as h,Po as i,zo as j,Ha as k,Ka as l,Xa as m,Fs as n,Ls as o,Rs as p,zs as q,Vs as r,qs as s,Zs as t,tc as u,P as v,F as w,Rc as x,Vc as y,Hc as z,rl as A,il as B,ll as C,hl as D,xl as E,bf as F,Lf as G,Hf as H,Pu as I,Jl as J,L as K,$l as L,iu as M,mu as N,rp as O,$u as P,od as Q,pd as R,Cd as S,jd as T,Pd as U,fp as V,_p as W,vp as X,yp as Y,bp as Z,xp as _,Tp as $,Ep as aa,Dp as ba,Hp as ca,Wp as da,Fd as ea,Id as fa,Rd as ga,zd as ha,U as ia,Iv as ja,Wh as ka,Gh as la,Bv as ma,Vv as na,by as oa,Ny as pa,Vy as qa,Hy as ra,tb as sa,sb as ta,lb as ua,Cb as va,Hb as wa,Ub as xa,Wb as ya,Gb as za,Kb as Aa,qb as Ba,Jb as Ca,Yb as Da,Zb as Ea,Qb as Fa,lx as Ga,ux as Ha,dx as Ia,_x as Ja,vx as Ka,yx as La,bx as Ma,xx as Na,zx as Oa,Ux as Pa,qm as Qa,R as Ra,Jm as Sa,Ym as Ta,Xm as Ua,Tv as Va,Ev as Wa,Dv as Xa,Kx as Ya,Jx as Za,Yx as _a,Zx as $a,$x as ab,eS as bb,tS as cb,pS as db,_h as eb,vh as fb,yh as gb,wh as hb,Th as ib,Eh as jb,Oh as kb,kh as lb,Ah as mb,Mh as nb,Lh as ob,Rh as pb,B as qb,t_ as rb,n_ as sb,r_ as tb,c_ as ub,u_ as vb,f_ as wb,p_ as xb,m_ as yb,__ as zb,v_ as Ab,x_ as Bb,I_ as Cb,V_ as Db,$h as Eb,ug as Fb,dg as Gb,fg as Hb,V as Ib,hg as Jb,bg as Kb,xg as Lb,Sg as Mb,Cg as Nb,wg as Ob,Og as Pb,Mg as Qb,Pg as Rb,Fg as Sb,Lg as Tb,Rg as Ub,zg as Vb,Bg as Wb,Vg as Xb,Ug as Yb,Xg as Zb,Zg as _b,Qg as $b,$g as ac,Bh as bc,jS as cc,MS as dc,dC as ec,hC as fc,gC as gc,_C as hc,TC as ic,MC as jc,PC as kc,IC as lc,UC as mc,GC as nc,KC as oc,qC as pc,JC as qc,YC as rc,ZC as sc,QC as tc,$C as uc,tw as vc,nw as wc,rw as xc,iw as yc,aw as zc,sw as Ac,lw as Bc,uw as Cc,bw as Dc,aT as Ec,oT as Fc,sT as Gc,cT as Hc,Ox as Ic,jx as Jc,Mx as Kc,Fx as Lc,VT as Mc,UT as Nc,mD as Oc,hD as Pc,vD as Qc,yD as Rc,bD as Sc,xD as Tc,SD as Uc,wD as Vc,TD as Wc,FD as Xc,LD as Yc,RD as Zc,VO as _c,UO as $c,qO as ad,JO as bd,YO as cd,QO as dd,$O as ed,ek as fd,hk as gd,xk as hd,Vk as id,Hk as jd,Uk as kd,Wk as ld,Gk as md,Xk as nd,pA as od,FA as pd,LA as qd,RA as rd,ej as sd,H as td,aj as ud,uj as vd,yj as wd,_N as xd,yN as yd,SP as zd,CP as Ad,wP as Bd,TP as Cd,kP as Dd,AP as Ed,FP as Fd,IP as Gd,RP as Hd,zP as Id,BP as Jd,JR as Kd,QR as Ld,sz as Md,mz as Nd,hz as Od,_z as Pd,Rz as Qd,Uz as Rd,Wz as Sd,Gz as Td,qz as Ud,kB as Vd,IB as Wd,LB as Xd,VB as Yd,WB as Zd,GB as _d,KB as $d,qB as ae,XB as be,ZB as ce,oU as de,sU as ee,Ov as fe,Ex as ge,Dx as he,oQ as ie,fQ as je,qQ as ke,JQ as le,$ as me,F1 as ne,$1 as oe,pW as pe,mW as qe,DW as re,kW as se,AW as te,jW as ue,FW as ve,HW as we,$W as xe,iG as ye,oG as ze,cG as Ae,_G as Be,SG as Ce,CG as De,wG as Ee,zG as Fe,BG as Ge,VG as He,ZG as Ie,pK as Je,NK as Ke,PK as Le,XK as Me,AX as Ne,PX as Oe,FX as Pe,Z as Qe,UZ as Re,WZ as Se,GZ as Te,KZ as Ue,qZ as Ve,JZ as We,ZZ as Xe,$Z as Ye,eQ as Ze};
|
|
205
|
+
/*! Bundled license information:
|
|
206
|
+
|
|
207
|
+
lit-html/directives/map.js:
|
|
208
|
+
lit-html/directives/choose.js:
|
|
209
|
+
(**
|
|
210
|
+
* @license
|
|
211
|
+
* Copyright 2021 Google LLC
|
|
212
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
213
|
+
*)
|
|
214
|
+
|
|
215
|
+
lit-html/directives/guard.js:
|
|
216
|
+
(**
|
|
217
|
+
* @license
|
|
218
|
+
* Copyright 2018 Google LLC
|
|
219
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
220
|
+
*)
|
|
221
|
+
|
|
222
|
+
lit-html/async-directive.js:
|
|
223
|
+
(**
|
|
224
|
+
* @license
|
|
225
|
+
* Copyright 2017 Google LLC
|
|
226
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
227
|
+
*)
|
|
228
|
+
|
|
229
|
+
lit-html/directives/ref.js:
|
|
230
|
+
(**
|
|
231
|
+
* @license
|
|
232
|
+
* Copyright 2020 Google LLC
|
|
233
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
234
|
+
*)
|
|
235
|
+
*/
|