just-git 1.4.2 → 1.5.0

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.
@@ -1,69 +1,69 @@
1
- var je=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});function U(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var ne="0000000000000000000000000000000000000000",Pt=(()=>{let r=new Array(256);for(let e=0;e<256;e++)r[e]=(e>>4).toString(16)+(e&15).toString(16);return r})();function Se(r){let e="";for(let t=0;t<20;t++)e+=Pt[r[t]];return e}function se(r,e){let t="";for(let n=0;n<20;n++)t+=Pt[r[e+n]];return t}function ae(r){let e=new Uint8Array(20);for(let t=0;t<20;t++)e[t]=parseInt(r.slice(t*2,t*2+2),16);return e}var Br=new Set(["tree","commit","tag"]),Ie=class{map=new Map;currentBytes=0;maxBytes;constructor(e=16*1024*1024){this.maxBytes=e}get(e){return this.map.get(e)}set(e,t){if(!Br.has(t.type))return;let n=t.content.byteLength;if(!(n>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+n>this.maxBytes&&this.map.size>0;){let s=this.map.keys().next().value;this.currentBytes-=this.map.get(s).content.byteLength,this.map.delete(s)}this.map.set(e,t),this.currentBytes+=n}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var Mr=new TextEncoder;function Fe(r){return typeof r=="string"?Mr.encode(r):r}function $r(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(Fe(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=je(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(n){return e.update(Fe(n)),t},hex:()=>Promise.resolve(e.digest("hex"))};return t}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let r=[],e={update(t){return r.push(Fe(t)),e},async hex(){let t=0;for(let o of r)t+=o.byteLength;let n=new Uint8Array(t),s=0;for(let o of r)n.set(o,s),s+=o.byteLength;let a=await crypto.subtle.digest("SHA-1",n);return Se(new Uint8Array(a))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var vt=$r(),z=vt;async function jt(r){return vt().update(r).hex()}var N=Uint8Array,K=Uint16Array,Wr=Int32Array,St=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),It=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),_r=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Tt=(r,e)=>{let t=new K(31);for(let s=0;s<31;++s)t[s]=e+=1<<r[s-1];let n=new Wr(t[30]);for(let s=1;s<30;++s)for(let a=t[s];a<t[s+1];++a)n[a]=a-t[s]<<5|s;return{b:t,r:n}},{b:Ut}=Tt(St,2);Ut[28]=258;var{b:Fr}=Tt(It,0),Ve=new K(32768);for(let r=0;r<32768;++r){let e=(r&43690)>>1|(r&21845)<<1;e=(e&52428)>>2|(e&13107)<<2,e=(e&61680)>>4|(e&3855)<<4,Ve[r]=((e&65280)>>8|(e&255)<<8)>>1}var ie=(r,e,t)=>{let n=r.length,s=0,a=new K(e);for(;s<n;++s)r[s]&&++a[r[s]-1];let o=new K(e);for(s=1;s<e;++s)o[s]=o[s-1]+a[s-1]<<1;let i;if(t){i=new K(1<<e);let f=15-e;for(s=0;s<n;++s)if(r[s]){let c=s<<4|r[s],l=e-r[s],d=o[r[s]-1]++<<l;for(let u=d|(1<<l)-1;d<=u;++d)i[Ve[d]>>f]=c}}else for(i=new K(n),s=0;s<n;++s)r[s]&&(i[s]=Ve[o[r[s]-1]++]>>15-r[s]);return i},oe=new N(288);for(let r=0;r<144;++r)oe[r]=8;for(let r=144;r<256;++r)oe[r]=9;for(let r=256;r<280;++r)oe[r]=7;for(let r=280;r<288;++r)oe[r]=8;var Lt=new N(32);for(let r=0;r<32;++r)Lt[r]=5;var Gr=ie(oe,9,1),qr=ie(Lt,5,1),Ge=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},D=(r,e,t)=>{let n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},qe=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},Ct=r=>(r+7)/8|0,Vr=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new N(r.subarray(e,t))),B=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},Ht=(r,e,t,n)=>{let s=r.length,a=n?n.length:0;if(!s||e.f&&!e.l)return t||new N(0);let o=!t,i=o||e.i!=2,f=e.i;o&&(t=new N(s*3));let c=y=>{let m=t.length;if(y>m){let O=new N(Math.max(m*2,y));O.set(t),t=O}},l=e.f||0,d=e.p||0,u=e.b||0,h=e.l,p=e.d,b=e.m,R=e.n,E=s*8;do{if(!h){l=D(r,d,1);let w=D(r,d+1,3);if(d+=3,w)if(w==1)h=Gr,p=qr,b=9,R=5;else if(w==2){let g=D(r,d,31)+257,A=D(r,d+10,15)+4,k=g+D(r,d+5,31)+1;d+=14;let P=new N(k),j=new N(19);for(let M=0;M<A;++M)j[_r[M]]=D(r,d+M*3,7);d+=A*3;let S=Ge(j),I=(1<<S)-1,T=ie(j,S,1);for(let M=0;M<k;){let Et=T[D(r,d,I)];d+=Et&15;let re=Et>>4;if(re<16)P[M++]=re;else{let kt=0,ve=0;for(re==16?(ve=3+D(r,d,3),d+=2,kt=P[M-1]):re==17?(ve=3+D(r,d,7),d+=3):re==18&&(ve=11+D(r,d,127),d+=7);ve--;)P[M++]=kt}}let $=P.subarray(0,g),W=P.subarray(g);b=Ge($),R=Ge(W),h=ie($,b,1),p=ie(W,R,1)}else B(1);else{let g=Ct(d)+4,A=r[g-4]|r[g-3]<<8,k=g+A;if(k>s){f&&B(0);break}i&&c(u+A),t.set(r.subarray(g,k),u),e.b=u+=A,e.p=d=k*8,e.f=l;continue}if(d>E){f&&B(0);break}}i&&c(u+131072);let y=(1<<b)-1,m=(1<<R)-1,O=d;for(;;O=d){let w=h[qe(r,d)&y],g=w>>4;if(d+=w&15,d>E){f&&B(0);break}if(w||B(2),g<256)t[u++]=g;else if(g==256){O=d,h=null;break}else{let A=g-254;if(g>264){let I=g-257,T=St[I];A=D(r,d,(1<<T)-1)+Ut[I],d+=T}let k=p[qe(r,d)&m],P=k>>4;k||B(3),d+=k&15;let j=Fr[P];if(P>3){let I=It[P];j+=qe(r,d)&(1<<I)-1,d+=I}if(d>E){f&&B(0);break}i&&c(u+131072);let S=u+A;if(u<j){let I=a-j,T=Math.min(j,S);for(I+u<0&&B(3);u<T;++u)t[u]=n[I+u]}for(;u<S;++u)t[u]=t[u-j]}}e.l=h,e.p=O,e.b=u,e.f=l,h&&(l=1,e.m=b,e.d=p,e.n=R)}while(!l);return u!=t.length&&o?Vr(t,0,u):t.subarray(0,u)},Dt=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&B(0,"invalid zlib data"),r[1]&32&&B(0,"zlib dictionaries are not supported"),2);function Nt(r){let e=Dt(r);return Ht(r.subarray(e,-4),{i:2})}function ze(r){let e=Dt(r),t={i:2},n=Ht(r.subarray(e),t),s=Ct(t.p);return{result:n,bytesConsumed:e+s+4}}async function zr(){let r;if(!(typeof document<"u"))try{r=je(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let n=null;try{let s=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});s?.engine&&typeof s.engine.bytesWritten=="number"&&(n=a=>{let o=r.inflateSync(a,{info:!0});return{result:new Uint8Array(o.buffer),bytesConsumed:o.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(r.deflateSync(s)),inflateSync:s=>new Uint8Array(r.inflateSync(s)),inflateWithConsumed:n??ze}}let t;return typeof globalThis.CompressionStream=="function"?t=async n=>{let s=new CompressionStream("deflate"),a=s.writable.getWriter();return a.write(n),a.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:Nt,inflateWithConsumed:ze}}var Kr=null;function Bt(){return Kr??=zr()}async function Te(r){return await(await Bt()).deflateSync(r)}async function Ke(r,e){let t=await Bt(),{result:n,bytesConsumed:s}=t.inflateWithConsumed(r);if(n.byteLength!==e)throw new Error(`Inflate size mismatch: got ${n.byteLength}, expected ${e}`);return{result:n,bytesConsumed:s}}var Y=1346454347,Le=2,Wt=1,_t=2,Ft=3,Gt=4,_=6,ce=7,qt={[Wt]:"commit",[_t]:"tree",[Ft]:"blob",[Gt]:"tag"},Vt={commit:Wt,tree:_t,blob:Ft,tag:Gt};async function zt(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),n=t.getUint32(0);if(n!==Y)throw new Error(`Invalid pack signature: 0x${n.toString(16)} (expected 0x${Y.toString(16)})`);let s=t.getUint32(4);if(s!==Le)throw new Error(`Unsupported pack version: ${s}`);if(r.byteLength>=32){let c=se(r,r.byteLength-20),l=z();l.update(r.subarray(0,r.byteLength-20));let d=await l.hex();if(d!==c)throw new Error(`pack checksum mismatch: expected ${c}, computed ${d}`)}let a=t.getUint32(8),o=[],i=12;for(let c=0;c<a;c++){let l=await Xr(r,i);o.push(l),i=l.nextOffset}return(await Yr(o,e)).map((c,l)=>({...c,offset:o[l].headerOffset,nextOffset:o[l].nextOffset}))}async function Xr(r,e){let t=e,n=r[e++],s=n>>4&7,a=n&15,o=4;for(;n&128;)n=r[e++],a|=(n&127)<<o,o+=7;let i,f;if(s===_){let d=r[e++];for(i=d&127;d&128;)i+=1,d=r[e++],i=(i<<7)+(d&127);i=t-i}else s===ce&&(f=se(r,e),e+=20);let{result:c,bytesConsumed:l}=await Ke(r.subarray(e),a);return{headerOffset:t,typeNum:s,inflated:c,baseOffset:i,baseHash:f,nextOffset:e+l}}var Mt=50;async function Yr(r,e){let t=new Map;for(let a=0;a<r.length;a++)t.set(r[a].headerOffset,a);let n=new Array(r.length).fill(null);async function s(a,o=0){if(o>Mt)throw new Error(`delta chain depth ${o} exceeds limit of ${Mt}`);let i=n[a];if(i)return i;let f=r[a];if(f.typeNum!==_&&f.typeNum!==ce){let h=qt[f.typeNum];if(!h)throw new Error(`Unknown object type: ${f.typeNum}`);let p={type:h,content:f.inflated,hash:await X(h,f.inflated)};return n[a]=p,p}if(f.typeNum===_){let h=t.get(f.baseOffset);if(h===void 0)throw new Error(`OFS_DELTA base not found at offset ${f.baseOffset}`);let p=await s(h,o+1),b=Ue(p.content,f.inflated),R={type:p.type,content:b,hash:await X(p.type,b)};return n[a]=R,R}let c=await Zr(r,n,f.baseHash,s),l;if(c!==void 0)l=await s(c,o+1);else if(e){let h=await e(f.baseHash);h&&(l=h)}if(!l)throw new Error(`REF_DELTA base not found for hash ${f.baseHash}`);let d=Ue(l.content,f.inflated),u={type:l.type,content:d,hash:await X(l.type,d)};return n[a]=u,u}for(let a=0;a<r.length;a++)await s(a);return n}async function Zr(r,e,t,n){for(let s=0;s<e.length;s++)if(e[s]?.hash===t)return s;for(let s=0;s<r.length;s++){let a=r[s];if(a.typeNum!==_&&a.typeNum!==ce&&(await n(s)).hash===t)return s}}var Xe=class{buf=new Uint8Array(0);iter;eof=!1;_bytesRead=0;hasher;constructor(e,t=!1){this.iter=e[Symbol.asyncIterator](),this.hasher=t?z():null}get bytesRead(){return this._bytesRead}async pullMore(){if(this.eof)return!1;let{value:e,done:t}=await this.iter.next();if(t||!e)return this.eof=!0,!1;if(this.buf.byteLength===0)this.buf=new Uint8Array(e);else{let n=new Uint8Array(this.buf.byteLength+e.byteLength);n.set(this.buf),n.set(e,this.buf.byteLength),this.buf=n}return!0}async ensure(e){for(;this.buf.byteLength<e;)if(!await this.pullMore())throw new Error(`Unexpected end of pack data: needed ${e} bytes, have ${this.buf.byteLength}`)}consume(e){let t=new Uint8Array(this.buf.subarray(0,e));return this.hasher?.update(t),this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async readByte(){return await this.ensure(1),this.consume(1)[0]}async readExact(e){return await this.ensure(e),this.consume(e)}async readRaw(e){await this.ensure(e);let t=new Uint8Array(this.buf.subarray(0,e));return this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async inflateNext(e){for(this.buf.byteLength===0&&!this.eof&&await this.pullMore();;)try{let{result:t,bytesConsumed:n}=await Ke(this.buf,e);return this.consume(n),t}catch{if(!this.eof&&await this.pullMore())continue;throw new Error(`Failed to inflate pack entry at byte ${this._bytesRead} (expected ${e} bytes)`)}}async hashHex(){if(!this.hasher)throw new Error("Hashing not enabled");return this.hasher.hex()}};async function*Kt(r,e){let t=new Xe(r,!0),n=await t.readExact(12),s=new DataView(n.buffer,n.byteOffset,n.byteLength),a=s.getUint32(0);if(a!==Y)throw new Error(`Invalid pack signature: 0x${a.toString(16)} (expected 0x${Y.toString(16)})`);let o=s.getUint32(4);if(o!==Le)throw new Error(`Unsupported pack version: ${o}`);let i=s.getUint32(8),f=new Map,c=new Map;for(let u=0;u<i;u++){let h=t.bytesRead,p=await t.readByte(),b=p>>4&7,R=p&15,E=4;for(;p&128;)p=await t.readByte(),R|=(p&127)<<E,E+=7;let y,m;if(b===_){let g=await t.readByte();for(y=g&127;g&128;)y+=1,g=await t.readByte(),y=(y<<7)+(g&127);y=h-y}else if(b===ce){let g=await t.readExact(20);m=se(g,0)}let O=await t.inflateNext(R),w;if(b!==_&&b!==ce){let g=qt[b];if(!g)throw new Error(`Unknown object type: ${b}`);w={type:g,content:O,hash:await X(g,O)}}else if(b===_){let g=f.get(y);if(!g)throw new Error(`OFS_DELTA base not found at offset ${y}`);let A=Ue(g.content,O);w={type:g.type,content:A,hash:await X(g.type,A)}}else{let g=c.get(m);if(!g&&e&&(g=await e(m)??void 0),!g)throw new Error(`REF_DELTA base not found for hash ${m}`);let A=Ue(g.content,O);w={type:g.type,content:A,hash:await X(g.type,A)}}f.set(h,w),c.set(w.hash,w),yield w}let l=se(await t.readRaw(20),0),d=await t.hashHex();if(d!==l)throw new Error(`pack checksum mismatch: expected ${l}, computed ${d}`)}function Ue(r,e){let t=0,{value:n,newPos:s}=$t(e,t);if(t=s,n!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${n}, got ${r.byteLength}`);let{value:a,newPos:o}=$t(e,t);t=o;let i=new Uint8Array(a),f=0;for(;t<e.byteLength;){let c=e[t++];if(c&128){let l=0,d=0;c&1&&(l=e[t++]),c&2&&(l|=e[t++]<<8),c&4&&(l|=e[t++]<<16),c&8&&(l|=e[t++]<<24),c&16&&(d=e[t++]),c&32&&(d|=e[t++]<<8),c&64&&(d|=e[t++]<<16),d===0&&(d=65536),i.set(r.subarray(l,l+d),f),f+=d}else if(c>0)i.set(e.subarray(t,t+c),f),f+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(f!==a)throw new Error(`Delta produced ${f} bytes, expected ${a}`);return i}async function Z(r){let e=[],t=new Map,n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Y),s.setUint32(4,Le),s.setUint32(8,r.length),e.push(n);let a=12,o=[];for(let i of r){let f=a;t.set(i.hash,a);let c=i.delta&&i.deltaBaseHash?t.get(i.deltaBaseHash):void 0;if(i.delta&&c!==void 0){let l=Ye(_,i.delta.byteLength),d=Qr(a-c),u=await Te(i.delta);e.push(l,d,u),a+=l.byteLength+d.byteLength+u.byteLength}else{let l=Vt[i.type],d=Ye(l,i.content.byteLength),u=await Te(i.content);e.push(d,u),a+=d.byteLength+u.byteLength}o.push({hash:i.hash,offset:f,nextOffset:a})}return{data:await Jr(e),entries:o}}async function*Xt(r,e){let t=z(),n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Y),s.setUint32(4,Le),s.setUint32(8,r),t.update(n),yield n;for await(let a of e){let o=Vt[a.type],i=Ye(o,a.content.byteLength),f=await Te(a.content);t.update(i),t.update(f),yield en(i,f)}yield ae(await t.hex())}async function Jr(r){let e=0;for(let o of r)e+=o.byteLength;e+=20;let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.byteLength;let s=z();s.update(t.subarray(0,n));let a=await s.hex();return t.set(ae(a),n),t}function Qr(r){let e=[];e.push(r&127);let t=r>>>7;for(;t>0;)e.unshift(128|--t&127),t>>>=7;return new Uint8Array(e)}function Ye(r,e){let t=[],n=r<<4|e&15;for(e>>=4;e>0;)t.push(n|128),n=e&127,e>>=7;return t.push(n),new Uint8Array(t)}function $t(r,e){let t=0,n=0,s;do s=r[e++],t|=(s&127)<<n,n+=7;while(s&128);return{value:t,newPos:e}}function en(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var tn=new TextEncoder;async function X(r,e){let t=tn.encode(`${r} ${e.byteLength}\0`),n=z();return n.update(t),n.update(e),n.hex()}var rn=new TextEncoder,ps=new TextDecoder;function Yt(r,e){let t=rn.encode(`${r} ${e.byteLength}\0`),n=new Uint8Array(t.byteLength+e.byteLength);return n.set(t),n.set(e,t.byteLength),n}function fe(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let n=r.slice(0,e).trimEnd(),s=r.slice(e+1,t),a=r.slice(t+2),[o="0",i="+0000"]=a.split(" "),f=parseInt(o,10);return{name:n,email:s,timestamp:f,timezone:i}}function Ce(r){return`${r.name} <${r.email}> ${r.timestamp} ${r.timezone}`}var nn=new TextEncoder,sn=new TextDecoder;function le(r){let e=sn.decode(r),t=e.indexOf(`
1
+ var Se=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});function L(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var ne="0000000000000000000000000000000000000000",Pt=(()=>{let r=new Array(256);for(let e=0;e<256;e++)r[e]=(e>>4).toString(16)+(e&15).toString(16);return r})();function je(r){let e="";for(let t=0;t<20;t++)e+=Pt[r[t]];return e}function se(r,e){let t="";for(let n=0;n<20;n++)t+=Pt[r[e+n]];return t}function ae(r){let e=new Uint8Array(20);for(let t=0;t<20;t++)e[t]=parseInt(r.slice(t*2,t*2+2),16);return e}var Nr=new Set(["tree","commit","tag"]),Ie=class{map=new Map;currentBytes=0;maxBytes;constructor(e=16*1024*1024){this.maxBytes=e}get(e){return this.map.get(e)}set(e,t){if(!Nr.has(t.type))return;let n=t.content.byteLength;if(!(n>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+n>this.maxBytes&&this.map.size>0;){let s=this.map.keys().next().value;this.currentBytes-=this.map.get(s).content.byteLength,this.map.delete(s)}this.map.set(e,t),this.currentBytes+=n}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var Mr=new TextEncoder;function We(r){return typeof r=="string"?Mr.encode(r):r}function Br(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(We(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=Se(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(n){return e.update(We(n)),t},hex:()=>Promise.resolve(e.digest("hex"))};return t}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let r=[],e={update(t){return r.push(We(t)),e},async hex(){let t=0;for(let o of r)t+=o.byteLength;let n=new Uint8Array(t),s=0;for(let o of r)n.set(o,s),s+=o.byteLength;let a=await crypto.subtle.digest("SHA-1",n);return je(new Uint8Array(a))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var vt=Br(),z=vt;async function St(r){return vt().update(r).hex()}var _=Uint8Array,K=Uint16Array,$r=Int32Array,jt=new _([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),It=new _([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Fr=new _([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Tt=(r,e)=>{let t=new K(31);for(let s=0;s<31;++s)t[s]=e+=1<<r[s-1];let n=new $r(t[30]);for(let s=1;s<30;++s)for(let a=t[s];a<t[s+1];++a)n[a]=a-t[s]<<5|s;return{b:t,r:n}},{b:Ut}=Tt(jt,2);Ut[28]=258;var{b:Wr}=Tt(It,0),Ve=new K(32768);for(let r=0;r<32768;++r){let e=(r&43690)>>1|(r&21845)<<1;e=(e&52428)>>2|(e&13107)<<2,e=(e&61680)>>4|(e&3855)<<4,Ve[r]=((e&65280)>>8|(e&255)<<8)>>1}var ie=(r,e,t)=>{let n=r.length,s=0,a=new K(e);for(;s<n;++s)r[s]&&++a[r[s]-1];let o=new K(e);for(s=1;s<e;++s)o[s]=o[s-1]+a[s-1]<<1;let i;if(t){i=new K(1<<e);let f=15-e;for(s=0;s<n;++s)if(r[s]){let c=s<<4|r[s],l=e-r[s],p=o[r[s]-1]++<<l;for(let u=p|(1<<l)-1;p<=u;++p)i[Ve[p]>>f]=c}}else for(i=new K(n),s=0;s<n;++s)r[s]&&(i[s]=Ve[o[r[s]-1]++]>>15-r[s]);return i},oe=new _(288);for(let r=0;r<144;++r)oe[r]=8;for(let r=144;r<256;++r)oe[r]=9;for(let r=256;r<280;++r)oe[r]=7;for(let r=280;r<288;++r)oe[r]=8;var Lt=new _(32);for(let r=0;r<32;++r)Lt[r]=5;var Gr=ie(oe,9,1),qr=ie(Lt,5,1),Ge=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},D=(r,e,t)=>{let n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},qe=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},Ct=r=>(r+7)/8|0,Vr=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new _(r.subarray(e,t))),N=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},Ht=(r,e,t,n)=>{let s=r.length,a=n?n.length:0;if(!s||e.f&&!e.l)return t||new _(0);let o=!t,i=o||e.i!=2,f=e.i;o&&(t=new _(s*3));let c=y=>{let m=t.length;if(y>m){let k=new _(Math.max(m*2,y));k.set(t),t=k}},l=e.f||0,p=e.p||0,u=e.b||0,h=e.l,d=e.d,b=e.m,R=e.n,A=s*8;do{if(!h){l=D(r,p,1);let w=D(r,p+1,3);if(p+=3,w)if(w==1)h=Gr,d=qr,b=9,R=5;else if(w==2){let g=D(r,p,31)+257,x=D(r,p+10,15)+4,O=g+D(r,p+5,31)+1;p+=14;let P=new _(O),S=new _(19);for(let M=0;M<x;++M)S[Fr[M]]=D(r,p+M*3,7);p+=x*3;let j=Ge(S),T=(1<<j)-1,U=ie(S,j,1);for(let M=0;M<O;){let At=U[D(r,p,T)];p+=At&15;let re=At>>4;if(re<16)P[M++]=re;else{let Ot=0,ve=0;for(re==16?(ve=3+D(r,p,3),p+=2,Ot=P[M-1]):re==17?(ve=3+D(r,p,7),p+=3):re==18&&(ve=11+D(r,p,127),p+=7);ve--;)P[M++]=Ot}}let B=P.subarray(0,g),$=P.subarray(g);b=Ge(B),R=Ge($),h=ie(B,b,1),d=ie($,R,1)}else N(1);else{let g=Ct(p)+4,x=r[g-4]|r[g-3]<<8,O=g+x;if(O>s){f&&N(0);break}i&&c(u+x),t.set(r.subarray(g,O),u),e.b=u+=x,e.p=p=O*8,e.f=l;continue}if(p>A){f&&N(0);break}}i&&c(u+131072);let y=(1<<b)-1,m=(1<<R)-1,k=p;for(;;k=p){let w=h[qe(r,p)&y],g=w>>4;if(p+=w&15,p>A){f&&N(0);break}if(w||N(2),g<256)t[u++]=g;else if(g==256){k=p,h=null;break}else{let x=g-254;if(g>264){let T=g-257,U=jt[T];x=D(r,p,(1<<U)-1)+Ut[T],p+=U}let O=d[qe(r,p)&m],P=O>>4;O||N(3),p+=O&15;let S=Wr[P];if(P>3){let T=It[P];S+=qe(r,p)&(1<<T)-1,p+=T}if(p>A){f&&N(0);break}i&&c(u+131072);let j=u+x;if(u<S){let T=a-S,U=Math.min(S,j);for(T+u<0&&N(3);u<U;++u)t[u]=n[T+u]}for(;u<j;++u)t[u]=t[u-S]}}e.l=h,e.p=k,e.b=u,e.f=l,h&&(l=1,e.m=b,e.d=d,e.n=R)}while(!l);return u!=t.length&&o?Vr(t,0,u):t.subarray(0,u)},Dt=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&N(0,"invalid zlib data"),r[1]&32&&N(0,"zlib dictionaries are not supported"),2);function _t(r){let e=Dt(r);return Ht(r.subarray(e,-4),{i:2})}function ze(r){let e=Dt(r),t={i:2},n=Ht(r.subarray(e),t),s=Ct(t.p);return{result:n,bytesConsumed:e+s+4}}async function zr(){let r;if(!(typeof document<"u"))try{r=Se(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let n=null;try{let s=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});s?.engine&&typeof s.engine.bytesWritten=="number"&&(n=a=>{let o=r.inflateSync(a,{info:!0});return{result:new Uint8Array(o.buffer),bytesConsumed:o.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(r.deflateSync(s)),inflateSync:s=>new Uint8Array(r.inflateSync(s)),inflateWithConsumed:n??ze}}let t;return typeof globalThis.CompressionStream=="function"?t=async n=>{let s=new CompressionStream("deflate"),a=s.writable.getWriter();return a.write(n),a.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:_t,inflateWithConsumed:ze}}var Kr=null;function Nt(){return Kr??=zr()}async function Te(r){return await(await Nt()).deflateSync(r)}async function Ke(r,e){let t=await Nt(),{result:n,bytesConsumed:s}=t.inflateWithConsumed(r);if(n.byteLength!==e)throw new Error(`Inflate size mismatch: got ${n.byteLength}, expected ${e}`);return{result:n,bytesConsumed:s}}var Y=1346454347,Le=2,$t=1,Ft=2,Wt=3,Gt=4,F=6,ce=7,qt={[$t]:"commit",[Ft]:"tree",[Wt]:"blob",[Gt]:"tag"},Vt={commit:$t,tree:Ft,blob:Wt,tag:Gt};async function zt(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),n=t.getUint32(0);if(n!==Y)throw new Error(`Invalid pack signature: 0x${n.toString(16)} (expected 0x${Y.toString(16)})`);let s=t.getUint32(4);if(s!==Le)throw new Error(`Unsupported pack version: ${s}`);if(r.byteLength>=32){let c=se(r,r.byteLength-20),l=z();l.update(r.subarray(0,r.byteLength-20));let p=await l.hex();if(p!==c)throw new Error(`pack checksum mismatch: expected ${c}, computed ${p}`)}let a=t.getUint32(8),o=[],i=12;for(let c=0;c<a;c++){let l=await Xr(r,i);o.push(l),i=l.nextOffset}return(await Yr(o,e)).map((c,l)=>({...c,offset:o[l].headerOffset,nextOffset:o[l].nextOffset}))}async function Xr(r,e){let t=e,n=r[e++],s=n>>4&7,a=n&15,o=4;for(;n&128;)n=r[e++],a|=(n&127)<<o,o+=7;let i,f;if(s===F){let p=r[e++];for(i=p&127;p&128;)i+=1,p=r[e++],i=(i<<7)+(p&127);i=t-i}else s===ce&&(f=se(r,e),e+=20);let{result:c,bytesConsumed:l}=await Ke(r.subarray(e),a);return{headerOffset:t,typeNum:s,inflated:c,baseOffset:i,baseHash:f,nextOffset:e+l}}var Mt=50;async function Yr(r,e){let t=new Map;for(let a=0;a<r.length;a++)t.set(r[a].headerOffset,a);let n=new Array(r.length).fill(null);async function s(a,o=0){if(o>Mt)throw new Error(`delta chain depth ${o} exceeds limit of ${Mt}`);let i=n[a];if(i)return i;let f=r[a];if(f.typeNum!==F&&f.typeNum!==ce){let h=qt[f.typeNum];if(!h)throw new Error(`Unknown object type: ${f.typeNum}`);let d={type:h,content:f.inflated,hash:await X(h,f.inflated)};return n[a]=d,d}if(f.typeNum===F){let h=t.get(f.baseOffset);if(h===void 0)throw new Error(`OFS_DELTA base not found at offset ${f.baseOffset}`);let d=await s(h,o+1),b=Ue(d.content,f.inflated),R={type:d.type,content:b,hash:await X(d.type,b)};return n[a]=R,R}let c=await Zr(r,n,f.baseHash,s),l;if(c!==void 0)l=await s(c,o+1);else if(e){let h=await e(f.baseHash);h&&(l=h)}if(!l)throw new Error(`REF_DELTA base not found for hash ${f.baseHash}`);let p=Ue(l.content,f.inflated),u={type:l.type,content:p,hash:await X(l.type,p)};return n[a]=u,u}for(let a=0;a<r.length;a++)await s(a);return n}async function Zr(r,e,t,n){for(let s=0;s<e.length;s++)if(e[s]?.hash===t)return s;for(let s=0;s<r.length;s++){let a=r[s];if(a.typeNum!==F&&a.typeNum!==ce&&(await n(s)).hash===t)return s}}var Xe=class{buf=new Uint8Array(0);iter;eof=!1;_bytesRead=0;hasher;constructor(e,t=!1){this.iter=e[Symbol.asyncIterator](),this.hasher=t?z():null}get bytesRead(){return this._bytesRead}async pullMore(){if(this.eof)return!1;let{value:e,done:t}=await this.iter.next();if(t||!e)return this.eof=!0,!1;if(this.buf.byteLength===0)this.buf=new Uint8Array(e);else{let n=new Uint8Array(this.buf.byteLength+e.byteLength);n.set(this.buf),n.set(e,this.buf.byteLength),this.buf=n}return!0}async ensure(e){for(;this.buf.byteLength<e;)if(!await this.pullMore())throw new Error(`Unexpected end of pack data: needed ${e} bytes, have ${this.buf.byteLength}`)}consume(e){let t=new Uint8Array(this.buf.subarray(0,e));return this.hasher?.update(t),this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async readByte(){return await this.ensure(1),this.consume(1)[0]}async readExact(e){return await this.ensure(e),this.consume(e)}async readRaw(e){await this.ensure(e);let t=new Uint8Array(this.buf.subarray(0,e));return this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async inflateNext(e){for(this.buf.byteLength===0&&!this.eof&&await this.pullMore();;)try{let{result:t,bytesConsumed:n}=await Ke(this.buf,e);return this.consume(n),t}catch{if(!this.eof&&await this.pullMore())continue;throw new Error(`Failed to inflate pack entry at byte ${this._bytesRead} (expected ${e} bytes)`)}}async hashHex(){if(!this.hasher)throw new Error("Hashing not enabled");return this.hasher.hex()}};async function*Kt(r,e){let t=new Xe(r,!0),n=await t.readExact(12),s=new DataView(n.buffer,n.byteOffset,n.byteLength),a=s.getUint32(0);if(a!==Y)throw new Error(`Invalid pack signature: 0x${a.toString(16)} (expected 0x${Y.toString(16)})`);let o=s.getUint32(4);if(o!==Le)throw new Error(`Unsupported pack version: ${o}`);let i=s.getUint32(8),f=new Map,c=new Map;for(let u=0;u<i;u++){let h=t.bytesRead,d=await t.readByte(),b=d>>4&7,R=d&15,A=4;for(;d&128;)d=await t.readByte(),R|=(d&127)<<A,A+=7;let y,m;if(b===F){let g=await t.readByte();for(y=g&127;g&128;)y+=1,g=await t.readByte(),y=(y<<7)+(g&127);y=h-y}else if(b===ce){let g=await t.readExact(20);m=se(g,0)}let k=await t.inflateNext(R),w;if(b!==F&&b!==ce){let g=qt[b];if(!g)throw new Error(`Unknown object type: ${b}`);w={type:g,content:k,hash:await X(g,k)}}else if(b===F){let g=f.get(y);if(!g)throw new Error(`OFS_DELTA base not found at offset ${y}`);let x=Ue(g.content,k);w={type:g.type,content:x,hash:await X(g.type,x)}}else{let g=c.get(m);if(!g&&e&&(g=await e(m)??void 0),!g)throw new Error(`REF_DELTA base not found for hash ${m}`);let x=Ue(g.content,k);w={type:g.type,content:x,hash:await X(g.type,x)}}f.set(h,w),c.set(w.hash,w),yield w}let l=se(await t.readRaw(20),0),p=await t.hashHex();if(p!==l)throw new Error(`pack checksum mismatch: expected ${l}, computed ${p}`)}function Ue(r,e){let t=0,{value:n,newPos:s}=Bt(e,t);if(t=s,n!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${n}, got ${r.byteLength}`);let{value:a,newPos:o}=Bt(e,t);t=o;let i=new Uint8Array(a),f=0;for(;t<e.byteLength;){let c=e[t++];if(c&128){let l=0,p=0;c&1&&(l=e[t++]),c&2&&(l|=e[t++]<<8),c&4&&(l|=e[t++]<<16),c&8&&(l|=e[t++]<<24),c&16&&(p=e[t++]),c&32&&(p|=e[t++]<<8),c&64&&(p|=e[t++]<<16),p===0&&(p=65536),i.set(r.subarray(l,l+p),f),f+=p}else if(c>0)i.set(e.subarray(t,t+c),f),f+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(f!==a)throw new Error(`Delta produced ${f} bytes, expected ${a}`);return i}async function Z(r){let e=[],t=new Map,n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Y),s.setUint32(4,Le),s.setUint32(8,r.length),e.push(n);let a=12,o=[];for(let i of r){let f=a;t.set(i.hash,a);let c=i.delta&&i.deltaBaseHash?t.get(i.deltaBaseHash):void 0;if(i.delta&&c!==void 0){let l=Ye(F,i.delta.byteLength),p=Qr(a-c),u=await Te(i.delta);e.push(l,p,u),a+=l.byteLength+p.byteLength+u.byteLength}else{let l=Vt[i.type],p=Ye(l,i.content.byteLength),u=await Te(i.content);e.push(p,u),a+=p.byteLength+u.byteLength}o.push({hash:i.hash,offset:f,nextOffset:a})}return{data:await Jr(e),entries:o}}async function*Xt(r,e){let t=z(),n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Y),s.setUint32(4,Le),s.setUint32(8,r),t.update(n),yield n;for await(let a of e){let o=Vt[a.type],i=Ye(o,a.content.byteLength),f=await Te(a.content);t.update(i),t.update(f),yield en(i,f)}yield ae(await t.hex())}async function Jr(r){let e=0;for(let o of r)e+=o.byteLength;e+=20;let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.byteLength;let s=z();s.update(t.subarray(0,n));let a=await s.hex();return t.set(ae(a),n),t}function Qr(r){let e=[];e.push(r&127);let t=r>>>7;for(;t>0;)e.unshift(128|--t&127),t>>>=7;return new Uint8Array(e)}function Ye(r,e){let t=[],n=r<<4|e&15;for(e>>=4;e>0;)t.push(n|128),n=e&127,e>>=7;return t.push(n),new Uint8Array(t)}function Bt(r,e){let t=0,n=0,s;do s=r[e++],t|=(s&127)<<n,n+=7;while(s&128);return{value:t,newPos:e}}function en(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var tn=new TextEncoder;async function X(r,e){let t=tn.encode(`${r} ${e.byteLength}\0`),n=z();return n.update(t),n.update(e),n.hex()}var rn=new TextEncoder,us=new TextDecoder;function Yt(r,e){let t=rn.encode(`${r} ${e.byteLength}\0`),n=new Uint8Array(t.byteLength+e.byteLength);return n.set(t),n.set(e,t.byteLength),n}function fe(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let n=r.slice(0,e).trimEnd(),s=r.slice(e+1,t),a=r.slice(t+2),[o="0",i="+0000"]=a.split(" "),f=parseInt(o,10);return{name:n,email:s,timestamp:f,timezone:i}}function Ce(r){return`${r.name} <${r.email}> ${r.timestamp} ${r.timezone}`}var nn=new TextEncoder,sn=new TextDecoder;function le(r){let e=sn.decode(r),t=e.indexOf(`
2
2
 
3
3
  `),n=t===-1?e:e.slice(0,t),s=t===-1?"":e.slice(t+2),a="",o=[],i,f;for(let c of n.split(`
4
- `)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),u=c.slice(l+1);switch(d){case"tree":a=u;break;case"parent":o.push(u);break;case"author":i=fe(u);break;case"committer":f=fe(u);break}}if(!a)throw new Error("Commit missing tree field");if(!i)throw new Error("Commit missing author field");if(!f)throw new Error("Commit missing committer field");return{type:"commit",tree:a,parents:o,author:i,committer:f,message:s}}function Zt(r){let e=[];e.push(`tree ${r.tree}`);for(let t of r.parents)e.push(`parent ${t}`);return e.push(`author ${Ce(r.author)}`),e.push(`committer ${Ce(r.committer)}`),e.push(""),e.push(r.message),nn.encode(e.join(`
4
+ `)){let l=c.indexOf(" ");if(l===-1)continue;let p=c.slice(0,l),u=c.slice(l+1);switch(p){case"tree":a=u;break;case"parent":o.push(u);break;case"author":i=fe(u);break;case"committer":f=fe(u);break}}if(!a)throw new Error("Commit missing tree field");if(!i)throw new Error("Commit missing author field");if(!f)throw new Error("Commit missing committer field");return{type:"commit",tree:a,parents:o,author:i,committer:f,message:s}}function Zt(r){let e=[];e.push(`tree ${r.tree}`);for(let t of r.parents)e.push(`parent ${t}`);return e.push(`author ${Ce(r.author)}`),e.push(`committer ${Ce(r.committer)}`),e.push(""),e.push(r.message),nn.encode(e.join(`
5
5
  `))}var ws=new TextEncoder,an=new TextDecoder;function J(r){let e=an.decode(r),t=e.indexOf(`
6
6
 
7
7
  `),n=t===-1?e:e.slice(0,t),s=t===-1?"":e.slice(t+2),a="",o="commit",i="",f;for(let c of n.split(`
8
- `)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),u=c.slice(l+1);switch(d){case"object":a=u;break;case"type":o=u;break;case"tag":i=u;break;case"tagger":f=fe(u);break}}if(!a)throw new Error("Tag missing object field");if(!i)throw new Error("Tag missing tag name field");if(!f)throw new Error("Tag missing tagger field");return{type:"tag",object:a,objectType:o,name:i,tagger:f,message:s}}async function He(r,e,t){let n=await r.objectStore.write(e,t);return r.hooks?.onObjectWrite?.({repo:r,type:e,hash:n}),n}async function q(r,e){return r.objectStore.read(e)}async function de(r,e){return r.objectStore.exists(e)}var As=new TextDecoder;async function F(r,e){let t=await q(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return le(t.content)}var on=new TextEncoder,Jt=new TextDecoder,cn=new Set(["100644","100755","040000","120000","160000"]);function fn(r){return r.length===4&&r.toLowerCase()===".git"}function ln(r,e){if(r.length===0)throw new Error("invalid tree entry: empty name");if(r.includes("/"))throw new Error(`invalid tree entry: name contains slash: '${r}'`);if(r.includes("\0"))throw new Error("invalid tree entry: name contains null byte");if(r==="."||r==="..")throw new Error(`invalid tree entry: '${r}'`);if(fn(r))throw new Error(`invalid tree entry: '${r}'`);if(!cn.has(e))throw new Error(`invalid tree entry mode: '${e}' for '${r}'`)}function ue(r){let e=[],t=0;for(;t<r.byteLength;){let n=r.indexOf(32,t);if(n===-1)break;let s=Jt.decode(r.subarray(t,n)),a=r.indexOf(0,n+1);if(a===-1)break;let o=Jt.decode(r.subarray(n+1,a)),i=r.subarray(a+1,a+21),f=Se(i),c=s.padStart(6,"0");ln(o,c),e.push({mode:c,name:o,hash:f}),t=a+21}return{type:"tree",entries:e}}function Qt(r){let e=[];for(let a of r.entries){let o=a.mode.replace(/^0+/,""),i=on.encode(`${o} ${a.name}\0`),f=ae(a.hash);e.push(i),e.push(f)}let t=e.reduce((a,o)=>a+o.byteLength,0),n=new Uint8Array(t),s=0;for(let a of e)n.set(a,s),s+=a.byteLength;return n}function er(r){return typeof r=="string"?{type:"direct",hash:r}:r}var Ze=".lock";var dn=[1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,5,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,4,4];function un(r,e,t){let n=0,s=!1,a=e;for(;a<r.length;a++){let i=r.charCodeAt(a);switch(i<128?dn[i]:0){case 1:break;case 2:if(n===46)return{len:-1,starConsumed:s};n=i;continue;case 3:if(n===64)return{len:-1,starConsumed:s};n=i;continue;case 4:return{len:-1,starConsumed:s};case 5:if(!t)return{len:-1,starConsumed:s};s=!0,n=i;continue;default:n=i;continue}break}let o=a-e;return o===0?{len:0,starConsumed:s}:r.charCodeAt(e)===46?{len:-1,starConsumed:s}:o>=Ze.length&&r.slice(a-Ze.length,a)===Ze?{len:-1,starConsumed:s}:{len:o,starConsumed:s}}function Je(r,e=0){if(r==="@"||r.length===0)return!1;let t=0,n=0,s=!!(e&2);for(;t<=r.length;){let{len:a,starConsumed:o}=un(r,t,s);if(a<0||a===0)return!1;o&&(s=!1),n++,t+=a+1}return!(r.charCodeAt(r.length-1)===46||!(e&1)&&n<2)}var pn=10;async function hn(r,e){return r.refStore.readRef(e)}async function pe(r,e){let t=e;for(let n=0;n<pn;n++){let s=await hn(r,t);if(!s)return null;if(s.type==="direct")return s.hash;t=s.target}throw new Error(`Symbolic ref loop detected resolving "${e}"`)}function yn(r){let e=Math.abs(r),t=r<=0?"+":"-",n=String(Math.floor(e/60)).padStart(2,"0"),s=String(e%60).padStart(2,"0");return`${t}${n}${s}`}function tr(r){if("timestamp"in r)return r;let e=r.date??new Date;return{name:r.name,email:r.email,timestamp:Math.floor(e.getTime()/1e3),timezone:yn(e.getTimezoneOffset())}}async function nr(r,e){let t=e.branch?`refs/heads/${e.branch}`:null,n=t?await pe(r,t):null,s=null;n&&(s=(await F(r,n)).tree);let a=[];for(let[u,h]of Object.entries(e.files))if(h===null)a.push({path:u,hash:null});else{let p=typeof h=="string"?new TextEncoder().encode(h):h,b=await He(r,"blob",p);a.push({path:u,hash:b})}let o;s?o=await mn(r,s,a):o=await et(r,null,Qe(a));let i=tr(e.author),f=e.committer?tr(e.committer):i,l=Zt({type:"commit",tree:o,parents:n?[n]:[],author:i,committer:f,message:e.message});return{hash:await He(r,"commit",l),parentHash:n}}async function mn(r,e,t){return et(r,e,Qe(t))}function Qe(r){let e=new Map,t=new Map;for(let n of r){let s=n.path.indexOf("/");if(s===-1)e.set(n.path,{hash:n.hash,mode:n.mode??"100644"});else{let a=n.path.slice(0,s),o=n.path.slice(s+1),i=t.get(a);i||(i=[],t.set(a,i)),i.push({...n,path:o})}}return{files:e,dirs:t}}async function rr(r,e){let t=await q(r,e);if(t.type!=="tree")throw new Error(`Expected tree object, got ${t.type}`);return ue(t.content).entries}async function et(r,e,t){let n=new Map;if(e)for(let o of await rr(r,e))n.set(o.name,o);for(let[o,{hash:i,mode:f}]of t.files)i===null?n.delete(o):n.set(o,{name:o,hash:i,mode:f});for(let[o,i]of t.dirs){let f=n.get(o),c=f?.mode==="040000"?f.hash:null,l=Qe(i),d=await et(r,c,l);(await rr(r,d)).length===0?n.delete(o):n.set(o,{name:o,hash:d,mode:"040000"})}let s=[...n.values()].sort((o,i)=>{let f=o.mode==="040000"?`${o.name}/`:o.name,c=i.mode==="040000"?`${i.name}/`:i.name;return f<c?-1:f>c?1:0}),a=Qt({type:"tree",entries:s});return He(r,"tree",a)}async function tt(r,e,t){if(e===t)return!0;let n=new Set,s=[t],a=0;for(;a<s.length;){let o=s[a++];if(o===e)return!0;if(n.has(o))continue;n.add(o);let i;try{i=await F(r,o)}catch{continue}for(let f of i.parents)n.has(f)||s.push(f)}return!1}var Ne=new Uint32Array([0,2874782929,1454598562,4260027763,104818581,2909197124,1351355959,4225088230,209637162,2804382715,1523426952,4053013081,172075199,2702711918,1559413021,4155209164,419274324,3013880453,1313798134,3843506983,516094401,3046853904,1215402083,3811058866,344150398,3218793903,1110456540,3916008461,314324715,3118826042,1141858121,4015451032,838548648,2594343033,1732793610,3423723995,935615293,2627596268,1635201695,3392046670,1032188802,2531018579,1798740512,3228511985,1002083351,2430804166,1829371317,3327150436,688300796,2187269677,2142620510,3572268943,792315241,2220913080,2039131339,3537049626,628649430,2384582919,1942684788,3633492133,591858243,2283716242,1978950625,3735934768,1677097296,3366964609,893718770,2652677155,1707679429,3465587220,863663975,2552480694,1871230586,3302032043,960225240,2455923465,1773654511,3270403390,1057273933,2489126044,2064377604,3495056341,767069862,2262907511,2100592785,3597481024,730327347,2162056674,2004166702,3693911295,566641036,2325738845,1900695483,3658742634,670639641,2359333576,1376601592,4183093545,79572058,2951190667,1412571757,4285241020,42027983,2849570590,1584630482,4113186307,146858864,2744735649,1481436487,4078262678,251626725,2779131956,1257298860,3785977725,474198542,3071936223,1288682553,3885369576,444388763,2972016970,1183716486,3990331479,272465188,3143944693,1085371155,3957901250,369236657,3176902240,1823819377,3354194592,973483987,2438961922,1787437540,3251868981,1010387014,2539715735,1623951707,3415358858,913891577,2636207144,1727327950,3450690079,809994092,2602447805,1950930981,3742461172,586920327,2309096790,1920450480,3643673441,616879634,2409456323,2016810767,3547309022,780500653,2245839484,2114547866,3578840139,683284792,2212736489,1565424345,4128755208,201134971,2695145386,1534139724,4029196701,230847726,2795225151,1362146803,4201185570,126082129,2899994752,1460654694,4233520823,29146052,2867138325,1169417357,4008333404,318803247,3092855294,1133282072,3906287561,356510394,3194379883,1238182823,3801390966,528368133,3022517972,1341279282,3836475619,423699856,2987954497,256065313,2753203184,1508923011,4071219794,159144116,2720394341,1607414038,4103505351,54390795,2825143514,1435408809,4275514744,84055966,2925208399,1404173884,4175973101,398369141,3169260964,1091422423,3931405318,293717728,3134747185,1194504002,3966442387,465595999,2962872974,1299384317,3861558060,503253450,3064380699,1263296616,3759527097,1052246921,2514597720,1745578539,3276988154,948397084,2480853197,1848905150,3312302447,851889315,2577365106,1685431553,3475771856,888777526,2678071271,1649066644,3373495877,642096605,2367432972,1895232639,3685695662,544930376,2334346905,1992922090,3717211963,708530935,2170742310,2089302869,3620835204,738473314,2271052211,2058837184,3522095121]),bn=new Uint32Array([0,2125799437,1446245579,679924934,121527623,2039184714,1359849868,800622977,243055246,1892260483,1481592389,653946440,155379657,2012727236,1601245954,566506255,486110492,1649169681,1254785495,880779738,466036827,1701972054,1307892880,859962525,310759314,1815146399,1152793433,973282132,364614357,1796125400,1133012510,1027425811,972220984,1195887157,1874927347,292830974,1053603711,1081710450,1761559476,373973945,932073654,1228632251,1639818365,520651888,816844273,1308962300,1719925050,406247735,621518628,1539227433,1933077487,227363810,573948515,1551950446,1946564264,179508901,729228714,1438778791,2101662049,66187628,743012589,1392269536,2054851622,80718891,1944441968,223409277,634790075,1533214902,1960544567,175024442,585661948,1549622769,2107207422,53235443,732600885,1428142648,2057778105,68293556,747947890,1377953663,1864147308,296321377,959403431,1201305002,1747123243,379051046,1041303776,1084500205,1633688546,534068207,928247593,1239863076,1717454501,418080424,812495470,1322816099,1243037256,883039813,472173187,1653729934,1294557967,865878786,454727620,1706014665,1147897030,987669707,307785741,1827491840,1129699713,1038154124,359017802,1808993607,1458457428,677079897,14532511,2120785810,1372591635,795162142,132375256,2035729109,1486025178,640143831,245433617,1880368412,1605151901,555322512,161437782,1999272027,1284643889,841432124,446818554,1679083767,1269580150,890855803,497006013,1663735216,1122936511,1012631218,350048884,1785229945,1171323896,996531189,333647667,1834364734,1349216557,786319648,106470886,2028846571,1465201770,702551143,23511201,2144592044,1578619811,547550126,136587112,1989216101,1495895780,664579817,253393455,1907317282,1969288713,198563332,592642754,1575363279,1918806862,216763203,611147653,1524137864,2065452167,94989450,758102092,1402640449,2082607552,43463117,705815819,1420084486,1771668245,388801304,1068136414,1092573139,1856495186,269680223,949234329,1176570516,1743075739,424679830,836160848,1331948893,1624990940,510543057,921210903,1214099482,1064814657,1103292492,1766079626,401677447,944346374,1190966539,1853514189,282018240,822833871,1337873090,1731757572,428713481,909455240,1216352133,1611062083,515111758,596557149,1564187984,1975339414,185100699,615571482,1510326295,1921193169,204879068,770836435,1397172190,2076308248,91542293,718035604,1417247385,2097131103,38440530,109388409,2016412276,1354159794,772011711,29065022,2131648307,1468566517,691907576,150575351,1984739578,1590324284,545213489,264750512,1903355325,1509175675,658575734,444356453,1690924904,1280287662,855278499,490867234,1677142575,1265762025,902094564,335605227,1790299622,1110645024,1015429421,322875564,1837863073,1158497383,1001940074]),De=64,gn=4,rt=4096,sr=65536,wn=127;function Rn(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let n=t>>>2;n<16&&(n=16),n=An(n);let s=n-1,a=new Uint32Array(n),o=[],i=-1>>>0;for(let u=t*16-16;u>=0;u-=16){let h=0;for(let p=1;p<=16;p++)h=(h<<8|r[u+p])^Ne[h>>>23];if(h=h>>>0,h===i)o[o.length-1].ptr=u+16;else{i=h;let p=h&s;o.push({ptr:u+16,val:h}),a[p]++}}let f=new Map;for(let u of o){let h=u.val&s,p=f.get(h);p||(p=[],f.set(h,p)),p.push(u)}for(let[u,h]of f){if(h.length<=De)continue;let p=[],b=h.length/De;for(let R=0;R<De;R++)p.push(h[Math.floor(R*b)]);f.set(u,p),a[u]=De}let c=new Uint32Array(n+1),l=[],d=0;for(let u=0;u<n;u++){c[u]=d;let h=f.get(u);if(h){for(let p of h)l.push(p);d+=h.length}}return c[n]=d,{src:r,hashMask:s,buckets:c,entries:l}}function xn(r,e,t){if(!r||e.byteLength===0)return null;let n=r.src.byteLength,s=e.byteLength,a=r.src,o=new Uint8Array(Math.max(s,1024)),i=0;function f(b){for(;i+b>o.length;){let R=new Uint8Array(o.length*2);R.set(o),o=R}}i=ir(o,i,n),i=ir(o,i,s),f(18),i++;let c=0,l=0,d=Math.min(16,s);for(let b=0;b<d;b++)o[i++]=e[b],c=(c<<8|e[b])^Ne[c>>>23],l++;c=c>>>0;let u=d,h=0,p=0;for(;u<s;){if(p<rt){c^=bn[e[u-16]],c=((c<<8|e[u])^Ne[c>>>23])>>>0;let b=c&r.hashMask,R=r.buckets[b],E=r.buckets[b+1];for(let y=R;y<E;y++){let m=r.entries[y];if(m.val!==c)continue;let O=m.ptr,w=a.byteLength-O,g=s-u;if(w>g&&(w=g),w<=p)break;let A=0;for(;A<w&&a[O+A]===e[u+A];)A++;if(A>p&&(p=A,h=O,p>=rt))break}}if(p<gn)f(2),l===0&&i++,o[i++]=e[u++],l++,l===wn&&(o[i-l-1]=l,l=0),p=0;else{if(l>0){for(;h>0&&a[h-1]===e[u-1];)if(p++,h--,u--,i--,!(--l>0)){i--,l=-1;break}l>0&&(o[i-l-1]=l),l=0}let b=p>sr?p-sr:0;p-=b,f(8);let R=i++,E=128;if(h&255&&(o[i++]=h&255,E|=1),h&65280&&(o[i++]=h>>>8&255,E|=2),h&16711680&&(o[i++]=h>>>16&255,E|=4),h&4278190080&&(o[i++]=h>>>24&255,E|=8),p&255&&(o[i++]=p&255,E|=16),p&65280&&(o[i++]=p>>>8&255,E|=32),o[R]=E,u+=p,h+=p,p=b,h>4294967295&&(p=0),p<rt){c=0;for(let y=-16;y<0;y++)c=(c<<8|e[u+y])^Ne[c>>>23];c=c>>>0}}if(t&&i>t)return null}return l>0&&(o[i-l-1]=l),t&&i>t?null:o.subarray(0,i)}var ar={blob:0,tree:1,commit:2,tag:3};function or(r,e){let t=e?.window??10,n=e?.depth??50,s=r.slice().sort((c,l)=>{let d=ar[c.type]??99,u=ar[l.type]??99;return d!==u?d-u:l.content.byteLength-c.content.byteLength}),a=new Map,o=[],i=[],f=[];for(let c=0;c<s.length;c++){let l=s[c],d={hash:l.hash,type:l.type,content:l.content,depth:0},u=null,h=null,p=Math.max(0,c-t);for(let b=c-1;b>=p;b--){let R=s[b];if(R.type!==l.type||(a.get(R.hash)?.depth??0)>=n||l.content.byteLength<R.content.byteLength>>>5)continue;let m=i[b-p]??null;if(!m)continue;let O=u?u.byteLength:l.content.byteLength/2|0;if(O<16)continue;let w=xn(m,l.content,O);w&&(!u||w.byteLength<u.byteLength)&&(u=w,h=R.hash)}if(u&&h){d.delta=u,d.deltaBase=h;let b=a.get(h);d.depth=(b?.depth??0)+1}a.set(l.hash,d),o.push(d),i.length>=t&&(i.shift(),f.shift()),i.push(Rn(l.content)),f.push(l.hash)}return o}function An(r){let e=r;return e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e++,e<16?16:e}function ir(r,e,t){let n=t;do{let s=n&127;n>>>=7,n>0&&(s|=128),r[e++]=s}while(n>0);return e}var On=2147483647;async function nt(r,e,t,n){if(t>=On)return{shallow:[],unshallow:[...n]};let s=new Map,a=[];for(let c of e)!s.has(c)&&await de(r,c)&&(s.set(c,1),a.push({hash:c,level:1}));let o=new Set,i=0;for(;i<a.length;){let{hash:c,level:l}=a[i++];if(l>=t){o.add(c);continue}let d;try{d=await F(r,c)}catch{continue}for(let u of d.parents)!s.has(u)&&await de(r,u)&&(s.set(u,l+1),a.push({hash:u,level:l+1}))}let f=[];for(let c of n){let l=s.get(c);l!==void 0&&l<t&&f.push(c)}return{shallow:[...o],unshallow:f}}async function me(r,e,t,n,s){let a=s??n,o=new Set;for(let l of t)await he(r,l,o,a);let i=[...e];if(s&&n)for(let l of s)try{let d=await F(r,l);for(let u of d.parents)o.has(u)||i.push(u)}catch{}let f=[],c=new Set;for(let l of i)await ye(r,l,o,c,f,n);return{count:f.length,objects:En(f)}}async function cr(r,e,t,n,s){let{count:a,objects:o}=await me(r,e,t,n,s);return{count:a,objects:kn(r,o)}}async function*En(r){for(let e of r)yield e}async function*kn(r,e){for await(let t of e){let n=await q(r,t.hash);yield{hash:t.hash,type:t.type,content:n.content}}}async function fr(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function he(r,e,t,n){if(t.has(e)||(t.add(e),!await de(r,e)))return;let s=await q(r,e);switch(s.type){case"commit":{let a=le(s.content);if(await he(r,a.tree,t,n),!n?.has(e))for(let o of a.parents)await he(r,o,t,n);break}case"tree":{let a=ue(s.content);for(let o of a.entries)await he(r,o.hash,t,n);break}case"tag":{let a=J(s.content);await he(r,a.object,t,n);break}case"blob":break}}async function ye(r,e,t,n,s,a){if(n.has(e)||t.has(e))return;n.add(e);let o=await q(r,e);switch(s.push({hash:e,type:o.type}),o.type){case"commit":{let i=le(o.content);if(await ye(r,i.tree,t,n,s,a),!a?.has(e))for(let f of i.parents)await ye(r,f,t,n,s,a);break}case"tree":{let i=ue(o.content);for(let f of i.entries)await ye(r,f.hash,t,n,s,a);break}case"tag":{let i=J(o.content);await ye(r,i.object,t,n,s,a);break}case"blob":break}}var Pn=new TextEncoder,dr=new TextDecoder,lr=65520,vn=new Uint8Array([48,48,48,48]),jn=new Uint8Array([48,48,48,49]),Gs=new Uint8Array([48,48,48,50]);function x(r){let e=typeof r=="string"?Pn.encode(r):r,t=4+e.byteLength;if(t>lr)throw new Error(`pkt-line too long: ${t} bytes (max ${lr})`);let n=t.toString(16).padStart(4,"0"),s=new Uint8Array(t);return s[0]=n.charCodeAt(0),s[1]=n.charCodeAt(1),s[2]=n.charCodeAt(2),s[3]=n.charCodeAt(3),s.set(e,4),s}function H(){return vn.slice()}function V(){return jn.slice()}function L(...r){let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}function st(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let n=dr.decode(r.subarray(t,t+4)),s=parseInt(n,16);if(Number.isNaN(s))throw new Error(`Invalid pkt-line length: ${n}`);if(s===0){e.push({type:"flush"}),t+=4;continue}if(s===1){e.push({type:"delim"}),t+=4;continue}if(s===2){e.push({type:"response-end"}),t+=4;continue}if(s<4)throw new Error(`Invalid pkt-line length: ${s}`);if(t+s>r.byteLength)throw new Error(`Truncated pkt-line: need ${s} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+s)}),t+=s}return e}function at(r){if(r.type!=="data")return"";let e=dr.decode(r.data);return e.endsWith(`
9
- `)?e.slice(0,-1):e}var Be=65515;function Me(r,e,t){let n=[],s=[...e];t&&s.push(`symref=HEAD:${t}`),s.push("agent=just-git/1.0");let a=s.join(" ");if(r.length===0)n.push(x(`0000000000000000000000000000000000000000 capabilities^{}\0${a}
10
- `));else for(let o=0;o<r.length;o++){let i=r[o];o===0?n.push(x(`${i.hash} ${i.name}\0${a}
11
- `)):n.push(x(`${i.hash} ${i.name}
12
- `))}return n.push(H()),L(...n)}function ur(r,e,t,n){let s=L(x(`# service=${e}
13
- `),H()),a=Me(r,t,n),o=new Uint8Array(s.byteLength+a.byteLength);return o.set(s,0),o.set(a,s.byteLength),o}function pr(r){let e=st(r),t=[],n=[],s=[],a=[],o,i=!1;for(let f of e){if(f.type==="flush")continue;let c=at(f);if(c.startsWith("want ")){let l=c.slice(5);if(t.length===0){let d=l.indexOf(" ");d!==-1?(t.push(l.slice(0,d)),a=l.slice(d+1).split(" ").filter(Boolean)):t.push(l)}else t.push(l)}else c.startsWith("have ")?n.push(c.slice(5)):c.startsWith("shallow ")?s.push(c.slice(8)):c.startsWith("deepen ")?(o=parseInt(c.slice(7),10),Number.isNaN(o)&&(o=void 0)):c==="done"&&(i=!0)}return{wants:t,haves:n,capabilities:a,clientShallows:s,depth:o,done:i}}function be(r,e,t,n){let s=[];if(n){for(let a of n.shallow)s.push(x(`shallow ${a}
14
- `));for(let a of n.unshallow)s.push(x(`unshallow ${a}
15
- `));s.push(H())}if(t&&t.length>0){for(let o of t)s.push(x(`ACK ${o} common
16
- `));let a=t[t.length-1];s.push(x(`ACK ${a} ready
17
- `)),s.push(x(`ACK ${a}
18
- `))}else s.push(x(`NAK
19
- `));if(e){let a=0;for(;a<r.byteLength;){let o=Math.min(Be,r.byteLength-a);s.push(ge(1,r.subarray(a,a+o))),a+=o}s.push(H())}else{let a=new Uint8Array(r.byteLength);a.set(r),s.push(a)}return L(...s)}function hr(r){let e=[];for(let t of r.shallow)e.push(x(`shallow ${t}
20
- `));for(let t of r.unshallow)e.push(x(`unshallow ${t}
21
- `));return e.push(H()),L(...e)}async function*yr(r,e,t,n){if(n){let a=[];for(let o of n.shallow)a.push(x(`shallow ${o}
22
- `));for(let o of n.unshallow)a.push(x(`unshallow ${o}
23
- `));a.push(H()),yield L(...a)}let s=[];if(t&&t.length>0){for(let o of t)s.push(x(`ACK ${o} common
24
- `));let a=t[t.length-1];s.push(x(`ACK ${a} ready
25
- `)),s.push(x(`ACK ${a}
26
- `))}else s.push(x(`NAK
27
- `));if(yield L(...s),e){for await(let a of r){let o=0;for(;o<a.byteLength;){let i=Math.min(Be,a.byteLength-o);yield ge(1,a.subarray(o,o+i)),o+=i}}yield H()}else for await(let a of r)yield a}function mr(r){let e=new TextDecoder,t=[],n=[],s=0,a=!1;for(;s<r.byteLength&&!(s+4>r.byteLength);){let i=e.decode(r.subarray(s,s+4)),f=parseInt(i,16);if(Number.isNaN(f))break;if(f===0){a=!0,s+=4;break}if(f<4||s+f>r.byteLength)break;let c=r.subarray(s+4,s+f);s+=f;let l=c.indexOf(0),d;if(l!==-1)d=e.decode(c.subarray(0,l)),n=e.decode(c.subarray(l+1)).replace(/\n$/,"").split(" ").filter(Boolean);else{let h=e.decode(c);d=h.endsWith(`
28
- `)?h.slice(0,-1):h}let u=d.split(" ");u.length>=3&&t.push({oldHash:u[0],newHash:u[1],refName:u[2]})}let o=s<r.byteLength?r.subarray(s):new Uint8Array(0);return{commands:t,packData:o,capabilities:n,sawFlush:a}}function Q(r,e,t){let n=[];n.push(x(r?`unpack ok
8
+ `)){let l=c.indexOf(" ");if(l===-1)continue;let p=c.slice(0,l),u=c.slice(l+1);switch(p){case"object":a=u;break;case"type":o=u;break;case"tag":i=u;break;case"tagger":f=fe(u);break}}if(!a)throw new Error("Tag missing object field");if(!i)throw new Error("Tag missing tag name field");if(!f)throw new Error("Tag missing tagger field");return{type:"tag",object:a,objectType:o,name:i,tagger:f,message:s}}async function He(r,e,t){let n=await r.objectStore.write(e,t);return r.hooks?.onObjectWrite?.({repo:r,type:e,hash:n}),n}async function q(r,e){return r.objectStore.read(e)}async function pe(r,e){return r.objectStore.exists(e)}var Es=new TextDecoder;async function W(r,e){let t=await q(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return le(t.content)}var on=new TextEncoder,Jt=new TextDecoder,cn=new Set(["100644","100755","040000","120000","160000"]);function fn(r){return r.length===4&&r.toLowerCase()===".git"}function ln(r,e){if(r.length===0)throw new Error("invalid tree entry: empty name");if(r.includes("/"))throw new Error(`invalid tree entry: name contains slash: '${r}'`);if(r.includes("\0"))throw new Error("invalid tree entry: name contains null byte");if(r==="."||r==="..")throw new Error(`invalid tree entry: '${r}'`);if(fn(r))throw new Error(`invalid tree entry: '${r}'`);if(!cn.has(e))throw new Error(`invalid tree entry mode: '${e}' for '${r}'`)}function de(r){let e=[],t=0;for(;t<r.byteLength;){let n=r.indexOf(32,t);if(n===-1)break;let s=Jt.decode(r.subarray(t,n)),a=r.indexOf(0,n+1);if(a===-1)break;let o=Jt.decode(r.subarray(n+1,a)),i=r.subarray(a+1,a+21),f=je(i),c=s.padStart(6,"0");ln(o,c),e.push({mode:c,name:o,hash:f}),t=a+21}return{type:"tree",entries:e}}function Qt(r){let e=[];for(let a of r.entries){let o=a.mode.replace(/^0+/,""),i=on.encode(`${o} ${a.name}\0`),f=ae(a.hash);e.push(i),e.push(f)}let t=e.reduce((a,o)=>a+o.byteLength,0),n=new Uint8Array(t),s=0;for(let a of e)n.set(a,s),s+=a.byteLength;return n}function er(r){return typeof r=="string"?{type:"direct",hash:r}:r}var Ze=".lock";var pn=[1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,5,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,4,4];function dn(r,e,t){let n=0,s=!1,a=e;for(;a<r.length;a++){let i=r.charCodeAt(a);switch(i<128?pn[i]:0){case 1:break;case 2:if(n===46)return{len:-1,starConsumed:s};n=i;continue;case 3:if(n===64)return{len:-1,starConsumed:s};n=i;continue;case 4:return{len:-1,starConsumed:s};case 5:if(!t)return{len:-1,starConsumed:s};s=!0,n=i;continue;default:n=i;continue}break}let o=a-e;return o===0?{len:0,starConsumed:s}:r.charCodeAt(e)===46?{len:-1,starConsumed:s}:o>=Ze.length&&r.slice(a-Ze.length,a)===Ze?{len:-1,starConsumed:s}:{len:o,starConsumed:s}}function Je(r,e=0){if(r==="@"||r.length===0)return!1;let t=0,n=0,s=!!(e&2);for(;t<=r.length;){let{len:a,starConsumed:o}=dn(r,t,s);if(a<0||a===0)return!1;o&&(s=!1),n++,t+=a+1}return!(r.charCodeAt(r.length-1)===46||!(e&1)&&n<2)}var un=10;async function hn(r,e){return r.refStore.readRef(e)}async function ue(r,e){let t=e;for(let n=0;n<un;n++){let s=await hn(r,t);if(!s)return null;if(s.type==="direct")return s.hash;t=s.target}throw new Error(`Symbolic ref loop detected resolving "${e}"`)}function yn(r){let e=Math.abs(r),t=r<=0?"+":"-",n=String(Math.floor(e/60)).padStart(2,"0"),s=String(e%60).padStart(2,"0");return`${t}${n}${s}`}function tr(r){if("timestamp"in r)return r;let e=r.date??new Date;return{name:r.name,email:r.email,timestamp:Math.floor(e.getTime()/1e3),timezone:yn(e.getTimezoneOffset())}}async function nr(r,e){let t=e.branch?`refs/heads/${e.branch}`:null,n=t?await ue(r,t):null,s=null;n&&(s=(await W(r,n)).tree);let a=[];for(let[u,h]of Object.entries(e.files))if(h===null)a.push({path:u,hash:null});else{let d=typeof h=="string"?new TextEncoder().encode(h):h,b=await He(r,"blob",d);a.push({path:u,hash:b})}let o;s?o=await mn(r,s,a):o=await et(r,null,Qe(a));let i=tr(e.author),f=e.committer?tr(e.committer):i,l=Zt({type:"commit",tree:o,parents:n?[n]:[],author:i,committer:f,message:e.message});return{hash:await He(r,"commit",l),parentHash:n}}async function mn(r,e,t){return et(r,e,Qe(t))}function Qe(r){let e=new Map,t=new Map;for(let n of r){let s=n.path.indexOf("/");if(s===-1)e.set(n.path,{hash:n.hash,mode:n.mode??"100644"});else{let a=n.path.slice(0,s),o=n.path.slice(s+1),i=t.get(a);i||(i=[],t.set(a,i)),i.push({...n,path:o})}}return{files:e,dirs:t}}async function rr(r,e){let t=await q(r,e);if(t.type!=="tree")throw new Error(`Expected tree object, got ${t.type}`);return de(t.content).entries}async function et(r,e,t){let n=new Map;if(e)for(let o of await rr(r,e))n.set(o.name,o);for(let[o,{hash:i,mode:f}]of t.files)i===null?n.delete(o):n.set(o,{name:o,hash:i,mode:f});for(let[o,i]of t.dirs){let f=n.get(o),c=f?.mode==="040000"?f.hash:null,l=Qe(i),p=await et(r,c,l);(await rr(r,p)).length===0?n.delete(o):n.set(o,{name:o,hash:p,mode:"040000"})}let s=[...n.values()].sort((o,i)=>{let f=o.mode==="040000"?`${o.name}/`:o.name,c=i.mode==="040000"?`${i.name}/`:i.name;return f<c?-1:f>c?1:0}),a=Qt({type:"tree",entries:s});return He(r,"tree",a)}async function tt(r,e,t){if(e===t)return!0;let n=new Set,s=[t],a=0;for(;a<s.length;){let o=s[a++];if(o===e)return!0;if(n.has(o))continue;n.add(o);let i;try{i=await W(r,o)}catch{continue}for(let f of i.parents)n.has(f)||s.push(f)}return!1}var _e=new Uint32Array([0,2874782929,1454598562,4260027763,104818581,2909197124,1351355959,4225088230,209637162,2804382715,1523426952,4053013081,172075199,2702711918,1559413021,4155209164,419274324,3013880453,1313798134,3843506983,516094401,3046853904,1215402083,3811058866,344150398,3218793903,1110456540,3916008461,314324715,3118826042,1141858121,4015451032,838548648,2594343033,1732793610,3423723995,935615293,2627596268,1635201695,3392046670,1032188802,2531018579,1798740512,3228511985,1002083351,2430804166,1829371317,3327150436,688300796,2187269677,2142620510,3572268943,792315241,2220913080,2039131339,3537049626,628649430,2384582919,1942684788,3633492133,591858243,2283716242,1978950625,3735934768,1677097296,3366964609,893718770,2652677155,1707679429,3465587220,863663975,2552480694,1871230586,3302032043,960225240,2455923465,1773654511,3270403390,1057273933,2489126044,2064377604,3495056341,767069862,2262907511,2100592785,3597481024,730327347,2162056674,2004166702,3693911295,566641036,2325738845,1900695483,3658742634,670639641,2359333576,1376601592,4183093545,79572058,2951190667,1412571757,4285241020,42027983,2849570590,1584630482,4113186307,146858864,2744735649,1481436487,4078262678,251626725,2779131956,1257298860,3785977725,474198542,3071936223,1288682553,3885369576,444388763,2972016970,1183716486,3990331479,272465188,3143944693,1085371155,3957901250,369236657,3176902240,1823819377,3354194592,973483987,2438961922,1787437540,3251868981,1010387014,2539715735,1623951707,3415358858,913891577,2636207144,1727327950,3450690079,809994092,2602447805,1950930981,3742461172,586920327,2309096790,1920450480,3643673441,616879634,2409456323,2016810767,3547309022,780500653,2245839484,2114547866,3578840139,683284792,2212736489,1565424345,4128755208,201134971,2695145386,1534139724,4029196701,230847726,2795225151,1362146803,4201185570,126082129,2899994752,1460654694,4233520823,29146052,2867138325,1169417357,4008333404,318803247,3092855294,1133282072,3906287561,356510394,3194379883,1238182823,3801390966,528368133,3022517972,1341279282,3836475619,423699856,2987954497,256065313,2753203184,1508923011,4071219794,159144116,2720394341,1607414038,4103505351,54390795,2825143514,1435408809,4275514744,84055966,2925208399,1404173884,4175973101,398369141,3169260964,1091422423,3931405318,293717728,3134747185,1194504002,3966442387,465595999,2962872974,1299384317,3861558060,503253450,3064380699,1263296616,3759527097,1052246921,2514597720,1745578539,3276988154,948397084,2480853197,1848905150,3312302447,851889315,2577365106,1685431553,3475771856,888777526,2678071271,1649066644,3373495877,642096605,2367432972,1895232639,3685695662,544930376,2334346905,1992922090,3717211963,708530935,2170742310,2089302869,3620835204,738473314,2271052211,2058837184,3522095121]),bn=new Uint32Array([0,2125799437,1446245579,679924934,121527623,2039184714,1359849868,800622977,243055246,1892260483,1481592389,653946440,155379657,2012727236,1601245954,566506255,486110492,1649169681,1254785495,880779738,466036827,1701972054,1307892880,859962525,310759314,1815146399,1152793433,973282132,364614357,1796125400,1133012510,1027425811,972220984,1195887157,1874927347,292830974,1053603711,1081710450,1761559476,373973945,932073654,1228632251,1639818365,520651888,816844273,1308962300,1719925050,406247735,621518628,1539227433,1933077487,227363810,573948515,1551950446,1946564264,179508901,729228714,1438778791,2101662049,66187628,743012589,1392269536,2054851622,80718891,1944441968,223409277,634790075,1533214902,1960544567,175024442,585661948,1549622769,2107207422,53235443,732600885,1428142648,2057778105,68293556,747947890,1377953663,1864147308,296321377,959403431,1201305002,1747123243,379051046,1041303776,1084500205,1633688546,534068207,928247593,1239863076,1717454501,418080424,812495470,1322816099,1243037256,883039813,472173187,1653729934,1294557967,865878786,454727620,1706014665,1147897030,987669707,307785741,1827491840,1129699713,1038154124,359017802,1808993607,1458457428,677079897,14532511,2120785810,1372591635,795162142,132375256,2035729109,1486025178,640143831,245433617,1880368412,1605151901,555322512,161437782,1999272027,1284643889,841432124,446818554,1679083767,1269580150,890855803,497006013,1663735216,1122936511,1012631218,350048884,1785229945,1171323896,996531189,333647667,1834364734,1349216557,786319648,106470886,2028846571,1465201770,702551143,23511201,2144592044,1578619811,547550126,136587112,1989216101,1495895780,664579817,253393455,1907317282,1969288713,198563332,592642754,1575363279,1918806862,216763203,611147653,1524137864,2065452167,94989450,758102092,1402640449,2082607552,43463117,705815819,1420084486,1771668245,388801304,1068136414,1092573139,1856495186,269680223,949234329,1176570516,1743075739,424679830,836160848,1331948893,1624990940,510543057,921210903,1214099482,1064814657,1103292492,1766079626,401677447,944346374,1190966539,1853514189,282018240,822833871,1337873090,1731757572,428713481,909455240,1216352133,1611062083,515111758,596557149,1564187984,1975339414,185100699,615571482,1510326295,1921193169,204879068,770836435,1397172190,2076308248,91542293,718035604,1417247385,2097131103,38440530,109388409,2016412276,1354159794,772011711,29065022,2131648307,1468566517,691907576,150575351,1984739578,1590324284,545213489,264750512,1903355325,1509175675,658575734,444356453,1690924904,1280287662,855278499,490867234,1677142575,1265762025,902094564,335605227,1790299622,1110645024,1015429421,322875564,1837863073,1158497383,1001940074]),De=64,gn=4,rt=4096,sr=65536,wn=127;function Rn(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let n=t>>>2;n<16&&(n=16),n=En(n);let s=n-1,a=new Uint32Array(n),o=[],i=-1>>>0;for(let u=t*16-16;u>=0;u-=16){let h=0;for(let d=1;d<=16;d++)h=(h<<8|r[u+d])^_e[h>>>23];if(h=h>>>0,h===i)o[o.length-1].ptr=u+16;else{i=h;let d=h&s;o.push({ptr:u+16,val:h}),a[d]++}}let f=new Map;for(let u of o){let h=u.val&s,d=f.get(h);d||(d=[],f.set(h,d)),d.push(u)}for(let[u,h]of f){if(h.length<=De)continue;let d=[],b=h.length/De;for(let R=0;R<De;R++)d.push(h[Math.floor(R*b)]);f.set(u,d),a[u]=De}let c=new Uint32Array(n+1),l=[],p=0;for(let u=0;u<n;u++){c[u]=p;let h=f.get(u);if(h){for(let d of h)l.push(d);p+=h.length}}return c[n]=p,{src:r,hashMask:s,buckets:c,entries:l}}function xn(r,e,t){if(!r||e.byteLength===0)return null;let n=r.src.byteLength,s=e.byteLength,a=r.src,o=new Uint8Array(Math.max(s,1024)),i=0;function f(b){for(;i+b>o.length;){let R=new Uint8Array(o.length*2);R.set(o),o=R}}i=ir(o,i,n),i=ir(o,i,s),f(18),i++;let c=0,l=0,p=Math.min(16,s);for(let b=0;b<p;b++)o[i++]=e[b],c=(c<<8|e[b])^_e[c>>>23],l++;c=c>>>0;let u=p,h=0,d=0;for(;u<s;){if(d<rt){c^=bn[e[u-16]],c=((c<<8|e[u])^_e[c>>>23])>>>0;let b=c&r.hashMask,R=r.buckets[b],A=r.buckets[b+1];for(let y=R;y<A;y++){let m=r.entries[y];if(m.val!==c)continue;let k=m.ptr,w=a.byteLength-k,g=s-u;if(w>g&&(w=g),w<=d)break;let x=0;for(;x<w&&a[k+x]===e[u+x];)x++;if(x>d&&(d=x,h=k,d>=rt))break}}if(d<gn)f(2),l===0&&i++,o[i++]=e[u++],l++,l===wn&&(o[i-l-1]=l,l=0),d=0;else{if(l>0){for(;h>0&&a[h-1]===e[u-1];)if(d++,h--,u--,i--,!(--l>0)){i--,l=-1;break}l>0&&(o[i-l-1]=l),l=0}let b=d>sr?d-sr:0;d-=b,f(8);let R=i++,A=128;if(h&255&&(o[i++]=h&255,A|=1),h&65280&&(o[i++]=h>>>8&255,A|=2),h&16711680&&(o[i++]=h>>>16&255,A|=4),h&4278190080&&(o[i++]=h>>>24&255,A|=8),d&255&&(o[i++]=d&255,A|=16),d&65280&&(o[i++]=d>>>8&255,A|=32),o[R]=A,u+=d,h+=d,d=b,h>4294967295&&(d=0),d<rt){c=0;for(let y=-16;y<0;y++)c=(c<<8|e[u+y])^_e[c>>>23];c=c>>>0}}if(t&&i>t)return null}return l>0&&(o[i-l-1]=l),t&&i>t?null:o.subarray(0,i)}var ar={blob:0,tree:1,commit:2,tag:3};function or(r,e){let t=e?.window??10,n=e?.depth??50,s=r.slice().sort((c,l)=>{let p=ar[c.type]??99,u=ar[l.type]??99;return p!==u?p-u:l.content.byteLength-c.content.byteLength}),a=new Map,o=[],i=[],f=[];for(let c=0;c<s.length;c++){let l=s[c],p={hash:l.hash,type:l.type,content:l.content,depth:0},u=null,h=null,d=Math.max(0,c-t);for(let b=c-1;b>=d;b--){let R=s[b];if(R.type!==l.type||(a.get(R.hash)?.depth??0)>=n||l.content.byteLength<R.content.byteLength>>>5)continue;let m=i[b-d]??null;if(!m)continue;let k=u?u.byteLength:l.content.byteLength/2|0;if(k<16)continue;let w=xn(m,l.content,k);w&&(!u||w.byteLength<u.byteLength)&&(u=w,h=R.hash)}if(u&&h){p.delta=u,p.deltaBase=h;let b=a.get(h);p.depth=(b?.depth??0)+1}a.set(l.hash,p),o.push(p),i.length>=t&&(i.shift(),f.shift()),i.push(Rn(l.content)),f.push(l.hash)}return o}function En(r){let e=r;return e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e++,e<16?16:e}function ir(r,e,t){let n=t;do{let s=n&127;n>>>=7,n>0&&(s|=128),r[e++]=s}while(n>0);return e}var kn=2147483647;async function nt(r,e,t,n){if(t>=kn)return{shallow:[],unshallow:[...n]};let s=new Map,a=[];for(let c of e)!s.has(c)&&await pe(r,c)&&(s.set(c,1),a.push({hash:c,level:1}));let o=new Set,i=0;for(;i<a.length;){let{hash:c,level:l}=a[i++];if(l>=t){o.add(c);continue}let p;try{p=await W(r,c)}catch{continue}for(let u of p.parents)!s.has(u)&&await pe(r,u)&&(s.set(u,l+1),a.push({hash:u,level:l+1}))}let f=[];for(let c of n){let l=s.get(c);l!==void 0&&l<t&&f.push(c)}return{shallow:[...o],unshallow:f}}async function me(r,e,t,n,s){let a=s??n,o=new Set;for(let l of t)await he(r,l,o,a);let i=[...e];if(s&&n)for(let l of s)try{let p=await W(r,l);for(let u of p.parents)o.has(u)||i.push(u)}catch{}let f=[],c=new Set;for(let l of i)await ye(r,l,o,c,f,n);return{count:f.length,objects:An(f)}}async function cr(r,e,t,n,s){let{count:a,objects:o}=await me(r,e,t,n,s);return{count:a,objects:On(r,o)}}async function*An(r){for(let e of r)yield e}async function*On(r,e){for await(let t of e){let n=await q(r,t.hash);yield{hash:t.hash,type:t.type,content:n.content}}}async function fr(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function he(r,e,t,n){if(t.has(e)||(t.add(e),!await pe(r,e)))return;let s=await q(r,e);switch(s.type){case"commit":{let a=le(s.content);if(await he(r,a.tree,t,n),!n?.has(e))for(let o of a.parents)await he(r,o,t,n);break}case"tree":{let a=de(s.content);for(let o of a.entries)await he(r,o.hash,t,n);break}case"tag":{let a=J(s.content);await he(r,a.object,t,n);break}case"blob":break}}async function ye(r,e,t,n,s,a){if(n.has(e)||t.has(e))return;n.add(e);let o=await q(r,e);switch(s.push({hash:e,type:o.type}),o.type){case"commit":{let i=le(o.content);if(await ye(r,i.tree,t,n,s,a),!a?.has(e))for(let f of i.parents)await ye(r,f,t,n,s,a);break}case"tree":{let i=de(o.content);for(let f of i.entries)await ye(r,f.hash,t,n,s,a);break}case"tag":{let i=J(o.content);await ye(r,i.object,t,n,s,a);break}case"blob":break}}var Pn=new TextEncoder,pr=new TextDecoder,lr=65520,vn=new Uint8Array([48,48,48,48]),Sn=new Uint8Array([48,48,48,49]),Gs=new Uint8Array([48,48,48,50]);function E(r){let e=typeof r=="string"?Pn.encode(r):r,t=4+e.byteLength;if(t>lr)throw new Error(`pkt-line too long: ${t} bytes (max ${lr})`);let n=t.toString(16).padStart(4,"0"),s=new Uint8Array(t);return s[0]=n.charCodeAt(0),s[1]=n.charCodeAt(1),s[2]=n.charCodeAt(2),s[3]=n.charCodeAt(3),s.set(e,4),s}function H(){return vn.slice()}function V(){return Sn.slice()}function C(...r){let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}function st(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let n=pr.decode(r.subarray(t,t+4)),s=parseInt(n,16);if(Number.isNaN(s))throw new Error(`Invalid pkt-line length: ${n}`);if(s===0){e.push({type:"flush"}),t+=4;continue}if(s===1){e.push({type:"delim"}),t+=4;continue}if(s===2){e.push({type:"response-end"}),t+=4;continue}if(s<4)throw new Error(`Invalid pkt-line length: ${s}`);if(t+s>r.byteLength)throw new Error(`Truncated pkt-line: need ${s} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+s)}),t+=s}return e}function at(r){if(r.type!=="data")return"";let e=pr.decode(r.data);return e.endsWith(`
9
+ `)?e.slice(0,-1):e}var Ne=65515;function Me(r,e,t){let n=[],s=[...e];t&&s.push(`symref=HEAD:${t}`),s.push("agent=just-git/1.0");let a=s.join(" ");if(r.length===0)n.push(E(`0000000000000000000000000000000000000000 capabilities^{}\0${a}
10
+ `));else for(let o=0;o<r.length;o++){let i=r[o];o===0?n.push(E(`${i.hash} ${i.name}\0${a}
11
+ `)):n.push(E(`${i.hash} ${i.name}
12
+ `))}return n.push(H()),C(...n)}function dr(r,e,t,n){let s=C(E(`# service=${e}
13
+ `),H()),a=Me(r,t,n),o=new Uint8Array(s.byteLength+a.byteLength);return o.set(s,0),o.set(a,s.byteLength),o}function ur(r){let e=st(r),t=[],n=[],s=[],a=[],o,i=!1;for(let f of e){if(f.type==="flush")continue;let c=at(f);if(c.startsWith("want ")){let l=c.slice(5);if(t.length===0){let p=l.indexOf(" ");p!==-1?(t.push(l.slice(0,p)),a=l.slice(p+1).split(" ").filter(Boolean)):t.push(l)}else t.push(l)}else c.startsWith("have ")?n.push(c.slice(5)):c.startsWith("shallow ")?s.push(c.slice(8)):c.startsWith("deepen ")?(o=parseInt(c.slice(7),10),Number.isNaN(o)&&(o=void 0)):c==="done"&&(i=!0)}return{wants:t,haves:n,capabilities:a,clientShallows:s,depth:o,done:i}}function be(r,e,t,n){let s=[];if(n){for(let a of n.shallow)s.push(E(`shallow ${a}
14
+ `));for(let a of n.unshallow)s.push(E(`unshallow ${a}
15
+ `));s.push(H())}if(t&&t.length>0){for(let o of t)s.push(E(`ACK ${o} common
16
+ `));let a=t[t.length-1];s.push(E(`ACK ${a} ready
17
+ `)),s.push(E(`ACK ${a}
18
+ `))}else s.push(E(`NAK
19
+ `));if(e){let a=0;for(;a<r.byteLength;){let o=Math.min(Ne,r.byteLength-a);s.push(ge(1,r.subarray(a,a+o))),a+=o}s.push(H())}else{let a=new Uint8Array(r.byteLength);a.set(r),s.push(a)}return C(...s)}function hr(r){let e=[];for(let t of r.shallow)e.push(E(`shallow ${t}
20
+ `));for(let t of r.unshallow)e.push(E(`unshallow ${t}
21
+ `));return e.push(H()),C(...e)}async function*yr(r,e,t,n){if(n){let a=[];for(let o of n.shallow)a.push(E(`shallow ${o}
22
+ `));for(let o of n.unshallow)a.push(E(`unshallow ${o}
23
+ `));a.push(H()),yield C(...a)}let s=[];if(t&&t.length>0){for(let o of t)s.push(E(`ACK ${o} common
24
+ `));let a=t[t.length-1];s.push(E(`ACK ${a} ready
25
+ `)),s.push(E(`ACK ${a}
26
+ `))}else s.push(E(`NAK
27
+ `));if(yield C(...s),e){for await(let a of r){let o=0;for(;o<a.byteLength;){let i=Math.min(Ne,a.byteLength-o);yield ge(1,a.subarray(o,o+i)),o+=i}}yield H()}else for await(let a of r)yield a}function mr(r){let e=new TextDecoder,t=[],n=[],s=0,a=!1;for(;s<r.byteLength&&!(s+4>r.byteLength);){let i=e.decode(r.subarray(s,s+4)),f=parseInt(i,16);if(Number.isNaN(f))break;if(f===0){a=!0,s+=4;break}if(f<4||s+f>r.byteLength)break;let c=r.subarray(s+4,s+f);s+=f;let l=c.indexOf(0),p;if(l!==-1)p=e.decode(c.subarray(0,l)),n=e.decode(c.subarray(l+1)).replace(/\n$/,"").split(" ").filter(Boolean);else{let h=e.decode(c);p=h.endsWith(`
28
+ `)?h.slice(0,-1):h}let u=p.split(" ");u.length>=3&&t.push({oldHash:u[0],newHash:u[1],refName:u[2]})}let o=s<r.byteLength?r.subarray(s):new Uint8Array(0);return{commands:t,packData:o,capabilities:n,sawFlush:a}}function Q(r,e,t){let n=[];n.push(E(r?`unpack ok
29
29
  `:`unpack error
30
- `));for(let a of e)a.ok?n.push(x(`ok ${a.name}
31
- `)):n.push(x(`ng ${a.name} ${a.error??"failed"}
32
- `));n.push(H());let s=L(...n);if(t){let a=[];return a.push(ge(1,s)),a.push(H()),L(...a)}return s}function ge(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),x(t)}function it(r){let e=[];e.push(x(`version 2
33
- `));for(let t of r)e.push(x(`${t}
34
- `));return e.push(H()),L(...e)}function ot(r){let e=st(r),t="",n=[],s=[],a=!1;for(let o of e){if(o.type==="flush"||o.type==="response-end")break;if(o.type==="delim"){a=!0;continue}let i=at(o);i&&(a?s.push(i):i.startsWith("command=")?t=i.slice(8):n.push(i))}return{command:t,capabilities:n,args:s}}function ct(r){let e=[];for(let t of r){let n=`${t.hash} ${t.name}`;t.symrefTarget&&(n+=` symref-target:${t.symrefTarget}`),t.peeledHash&&(n+=` peeled:${t.peeledHash}`),e.push(x(`${n}
35
- `))}return e.push(H()),L(...e)}function ft(r){let e=[],t=[],n=[],s=[],a=!1,o,i=!1,f=!1;for(let c of r)c.startsWith("want ")?e.push(c.slice(5)):c.startsWith("have ")?t.push(c.slice(5)):c.startsWith("shallow ")?n.push(c.slice(8)):c.startsWith("deepen ")?(o=parseInt(c.slice(7),10),Number.isNaN(o)&&(o=void 0)):c.startsWith("want-ref ")?s.push(c.slice(9)):c==="done"?a=!0:c==="include-tag"?i=!0:c==="ofs-delta"&&(f=!0);return{wants:e,haves:t,done:a,clientShallows:n,depth:o,includeTag:i,ofsDeltas:f,wantRefs:s}}function ee(r,e){let t=[],{commonHashes:n,shallowInfo:s,wantedRefs:a}=e??{};if(n&&n.length>0){t.push(x(`acknowledgments
36
- `));for(let i of n)t.push(x(`ACK ${i}
37
- `));t.push(x(`ready
38
- `)),t.push(V())}if(s&&(s.shallow.length>0||s.unshallow.length>0)){t.push(x(`shallow-info
39
- `));for(let i of s.shallow)t.push(x(`shallow ${i}
40
- `));for(let i of s.unshallow)t.push(x(`unshallow ${i}
41
- `));t.push(V())}if(a&&a.length>0){t.push(x(`wanted-refs
42
- `));for(let i of a)t.push(x(`${i.hash} ${i.name}
43
- `));t.push(V())}t.push(x(`packfile
44
- `));let o=0;for(;o<r.byteLength;){let i=Math.min(Be,r.byteLength-o);t.push(ge(1,r.subarray(o,o+i))),o+=i}return t.push(H()),L(...t)}function br(r,e){let t=[];if(t.push(x(`acknowledgments
45
- `)),r.length>0)for(let n of r)t.push(x(`ACK ${n}
46
- `));else t.push(x(`NAK
47
- `));return e&&t.push(x(`ready
48
- `)),t.push(H()),L(...t)}async function*gr(r,e){let{commonHashes:t,shallowInfo:n,wantedRefs:s}=e??{};if(t&&t.length>0){let a=[];a.push(x(`acknowledgments
49
- `));for(let o of t)a.push(x(`ACK ${o}
50
- `));a.push(x(`ready
51
- `)),a.push(V()),yield L(...a)}if(n&&(n.shallow.length>0||n.unshallow.length>0)){let a=[];a.push(x(`shallow-info
52
- `));for(let o of n.shallow)a.push(x(`shallow ${o}
53
- `));for(let o of n.unshallow)a.push(x(`unshallow ${o}
54
- `));a.push(V()),yield L(...a)}if(s&&s.length>0){let a=[];a.push(x(`wanted-refs
55
- `));for(let o of s)a.push(x(`${o.hash} ${o.name}
56
- `));a.push(V()),yield L(...a)}yield x(`packfile
57
- `);for await(let a of r){let o=0;for(;o<a.byteLength;){let i=Math.min(Be,a.byteLength-o);yield ge(1,a.subarray(o,o+i)),o+=i}}yield H()}var te=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,n){if(n.length>0)return null;let s=t.slice().sort();return`${e}\0${s.join(",")}`}get(e){let t=this.entries.get(e);return t?this.hits++:this.misses++,t}set(e,t){if(this.entries.has(e))return;let n=t.packData.byteLength;if(!(n>this.maxBytes)){for(;this.currentBytes+n>this.maxBytes&&this.entries.size>0;){let s=this.entries.keys().next().value;this.currentBytes-=this.entries.get(s).packData.byteLength,this.entries.delete(s)}this.entries.set(e,t),this.currentBytes+=n}}clear(){this.entries.clear(),this.currentBytes=0}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},wr=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","allow-reachable-sha1-in-want","shallow"],Rr=["report-status","side-band-64k","ofs-delta","delete-refs"];async function xr(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),n=[],s=null,a;if(t)if(t.type==="symbolic"){a=t.target;let i=await r.refStore.readRef(t.target);i?.type==="direct"&&(s=i.hash)}else s=t.hash;let o=e.slice().sort((i,f)=>i.name<f.name?-1:i.name>f.name?1:0);if(!s&&o.length>0){let i=In(o);i&&(s=i.hash,a=i.name)}s&&n.push({name:"HEAD",hash:s});for(let i of o)if(n.push({name:i.name,hash:i.hash}),i.name.startsWith("refs/tags/"))try{let f=await r.objectStore.read(i.hash);if(f.type==="tag"){let c=J(f.content);n.push({name:`${i.name}^{}`,hash:c.object})}}catch{}return{refs:n,headTarget:a}}var Sn=["refs/heads/main","refs/heads/master"];function In(r){for(let t of Sn){let n=r.find(s=>s.name===t);if(n)return n}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function lt(r,e,t){return ur(r,e,e==="git-upload-pack"?wr:Rr,t)}function dt(r,e,t){return Me(r,e==="git-upload-pack"?wr:Rr,t)}async function G(r,e,t,n,s){let{refs:a,headTarget:o}=await xr(r),i=a;if(n?.advertiseRefs){let f=await n.advertiseRefs({repo:r,repoId:e,refs:a,service:t,auth:s});if(U(f))return f;f&&(i=f)}return{refs:i,headTarget:o}}async function we(r,e,t){let{wants:n,haves:s,capabilities:a,clientShallows:o,depth:i,done:f}=pr(e);if(n.length===0)return be(new Uint8Array(0),!1);let c=a.includes("multi_ack_detailed"),l=a.includes("side-band-64k"),d,u,h;if(o.length>0&&(h=new Set(o)),i!==void 0){let m=await nt(r,n,i,h??new Set);d=m,u=new Set(m.shallow)}if(d&&!f)return hr(d);let p;if(c&&s.length>0){p=[];for(let m of s)await r.objectStore.exists(m)&&p.push(m);p.length===0&&(p=void 0)}let b=!u&&t?.cache&&t.cacheKey?te.key(t.cacheKey,n,s):null;if(b&&t?.cache){let m=t.cache.get(b);if(m)return be(m.packData,l,p)}let R=a.includes("include-tag"),E={repo:r,wants:n,haves:s,includeTag:R,shallowBoundary:u,clientShallowBoundary:h,cache:t?.cache,cacheKey:b,deltaWindow:t?.deltaWindow};if(t?.noDelta){let m=await Er(E);if(!m){let{data:O}=await Z([]);return be(O,l,p,d)}return kr(yr(m,l,p,d))}let y=await Or(E);return be(y,l,p,d)}async function Ar(r,e){let t=[],n=await r.refStore.listRefs("refs/tags");for(let s of n)if(!e.has(s.hash))try{let a=await r.objectStore.read(s.hash);if(a.type==="tag"){let o=J(a.content);e.has(o.object)&&(t.push({hash:s.hash,type:"tag",content:a.content}),e.add(s.hash))}}catch{}return t}async function Or(r){let{repo:e,wants:t,haves:n,includeTag:s,shallowBoundary:a,clientShallowBoundary:o}=r,i=await cr(e,t,n,a,o);if(i.count===0){let{data:p}=await Z([]);return p}let f=await fr(i),c=new Set(f.map(p=>p.hash));if(s){let p=await Ar(e,c);f.push(...p)}let l=r.deltaWindow?{window:r.deltaWindow}:void 0,d=or(f,l),u=d.map(p=>({hash:p.hash,type:p.type,content:p.content,delta:p.delta,deltaBaseHash:p.deltaBase})),{data:h}=await Z(u);if(r.cacheKey&&r.cache){let p=d.filter(b=>b.delta).length;r.cache.set(r.cacheKey,{packData:h,objectCount:f.length,deltaCount:p})}return h}async function Er(r){let{repo:e,wants:t,haves:n,includeTag:s,shallowBoundary:a,clientShallowBoundary:o}=r,{count:i,objects:f}=await me(e,t,n,a,o);if(i===0)return null;let c=[];for await(let p of f)c.push(p);let l=new Set(c.map(p=>p.hash)),d=s?await Ar(e,l):[],u=c.length+d.length;async function*h(){for(let p of c){let b=await e.objectStore.read(p.hash);yield{type:b.type,content:b.content}}for(let p of d)yield{type:p.type,content:p.content}}return Xt(u,h())}function kr(r){let e=r[Symbol.asyncIterator]();return new ReadableStream({async pull(t){let{value:n,done:s}=await e.next();s?t.close():t.enqueue(n)}})}async function ut(r,e){let{commands:t,packData:n,capabilities:s,sawFlush:a}=mr(e),o=!0;if(n.byteLength>0)try{await r.objectStore.ingestPack(n)}catch{o=!1}return{updates:await Pr(r,t,o),unpackOk:o,capabilities:s,sawFlush:a}}async function pt(r,e,t,n,s=!0){let a=!0;if(e.some(f=>f.newHash!==ne))try{let c=Kt(n,async l=>{try{return await r.objectStore.read(l)}catch{return null}});await r.objectStore.ingestPackStream(c)}catch{a=!1}return{updates:await Pr(r,e,a),unpackOk:a,capabilities:t,sawFlush:s}}async function Pr(r,e,t){let n=[];for(let s of e){let a=s.oldHash===ne,o=s.newHash===ne,i=!1;if(!a&&!o&&t)try{i=await tt(r,s.oldHash,s.newHash)}catch{}n.push({ref:s.refName,oldHash:a?null:s.oldHash,newHash:s.newHash,isFF:i,isCreate:a,isDelete:o})}return n}async function $e(r,e){let t=[],n=[];for(let s of e){if(s.ref==="HEAD"){t.push({ref:s.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!s.isDelete&&!Je(s.ref)){t.push({ref:s.ref,ok:!1,error:"invalid refname"});continue}if(!s.isDelete&&!await r.objectStore.exists(s.newHash)){t.push({ref:s.ref,ok:!1,error:"missing objects"});continue}try{let a=s.isCreate?null:s.oldHash,o=s.isDelete?null:{type:"direct",hash:s.newHash};if(!await r.refStore.compareAndSwapRef(s.ref,a,o)){t.push({ref:s.ref,ok:!1,error:"failed to lock"});continue}t.push({ref:s.ref,ok:!0}),n.push(s)}catch(a){t.push({ref:s.ref,ok:!1,error:a instanceof Error?a.message:String(a)})}}return{refResults:t,applied:n}}async function Re(r){let{repo:e,repoId:t,ingestResult:n,hooks:s,auth:a}=r,{updates:o}=n;if(s?.preReceive){let c=await s.preReceive({repo:e,repoId:t,updates:o,auth:a});if(U(c)){let l=c.message??"pre-receive hook declined";return{refResults:o.map(d=>({ref:d.ref,ok:!1,error:l})),applied:[]}}}let i=[],f=[];for(let c of o){if(c.ref==="HEAD"){i.push({ref:c.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!c.isDelete&&!Je(c.ref)){i.push({ref:c.ref,ok:!1,error:"invalid refname"});continue}if(s?.update){let l=await s.update({repo:e,repoId:t,update:c,auth:a});if(U(l)){i.push({ref:c.ref,ok:!1,error:l.message??"update hook declined"});continue}}if(!c.isDelete&&!await e.objectStore.exists(c.newHash)){i.push({ref:c.ref,ok:!1,error:"missing objects"});continue}try{let l=c.isCreate?null:c.oldHash,d=c.isDelete?null:{type:"direct",hash:c.newHash};if(!await e.refStore.compareAndSwapRef(c.ref,l,d)){i.push({ref:c.ref,ok:!1,error:"failed to lock"});continue}i.push({ref:c.ref,ok:!0}),f.push(c)}catch(l){i.push({ref:c.ref,ok:!1,error:l instanceof Error?l.message:String(l)})}}if(s?.postReceive&&f.length>0)try{await s.postReceive({repo:e,repoId:t,updates:f,auth:a})}catch{}return{refResults:i,applied:f}}async function We(r,e){let t=[];for(let n of e){let s;n.oldHash!==void 0?s=n.oldHash:s=await pe(r,n.ref);let a=s===null,o=n.newHash===null,i=n.newHash??ne,f=!1;if(!a&&!o)try{f=await tt(r,s,i)}catch{}t.push({ref:n.ref,oldHash:s,newHash:i,isFF:f,isCreate:a,isDelete:o})}return t}var Tn=["agent=just-git/1.0","ls-refs=unborn","fetch=shallow","server-option","object-format=sha1"];function xe(){return it(Tn)}async function Ae(r,e,t,n,s){let a=t.includes("symrefs"),o=t.includes("peel"),i=t.includes("unborn"),f=t.filter(h=>h.startsWith("ref-prefix ")).map(h=>h.slice(11)),c=await G(r,e,"git-upload-pack",n,s);if(U(c))return c;let{refs:l,headTarget:d}=c,u=[];for(let h of l){if(h.name.endsWith("^{}")||f.length>0&&!f.some(b=>h.name.startsWith(b)))continue;let p={hash:h.hash,name:h.name};if(a&&h.name==="HEAD"&&d&&(p.symrefTarget=d),o&&h.name.startsWith("refs/tags/")){let b=l.find(R=>R.name===`${h.name}^{}`);b&&(p.peeledHash=b.hash)}u.push(p)}return i&&!u.some(h=>h.name==="HEAD")&&d&&(f.length===0||f.some(p=>"HEAD".startsWith(p)))&&u.unshift({hash:"unborn",name:"HEAD",symrefTarget:d}),ct(u)}async function Oe(r,e,t){let{wants:n,haves:s,done:a,clientShallows:o,depth:i,includeTag:f,wantRefs:c}=ft(e);if(n.length===0&&c.length===0){let{data:w}=await Z([]);return ee(w)}let l=[],d=[...n];for(let w of c){let g=await pe(r,w);g&&(l.push({hash:g,name:w}),d.includes(g)||d.push(g))}let u,h,p;if(o.length>0&&(p=new Set(o)),i!==void 0){let w=await nt(r,d,i,p??new Set);u=w,h=new Set(w.shallow)}let b;if(s.length>0){b=[];for(let w of s)await r.objectStore.exists(w)&&b.push(w);b.length===0&&(b=void 0)}let R=b&&b.length>0;if(!a&&!R)return br(b??[]);let E=!h&&t?.cache&&t.cacheKey?te.key(t.cacheKey,d,s):null,y={commonHashes:b,shallowInfo:u,wantedRefs:l.length>0?l:void 0};if(E&&t?.cache){let w=t.cache.get(E);if(w)return ee(w.packData,y)}let m={repo:r,wants:d,haves:s,includeTag:f,shallowBoundary:h,clientShallowBoundary:p,cache:t?.cache,cacheKey:E,deltaWindow:t?.deltaWindow};if(t?.noDelta){let w=await Er(m);if(!w){let{data:g}=await Z([]);return ee(g,y)}return kr(gr(w,y))}let O=await Or(m);return ee(O,y)}function Un(r){let e=/--protocol=version=2/.test(r),n=r.replace(/\s*--protocol=version=\d+/g,"").match(/^git[\s-](upload-pack|receive-pack)\s+'?([^']+?)'?\s*$/);if(!n)return null;let s=`git-${n[1]}`,a=n[2];return a.startsWith("/")&&(a=a.slice(1)),e?{service:s,repoPath:a,protocolV2:e}:{service:s,repoPath:a}}var Ln=new TextEncoder;async function jr(r,e,t){let{resolveRepo:n,hooks:s,packCache:a,packOptions:o,auth:i}=t,f=e.writable.getWriter();try{let c=Un(r);if(!c)return Ee(e,`fatal: unrecognized command '${r}'
58
- `),128;let{service:l,repoPath:d}=c,u=await n(d);if(!u)return Ee(e,`fatal: '${d}' does not appear to be a git repository
59
- `),128;let{repo:h,repoId:p}=u;if(c.protocolV2&&l==="git-upload-pack"){let E=await G(h,p,l,s,i);if(U(E))return Ee(e,`fatal: ${E.message??"access denied"}
60
- `),128;await f.write(xe());let y=new _e(e.readable);try{await Nn(y,f,h,p,{hooks:s,packCache:a,packOptions:o,auth:i})}finally{y.release()}return 0}let b=await G(h,p,l,s,i);if(U(b))return Ee(e,`fatal: ${b.message??"access denied"}
61
- `),128;await f.write(dt(b.refs,l,b.headTarget));let R=new _e(e.readable);try{if(l==="git-upload-pack"){let E=await Hn(R),y=await we(h,E,{cache:a,cacheKey:p,noDelta:o?.noDelta,deltaWindow:o?.deltaWindow});await Sr(f,y)}else{let{commands:E,capabilities:y}=await Dn(R),m=R.streamRemaining();await Cn({writer:f,repo:h,repoId:p,commands:E,capabilities:y,packStream:m,hooks:s,auth:i})}}finally{R.release()}return 0}catch(c){return t.onError?.(c),Ee(e,`fatal: internal error
62
- `),128}finally{try{await f.close()}catch{}}}async function Cn(r){let{writer:e,repo:t,repoId:n,commands:s,capabilities:a,packStream:o,hooks:i,auth:f}=r,c=await pt(t,s,a,o);if(c.updates.length===0)return;let l=c.capabilities.includes("side-band-64k"),d=c.capabilities.includes("report-status");if(!c.unpackOk){if(d){let h=c.updates.map(p=>({name:p.ref,ok:!1,error:"unpack failed"}));await e.write(Q(!1,h,l))}return}let{refResults:u}=await Re({repo:t,repoId:n,ingestResult:c,hooks:i,auth:f});if(d){let h=u.map(p=>({name:p.ref,ok:p.ok,error:p.error}));await e.write(Q(!0,h,l))}}function Ee(r,e){r.writeStderr?.(Ln.encode(e))}var vr=new TextDecoder,_e=class{buf=new Uint8Array(0);byteReader;eof=!1;constructor(e){this.byteReader=e.getReader()}async fill(e){for(;this.buf.byteLength<e&&!this.eof;){let t=await this.byteReader.read();if(t.done||!t.value){this.eof=!0;break}let n=t.value,s=new Uint8Array(this.buf.byteLength+n.byteLength);s.set(this.buf),s.set(n,this.buf.byteLength),this.buf=s}return this.buf.byteLength>=e}consume(e){let t=this.buf.subarray(0,e);return this.buf=this.buf.subarray(e),t}async readPktLine(){if(!await this.fill(4))return null;let e=vr.decode(this.buf.subarray(0,4)),t=parseInt(e,16);if(t===0)return{type:"flush",raw:this.consume(4)};if(t===1)return{type:"delim",raw:this.consume(4)};if(t===2)return{type:"response-end",raw:this.consume(4)};if(t<4||!await this.fill(t))return null;let n=new Uint8Array(this.consume(t));return{type:"data",raw:n,text:vr.decode(n.subarray(4))}}async*streamRemaining(){for(this.buf.byteLength>0&&(yield this.consume(this.buf.byteLength));!this.eof;){let e=await this.byteReader.read();if(e.done||!e.value){this.eof=!0;break}yield e.value}}release(){this.byteReader.releaseLock()}};async function Hn(r){let e=[];for(;;){let t=await r.readPktLine();if(!t||(e.push(t.raw),t.type==="data"&&t.text.trimEnd()==="done"))break}return Mn(e)}async function Dn(r){let e=[],t=[],n=!0;for(;;){let s=await r.readPktLine();if(!s||s.type==="flush")break;if(s.type!=="data")continue;let a=s.text;if(a.endsWith(`
63
- `)&&(a=a.slice(0,-1)),n){let i=a.indexOf("\0");i!==-1&&(t=a.slice(i+1).split(" ").filter(Boolean),a=a.slice(0,i)),n=!1}let o=a.split(" ");o.length>=3&&e.push({oldHash:o[0],newHash:o[1],refName:o[2]})}return{commands:e,capabilities:t}}async function Nn(r,e,t,n,s){let{hooks:a,packCache:o,packOptions:i,auth:f}=s;for(;;){let c=await Bn(r);if(!c)break;if(c.command==="ls-refs"){let l=await Ae(t,n,c.args,a,f);if(U(l))break;await e.write(l)}else if(c.command==="fetch"){let l=await Oe(t,c.args,{cache:o,cacheKey:n,noDelta:i?.noDelta,deltaWindow:i?.deltaWindow});await Sr(e,l)}else break}}async function Bn(r){let e="",t=[],n=[],s=!1,a=!1;for(;;){let o=await r.readPktLine();if(!o)return a?{command:e,capabilities:t,args:n}:null;if(o.type==="flush"){if(!a)return null;break}if(o.type==="response-end")break;if(o.type==="delim"){s=!0;continue}a=!0;let i=o.text;i.endsWith(`
64
- `)&&(i=i.slice(0,-1)),s?n.push(i):i.startsWith("command=")?e=i.slice(8):t.push(i)}return e?{command:e,capabilities:t,args:n}:null}function Mn(r){if(r.length===0)return new Uint8Array(0);if(r.length===1)return r[0];let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}async function Sr(r,e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{value:n,done:s}=await t.read();if(s)break;await r.write(n)}}finally{t.releaseLock()}}else await r.write(e)}async function Tr(r,e,t,n){let s=n?.dryRun??!1,a=await Ir(r),o=$n(a);if(o.length===0)return{deleted:0,retained:0};let i=await me(r,o,[]),f=new Set;for await(let h of i.objects)f.add(h.hash);let c=await e.listObjectHashes(t),l=[];for(let h of c)f.has(h)||l.push(h);let d=await Ir(r);return Wn(a,d)?s||l.length===0?{deleted:l.length,retained:f.size}:{deleted:await e.deleteObjects(t,l),retained:f.size}:{deleted:0,retained:f.size,aborted:!0}}async function Ir(r){return r.refStore.listRefs()}function $n(r){let e=new Set;for(let t of r)e.add(t.hash);return Array.from(e)}function Wn(r,e){if(r.length!==e.length)return!1;let t=new Map;for(let n of r)t.set(n.name,n.hash);for(let n of e)if(t.get(n.name)!==n.hash)return!1;return!0}function Ur(r){function e(t){return{objectStore:new ht(r,t),refStore:new yt(r,t)}}return{async createRepo(t,n){if(await r.hasRepo(t))throw new Error(`repo '${t}' already exists`);let a=n?.defaultBranch??"main";return await r.insertRepo(t),await r.putRef(t,"HEAD",{type:"symbolic",target:`refs/heads/${a}`}),e(t)},async repo(t){return await r.hasRepo(t)?e(t):null},async deleteRepo(t){await r.deleteRepo(t)}}}var ht=class{constructor(e,t){this.driver=e;this.repoId=t}cache=new Ie;async write(e,t){let n=Yt(e,t),s=await jt(n);return await this.driver.putObject(this.repoId,s,e,t),s}async read(e){let t=this.cache.get(e);if(t)return t;let n=await this.driver.getObject(this.repoId,e);if(!n)throw new Error(`object ${e} not found`);return this.cache.set(e,n),n}async exists(e){return!!await this.driver.hasObject(this.repoId,e)}async ingestPack(e){if(e.byteLength<32)return 0;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0);if(n!==1346454347)throw new Error(`invalid pack signature: 0x${n.toString(16)} (expected 0x5041434b)`);let s=t.getUint32(4);if(s!==2)throw new Error(`unsupported pack version: ${s}`);if(t.getUint32(8)===0)return 0;let o=this.driver,i=this.repoId,f=await zt(e,async c=>{let l=await o.getObject(i,c);return l?{type:l.type,content:new Uint8Array(l.content)}:null});return await o.putObjects(i,f.map(c=>({hash:c.hash,type:c.type,content:c.content}))),f.length}async ingestPackStream(e){let t=[];for await(let n of e)t.push({hash:n.hash,type:n.type,content:n.content});return t.length===0?0:(await this.driver.putObjects(this.repoId,t),t.length)}async findByPrefix(e){return e.length<4?[]:Array.from(await this.driver.findObjectsByPrefix(this.repoId,e))}},yt=class{constructor(e,t){this.driver=e;this.repoId=t}async readRef(e){return await this.driver.getRef(this.repoId,e)??null}async writeRef(e,t){await this.driver.putRef(this.repoId,e,er(t))}async deleteRef(e){await this.driver.removeRef(this.repoId,e)}async listRefs(e){let t=await this.driver.listRefs(this.repoId,e),n=[];for(let s of t)if(s.ref.type==="direct")n.push({name:s.name,hash:s.ref.hash});else if(s.ref.type==="symbolic"){let a=await mt(o=>this.driver.getRef(this.repoId,o),s.ref.target);a&&n.push({name:s.name,hash:a})}return n}async compareAndSwapRef(e,t,n){return!!await this.driver.atomicRefUpdate(this.repoId,s=>ke(s.getRef(e),a=>{let o=a?a.type==="direct"?a.hash:mt(i=>s.getRef(i),a.target):null;return ke(o,i=>{if(t===null){if(a!==null)return!1}else if(i!==t)return!1;return n===null?ke(s.removeRef(e),()=>!0):ke(s.putRef(e,n),()=>!0)})}))}};function ke(r,e){return r instanceof Promise?r.then(e):e(r)}function mt(r,e,t=0){return t>10?null:ke(r(e),n=>n?n.type==="direct"?n.hash:n.type==="symbolic"?mt(r,n.target,t+1):null:null)}var Pe=class{repos=new Set;objects=new Map;refs=new Map;hasRepo(e){return this.repos.has(e)}insertRepo(e){this.repos.add(e)}deleteRepo(e){this.repos.delete(e),this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e)}getObject(e,t){let n=this.getObjMap(e).get(t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){let a=this.getObjMap(e);a.has(t)||a.set(t,{type:n,content:new Uint8Array(s)})}putObjects(e,t){let n=this.getObjMap(e);for(let s of t)n.has(s.hash)||n.set(s.hash,{type:s.type,content:new Uint8Array(s.content)})}hasObject(e,t){return this.getObjMap(e).has(t)}findObjectsByPrefix(e,t){let n=[];for(let s of this.getObjMap(e).keys())s.startsWith(t)&&n.push(s);return n}listObjectHashes(e){return Array.from(this.getObjMap(e).keys())}deleteObjects(e,t){let n=this.getObjMap(e),s=0;for(let a of t)n.delete(a)&&s++;return s}getRef(e,t){return this.getRefMap(e).get(t)??null}putRef(e,t,n){this.getRefMap(e).set(t,n)}removeRef(e,t){this.getRefMap(e).delete(t)}listRefs(e,t){let n=[];for(let[s,a]of this.getRefMap(e))t&&!s.startsWith(t)||n.push({name:s,ref:a});return n}atomicRefUpdate(e,t){let n=this.getRefMap(e);return t({getRef:s=>n.get(s)??null,putRef:(s,a)=>{n.set(s,a)},removeRef:s=>{n.delete(s)}})}repoIds(){return Array.from(this.repos)}getObjMap(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefMap(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}};var Lr=new WeakMap,_n={http:r=>({transport:"http",request:r}),ssh:r=>({transport:"ssh",username:r.username})};function Cr(r){if(r.length===0)return!1;for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n===0||n<32||n===127||n===92)return!1}let e=r.split("/");for(let t of e)if(t.length===0||t.charCodeAt(0)===46)return!1;return!0}function Fn(r={}){let e=r.storage??new Pe,t=Ur(e),n=r.resolve??(y=>y),s=r.autoCreate,{basePath:a}=r;async function o(y){if(!Cr(y))return null;let m=await n(y);if(m==null||m!==y&&!Cr(m))return null;let O=await t.repo(m);if(O)return{repo:O,repoId:m};if(!s)return null;let w=typeof s=="object"?{defaultBranch:s.defaultBranch}:void 0;return{repo:await t.createRepo(m,w),repoId:m}}let i=Vn(r.policy,r.hooks),f=r.auth??_n,c=r.packCache===!1?void 0:new te(r.packCache?.maxBytes),l=r.onError===!1?void 0:r.onError??(y=>{let m=y instanceof Error?y.message:String(y);console.error(`[server] Internal error: ${m}`)}),d=!1,u=0,h=null,p=null;function b(){return d?!1:(u++,!0)}function R(){u--,d&&u===0&&h?.()}let E={async fetch(y){if(!b())return new Response("Service Unavailable",{status:503});let m;try{let O=Lr.get(y);if(O!==void 0)m=O;else{if(!f.http)return new Response("HTTP auth provider not configured",{status:501});let A=await f.http(y);if(A instanceof Response)return A;m=A}let w=new URL(y.url),g=decodeURIComponent(w.pathname);if(a){let A=a.replace(/\/+$/,"");if(!g.startsWith(A))return new Response("Not Found",{status:404});g=g.slice(A.length)}if(g.startsWith("/")||(g=`/${g}`),g.endsWith("/info/refs")&&y.method==="GET"){let A=w.searchParams.get("service");if(A!=="git-upload-pack"&&A!=="git-receive-pack")return new Response("Unsupported service",{status:403});let k=bt(g,"/info/refs"),P=await o(k);if(!P)return new Response("Not Found",{status:404});if(Hr(y)&&A==="git-upload-pack"){let T=await G(P.repo,P.repoId,A,i,m);if(U(T))return new Response(T.message??"Forbidden",{status:403});let $=xe();return new Response($,{headers:{"Content-Type":`application/x-${A}-advertisement`,"Cache-Control":"no-cache"}})}let S=await G(P.repo,P.repoId,A,i,m);if(U(S))return new Response(S.message??"Forbidden",{status:403});let I=lt(S.refs,A,S.headTarget);return new Response(I,{headers:{"Content-Type":`application/x-${A}-advertisement`,"Cache-Control":"no-cache"}})}if(g.endsWith("/git-upload-pack")&&y.method==="POST"){let A=bt(g,"/git-upload-pack"),k=await o(A);if(!k)return new Response("Not Found",{status:404});let P=await Dr(y);if(Hr(y)){let S=ot(P),I="application/x-git-upload-pack-result";if(S.command==="ls-refs"){let T=await Ae(k.repo,k.repoId,S.args,i,m);return U(T)?new Response(T.message??"Forbidden",{status:403}):new Response(T,{headers:{"Content-Type":I}})}if(S.command==="fetch"){let T=await Oe(k.repo,S.args,{cache:c,cacheKey:k.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(T,{headers:{"Content-Type":I}})}return new Response(`unknown command: ${S.command}`,{status:400})}let j=await we(k.repo,P,{cache:c,cacheKey:k.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(j,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(g.endsWith("/git-receive-pack")&&y.method==="POST"){let A=bt(g,"/git-receive-pack"),k=await o(A);if(!k)return new Response("Not Found",{status:404});let P=await Dr(y),j=await ut(k.repo,P);if(!j.sawFlush&&j.updates.length===0)return new Response("Bad Request",{status:400});let S=j.capabilities.includes("side-band-64k"),I=j.capabilities.includes("report-status");if(!j.unpackOk){if(I){let $=j.updates.map(W=>({name:W.ref,ok:!1,error:"unpack failed"}));return new Response(Q(!1,$,S),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}let{refResults:T}=await Re({repo:k.repo,repoId:k.repoId,ingestResult:j,hooks:i,auth:m});if(I){let $=T.map(W=>({name:W.ref,ok:W.ok,error:W.error}));return new Response(Q(!0,$,S),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response("Not Found",{status:404})}catch(O){return l?.(O,m),new Response("Internal Server Error",{status:500})}finally{R()}},async handleSession(y,m,O){if(!b())return m.writeStderr?.(new TextEncoder().encode(`fatal: server shutting down
30
+ `));for(let a of e)a.ok?n.push(E(`ok ${a.name}
31
+ `)):n.push(E(`ng ${a.name} ${a.error??"failed"}
32
+ `));n.push(H());let s=C(...n);if(t){let a=[];return a.push(ge(1,s)),a.push(H()),C(...a)}return s}function ge(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),E(t)}function it(r){let e=[];e.push(E(`version 2
33
+ `));for(let t of r)e.push(E(`${t}
34
+ `));return e.push(H()),C(...e)}function ot(r){let e=st(r),t="",n=[],s=[],a=!1;for(let o of e){if(o.type==="flush"||o.type==="response-end")break;if(o.type==="delim"){a=!0;continue}let i=at(o);i&&(a?s.push(i):i.startsWith("command=")?t=i.slice(8):n.push(i))}return{command:t,capabilities:n,args:s}}function ct(r){let e=[];for(let t of r){let n=`${t.hash} ${t.name}`;t.symrefTarget&&(n+=` symref-target:${t.symrefTarget}`),t.peeledHash&&(n+=` peeled:${t.peeledHash}`),e.push(E(`${n}
35
+ `))}return e.push(H()),C(...e)}function ft(r){let e=[],t=[],n=[],s=[],a=!1,o,i=!1,f=!1;for(let c of r)c.startsWith("want ")?e.push(c.slice(5)):c.startsWith("have ")?t.push(c.slice(5)):c.startsWith("shallow ")?n.push(c.slice(8)):c.startsWith("deepen ")?(o=parseInt(c.slice(7),10),Number.isNaN(o)&&(o=void 0)):c.startsWith("want-ref ")?s.push(c.slice(9)):c==="done"?a=!0:c==="include-tag"?i=!0:c==="ofs-delta"&&(f=!0);return{wants:e,haves:t,done:a,clientShallows:n,depth:o,includeTag:i,ofsDeltas:f,wantRefs:s}}function ee(r,e){let t=[],{commonHashes:n,shallowInfo:s,wantedRefs:a}=e??{};if(n&&n.length>0){t.push(E(`acknowledgments
36
+ `));for(let i of n)t.push(E(`ACK ${i}
37
+ `));t.push(E(`ready
38
+ `)),t.push(V())}if(s&&(s.shallow.length>0||s.unshallow.length>0)){t.push(E(`shallow-info
39
+ `));for(let i of s.shallow)t.push(E(`shallow ${i}
40
+ `));for(let i of s.unshallow)t.push(E(`unshallow ${i}
41
+ `));t.push(V())}if(a&&a.length>0){t.push(E(`wanted-refs
42
+ `));for(let i of a)t.push(E(`${i.hash} ${i.name}
43
+ `));t.push(V())}t.push(E(`packfile
44
+ `));let o=0;for(;o<r.byteLength;){let i=Math.min(Ne,r.byteLength-o);t.push(ge(1,r.subarray(o,o+i))),o+=i}return t.push(H()),C(...t)}function br(r,e){let t=[];if(t.push(E(`acknowledgments
45
+ `)),r.length>0)for(let n of r)t.push(E(`ACK ${n}
46
+ `));else t.push(E(`NAK
47
+ `));return e&&t.push(E(`ready
48
+ `)),t.push(H()),C(...t)}async function*gr(r,e){let{commonHashes:t,shallowInfo:n,wantedRefs:s}=e??{};if(t&&t.length>0){let a=[];a.push(E(`acknowledgments
49
+ `));for(let o of t)a.push(E(`ACK ${o}
50
+ `));a.push(E(`ready
51
+ `)),a.push(V()),yield C(...a)}if(n&&(n.shallow.length>0||n.unshallow.length>0)){let a=[];a.push(E(`shallow-info
52
+ `));for(let o of n.shallow)a.push(E(`shallow ${o}
53
+ `));for(let o of n.unshallow)a.push(E(`unshallow ${o}
54
+ `));a.push(V()),yield C(...a)}if(s&&s.length>0){let a=[];a.push(E(`wanted-refs
55
+ `));for(let o of s)a.push(E(`${o.hash} ${o.name}
56
+ `));a.push(V()),yield C(...a)}yield E(`packfile
57
+ `);for await(let a of r){let o=0;for(;o<a.byteLength;){let i=Math.min(Ne,a.byteLength-o);yield ge(1,a.subarray(o,o+i)),o+=i}}yield H()}var te=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,n){if(n.length>0)return null;let s=t.slice().sort();return`${e}\0${s.join(",")}`}get(e){let t=this.entries.get(e);return t?this.hits++:this.misses++,t}set(e,t){if(this.entries.has(e))return;let n=t.packData.byteLength;if(!(n>this.maxBytes)){for(;this.currentBytes+n>this.maxBytes&&this.entries.size>0;){let s=this.entries.keys().next().value;this.currentBytes-=this.entries.get(s).packData.byteLength,this.entries.delete(s)}this.entries.set(e,t),this.currentBytes+=n}}clear(){this.entries.clear(),this.currentBytes=0}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},wr=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","allow-reachable-sha1-in-want","shallow"],Rr=["report-status","side-band-64k","ofs-delta","delete-refs"];async function xr(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),n=[],s=null,a;if(t)if(t.type==="symbolic"){a=t.target;let i=await r.refStore.readRef(t.target);i?.type==="direct"&&(s=i.hash)}else s=t.hash;let o=e.slice().sort((i,f)=>i.name<f.name?-1:i.name>f.name?1:0);if(!s&&o.length>0){let i=In(o);i&&(s=i.hash,a=i.name)}s&&n.push({name:"HEAD",hash:s});for(let i of o)if(n.push({name:i.name,hash:i.hash}),i.name.startsWith("refs/tags/"))try{let f=await r.objectStore.read(i.hash);if(f.type==="tag"){let c=J(f.content);n.push({name:`${i.name}^{}`,hash:c.object})}}catch{}return{refs:n,headTarget:a}}var jn=["refs/heads/main","refs/heads/master"];function In(r){for(let t of jn){let n=r.find(s=>s.name===t);if(n)return n}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function lt(r,e,t){return dr(r,e,e==="git-upload-pack"?wr:Rr,t)}function pt(r,e,t){return Me(r,e==="git-upload-pack"?wr:Rr,t)}async function G(r,e,t,n,s){let{refs:a,headTarget:o}=await xr(r),i=a;if(n?.advertiseRefs){let f=await n.advertiseRefs({repo:r,repoId:e,refs:a,service:t,auth:s});if(L(f))return f;f&&(i=f)}return{refs:i,headTarget:o}}async function we(r,e,t){let{wants:n,haves:s,capabilities:a,clientShallows:o,depth:i,done:f}=ur(e);if(n.length===0)return be(new Uint8Array(0),!1);let c=a.includes("multi_ack_detailed"),l=a.includes("side-band-64k"),p,u,h;if(o.length>0&&(h=new Set(o)),i!==void 0){let m=await nt(r,n,i,h??new Set);p=m,u=new Set(m.shallow)}if(p&&!f)return hr(p);let d;if(c&&s.length>0){d=[];for(let m of s)await r.objectStore.exists(m)&&d.push(m);d.length===0&&(d=void 0)}let b=!u&&t?.cache&&t.cacheKey?te.key(t.cacheKey,n,s):null;if(b&&t?.cache){let m=t.cache.get(b);if(m)return be(m.packData,l,d)}let R=a.includes("include-tag"),A={repo:r,wants:n,haves:s,includeTag:R,shallowBoundary:u,clientShallowBoundary:h,cache:t?.cache,cacheKey:b,deltaWindow:t?.deltaWindow};if(t?.noDelta){let m=await Ar(A);if(!m){let{data:k}=await Z([]);return be(k,l,d,p)}return Or(yr(m,l,d,p))}let y=await kr(A);return be(y,l,d,p)}async function Er(r,e){let t=[],n=await r.refStore.listRefs("refs/tags");for(let s of n)if(!e.has(s.hash))try{let a=await r.objectStore.read(s.hash);if(a.type==="tag"){let o=J(a.content);e.has(o.object)&&(t.push({hash:s.hash,type:"tag",content:a.content}),e.add(s.hash))}}catch{}return t}async function kr(r){let{repo:e,wants:t,haves:n,includeTag:s,shallowBoundary:a,clientShallowBoundary:o}=r,i=await cr(e,t,n,a,o);if(i.count===0){let{data:d}=await Z([]);return d}let f=await fr(i),c=new Set(f.map(d=>d.hash));if(s){let d=await Er(e,c);f.push(...d)}let l=r.deltaWindow?{window:r.deltaWindow}:void 0,p=or(f,l),u=p.map(d=>({hash:d.hash,type:d.type,content:d.content,delta:d.delta,deltaBaseHash:d.deltaBase})),{data:h}=await Z(u);if(r.cacheKey&&r.cache){let d=p.filter(b=>b.delta).length;r.cache.set(r.cacheKey,{packData:h,objectCount:f.length,deltaCount:d})}return h}async function Ar(r){let{repo:e,wants:t,haves:n,includeTag:s,shallowBoundary:a,clientShallowBoundary:o}=r,{count:i,objects:f}=await me(e,t,n,a,o);if(i===0)return null;let c=[];for await(let d of f)c.push(d);let l=new Set(c.map(d=>d.hash)),p=s?await Er(e,l):[],u=c.length+p.length;async function*h(){for(let d of c){let b=await e.objectStore.read(d.hash);yield{type:b.type,content:b.content}}for(let d of p)yield{type:d.type,content:d.content}}return Xt(u,h())}function Or(r){let e=r[Symbol.asyncIterator]();return new ReadableStream({async pull(t){let{value:n,done:s}=await e.next();s?t.close():t.enqueue(n)}})}async function dt(r,e){let{commands:t,packData:n,capabilities:s,sawFlush:a}=mr(e),o=!0;if(n.byteLength>0)try{await r.objectStore.ingestPack(n)}catch{o=!1}return{updates:await Pr(r,t,o),unpackOk:o,capabilities:s,sawFlush:a}}async function ut(r,e,t,n,s=!0){let a=!0;if(e.some(f=>f.newHash!==ne))try{let c=Kt(n,async l=>{try{return await r.objectStore.read(l)}catch{return null}});await r.objectStore.ingestPackStream(c)}catch{a=!1}return{updates:await Pr(r,e,a),unpackOk:a,capabilities:t,sawFlush:s}}async function Pr(r,e,t){let n=[];for(let s of e){let a=s.oldHash===ne,o=s.newHash===ne,i=!1;if(!a&&!o&&t)try{i=await tt(r,s.oldHash,s.newHash)}catch{}n.push({ref:s.refName,oldHash:a?null:s.oldHash,newHash:s.newHash,isFF:i,isCreate:a,isDelete:o})}return n}async function Be(r,e){let t=[],n=[];for(let s of e){if(s.ref==="HEAD"){t.push({ref:s.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!s.isDelete&&!Je(s.ref)){t.push({ref:s.ref,ok:!1,error:"invalid refname"});continue}if(!s.isDelete&&!await r.objectStore.exists(s.newHash)){t.push({ref:s.ref,ok:!1,error:"missing objects"});continue}try{let a=s.isCreate?null:s.oldHash,o=s.isDelete?null:{type:"direct",hash:s.newHash};if(!await r.refStore.compareAndSwapRef(s.ref,a,o)){t.push({ref:s.ref,ok:!1,error:"failed to lock"});continue}t.push({ref:s.ref,ok:!0}),n.push(s)}catch(a){t.push({ref:s.ref,ok:!1,error:a instanceof Error?a.message:String(a)})}}return{refResults:t,applied:n}}async function Re(r){let{repo:e,repoId:t,ingestResult:n,hooks:s,auth:a}=r,{updates:o}=n;if(s?.preReceive){let c=await s.preReceive({repo:e,repoId:t,updates:o,auth:a});if(L(c)){let l=c.message??"pre-receive hook declined";return{refResults:o.map(p=>({ref:p.ref,ok:!1,error:l})),applied:[]}}}let i=[],f=[];for(let c of o){if(c.ref==="HEAD"){i.push({ref:c.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!c.isDelete&&!Je(c.ref)){i.push({ref:c.ref,ok:!1,error:"invalid refname"});continue}if(s?.update){let l=await s.update({repo:e,repoId:t,update:c,auth:a});if(L(l)){i.push({ref:c.ref,ok:!1,error:l.message??"update hook declined"});continue}}if(!c.isDelete&&!await e.objectStore.exists(c.newHash)){i.push({ref:c.ref,ok:!1,error:"missing objects"});continue}try{let l=c.isCreate?null:c.oldHash,p=c.isDelete?null:{type:"direct",hash:c.newHash};if(!await e.refStore.compareAndSwapRef(c.ref,l,p)){i.push({ref:c.ref,ok:!1,error:"failed to lock"});continue}i.push({ref:c.ref,ok:!0}),f.push(c)}catch(l){i.push({ref:c.ref,ok:!1,error:l instanceof Error?l.message:String(l)})}}if(s?.postReceive&&f.length>0)try{await s.postReceive({repo:e,repoId:t,updates:f,auth:a})}catch{}return{refResults:i,applied:f}}async function $e(r,e){let t=[];for(let n of e){let s;n.oldHash!==void 0?s=n.oldHash:s=await ue(r,n.ref);let a=s===null,o=n.newHash===null,i=n.newHash??ne,f=!1;if(!a&&!o)try{f=await tt(r,s,i)}catch{}t.push({ref:n.ref,oldHash:s,newHash:i,isFF:f,isCreate:a,isDelete:o})}return t}var Tn=["agent=just-git/1.0","ls-refs=unborn","fetch=shallow","server-option","object-format=sha1"];function xe(){return it(Tn)}async function Ee(r,e,t,n,s){let a=t.includes("symrefs"),o=t.includes("peel"),i=t.includes("unborn"),f=t.filter(h=>h.startsWith("ref-prefix ")).map(h=>h.slice(11)),c=await G(r,e,"git-upload-pack",n,s);if(L(c))return c;let{refs:l,headTarget:p}=c,u=[];for(let h of l){if(h.name.endsWith("^{}")||f.length>0&&!f.some(b=>h.name.startsWith(b)))continue;let d={hash:h.hash,name:h.name};if(a&&h.name==="HEAD"&&p&&(d.symrefTarget=p),o&&h.name.startsWith("refs/tags/")){let b=l.find(R=>R.name===`${h.name}^{}`);b&&(d.peeledHash=b.hash)}u.push(d)}return i&&!u.some(h=>h.name==="HEAD")&&p&&(f.length===0||f.some(d=>"HEAD".startsWith(d)))&&u.unshift({hash:"unborn",name:"HEAD",symrefTarget:p}),ct(u)}async function ke(r,e,t){let{wants:n,haves:s,done:a,clientShallows:o,depth:i,includeTag:f,wantRefs:c}=ft(e);if(n.length===0&&c.length===0){let{data:w}=await Z([]);return ee(w)}let l=[],p=[...n];for(let w of c){let g=await ue(r,w);g&&(l.push({hash:g,name:w}),p.includes(g)||p.push(g))}let u,h,d;if(o.length>0&&(d=new Set(o)),i!==void 0){let w=await nt(r,p,i,d??new Set);u=w,h=new Set(w.shallow)}let b;if(s.length>0){b=[];for(let w of s)await r.objectStore.exists(w)&&b.push(w);b.length===0&&(b=void 0)}let R=b&&b.length>0;if(!a&&!R)return br(b??[]);let A=!h&&t?.cache&&t.cacheKey?te.key(t.cacheKey,p,s):null,y={commonHashes:b,shallowInfo:u,wantedRefs:l.length>0?l:void 0};if(A&&t?.cache){let w=t.cache.get(A);if(w)return ee(w.packData,y)}let m={repo:r,wants:p,haves:s,includeTag:f,shallowBoundary:h,clientShallowBoundary:d,cache:t?.cache,cacheKey:A,deltaWindow:t?.deltaWindow};if(t?.noDelta){let w=await Ar(m);if(!w){let{data:g}=await Z([]);return ee(g,y)}return Or(gr(w,y))}let k=await kr(m);return ee(k,y)}function Un(r){let e=/--protocol=version=2/.test(r),n=r.replace(/\s*--protocol=version=\d+/g,"").match(/^git[\s-](upload-pack|receive-pack)\s+'?([^']+?)'?\s*$/);if(!n)return null;let s=`git-${n[1]}`,a=n[2];return a.startsWith("/")&&(a=a.slice(1)),e?{service:s,repoPath:a,protocolV2:e}:{service:s,repoPath:a}}var Ln=new TextEncoder;async function Sr(r,e,t){let{resolveRepo:n,hooks:s,packCache:a,packOptions:o,auth:i}=t,f=e.writable.getWriter();try{let c=Un(r);if(!c)return Ae(e,`fatal: unrecognized command '${r}'
58
+ `),128;let{service:l,repoPath:p}=c,u=await n(p);if(!u)return Ae(e,`fatal: '${p}' does not appear to be a git repository
59
+ `),128;let{repo:h,repoId:d}=u;if(c.protocolV2&&l==="git-upload-pack"){let A=await G(h,d,l,s,i);if(L(A))return Ae(e,`fatal: ${A.message??"access denied"}
60
+ `),128;await f.write(xe());let y=new Fe(e.readable);try{await _n(y,f,h,d,{hooks:s,packCache:a,packOptions:o,auth:i})}finally{y.release()}return 0}let b=await G(h,d,l,s,i);if(L(b))return Ae(e,`fatal: ${b.message??"access denied"}
61
+ `),128;await f.write(pt(b.refs,l,b.headTarget));let R=new Fe(e.readable);try{if(l==="git-upload-pack"){let A=await Hn(R),y=await we(h,A,{cache:a,cacheKey:d,noDelta:o?.noDelta,deltaWindow:o?.deltaWindow});await jr(f,y)}else{let{commands:A,capabilities:y}=await Dn(R),m=R.streamRemaining();await Cn({writer:f,repo:h,repoId:d,commands:A,capabilities:y,packStream:m,hooks:s,auth:i})}}finally{R.release()}return 0}catch(c){return t.onError?.(c),Ae(e,`fatal: internal error
62
+ `),128}finally{try{await f.close()}catch{}}}async function Cn(r){let{writer:e,repo:t,repoId:n,commands:s,capabilities:a,packStream:o,hooks:i,auth:f}=r,c=await ut(t,s,a,o);if(c.updates.length===0)return;let l=c.capabilities.includes("side-band-64k"),p=c.capabilities.includes("report-status");if(!c.unpackOk){if(p){let h=c.updates.map(d=>({name:d.ref,ok:!1,error:"unpack failed"}));await e.write(Q(!1,h,l))}return}let{refResults:u}=await Re({repo:t,repoId:n,ingestResult:c,hooks:i,auth:f});if(p){let h=u.map(d=>({name:d.ref,ok:d.ok,error:d.error}));await e.write(Q(!0,h,l))}}function Ae(r,e){r.writeStderr?.(Ln.encode(e))}var vr=new TextDecoder,Fe=class{buf=new Uint8Array(0);byteReader;eof=!1;constructor(e){this.byteReader=e.getReader()}async fill(e){for(;this.buf.byteLength<e&&!this.eof;){let t=await this.byteReader.read();if(t.done||!t.value){this.eof=!0;break}let n=t.value,s=new Uint8Array(this.buf.byteLength+n.byteLength);s.set(this.buf),s.set(n,this.buf.byteLength),this.buf=s}return this.buf.byteLength>=e}consume(e){let t=this.buf.subarray(0,e);return this.buf=this.buf.subarray(e),t}async readPktLine(){if(!await this.fill(4))return null;let e=vr.decode(this.buf.subarray(0,4)),t=parseInt(e,16);if(t===0)return{type:"flush",raw:this.consume(4)};if(t===1)return{type:"delim",raw:this.consume(4)};if(t===2)return{type:"response-end",raw:this.consume(4)};if(t<4||!await this.fill(t))return null;let n=new Uint8Array(this.consume(t));return{type:"data",raw:n,text:vr.decode(n.subarray(4))}}async*streamRemaining(){for(this.buf.byteLength>0&&(yield this.consume(this.buf.byteLength));!this.eof;){let e=await this.byteReader.read();if(e.done||!e.value){this.eof=!0;break}yield e.value}}release(){this.byteReader.releaseLock()}};async function Hn(r){let e=[];for(;;){let t=await r.readPktLine();if(!t||(e.push(t.raw),t.type==="data"&&t.text.trimEnd()==="done"))break}return Mn(e)}async function Dn(r){let e=[],t=[],n=!0;for(;;){let s=await r.readPktLine();if(!s||s.type==="flush")break;if(s.type!=="data")continue;let a=s.text;if(a.endsWith(`
63
+ `)&&(a=a.slice(0,-1)),n){let i=a.indexOf("\0");i!==-1&&(t=a.slice(i+1).split(" ").filter(Boolean),a=a.slice(0,i)),n=!1}let o=a.split(" ");o.length>=3&&e.push({oldHash:o[0],newHash:o[1],refName:o[2]})}return{commands:e,capabilities:t}}async function _n(r,e,t,n,s){let{hooks:a,packCache:o,packOptions:i,auth:f}=s;for(;;){let c=await Nn(r);if(!c)break;if(c.command==="ls-refs"){let l=await Ee(t,n,c.args,a,f);if(L(l))break;await e.write(l)}else if(c.command==="fetch"){let l=await ke(t,c.args,{cache:o,cacheKey:n,noDelta:i?.noDelta,deltaWindow:i?.deltaWindow});await jr(e,l)}else break}}async function Nn(r){let e="",t=[],n=[],s=!1,a=!1;for(;;){let o=await r.readPktLine();if(!o)return a?{command:e,capabilities:t,args:n}:null;if(o.type==="flush"){if(!a)return null;break}if(o.type==="response-end")break;if(o.type==="delim"){s=!0;continue}a=!0;let i=o.text;i.endsWith(`
64
+ `)&&(i=i.slice(0,-1)),s?n.push(i):i.startsWith("command=")?e=i.slice(8):t.push(i)}return e?{command:e,capabilities:t,args:n}:null}function Mn(r){if(r.length===0)return new Uint8Array(0);if(r.length===1)return r[0];let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}async function jr(r,e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{value:n,done:s}=await t.read();if(s)break;await r.write(n)}}finally{t.releaseLock()}}else await r.write(e)}async function Tr(r,e,t,n,s){let a=n?.dryRun??!1,o=await Ir(r),i=Bn(o);if(s)for(let d of s)i.push(d);if(i.length===0)return{deleted:0,retained:0};let f=await me(r,i,[]),c=new Set;for await(let d of f.objects)c.add(d.hash);let l=await e.listObjectHashes(t),p=[];for(let d of l)c.has(d)||p.push(d);let u=await Ir(r);return $n(o,u)?a||p.length===0?{deleted:p.length,retained:c.size}:{deleted:await e.deleteObjects(t,p),retained:c.size}:{deleted:0,retained:c.size,aborted:!0}}async function Ir(r){return r.refStore.listRefs()}function Bn(r){let e=new Set;for(let t of r)e.add(t.hash);return Array.from(e)}function $n(r,e){if(r.length!==e.length)return!1;let t=new Map;for(let n of r)t.set(n.name,n.hash);for(let n of e)if(t.get(n.name)!==n.hash)return!1;return!0}function Ur(r){async function e(t){let n=r.getForkParent?await r.getForkParent(t):null;return{objectStore:new ht(r,t,n),refStore:new yt(r,t)}}return{async createRepo(t,n){if(await r.hasRepo(t))throw new Error(`repo '${t}' already exists`);let a=n?.defaultBranch??"main";return await r.insertRepo(t),await r.putRef(t,"HEAD",{type:"symbolic",target:`refs/heads/${a}`}),e(t)},async repo(t){return await r.hasRepo(t)?e(t):null},async deleteRepo(t){if(r.listForks){let n=await r.listForks(t);if(n.length>0)throw new Error(`cannot delete repo '${t}': has ${n.length} active fork(s)`)}await r.deleteRepo(t)},async forkRepo(t,n,s){if(!r.forkRepo||!r.getForkParent||!r.listForks)throw new Error("storage backend does not support forks");if(!await r.hasRepo(t))throw new Error(`source repo '${t}' not found`);if(await r.hasRepo(n))throw new Error(`repo '${n}' already exists`);let f=await r.getForkParent(t)??t;await r.insertRepo(n),await r.forkRepo(f,n);let c=await r.listRefs(t);for(let p of c)await r.putRef(n,p.name,p.ref);let l=await r.getRef(t,"HEAD");if(l)await r.putRef(n,"HEAD",l);else{let p=s?.defaultBranch??"main";await r.putRef(n,"HEAD",{type:"symbolic",target:`refs/heads/${p}`})}return e(n)}}}var ht=class{constructor(e,t,n=null){this.driver=e;this.repoId=t;this.parentId=n}cache=new Ie;async write(e,t){let n=Yt(e,t),s=await St(n);return await this.driver.putObject(this.repoId,s,e,t),s}async read(e){let t=this.cache.get(e);if(t)return t;let n=await this.driver.getObject(this.repoId,e);if(!n&&this.parentId&&(n=await this.driver.getObject(this.parentId,e)),!n)throw new Error(`object ${e} not found`);return this.cache.set(e,n),n}async exists(e){return await this.driver.hasObject(this.repoId,e)?!0:this.parentId?!!await this.driver.hasObject(this.parentId,e):!1}async ingestPack(e){if(e.byteLength<32)return 0;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0);if(n!==1346454347)throw new Error(`invalid pack signature: 0x${n.toString(16)} (expected 0x5041434b)`);let s=t.getUint32(4);if(s!==2)throw new Error(`unsupported pack version: ${s}`);if(t.getUint32(8)===0)return 0;let o=this.driver,i=this.repoId,f=this.parentId,c=await zt(e,async l=>{let p=await o.getObject(i,l);return!p&&f&&(p=await o.getObject(f,l)),p?{type:p.type,content:new Uint8Array(p.content)}:null});return await o.putObjects(i,c.map(l=>({hash:l.hash,type:l.type,content:l.content}))),c.length}async ingestPackStream(e){let t=[];for await(let n of e)t.push({hash:n.hash,type:n.type,content:n.content});return t.length===0?0:(await this.driver.putObjects(this.repoId,t),t.length)}async findByPrefix(e){if(e.length<4)return[];let t=await this.driver.findObjectsByPrefix(this.repoId,e);if(!this.parentId)return Array.from(t);let n=await this.driver.findObjectsByPrefix(this.parentId,e),s=new Set(t);for(let a of n)s.add(a);return Array.from(s)}},yt=class{constructor(e,t){this.driver=e;this.repoId=t}async readRef(e){return await this.driver.getRef(this.repoId,e)??null}async writeRef(e,t){await this.driver.putRef(this.repoId,e,er(t))}async deleteRef(e){await this.driver.removeRef(this.repoId,e)}async listRefs(e){let t=await this.driver.listRefs(this.repoId,e),n=[];for(let s of t)if(s.ref.type==="direct")n.push({name:s.name,hash:s.ref.hash});else if(s.ref.type==="symbolic"){let a=await mt(o=>this.driver.getRef(this.repoId,o),s.ref.target);a&&n.push({name:s.name,hash:a})}return n}async compareAndSwapRef(e,t,n){return!!await this.driver.atomicRefUpdate(this.repoId,s=>Oe(s.getRef(e),a=>{let o=a?a.type==="direct"?a.hash:mt(i=>s.getRef(i),a.target):null;return Oe(o,i=>{if(t===null){if(a!==null)return!1}else if(i!==t)return!1;return n===null?Oe(s.removeRef(e),()=>!0):Oe(s.putRef(e,n),()=>!0)})}))}};function Oe(r,e){return r instanceof Promise?r.then(e):e(r)}function mt(r,e,t=0){return t>10?null:Oe(r(e),n=>n?n.type==="direct"?n.hash:n.type==="symbolic"?mt(r,n.target,t+1):null:null)}var Pe=class{repos=new Set;objects=new Map;refs=new Map;forks=new Map;hasRepo(e){return this.repos.has(e)}insertRepo(e){this.repos.add(e)}deleteRepo(e){this.repos.delete(e),this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e),this.forks.delete(e)}getObject(e,t){let n=this.getObjMap(e).get(t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){let a=this.getObjMap(e);a.has(t)||a.set(t,{type:n,content:new Uint8Array(s)})}putObjects(e,t){let n=this.getObjMap(e);for(let s of t)n.has(s.hash)||n.set(s.hash,{type:s.type,content:new Uint8Array(s.content)})}hasObject(e,t){return this.getObjMap(e).has(t)}findObjectsByPrefix(e,t){let n=[];for(let s of this.getObjMap(e).keys())s.startsWith(t)&&n.push(s);return n}listObjectHashes(e){return Array.from(this.getObjMap(e).keys())}deleteObjects(e,t){let n=this.getObjMap(e),s=0;for(let a of t)n.delete(a)&&s++;return s}getRef(e,t){return this.getRefMap(e).get(t)??null}putRef(e,t,n){this.getRefMap(e).set(t,n)}removeRef(e,t){this.getRefMap(e).delete(t)}listRefs(e,t){let n=[];for(let[s,a]of this.getRefMap(e))t&&!s.startsWith(t)||n.push({name:s,ref:a});return n}atomicRefUpdate(e,t){let n=this.getRefMap(e);return t({getRef:s=>n.get(s)??null,putRef:(s,a)=>{n.set(s,a)},removeRef:s=>{n.delete(s)}})}forkRepo(e,t){this.forks.set(t,e)}getForkParent(e){return this.forks.get(e)??null}listForks(e){let t=[];for(let[n,s]of this.forks)s===e&&t.push(n);return t}repoIds(){return Array.from(this.repos)}getObjMap(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefMap(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}};var Lr=new WeakMap,Fn={http:r=>({transport:"http",request:r}),ssh:r=>({transport:"ssh",username:r.username})};function Cr(r){if(r.length===0)return!1;for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n===0||n<32||n===127||n===92)return!1}let e=r.split("/");for(let t of e)if(t.length===0||t.charCodeAt(0)===46)return!1;return!0}function Wn(r={}){let e=r.storage??new Pe,t=Ur(e),n=r.resolve??(y=>y),s=r.autoCreate,{basePath:a}=r;async function o(y){if(!Cr(y))return null;let m=await n(y);if(m==null||m!==y&&!Cr(m))return null;let k=await t.repo(m);if(k)return{repo:k,repoId:m};if(!s)return null;let w=typeof s=="object"?{defaultBranch:s.defaultBranch}:void 0;return{repo:await t.createRepo(m,w),repoId:m}}let i=Vn(r.policy,r.hooks),f=r.auth??Fn,c=r.packCache===!1?void 0:new te(r.packCache?.maxBytes),l=r.onError===!1?void 0:r.onError??(y=>{let m=y instanceof Error?y.message:String(y);console.error(`[server] Internal error: ${m}`)}),p=!1,u=0,h=null,d=null;function b(){return p?!1:(u++,!0)}function R(){u--,p&&u===0&&h?.()}let A={async fetch(y){if(!b())return new Response("Service Unavailable",{status:503});let m;try{let k=Lr.get(y);if(k!==void 0)m=k;else{if(!f.http)return new Response("HTTP auth provider not configured",{status:501});let x=await f.http(y);if(x instanceof Response)return x;m=x}let w=new URL(y.url),g=decodeURIComponent(w.pathname);if(a){let x=a.replace(/\/+$/,"");if(!g.startsWith(x))return new Response("Not Found",{status:404});g=g.slice(x.length)}if(g.startsWith("/")||(g=`/${g}`),g.endsWith("/info/refs")&&y.method==="GET"){let x=w.searchParams.get("service");if(x!=="git-upload-pack"&&x!=="git-receive-pack")return new Response("Unsupported service",{status:403});let O=bt(g,"/info/refs"),P=await o(O);if(!P)return new Response("Not Found",{status:404});if(Hr(y)&&x==="git-upload-pack"){let U=await G(P.repo,P.repoId,x,i,m);if(L(U))return new Response(U.message??"Forbidden",{status:403});let B=xe();return new Response(B,{headers:{"Content-Type":`application/x-${x}-advertisement`,"Cache-Control":"no-cache"}})}let j=await G(P.repo,P.repoId,x,i,m);if(L(j))return new Response(j.message??"Forbidden",{status:403});let T=lt(j.refs,x,j.headTarget);return new Response(T,{headers:{"Content-Type":`application/x-${x}-advertisement`,"Cache-Control":"no-cache"}})}if(g.endsWith("/git-upload-pack")&&y.method==="POST"){let x=bt(g,"/git-upload-pack"),O=await o(x);if(!O)return new Response("Not Found",{status:404});let P=await Dr(y);if(Hr(y)){let j=ot(P),T="application/x-git-upload-pack-result";if(j.command==="ls-refs"){let U=await Ee(O.repo,O.repoId,j.args,i,m);return L(U)?new Response(U.message??"Forbidden",{status:403}):new Response(U,{headers:{"Content-Type":T}})}if(j.command==="fetch"){let U=await ke(O.repo,j.args,{cache:c,cacheKey:O.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(U,{headers:{"Content-Type":T}})}return new Response(`unknown command: ${j.command}`,{status:400})}let S=await we(O.repo,P,{cache:c,cacheKey:O.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(S,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(g.endsWith("/git-receive-pack")&&y.method==="POST"){let x=bt(g,"/git-receive-pack"),O=await o(x);if(!O)return new Response("Not Found",{status:404});let P=await Dr(y),S=await dt(O.repo,P);if(!S.sawFlush&&S.updates.length===0)return new Response("Bad Request",{status:400});let j=S.capabilities.includes("side-band-64k"),T=S.capabilities.includes("report-status");if(!S.unpackOk){if(T){let B=S.updates.map($=>({name:$.ref,ok:!1,error:"unpack failed"}));return new Response(Q(!1,B,j),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}let{refResults:U}=await Re({repo:O.repo,repoId:O.repoId,ingestResult:S,hooks:i,auth:m});if(T){let B=U.map($=>({name:$.ref,ok:$.ok,error:$.error}));return new Response(Q(!0,B,j),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response("Not Found",{status:404})}catch(k){return l?.(k,m),new Response("Internal Server Error",{status:500})}finally{R()}},async handleSession(y,m,k){if(!b())return m.writeStderr?.(new TextEncoder().encode(`fatal: server shutting down
65
65
  `)),128;try{if(!f.ssh)return m.writeStderr?.(new TextEncoder().encode(`fatal: SSH auth provider not configured
66
- `)),128;let w=await f.ssh(O??{});return await jr(y,m,{resolveRepo:o,hooks:i,packCache:c,packOptions:r.packOptions,auth:w,onError:l?g=>l(g,w):void 0})}finally{R()}},async updateRefs(y,m){if(!b())throw new Error("Server is shutting down");try{let O=await E.requireRepo(y),w=await We(O,m);return $e(O,w)}finally{R()}},async commit(y,m){if(!b())throw new Error("Server is shutting down");try{let O=await E.requireRepo(y),w=await nr(O,m),g=`refs/heads/${m.branch}`,A=await We(O,[{ref:g,newHash:w.hash,oldHash:w.parentHash}]),P=(await $e(O,A)).refResults[0];if(!P?.ok)throw new Error(P?.error??"ref update failed");return w}finally{R()}},nodeHandler(y,m){let O=[];y.on("data",w=>O.push(new Uint8Array(w))),y.on("error",()=>{m.writeHead(500),m.end("Internal Server Error")}),y.on("end",()=>{Gn(E,y,O,m).catch(()=>{try{m.writeHead(500),m.end("Internal Server Error")}catch{}})})},createRepo:(y,m)=>t.createRepo(y,m),repo:y=>t.repo(y),async requireRepo(y){let m=await t.repo(y);if(!m)throw new Error(`Repository "${y}" not found`);return m},deleteRepo:y=>t.deleteRepo(y),async gc(y,m){if(!b())throw new Error("Server is shutting down");try{let O=await E.requireRepo(y);return Tr(O,e,y,m)}finally{R()}},get closed(){return d},asNetwork(y="http://git",m){return{allowed:[y.endsWith("/")?y:`${y}/`],fetch:(w,g)=>{let A=new Request(w,g);return m!==void 0&&Lr.set(A,m),E.fetch(A)}}},async close(y){if(d)return p??Promise.resolve();if(d=!0,c?.clear(),u!==0){if(p=new Promise(m=>{h=m}),y?.signal){if(y.signal.aborted){h();return}let m=()=>h?.();y.signal.addEventListener("abort",m,{once:!0}),p.then(()=>y.signal.removeEventListener("abort",m))}return p}}};return E}function Hr(r){let e=r.headers.get("git-protocol");return e!==null&&e.includes("version=2")}function bt(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Dr(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let n=new DecompressionStream("gzip"),s=n.writable.getWriter();return s.write(e),s.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}return e}async function Gn(r,e,t,n){let s=typeof e.headers.host=="string"?e.headers.host:"localhost",a=new URL(e.url??"/",`http://${s}`),o=new Headers;for(let[h,p]of Object.entries(e.headers))if(p!==void 0)if(Array.isArray(p))for(let b of p)o.append(h,b);else o.set(h,p);let i=e.method??"GET",f;if(i!=="GET"&&i!=="HEAD"){let h=0;for(let R of t)h+=R.byteLength;let p=new Uint8Array(h),b=0;for(let R of t)p.set(R,b),b+=R.byteLength;f=p}let c=new Request(a.href,{method:i,headers:o,body:f}),l=await r.fetch(c),d={};l.headers.forEach((h,p)=>{d[p]=h}),n.writeHead(l.status,d);let u=new Uint8Array(await l.arrayBuffer());u.byteLength>0&&n.write(u),n.end()}function qn(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:n=!1,immutableTags:s=!1}=r,a=new Set(e.map(i=>i.startsWith("refs/")?i:`refs/heads/${i}`)),o={};return a.size>0&&(o.preReceive=async i=>{for(let f of i.updates)if(a.has(f.ref)){if(f.isDelete)return{reject:!0,message:`cannot delete protected branch ${f.ref}`};if(!f.isCreate&&!f.isFF)return{reject:!0,message:`non-fast-forward push to protected branch ${f.ref}`}}}),(t||n||s)&&(o.update=async i=>{if(n&&i.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(s&&i.update.ref.startsWith("refs/tags/")){if(i.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!i.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!i.update.isCreate&&!i.update.isDelete&&!i.update.isFF)return{reject:!0,message:"non-fast-forward"}}),o}function Vn(r,e){let t=r?qn(r):void 0;return t&&e?Nr(t,e):t??e}function Nr(...r){let e=r.filter(i=>i!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},n=e.filter(i=>i.preReceive).map(i=>i.preReceive);n.length>0&&(t.preReceive=async i=>{for(let f of n){let c=await f(i);if(U(c))return c}});let s=e.filter(i=>i.update).map(i=>i.update);s.length>0&&(t.update=async i=>{for(let f of s){let c=await f(i);if(U(c))return c}});let a=e.filter(i=>i.postReceive).map(i=>i.postReceive);a.length>0&&(t.postReceive=async i=>{for(let f of a)try{await f(i)}catch{}});let o=e.filter(i=>i.advertiseRefs).map(i=>i.advertiseRefs);return o.length>0&&(t.advertiseRefs=async i=>{let f=i.refs;for(let c of o){let l=await c({...i,refs:f});if(U(l))return l;l&&(f=l)}return f}),t}var zn=`
66
+ `)),128;let w=await f.ssh(k??{});return await Sr(y,m,{resolveRepo:o,hooks:i,packCache:c,packOptions:r.packOptions,auth:w,onError:l?g=>l(g,w):void 0})}finally{R()}},async updateRefs(y,m){if(!b())throw new Error("Server is shutting down");try{let k=await A.requireRepo(y),w=await $e(k,m);return Be(k,w)}finally{R()}},async commit(y,m){if(!b())throw new Error("Server is shutting down");try{let k=await A.requireRepo(y),w=await nr(k,m),g=`refs/heads/${m.branch}`,x=await $e(k,[{ref:g,newHash:w.hash,oldHash:w.parentHash}]),P=(await Be(k,x)).refResults[0];if(!P?.ok)throw new Error(P?.error??"ref update failed");return w}finally{R()}},nodeHandler(y,m){let k=[];y.on("data",w=>k.push(new Uint8Array(w))),y.on("error",()=>{m.writeHead(500),m.end("Internal Server Error")}),y.on("end",()=>{Gn(A,y,k,m).catch(()=>{try{m.writeHead(500),m.end("Internal Server Error")}catch{}})})},createRepo:(y,m)=>t.createRepo(y,m),repo:y=>t.repo(y),async requireRepo(y){let m=await t.repo(y);if(!m)throw new Error(`Repository "${y}" not found`);return m},deleteRepo:y=>t.deleteRepo(y),async forkRepo(y,m,k){if(!b())throw new Error("Server is shutting down");try{return await t.forkRepo(y,m,k)}finally{R()}},async gc(y,m){if(!b())throw new Error("Server is shutting down");try{let k=await A.requireRepo(y),w;if(e.listForks&&e.getForkParent&&!await e.getForkParent(y)){let x=await e.listForks(y);if(x.length>0){w=[];for(let O of x){let P=await t.repo(O);if(!P)continue;let S=await P.refStore.listRefs();for(let j of S)w.push(j.hash)}}}return Tr(k,e,y,m,w)}finally{R()}},get closed(){return p},asNetwork(y="http://git",m){return{allowed:[y.endsWith("/")?y:`${y}/`],fetch:(w,g)=>{let x=new Request(w,g);return m!==void 0&&Lr.set(x,m),A.fetch(x)}}},async close(y){if(p)return d??Promise.resolve();if(p=!0,c?.clear(),u!==0){if(d=new Promise(m=>{h=m}),y?.signal){if(y.signal.aborted){h();return}let m=()=>h?.();y.signal.addEventListener("abort",m,{once:!0}),d.then(()=>y.signal.removeEventListener("abort",m))}return d}}};return A}function Hr(r){let e=r.headers.get("git-protocol");return e!==null&&e.includes("version=2")}function bt(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Dr(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let n=new DecompressionStream("gzip"),s=n.writable.getWriter();return s.write(e),s.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}return e}async function Gn(r,e,t,n){let s=typeof e.headers.host=="string"?e.headers.host:"localhost",a=new URL(e.url??"/",`http://${s}`),o=new Headers;for(let[h,d]of Object.entries(e.headers))if(d!==void 0)if(Array.isArray(d))for(let b of d)o.append(h,b);else o.set(h,d);let i=e.method??"GET",f;if(i!=="GET"&&i!=="HEAD"){let h=0;for(let R of t)h+=R.byteLength;let d=new Uint8Array(h),b=0;for(let R of t)d.set(R,b),b+=R.byteLength;f=d}let c=new Request(a.href,{method:i,headers:o,body:f}),l=await r.fetch(c),p={};l.headers.forEach((h,d)=>{p[d]=h}),n.writeHead(l.status,p);let u=new Uint8Array(await l.arrayBuffer());u.byteLength>0&&n.write(u),n.end()}function qn(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:n=!1,immutableTags:s=!1}=r,a=new Set(e.map(i=>i.startsWith("refs/")?i:`refs/heads/${i}`)),o={};return a.size>0&&(o.preReceive=async i=>{for(let f of i.updates)if(a.has(f.ref)){if(f.isDelete)return{reject:!0,message:`cannot delete protected branch ${f.ref}`};if(!f.isCreate&&!f.isFF)return{reject:!0,message:`non-fast-forward push to protected branch ${f.ref}`}}}),(t||n||s)&&(o.update=async i=>{if(n&&i.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(s&&i.update.ref.startsWith("refs/tags/")){if(i.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!i.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!i.update.isCreate&&!i.update.isDelete&&!i.update.isFF)return{reject:!0,message:"non-fast-forward"}}),o}function Vn(r,e){let t=r?qn(r):void 0;return t&&e?_r(t,e):t??e}function _r(...r){let e=r.filter(i=>i!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},n=e.filter(i=>i.preReceive).map(i=>i.preReceive);n.length>0&&(t.preReceive=async i=>{for(let f of n){let c=await f(i);if(L(c))return c}});let s=e.filter(i=>i.update).map(i=>i.update);s.length>0&&(t.update=async i=>{for(let f of s){let c=await f(i);if(L(c))return c}});let a=e.filter(i=>i.postReceive).map(i=>i.postReceive);a.length>0&&(t.postReceive=async i=>{for(let f of a)try{await f(i)}catch{}});let o=e.filter(i=>i.advertiseRefs).map(i=>i.advertiseRefs);return o.length>0&&(t.advertiseRefs=async i=>{let f=i.refs;for(let c of o){let l=await c({...i,refs:f});if(L(l))return l;l&&(f=l)}return f}),t}var zn=`
67
67
  CREATE TABLE IF NOT EXISTS git_repos (
68
68
  id TEXT PRIMARY KEY
69
69
  );
@@ -84,7 +84,12 @@ CREATE TABLE IF NOT EXISTS git_refs (
84
84
  target TEXT,
85
85
  PRIMARY KEY (repo_id, name)
86
86
  ) WITHOUT ROWID;
87
- `;function Kn(r){return{repoInsert:r.prepare("INSERT INTO git_repos (id) VALUES (?)"),repoExists:r.prepare("SELECT 1 FROM git_repos WHERE id = ? LIMIT 1"),repoDelete:r.prepare("DELETE FROM git_repos WHERE id = ?"),objInsert:r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)"),objRead:r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?"),objExists:r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1"),objPrefix:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?"),objDeleteAll:r.prepare("DELETE FROM git_objects WHERE repo_id = ?"),objListHashes:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ?"),objDelete:r.prepare("DELETE FROM git_objects WHERE repo_id = ? AND hash = ?"),refRead:r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?"),refWrite:r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)"),refDelete:r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?"),refList:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?"),refListAll:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?"),refDeleteAll:r.prepare("DELETE FROM git_refs WHERE repo_id = ?")}}var wt=class{constructor(e){this.db=e;e.run(zn),this.stmts=Kn(e),this.batchInsertTx=e.transaction(t=>{for(let n of t)this.stmts.objInsert.run(n.repoId,n.hash,n.type,n.content)}),this.batchDeleteTx=e.transaction((t,n,s)=>{let a=0;for(let o of n)this.stmts.objDelete.run(t,o),a++;s(a)})}stmts;batchInsertTx;batchDeleteTx;hasRepo(e){return this.stmts.repoExists.get(e)!==null}insertRepo(e){this.stmts.repoInsert.run(e)}deleteRepo(e){this.stmts.repoDelete.run(e),this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e)}getObject(e,t){let n=this.stmts.objRead.get(e,t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.stmts.objInsert.run(e,t,n,s)}putObjects(e,t){this.batchInsertTx(t.map(n=>({repoId:e,...n})))}hasObject(e,t){return this.stmts.objExists.get(e,t)!==null}findObjectsByPrefix(e,t){return this.stmts.objPrefix.all(e,`${t}*`).map(s=>s.hash)}listObjectHashes(e){return this.stmts.objListHashes.all(e).map(n=>n.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.batchDeleteTx(e,t,s=>{n+=s}),n}getRef(e,t){let n=this.stmts.refRead.get(e,t);return gt(n)}putRef(e,t,n){n.type==="symbolic"?this.stmts.refWrite.run(e,t,"symbolic",null,n.target):this.stmts.refWrite.run(e,t,"direct",n.hash,null)}removeRef(e,t){this.stmts.refDelete.run(e,t)}listRefs(e,t){return(t?this.stmts.refList.all(e,`${t}*`):this.stmts.refListAll.all(e)).flatMap(s=>{let a=gt(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){let n=this.stmts;return this.db.transaction(()=>t({getRef:a=>gt(n.refRead.get(e,a)),putRef:(a,o)=>{o.type==="symbolic"?n.refWrite.run(e,a,"symbolic",null,o.target):n.refWrite.run(e,a,"direct",o.hash,null)},removeRef:a=>{n.refDelete.run(e,a)}}))()}};function gt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var Xn=`
87
+
88
+ CREATE TABLE IF NOT EXISTS git_forks (
89
+ repo_id TEXT PRIMARY KEY,
90
+ parent_id TEXT NOT NULL
91
+ );
92
+ `;function Kn(r){return{repoInsert:r.prepare("INSERT INTO git_repos (id) VALUES (?)"),repoExists:r.prepare("SELECT 1 FROM git_repos WHERE id = ? LIMIT 1"),repoDelete:r.prepare("DELETE FROM git_repos WHERE id = ?"),objInsert:r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)"),objRead:r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?"),objExists:r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1"),objPrefix:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?"),objDeleteAll:r.prepare("DELETE FROM git_objects WHERE repo_id = ?"),objListHashes:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ?"),objDelete:r.prepare("DELETE FROM git_objects WHERE repo_id = ? AND hash = ?"),refRead:r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?"),refWrite:r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)"),refDelete:r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?"),refList:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?"),refListAll:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?"),refDeleteAll:r.prepare("DELETE FROM git_refs WHERE repo_id = ?"),forkInsert:r.prepare("INSERT INTO git_forks (repo_id, parent_id) VALUES (?, ?)"),forkGetParent:r.prepare("SELECT parent_id FROM git_forks WHERE repo_id = ?"),forkListChildren:r.prepare("SELECT repo_id FROM git_forks WHERE parent_id = ?"),forkDelete:r.prepare("DELETE FROM git_forks WHERE repo_id = ?")}}var wt=class{constructor(e){this.db=e;e.run(zn),this.stmts=Kn(e),this.batchInsertTx=e.transaction(t=>{for(let n of t)this.stmts.objInsert.run(n.repoId,n.hash,n.type,n.content)}),this.batchDeleteTx=e.transaction((t,n,s)=>{let a=0;for(let o of n)this.stmts.objDelete.run(t,o),a++;s(a)})}stmts;batchInsertTx;batchDeleteTx;hasRepo(e){return this.stmts.repoExists.get(e)!==null}insertRepo(e){this.stmts.repoInsert.run(e)}deleteRepo(e){this.stmts.repoDelete.run(e),this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e),this.stmts.forkDelete.run(e)}getObject(e,t){let n=this.stmts.objRead.get(e,t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.stmts.objInsert.run(e,t,n,s)}putObjects(e,t){this.batchInsertTx(t.map(n=>({repoId:e,...n})))}hasObject(e,t){return this.stmts.objExists.get(e,t)!==null}findObjectsByPrefix(e,t){return this.stmts.objPrefix.all(e,`${t}*`).map(s=>s.hash)}listObjectHashes(e){return this.stmts.objListHashes.all(e).map(n=>n.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.batchDeleteTx(e,t,s=>{n+=s}),n}getRef(e,t){let n=this.stmts.refRead.get(e,t);return gt(n)}putRef(e,t,n){n.type==="symbolic"?this.stmts.refWrite.run(e,t,"symbolic",null,n.target):this.stmts.refWrite.run(e,t,"direct",n.hash,null)}removeRef(e,t){this.stmts.refDelete.run(e,t)}listRefs(e,t){return(t?this.stmts.refList.all(e,`${t}*`):this.stmts.refListAll.all(e)).flatMap(s=>{let a=gt(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){let n=this.stmts;return this.db.transaction(()=>t({getRef:a=>gt(n.refRead.get(e,a)),putRef:(a,o)=>{o.type==="symbolic"?n.refWrite.run(e,a,"symbolic",null,o.target):n.refWrite.run(e,a,"direct",o.hash,null)},removeRef:a=>{n.refDelete.run(e,a)}}))()}forkRepo(e,t){this.stmts.forkInsert.run(t,e)}getForkParent(e){return this.stmts.forkGetParent.get(e)?.parent_id??null}listForks(e){return this.stmts.forkListChildren.all(e).map(n=>n.repo_id)}};function gt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var Xn=`
88
93
  CREATE TABLE IF NOT EXISTS git_repos (
89
94
  id TEXT PRIMARY KEY
90
95
  );
@@ -105,7 +110,12 @@ CREATE TABLE IF NOT EXISTS git_refs (
105
110
  target TEXT,
106
111
  PRIMARY KEY (repo_id, name)
107
112
  ) WITHOUT ROWID;
108
- `;function C(r){return{run:(...e)=>{r.run(...e)},get:(...e)=>r.get(...e)??null,all:(...e)=>r.all(...e)}}function Yn(r){return{repoInsert:C(r.prepare("INSERT INTO git_repos (id) VALUES (?)")),repoExists:C(r.prepare("SELECT 1 FROM git_repos WHERE id = ? LIMIT 1")),repoDelete:C(r.prepare("DELETE FROM git_repos WHERE id = ?")),objInsert:C(r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)")),objRead:C(r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?")),objExists:C(r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1")),objPrefix:C(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?")),objDeleteAll:C(r.prepare("DELETE FROM git_objects WHERE repo_id = ?")),objListHashes:C(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ?")),objDelete:C(r.prepare("DELETE FROM git_objects WHERE repo_id = ? AND hash = ?")),refRead:C(r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?")),refWrite:C(r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)")),refDelete:C(r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?")),refList:C(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?")),refListAll:C(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?")),refDeleteAll:C(r.prepare("DELETE FROM git_refs WHERE repo_id = ?"))}}var xt=class{constructor(e){this.db=e;e.exec(Xn),this.stmts=Yn(e),this.batchInsertTx=e.transaction(t=>{for(let n of t)this.stmts.objInsert.run(n.repoId,n.hash,n.type,n.content)}),this.batchDeleteTx=e.transaction((t,n,s)=>{let a=0;for(let o of n)this.stmts.objDelete.run(t,o),a++;s(a)})}stmts;batchInsertTx;batchDeleteTx;hasRepo(e){return this.stmts.repoExists.get(e)!==null}insertRepo(e){this.stmts.repoInsert.run(e)}deleteRepo(e){this.stmts.repoDelete.run(e),this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e)}getObject(e,t){let n=this.stmts.objRead.get(e,t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.stmts.objInsert.run(e,t,n,s)}putObjects(e,t){this.batchInsertTx(t.map(n=>({repoId:e,...n})))}hasObject(e,t){return this.stmts.objExists.get(e,t)!==null}findObjectsByPrefix(e,t){return this.stmts.objPrefix.all(e,`${t}*`).map(s=>s.hash)}listObjectHashes(e){return this.stmts.objListHashes.all(e).map(n=>n.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.batchDeleteTx(e,t,s=>{n+=s}),n}getRef(e,t){let n=this.stmts.refRead.get(e,t);return Rt(n)}putRef(e,t,n){n.type==="symbolic"?this.stmts.refWrite.run(e,t,"symbolic",null,n.target):this.stmts.refWrite.run(e,t,"direct",n.hash,null)}removeRef(e,t){this.stmts.refDelete.run(e,t)}listRefs(e,t){return(t?this.stmts.refList.all(e,`${t}*`):this.stmts.refListAll.all(e)).flatMap(s=>{let a=Rt(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){let n=this.stmts;return this.db.transaction(()=>t({getRef:a=>Rt(n.refRead.get(e,a)),putRef:(a,o)=>{o.type==="symbolic"?n.refWrite.run(e,a,"symbolic",null,o.target):n.refWrite.run(e,a,"direct",o.hash,null)},removeRef:a=>{n.refDelete.run(e,a)}}))()}};function Rt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var Zn=`
113
+
114
+ CREATE TABLE IF NOT EXISTS git_forks (
115
+ repo_id TEXT PRIMARY KEY,
116
+ parent_id TEXT NOT NULL
117
+ );
118
+ `;function I(r){return{run:(...e)=>{r.run(...e)},get:(...e)=>r.get(...e)??null,all:(...e)=>r.all(...e)}}function Yn(r){return{repoInsert:I(r.prepare("INSERT INTO git_repos (id) VALUES (?)")),repoExists:I(r.prepare("SELECT 1 FROM git_repos WHERE id = ? LIMIT 1")),repoDelete:I(r.prepare("DELETE FROM git_repos WHERE id = ?")),objInsert:I(r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)")),objRead:I(r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?")),objExists:I(r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1")),objPrefix:I(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?")),objDeleteAll:I(r.prepare("DELETE FROM git_objects WHERE repo_id = ?")),objListHashes:I(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ?")),objDelete:I(r.prepare("DELETE FROM git_objects WHERE repo_id = ? AND hash = ?")),refRead:I(r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?")),refWrite:I(r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)")),refDelete:I(r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?")),refList:I(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?")),refListAll:I(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?")),refDeleteAll:I(r.prepare("DELETE FROM git_refs WHERE repo_id = ?")),forkInsert:I(r.prepare("INSERT INTO git_forks (repo_id, parent_id) VALUES (?, ?)")),forkGetParent:I(r.prepare("SELECT parent_id FROM git_forks WHERE repo_id = ?")),forkListChildren:I(r.prepare("SELECT repo_id FROM git_forks WHERE parent_id = ?")),forkDelete:I(r.prepare("DELETE FROM git_forks WHERE repo_id = ?"))}}var xt=class{constructor(e){this.db=e;e.exec(Xn),this.stmts=Yn(e),this.batchInsertTx=e.transaction(t=>{for(let n of t)this.stmts.objInsert.run(n.repoId,n.hash,n.type,n.content)}),this.batchDeleteTx=e.transaction((t,n,s)=>{let a=0;for(let o of n)this.stmts.objDelete.run(t,o),a++;s(a)})}stmts;batchInsertTx;batchDeleteTx;hasRepo(e){return this.stmts.repoExists.get(e)!==null}insertRepo(e){this.stmts.repoInsert.run(e)}deleteRepo(e){this.stmts.repoDelete.run(e),this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e),this.stmts.forkDelete.run(e)}getObject(e,t){let n=this.stmts.objRead.get(e,t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.stmts.objInsert.run(e,t,n,s)}putObjects(e,t){this.batchInsertTx(t.map(n=>({repoId:e,...n})))}hasObject(e,t){return this.stmts.objExists.get(e,t)!==null}findObjectsByPrefix(e,t){return this.stmts.objPrefix.all(e,`${t}*`).map(s=>s.hash)}listObjectHashes(e){return this.stmts.objListHashes.all(e).map(n=>n.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.batchDeleteTx(e,t,s=>{n+=s}),n}getRef(e,t){let n=this.stmts.refRead.get(e,t);return Rt(n)}putRef(e,t,n){n.type==="symbolic"?this.stmts.refWrite.run(e,t,"symbolic",null,n.target):this.stmts.refWrite.run(e,t,"direct",n.hash,null)}removeRef(e,t){this.stmts.refDelete.run(e,t)}listRefs(e,t){return(t?this.stmts.refList.all(e,`${t}*`):this.stmts.refListAll.all(e)).flatMap(s=>{let a=Rt(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){let n=this.stmts;return this.db.transaction(()=>t({getRef:a=>Rt(n.refRead.get(e,a)),putRef:(a,o)=>{o.type==="symbolic"?n.refWrite.run(e,a,"symbolic",null,o.target):n.refWrite.run(e,a,"direct",o.hash,null)},removeRef:a=>{n.refDelete.run(e,a)}}))()}forkRepo(e,t){this.stmts.forkInsert.run(t,e)}getForkParent(e){return this.stmts.forkGetParent.get(e)?.parent_id??null}listForks(e){return this.stmts.forkListChildren.all(e).map(n=>n.repo_id)}};function Rt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var Zn=`
109
119
  CREATE TABLE IF NOT EXISTS git_repos (
110
120
  id TEXT PRIMARY KEY
111
121
  );
@@ -126,5 +136,10 @@ CREATE TABLE IF NOT EXISTS git_refs (
126
136
  target TEXT,
127
137
  PRIMARY KEY (repo_id, name)
128
138
  );
139
+
140
+ CREATE TABLE IF NOT EXISTS git_forks (
141
+ repo_id TEXT PRIMARY KEY,
142
+ parent_id TEXT NOT NULL
143
+ );
129
144
  `,v={repoInsert:"INSERT INTO git_repos (id) VALUES ($1)",repoExists:"SELECT 1 FROM git_repos WHERE id = $1 LIMIT 1",repoDelete:"DELETE FROM git_repos WHERE id = $1",objInsert:"INSERT INTO git_objects (repo_id, hash, type, content) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING",objRead:"SELECT type, content FROM git_objects WHERE repo_id = $1 AND hash = $2",objExists:"SELECT 1 FROM git_objects WHERE repo_id = $1 AND hash = $2 LIMIT 1",objPrefix:"SELECT hash FROM git_objects WHERE repo_id = $1 AND hash LIKE $2",objDeleteAll:"DELETE FROM git_objects WHERE repo_id = $1",objListHashes:"SELECT hash FROM git_objects WHERE repo_id = $1",refRead:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2",refReadForUpdate:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2 FOR UPDATE",refWrite:`INSERT INTO git_refs (repo_id, name, type, hash, target) VALUES ($1, $2, $3, $4, $5)
130
- ON CONFLICT (repo_id, name) DO UPDATE SET type = EXCLUDED.type, hash = EXCLUDED.hash, target = EXCLUDED.target`,refDelete:"DELETE FROM git_refs WHERE repo_id = $1 AND name = $2",refList:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1 AND name LIKE $2",refListAll:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1",refDeleteAll:"DELETE FROM git_refs WHERE repo_id = $1"},Ot=class r{constructor(e){this.pool=e}static async create(e){return await e.query(Zn),new r(e)}async transaction(e){let t=await this.pool.connect();try{await t.query("BEGIN");let n=await e((s,a)=>t.query(s,a));return await t.query("COMMIT"),n}catch(n){throw await t.query("ROLLBACK"),n}finally{t.release()}}async hasRepo(e){let{rows:t}=await this.pool.query(v.repoExists,[e]);return t.length>0}async insertRepo(e){await this.pool.query(v.repoInsert,[e])}async deleteRepo(e){await this.pool.query(v.repoDelete,[e]),await this.pool.query(v.objDeleteAll,[e]),await this.pool.query(v.refDeleteAll,[e])}async getObject(e,t){let{rows:n}=await this.pool.query(v.objRead,[e,t]),s=n[0];return s?{type:s.type,content:new Uint8Array(s.content)}:null}async putObject(e,t,n,s){await this.pool.query(v.objInsert,[e,t,n,s])}async putObjects(e,t){await this.transaction(async n=>{for(let s of t)await n(v.objInsert,[e,s.hash,s.type,s.content])})}async hasObject(e,t){let{rows:n}=await this.pool.query(v.objExists,[e,t]);return n.length>0}async findObjectsByPrefix(e,t){let{rows:n}=await this.pool.query(v.objPrefix,[e,`${t}%`]);return n.map(s=>s.hash)}async listObjectHashes(e){let{rows:t}=await this.pool.query(v.objListHashes,[e]);return t.map(n=>n.hash)}async deleteObjects(e,t){if(t.length===0)return 0;let{rows:n}=await this.pool.query("DELETE FROM git_objects WHERE repo_id = $1 AND hash = ANY($2::text[]) RETURNING hash",[e,Array.from(t)]);return n.length}async getRef(e,t){let{rows:n}=await this.pool.query(v.refRead,[e,t]);return At(n[0]??null)}async putRef(e,t,n){n.type==="symbolic"?await this.pool.query(v.refWrite,[e,t,"symbolic",null,n.target]):await this.pool.query(v.refWrite,[e,t,"direct",n.hash,null])}async removeRef(e,t){await this.pool.query(v.refDelete,[e,t])}async listRefs(e,t){let n;return t?{rows:n}=await this.pool.query(v.refList,[e,`${t}%`]):{rows:n}=await this.pool.query(v.refListAll,[e]),n.flatMap(s=>{let a=At(s);return a?[{name:s.name,ref:a}]:[]})}async atomicRefUpdate(e,t){return this.transaction(async n=>t({getRef:async s=>{let{rows:a}=await n(v.refReadForUpdate,[e,s]);return At(a[0]??null)},putRef:async(s,a)=>{a.type==="symbolic"?await n(v.refWrite,[e,s,"symbolic",null,a.target]):await n(v.refWrite,[e,s,"direct",a.hash,null])},removeRef:async s=>{await n(v.refDelete,[e,s])}}))}};function At(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}export{xt as BetterSqlite3Storage,wt as BunSqliteStorage,Pe as MemoryStorage,Ot as PgStorage,G as advertiseRefsWithHooks,$e as applyCasRefUpdates,Re as applyReceivePack,lt as buildRefAdvertisementBytes,dt as buildRefListBytes,Me as buildRefListPktLines,it as buildV2CapabilityAdvertisement,xe as buildV2CapabilityAdvertisementBytes,ee as buildV2FetchResponse,ct as buildV2LsRefsResponse,xr as collectRefs,Nr as composeHooks,Fn as createServer,Ae as handleLsRefs,we as handleUploadPack,Oe as handleV2Fetch,ut as ingestReceivePack,pt as ingestReceivePackFromStream,ot as parseV2CommandRequest,ft as parseV2FetchArgs,We as resolveRefUpdates};
145
+ ON CONFLICT (repo_id, name) DO UPDATE SET type = EXCLUDED.type, hash = EXCLUDED.hash, target = EXCLUDED.target`,refDelete:"DELETE FROM git_refs WHERE repo_id = $1 AND name = $2",refList:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1 AND name LIKE $2",refListAll:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1",refDeleteAll:"DELETE FROM git_refs WHERE repo_id = $1",forkInsert:"INSERT INTO git_forks (repo_id, parent_id) VALUES ($1, $2)",forkGetParent:"SELECT parent_id FROM git_forks WHERE repo_id = $1",forkListChildren:"SELECT repo_id FROM git_forks WHERE parent_id = $1",forkDelete:"DELETE FROM git_forks WHERE repo_id = $1"},kt=class r{constructor(e){this.pool=e}static async create(e){return await e.query(Zn),new r(e)}async transaction(e){let t=await this.pool.connect();try{await t.query("BEGIN");let n=await e((s,a)=>t.query(s,a));return await t.query("COMMIT"),n}catch(n){throw await t.query("ROLLBACK"),n}finally{t.release()}}async hasRepo(e){let{rows:t}=await this.pool.query(v.repoExists,[e]);return t.length>0}async insertRepo(e){await this.pool.query(v.repoInsert,[e])}async deleteRepo(e){await this.pool.query(v.repoDelete,[e]),await this.pool.query(v.objDeleteAll,[e]),await this.pool.query(v.refDeleteAll,[e]),await this.pool.query(v.forkDelete,[e])}async getObject(e,t){let{rows:n}=await this.pool.query(v.objRead,[e,t]),s=n[0];return s?{type:s.type,content:new Uint8Array(s.content)}:null}async putObject(e,t,n,s){await this.pool.query(v.objInsert,[e,t,n,s])}async putObjects(e,t){await this.transaction(async n=>{for(let s of t)await n(v.objInsert,[e,s.hash,s.type,s.content])})}async hasObject(e,t){let{rows:n}=await this.pool.query(v.objExists,[e,t]);return n.length>0}async findObjectsByPrefix(e,t){let{rows:n}=await this.pool.query(v.objPrefix,[e,`${t}%`]);return n.map(s=>s.hash)}async listObjectHashes(e){let{rows:t}=await this.pool.query(v.objListHashes,[e]);return t.map(n=>n.hash)}async deleteObjects(e,t){if(t.length===0)return 0;let{rows:n}=await this.pool.query("DELETE FROM git_objects WHERE repo_id = $1 AND hash = ANY($2::text[]) RETURNING hash",[e,Array.from(t)]);return n.length}async getRef(e,t){let{rows:n}=await this.pool.query(v.refRead,[e,t]);return Et(n[0]??null)}async putRef(e,t,n){n.type==="symbolic"?await this.pool.query(v.refWrite,[e,t,"symbolic",null,n.target]):await this.pool.query(v.refWrite,[e,t,"direct",n.hash,null])}async removeRef(e,t){await this.pool.query(v.refDelete,[e,t])}async listRefs(e,t){let n;return t?{rows:n}=await this.pool.query(v.refList,[e,`${t}%`]):{rows:n}=await this.pool.query(v.refListAll,[e]),n.flatMap(s=>{let a=Et(s);return a?[{name:s.name,ref:a}]:[]})}async atomicRefUpdate(e,t){return this.transaction(async n=>t({getRef:async s=>{let{rows:a}=await n(v.refReadForUpdate,[e,s]);return Et(a[0]??null)},putRef:async(s,a)=>{a.type==="symbolic"?await n(v.refWrite,[e,s,"symbolic",null,a.target]):await n(v.refWrite,[e,s,"direct",a.hash,null])},removeRef:async s=>{await n(v.refDelete,[e,s])}}))}async forkRepo(e,t){await this.pool.query(v.forkInsert,[t,e])}async getForkParent(e){let{rows:t}=await this.pool.query(v.forkGetParent,[e]);return t[0]?.parent_id??null}async listForks(e){let{rows:t}=await this.pool.query(v.forkListChildren,[e]);return t.map(n=>n.repo_id)}};function Et(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}export{xt as BetterSqlite3Storage,wt as BunSqliteStorage,Pe as MemoryStorage,kt as PgStorage,G as advertiseRefsWithHooks,Be as applyCasRefUpdates,Re as applyReceivePack,lt as buildRefAdvertisementBytes,pt as buildRefListBytes,Me as buildRefListPktLines,it as buildV2CapabilityAdvertisement,xe as buildV2CapabilityAdvertisementBytes,ee as buildV2FetchResponse,ct as buildV2LsRefsResponse,xr as collectRefs,_r as composeHooks,Wn as createServer,Ee as handleLsRefs,we as handleUploadPack,ke as handleV2Fetch,dt as ingestReceivePack,ut as ingestReceivePackFromStream,ot as parseV2CommandRequest,ft as parseV2FetchArgs,$e as resolveRefUpdates};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "just-git",
3
- "version": "1.4.2",
3
+ "version": "1.5.0",
4
4
  "description": "Pure TypeScript git implementation: virtual filesystem client and embeddable server.",
5
5
  "keywords": [
6
6
  "agent",