@preventive/triage 1.0.0-alpha.52 → 1.0.0-alpha.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/managed/finding-detail.d.ts +4 -2
- package/common/managed/finding-detail.js +26 -14
- package/common/managed/team-app.d.ts +2 -0
- package/common/managed/team-app.js +32 -3
- package/common/workspace-app.js +26 -6
- package/out/activity.js +2 -2
- package/out/{chunk-NCN3M5EP.js → chunk-JEFZTVNX.js} +1 -1
- package/out/{chunk-IMM274IW.js → chunk-NE2UGKRJ.js} +1 -1
- package/out/{chunk-OGAYMEER.js → chunk-TSIFIFBX.js} +41 -41
- package/out/{chunk-CHRBUGVN.js → chunk-YA4ETCFU.js} +1 -1
- package/out/client-managed.js +1 -1
- package/out/compare.js +1 -1
- package/out/dialogs.js +1 -1
- package/out/index.html +2 -2
- package/out/scan.js +1 -1
- package/out/view.js +1 -1
- package/package.json +2 -1
- package/server-managed/history-windows.ts +172 -0
- package/server-managed/repository-history.ts +2 -2
- package/server-managed/repository-pulse.ts +11 -2
- package/server-managed/team-reports.ts +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$e as e,Xe as t,Ze as n,a as r,ua as i,w as a}from"./chunk-
|
|
1
|
+
import{$e as e,Xe as t,Ze as n,a as r,ua as i,w as a}from"./chunk-TSIFIFBX.js";import{c as o,d as s,g as c}from"./chunk-2XUEZHIP.js";var l=t(s`<path d="M3.5 8.4l2.9 2.9 6.1-6.6"/>`),u=t(s`<circle class="fill" cx="8" cy="8" r="3"/>`),d=t(s`<path d="M4.2 4.2l7.6 7.6M11.8 4.2l-7.6 7.6"/>`),f=t(s`<circle class="dotted" cx="8" cy="8" r="5.5"/>`),p=t(s`<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"/>`),m={approved:[`approved`,e.approved[1],`Approved`],changes:[`changes`,e.changes[1],`Changes requested`],commented:[`commented`,n,`Commented`],dismissed:[`dismissed`,n,`Review dismissed`]},h={done:[`reviewed`,l,`Reviewed`],running:[`running`,u,`Reviewing`],failed:[`failed`,d,`Review failed`],requested:[`requested`,f,`Asked to review again`]},g=[`requested`,f,`Review requested`],_=e=>e.slice(0,7),v=e=>new Date(e).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,year:`numeric`}),y=(e,t,n=!1)=>`${e.toLocaleString(`en-US`)}${n?`+`:``} ${t}${e===1&&!n?``:`s`}`;function b(e){return e?e.failed?h.failed:e.requested?h.requested:h[e.code?.status]??null:null}function x(e){let t=b(e.codex),n=e.codex?.code?.commit??null;return[...t?[{who:i(e.codex.login,`Codex`),standing:t,commit:n,stale:n!==null&&n!==e.head}]:[],...e.reviewers.map(t=>({who:i(t.login,t.login??`someone`),standing:m[t.state]??g,requested:t.requested&&!!m[t.state],workflow:t.workflow??null,commit:t.commit,at:t.at,stale:t.commit!==null&&t.commit!==e.head}))]}var S=e=>(e.moreReviews??0)+(e.moreRequests??0),C=e=>[e.moreReviews>0?y(e.moreReviews,`more review`):null,e.moreRequests>0?y(e.moreRequests,`more review request`):null].filter(Boolean).join(` and `);function w(e){if(!e.head)return!0;let t=e.codex?.code;return t?.status===`done`&&t.commit===e.head||e.reviewers.some(t=>m[t.state]&&t.state!==`dismissed`&&t.commit===e.head)?!0:e.moreReviews>0&&null}var T=e=>e?o`<span class="${`review-severity is-${e}`}">${e.toUpperCase()}</span>`:c;function E(e){if(!e)return c;let t=x(e),{open:n,more:r,severity:i}=e.threads,a=n>0?`${y(n,`open review thread`,r)}${i?`, the gravest ${i.toUpperCase()}`:``}`:r?`No open review thread among those read; more on GitHub`:null,s=w(e);return o`<span class="issue-reviews">${t.map(({who:e,standing:[t,n,r],commit:i,stale:a,requested:s})=>{let c=`${r}${s?`, and requested again`:``}${a?`, on an earlier commit (${_(i)})`:i?`, on the latest commit`:``}`;return o`<span class="${`review-mark is-${t}${a?` is-stale`:``}`}"><span class="review-glyph" role="img" aria-label="${c}" data-tooltip="${c}">${n}</span><span class="review-who">${e}</span></span>`})} ${S(e)>0?o`<span class="review-more" data-tooltip="${`${C(e)}, on GitHub`}">+${S(e)}</span>`:c} ${a?o`<span class="review-threads" role="img" aria-label="${a}" data-tooltip="${a}">${p}<span>${n}${r?`+`:``}</span>${T(i)}</span>`:c} ${s===!1?o`<span class="review-unreviewed" data-tooltip="${t.length>0?`No review is on the latest commit`:`No reviews yet`}">Unreviewed</span>`:s===null?o`<span class="review-unreviewed" data-tooltip="No review read is on the latest commit; more on GitHub">Unreviewed?</span>`:c}</span>`}function D(e,t,n){if(!e)return c;let r=o`<code>${_(e)}</code>`;return o`<span class="review-on">on ${n?o`<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 O(e,t){if(!e)return c;let{head:n,codex:r}=e,a=(e,[a,s,c],l)=>o`<li class="review-row">${i(r.login,`Codex`)} <span class="${`review-state is-${a}`}">${s}${l}: ${c.toLowerCase()}</span>${D(e.commit,n,t)}</li>`,s=[...r?.code?[a(r.code,b(r)??h.done,`Code review`)]:[],...r?.security?[a(r.security,h[r.security.status]??h.done,`Security review`)]:[],...x({...e,codex:null}).map(({who:e,standing:[r,i,a],commit:s,at:l,requested:u,workflow:d})=>o`<li class="review-row">${e} <span class="${`review-state is-${r}`}">${i}${a}${u?`, requested again`:``}</span>${d?o`<span class="review-on">by the workflow <code>${d}</code></span>`:c}${D(s,n,t)}${l?o`<time datetime="${new Date(l).toISOString()}">${v(l)}</time>`:c}</li>`)],{open:l,resolved:u,more:d,list:f=[]}=e.threads;return o`<section class="repo-item-section"><h4>Reviews</h4>${s.length>0?o`<ul>${s}</ul>`:o`<p class="repo-item-quiet">No reviews yet.</p>`} ${S(e)>0?o`<p class="repo-item-quiet">And ${C(e)}, on GitHub.</p>`:c} ${w(e)===null?o`<p class="repo-item-quiet">No review read is on the latest commit, <code>${_(n)}</code>; one of those on GitHub may be.</p>`:s.length>0&&!w(e)?o`<p class="repo-item-quiet">No review is on the latest commit, <code>${_(n)}</code>.</p>`:c}</section>${l>0||u>0?o`<section class="repo-item-section"><h4>Open threads</h4>${f.length>0?o`<ul>${f.map(e=>o`<li><a class="repo-item-row review-thread" href="${e.url??c}" target="_blank" rel="noopener noreferrer">${T(e.severity)}<span class="repo-item-title">${e.title||`(no comment)`}</span> ${e.path?o`<code class="review-path">${e.path}${e.line?`:${e.line}`:``}</code>`:c} ${e.outdated?o`<span class="repo-item-quiet">outdated</span>`:c}</a></li>`)}</ul>`:o`<p class="repo-item-quiet">${d?`None open among those read.`:`None open.`}</p>`} ${u>0||d?o`<p class="repo-item-quiet">${u>0?`${y(u,`thread`)} resolved`:``}${d?`${u>0?`; `:``}more on GitHub`:``}.</p>`:c}</section>`:c}`}var k=r({items:new Map,changes:0}),A=null,j=()=>a.managedSession?`${a.managedSession.id}\0${a.managedSession.role}`:null,M=(e,t,n)=>`${e}\0${t}\0${n}`,N=e=>Number.isSafeInteger(e?.readAt)&&e.readAt>0?e.readAt:Date.now();function P(e,t,n,r=null){let i=j();i!==A&&(k.items.clear(),A=i);let a=!1;for(let o of t){let t=M(i,e,o.number),s=k.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};k.items.set(t,{item:{...o,kind:o.kind??r??s?.item.kind??null},readAt:n,moved:l}),a=!0}a&&k.changes++}var F=(e,t)=>k.items.get(M(j(),e,t))??null;function I(e,t){let n=M(j(),e,``);return k.changes,[...k.items].flatMap(([e,r])=>e.startsWith(n)&&r.item.kind===t?[r]:[])}var L=()=>k.changes,R=e=>e.state===`open`?`open`:`closed`;function z(e,t){let n=R(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}export{E as a,O as b,N as c,P as d,F as e,I as f,L as g,R as h,z as i};
|
package/out/client-managed.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as e,d as t,i as n}from"./chunk-MYGJBYYJ.js";import{a as r,b as i,c as a}from"./chunk-GDPCLSOS.js";import{A as o,B as s,a as c,b as l,c as u,d,e as f,f as ee,g as te,h as ne,i as re,j as ie,k as ae,l as oe,m as se,n as ce,o as le,p as ue,q as de,r as fe,s as pe,t as me,u as he,v as ge,w as _e,x as ve,y as ye,z as be}from"./chunk-NCN3M5EP.js";import"./chunk-QB4CBOX2.js";import{Ba as xe,E as Se,F as Ce,Ja as we,Ra as Te,Sa as Ee,Ta as De,Ua as Oe,Va as ke,Wa as Ae,ba as je,ca as Me,e as Ne,fa as Pe,g as Fe,j as Ie,k as p,w as Le}from"./chunk-LJ7XRXFU.js";import{w as Re}from"./chunk-7VAWINQF.js";import{b as ze}from"./chunk-NRPC74AM.js";import"./chunk-PNHBZGDD.js";import"./chunk-VFWMQ3LG.js";import{a as m,e as Be}from"./chunk-WCPJDAYA.js";import"./chunk-IYPY47MC.js";import{a as Ve,d as He}from"./chunk-PWFUOLZK.js";import{h as Ue,m as h}from"./chunk-HT2SSA3V.js";import{B as We,D as Ge,J as Ke}from"./chunk-SXV2T5C4.js";import{B as qe,C as Je,d as g,h as Ye,i as Xe,j as Ze,w as Qe,x as $e}from"./chunk-WFYLMF6Z.js";import"./chunk-C4Z6ZBXV.js";import{a as _,b as et,c as v,d as tt,g as y,j as nt}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-OOJM4CTU.js";var b=class extends nt{static properties={session:{attribute:!1},allowShare:{attribute:!1},_loading:{state:!0}};constructor(){super(),this.session=null,this.allowShare=!1,this.appState=f,this._loading=!1,this._loadRequest=null}get _role(){return this.session?.role??null}get _csrf(){return this.session?.csrfToken??null}get _me(){return this.session?.id??null}disconnectedCallback(){this._loadRequest?.abort(),super.disconnectedCallback()}async _loadCollection(e,t,n,r){this._loadRequest?.abort();let i=new AbortController;this._loadRequest=i,this._loading=!0;try{await this.appState.load(e,t,n,{signal:i.signal,apply:r})}catch(t){!i.signal.aborted&&t?.name!==`AbortError`&&this.appState.read(e)===void 0&&(this._error=String(t?.message??t))}finally{this._loadRequest===i&&(this._loading=!1)}}};function x(e){return v`<div class="loading-rows" role="status"><span class="sr-only">${e}</span><div aria-hidden="true">${[0,1,2,3].map(()=>v`<div class="loading-row"><span></span><span></span></div>`)}</div></div>`}var rt=class extends we{get changeEvent(){return`local-item-change`}get searchLabel(){return`Search local files`}get optionsLabel(){return`Local files`}get noMatchesLabel(){return`No matching files.`}get emptyLabel(){return`No local files available.`}choices(){let e=this._query.trim().toLocaleLowerCase(),t=this.options.filter(t=>`${t.label} ${t.secondary??``}`.toLocaleLowerCase().includes(e));return{pinned:[],sections:[{options:t}],count:t.length,total:this.options.length,showFacets:!1}}};customElements.define(`managed-local-item-selector`,rt);var it=class{constructor(e,t,n){this.host=e,this.kind=t,this.upload=n,this.source=null,this.hasData=!1,this.open=!1,this.options=[],this.value=null,this.busy=!1,this.loading=!1,this.error=``,this.success=``,this.generation=0,this.readAbort=null,this.onChange=e=>{if(e?.kind){if(e.kind!==this.kind)return;if(e.value!==this.value){this.refresh();return}}this.readAbort&&!this.readAbort.signal.aborted&&(this.readAbort.abort(),this.error=`The local ${this.kind} changed or the list was refreshed. Select it again before importing.`),this.options=[],this.value=null,this.success=``,this.refresh()},this.onBlur=()=>{this.readAbort&&!this.readAbort.signal.aborted&&this.onChange()},this.onVisibilityChange=()=>{globalThis.document?.visibilityState===`hidden`&&this.onBlur()},e.addController(this)}hostConnected(){globalThis.addEventListener(`focus`,this.onChange),globalThis.addEventListener(`blur`,this.onBlur),globalThis.addEventListener(`storage`,this.onChange),globalThis.document?.addEventListener(`visibilitychange`,this.onVisibilityChange),this.connectSource()}hostUpdated(){this.connectSource()}connectSource(){this.source!==this.host.localImportSource&&(this.unsubscribe?.(),this.abort?.abort(),this.source=this.host.localImportSource,this.unsubscribe=this.source?.subscribe(this.onChange),this.onChange())}hostDisconnected(){++this.generation,this.abort?.abort(),this.unsubscribe?.(),this.source=null,globalThis.removeEventListener(`focus`,this.onChange),globalThis.removeEventListener(`blur`,this.onBlur),globalThis.removeEventListener(`storage`,this.onChange),globalThis.document?.removeEventListener(`visibilitychange`,this.onVisibilityChange)}async refresh(){let e=++this.generation,t=this.source;this.loading=!0,this.host.requestUpdate();try{let n=t?await t.hasData(this.kind):!1;if(e!==this.generation)return;this.hasData=n;let r=this.open&&!t?.locked?await t?.list(this.kind)??[]:[];if(e!==this.generation)return;this.options=r,r.some(e=>e.value===this.value)||(this.value=null)}catch(t){e===this.generation&&(this.error=String(t?.message??t))}finally{e===this.generation&&(this.loading=!1,this.host.requestUpdate())}}toggle(){this.busy||(this.open=!this.open,this.error=``,this.success=``,this.options=[],this.value=null,this.refresh())}async unlock(){if(this.busy)return;this.busy=!0,this.error=``;let e=this.abort=new AbortController;this.host.requestUpdate();try{await this.source.unlock({signal:e.signal})&&!e.signal.aborted&&await this.refresh()}catch(t){e.signal.aborted||(this.error=String(t?.message??t))}finally{this.busy=!1,this.host.requestUpdate()}}async importSelected(){if(this.busy||this.loading||!this.value||this.source?.locked)return;this.busy=!0,this.error=``,this.success=``;let e=this.options.find(e=>e.value===this.value)?.label,t=this.abort=new AbortController;this.readAbort=t,this.host.requestUpdate();try{await this.source.importItem(this.kind,this.value,e=>(this.readAbort=null,this.upload(e)),{signal:t.signal}),!t.signal.aborted&&!this.source?.locked&&(this.success=`Imported ${e}.`,this.value=null)}catch(e){t.signal.aborted||(this.error=String(e?.message??e))}finally{this.readAbort===t&&(this.readAbort=null),this.busy=!1,this.host.requestUpdate()}}renderAction(){return this.hasData||this.open?v`<button type="button" class="local-import-toggle" aria-expanded="${this.open}" aria-controls="local-import-panel" ?disabled="${this.busy}" @click="${()=>this.toggle()}">Import</button>`:y}renderPanel(e){if(!this.open)return y;let t=this.source?.locked;return v`<section class="local-import-panel" id="local-import-panel" aria-label="${`Import local ${this.kind}`}"><div class="local-import-copy"><strong>Import local ${this.kind}</strong><p>${t?`Unlock local data with your passkey to choose a file.`:`Copy a file from this browser to the managed workspace. The local copy stays on this device.`}</p></div><div class="local-import-controls">${t?v`<button type="button" class="local-import-submit" ?disabled="${this.busy}" @click="${()=>this.unlock()}">${this.busy?`Waiting for passkey…`:`Unlock with passkey`}</button>`:v`<managed-local-item-selector label="${`Choose local ${this.kind}`}" placeholder="${this.loading?`Loading local files…`:`Choose local ${this.kind}\u2026`}" .options="${this.options}" .value="${this.value}" ?disabled="${this.busy||this.loading}" @local-item-change="${e=>{this.value=e.detail.value,this.success=``,this.host.requestUpdate()}}"></managed-local-item-selector><button type="button" class="local-import-submit" ?disabled="${e||this.busy||this.loading||!this.value}" @click="${()=>this.importSelected()}">${this.busy?`Importing…`:`Import ${this.kind}`}</button>`} <button type="button" class="local-import-close" ?disabled="${this.busy}" @click="${()=>this.toggle()}">Close</button></div>${!t&&!this.loading&&this.options.length===0?v`<p class="local-import-message">No local ${this.kind}s available.</p>`:y} ${this.error?v`<p class="local-import-message error" role="alert">${this.error} <button type="button" ?disabled="${this.busy}" @click="${()=>{this.error=``,this.refresh()}}">Retry</button></p>`:y} ${this.success?v`<p class="local-import-message" role="status">${this.success}</p>`:y}</section>`}};async function at({signal:e}={}){e=e?AbortSignal.any([e,f.sessionController.signal]):f.sessionController.signal,e.throwIfAborted();let t=await d(`/api/admin/bundles`,{credentials:`same-origin`,signal:e});if(e.throwIfAborted(),!t.ok)throw Object.assign(Error(`Bundle catalogue request failed (${t.status})`),{status:t.status});let n=await t.json();return e.throwIfAborted(),n.bundles??[]}async function S(e,t,n){let r=f.generation,i=await d(`/api/bundles/${encodeURIComponent(e)}/${t}`,{credentials:`same-origin`,signal:n});if(n?.throwIfAborted(),!i.ok)throw Object.assign(Error(`Bundle ${t} request failed (${i.status})`),{status:i.status});let a=t===`contents`?await i.text():await i.json();if(n?.throwIfAborted(),r!==f.generation)throw new DOMException(`Managed session changed`,`AbortError`);return a}function ot(e,{signal:t}={}){return f.load(`bundle-metadata:${e}`,`bundle metadata`,t=>S(e,`metadata`,t),{signal:t,retryInvalidated:!0})}async function st(e,{signal:t}={}){t=t?AbortSignal.any([t,f.sessionController.signal]):f.sessionController.signal;let n=await S(e,`metadata`,t),r=n?.bundle?.repo??null,i=Ge({repo:r});if(!i)return r;let a=new URLSearchParams({repo:i,directory:r.directory??``}),o=new Set(n.unsized??[]),s=ze((n.files??[]).filter(([e,t])=>t!=null||o.has(e)).map(([e])=>e));s&&a.set(`filePrefix`,s);let c=await d(`/api/admin/repositories/resolve?${a}`,{credentials:`same-origin`,cache:`no-store`,signal:t});if(t.throwIfAborted(),!c.ok)throw Error(`Repository suggestion request failed (${c.status})`);let{location:l}=await c.json();return t.throwIfAborted(),l?{...r,github:l.github,...l.mapped?{directory:l.directory}:{},repoId:l.repoId}:r}async function ct(e,{signal:t}={}){t=t?AbortSignal.any([t,f.sessionController.signal]):f.sessionController.signal;try{return await S(e,`contents`,t)}catch(e){throw e.name!==`AbortError`&&f.notify(`Couldn't load bundle contents: ${e.message}`),e}}function lt(e,t,n=``,r=!1,i=!1){let a=[t?`team=${encodeURIComponent(t)}`:``,n?`reason=${encodeURIComponent(n)}`:``,r?`repoAdvisories=true`:``,i?`details=true`:``].filter(Boolean).join(`&`);return S(e,`advisories${a?`?${a}`:``}`,f.sessionController.signal)}var ut={"patch-not-found":`The patch isn’t at the commit it was read at.`,"patch-mismatch":`The file at the commit the patch was read at isn’t the patch its lockfile names.`,"patch-unreadable":`The patch couldn’t be read as git writes one.`,"patch-unsupported":`The patch changes a file’s bytes, which isn’t reviewed here.`,"patch-does-not-apply":`The patch doesn’t apply to this version.`,"patch-too-large":`The patch is too large to read here.`,"no-repository":`The repository the patch is in isn’t available to you.`,"no-directory":`Only some of the repository the patch is in is available to you.`,"github-token-required":`Reading the patch needs your GitHub sign-in.`},dt=e=>e?{patchHash:e.hash,patchRepoId:String(e.repoId),patchCommit:e.commit,patchPath:e.path}:{},C={...ut,"bad-tarball":`This package's tarball couldn't be read.`,"upstream-invalid":`The npm registry's answer for this package couldn't be read.`,"upstream-too-large":`The npm registry's answer for this package is too large to read here.`,400:`Not an npm package name and version.`,404:`No such package version, or it is not available to you.`,413:`This package is too large to open here.`,429:`Too many packages are loading. Try again shortly.`,502:`The npm registry couldn't be reached.`},ft=15e3,w=new Map;function pt(e){if(w.has(e))return;let t=new AbortController,n=d(e,{credentials:`same-origin`,signal:AbortSignal.any([t.signal,f.sessionController.signal])});n.catch(()=>{});let r={reading:n,until:Date.now()+ft,generation:f.generation};w.set(e,r),setTimeout(()=>{w.get(e)===r&&(w.delete(e),t.abort())},ft)}function mt(e,t){let n=w.get(e);return n?(w.delete(e),n.until>Date.now()&&n.generation===t?n.reading:null):null}var ht=(e,t)=>new Promise((n,r)=>{let i=()=>r(t.reason);if(t.aborted){i();return}t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))});async function T(e,t,n,r){r=r?AbortSignal.any([r,f.sessionController.signal]):f.sessionController.signal;let i=f.generation,a=()=>d(e,{credentials:`same-origin`,signal:r}),o=mt(e,i),s=o&&await ht(o,r).then(e=>e.ok?e:null,e=>{if(r.aborted)throw e;return null})||await a();if(r.throwIfAborted(),!s.ok){let e=await s.json().catch(()=>null),n=e?.error??null;throw Object.assign(Error(t[n]??t[s.status]??`Request failed (${s.status})`),{status:s.status,code:n,...typeof e?.commit==`string`?{commit:e.commit}:{}})}let c=await n(s);if(r.throwIfAborted(),i!==f.generation)throw new DOMException(`Managed session changed`,`AbortError`);return c}var E=(e,t,n)=>T(`/api/npm/${e}?${new URLSearchParams(t)}`,C,e=>e.json(),n),gt={"no-repository":`This repository is not available to you.`,"no-directory":`This directory is not at that commit, or not available to you.`,"directory-too-large":`This directory is too large to open here. Open one of its directories instead.`,"directory-unreadable":`GitHub’s archive of this directory couldn’t be read here, as when a symlink in it points outside the repository.`,"repository-busy":`Too many directories and packages are loading. Try again shortly.`,"repository-changed":`The repository changed while it was read. Try again.`,"github-rate-limited":`GitHub’s API rate limit has been reached. Try again later.`,"github-unauthorized":`GitHub authentication has expired or was revoked. Sign in again.`,"github-status-403":`GitHub denied this request. Check repository access and the GitHub App’s read permissions.`,"github-malformed":`GitHub’s archive of this directory could not be verified against its commit.`,"github-unreachable":`Could not connect to GitHub. Try again shortly.`,"github-timeout":`GitHub took too long to answer. Try again shortly.`,400:`Not a repository directory and commit.`,403:`Repository access is required to read its files.`,404:`This repository, commit or directory is unavailable.`,413:`This directory is too large to open here.`,429:`Too many directories and packages are loading. Try again shortly.`,502:`GitHub couldn’t be reached.`},D=(e,t,n)=>T(`/api/admin/repositories/${e}?${new URLSearchParams(t)}`,gt,e=>e.json(),n);function _t(e,t,n,{signal:r}={}){return D(`code`,{repoId:e,ref:t,path:n},r)}async function vt({signal:e}={}){return(await D(`browsable`,{},e)).repos??[]}function yt(e,{signal:t}={}){return D(`refs`,{repoId:e},t)}function bt(e,t,n,{signal:r,commitOnly:i=!1}={}){return D(`contents`,{repoId:e,ref:t,path:n,...i?{listing:`none`}:{}},r)}var xt={...gt,"no-directory":`This directory’s history is not available to you.`,"github-malformed":`GitHub answered with a history that couldn’t be read.`,"github-token-required":`Reading every branch needs your GitHub sign-in.`,400:`Not a repository’s history.`};function St(e,t,n,{page:r=1,all:i=!1,fresh:a=!1,from:o=null,signal:s}={}){return T(`/api/admin/repositories/history?${new URLSearchParams({repoId:e,ref:t,path:n,page:r,...i?{all:`true`}:{},...a?{fresh:`true`}:{},...o?{from:o.join(`,`)}:{}})}`,xt,e=>e.json(),s)}var Ct={...xt,"no-directory":`This directory’s changes are not available to you.`,"github-malformed":`GitHub answered with a commit’s files that couldn’t be read.`,400:`Not a repository’s commits.`};function wt(e,t,n,{signal:r}={}){return T(`/api/admin/repositories/changes?${new URLSearchParams({repoId:e,path:t,shas:n.join(`,`)})}`,Ct,e=>e.json(),r)}function Tt(e,t,n,{signal:r}={}){return T(`/api/admin/repositories/tree?${new URLSearchParams({repoId:e,path:t,commit:n})}`,Ct,e=>e.json(),r)}var O={...gt,"no-directory":`Issues and pull requests show only with access to the whole repository.`,"github-malformed":`GitHub answered with a list that couldn’t be read.`,"github-token-required":`Reading issues and pull requests needs your GitHub sign-in.`,"github-status-403":`GitHub refused to list these. The GitHub App reading this repository needs Issues: read and Pull requests: read, which an owner of its installation approves.`,400:`Not a repository’s issues or pull requests.`},Et=(e,t,n,r)=>`/api/admin/repositories/issues?${new URLSearchParams({repoId:e,kind:t,state:n,...r?{after:r}:{}})}`;function Dt(e,t,{state:n=`open`,after:r=null,signal:i}={}){return T(Et(e,t,n,r),O,e=>e.json(),i)}var Ot={...O,"no-directory":`Agents show only with access to the whole repository.`,"github-token-required":`Reading what the agents did needs your GitHub sign-in.`,400:`Not a repository’s agents.`},kt=(e,t,n)=>`/api/admin/repositories/agents?${new URLSearchParams({repoId:e,...t?{pulls:t}:{},...n?{commits:n}:{}})}`;function At(e,{pulls:t=null,commits:n=null,signal:r}={}){return T(kt(e,t,n),Ot,e=>e.json(),r)}var k={...O,"github-not-found":`GitHub has no issue or pull request of that number here.`,400:`Not an issue or pull request of a repository.`};function jt(e,t,{signal:n}={}){return T(`/api/admin/repositories/item?${new URLSearchParams({repoId:e,number:t})}`,k,e=>e.json(),n)}var A={...k,"github-not-found":`GitHub has no pull request of that number here.`,"github-malformed":`GitHub answered with a pull request or lockfile that couldn’t be read.`,"github-status-403":`GitHub refused to read its lockfiles. The GitHub App reading this repository needs Contents: read and Pull requests: read, which an owner of its installation approves.`,400:`Not a pull request of a repository.`},Mt=({review:e,listed:t})=>({...e?{review:`1`}:{},...t?{listed:`1`}:{}});function Nt(e,t,{review:n=!1,listed:r=!1,signal:i}={}){return T(`/api/admin/repositories/pull-dependencies?${new URLSearchParams({repoId:e,number:t,...Mt({review:n,listed:r})})}`,A,e=>e.json(),i)}async function Pt(e,t,{review:n=!1,listed:r=!1,signal:i}={}){let{pulls:a}=await T(`/api/admin/repositories/pull-dependencies?${new URLSearchParams({repoId:e,numbers:t.join(`,`),...Mt({review:n,listed:r})})}`,A,e=>e.json(),i);return Ft(a)}var Ft=e=>new Map((Array.isArray(e)?e:[]).filter(e=>Number.isSafeInteger(e?.number)).map(e=>[e.number,typeof e.error==`string`?Object.assign(Error(A[e.error]??`It couldn\u2019t be read (${e.error}).`),{code:e.error}):e])),It={...k,"github-not-found":`GitHub has none of a lockfile it lists on the default branch.`,"github-malformed":`GitHub answered with a lockfile that couldn’t be read.`,"github-status-403":`GitHub refused to read its lockfiles. The GitHub App reading this repository needs Contents: read, which an owner of its installation approves.`,400:`Not a repository.`},Lt={"no-team":`This team is not available to you.`,400:`Not a team’s repositories.`};function Rt(e,t,{repoIds:n=null,signal:r}={}){let i=n?`?${new URLSearchParams({repoIds:n.join(`,`)})}`:``;return T(`/api/teams/${encodeURIComponent(e)}/dependencies${i}`,Lt,async e=>{let n=f.generation;for await(let r of M(e)){if(n!==f.generation)throw new DOMException(`Managed session changed`,`AbortError`);t(typeof r.error==`string`?{...r,error:It[r.error]??It[r.status]??`It couldn\u2019t be read (${r.error}).`,code:r.error}:Array.isArray(r.dependencies)?{...r,dependencies:Ft(r.dependencies)}:r)}},r)}var zt={...O,"no-directory":`Pulse shows only with access to the whole repository.`,"github-malformed":`GitHub answered with statistics that couldn’t be read.`,"github-token-required":`Reading a repository’s pulse needs your GitHub sign-in.`,"github-status-403":`GitHub refused to read these. The GitHub App reading this repository needs Contents, Issues and Pull requests: read, which an owner of its installation approves.`,400:`Not a repository’s pulse.`},Bt=(e,t)=>`/api/admin/repositories/pulse?${new URLSearchParams({repoId:e,weeks:t})}`;function Vt(e,t,{signal:n}={}){return T(Bt(e,t),zt,e=>e.json(),n)}function Ht(e,t,{state:n=`open`,weeks:r=4}={}){t===`issues`||t===`pulls`?pt(Et(e,t,n,null)):t===`agents`?pt(kt(e,null,null)):t===`pulse`&&pt(Bt(e,r))}function Ut(e,t,{from:n,to:r=null,authors:i=[]},{signal:a}={}){return T(`/api/admin/repositories/pulse/items?${new URLSearchParams({repoId:e,weeks:t,from:n,...r===null?{}:{to:r},...i.length>0?{authors:i.join(`,`)}:{}})}`,zt,e=>e.json(),a)}function Wt(e,t,{signal:n,patch:r=null}={}){return E(`package`,{name:e,version:t,...dt(r)},n)}function Gt(e,{signal:t}={}){return E(`versions`,{name:e},t)}function Kt(e,{signal:t}={}){return E(`stats`,{name:e},t)}function qt(e,{signal:t}={}){return E(`advisories`,{name:e},t)}function Jt(e,t,{signal:n}={}){return E(`tags`,{name:e,version:t},n)}function Yt(e,t,{signal:n}={}){return E(`socket`,{name:e,version:t},n)}function Xt(e,t,n=null,{signal:r}={}){return E(`risk`,{name:e,version:t,...n===null?{}:{otherVersion:n}},r)}function Zt(e,t,{signal:n}={}){return E(`provenance`,{name:e,version:t},n)}var j={404:`This file is no longer available.`,409:`This file has changed since it was opened.`,413:`This file is too large to pretty-print.`,422:`This file couldn't be read as code.`,"pretty-mismatch":`Pretty-printing would change more than its layout, so it is shown as published.`,unsupported:`This kind of file can't be checked once pretty-printed, so it is shown as published.`,429:`Too many files are being pretty-printed. Try again shortly.`,502:`The npm registry couldn't be reached.`};function Qt(e,t,n,{signal:r}={}){return T(`/api/bundles/${encodeURIComponent(e)}/pretty?${new URLSearchParams({path:t,hash:n})}`,j,en,r)}function $t(e,t,n,r,{signal:i}={}){return T(`/api/npm/pretty?${new URLSearchParams({name:e,version:t,path:n,hash:r})}`,{...C,...j},en,i)}var en=async e=>({text:await e.text(),source:e.headers.get(`x-source-hash`)});async function*M(e){let t=e.body.pipeThrough(new TextDecoderStream).getReader(),n=[];for(;;){let{done:e,value:r}=await t.read();if(e)return;let i=0;for(let e=r.indexOf(`
|
|
1
|
+
import{b as e,d as t,i as n}from"./chunk-MYGJBYYJ.js";import{a as r,b as i,c as a}from"./chunk-GDPCLSOS.js";import{A as o,B as s,a as c,b as l,c as u,d,e as f,f as ee,g as te,h as ne,i as re,j as ie,k as ae,l as oe,m as se,n as ce,o as le,p as ue,q as de,r as fe,s as pe,t as me,u as he,v as ge,w as _e,x as ve,y as ye,z as be}from"./chunk-JEFZTVNX.js";import"./chunk-QB4CBOX2.js";import{Ba as xe,E as Se,F as Ce,Ja as we,Ra as Te,Sa as Ee,Ta as De,Ua as Oe,Va as ke,Wa as Ae,ba as je,ca as Me,e as Ne,fa as Pe,g as Fe,j as Ie,k as p,w as Le}from"./chunk-LJ7XRXFU.js";import{w as Re}from"./chunk-7VAWINQF.js";import{b as ze}from"./chunk-NRPC74AM.js";import"./chunk-PNHBZGDD.js";import"./chunk-VFWMQ3LG.js";import{a as m,e as Be}from"./chunk-WCPJDAYA.js";import"./chunk-IYPY47MC.js";import{a as Ve,d as He}from"./chunk-PWFUOLZK.js";import{h as Ue,m as h}from"./chunk-HT2SSA3V.js";import{B as We,D as Ge,J as Ke}from"./chunk-SXV2T5C4.js";import{B as qe,C as Je,d as g,h as Ye,i as Xe,j as Ze,w as Qe,x as $e}from"./chunk-WFYLMF6Z.js";import"./chunk-C4Z6ZBXV.js";import{a as _,b as et,c as v,d as tt,g as y,j as nt}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-OOJM4CTU.js";var b=class extends nt{static properties={session:{attribute:!1},allowShare:{attribute:!1},_loading:{state:!0}};constructor(){super(),this.session=null,this.allowShare=!1,this.appState=f,this._loading=!1,this._loadRequest=null}get _role(){return this.session?.role??null}get _csrf(){return this.session?.csrfToken??null}get _me(){return this.session?.id??null}disconnectedCallback(){this._loadRequest?.abort(),super.disconnectedCallback()}async _loadCollection(e,t,n,r){this._loadRequest?.abort();let i=new AbortController;this._loadRequest=i,this._loading=!0;try{await this.appState.load(e,t,n,{signal:i.signal,apply:r})}catch(t){!i.signal.aborted&&t?.name!==`AbortError`&&this.appState.read(e)===void 0&&(this._error=String(t?.message??t))}finally{this._loadRequest===i&&(this._loading=!1)}}};function x(e){return v`<div class="loading-rows" role="status"><span class="sr-only">${e}</span><div aria-hidden="true">${[0,1,2,3].map(()=>v`<div class="loading-row"><span></span><span></span></div>`)}</div></div>`}var rt=class extends we{get changeEvent(){return`local-item-change`}get searchLabel(){return`Search local files`}get optionsLabel(){return`Local files`}get noMatchesLabel(){return`No matching files.`}get emptyLabel(){return`No local files available.`}choices(){let e=this._query.trim().toLocaleLowerCase(),t=this.options.filter(t=>`${t.label} ${t.secondary??``}`.toLocaleLowerCase().includes(e));return{pinned:[],sections:[{options:t}],count:t.length,total:this.options.length,showFacets:!1}}};customElements.define(`managed-local-item-selector`,rt);var it=class{constructor(e,t,n){this.host=e,this.kind=t,this.upload=n,this.source=null,this.hasData=!1,this.open=!1,this.options=[],this.value=null,this.busy=!1,this.loading=!1,this.error=``,this.success=``,this.generation=0,this.readAbort=null,this.onChange=e=>{if(e?.kind){if(e.kind!==this.kind)return;if(e.value!==this.value){this.refresh();return}}this.readAbort&&!this.readAbort.signal.aborted&&(this.readAbort.abort(),this.error=`The local ${this.kind} changed or the list was refreshed. Select it again before importing.`),this.options=[],this.value=null,this.success=``,this.refresh()},this.onBlur=()=>{this.readAbort&&!this.readAbort.signal.aborted&&this.onChange()},this.onVisibilityChange=()=>{globalThis.document?.visibilityState===`hidden`&&this.onBlur()},e.addController(this)}hostConnected(){globalThis.addEventListener(`focus`,this.onChange),globalThis.addEventListener(`blur`,this.onBlur),globalThis.addEventListener(`storage`,this.onChange),globalThis.document?.addEventListener(`visibilitychange`,this.onVisibilityChange),this.connectSource()}hostUpdated(){this.connectSource()}connectSource(){this.source!==this.host.localImportSource&&(this.unsubscribe?.(),this.abort?.abort(),this.source=this.host.localImportSource,this.unsubscribe=this.source?.subscribe(this.onChange),this.onChange())}hostDisconnected(){++this.generation,this.abort?.abort(),this.unsubscribe?.(),this.source=null,globalThis.removeEventListener(`focus`,this.onChange),globalThis.removeEventListener(`blur`,this.onBlur),globalThis.removeEventListener(`storage`,this.onChange),globalThis.document?.removeEventListener(`visibilitychange`,this.onVisibilityChange)}async refresh(){let e=++this.generation,t=this.source;this.loading=!0,this.host.requestUpdate();try{let n=t?await t.hasData(this.kind):!1;if(e!==this.generation)return;this.hasData=n;let r=this.open&&!t?.locked?await t?.list(this.kind)??[]:[];if(e!==this.generation)return;this.options=r,r.some(e=>e.value===this.value)||(this.value=null)}catch(t){e===this.generation&&(this.error=String(t?.message??t))}finally{e===this.generation&&(this.loading=!1,this.host.requestUpdate())}}toggle(){this.busy||(this.open=!this.open,this.error=``,this.success=``,this.options=[],this.value=null,this.refresh())}async unlock(){if(this.busy)return;this.busy=!0,this.error=``;let e=this.abort=new AbortController;this.host.requestUpdate();try{await this.source.unlock({signal:e.signal})&&!e.signal.aborted&&await this.refresh()}catch(t){e.signal.aborted||(this.error=String(t?.message??t))}finally{this.busy=!1,this.host.requestUpdate()}}async importSelected(){if(this.busy||this.loading||!this.value||this.source?.locked)return;this.busy=!0,this.error=``,this.success=``;let e=this.options.find(e=>e.value===this.value)?.label,t=this.abort=new AbortController;this.readAbort=t,this.host.requestUpdate();try{await this.source.importItem(this.kind,this.value,e=>(this.readAbort=null,this.upload(e)),{signal:t.signal}),!t.signal.aborted&&!this.source?.locked&&(this.success=`Imported ${e}.`,this.value=null)}catch(e){t.signal.aborted||(this.error=String(e?.message??e))}finally{this.readAbort===t&&(this.readAbort=null),this.busy=!1,this.host.requestUpdate()}}renderAction(){return this.hasData||this.open?v`<button type="button" class="local-import-toggle" aria-expanded="${this.open}" aria-controls="local-import-panel" ?disabled="${this.busy}" @click="${()=>this.toggle()}">Import</button>`:y}renderPanel(e){if(!this.open)return y;let t=this.source?.locked;return v`<section class="local-import-panel" id="local-import-panel" aria-label="${`Import local ${this.kind}`}"><div class="local-import-copy"><strong>Import local ${this.kind}</strong><p>${t?`Unlock local data with your passkey to choose a file.`:`Copy a file from this browser to the managed workspace. The local copy stays on this device.`}</p></div><div class="local-import-controls">${t?v`<button type="button" class="local-import-submit" ?disabled="${this.busy}" @click="${()=>this.unlock()}">${this.busy?`Waiting for passkey…`:`Unlock with passkey`}</button>`:v`<managed-local-item-selector label="${`Choose local ${this.kind}`}" placeholder="${this.loading?`Loading local files…`:`Choose local ${this.kind}\u2026`}" .options="${this.options}" .value="${this.value}" ?disabled="${this.busy||this.loading}" @local-item-change="${e=>{this.value=e.detail.value,this.success=``,this.host.requestUpdate()}}"></managed-local-item-selector><button type="button" class="local-import-submit" ?disabled="${e||this.busy||this.loading||!this.value}" @click="${()=>this.importSelected()}">${this.busy?`Importing…`:`Import ${this.kind}`}</button>`} <button type="button" class="local-import-close" ?disabled="${this.busy}" @click="${()=>this.toggle()}">Close</button></div>${!t&&!this.loading&&this.options.length===0?v`<p class="local-import-message">No local ${this.kind}s available.</p>`:y} ${this.error?v`<p class="local-import-message error" role="alert">${this.error} <button type="button" ?disabled="${this.busy}" @click="${()=>{this.error=``,this.refresh()}}">Retry</button></p>`:y} ${this.success?v`<p class="local-import-message" role="status">${this.success}</p>`:y}</section>`}};async function at({signal:e}={}){e=e?AbortSignal.any([e,f.sessionController.signal]):f.sessionController.signal,e.throwIfAborted();let t=await d(`/api/admin/bundles`,{credentials:`same-origin`,signal:e});if(e.throwIfAborted(),!t.ok)throw Object.assign(Error(`Bundle catalogue request failed (${t.status})`),{status:t.status});let n=await t.json();return e.throwIfAborted(),n.bundles??[]}async function S(e,t,n){let r=f.generation,i=await d(`/api/bundles/${encodeURIComponent(e)}/${t}`,{credentials:`same-origin`,signal:n});if(n?.throwIfAborted(),!i.ok)throw Object.assign(Error(`Bundle ${t} request failed (${i.status})`),{status:i.status});let a=t===`contents`?await i.text():await i.json();if(n?.throwIfAborted(),r!==f.generation)throw new DOMException(`Managed session changed`,`AbortError`);return a}function ot(e,{signal:t}={}){return f.load(`bundle-metadata:${e}`,`bundle metadata`,t=>S(e,`metadata`,t),{signal:t,retryInvalidated:!0})}async function st(e,{signal:t}={}){t=t?AbortSignal.any([t,f.sessionController.signal]):f.sessionController.signal;let n=await S(e,`metadata`,t),r=n?.bundle?.repo??null,i=Ge({repo:r});if(!i)return r;let a=new URLSearchParams({repo:i,directory:r.directory??``}),o=new Set(n.unsized??[]),s=ze((n.files??[]).filter(([e,t])=>t!=null||o.has(e)).map(([e])=>e));s&&a.set(`filePrefix`,s);let c=await d(`/api/admin/repositories/resolve?${a}`,{credentials:`same-origin`,cache:`no-store`,signal:t});if(t.throwIfAborted(),!c.ok)throw Error(`Repository suggestion request failed (${c.status})`);let{location:l}=await c.json();return t.throwIfAborted(),l?{...r,github:l.github,...l.mapped?{directory:l.directory}:{},repoId:l.repoId}:r}async function ct(e,{signal:t}={}){t=t?AbortSignal.any([t,f.sessionController.signal]):f.sessionController.signal;try{return await S(e,`contents`,t)}catch(e){throw e.name!==`AbortError`&&f.notify(`Couldn't load bundle contents: ${e.message}`),e}}function lt(e,t,n=``,r=!1,i=!1){let a=[t?`team=${encodeURIComponent(t)}`:``,n?`reason=${encodeURIComponent(n)}`:``,r?`repoAdvisories=true`:``,i?`details=true`:``].filter(Boolean).join(`&`);return S(e,`advisories${a?`?${a}`:``}`,f.sessionController.signal)}var ut={"patch-not-found":`The patch isn’t at the commit it was read at.`,"patch-mismatch":`The file at the commit the patch was read at isn’t the patch its lockfile names.`,"patch-unreadable":`The patch couldn’t be read as git writes one.`,"patch-unsupported":`The patch changes a file’s bytes, which isn’t reviewed here.`,"patch-does-not-apply":`The patch doesn’t apply to this version.`,"patch-too-large":`The patch is too large to read here.`,"no-repository":`The repository the patch is in isn’t available to you.`,"no-directory":`Only some of the repository the patch is in is available to you.`,"github-token-required":`Reading the patch needs your GitHub sign-in.`},dt=e=>e?{patchHash:e.hash,patchRepoId:String(e.repoId),patchCommit:e.commit,patchPath:e.path}:{},C={...ut,"bad-tarball":`This package's tarball couldn't be read.`,"upstream-invalid":`The npm registry's answer for this package couldn't be read.`,"upstream-too-large":`The npm registry's answer for this package is too large to read here.`,400:`Not an npm package name and version.`,404:`No such package version, or it is not available to you.`,413:`This package is too large to open here.`,429:`Too many packages are loading. Try again shortly.`,502:`The npm registry couldn't be reached.`},ft=15e3,w=new Map;function pt(e){if(w.has(e))return;let t=new AbortController,n=d(e,{credentials:`same-origin`,signal:AbortSignal.any([t.signal,f.sessionController.signal])});n.catch(()=>{});let r={reading:n,until:Date.now()+ft,generation:f.generation};w.set(e,r),setTimeout(()=>{w.get(e)===r&&(w.delete(e),t.abort())},ft)}function mt(e,t){let n=w.get(e);return n?(w.delete(e),n.until>Date.now()&&n.generation===t?n.reading:null):null}var ht=(e,t)=>new Promise((n,r)=>{let i=()=>r(t.reason);if(t.aborted){i();return}t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))});async function T(e,t,n,r){r=r?AbortSignal.any([r,f.sessionController.signal]):f.sessionController.signal;let i=f.generation,a=()=>d(e,{credentials:`same-origin`,signal:r}),o=mt(e,i),s=o&&await ht(o,r).then(e=>e.ok?e:null,e=>{if(r.aborted)throw e;return null})||await a();if(r.throwIfAborted(),!s.ok){let e=await s.json().catch(()=>null),n=e?.error??null;throw Object.assign(Error(t[n]??t[s.status]??`Request failed (${s.status})`),{status:s.status,code:n,...typeof e?.commit==`string`?{commit:e.commit}:{}})}let c=await n(s);if(r.throwIfAborted(),i!==f.generation)throw new DOMException(`Managed session changed`,`AbortError`);return c}var E=(e,t,n)=>T(`/api/npm/${e}?${new URLSearchParams(t)}`,C,e=>e.json(),n),gt={"no-repository":`This repository is not available to you.`,"no-directory":`This directory is not at that commit, or not available to you.`,"directory-too-large":`This directory is too large to open here. Open one of its directories instead.`,"directory-unreadable":`GitHub’s archive of this directory couldn’t be read here, as when a symlink in it points outside the repository.`,"repository-busy":`Too many directories and packages are loading. Try again shortly.`,"repository-changed":`The repository changed while it was read. Try again.`,"github-rate-limited":`GitHub’s API rate limit has been reached. Try again later.`,"github-unauthorized":`GitHub authentication has expired or was revoked. Sign in again.`,"github-status-403":`GitHub denied this request. Check repository access and the GitHub App’s read permissions.`,"github-malformed":`GitHub’s archive of this directory could not be verified against its commit.`,"github-unreachable":`Could not connect to GitHub. Try again shortly.`,"github-timeout":`GitHub took too long to answer. Try again shortly.`,400:`Not a repository directory and commit.`,403:`Repository access is required to read its files.`,404:`This repository, commit or directory is unavailable.`,413:`This directory is too large to open here.`,429:`Too many directories and packages are loading. Try again shortly.`,502:`GitHub couldn’t be reached.`},D=(e,t,n)=>T(`/api/admin/repositories/${e}?${new URLSearchParams(t)}`,gt,e=>e.json(),n);function _t(e,t,n,{signal:r}={}){return D(`code`,{repoId:e,ref:t,path:n},r)}async function vt({signal:e}={}){return(await D(`browsable`,{},e)).repos??[]}function yt(e,{signal:t}={}){return D(`refs`,{repoId:e},t)}function bt(e,t,n,{signal:r,commitOnly:i=!1}={}){return D(`contents`,{repoId:e,ref:t,path:n,...i?{listing:`none`}:{}},r)}var xt={...gt,"no-directory":`This directory’s history is not available to you.`,"github-malformed":`GitHub answered with a history that couldn’t be read.`,"github-token-required":`Reading every branch needs your GitHub sign-in.`,400:`Not a repository’s history.`};function St(e,t,n,{page:r=1,all:i=!1,fresh:a=!1,from:o=null,signal:s}={}){return T(`/api/admin/repositories/history?${new URLSearchParams({repoId:e,ref:t,path:n,page:r,...i?{all:`true`}:{},...a?{fresh:`true`}:{},...o?{from:o.join(`,`)}:{}})}`,xt,e=>e.json(),s)}var Ct={...xt,"no-directory":`This directory’s changes are not available to you.`,"github-malformed":`GitHub answered with a commit’s files that couldn’t be read.`,400:`Not a repository’s commits.`};function wt(e,t,n,{signal:r}={}){return T(`/api/admin/repositories/changes?${new URLSearchParams({repoId:e,path:t,shas:n.join(`,`)})}`,Ct,e=>e.json(),r)}function Tt(e,t,n,{signal:r}={}){return T(`/api/admin/repositories/tree?${new URLSearchParams({repoId:e,path:t,commit:n})}`,Ct,e=>e.json(),r)}var O={...gt,"no-directory":`Issues and pull requests show only with access to the whole repository.`,"github-malformed":`GitHub answered with a list that couldn’t be read.`,"github-token-required":`Reading issues and pull requests needs your GitHub sign-in.`,"github-status-403":`GitHub refused to list these. The GitHub App reading this repository needs Issues: read and Pull requests: read, which an owner of its installation approves.`,400:`Not a repository’s issues or pull requests.`},Et=(e,t,n,r)=>`/api/admin/repositories/issues?${new URLSearchParams({repoId:e,kind:t,state:n,...r?{after:r}:{}})}`;function Dt(e,t,{state:n=`open`,after:r=null,signal:i}={}){return T(Et(e,t,n,r),O,e=>e.json(),i)}var Ot={...O,"no-directory":`Agents show only with access to the whole repository.`,"github-token-required":`Reading what the agents did needs your GitHub sign-in.`,400:`Not a repository’s agents.`},kt=(e,t,n)=>`/api/admin/repositories/agents?${new URLSearchParams({repoId:e,...t?{pulls:t}:{},...n?{commits:n}:{}})}`;function At(e,{pulls:t=null,commits:n=null,signal:r}={}){return T(kt(e,t,n),Ot,e=>e.json(),r)}var k={...O,"github-not-found":`GitHub has no issue or pull request of that number here.`,400:`Not an issue or pull request of a repository.`};function jt(e,t,{signal:n}={}){return T(`/api/admin/repositories/item?${new URLSearchParams({repoId:e,number:t})}`,k,e=>e.json(),n)}var A={...k,"github-not-found":`GitHub has no pull request of that number here.`,"github-malformed":`GitHub answered with a pull request or lockfile that couldn’t be read.`,"github-status-403":`GitHub refused to read its lockfiles. The GitHub App reading this repository needs Contents: read and Pull requests: read, which an owner of its installation approves.`,400:`Not a pull request of a repository.`},Mt=({review:e,listed:t})=>({...e?{review:`1`}:{},...t?{listed:`1`}:{}});function Nt(e,t,{review:n=!1,listed:r=!1,signal:i}={}){return T(`/api/admin/repositories/pull-dependencies?${new URLSearchParams({repoId:e,number:t,...Mt({review:n,listed:r})})}`,A,e=>e.json(),i)}async function Pt(e,t,{review:n=!1,listed:r=!1,signal:i}={}){let{pulls:a}=await T(`/api/admin/repositories/pull-dependencies?${new URLSearchParams({repoId:e,numbers:t.join(`,`),...Mt({review:n,listed:r})})}`,A,e=>e.json(),i);return Ft(a)}var Ft=e=>new Map((Array.isArray(e)?e:[]).filter(e=>Number.isSafeInteger(e?.number)).map(e=>[e.number,typeof e.error==`string`?Object.assign(Error(A[e.error]??`It couldn\u2019t be read (${e.error}).`),{code:e.error}):e])),It={...k,"github-not-found":`GitHub has none of a lockfile it lists on the default branch.`,"github-malformed":`GitHub answered with a lockfile that couldn’t be read.`,"github-status-403":`GitHub refused to read its lockfiles. The GitHub App reading this repository needs Contents: read, which an owner of its installation approves.`,400:`Not a repository.`},Lt={"no-team":`This team is not available to you.`,400:`Not a team’s repositories.`};function Rt(e,t,{repoIds:n=null,signal:r}={}){let i=n?`?${new URLSearchParams({repoIds:n.join(`,`)})}`:``;return T(`/api/teams/${encodeURIComponent(e)}/dependencies${i}`,Lt,async e=>{let n=f.generation;for await(let r of M(e)){if(n!==f.generation)throw new DOMException(`Managed session changed`,`AbortError`);t(typeof r.error==`string`?{...r,error:It[r.error]??It[r.status]??`It couldn\u2019t be read (${r.error}).`,code:r.error}:Array.isArray(r.dependencies)?{...r,dependencies:Ft(r.dependencies)}:r)}},r)}var zt={...O,"no-directory":`Pulse shows only with access to the whole repository.`,"github-malformed":`GitHub answered with statistics that couldn’t be read.`,"github-token-required":`Reading a repository’s pulse needs your GitHub sign-in.`,"github-status-403":`GitHub refused to read these. The GitHub App reading this repository needs Contents, Issues and Pull requests: read, which an owner of its installation approves.`,400:`Not a repository’s pulse.`},Bt=(e,t)=>`/api/admin/repositories/pulse?${new URLSearchParams({repoId:e,weeks:t})}`;function Vt(e,t,{signal:n}={}){return T(Bt(e,t),zt,e=>e.json(),n)}function Ht(e,t,{state:n=`open`,weeks:r=4}={}){t===`issues`||t===`pulls`?pt(Et(e,t,n,null)):t===`agents`?pt(kt(e,null,null)):t===`pulse`&&pt(Bt(e,r))}function Ut(e,t,{from:n,to:r=null,authors:i=[]},{signal:a}={}){return T(`/api/admin/repositories/pulse/items?${new URLSearchParams({repoId:e,weeks:t,from:n,...r===null?{}:{to:r},...i.length>0?{authors:i.join(`,`)}:{}})}`,zt,e=>e.json(),a)}function Wt(e,t,{signal:n,patch:r=null}={}){return E(`package`,{name:e,version:t,...dt(r)},n)}function Gt(e,{signal:t}={}){return E(`versions`,{name:e},t)}function Kt(e,{signal:t}={}){return E(`stats`,{name:e},t)}function qt(e,{signal:t}={}){return E(`advisories`,{name:e},t)}function Jt(e,t,{signal:n}={}){return E(`tags`,{name:e,version:t},n)}function Yt(e,t,{signal:n}={}){return E(`socket`,{name:e,version:t},n)}function Xt(e,t,n=null,{signal:r}={}){return E(`risk`,{name:e,version:t,...n===null?{}:{otherVersion:n}},r)}function Zt(e,t,{signal:n}={}){return E(`provenance`,{name:e,version:t},n)}var j={404:`This file is no longer available.`,409:`This file has changed since it was opened.`,413:`This file is too large to pretty-print.`,422:`This file couldn't be read as code.`,"pretty-mismatch":`Pretty-printing would change more than its layout, so it is shown as published.`,unsupported:`This kind of file can't be checked once pretty-printed, so it is shown as published.`,429:`Too many files are being pretty-printed. Try again shortly.`,502:`The npm registry couldn't be reached.`};function Qt(e,t,n,{signal:r}={}){return T(`/api/bundles/${encodeURIComponent(e)}/pretty?${new URLSearchParams({path:t,hash:n})}`,j,en,r)}function $t(e,t,n,r,{signal:i}={}){return T(`/api/npm/pretty?${new URLSearchParams({name:e,version:t,path:n,hash:r})}`,{...C,...j},en,i)}var en=async e=>({text:await e.text(),source:e.headers.get(`x-source-hash`)});async function*M(e){let t=e.body.pipeThrough(new TextDecoderStream).getReader(),n=[];for(;;){let{done:e,value:r}=await t.read();if(e)return;let i=0;for(let e=r.indexOf(`
|
|
2
2
|
`);e!==-1;i=e+1,e=r.indexOf(`
|
|
3
3
|
`,i))n.push(r.slice(i,e)),yield JSON.parse(n.join(``)),n=[];n.push(r.slice(i))}}function tn(e,t,n,{signal:r}={}){return N(`/api/npm/pretty?${new URLSearchParams({name:e,version:t})}`,C,n,r)}function nn(e,t,n,{signal:r}={}){return N(`/api/bundles/${encodeURIComponent(e)}/pretty?${new URLSearchParams({other:t})}`,j,n,r)}function rn(e,t,n,r,{signal:i}={}){return N(`/api/npm/pretty?${new URLSearchParams({name:e,version:t,otherVersion:n})}`,C,r,i)}function N(e,t,n,r,i=j){return T(e,t,async e=>{let t=f.generation;for await(let{error:r,status:a,...o}of M(e)){if(t!==f.generation)throw new DOMException(`Managed session changed`,`AbortError`);await n(r?{...o,status:a,message:i[r]??i[a]??`Request failed (${a})`}:o)}},r)}var an={...j,413:`This file is too large to compare with renamed names hidden.`,422:`This file couldn't be compared as code.`,"diff-busy":`Too many files are being compared. Try again shortly.`,504:`Comparing this file took too long.`},on=(e,t)=>T(e,an,e=>e.json(),t);function sn(e,t,{path:n,hash:r,otherPath:i,otherHash:a},{signal:o}={}){return on(`/api/bundles/${encodeURIComponent(e)}/rename-diff?${new URLSearchParams({path:n,hash:r,other:t,otherPath:i,otherHash:a})}`,o)}function cn(e,t,n,{path:r,hash:i,otherPath:a,otherHash:o},{signal:s}={}){return on(`/api/npm/rename-diff?${new URLSearchParams({name:e,version:t,path:r,hash:i,otherVersion:n,otherPath:a,otherHash:o})}`,s)}var ln=(e,t)=>new URLSearchParams({other:e,...t?{scope:t}:{}});function un(e,t,n,{signal:r,scope:i=``}={}){return N(`/api/bundles/${encodeURIComponent(e)}/rename-diff?${ln(t,i)}`,j,n,r,an)}function dn(e,t,n,r,{signal:i}={}){return N(`/api/npm/rename-diff?${new URLSearchParams({name:e,version:t,otherVersion:n})}`,C,r,i,an)}function fn(e,t,n,{signal:r,scope:i=``}={}){return N(`/api/bundles/${encodeURIComponent(e)}/type-only?${ln(t,i)}`,j,n,r)}function pn(e,t,n,r,{signal:i}={}){return N(`/api/npm/type-only?${new URLSearchParams({name:e,version:t,otherVersion:n})}`,C,r,i)}var mn={...C,"delta-busy":`Too many packages are being counted. Try again shortly.`,"delta-timeout":`Counting its lines took too long.`,"delta-failed":`Its lines couldn’t be counted.`};function hn(e,t,{signal:n}={}){return T(`/api/npm/deltas?${new URLSearchParams({versions:JSON.stringify(e)})}`,mn,async e=>{let n=f.generation;for await(let{error:r,status:i,...a}of M(e)){if(n!==f.generation)throw new DOMException(`Managed session changed`,`AbortError`);t(r?{...a,error:mn[r]??mn[i]??`Request failed (${i})`}:a)}},n)}var gn={404:`This bundle is no longer available.`,422:`This bundle couldn't be read.`,429:`Too many bundles are being compared. Try again shortly.`},_n=async e=>{let t=await e.json();return t.files.basePaths=new Map(t.files.basePaths),t};function vn(e,t,{signal:n,scope:r=``}={}){return T(`/api/bundles/${encodeURIComponent(e)}/comparison?${ln(t,r)}`,gn,_n,n)}function yn(e,t,n,{signal:r,otherName:i=e,patch:a=null}={}){return T(`/api/npm/comparison?${new URLSearchParams({name:e,version:t,otherVersion:n,...i===e?{}:{otherName:i},...dt(a)})}`,C,_n,r)}async function P(e,t){let n=await d(e,{signal:t,credentials:`same-origin`,headers:{accept:`application/json`}});if(!n.ok)throw Error(`HTTP ${n.status}`);return n.json()}function F(e,t,n){let r={"content-type":`application/json`};return t&&(r[`x-csrf-token`]=t),d(e,{method:`POST`,credentials:`same-origin`,headers:r,body:JSON.stringify(n)})}async function I(e){let t=await e.json().then(e=>typeof e?.error==`string`?e.error:``,()=>``);return[`repo-forbidden`,`forbidden`].includes(t)?`choose a repository and directory within your team access`:`HTTP 403${t?`: ${t}`:``}`}async function bn(e,t,n){let r=n?{"x-csrf-token":n}:{},i=await d(`/api/admin/${e}/${encodeURIComponent(t)}`,{method:`DELETE`,credentials:`same-origin`,headers:r});if(!i.ok)throw Error(`HTTP ${i.status}`)}async function xn(e,t,n,r,i,a){let o=new URLSearchParams({page:String(t),limit:`100`,kind:n,q:r.trim()});i&&o.set(`repo`,i),a&&o.set(`actor`,a);let s=await P(`/api/admin/history?${o}`,e);if(!Array.isArray(s?.history)||!Number.isSafeInteger(s.total)||s.total<0||!Number.isSafeInteger(s.page)||s.page<1)throw Error(`No history returned`);return s}async function Sn(e){let t=await P(`/api/admin/users`,e);return Array.isArray(t?.users)?t.users:[]}async function Cn(e,t,n){let r=await F(`/api/admin/set-role`,n,{userId:e,role:t});if(!r.ok)throw Error(`HTTP ${r.status}`)}async function wn(e,t,n,r){let i=new URLSearchParams({scope:e});return e===`installed`&&i.set(`showAll`,String(t)),n&&i.set(`refresh`,`true`),await P(`/api/admin/repositories?${i}`,r)}async function Tn(e,t,n){let r=await F(`/api/admin/repositories/select`,n,{repoId:e,selected:t});if(!r.ok)throw Error(`HTTP ${r.status}`)}async function En(e,{enabled:t,required:n,since:r,lockfiles:i},a){let o=await F(`/api/admin/repositories/dependency-review`,a,{repoId:e,enabled:t,required:n,since:r,...i?{lockfiles:i}:{}});if(!o.ok)throw Error(o.status===400?`Enter 1 to 10 required reviews, the commit as its full 40-character id, and at most 100 lockfiles by their paths in the repository.`:`HTTP ${o.status}`);return(await o.json()).dependencyReview}async function Dn(e,t){let n=await P(`/api/admin/repositories/lockfiles?repoId=${encodeURIComponent(e)}`,t);return Array.isArray(n?.lockfiles)?n.lockfiles.flatMap(e=>typeof e?.path==`string`?[e.path]:[]):[]}async function On(e,t){let n=await d(`/api/admin/repositories/add-public`,{method:`POST`,credentials:`same-origin`,headers:{"content-type":`application/json`,"x-csrf-token":t},body:JSON.stringify({repository:e})});if(!n.ok)throw Error({400:`Enter a repository as owner/repo or a GitHub repository URL.`,403:`You do not have permission to add arbitrary public repositories.`,404:`No public repository was found at that address.`,409:`Choose a public, non-archived repository.`}[n.status]??`GitHub lookup failed (HTTP ${n.status}). Try again.`)}async function kn(e,t){let n=await P(`/api/admin/repositories/impact?repoId=${encodeURIComponent(e)}`,t);if(n?.repoId!==e||!Array.isArray(n.reports)||!Array.isArray(n.bundles)||!Number.isSafeInteger(n.triageCount)||n.triageCount<0)throw Error(`Invalid repository data`);return n}async function An(e,t){let n=await d(`/api/admin/repositories/connect-app`,{method:`POST`,credentials:`same-origin`,headers:{"content-type":`application/json`,"x-csrf-token":t},body:JSON.stringify({repoId:e})}),r=await n.json();if(!n.ok)throw Error({"github-app-not-configured":`The GitHub App is not configured on this server.`,"repo-identity-changed":`The repository has changed on GitHub. Refresh and check its connection.`,"repo-connection-changed":`The connection or your permissions changed. Refresh and try again.`,"repo-not-connected":`This repository is no longer connected.`,forbidden:`Administrator access is required to connect the GitHub App.`}[r.error]??`Could not connect the GitHub App (HTTP ${n.status}). Try again.`);if(r.connected===!0)return r;if(r.connected!==!1||typeof r.installUrl!=`string`||!/^https:\/\/github\.com\/apps\/[^/?#]+\/installations\/new$/u.test(r.installUrl))throw Error(`Invalid GitHub installation response.`);return r}async function jn(e,t,n,r){let i=await F(`/api/admin/repositories/remove`,r,{repoId:e,fullName:t,acknowledge:!0,deleteTriage:n});if(!i.ok)throw Error(`HTTP ${i.status}`);return i.json()}async function Mn(e){return await P(`/api/admin/reports`,e)}async function Nn(e,t,n){let r=await d(`/api/admin/bundles/create`,{method:`POST`,credentials:`same-origin`,signal:n,headers:{"content-type":`application/json`,"x-csrf-token":t},body:JSON.stringify(e)}),i=await r.json();if(!r.ok)throw Error({"unsupported-entries":`Select JavaScript/TypeScript files (including JSX/TSX) or Solidity files. Stasis cannot mix languages or use JSON or Rust as remote entry points.`,"bad-conditions":`Check the export conditions and selected platforms.`,"metro-conditions":`Stasis’s Metro preset requires the react-native condition without manual changes.`,"build-lockfile":`Stasis needs a supported lockfile: pnpm-lock.yaml, yarn.lock (Yarn 1), package-lock.json, or soldeer.lock.`,"build-scope":`Your team needs access to the bundle’s project root, including its lockfile and dependencies.`,"build-busy":`A bundle is already being built, or the server is busy. Try again shortly.`,"build-timeout":`The bundle build timed out. Try a smaller selection or retry.`,"too-large":`This bundle exceeds the server’s size limit.`,"github-rate-limited":`GitHub’s API rate limit has been reached. Retry after the limit resets.`,"github-build-failed":`Could not fetch the repository from GitHub. Check access and retry.`,"repository-changed":`The repository connection changed during the build. Reload and try again.`,"bundle-conflict":`This bundle already exists but is outside your current access.`,"build-failed":`Stasis could not build this selection. Check that its lockfile is supported and all entry points and imports exist at this commit.`}[i.error]??(r.status===401?`Sign in again to create a bundle.`:r.status===403||r.status===404?`Repository access is required to create this bundle.`:`Could not create the bundle. Try again.`));return i}async function Pn(e,t,n=null,r=``){let i=(await P(`/api/config`)).managed?.uploadMaxBytes?.reports;if(Number.isSafeInteger(i)&&i>0){if(e.size>i)throw Error(`too large`)}else if(e.size>3145728)return Fn(e,t,n,r);let a=De(await e.text(),e.name);if(!a)return Fn(e,t,n,r);let o=[],s=[];for(let{name:e,content:i}of a)try{s.push(await Fn(new File([i],e,{type:`application/json`}),t,n,r))}catch(t){o.push(`${e}: ${String(t?.message??t)}`)}if(o.length>0)throw Error(`${o.length} of ${a.length} products failed (${o.join(`; `)})`);return s.at(-1)}async function Fn(e,t,n,r){let i={"content-type":e.type||`application/json`,"x-report-filename":encodeURIComponent(e.name)};t&&(i[`x-csrf-token`]=t),n!=null&&(i[`x-repo-id`]=String(n)),r!==``&&(i[`x-repo-directory`]=encodeURIComponent(r));let a=await d(`/api/admin/reports`,{method:`POST`,credentials:`same-origin`,headers:i,body:e});if(!a.ok){if(a.status===413)throw Error(`too large`);if(a.status===403)throw Error(await I(a));let e=await a.json().catch(()=>null);if(e?.error===`storage-encryption-required`)throw Error(`Link reports require managed storage encryption. Configure MANAGED_STORAGE_ENCRYPTION_KEY.`);if(e?.error===`invalid-report`)throw Error(typeof e.reason==`string`&&e.reason?`This file is not a report: ${e.reason}`:`This file is not a recognized report.`);let t=e?.error===`repo-not-connected`&&typeof e.repo==`string`?`: ${e.repo} is not connected`:``;throw Error(`HTTP ${a.status}${t}`)}return a.json()}async function In(e,t,n){let r=await F(`/api/admin/reports/set-visible`,n,{reportId:e,visible:t});if(!r.ok)throw Error(`HTTP ${r.status}`)}async function Ln(e,t,n,r){let i=await F(`/api/admin/reports/set-repo`,r,{reportId:e,repoId:t,directory:n});if(!i.ok)throw i.status===409?Error(`this report already defines its repository`):i.status===403?Error(await I(i)):Error(i.status===400?`invalid repository or directory`:`HTTP ${i.status}`);return i.json()}async function Rn(e,t){let n=await d(`/api/admin/reports/${encodeURIComponent(e)}/location`,{signal:t,credentials:`same-origin`});if(!n.ok)throw Error(`Report location suggestion request failed (${n.status})`);return(await n.json())?.location??null}async function zn(e,t){await bn(`reports`,e,t)}async function Bn(e){return await P(`/api/admin/bundles`,e)}async function Vn(e,t,n,r=``){let i={"content-type":`application/octet-stream`,"x-bundle-filename":encodeURIComponent(e.name)};t&&(i[`x-csrf-token`]=t),n!=null&&(i[`x-repo-id`]=String(n)),r&&(i[`x-repo-directory`]=encodeURIComponent(r));let a=await d(`/api/admin/bundles`,{method:`POST`,credentials:`same-origin`,headers:i,body:e});if(!a.ok)throw Error(a.status===413?`too large`:a.status===403?await I(a):`HTTP ${a.status}`);return a.json()}async function Hn(e,t){await bn(`bundles`,e,t)}async function Un(e,t,n){let r=await F(`/api/admin/bundles/set-visible`,n,{bundleId:e,visible:t});if(!r.ok)throw Error(`HTTP ${r.status}`)}async function Wn(e,t,n,r){let i=await F(`/api/admin/bundles/set-repo`,r,{bundleId:e,repoId:t,directory:n});if(!i.ok)throw Error(i.status===403?await I(i):i.status===400?`invalid repository or directory`:`HTTP ${i.status}`)}async function Gn(e){return await P(`/api/admin/teams`,e)}async function L(e,t,n){let r=await F(e,t,n);if(!r.ok)throw Error(r.status===409?`name already taken`:`HTTP ${r.status}`)}function Kn(e,t=!0){let n=document.createElement(`input`);n.type=`file`,n.multiple=t,n.addEventListener(`change`,()=>{e([...n.files])},{once:!0}),n.click()}function qn(e,t,n){let r=0,i=e=>Array.from(e.dataTransfer?.types??[]).includes(`Files`),a=e=>{i(e)&&(e.preventDefault(),r+=1,n(!0))},o=e=>{i(e)&&e.preventDefault()},s=e=>{i(e)&&(r=Math.max(0,r-1),r===0&&n(!1))},c=e=>{i(e)&&(e.preventDefault(),e.stopPropagation(),r=0,n(!1),t([...e.dataTransfer.files]))};return e.addEventListener(`dragenter`,a),e.addEventListener(`dragover`,o),e.addEventListener(`dragleave`,s),e.addEventListener(`drop`,c),()=>{e.removeEventListener(`dragenter`,a),e.removeEventListener(`dragover`,o),e.removeEventListener(`dragleave`,s),e.removeEventListener(`drop`,c)}}async function Jn(e,t,n,r){let i=e.appState.generation;try{return await e.appState.mutate(()=>n(t),r)}catch(t){throw i===e.appState.generation&&e.appState.invalidate(r),t}}async function Yn(e,t,n,r){if(e._busy||!e._csrf)throw Error(`Wait for the current operation to finish, then try again.`);e._busy=!0;try{await Jn(e,t,n,r)}finally{await e._load(),e._busy=!1;let t=e._queue.splice(0);t.length>0&&e._upload(t)}}async function Xn(e,t,n,r){if(t.length===0||(e._queue.push(...t),e._busy))return;e._busy=!0,e._error=null;let i=e.appState.generation,a=[],o=0;try{for(;e._queue.length>0;){if(e.appState.generation!==i){e._queue=[];break}let t=e._queue.shift();try{await Jn(e,t,n,r)}catch(n){if(n?.name===`AbortError`||e.appState.generation!==i){e._queue=[];break}a.push(`${t.name}: ${String(n?.message??n)}`)}o++}}finally{a.length>0&&(e._error=o===1?`Upload failed: ${a[0]}`:`Upload failed for ${a.length} of ${o} files: ${a.join(`; `)}`),e._busy=!1,await e._load({preserveError:!0})}}var Zn=`.local-import-toggle{flex-shrink:0;margin-block:calc(-.25rem - 1px);margin-left:auto;padding:.25rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:transparent;color:var(--muted);font:inherit;font-size:.75rem;line-height:1.5}.local-import-toggle:hover,.local-import-toggle[aria-expanded=true]{color:var(--text);background:rgb(from var(--text) r g b / .06)}.local-import-panel{display:grid;gap:.8rem;padding:1rem;margin-bottom:1.25rem;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:rgb(from var(--accent) r g b / .025)}.local-import-copy strong{font-size:.82rem;font-weight:600}.local-import-copy p,.local-import-message{margin:.3rem 0 0;color:var(--muted);font-size:.75rem;line-height:1.5}.local-import-controls{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}managed-local-item-selector{flex:1 1 16rem;min-width:0}.local-import-controls button,.local-import-message button{padding:.35rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:transparent;color:var(--text);font:inherit;font-size:.75rem;line-height:1.5}.local-import-controls .local-import-submit{border-color:rgb(from var(--accent) r g b / .4);background:rgb(from var(--accent) r g b / .1);color:var(--accent)}.local-import-controls .local-import-close{color:var(--muted)}.local-import-panel button:disabled,.local-import-toggle:disabled{opacity:.5}.local-import-panel button:focus-visible,.local-import-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.local-import-message.error{color:var(--critical)}
|
|
4
4
|
`,Qn=`.home-section{margin-top:1.1rem;margin-bottom:2rem}.section-heading{display:flex;align-items:baseline;gap:1rem;margin-bottom:.85rem}.section-heading h2{margin:0;font-size:.86rem;font-weight:600}.section-heading>span{color:var(--muted);font-size:.75rem}.pages{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem}.page{display:flex;flex-direction:column;gap:.85rem;padding:1.35rem;border:1px solid var(--border);border-radius:var(--ui-radius, 12px);color:var(--text);background:var(--panel);text-align:left;font:inherit}.page:hover{background:var(--panel-hover);border-color:color-mix(in srgb,var(--muted) 60%,var(--border))}.page-top{display:flex;align-items:center;gap:.75rem;width:100%}.page-icon{display:grid;place-items:center;flex-shrink:0;width:2.5rem;height:2.5rem;border:1px solid color-mix(in srgb,var(--accent) 16%,var(--border));border-radius:var(--ui-radius, 9px);background:color-mix(in srgb,var(--accent) 7%,var(--panel));color:var(--accent)}.page-bundle .page-icon{color:var(--green);border-color:color-mix(in srgb,var(--green) 18%,var(--border));background:color-mix(in srgb,var(--green) 6%,var(--panel))}.page-scan .page-icon{color:var(--scan-icon-color, var(--yellow));border-color:color-mix(in srgb,var(--scan-icon-color, var(--yellow)) 18%,var(--border));background:color-mix(in srgb,var(--scan-icon-color, var(--yellow)) 6%,var(--panel))}:host-context(body.theme-light) .page-scan .page-icon{--scan-icon-color: #bf8700}:host-context(body.theme-green) :is(.page-bundle,.page-scan) .page-icon,:host-context(body.theme-pink) :is(.page-bundle,.page-scan) .page-icon{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 16%,var(--border));background:color-mix(in srgb,var(--accent) 7%,var(--panel))}.page-icon svg{width:1.2rem;height:1.2rem}.arrow{display:flex;margin-left:auto;flex-shrink:0;color:var(--muted)}.arrow svg{width:1rem;height:1rem}.page:hover .arrow{color:var(--text)}.page-copy{display:grid;gap:.45rem}.page>.page-copy{margin-inline-start:3.25rem}.page-copy strong,.page-title{font-size:1rem;font-weight:600;letter-spacing:-.015em}.page-copy>span{color:var(--muted);font-size:.8rem;line-height:1.65}.workspace-pages .page{gap:.85rem;padding:1.2rem 1.35rem}.workspace-pages .page-icon{width:2rem;height:2rem;color:var(--muted);background:transparent;border-color:var(--border)}.workspace-pages .page-title{font-size:.9rem}.workspace-pages .page-copy{margin-inline-start:2.75rem}.history-link{display:flex;align-items:center;gap:1rem;width:100%;padding:1.25rem 0;border:0;border-top:1px solid var(--border);text-align:left;color:var(--text);background:transparent}.history-link>.page-icon{color:var(--muted);background:transparent;border-color:var(--border)}.history-link .page-copy strong{font-size:.85rem}.history-cta{display:flex;align-items:center;gap:.6rem;flex-shrink:0;margin-left:auto;color:var(--muted);font-size:.78rem}.history-cta svg{width:1rem;height:1rem}.history-link:hover .history-cta{color:var(--accent)}@container (max-width: 48rem){.pages{grid-template-columns:1fr;gap:.65rem}.page,.workspace-pages .page{gap:.65rem;padding:1.15rem}.page-top .arrow{display:none}.workspace-pages .page-icon{width:2.5rem;height:2.5rem}.workspace-pages .page-copy{margin-inline-start:3.25rem}.page-copy{gap:.2rem}.page-copy strong,.page-title{font-size:.95rem}.section-heading>span{display:none}.history-cta{font-size:0}}
|
package/out/compare.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,b as t,f as n,g as r,j as i,k as a,l as o}from"./chunk-TQJDYHVE.js";import{f as s}from"./chunk-4HI2MSAV.js";import"./chunk-PXK7EU4V.js";import"./chunk-R3NZFXVR.js";import{$a as c,$d as l,Ad as u,Bd as d,De as f,Ee as p,Gd as m,Hd as h,Id as g,Jd as _,Ma as v,Md as y,Na as b,Nd as x,Oa as ee,Od as S,Pa as te,Pc as C,Pd as ne,Qa as re,Qc as ie,Ra as ae,Rc as w,Sa as oe,Sc as se,Ta as ce,Tc as le,Uc as ue,Wd as de,Xd as fe,Yd as pe,Za as me,Zd as he,_a as ge,_c as _e,_d as ve,ab as ye,ae as be,bb as xe,be as Se,cd as Ce,ce as we,dd as Te,de as Ee,ed as De,ee as Oe,fd as ke,fe as Ae,gd as je,hd as Me,he as Ne,id as Pe,ja as Fe,jd as Ie,kd as Le,ld as Re,md as ze,od as Be,pd as Ve,qd as He,rd as Ue,sd as We,td as Ge,tf as Ke,uc as qe,ud as Je,uf as Ye,va as Xe,vc as Ze,vd as Qe,w as T,wc as $e,wd as et,xd as tt,yd as nt,zd as rt}from"./chunk-
|
|
1
|
+
import{a as e,b as t,f as n,g as r,j as i,k as a,l as o}from"./chunk-TQJDYHVE.js";import{f as s}from"./chunk-4HI2MSAV.js";import"./chunk-PXK7EU4V.js";import"./chunk-R3NZFXVR.js";import{$a as c,$d as l,Ad as u,Bd as d,De as f,Ee as p,Gd as m,Hd as h,Id as g,Jd as _,Ma as v,Md as y,Na as b,Nd as x,Oa as ee,Od as S,Pa as te,Pc as C,Pd as ne,Qa as re,Qc as ie,Ra as ae,Rc as w,Sa as oe,Sc as se,Ta as ce,Tc as le,Uc as ue,Wd as de,Xd as fe,Yd as pe,Za as me,Zd as he,_a as ge,_c as _e,_d as ve,ab as ye,ae as be,bb as xe,be as Se,cd as Ce,ce as we,dd as Te,de as Ee,ed as De,ee as Oe,fd as ke,fe as Ae,gd as je,hd as Me,he as Ne,id as Pe,ja as Fe,jd as Ie,kd as Le,ld as Re,md as ze,od as Be,pd as Ve,qd as He,rd as Ue,sd as We,td as Ge,tf as Ke,uc as qe,ud as Je,uf as Ye,va as Xe,vc as Ze,vd as Qe,w as T,wc as $e,wd as et,xd as tt,yd as nt,zd as rt}from"./chunk-TSIFIFBX.js";import"./chunk-JCIIBLKR.js";import"./chunk-VH4XMZIW.js";import"./chunk-KOGNQDSJ.js";import{$ as it,_ as E,aa as at,ba as ot,ea as st,qa as ct,s as lt,ta as ut}from"./chunk-LJ7XRXFU.js";import{b as dt,c as ft,j as D,k as O}from"./chunk-7VAWINQF.js";import"./chunk-NRPC74AM.js";import"./chunk-7BKKYVWR.js";import"./chunk-7C7DWL7I.js";import"./chunk-PNHBZGDD.js";import"./chunk-VFWMQ3LG.js";import{F as k,G as pt,a as A,ta as mt}from"./chunk-FMXWXDR4.js";import"./chunk-2K6UN3PC.js";import"./chunk-WCPJDAYA.js";import{e as ht}from"./chunk-IYPY47MC.js";import{a as j,d as M}from"./chunk-PWFUOLZK.js";import{i as gt,m as _t}from"./chunk-HT2SSA3V.js";import{a as vt}from"./chunk-SXV2T5C4.js";import{C as yt,d as bt}from"./chunk-WFYLMF6Z.js";import"./chunk-C4Z6ZBXV.js";import{c as N,g as P,j as xt}from"./chunk-2XUEZHIP.js";import{b as St}from"./chunk-TUII34K2.js";import"./chunk-OOJM4CTU.js";function Ct(e){return e===0?`±0`:`${e>0?`+`:`−`}${Math.abs(e).toLocaleString()}`}function wt(e){return e===0?`±0 B`:`${e>0?`+`:`−`}${k(Math.abs(e))}`}function Tt(e){return e>0?`up`:e<0?`down`:``}function Et(e,t){if(!t)return``;let n=e/t*100;return`${n>0?`+`:n<0?`−`:`±`}${Math.abs(n).toFixed(1)}%`}function Dt(e){let t=e.totals,n=e.versionUpdates?.totals??{baseDeps:0,otherDeps:0},r=n.baseDeps>0||n.otherDeps>0,i=n.otherDeps-n.baseDeps,a=Et(t.byteDelta,t.baseBytes);return N`<div class="bundle-compare-stats">${r?N`<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Deps</span> <span class="bundle-compare-metric-value">${n.baseDeps.toLocaleString()} → ${n.otherDeps.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${Tt(i)}`}">${Ct(i)}</span></div>`:P}<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Size</span> <span class="bundle-compare-metric-value">${k(t.baseBytes)} → ${k(t.otherBytes)}</span> <span class="${`bundle-compare-metric-delta ${Tt(t.byteDelta)}`}">${wt(t.byteDelta)}${a?N`${` `}<span class="bundle-compare-pct">(${a})</span>`:P}</span></div>${t.baseLines>0||t.otherLines>0?N`<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">LoC</span> <span class="bundle-compare-metric-value">${t.baseLines.toLocaleString()} → ${t.otherLines.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${Tt(t.otherLines-t.baseLines)}`}">${Ct(t.otherLines-t.baseLines)}</span></div>`:P}<div class="bundle-compare-files"><div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Files</span> <span class="bundle-compare-metric-value">${t.baseFiles.toLocaleString()} → ${t.otherFiles.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${Tt(t.fileDelta)}`}">${Ct(t.fileDelta)}</span></div><div class="bundle-compare-chips">${t.onlyBaseFiles>0?N`<span class="bundle-compare-chip removed">−${t.onlyBaseFiles.toLocaleString()} removed</span>`:P} ${t.onlyOtherFiles>0?N`<span class="bundle-compare-chip added">+${t.onlyOtherFiles.toLocaleString()} added</span>`:P} ${t.changedFiles>0?N`<span class="bundle-compare-chip changed">${t.changedFiles.toLocaleString()} changed${t.renamedFiles>0?` (${t.renamedFiles.toLocaleString()} renamed)`:``}</span>`:P} <span class="bundle-compare-chip unchanged">${t.unchangedFiles.toLocaleString()} unchanged</span> ${e.resolutions?.totalChanges>0?N`<span class="bundle-compare-chip changed">${e.resolutions.totalChanges.toLocaleString()} repointed ${e.resolutions.totalChanges===1?`resolution`:`resolutions`}</span>`:P}</div></div></div>`}var Ot=24;function F(e,t=e=>e.id){return e.map(e=>({id:t(e),integrity:t(e),kind:e.format,format:e.format,detail:e.detail,...e.date&&{date:e.date},...e.dateWarning&&{dateWarning:e.dateWarning},filename:e.name,displayLabel:e.displayLabel,size:`—`,summary:null}))}function kt(e){if(!e)return P;let t=({name:e=``,detail:t=``}={})=>e.length+Math.min(t.length,Ot)*.87+1,n=(e.choices??[]).reduce((e,n)=>Math.max(e,t(n)),Math.max(`Choose a ${e.noun??`bundle`}\u2026`.length,t(e.widest)));return j({"--compare-select-chars":`${Math.ceil(n)}`})}function At({source:e,label:t=`Compare`,from:n,to:r,clear:i,swap:a,extras:o=P,comparison:s=null,disabled:c=!1,openLine:l}){let u=e?.noun??`bundle`,d=`${u[0].toUpperCase()}${u.slice(1)}`,f=(t,n)=>e?.select?e.select(t,t.label??n):N`<bundle-selector .bundles="${t.options}" .value="${t.value}" .noun="${u}" .versions="${!!e}" label="${t.label??n}" placeholder="${t.placeholder??`Choose a ${u}\u2026`}" ?disabled="${c}" @bundle-change="${e=>{e.stopPropagation(),t.pick(e.detail.value)}}"></bundle-selector>`;return N`<div class="${e?`bundle-compare-picker is-versions`:`bundle-compare-picker`}" style="${kt(e)}" @compare-open-line="${e=>l?.(e.detail)}"><div class="bundle-compare-select-wrap"><span class="bundle-compare-select-hint">${t}</span> ${f(n,`${d} to compare with`)} ${i?N`<button type="button" class="bundle-compare-clear" aria-label="${i.label??`Clear comparison`}" ?disabled="${c}" @click="${i.run}">×</button>`:P}</div><span class="bundle-compare-arrow" aria-hidden="true">→</span><div class="bundle-compare-select-wrap">${f(r,`${d} to compare`)} ${a?N`<button type="button" class="bundle-compare-swap" ?disabled="${c}" @click="${a}" aria-label="${`Swap the two ${u}s`}"><span class="bundle-compare-swap-icon" aria-hidden="true">↔</span>Swap</button>`:P}</div>${o}${s?e?.badges?.(s.base,s.other,s.files)??P:P}</div>`}function jt(e,t=P){return N`<div class="bundle-compare-summary">${Dt(e)}${t}</div>`}function Mt(e,t=P){return N`<header class="bundle-compare-head">${e}${t}</header>`}var Nt=4,Pt=5e3,Ft=3e5,It=e=>!(e>=400&&e<500&&e!==429),Lt=e=>e?.integrity===`(empty)`,I=new Map;function Rt(){for(let[e,t]of I){if(I.size<=Nt)break;t.state.status!==`loading`&&I.delete(e)}}function zt(e){e.notify?.();for(let t of e.waiting.splice(0))t()}var Bt=null,Vt=(e,t)=>!!(e.managedId&&t.managedId)||!(!t.npm&&!t.npmPatch||!e.npm&&!Lt(e));function Ht(e,t,n){if(e.managedId&&t.managedId)return oe(e.managedId,t.managedId,{scope:n});if(Vt(e,t)){let{name:n,version:r,patch:i}=t.npm??t.npmPatch;return ce(n,r,e.npm?.version??`(empty)`,{otherName:e.npm?.name??n,...i?{patch:i}:{}})}return import(`./chunk-WYLQWYLA.js`).then(r=>(Bt=r,r.prepareComparison(e,t,n)))}async function Ut(e,t,n,r,i){let a;try{a={status:`ready`,diff:await Ht(n,r,i)}}catch(n){if(n?.name===`AbortError`){I.get(e)===t&&I.delete(e),zt(t);return}if(a={status:`error`,message:n?.message??String(n)},It(n?.status)){let e=Math.min(Pt*2**t.failures,Ft);Object.assign(t,{retryAt:Date.now()+e,failures:t.failures+1}),setTimeout(()=>{t.notify?.()},e)?.unref?.()}}a.status===`ready`&&(t.failures=0),t.state=a,zt(t),Rt()}var Wt=new WeakMap,Gt=0,Kt=e=>(Wt.has(e)||Wt.set(e,++Gt),Wt.get(e));function qt(e,t,n,r=!1){let i=Vt(e,t)?`${e.integrity}\0${t.integrity}\0${n??``}`:`${Kt(e)}\0${Kt(t)}\0${n??``}\0here`,a=I.get(i);return I.delete(i),(!a||r&&a.state.status===`error`||a.retryAt!==void 0&&Date.now()>=a.retryAt)&&(a={state:{status:`loading`},notify:a?.notify??null,waiting:[],failures:a?.failures??0},Bt&&!Vt(e,t)?a.state={status:`ready`,diff:Bt.prepareComparison(e,t,n??``)}:Ut(i,a,e,t,n??``)),I.set(i,a),Rt(),a}function Jt(e,t,n,r){let i=qt(e,t,n);return i.notify=r,i.state}function Yt(e,t,n=null){return new Promise((r,i)=>{let a=(o=!1)=>{let s=qt(e,t,n,o),{state:c}=s;c.status===`loading`?s.waiting.push(()=>a()):c.status===`ready`?r(c.diff):i(Error(c.message))};a(!0)})}function Xt(e,t){let{head:n,from:i,to:a,tail:o}=r(e,t);return N`${n}{<span class="bundle-compare-rename-from">${i}</span> → <span class="bundle-compare-rename-to">${a}</span>}${o}`}function Zt({from:e,to:t}){return N`<span class="bundle-compare-rename-from">${e}</span> → <span class="bundle-compare-rename-to">${t}</span>`}function Qt(e){let t=new Map;if(!e)return t;for(let n of e.onlyBase)t.set(n.path,{kind:`removed`,basePath:n.basePath,baseBytes:n.bytes,otherBytes:null});for(let n of e.onlyOther)t.set(n.path,{kind:`added`,baseBytes:null,otherBytes:n.bytes});for(let n of e.changed){let e={...n.meta?{meta:n.meta}:{}};t.set(n.path,n.renamedFrom==null?{kind:`changed`,basePath:n.basePath,baseBytes:n.baseBytes,otherBytes:n.otherBytes,...n.modified===!1?{modified:!1}:{},...e}:{kind:`renamed`,basePath:n.basePath,renamedFrom:n.renamedFrom,modified:n.modified,baseBytes:n.baseBytes,otherBytes:n.otherBytes,...e})}return t}function L(e,t,n,{kind:r,basePath:i=n}){let a=r===`added`?``:D(e).get(i),o=r===`removed`?``:D(t).get(n);return r===`repointed`&&(a=o??=a),{before:a,after:o}}function $t(e,t,n,r=[]){let i=Qt(n);if(!n)return i;for(let n of r){if(!i.has(n.parent)){let r=O(D(t).get(n.parent)??D(e).get(n.parent));i.set(n.parent,{kind:`repointed`,baseBytes:r,otherBytes:r})}let r=i.get(n.parent);r.repointed=[...r.repointed??[],n]}return i}function en(e,t,n){return[...$t(e,t,n.files,n.resolutions?.changed)].map(([n,r])=>({path:n,...r,...L(e,t,n,r)}))}function tn(e,{maxBytes:t,maxLines:n}){let r=0,i=0;for(let{before:a,after:o}of e)for(let e of[a,o])if(r+=O(e)??0,r>=t||(typeof e==`string`&&e!==``&&(i+=(e.match(/\n/gu)?.length??0)+ +!e.endsWith(`
|
|
2
2
|
`)),i>=n))return!1;return!0}function R(e){if(e===``)return[];let t=e.split(`
|
|
3
3
|
`);return t.at(-1)===``&&t.pop(),t}var nn=e=>e===``||e.endsWith(`
|
|
4
4
|
`),rn=e=>e.replace(/[ \t\n\v\f\r]+$/u,``).replaceAll(/[ \t\n\v\f\r]+/gu,` `);function z(e,t,n=!1){return s(e,t,{horizon:0,whitespace:n?`change`:`none`}).map(({a0:e,a1:t,b0:n,b1:r})=>({a0:e,a1:t,b0:n,b1:r}))}function an(e,t,n,r=!1){if(!Array.isArray(n))return!1;let i=R(e),a=R(t),o=r?(e,t)=>rn(e)===rn(t):(e,t)=>e===t,s=0,c=0;for(let l of[...n,{a0:i.length,a1:i.length,b0:a.length,b1:a.length,last:!0}]){let{a0:n,a1:u,b0:d,b1:f}=l??{};if(![n,u,d,f].every(Number.isInteger)||n<s||d<c||u<n||f<d||u>i.length||f>a.length||!l.last&&u===n&&f===d||n-s!==d-c||l.last&&n>s&&!r&&nn(e)!==nn(t))return!1;for(;s<n;s++,c++)if(!o(i[s],a[c]))return!1;s=u,c=f}return!0}var on=3,B=20,sn=4;function cn(e,t,{ignoreWhitespace:n=!1,changes:r=null,marks:i=null}={}){let a=R(e),o=R(t),s=r?.blocks??z(e,t,n),c={a:e!==``&&!e.endsWith(`
|
package/out/dialogs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,c as t,d as n,h as r,i}from"./chunk-
|
|
1
|
+
import{a as e,c as t,d as n,h as r,i}from"./chunk-NE2UGKRJ.js";import{b as a,c as o,d as s,e as c,g as l}from"./chunk-YA4ETCFU.js";import{A as u,d,e as f,z as p}from"./chunk-JEFZTVNX.js";import"./chunk-QB4CBOX2.js";import{$e as m,A as h,Ca as g,Cb as ee,Da as te,Db as ne,E as re,Eb as ie,Ec as ae,F as oe,Fb as se,Fc as _,Fe as ce,Gb as le,Gc as ue,Ge as de,Hb as fe,Hc as pe,He as me,Ic as he,Ie as ge,J as _e,Ja as ve,Jc as ye,Je as be,Kc as xe,Ke as Se,L as v,Lc as Ce,M as y,Mc as we,Nc as Te,O as Ee,Oc as De,Qe as Oe,Re as ke,Se as Ae,U as je,Ue as b,Vc as Me,Ve as Ne,W as Pe,Wb as Fe,We as Ie,Ye as Le,Ze as Re,_e as x,aa as ze,b as S,ba as Be,bc as Ve,ca as He,cb as Ue,d as We,da as Ge,db as Ke,df as qe,ea as Je,ef as Ye,f as Xe,fa as Ze,fb as Qe,g as $e,ga as et,ge as C,gf as tt,h as nt,ha as rt,hf as it,j as at,jb as ot,je as st,jf as ct,k as lt,kb as ut,ke as dt,kf as ft,lb as w,lf as pt,mb as T,n as mt,nb as E,ob as D,pb as ht,qb as O,qf as gt,rb as k,sb as _t,tb as vt,ua as yt,ub as bt,uc as xt,vc as St,w as A,wa as Ct,x as wt,xe as Tt,y as Et,z as Dt,zc as Ot}from"./chunk-TSIFIFBX.js";import"./chunk-JCIIBLKR.js";import"./chunk-VH4XMZIW.js";import{h as kt,i as At}from"./chunk-KOGNQDSJ.js";import{j as jt,k as Mt}from"./chunk-LJ7XRXFU.js";import{c as Nt}from"./chunk-7VAWINQF.js";import"./chunk-NRPC74AM.js";import"./chunk-7BKKYVWR.js";import"./chunk-7C7DWL7I.js";import"./chunk-PNHBZGDD.js";import{a as j}from"./chunk-R5O6FAW4.js";import{P as Pt,T as M,U as Ft,b as It,ba as Lt,ta as Rt}from"./chunk-FMXWXDR4.js";import"./chunk-2K6UN3PC.js";import"./chunk-WCPJDAYA.js";import{e as zt}from"./chunk-IYPY47MC.js";import{a as N,d as Bt}from"./chunk-PWFUOLZK.js";import{m as P}from"./chunk-HT2SSA3V.js";import{B as Vt,J as Ht,L as Ut,b as Wt,k as Gt,m as Kt,p as qt,t as Jt,v as F,y as Yt,z as Xt}from"./chunk-SXV2T5C4.js";import{B as Zt,C as Qt,d as I}from"./chunk-WFYLMF6Z.js";import"./chunk-C4Z6ZBXV.js";import{a as L,c as R,d as $t,g as z}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-OOJM4CTU.js";var en=`.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.md-list li.md-task{list-style:none;position:relative}.md-task>input{position:absolute;inset-inline-start:-1.2em;top:calc((1lh - .9em)/2);width:.9em;height:.9em;margin:0;font:inherit}.md-heading{font-weight:600}.md-heading:is([aria-level="1"],[aria-level="2"]){font-size:1.15em}.md-heading:not(:first-child){margin-top:.75lh}.md-heading+*{margin-top:.25lh}.md-rule{margin:.75lh 0;border:0;border-top:1px solid var(--border)}.code-block:not(.token){white-space:normal;margin:.4rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.4rem .55rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.95em;line-height:1.5;color:var(--text)}& code{font:inherit}}
|
|
2
2
|
`,tn=`dialog{width:min(94vw,80rem);max-width:none;max-height:90dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:start;gap:1rem;flex-shrink:0;padding:.8rem 1rem;border-bottom:1px solid var(--border)}header h3{display:flex;align-items:baseline;gap:.6rem;flex:1;min-width:0;margin:0;overflow-wrap:anywhere}header h3>span:last-child{min-width:0}header button{flex-shrink:0;border:0;background:transparent;color:var(--muted);font-family:inherit;font-size:1.4rem;line-height:1;padding:0 .25rem}header button:hover{color:var(--text)}.advisory-description{min-height:0;padding:1rem;overflow:auto;overscroll-behavior:contain;white-space:pre-wrap;overflow-wrap:anywhere;font-size:.85rem;line-height:1.6}a{color:var(--accent)}button:focus-visible,.advisory-description:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
|
|
3
3
|
`,nn=class extends w{static styles=[...w.styles,L(en),L(e),L(D),L(tn)];static properties={heading:{attribute:!1},severity:{attribute:!1},_body:{state:!0}};connectedCallback(){super.connectedCallback(),this._dispose=S(()=>{if(!this.isCurrent()){this._body=z,queueMicrotask(this._onClose);return}this._body=Me(Pt(this.markdown))})}disconnectedCallback(){this._dispose?.(),super.disconnectedCallback()}render(){return R`<dialog aria-labelledby="advisory-title" @close="${this._onClose}"><header><h3 id="advisory-title">${O(this.severity===`unknown`?`unrated`:this.severity)}<span>${this.heading}</span></h3><button type="button" aria-label="Close advisory details" @click="${this._onClose}">×</button></header><div class="advisory-description" tabindex="0">${this._body}</div></dialog>`}};customElements.define(`advisory-details-dialog`,nn);function rn(e){return T(`advisory-details-dialog`,e)}var an=`dialog{max-width:640px;width:min(94vw,640px)}header h3{margin:0 0 .4rem}.finding{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}.desc{font-size:.78rem;color:var(--muted);margin:0 0 .7rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}textarea{display:block;width:100%;box-sizing:border-box;min-height:9rem;max-height:50vh;resize:vertical;padding:.55rem .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;line-height:1.4;&: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)}}
|
|
4
4
|
`,on=class extends w{static styles=[...w.styles,L(D),L(an)];static properties={initial:{attribute:!1},finding:{attribute:!1},_value:{state:!0}};constructor(){super(),this.initial=``,this.finding=null,this._value=``}beforeOpen(){this._value=this.initial??``}focusInitial(){let e=this.renderRoot.querySelector(`textarea`);if(!e)return;e.focus();let t=e.value.length;try{e.setSelectionRange(t,t)}catch{}}_onInput=e=>{this._value=e.target.value};_onSave=()=>{let e=(this._value??``).trim();if(e===(this.initial??``).trim()){this._finish(null);return}this._finish(e)};_onClear=()=>this._finish(``);_onCancel=()=>this._finish(null);_onKeydown=e=>{e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),this._onSave())};render(){let e=this.finding??{},t=e.file?e.line?`${e.file}:${e.line}`:e.file:``,n=(this.initial??``).length>0;return R`<dialog @close="${this._onClose}"><header><h3>${n?`Edit comment`:`Add comment`}</h3><div class="finding">${O(Kt(e,A.severityMode))} ${t?R`<span class="loc" data-tooltip-truncated data-tooltip="${t}">${t}</span>`:z}</div>${e.description?R`<div class="desc" data-tooltip-truncated data-tooltip="${e.description}">${e.description}</div>`:z}</header><textarea rows="6" placeholder="Write your notes here. Markdown is not rendered. Ctrl/⌘+Enter to save, Esc to cancel." .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"></textarea><footer class="nwd-actions">${n?R`<button type="button" class="danger" @click="${this._onClear}">Clear</button>`:z} <span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" @click="${this._onSave}">Save</button></footer></dialog>`}};customElements.define(`comment-dialog`,on);function sn({initial:e=``,finding:t=null}={}){return T(`comment-dialog`,{initial:e,finding:t})}var B=`.lwd-body{margin:.2rem 0 .55rem;color:var(--text);font-size:.86rem;line-height:1.5}.lwd-empty{margin:.2rem 0 .55rem;color:var(--muted);font-size:.78rem}.lwd-note{margin:.2rem 0 .65rem;padding:.55rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);color:var(--muted);font-size:.78rem;line-height:1.45}.lwd-choice{margin:.2rem 0 .65rem;padding:.55rem .7rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);& legend{padding:0 .35rem;color:var(--text);font-size:.78rem;font-weight:500;& strong{font-weight:600}}}.lwd-option{display:flex;align-items:flex-start;gap:.5rem;padding:.3rem .15rem;& input[type=radio]{margin:.15rem 0 0;accent-color:var(--accent)}.lwd-option-text{display:flex;flex-direction:column;gap:.1rem;min-width:0}.lwd-option-title{color:var(--text);font-size:.82rem;line-height:1.35}.lwd-option-hint{color:var(--muted);font-size:.72rem;line-height:1.4}}.lwd-list{margin:0;padding-left:1.1rem;color:var(--muted);font-size:.76rem;line-height:1.5;& li+li{margin-top:.2rem}& strong{color:var(--text);font-weight:600}}.lwd-kind-tag{display:inline-block;vertical-align:middle;margin-left:.3rem;padding:0 .35rem;border:1px solid var(--border);border-radius:3px;background:rgb(from var(--text) r g b / .04);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.lwd-rename-input{margin-top:.2rem}.lwd-rename-error{margin:.25rem 0 0;color:var(--critical, #f87171);font-size:.72rem;line-height:1.35}
|
package/out/index.html
CHANGED
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
<link rel="preload" href="./view.css" as="style" />
|
|
32
32
|
<link rel="modulepreload" href="./view.js" />
|
|
33
33
|
<link rel="modulepreload" href="./chunk-R3NZFXVR.js" />
|
|
34
|
-
<link rel="modulepreload" href="./chunk-
|
|
35
|
-
<link rel="modulepreload" href="./chunk-
|
|
34
|
+
<link rel="modulepreload" href="./chunk-NE2UGKRJ.js" />
|
|
35
|
+
<link rel="modulepreload" href="./chunk-TSIFIFBX.js" />
|
|
36
36
|
<link rel="modulepreload" href="./chunk-JCIIBLKR.js" />
|
|
37
37
|
<link rel="modulepreload" href="./chunk-VH4XMZIW.js" />
|
|
38
38
|
<link rel="modulepreload" href="./chunk-KOGNQDSJ.js" />
|