just-git 1.2.7 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -15
- package/dist/index.d.ts +8 -1
- package/dist/index.js +303 -303
- package/dist/repo/index.js +14 -14
- package/dist/server/index.js +31 -31
- package/package.json +3 -3
package/dist/server/index.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
var ie=(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 Y(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var me="0000000000000000000000000000000000000000",Ze=(()=>{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 ce(r){let e="";for(let t=0;t<20;t++)e+=Ze[r[t]];return e}function Je(r,e){let t="";for(let s=0;s<20;s++)t+=Ze[r[e+s]];return t}function fe(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 Gt=new TextEncoder;function xe(r){return typeof r=="string"?Gt.encode(r):r}function Ft(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(xe(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=ie(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(s){return e.update(xe(s)),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(xe(t)),e},async hex(){let t=0;for(let i of r)t+=i.byteLength;let s=new Uint8Array(t),n=0;for(let i of r)s.set(i,n),n+=i.byteLength;let o=await crypto.subtle.digest("SHA-1",s);return ce(new Uint8Array(o))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var Qe=Ft(),le=Qe;async function D(r){return Qe().update(r).hex()}var qt=new Set(["tree","commit","tag"]),N=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(!qt.has(t.type))return;let s=t.content.byteLength;if(!(s>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+s>this.maxBytes&&this.map.size>0;){let n=this.map.keys().next().value;this.currentBytes-=this.map.get(n).content.byteLength,this.map.delete(n)}this.map.set(e,t),this.currentBytes+=s}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var A=Uint8Array,F=Uint16Array,zt=Int32Array,et=new A([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]),tt=new A([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]),Xt=new A([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),rt=(r,e)=>{let t=new F(31);for(let n=0;n<31;++n)t[n]=e+=1<<r[n-1];let s=new zt(t[30]);for(let n=1;n<30;++n)for(let o=t[n];o<t[n+1];++o)s[o]=o-t[n]<<5|n;return{b:t,r:s}},{b:nt}=rt(et,2);nt[28]=258;var{b:Kt}=rt(tt,0),Re=new F(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,Re[r]=((e&65280)>>8|(e&255)<<8)>>1}var V=(r,e,t)=>{let s=r.length,n=0,o=new F(e);for(;n<s;++n)r[n]&&++o[r[n]-1];let i=new F(e);for(n=1;n<e;++n)i[n]=i[n-1]+o[n-1]<<1;let a;if(t){a=new F(1<<e);let f=15-e;for(n=0;n<s;++n)if(r[n]){let c=n<<4|r[n],l=e-r[n],d=i[r[n]-1]++<<l;for(let p=d|(1<<l)-1;d<=p;++d)a[Re[d]>>f]=c}}else for(a=new F(s),n=0;n<s;++n)r[n]&&(a[n]=Re[i[r[n]-1]++]>>15-r[n]);return a},Z=new A(288);for(let r=0;r<144;++r)Z[r]=8;for(let r=144;r<256;++r)Z[r]=9;for(let r=256;r<280;++r)Z[r]=7;for(let r=280;r<288;++r)Z[r]=8;var st=new A(32);for(let r=0;r<32;++r)st[r]=5;var Yt=V(Z,9,1),Vt=V(st,5,1),ge=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},v=(r,e,t)=>{let s=e/8|0;return(r[s]|r[s+1]<<8)>>(e&7)&t},we=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},ot=r=>(r+7)/8|0,Zt=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new A(r.subarray(e,t))),T=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},at=(r,e,t,s)=>{let n=r.length,o=s?s.length:0;if(!n||e.f&&!e.l)return t||new A(0);let i=!t,a=i||e.i!=2,f=e.i;i&&(t=new A(n*3));let c=b=>{let w=t.length;if(b>w){let R=new A(Math.max(w*2,b));R.set(t),t=R}},l=e.f||0,d=e.p||0,p=e.b||0,u=e.l,h=e.d,y=e.m,m=e.n,O=n*8;do{if(!u){l=v(r,d,1);let x=v(r,d+1,3);if(d+=3,x)if(x==1)u=Yt,h=Vt,y=9,m=5;else if(x==2){let g=v(r,d,31)+257,P=v(r,d+10,15)+4,I=g+v(r,d+5,31)+1;d+=14;let C=new A(I),L=new A(19);for(let H=0;H<P;++H)L[Xt[H]]=v(r,d+H*3,7);d+=P*3;let X=ge(L),S=(1<<X)-1,G=V(L,X,1);for(let H=0;H<I;){let Ye=G[v(r,d,S)];d+=Ye&15;let K=Ye>>4;if(K<16)C[H++]=K;else{let Ve=0,ae=0;for(K==16?(ae=3+v(r,d,3),d+=2,Ve=C[H-1]):K==17?(ae=3+v(r,d,7),d+=3):K==18&&(ae=11+v(r,d,127),d+=7);ae--;)C[H++]=Ve}}let Xe=C.subarray(0,g),Ke=C.subarray(g);y=ge(Xe),m=ge(Ke),u=V(Xe,y,1),h=V(Ke,m,1)}else T(1);else{let g=ot(d)+4,P=r[g-4]|r[g-3]<<8,I=g+P;if(I>n){f&&T(0);break}a&&c(p+P),t.set(r.subarray(g,I),p),e.b=p+=P,e.p=d=I*8,e.f=l;continue}if(d>O){f&&T(0);break}}a&&c(p+131072);let b=(1<<y)-1,w=(1<<m)-1,R=d;for(;;R=d){let x=u[we(r,d)&b],g=x>>4;if(d+=x&15,d>O){f&&T(0);break}if(x||T(2),g<256)t[p++]=g;else if(g==256){R=d,u=null;break}else{let P=g-254;if(g>264){let S=g-257,G=et[S];P=v(r,d,(1<<G)-1)+nt[S],d+=G}let I=h[we(r,d)&w],C=I>>4;I||T(3),d+=I&15;let L=Kt[C];if(C>3){let S=tt[C];L+=we(r,d)&(1<<S)-1,d+=S}if(d>O){f&&T(0);break}a&&c(p+131072);let X=p+P;if(p<L){let S=o-L,G=Math.min(L,X);for(S+p<0&&T(3);p<G;++p)t[p]=s[S+p]}for(;p<X;++p)t[p]=t[p-L]}}e.l=u,e.p=R,e.b=p,e.f=l,u&&(l=1,e.m=y,e.d=h,e.n=m)}while(!l);return p!=t.length&&i?Zt(t,0,p):t.subarray(0,p)},it=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&T(0,"invalid zlib data"),r[1]&32&&T(0,"zlib dictionaries are not supported"),2);function ct(r){let e=it(r);return at(r.subarray(e,-4),{i:2})}function Oe(r){let e=it(r),t={i:2},s=at(r.subarray(e),t),n=ot(t.p);return{result:s,bytesConsumed:e+n+4}}async function Jt(){let r;if(!(typeof document<"u"))try{r=ie(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let s=null;try{let n=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});n?.engine&&typeof n.engine.bytesWritten=="number"&&(s=o=>{let i=r.inflateSync(o,{info:!0});return{result:new Uint8Array(i.buffer),bytesConsumed:i.engine.bytesWritten}})}catch{}return{deflateSync:n=>new Uint8Array(r.deflateSync(n)),inflateSync:n=>new Uint8Array(r.inflateSync(n)),inflateWithConsumed:s??Oe}}let t;return typeof globalThis.CompressionStream=="function"?t=async s=>{let n=new CompressionStream("deflate"),o=n.writable.getWriter();return o.write(s),o.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:ct,inflateWithConsumed:Oe}}var Qt=null;function ft(){return Qt??=Jt()}async function de(r){return await(await ft()).deflateSync(r)}async function lt(r,e){let t=await ft(),{result:s,bytesConsumed:n}=t.inflateWithConsumed(r);if(s.byteLength!==e)throw new Error(`Inflate size mismatch: got ${s.byteLength}, expected ${e}`);return{result:s,bytesConsumed:n}}var pe=1346454347,Ee=2,ut=1,ht=2,yt=3,bt=4,J=6,Ie=7,er={[ut]:"commit",[ht]:"tree",[yt]:"blob",[bt]:"tag"},mt={commit:ut,tree:ht,blob:yt,tag:bt};async function B(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=t.getUint32(0);if(s!==pe)throw new Error(`Invalid pack signature: 0x${s.toString(16)} (expected 0x${pe.toString(16)})`);let n=t.getUint32(4);if(n!==Ee)throw new Error(`Unsupported pack version: ${n}`);let o=t.getUint32(8),i=[],a=12;for(let c=0;c<o;c++){let l=await tr(r,a);i.push(l),a=l.nextOffset}return(await rr(i,e)).map((c,l)=>({...c,offset:i[l].headerOffset,nextOffset:i[l].nextOffset}))}async function tr(r,e){let t=e,s=r[e++],n=s>>4&7,o=s&15,i=4;for(;s&128;)s=r[e++],o|=(s&127)<<i,i+=7;let a,f;if(n===J){let d=r[e++];for(a=d&127;d&128;)a+=1,d=r[e++],a=(a<<7)+(d&127);a=t-a}else n===Ie&&(f=Je(r,e),e+=20);let{result:c,bytesConsumed:l}=await lt(r.subarray(e),o);return{headerOffset:t,typeNum:n,inflated:c,baseOffset:a,baseHash:f,nextOffset:e+l}}async function rr(r,e){let t=new Map;for(let o=0;o<r.length;o++)t.set(r[o].headerOffset,o);let s=new Array(r.length).fill(null);async function n(o){let i=s[o];if(i)return i;let a=r[o];if(a.typeNum!==J&&a.typeNum!==Ie){let p=er[a.typeNum];if(!p)throw new Error(`Unknown object type: ${a.typeNum}`);let u={type:p,content:a.inflated,hash:await je(p,a.inflated)};return s[o]=u,u}if(a.typeNum===J){let p=t.get(a.baseOffset);if(p===void 0)throw new Error(`OFS_DELTA base not found at offset ${a.baseOffset}`);let u=await n(p),h=dt(u.content,a.inflated),y={type:u.type,content:h,hash:await je(u.type,h)};return s[o]=y,y}let f=await nr(r,s,a.baseHash,n),c;if(f!==void 0)c=await n(f);else if(e){let p=await e(a.baseHash);p&&(c=p)}if(!c)throw new Error(`REF_DELTA base not found for hash ${a.baseHash}`);let l=dt(c.content,a.inflated),d={type:c.type,content:l,hash:await je(c.type,l)};return s[o]=d,d}for(let o=0;o<r.length;o++)await n(o);return s}async function nr(r,e,t,s){for(let n=0;n<e.length;n++)if(e[n]?.hash===t)return n;for(let n=0;n<r.length;n++){let o=r[n];if(o.typeNum!==J&&o.typeNum!==Ie&&(await s(n)).hash===t)return n}}function dt(r,e){let t=0,{value:s,newPos:n}=pt(e,t);if(t=n,s!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${s}, got ${r.byteLength}`);let{value:o,newPos:i}=pt(e,t);t=i;let a=new Uint8Array(o),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),a.set(r.subarray(l,l+d),f),f+=d}else if(c>0)a.set(e.subarray(t,t+c),f),f+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(f!==o)throw new Error(`Delta produced ${f} bytes, expected ${o}`);return a}async function ue(r){let e=[],t=new Map,s=new Uint8Array(12),n=new DataView(s.buffer);n.setUint32(0,pe),n.setUint32(4,Ee),n.setUint32(8,r.length),e.push(s);let o=12,i=[];for(let a of r){let f=o;t.set(a.hash,o);let c=a.delta&&a.deltaBaseHash?t.get(a.deltaBaseHash):void 0;if(a.delta&&c!==void 0){let l=Pe(J,a.delta.byteLength),d=or(o-c),p=await de(a.delta);e.push(l,d,p),o+=l.byteLength+d.byteLength+p.byteLength}else{let l=mt[a.type],d=Pe(l,a.content.byteLength),p=await de(a.content);e.push(d,p),o+=d.byteLength+p.byteLength}i.push({hash:a.hash,offset:f,nextOffset:o})}return{data:await sr(e),entries:i}}async function*xt(r,e){let t=le(),s=new Uint8Array(12),n=new DataView(s.buffer);n.setUint32(0,pe),n.setUint32(4,Ee),n.setUint32(8,r),t.update(s),yield s;for await(let o of e){let i=mt[o.type],a=Pe(i,o.content.byteLength),f=await de(o.content);t.update(a),t.update(f),yield ar(a,f)}yield fe(await t.hex())}async function sr(r){let e=0;for(let i of r)e+=i.byteLength;e+=20;let t=new Uint8Array(e),s=0;for(let i of r)t.set(i,s),s+=i.byteLength;let n=le();n.update(t.subarray(0,s));let o=await n.hex();return t.set(fe(o),s),t}function or(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 Pe(r,e){let t=[],s=r<<4|e&15;for(e>>=4;e>0;)t.push(s|128),s=e&127,e>>=7;return t.push(s),new Uint8Array(t)}function pt(r,e){let t=0,s=0,n;do n=r[e++],t|=(n&127)<<s,s+=7;while(n&128);return{value:t,newPos:e}}function ar(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var ir=new TextEncoder;async function je(r,e){let t=ir.encode(`${r} ${e.byteLength}\0`),s=le();return s.update(t),s.update(e),s.hex()}var cr=new TextEncoder,rn=new TextDecoder;function _(r,e){let t=cr.encode(`${r} ${e.byteLength}\0`),s=new Uint8Array(t.byteLength+e.byteLength);return s.set(t),s.set(e,t.byteLength),s}function Q(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let s=r.slice(0,e).trimEnd(),n=r.slice(e+1,t),o=r.slice(t+2),[i="0",a="+0000"]=o.split(" "),f=parseInt(i,10);return{name:s,email:n,timestamp:f,timezone:a}}var an=new TextEncoder,lr=new TextDecoder;function ee(r){let e=lr.decode(r),t=e.indexOf(`
|
|
1
|
+
var ce=(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 Y(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var me="0000000000000000000000000000000000000000",Qe=(()=>{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 fe(r){let e="";for(let t=0;t<20;t++)e+=Qe[r[t]];return e}function ge(r,e){let t="";for(let s=0;s<20;s++)t+=Qe[r[e+s]];return t}function le(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 zt=new Set(["tree","commit","tag"]),H=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(!zt.has(t.type))return;let s=t.content.byteLength;if(!(s>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+s>this.maxBytes&&this.map.size>0;){let n=this.map.keys().next().value;this.currentBytes-=this.map.get(n).content.byteLength,this.map.delete(n)}this.map.set(e,t),this.currentBytes+=s}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var Xt=new TextEncoder;function xe(r){return typeof r=="string"?Xt.encode(r):r}function Kt(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(xe(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=ce(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(s){return e.update(xe(s)),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(xe(t)),e},async hex(){let t=0;for(let a of r)t+=a.byteLength;let s=new Uint8Array(t),n=0;for(let a of r)s.set(a,n),n+=a.byteLength;let o=await crypto.subtle.digest("SHA-1",s);return fe(new Uint8Array(o))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var et=Kt(),V=et;async function N(r){return et().update(r).hex()}var k=Uint8Array,F=Uint16Array,Yt=Int32Array,tt=new k([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]),rt=new k([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]),Vt=new k([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),nt=(r,e)=>{let t=new F(31);for(let n=0;n<31;++n)t[n]=e+=1<<r[n-1];let s=new Yt(t[30]);for(let n=1;n<30;++n)for(let o=t[n];o<t[n+1];++o)s[o]=o-t[n]<<5|n;return{b:t,r:s}},{b:st}=nt(tt,2);st[28]=258;var{b:Zt}=nt(rt,0),Oe=new F(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,Oe[r]=((e&65280)>>8|(e&255)<<8)>>1}var Z=(r,e,t)=>{let s=r.length,n=0,o=new F(e);for(;n<s;++n)r[n]&&++o[r[n]-1];let a=new F(e);for(n=1;n<e;++n)a[n]=a[n-1]+o[n-1]<<1;let i;if(t){i=new F(1<<e);let f=15-e;for(n=0;n<s;++n)if(r[n]){let c=n<<4|r[n],l=e-r[n],d=a[r[n]-1]++<<l;for(let p=d|(1<<l)-1;d<=p;++d)i[Oe[d]>>f]=c}}else for(i=new F(s),n=0;n<s;++n)r[n]&&(i[n]=Oe[a[r[n]-1]++]>>15-r[n]);return i},J=new k(288);for(let r=0;r<144;++r)J[r]=8;for(let r=144;r<256;++r)J[r]=9;for(let r=256;r<280;++r)J[r]=7;for(let r=280;r<288;++r)J[r]=8;var ot=new k(32);for(let r=0;r<32;++r)ot[r]=5;var Jt=Z(J,9,1),Qt=Z(ot,5,1),we=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},I=(r,e,t)=>{let s=e/8|0;return(r[s]|r[s+1]<<8)>>(e&7)&t},Re=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},at=r=>(r+7)/8|0,er=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new k(r.subarray(e,t))),T=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},it=(r,e,t,s)=>{let n=r.length,o=s?s.length:0;if(!n||e.f&&!e.l)return t||new k(0);let a=!t,i=a||e.i!=2,f=e.i;a&&(t=new k(n*3));let c=b=>{let x=t.length;if(b>x){let R=new k(Math.max(x*2,b));R.set(t),t=R}},l=e.f||0,d=e.p||0,p=e.b||0,u=e.l,h=e.d,y=e.m,m=e.n,O=n*8;do{if(!u){l=I(r,d,1);let g=I(r,d+1,3);if(d+=3,g)if(g==1)u=Jt,h=Qt,y=9,m=5;else if(g==2){let w=I(r,d,31)+257,j=I(r,d+10,15)+4,v=w+I(r,d+5,31)+1;d+=14;let C=new k(v),L=new k(19);for(let D=0;D<j;++D)L[Vt[D]]=I(r,d+D*3,7);d+=j*3;let X=we(L),A=(1<<X)-1,G=Z(L,X,1);for(let D=0;D<v;){let Ze=G[I(r,d,A)];d+=Ze&15;let K=Ze>>4;if(K<16)C[D++]=K;else{let Je=0,ie=0;for(K==16?(ie=3+I(r,d,3),d+=2,Je=C[D-1]):K==17?(ie=3+I(r,d,7),d+=3):K==18&&(ie=11+I(r,d,127),d+=7);ie--;)C[D++]=Je}}let Ye=C.subarray(0,w),Ve=C.subarray(w);y=we(Ye),m=we(Ve),u=Z(Ye,y,1),h=Z(Ve,m,1)}else T(1);else{let w=at(d)+4,j=r[w-4]|r[w-3]<<8,v=w+j;if(v>n){f&&T(0);break}i&&c(p+j),t.set(r.subarray(w,v),p),e.b=p+=j,e.p=d=v*8,e.f=l;continue}if(d>O){f&&T(0);break}}i&&c(p+131072);let b=(1<<y)-1,x=(1<<m)-1,R=d;for(;;R=d){let g=u[Re(r,d)&b],w=g>>4;if(d+=g&15,d>O){f&&T(0);break}if(g||T(2),w<256)t[p++]=w;else if(w==256){R=d,u=null;break}else{let j=w-254;if(w>264){let A=w-257,G=tt[A];j=I(r,d,(1<<G)-1)+st[A],d+=G}let v=h[Re(r,d)&x],C=v>>4;v||T(3),d+=v&15;let L=Zt[C];if(C>3){let A=rt[C];L+=Re(r,d)&(1<<A)-1,d+=A}if(d>O){f&&T(0);break}i&&c(p+131072);let X=p+j;if(p<L){let A=o-L,G=Math.min(L,X);for(A+p<0&&T(3);p<G;++p)t[p]=s[A+p]}for(;p<X;++p)t[p]=t[p-L]}}e.l=u,e.p=R,e.b=p,e.f=l,u&&(l=1,e.m=y,e.d=h,e.n=m)}while(!l);return p!=t.length&&a?er(t,0,p):t.subarray(0,p)},ct=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&T(0,"invalid zlib data"),r[1]&32&&T(0,"zlib dictionaries are not supported"),2);function ft(r){let e=ct(r);return it(r.subarray(e,-4),{i:2})}function Pe(r){let e=ct(r),t={i:2},s=it(r.subarray(e),t),n=at(t.p);return{result:s,bytesConsumed:e+n+4}}async function tr(){let r;if(!(typeof document<"u"))try{r=ce(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let s=null;try{let n=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});n?.engine&&typeof n.engine.bytesWritten=="number"&&(s=o=>{let a=r.inflateSync(o,{info:!0});return{result:new Uint8Array(a.buffer),bytesConsumed:a.engine.bytesWritten}})}catch{}return{deflateSync:n=>new Uint8Array(r.deflateSync(n)),inflateSync:n=>new Uint8Array(r.inflateSync(n)),inflateWithConsumed:s??Pe}}let t;return typeof globalThis.CompressionStream=="function"?t=async s=>{let n=new CompressionStream("deflate"),o=n.writable.getWriter();return o.write(s),o.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:ft,inflateWithConsumed:Pe}}var rr=null;function lt(){return rr??=tr()}async function de(r){return await(await lt()).deflateSync(r)}async function dt(r,e){let t=await lt(),{result:s,bytesConsumed:n}=t.inflateWithConsumed(r);if(s.byteLength!==e)throw new Error(`Inflate size mismatch: got ${s.byteLength}, expected ${e}`);return{result:s,bytesConsumed:n}}var pe=1346454347,ve=2,yt=1,bt=2,mt=3,gt=4,Q=6,Ie=7,nr={[yt]:"commit",[bt]:"tree",[mt]:"blob",[gt]:"tag"},xt={commit:yt,tree:bt,blob:mt,tag:gt};async function B(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=t.getUint32(0);if(s!==pe)throw new Error(`Invalid pack signature: 0x${s.toString(16)} (expected 0x${pe.toString(16)})`);let n=t.getUint32(4);if(n!==ve)throw new Error(`Unsupported pack version: ${n}`);if(r.byteLength>=32){let c=ge(r,r.byteLength-20),l=V();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 o=t.getUint32(8),a=[],i=12;for(let c=0;c<o;c++){let l=await sr(r,i);a.push(l),i=l.nextOffset}return(await or(a,e)).map((c,l)=>({...c,offset:a[l].headerOffset,nextOffset:a[l].nextOffset}))}async function sr(r,e){let t=e,s=r[e++],n=s>>4&7,o=s&15,a=4;for(;s&128;)s=r[e++],o|=(s&127)<<a,a+=7;let i,f;if(n===Q){let d=r[e++];for(i=d&127;d&128;)i+=1,d=r[e++],i=(i<<7)+(d&127);i=t-i}else n===Ie&&(f=ge(r,e),e+=20);let{result:c,bytesConsumed:l}=await dt(r.subarray(e),o);return{headerOffset:t,typeNum:n,inflated:c,baseOffset:i,baseHash:f,nextOffset:e+l}}var pt=50;async function or(r,e){let t=new Map;for(let o=0;o<r.length;o++)t.set(r[o].headerOffset,o);let s=new Array(r.length).fill(null);async function n(o,a=0){if(a>pt)throw new Error(`delta chain depth ${a} exceeds limit of ${pt}`);let i=s[o];if(i)return i;let f=r[o];if(f.typeNum!==Q&&f.typeNum!==Ie){let u=nr[f.typeNum];if(!u)throw new Error(`Unknown object type: ${f.typeNum}`);let h={type:u,content:f.inflated,hash:await je(u,f.inflated)};return s[o]=h,h}if(f.typeNum===Q){let u=t.get(f.baseOffset);if(u===void 0)throw new Error(`OFS_DELTA base not found at offset ${f.baseOffset}`);let h=await n(u,a+1),y=ut(h.content,f.inflated),m={type:h.type,content:y,hash:await je(h.type,y)};return s[o]=m,m}let c=await ar(r,s,f.baseHash,n),l;if(c!==void 0)l=await n(c,a+1);else if(e){let u=await e(f.baseHash);u&&(l=u)}if(!l)throw new Error(`REF_DELTA base not found for hash ${f.baseHash}`);let d=ut(l.content,f.inflated),p={type:l.type,content:d,hash:await je(l.type,d)};return s[o]=p,p}for(let o=0;o<r.length;o++)await n(o);return s}async function ar(r,e,t,s){for(let n=0;n<e.length;n++)if(e[n]?.hash===t)return n;for(let n=0;n<r.length;n++){let o=r[n];if(o.typeNum!==Q&&o.typeNum!==Ie&&(await s(n)).hash===t)return n}}function ut(r,e){let t=0,{value:s,newPos:n}=ht(e,t);if(t=n,s!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${s}, got ${r.byteLength}`);let{value:o,newPos:a}=ht(e,t);t=a;let i=new Uint8Array(o),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!==o)throw new Error(`Delta produced ${f} bytes, expected ${o}`);return i}async function ue(r){let e=[],t=new Map,s=new Uint8Array(12),n=new DataView(s.buffer);n.setUint32(0,pe),n.setUint32(4,ve),n.setUint32(8,r.length),e.push(s);let o=12,a=[];for(let i of r){let f=o;t.set(i.hash,o);let c=i.delta&&i.deltaBaseHash?t.get(i.deltaBaseHash):void 0;if(i.delta&&c!==void 0){let l=Ee(Q,i.delta.byteLength),d=cr(o-c),p=await de(i.delta);e.push(l,d,p),o+=l.byteLength+d.byteLength+p.byteLength}else{let l=xt[i.type],d=Ee(l,i.content.byteLength),p=await de(i.content);e.push(d,p),o+=d.byteLength+p.byteLength}a.push({hash:i.hash,offset:f,nextOffset:o})}return{data:await ir(e),entries:a}}async function*wt(r,e){let t=V(),s=new Uint8Array(12),n=new DataView(s.buffer);n.setUint32(0,pe),n.setUint32(4,ve),n.setUint32(8,r),t.update(s),yield s;for await(let o of e){let a=xt[o.type],i=Ee(a,o.content.byteLength),f=await de(o.content);t.update(i),t.update(f),yield fr(i,f)}yield le(await t.hex())}async function ir(r){let e=0;for(let a of r)e+=a.byteLength;e+=20;let t=new Uint8Array(e),s=0;for(let a of r)t.set(a,s),s+=a.byteLength;let n=V();n.update(t.subarray(0,s));let o=await n.hex();return t.set(le(o),s),t}function cr(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 Ee(r,e){let t=[],s=r<<4|e&15;for(e>>=4;e>0;)t.push(s|128),s=e&127,e>>=7;return t.push(s),new Uint8Array(t)}function ht(r,e){let t=0,s=0,n;do n=r[e++],t|=(n&127)<<s,s+=7;while(n&128);return{value:t,newPos:e}}function fr(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var lr=new TextEncoder;async function je(r,e){let t=lr.encode(`${r} ${e.byteLength}\0`),s=V();return s.update(t),s.update(e),s.hex()}var dr=new TextEncoder,dn=new TextDecoder;function _(r,e){let t=dr.encode(`${r} ${e.byteLength}\0`),s=new Uint8Array(t.byteLength+e.byteLength);return s.set(t),s.set(e,t.byteLength),s}function ee(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let s=r.slice(0,e).trimEnd(),n=r.slice(e+1,t),o=r.slice(t+2),[a="0",i="+0000"]=o.split(" "),f=parseInt(a,10);return{name:s,email:n,timestamp:f,timezone:i}}var yn=new TextEncoder,ur=new TextDecoder;function te(r){let e=ur.decode(r),t=e.indexOf(`
|
|
2
2
|
|
|
3
|
-
`),s=t===-1?e:e.slice(0,t),n=t===-1?"":e.slice(t+2),o="",
|
|
4
|
-
`)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),p=c.slice(l+1);switch(d){case"tree":o=p;break;case"parent":
|
|
3
|
+
`),s=t===-1?e:e.slice(0,t),n=t===-1?"":e.slice(t+2),o="",a=[],i,f;for(let c of s.split(`
|
|
4
|
+
`)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),p=c.slice(l+1);switch(d){case"tree":o=p;break;case"parent":a.push(p);break;case"author":i=ee(p);break;case"committer":f=ee(p);break}}if(!o)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:o,parents:a,author:i,committer:f,message:n}}var gn=new TextEncoder,hr=new TextDecoder;function M(r){let e=hr.decode(r),t=e.indexOf(`
|
|
5
5
|
|
|
6
|
-
`),s=t===-1?e:e.slice(0,t),n=t===-1?"":e.slice(t+2),o="",
|
|
7
|
-
`)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),p=c.slice(l+1);switch(d){case"object":o=p;break;case"type":i=p;break;case"tag":a=p;break;case"tagger":f=Q(p);break}}if(!o)throw new Error("Tag missing object field");if(!a)throw new Error("Tag missing tag name field");if(!f)throw new Error("Tag missing tagger field");return{type:"tag",object:o,objectType:i,name:a,tagger:f,message:n}}async function te(r,e){return r.objectStore.read(e)}async function re(r,e){return r.objectStore.exists(e)}var un=new TextDecoder;async function q(r,e){let t=await te(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return ee(t.content)}function W(r){return typeof r=="string"?{type:"direct",hash:r}:r}var mn=new TextEncoder,gt=new TextDecoder;function ve(r){let e=[],t=0;for(;t<r.byteLength;){let s=r.indexOf(32,t);if(s===-1)break;let n=gt.decode(r.subarray(t,s)),o=r.indexOf(0,s+1);if(o===-1)break;let i=gt.decode(r.subarray(s+1,o)),a=r.subarray(o+1,o+21),f=ce(a),c=n.padStart(6,"0");e.push({mode:c,name:i,hash:f}),t=o+21}return{type:"tree",entries:e}}async function wt(r,e,t){if(e===t)return!0;let s=new Set,n=[t],o=0;for(;o<n.length;){let i=n[o++];if(i===e)return!0;if(s.has(i))continue;s.add(i);let a;try{a=await q(r,i)}catch{continue}for(let f of a.parents)s.has(f)||n.push(f)}return!1}var ye=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]),pr=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]),he=64,ur=4,Ae=4096,Rt=65536,hr=127;function yr(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let s=t>>>2;s<16&&(s=16),s=mr(s);let n=s-1,o=new Uint32Array(s),i=[],a=-1>>>0;for(let p=t*16-16;p>=0;p-=16){let u=0;for(let h=1;h<=16;h++)u=(u<<8|r[p+h])^ye[u>>>23];if(u=u>>>0,u===a)i[i.length-1].ptr=p+16;else{a=u;let h=u&n;i.push({ptr:p+16,val:u}),o[h]++}}let f=new Map;for(let p of i){let u=p.val&n,h=f.get(u);h||(h=[],f.set(u,h)),h.push(p)}for(let[p,u]of f){if(u.length<=he)continue;let h=[],y=u.length/he;for(let m=0;m<he;m++)h.push(u[Math.floor(m*y)]);f.set(p,h),o[p]=he}let c=new Uint32Array(s+1),l=[],d=0;for(let p=0;p<s;p++){c[p]=d;let u=f.get(p);if(u){for(let h of u)l.push(h);d+=u.length}}return c[s]=d,{src:r,hashMask:n,buckets:c,entries:l}}function br(r,e,t){if(!r||e.byteLength===0)return null;let s=r.src.byteLength,n=e.byteLength,o=r.src,i=new Uint8Array(Math.max(n,1024)),a=0;function f(y){for(;a+y>i.length;){let m=new Uint8Array(i.length*2);m.set(i),i=m}}a=jt(i,a,s),a=jt(i,a,n),f(18),a++;let c=0,l=0,d=Math.min(16,n);for(let y=0;y<d;y++)i[a++]=e[y],c=(c<<8|e[y])^ye[c>>>23],l++;c=c>>>0;let p=d,u=0,h=0;for(;p<n;){if(h<Ae){c^=pr[e[p-16]],c=((c<<8|e[p])^ye[c>>>23])>>>0;let y=c&r.hashMask,m=r.buckets[y],O=r.buckets[y+1];for(let b=m;b<O;b++){let w=r.entries[b];if(w.val!==c)continue;let R=w.ptr,x=o.byteLength-R,g=n-p;if(x>g&&(x=g),x<=h)break;let P=0;for(;P<x&&o[R+P]===e[p+P];)P++;if(P>h&&(h=P,u=R,h>=Ae))break}}if(h<ur)f(2),l===0&&a++,i[a++]=e[p++],l++,l===hr&&(i[a-l-1]=l,l=0),h=0;else{if(l>0){for(;u>0&&o[u-1]===e[p-1];)if(h++,u--,p--,a--,!(--l>0)){a--,l=-1;break}l>0&&(i[a-l-1]=l),l=0}let y=h>Rt?h-Rt:0;h-=y,f(8);let m=a++,O=128;if(u&255&&(i[a++]=u&255,O|=1),u&65280&&(i[a++]=u>>>8&255,O|=2),u&16711680&&(i[a++]=u>>>16&255,O|=4),u&4278190080&&(i[a++]=u>>>24&255,O|=8),h&255&&(i[a++]=h&255,O|=16),h&65280&&(i[a++]=h>>>8&255,O|=32),i[m]=O,p+=h,u+=h,h=y,u>4294967295&&(h=0),h<Ae){c=0;for(let b=-16;b<0;b++)c=(c<<8|e[p+b])^ye[c>>>23];c=c>>>0}}if(t&&a>t)return null}return l>0&&(i[a-l-1]=l),t&&a>t?null:i.subarray(0,a)}var Ot={blob:0,tree:1,commit:2,tag:3};function Pt(r,e){let t=e?.window??10,s=e?.depth??50,n=r.slice().sort((c,l)=>{let d=Ot[c.type]??99,p=Ot[l.type]??99;return d!==p?d-p:l.content.byteLength-c.content.byteLength}),o=new Map,i=[],a=[],f=[];for(let c=0;c<n.length;c++){let l=n[c],d={hash:l.hash,type:l.type,content:l.content,depth:0},p=null,u=null,h=Math.max(0,c-t);for(let y=c-1;y>=h;y--){let m=n[y];if(m.type!==l.type||(o.get(m.hash)?.depth??0)>=s||l.content.byteLength<m.content.byteLength>>>5)continue;let w=a[y-h]??null;if(!w)continue;let R=p?p.byteLength:l.content.byteLength/2|0;if(R<16)continue;let x=br(w,l.content,R);x&&(!p||x.byteLength<p.byteLength)&&(p=x,u=m.hash)}if(p&&u){d.delta=p,d.deltaBase=u;let y=o.get(u);d.depth=(y?.depth??0)+1}o.set(l.hash,d),i.push(d),a.length>=t&&(a.shift(),f.shift()),a.push(yr(l.content)),f.push(l.hash)}return i}function mr(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 jt(r,e,t){let s=t;do{let n=s&127;s>>>=7,s>0&&(n|=128),r[e++]=n}while(s>0);return e}var xr=2147483647;async function Et(r,e,t,s){if(t>=xr)return{shallow:[],unshallow:[...s]};let n=new Map,o=[];for(let c of e)!n.has(c)&&await re(r,c)&&(n.set(c,1),o.push({hash:c,level:1}));let i=new Set,a=0;for(;a<o.length;){let{hash:c,level:l}=o[a++];if(l>=t){i.add(c);continue}let d;try{d=await q(r,c)}catch{continue}for(let p of d.parents)!n.has(p)&&await re(r,p)&&(n.set(p,l+1),o.push({hash:p,level:l+1}))}let f=[];for(let c of s){let l=n.get(c);l!==void 0&&l<t&&f.push(c)}return{shallow:[...i],unshallow:f}}async function ke(r,e,t,s,n){let o=n??s,i=new Set;for(let l of t)await ne(r,l,i,o);let a=[...e];if(n&&s)for(let l of n)try{let d=await q(r,l);for(let p of d.parents)i.has(p)||a.push(p)}catch{}let f=[],c=new Set;for(let l of a)await se(r,l,i,c,f,s);return{count:f.length,objects:gr(f)}}async function It(r,e,t,s,n){let{count:o,objects:i}=await ke(r,e,t,s,n);return{count:o,objects:wr(r,i)}}async function*gr(r){for(let e of r)yield e}async function*wr(r,e){for await(let t of e){let s=await te(r,t.hash);yield{hash:t.hash,type:t.type,content:s.content}}}async function vt(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function ne(r,e,t,s){if(t.has(e)||(t.add(e),!await re(r,e)))return;let n=await te(r,e);switch(n.type){case"commit":{let o=ee(n.content);if(await ne(r,o.tree,t,s),!s?.has(e))for(let i of o.parents)await ne(r,i,t,s);break}case"tree":{let o=ve(n.content);for(let i of o.entries)await ne(r,i.hash,t,s);break}case"tag":{let o=M(n.content);await ne(r,o.object,t,s);break}case"blob":break}}async function se(r,e,t,s,n,o){if(s.has(e)||t.has(e))return;s.add(e);let i=await te(r,e);switch(n.push({hash:e,type:i.type}),i.type){case"commit":{let a=ee(i.content);if(await se(r,a.tree,t,s,n,o),!o?.has(e))for(let f of a.parents)await se(r,f,t,s,n,o);break}case"tree":{let a=ve(i.content);for(let f of a.entries)await se(r,f.hash,t,s,n,o);break}case"tag":{let a=M(i.content);await se(r,a.object,t,s,n,o);break}case"blob":break}}var Rr=new TextEncoder,kt=new TextDecoder,At=65520,Or=new Uint8Array([48,48,48,48]);function j(r){let e=typeof r=="string"?Rr.encode(r):r,t=4+e.byteLength;if(t>At)throw new Error(`pkt-line too long: ${t} bytes (max ${At})`);let s=t.toString(16).padStart(4,"0"),n=new Uint8Array(t);return n[0]=s.charCodeAt(0),n[1]=s.charCodeAt(1),n[2]=s.charCodeAt(2),n[3]=s.charCodeAt(3),n.set(e,4),n}function U(){return Or.slice()}function $(...r){let e=0;for(let n of r)e+=n.byteLength;let t=new Uint8Array(e),s=0;for(let n of r)t.set(n,s),s+=n.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 s=kt.decode(r.subarray(t,t+4)),n=parseInt(s,16);if(Number.isNaN(n))throw new Error(`Invalid pkt-line length: ${s}`);if(n===0){e.push({type:"flush"}),t+=4;continue}if(n<4)throw new Error(`Invalid pkt-line length: ${n}`);if(t+n>r.byteLength)throw new Error(`Truncated pkt-line: need ${n} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+n)}),t+=n}return e}function Tt(r){if(r.type==="flush")return"";let e=kt.decode(r.data);return e.endsWith(`
|
|
8
|
-
`)?e.slice(0,-1):e}var
|
|
9
|
-
`)),n.push(U());let o=[...t];s&&o.push(`symref=HEAD:${s}`),o.push("agent=just-git/1.0");let
|
|
10
|
-
`));else for(let
|
|
11
|
-
`)):n.push(
|
|
12
|
-
`))}return n.push(U())
|
|
13
|
-
`));for(let o of s.unshallow)n.push(
|
|
14
|
-
`));n.push(U())}if(t&&t.length>0){for(let
|
|
15
|
-
`));let o=t[t.length-1];n.push(
|
|
16
|
-
`)),n.push(
|
|
17
|
-
`))}else n.push(
|
|
18
|
-
`));if(e){let o=0;for(;o<r.byteLength;){let
|
|
19
|
-
`));for(let t of r.unshallow)e.push(
|
|
20
|
-
`));return e.push(U())
|
|
21
|
-
`));for(let
|
|
22
|
-
`));o.push(U()),yield
|
|
23
|
-
`));let o=t[t.length-1];n.push(
|
|
24
|
-
`)),n.push(
|
|
25
|
-
`))}else n.push(
|
|
26
|
-
`));if(yield
|
|
27
|
-
`)?u.slice(0,-1):u}let p=d.split(" ");p.length>=3&&t.push({oldHash:p[0],newHash:p[1],refName:p[2]})}let
|
|
6
|
+
`),s=t===-1?e:e.slice(0,t),n=t===-1?"":e.slice(t+2),o="",a="commit",i="",f;for(let c of s.split(`
|
|
7
|
+
`)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),p=c.slice(l+1);switch(d){case"object":o=p;break;case"type":a=p;break;case"tag":i=p;break;case"tagger":f=ee(p);break}}if(!o)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:o,objectType:a,name:i,tagger:f,message:n}}async function re(r,e){return r.objectStore.read(e)}async function ne(r,e){return r.objectStore.exists(e)}var Rn=new TextDecoder;async function q(r,e){let t=await re(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return te(t.content)}function $(r){return typeof r=="string"?{type:"direct",hash:r}:r}var ke=".lock";var yr=[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 br(r,e,t){let s=0,n=!1,o=e;for(;o<r.length;o++){let i=r.charCodeAt(o);switch(i<128?yr[i]:0){case 1:break;case 2:if(s===46)return{len:-1,starConsumed:n};s=i;continue;case 3:if(s===64)return{len:-1,starConsumed:n};s=i;continue;case 4:return{len:-1,starConsumed:n};case 5:if(!t)return{len:-1,starConsumed:n};n=!0,s=i;continue;default:s=i;continue}break}let a=o-e;return a===0?{len:0,starConsumed:n}:r.charCodeAt(e)===46?{len:-1,starConsumed:n}:a>=ke.length&&r.slice(o-ke.length,o)===ke?{len:-1,starConsumed:n}:{len:a,starConsumed:n}}function Rt(r,e=0){if(r==="@"||r.length===0)return!1;let t=0,s=0,n=!!(e&2);for(;t<=r.length;){let{len:o,starConsumed:a}=br(r,t,n);if(o<0||o===0)return!1;a&&(n=!1),s++,t+=o+1}return!(r.charCodeAt(r.length-1)===46||!(e&1)&&s<2)}var vn=new TextEncoder,Ot=new TextDecoder,mr=new Set(["100644","100755","040000","120000","160000"]);function gr(r){return r.length===4&&r.toLowerCase()===".git"}function xr(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(gr(r))throw new Error(`invalid tree entry: '${r}'`);if(!mr.has(e))throw new Error(`invalid tree entry mode: '${e}' for '${r}'`)}function Se(r){let e=[],t=0;for(;t<r.byteLength;){let s=r.indexOf(32,t);if(s===-1)break;let n=Ot.decode(r.subarray(t,s)),o=r.indexOf(0,s+1);if(o===-1)break;let a=Ot.decode(r.subarray(s+1,o)),i=r.subarray(o+1,o+21),f=fe(i),c=n.padStart(6,"0");xr(a,c),e.push({mode:c,name:a,hash:f}),t=o+21}return{type:"tree",entries:e}}async function Pt(r,e,t){if(e===t)return!0;let s=new Set,n=[t],o=0;for(;o<n.length;){let a=n[o++];if(a===e)return!0;if(s.has(a))continue;s.add(a);let i;try{i=await q(r,a)}catch{continue}for(let f of i.parents)s.has(f)||n.push(f)}return!1}var ye=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]),wr=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]),he=64,Rr=4,Ae=4096,jt=65536,Or=127;function Pr(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let s=t>>>2;s<16&&(s=16),s=Er(s);let n=s-1,o=new Uint32Array(s),a=[],i=-1>>>0;for(let p=t*16-16;p>=0;p-=16){let u=0;for(let h=1;h<=16;h++)u=(u<<8|r[p+h])^ye[u>>>23];if(u=u>>>0,u===i)a[a.length-1].ptr=p+16;else{i=u;let h=u&n;a.push({ptr:p+16,val:u}),o[h]++}}let f=new Map;for(let p of a){let u=p.val&n,h=f.get(u);h||(h=[],f.set(u,h)),h.push(p)}for(let[p,u]of f){if(u.length<=he)continue;let h=[],y=u.length/he;for(let m=0;m<he;m++)h.push(u[Math.floor(m*y)]);f.set(p,h),o[p]=he}let c=new Uint32Array(s+1),l=[],d=0;for(let p=0;p<s;p++){c[p]=d;let u=f.get(p);if(u){for(let h of u)l.push(h);d+=u.length}}return c[s]=d,{src:r,hashMask:n,buckets:c,entries:l}}function jr(r,e,t){if(!r||e.byteLength===0)return null;let s=r.src.byteLength,n=e.byteLength,o=r.src,a=new Uint8Array(Math.max(n,1024)),i=0;function f(y){for(;i+y>a.length;){let m=new Uint8Array(a.length*2);m.set(a),a=m}}i=vt(a,i,s),i=vt(a,i,n),f(18),i++;let c=0,l=0,d=Math.min(16,n);for(let y=0;y<d;y++)a[i++]=e[y],c=(c<<8|e[y])^ye[c>>>23],l++;c=c>>>0;let p=d,u=0,h=0;for(;p<n;){if(h<Ae){c^=wr[e[p-16]],c=((c<<8|e[p])^ye[c>>>23])>>>0;let y=c&r.hashMask,m=r.buckets[y],O=r.buckets[y+1];for(let b=m;b<O;b++){let x=r.entries[b];if(x.val!==c)continue;let R=x.ptr,g=o.byteLength-R,w=n-p;if(g>w&&(g=w),g<=h)break;let j=0;for(;j<g&&o[R+j]===e[p+j];)j++;if(j>h&&(h=j,u=R,h>=Ae))break}}if(h<Rr)f(2),l===0&&i++,a[i++]=e[p++],l++,l===Or&&(a[i-l-1]=l,l=0),h=0;else{if(l>0){for(;u>0&&o[u-1]===e[p-1];)if(h++,u--,p--,i--,!(--l>0)){i--,l=-1;break}l>0&&(a[i-l-1]=l),l=0}let y=h>jt?h-jt:0;h-=y,f(8);let m=i++,O=128;if(u&255&&(a[i++]=u&255,O|=1),u&65280&&(a[i++]=u>>>8&255,O|=2),u&16711680&&(a[i++]=u>>>16&255,O|=4),u&4278190080&&(a[i++]=u>>>24&255,O|=8),h&255&&(a[i++]=h&255,O|=16),h&65280&&(a[i++]=h>>>8&255,O|=32),a[m]=O,p+=h,u+=h,h=y,u>4294967295&&(h=0),h<Ae){c=0;for(let b=-16;b<0;b++)c=(c<<8|e[p+b])^ye[c>>>23];c=c>>>0}}if(t&&i>t)return null}return l>0&&(a[i-l-1]=l),t&&i>t?null:a.subarray(0,i)}var Et={blob:0,tree:1,commit:2,tag:3};function It(r,e){let t=e?.window??10,s=e?.depth??50,n=r.slice().sort((c,l)=>{let d=Et[c.type]??99,p=Et[l.type]??99;return d!==p?d-p:l.content.byteLength-c.content.byteLength}),o=new Map,a=[],i=[],f=[];for(let c=0;c<n.length;c++){let l=n[c],d={hash:l.hash,type:l.type,content:l.content,depth:0},p=null,u=null,h=Math.max(0,c-t);for(let y=c-1;y>=h;y--){let m=n[y];if(m.type!==l.type||(o.get(m.hash)?.depth??0)>=s||l.content.byteLength<m.content.byteLength>>>5)continue;let x=i[y-h]??null;if(!x)continue;let R=p?p.byteLength:l.content.byteLength/2|0;if(R<16)continue;let g=jr(x,l.content,R);g&&(!p||g.byteLength<p.byteLength)&&(p=g,u=m.hash)}if(p&&u){d.delta=p,d.deltaBase=u;let y=o.get(u);d.depth=(y?.depth??0)+1}o.set(l.hash,d),a.push(d),i.length>=t&&(i.shift(),f.shift()),i.push(Pr(l.content)),f.push(l.hash)}return a}function Er(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 vt(r,e,t){let s=t;do{let n=s&127;s>>>=7,s>0&&(n|=128),r[e++]=n}while(s>0);return e}var vr=2147483647;async function kt(r,e,t,s){if(t>=vr)return{shallow:[],unshallow:[...s]};let n=new Map,o=[];for(let c of e)!n.has(c)&&await ne(r,c)&&(n.set(c,1),o.push({hash:c,level:1}));let a=new Set,i=0;for(;i<o.length;){let{hash:c,level:l}=o[i++];if(l>=t){a.add(c);continue}let d;try{d=await q(r,c)}catch{continue}for(let p of d.parents)!n.has(p)&&await ne(r,p)&&(n.set(p,l+1),o.push({hash:p,level:l+1}))}let f=[];for(let c of s){let l=n.get(c);l!==void 0&&l<t&&f.push(c)}return{shallow:[...a],unshallow:f}}async function Te(r,e,t,s,n){let o=n??s,a=new Set;for(let l of t)await se(r,l,a,o);let i=[...e];if(n&&s)for(let l of n)try{let d=await q(r,l);for(let p of d.parents)a.has(p)||i.push(p)}catch{}let f=[],c=new Set;for(let l of i)await oe(r,l,a,c,f,s);return{count:f.length,objects:Ir(f)}}async function St(r,e,t,s,n){let{count:o,objects:a}=await Te(r,e,t,s,n);return{count:o,objects:kr(r,a)}}async function*Ir(r){for(let e of r)yield e}async function*kr(r,e){for await(let t of e){let s=await re(r,t.hash);yield{hash:t.hash,type:t.type,content:s.content}}}async function At(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function se(r,e,t,s){if(t.has(e)||(t.add(e),!await ne(r,e)))return;let n=await re(r,e);switch(n.type){case"commit":{let o=te(n.content);if(await se(r,o.tree,t,s),!s?.has(e))for(let a of o.parents)await se(r,a,t,s);break}case"tree":{let o=Se(n.content);for(let a of o.entries)await se(r,a.hash,t,s);break}case"tag":{let o=M(n.content);await se(r,o.object,t,s);break}case"blob":break}}async function oe(r,e,t,s,n,o){if(s.has(e)||t.has(e))return;s.add(e);let a=await re(r,e);switch(n.push({hash:e,type:a.type}),a.type){case"commit":{let i=te(a.content);if(await oe(r,i.tree,t,s,n,o),!o?.has(e))for(let f of i.parents)await oe(r,f,t,s,n,o);break}case"tree":{let i=Se(a.content);for(let f of i.entries)await oe(r,f.hash,t,s,n,o);break}case"tag":{let i=M(a.content);await oe(r,i.object,t,s,n,o);break}case"blob":break}}var Sr=new TextEncoder,Ut=new TextDecoder,Tt=65520,Ar=new Uint8Array([48,48,48,48]);function P(r){let e=typeof r=="string"?Sr.encode(r):r,t=4+e.byteLength;if(t>Tt)throw new Error(`pkt-line too long: ${t} bytes (max ${Tt})`);let s=t.toString(16).padStart(4,"0"),n=new Uint8Array(t);return n[0]=s.charCodeAt(0),n[1]=s.charCodeAt(1),n[2]=s.charCodeAt(2),n[3]=s.charCodeAt(3),n.set(e,4),n}function U(){return Ar.slice()}function W(...r){let e=0;for(let n of r)e+=n.byteLength;let t=new Uint8Array(e),s=0;for(let n of r)t.set(n,s),s+=n.byteLength;return t}function Ct(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let s=Ut.decode(r.subarray(t,t+4)),n=parseInt(s,16);if(Number.isNaN(n))throw new Error(`Invalid pkt-line length: ${s}`);if(n===0){e.push({type:"flush"}),t+=4;continue}if(n<4)throw new Error(`Invalid pkt-line length: ${n}`);if(t+n>r.byteLength)throw new Error(`Truncated pkt-line: need ${n} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+n)}),t+=n}return e}function Lt(r){if(r.type==="flush")return"";let e=Ut.decode(r.data);return e.endsWith(`
|
|
8
|
+
`)?e.slice(0,-1):e}var Dt=65515;function Ht(r,e,t,s){let n=[];n.push(P(`# service=${e}
|
|
9
|
+
`)),n.push(U());let o=[...t];s&&o.push(`symref=HEAD:${s}`),o.push("agent=just-git/1.0");let a=o.join(" ");if(r.length===0)n.push(P(`0000000000000000000000000000000000000000 capabilities^{}\0${a}
|
|
10
|
+
`));else for(let i=0;i<r.length;i++){let f=r[i];i===0?n.push(P(`${f.hash} ${f.name}\0${a}
|
|
11
|
+
`)):n.push(P(`${f.hash} ${f.name}
|
|
12
|
+
`))}return n.push(U()),W(...n)}function Nt(r){let e=Ct(r),t=[],s=[],n=[],o=[],a,i=!1;for(let f of e){if(f.type==="flush")continue;let c=Lt(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)),o=l.slice(d+1).split(" ").filter(Boolean)):t.push(l)}else t.push(l)}else c.startsWith("have ")?s.push(c.slice(5)):c.startsWith("shallow ")?n.push(c.slice(8)):c.startsWith("deepen ")?(a=parseInt(c.slice(7),10),Number.isNaN(a)&&(a=void 0)):c==="done"&&(i=!0)}return{wants:t,haves:s,capabilities:o,clientShallows:n,depth:a,done:i}}function z(r,e,t,s){let n=[];if(s){for(let o of s.shallow)n.push(P(`shallow ${o}
|
|
13
|
+
`));for(let o of s.unshallow)n.push(P(`unshallow ${o}
|
|
14
|
+
`));n.push(U())}if(t&&t.length>0){for(let a of t)n.push(P(`ACK ${a} common
|
|
15
|
+
`));let o=t[t.length-1];n.push(P(`ACK ${o} ready
|
|
16
|
+
`)),n.push(P(`ACK ${o}
|
|
17
|
+
`))}else n.push(P(`NAK
|
|
18
|
+
`));if(e){let o=0;for(;o<r.byteLength;){let a=Math.min(Dt,r.byteLength-o);n.push(Ue(1,r.subarray(o,o+a))),o+=a}n.push(U())}else{let o=new Uint8Array(r.byteLength);o.set(r),n.push(o)}return W(...n)}function Bt(r){let e=[];for(let t of r.shallow)e.push(P(`shallow ${t}
|
|
19
|
+
`));for(let t of r.unshallow)e.push(P(`unshallow ${t}
|
|
20
|
+
`));return e.push(U()),W(...e)}async function*_t(r,e,t,s){if(s){let o=[];for(let a of s.shallow)o.push(P(`shallow ${a}
|
|
21
|
+
`));for(let a of s.unshallow)o.push(P(`unshallow ${a}
|
|
22
|
+
`));o.push(U()),yield W(...o)}let n=[];if(t&&t.length>0){for(let a of t)n.push(P(`ACK ${a} common
|
|
23
|
+
`));let o=t[t.length-1];n.push(P(`ACK ${o} ready
|
|
24
|
+
`)),n.push(P(`ACK ${o}
|
|
25
|
+
`))}else n.push(P(`NAK
|
|
26
|
+
`));if(yield W(...n),e){for await(let o of r){let a=0;for(;a<o.byteLength;){let i=Math.min(Dt,o.byteLength-a);yield Ue(1,o.subarray(a,a+i)),a+=i}}yield U()}else for await(let o of r)yield o}function $t(r){let e=new TextDecoder,t=[],s=[],n=0,o=!1;for(;n<r.byteLength&&!(n+4>r.byteLength);){let i=e.decode(r.subarray(n,n+4)),f=parseInt(i,16);if(Number.isNaN(f))break;if(f===0){o=!0,n+=4;break}if(f<4||n+f>r.byteLength)break;let c=r.subarray(n+4,n+f);n+=f;let l=c.indexOf(0),d;if(l!==-1)d=e.decode(c.subarray(0,l)),s=e.decode(c.subarray(l+1)).replace(/\n$/,"").split(" ").filter(Boolean);else{let u=e.decode(c);d=u.endsWith(`
|
|
27
|
+
`)?u.slice(0,-1):u}let p=d.split(" ");p.length>=3&&t.push({oldHash:p[0],newHash:p[1],refName:p[2]})}let a=n<r.byteLength?r.subarray(n):new Uint8Array(0);return{commands:t,packData:a,capabilities:s,sawFlush:o}}function be(r,e,t){let s=[];s.push(P(r?`unpack ok
|
|
28
28
|
`:`unpack error
|
|
29
|
-
`));for(let o of e)o.ok?s.push(
|
|
30
|
-
`)):s.push(
|
|
31
|
-
`));s.push(U());let n=$(...s);if(t){let o=[];return o.push(Se(1,n)),o.push(U()),$(...o)}return n}function Se(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),j(t)}var oe=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,s){if(s.length>0)return null;let n=t.slice().sort();return`${e}\0${n.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 s=t.packData.byteLength;if(!(s>this.maxBytes)){for(;this.currentBytes+s>this.maxBytes&&this.entries.size>0;){let n=this.entries.keys().next().value;this.currentBytes-=this.entries.get(n).packData.byteLength,this.entries.delete(n)}this.entries.set(e,t),this.currentBytes+=s}}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},jr=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","allow-reachable-sha1-in-want","shallow"],Pr=["report-status","side-band-64k","ofs-delta","delete-refs"];async function Bt(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),s=[],n=null,o;if(t)if(t.type==="symbolic"){o=t.target;let a=await r.refStore.readRef(t.target);a?.type==="direct"&&(n=a.hash)}else n=t.hash;let i=e.slice().sort((a,f)=>a.name<f.name?-1:a.name>f.name?1:0);if(!n&&i.length>0){let a=Ir(i);a&&(n=a.hash,o=a.name)}n&&s.push({name:"HEAD",hash:n});for(let a of i)if(s.push({name:a.name,hash:a.hash}),a.name.startsWith("refs/tags/"))try{let f=await r.objectStore.read(a.hash);if(f.type==="tag"){let c=M(f.content);s.push({name:`${a.name}^{}`,hash:c.object})}}catch{}return{refs:s,headTarget:o}}var Er=["refs/heads/main","refs/heads/master"];function Ir(r){for(let t of Er){let s=r.find(n=>n.name===t);if(s)return s}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function _t(r,e,t){return Ct(r,e,e==="git-upload-pack"?jr:Pr,t)}async function Wt(r,e,t){let{wants:s,haves:n,capabilities:o,clientShallows:i,depth:a,done:f}=Lt(e);if(s.length===0)return z(new Uint8Array(0),!1);let c=o.includes("multi_ack_detailed"),l=o.includes("side-band-64k"),d,p,u;if(i.length>0&&(u=new Set(i)),a!==void 0){let m=await Et(r,s,a,u??new Set);d=m,p=new Set(m.shallow)}if(d&&!f)return Ht(d);let h;if(c&&n.length>0){h=[];for(let m of n)await r.objectStore.exists(m)&&h.push(m);h.length===0&&(h=void 0)}let y=!p&&t?.cache&&t.cacheKey?oe.key(t.cacheKey,s,n):null;if(y&&t?.cache){let m=t.cache.get(y);if(m)return z(m.packData,l,h)}return t?.noDelta?vr(r,s,n,o,l,h,d,p,u):Ar(r,s,n,o,l,h,t,y,d,p,u)}async function vr(r,e,t,s,n,o,i,a,f){let{count:c,objects:l}=await ke(r,e,t,a,f);if(c===0){let{data:b}=await ue([]),w=z(b,n,o,i);return new ReadableStream({start(R){R.enqueue(w),R.close()}})}let d=[];for await(let b of l)d.push(b);let p=new Set(d.map(b=>b.hash)),u=[];if(s.includes("include-tag")){let b=await r.refStore.listRefs("refs/tags");for(let w of b)if(!p.has(w.hash))try{let R=await r.objectStore.read(w.hash);if(R.type==="tag"){let x=M(R.content);p.has(x.object)&&u.push({hash:w.hash,type:"tag",content:R.content})}}catch{}}let h=d.length+u.length;async function*y(){for(let b of d){let w=await r.objectStore.read(b.hash);yield{type:w.type,content:w.content}}for(let b of u)yield{type:b.type,content:b.content}}let m=xt(h,y()),O=Dt(m,n,o,i);return new ReadableStream({async pull(b){let{value:w,done:R}=await O.next();R?b.close():b.enqueue(w)}})}async function Ar(r,e,t,s,n,o,i,a,f,c,l){let d=await It(r,e,t,c,l);if(d.count===0){let{data:b}=await ue([]);return z(b,n,o,f)}let p=await vt(d),u=new Set(p.map(b=>b.hash));if(s.includes("include-tag")){let b=await r.refStore.listRefs("refs/tags");for(let w of b)if(!u.has(w.hash))try{let R=await r.objectStore.read(w.hash);if(R.type==="tag"){let x=M(R.content);u.has(x.object)&&(p.push({hash:w.hash,type:"tag",content:R.content}),u.add(w.hash))}}catch{}}let h=i?.deltaWindow?{window:i.deltaWindow}:void 0,y=Pt(p,h),m=y.map(b=>({hash:b.hash,type:b.type,content:b.content,delta:b.delta,deltaBaseHash:b.deltaBase})),{data:O}=await ue(m);if(a&&i?.cache){let b=y.filter(w=>w.delta).length;i.cache.set(a,{packData:O,objectCount:p.length,deltaCount:b})}return z(O,n,o,f)}async function $t(r,e){let{commands:t,packData:s,capabilities:n,sawFlush:o}=Nt(e),i=!0;if(s.byteLength>0)try{await r.objectStore.ingestPack(s)}catch{i=!1}let a=[];for(let f of t){let c=f.oldHash===me,l=f.newHash===me,d=!1;if(!c&&!l&&i)try{d=await wt(r,f.oldHash,f.newHash)}catch{}a.push({ref:f.refName,oldHash:c?null:f.oldHash,newHash:f.newHash,isFF:d,isCreate:c,isDelete:l})}return{updates:a,unpackOk:i,capabilities:n,sawFlush:o}}function kr(r){let{resolveRepo:e,hooks:t,basePath:s}=r,n=r.packCache===!1?void 0:new oe(r.packCache?.maxBytes),o=r.onError===!1?void 0:r.onError??(i=>{let a=i instanceof Error?i.message:String(i);console.error(`[server] Internal error: ${a}`)});return{async fetch(i){try{let a=new URL(i.url),f=decodeURIComponent(a.pathname);if(s){let c=s.replace(/\/+$/,"");if(!f.startsWith(c))return new Response("Not Found",{status:404});f=f.slice(c.length)}if(f.startsWith("/")||(f=`/${f}`),f.endsWith("/info/refs")&&i.method==="GET"){let c=a.searchParams.get("service");if(c!=="git-upload-pack"&&c!=="git-receive-pack")return new Response("Unsupported service",{status:403});let l=Te(f,"/info/refs"),d=await e(l,i);if(d instanceof Response)return d;if(!d)return new Response("Not Found",{status:404});let p=d,{refs:u,headTarget:h}=await Bt(p),y=u;if(t?.advertiseRefs){let O=await t.advertiseRefs({repo:p,repoPath:l,refs:u,service:c,request:i});O&&(y=O)}let m=_t(y,c,h);return new Response(m,{headers:{"Content-Type":`application/x-${c}-advertisement`,"Cache-Control":"no-cache"}})}if(f.endsWith("/git-upload-pack")&&i.method==="POST"){let c=Te(f,"/git-upload-pack"),l=await e(c,i);if(l instanceof Response)return l;if(!l)return new Response("Not Found",{status:404});let d=l,p=await Mt(i),u=await Wt(d,p,{cache:n,cacheKey:c,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(u,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(f.endsWith("/git-receive-pack")&&i.method==="POST"){let c=Te(f,"/git-receive-pack"),l=await e(c,i);if(l instanceof Response)return l;if(!l)return new Response("Not Found",{status:404});let d=l,p=await Mt(i),{updates:u,unpackOk:h,capabilities:y,sawFlush:m}=await $t(d,p);if(!m&&u.length===0)return new Response("Bad Request",{status:400});let O=y.includes("side-band-64k"),b=y.includes("report-status");if(!h){if(b){let x=u.map(g=>({name:g.ref,ok:!1,error:"unpack failed"}));return new Response(be(!1,x,O),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}if(t?.preReceive){let x=await t.preReceive({repo:d,repoPath:c,updates:u,request:i});if(Y(x)){if(b){let g=x.message??"pre-receive hook declined",P=u.map(I=>({name:I.ref,ok:!1,error:g}));return new Response(be(!0,P,O),{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 w=[],R=[];for(let x of u){if(t?.update){let g=await t.update({repo:d,repoPath:c,update:x,request:i});if(Y(g)){w.push({ref:x.ref,ok:!1,error:g.message??"update hook declined"});continue}}try{let g=x.isCreate?null:x.oldHash,P=x.isDelete?null:{type:"direct",hash:x.newHash};if(!await d.refStore.compareAndSwapRef(x.ref,g,P)){w.push({ref:x.ref,ok:!1,error:"failed to lock"});continue}w.push({ref:x.ref,ok:!0}),R.push(x)}catch(g){w.push({ref:x.ref,ok:!1,error:g instanceof Error?g.message:String(g)})}}if(t?.postReceive&&R.length>0)try{await t.postReceive({repo:d,repoPath:c,updates:R,request:i})}catch{}if(b){let x=w.map(g=>({name:g.ref,ok:g.ok,error:g.error}));return new Response(be(!0,x,O),{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(a){return o?.(a,i),new Response("Internal Server Error",{status:500})}}}}function Te(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Mt(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let s=new DecompressionStream("gzip"),n=s.writable.getWriter();return n.write(e),n.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}return e}function Sr(r){return(e,t)=>{let s=[];e.on("data",n=>s.push(new Uint8Array(n))),e.on("error",()=>{t.writeHead(500),t.end("Internal Server Error")}),e.on("end",()=>{Tr(r,e,s,t).catch(()=>{try{t.writeHead(500),t.end("Internal Server Error")}catch{}})})}}async function Tr(r,e,t,s){let n=typeof e.headers.host=="string"?e.headers.host:"localhost",o=new URL(e.url??"/",`http://${n}`),i=new Headers;for(let[u,h]of Object.entries(e.headers))if(h!==void 0)if(Array.isArray(h))for(let y of h)i.append(u,y);else i.set(u,h);let a=e.method??"GET",f;if(a!=="GET"&&a!=="HEAD"){let u=0;for(let m of t)u+=m.byteLength;let h=new Uint8Array(u),y=0;for(let m of t)h.set(m,y),y+=m.byteLength;f=h}let c=new Request(o.href,{method:a,headers:i,body:f}),l=await r.fetch(c),d={};l.headers.forEach((u,h)=>{d[h]=u}),s.writeHead(l.status,d);let p=new Uint8Array(await l.arrayBuffer());p.byteLength>0&&s.write(p),s.end()}function Ur(...r){let e=r.filter(a=>a!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},s=e.filter(a=>a.preReceive).map(a=>a.preReceive);s.length>0&&(t.preReceive=async a=>{for(let f of s){let c=await f(a);if(Y(c))return c}});let n=e.filter(a=>a.update).map(a=>a.update);n.length>0&&(t.update=async a=>{for(let f of n){let c=await f(a);if(Y(c))return c}});let o=e.filter(a=>a.postReceive).map(a=>a.postReceive);o.length>0&&(t.postReceive=async a=>{for(let f of o)try{await f(a)}catch{}});let i=e.filter(a=>a.advertiseRefs).map(a=>a.advertiseRefs);return i.length>0&&(t.advertiseRefs=async a=>{let f=a.refs;for(let c of i){let l=await c({...a,refs:f});l&&(f=l)}return f}),t}function Cr(r,e){return async(t,s)=>{let n=await r(s);return n instanceof Response?n:n?e(t,s):new Response("Forbidden",{status:403})}}function Lr(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:s=!1,denyDeleteTags:n=!1,authorizePush:o,onPush:i}=r,a=new Set(e.map(c=>c.startsWith("refs/")?c:`refs/heads/${c}`)),f={};return(o||a.size>0)&&(f.preReceive=async c=>{if(o&&!await o(c.request))return{reject:!0,message:"unauthorized"};for(let l of c.updates)if(a.has(l.ref)){if(l.isDelete)return{reject:!0,message:`cannot delete protected branch ${l.ref}`};if(!l.isCreate&&!l.isFF)return{reject:!0,message:`non-fast-forward push to protected branch ${l.ref}`}}}),(t||s||n)&&(f.update=async c=>{if(s&&c.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(n&&c.update.ref.startsWith("refs/tags/")){if(c.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!c.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!c.update.isCreate&&!c.update.isDelete&&!c.update.isFF)return{reject:!0,message:"non-fast-forward"}}),i&&(f.postReceive=i),f}var Ue=class{objects=new Map;refs=new Map;repo(e){return{objectStore:new Ce(this.getObjects(e)),refStore:new Le(this.getRefs(e))}}async deleteRepo(e){this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e)}getObjects(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefs(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}},Ce=class{constructor(e){this.store=e}async write(e,t){let s=await D(_(e,t));return this.store.has(s)||this.store.set(s,{type:e,content:new Uint8Array(t)}),s}async read(e){let t=this.store.get(e);if(!t)throw new Error(`object ${e} not found`);return{type:t.type,content:new Uint8Array(t.content)}}async exists(e){return this.store.has(e)}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=this.store,o=await B(e,async i=>{let a=n.get(i);return a?{type:a.type,content:new Uint8Array(a.content)}:null});for(let i of o)n.has(i.hash)||n.set(i.hash,{type:i.type,content:i.content});return o.length}async findByPrefix(e){if(e.length<4)return[];let t=[];for(let s of this.store.keys())s.startsWith(e)&&t.push(s);return t}},Le=class{constructor(e){this.store=e}async readRef(e){return this.store.get(e)??null}async writeRef(e,t){this.store.set(e,W(t))}async deleteRef(e){this.store.delete(e)}async compareAndSwapRef(e,t,s){let n=this.store.get(e)??null,o=null;if(n&&(n.type==="direct"?o=n.hash:n.type==="symbolic"&&(o=this.resolveChain(n.target))),t===null){if(n!==null)return!1}else if(o!==t)return!1;return s===null?this.store.delete(e):this.store.set(e,s),!0}async listRefs(e){let t=[];for(let[s,n]of this.store)if(!(e&&!s.startsWith(e))){if(n.type==="direct")t.push({name:s,hash:n.hash});else if(n.type==="symbolic"){let o=this.resolveChain(n.target);o&&t.push({name:s,hash:o})}}return t}resolveChain(e,t=0){if(t>10)return null;let s=this.store.get(e);return s?s.type==="direct"?s.hash:s.type==="symbolic"?this.resolveChain(s.target,t+1):null:null}};var Hr=`
|
|
29
|
+
`));for(let o of e)o.ok?s.push(P(`ok ${o.name}
|
|
30
|
+
`)):s.push(P(`ng ${o.name} ${o.error??"failed"}
|
|
31
|
+
`));s.push(U());let n=W(...s);if(t){let o=[];return o.push(Ue(1,n)),o.push(U()),W(...o)}return n}function Ue(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),P(t)}var ae=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,s){if(s.length>0)return null;let n=t.slice().sort();return`${e}\0${n.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 s=t.packData.byteLength;if(!(s>this.maxBytes)){for(;this.currentBytes+s>this.maxBytes&&this.entries.size>0;){let n=this.entries.keys().next().value;this.currentBytes-=this.entries.get(n).packData.byteLength,this.entries.delete(n)}this.entries.set(e,t),this.currentBytes+=s}}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},Tr=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","allow-reachable-sha1-in-want","shallow"],Ur=["report-status","side-band-64k","ofs-delta","delete-refs"];async function Wt(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),s=[],n=null,o;if(t)if(t.type==="symbolic"){o=t.target;let i=await r.refStore.readRef(t.target);i?.type==="direct"&&(n=i.hash)}else n=t.hash;let a=e.slice().sort((i,f)=>i.name<f.name?-1:i.name>f.name?1:0);if(!n&&a.length>0){let i=Lr(a);i&&(n=i.hash,o=i.name)}n&&s.push({name:"HEAD",hash:n});for(let i of a)if(s.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=M(f.content);s.push({name:`${i.name}^{}`,hash:c.object})}}catch{}return{refs:s,headTarget:o}}var Cr=["refs/heads/main","refs/heads/master"];function Lr(r){for(let t of Cr){let s=r.find(n=>n.name===t);if(s)return s}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function Mt(r,e,t){return Ht(r,e,e==="git-upload-pack"?Tr:Ur,t)}async function Gt(r,e,t){let{wants:s,haves:n,capabilities:o,clientShallows:a,depth:i,done:f}=Nt(e);if(s.length===0)return z(new Uint8Array(0),!1);let c=o.includes("multi_ack_detailed"),l=o.includes("side-band-64k"),d,p,u;if(a.length>0&&(u=new Set(a)),i!==void 0){let m=await kt(r,s,i,u??new Set);d=m,p=new Set(m.shallow)}if(d&&!f)return Bt(d);let h;if(c&&n.length>0){h=[];for(let m of n)await r.objectStore.exists(m)&&h.push(m);h.length===0&&(h=void 0)}let y=!p&&t?.cache&&t.cacheKey?ae.key(t.cacheKey,s,n):null;if(y&&t?.cache){let m=t.cache.get(y);if(m)return z(m.packData,l,h)}return t?.noDelta?Dr(r,s,n,o,l,h,d,p,u):Hr(r,s,n,o,l,h,t,y,d,p,u)}async function Dr(r,e,t,s,n,o,a,i,f){let{count:c,objects:l}=await Te(r,e,t,i,f);if(c===0){let{data:b}=await ue([]),x=z(b,n,o,a);return new ReadableStream({start(R){R.enqueue(x),R.close()}})}let d=[];for await(let b of l)d.push(b);let p=new Set(d.map(b=>b.hash)),u=[];if(s.includes("include-tag")){let b=await r.refStore.listRefs("refs/tags");for(let x of b)if(!p.has(x.hash))try{let R=await r.objectStore.read(x.hash);if(R.type==="tag"){let g=M(R.content);p.has(g.object)&&u.push({hash:x.hash,type:"tag",content:R.content})}}catch{}}let h=d.length+u.length;async function*y(){for(let b of d){let x=await r.objectStore.read(b.hash);yield{type:x.type,content:x.content}}for(let b of u)yield{type:b.type,content:b.content}}let m=wt(h,y()),O=_t(m,n,o,a);return new ReadableStream({async pull(b){let{value:x,done:R}=await O.next();R?b.close():b.enqueue(x)}})}async function Hr(r,e,t,s,n,o,a,i,f,c,l){let d=await St(r,e,t,c,l);if(d.count===0){let{data:b}=await ue([]);return z(b,n,o,f)}let p=await At(d),u=new Set(p.map(b=>b.hash));if(s.includes("include-tag")){let b=await r.refStore.listRefs("refs/tags");for(let x of b)if(!u.has(x.hash))try{let R=await r.objectStore.read(x.hash);if(R.type==="tag"){let g=M(R.content);u.has(g.object)&&(p.push({hash:x.hash,type:"tag",content:R.content}),u.add(x.hash))}}catch{}}let h=a?.deltaWindow?{window:a.deltaWindow}:void 0,y=It(p,h),m=y.map(b=>({hash:b.hash,type:b.type,content:b.content,delta:b.delta,deltaBaseHash:b.deltaBase})),{data:O}=await ue(m);if(i&&a?.cache){let b=y.filter(x=>x.delta).length;a.cache.set(i,{packData:O,objectCount:p.length,deltaCount:b})}return z(O,n,o,f)}async function Ft(r,e){let{commands:t,packData:s,capabilities:n,sawFlush:o}=$t(e),a=!0;if(s.byteLength>0)try{await r.objectStore.ingestPack(s)}catch{a=!1}let i=[];for(let f of t){let c=f.oldHash===me,l=f.newHash===me,d=!1;if(!c&&!l&&a)try{d=await Pt(r,f.oldHash,f.newHash)}catch{}i.push({ref:f.refName,oldHash:c?null:f.oldHash,newHash:f.newHash,isFF:d,isCreate:c,isDelete:l})}return{updates:i,unpackOk:a,capabilities:n,sawFlush:o}}function Nr(r){let{resolveRepo:e,hooks:t,basePath:s}=r,n=r.packCache===!1?void 0:new ae(r.packCache?.maxBytes),o=r.onError===!1?void 0:r.onError??(a=>{let i=a instanceof Error?a.message:String(a);console.error(`[server] Internal error: ${i}`)});return{async fetch(a){try{let i=new URL(a.url),f=decodeURIComponent(i.pathname);if(s){let c=s.replace(/\/+$/,"");if(!f.startsWith(c))return new Response("Not Found",{status:404});f=f.slice(c.length)}if(f.startsWith("/")||(f=`/${f}`),f.endsWith("/info/refs")&&a.method==="GET"){let c=i.searchParams.get("service");if(c!=="git-upload-pack"&&c!=="git-receive-pack")return new Response("Unsupported service",{status:403});let l=Ce(f,"/info/refs"),d=await e(l,a);if(d instanceof Response)return d;if(!d)return new Response("Not Found",{status:404});let p=d,{refs:u,headTarget:h}=await Wt(p),y=u;if(t?.advertiseRefs){let O=await t.advertiseRefs({repo:p,repoPath:l,refs:u,service:c,request:a});O&&(y=O)}let m=Mt(y,c,h);return new Response(m,{headers:{"Content-Type":`application/x-${c}-advertisement`,"Cache-Control":"no-cache"}})}if(f.endsWith("/git-upload-pack")&&a.method==="POST"){let c=Ce(f,"/git-upload-pack"),l=await e(c,a);if(l instanceof Response)return l;if(!l)return new Response("Not Found",{status:404});let d=l,p=await qt(a),u=await Gt(d,p,{cache:n,cacheKey:c,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(u,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(f.endsWith("/git-receive-pack")&&a.method==="POST"){let c=Ce(f,"/git-receive-pack"),l=await e(c,a);if(l instanceof Response)return l;if(!l)return new Response("Not Found",{status:404});let d=l,p=await qt(a),{updates:u,unpackOk:h,capabilities:y,sawFlush:m}=await Ft(d,p);if(!m&&u.length===0)return new Response("Bad Request",{status:400});let O=y.includes("side-band-64k"),b=y.includes("report-status");if(!h){if(b){let g=u.map(w=>({name:w.ref,ok:!1,error:"unpack failed"}));return new Response(be(!1,g,O),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}if(t?.preReceive){let g=await t.preReceive({repo:d,repoPath:c,updates:u,request:a});if(Y(g)){if(b){let w=g.message??"pre-receive hook declined",j=u.map(v=>({name:v.ref,ok:!1,error:w}));return new Response(be(!0,j,O),{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 x=[],R=[];for(let g of u){if(!g.isDelete&&!Rt(g.ref)){x.push({ref:g.ref,ok:!1,error:"invalid refname"});continue}if(t?.update){let w=await t.update({repo:d,repoPath:c,update:g,request:a});if(Y(w)){x.push({ref:g.ref,ok:!1,error:w.message??"update hook declined"});continue}}try{let w=g.isCreate?null:g.oldHash,j=g.isDelete?null:{type:"direct",hash:g.newHash};if(!await d.refStore.compareAndSwapRef(g.ref,w,j)){x.push({ref:g.ref,ok:!1,error:"failed to lock"});continue}x.push({ref:g.ref,ok:!0}),R.push(g)}catch(w){x.push({ref:g.ref,ok:!1,error:w instanceof Error?w.message:String(w)})}}if(t?.postReceive&&R.length>0)try{await t.postReceive({repo:d,repoPath:c,updates:R,request:a})}catch{}if(b){let g=x.map(w=>({name:w.ref,ok:w.ok,error:w.error}));return new Response(be(!0,g,O),{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(i){return o?.(i,a),new Response("Internal Server Error",{status:500})}}}}function Ce(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function qt(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let s=new DecompressionStream("gzip"),n=s.writable.getWriter();return n.write(e),n.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}return e}function Br(r){return(e,t)=>{let s=[];e.on("data",n=>s.push(new Uint8Array(n))),e.on("error",()=>{t.writeHead(500),t.end("Internal Server Error")}),e.on("end",()=>{_r(r,e,s,t).catch(()=>{try{t.writeHead(500),t.end("Internal Server Error")}catch{}})})}}async function _r(r,e,t,s){let n=typeof e.headers.host=="string"?e.headers.host:"localhost",o=new URL(e.url??"/",`http://${n}`),a=new Headers;for(let[u,h]of Object.entries(e.headers))if(h!==void 0)if(Array.isArray(h))for(let y of h)a.append(u,y);else a.set(u,h);let i=e.method??"GET",f;if(i!=="GET"&&i!=="HEAD"){let u=0;for(let m of t)u+=m.byteLength;let h=new Uint8Array(u),y=0;for(let m of t)h.set(m,y),y+=m.byteLength;f=h}let c=new Request(o.href,{method:i,headers:a,body:f}),l=await r.fetch(c),d={};l.headers.forEach((u,h)=>{d[h]=u}),s.writeHead(l.status,d);let p=new Uint8Array(await l.arrayBuffer());p.byteLength>0&&s.write(p),s.end()}function $r(...r){let e=r.filter(i=>i!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},s=e.filter(i=>i.preReceive).map(i=>i.preReceive);s.length>0&&(t.preReceive=async i=>{for(let f of s){let c=await f(i);if(Y(c))return c}});let n=e.filter(i=>i.update).map(i=>i.update);n.length>0&&(t.update=async i=>{for(let f of n){let c=await f(i);if(Y(c))return c}});let o=e.filter(i=>i.postReceive).map(i=>i.postReceive);o.length>0&&(t.postReceive=async i=>{for(let f of o)try{await f(i)}catch{}});let a=e.filter(i=>i.advertiseRefs).map(i=>i.advertiseRefs);return a.length>0&&(t.advertiseRefs=async i=>{let f=i.refs;for(let c of a){let l=await c({...i,refs:f});l&&(f=l)}return f}),t}function Wr(r,e){return async(t,s)=>{let n=await r(s);return n instanceof Response?n:n?e(t,s):new Response("Forbidden",{status:403})}}function Mr(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:s=!1,denyDeleteTags:n=!1,authorizePush:o,onPush:a}=r,i=new Set(e.map(c=>c.startsWith("refs/")?c:`refs/heads/${c}`)),f={};return(o||i.size>0)&&(f.preReceive=async c=>{if(o&&!await o(c.request))return{reject:!0,message:"unauthorized"};for(let l of c.updates)if(i.has(l.ref)){if(l.isDelete)return{reject:!0,message:`cannot delete protected branch ${l.ref}`};if(!l.isCreate&&!l.isFF)return{reject:!0,message:`non-fast-forward push to protected branch ${l.ref}`}}}),(t||s||n)&&(f.update=async c=>{if(s&&c.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(n&&c.update.ref.startsWith("refs/tags/")){if(c.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!c.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!c.update.isCreate&&!c.update.isDelete&&!c.update.isFF)return{reject:!0,message:"non-fast-forward"}}),a&&(f.postReceive=a),f}var Le=class{objects=new Map;refs=new Map;repo(e){return{objectStore:new De(this.getObjects(e)),refStore:new He(this.getRefs(e))}}async deleteRepo(e){this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e)}getObjects(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefs(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}},De=class{constructor(e){this.store=e}async write(e,t){let s=await N(_(e,t));return this.store.has(s)||this.store.set(s,{type:e,content:new Uint8Array(t)}),s}async read(e){let t=this.store.get(e);if(!t)throw new Error(`object ${e} not found`);return{type:t.type,content:new Uint8Array(t.content)}}async exists(e){return this.store.has(e)}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=this.store,o=await B(e,async a=>{let i=n.get(a);return i?{type:i.type,content:new Uint8Array(i.content)}:null});for(let a of o)n.has(a.hash)||n.set(a.hash,{type:a.type,content:a.content});return o.length}async findByPrefix(e){if(e.length<4)return[];let t=[];for(let s of this.store.keys())s.startsWith(e)&&t.push(s);return t}},He=class{constructor(e){this.store=e}async readRef(e){return this.store.get(e)??null}async writeRef(e,t){this.store.set(e,$(t))}async deleteRef(e){this.store.delete(e)}async compareAndSwapRef(e,t,s){let n=this.store.get(e)??null,o=null;if(n&&(n.type==="direct"?o=n.hash:n.type==="symbolic"&&(o=this.resolveChain(n.target))),t===null){if(n!==null)return!1}else if(o!==t)return!1;return s===null?this.store.delete(e):this.store.set(e,s),!0}async listRefs(e){let t=[];for(let[s,n]of this.store)if(!(e&&!s.startsWith(e))){if(n.type==="direct")t.push({name:s,hash:n.hash});else if(n.type==="symbolic"){let o=this.resolveChain(n.target);o&&t.push({name:s,hash:o})}}return t}resolveChain(e,t=0){if(t>10)return null;let s=this.store.get(e);return s?s.type==="direct"?s.hash:s.type==="symbolic"?this.resolveChain(s.target,t+1):null:null}};var Gr=`
|
|
32
32
|
CREATE TABLE IF NOT EXISTS git_objects (
|
|
33
33
|
repo_id TEXT NOT NULL,
|
|
34
34
|
hash TEXT NOT NULL,
|
|
@@ -45,7 +45,7 @@ CREATE TABLE IF NOT EXISTS git_refs (
|
|
|
45
45
|
target TEXT,
|
|
46
46
|
PRIMARY KEY (repo_id, name)
|
|
47
47
|
) WITHOUT ROWID;
|
|
48
|
-
`;function
|
|
48
|
+
`;function Fr(r){return{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 = ?"),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 Ne=class{db;stmts;ingestTx;constructor(e){this.db=e,e.run(Gr),this.stmts=Fr(e),this.ingestTx=e.transaction(t=>{for(let s of t)this.stmts.objInsert.run(s.repoId,s.hash,s.type,s.content)})}repo(e){return{objectStore:new Be(this.stmts,this.ingestTx,e),refStore:new _e(this.stmts,this.db,e)}}async deleteRepo(e){this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e)}},Be=class{constructor(e,t,s){this.stmts=e;this.ingestTx=t;this.repoId=s;this.cache=new H}cache;async write(e,t){let s=_(e,t),n=await N(s);return this.stmts.objInsert.run(this.repoId,n,e,t),n}async read(e){let t=this.cache.get(e);if(t)return t;let s=this.stmts.objRead.get(this.repoId,e);if(!s)throw new Error(`object ${e} not found`);let n={type:s.type,content:new Uint8Array(s.content)};return this.cache.set(e,n),n}async exists(e){return this.stmts.objExists.get(this.repoId,e)!==null}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=await B(e,async a=>{let i=this.stmts.objRead.get(this.repoId,a);return i?{type:i.type,content:new Uint8Array(i.content)}:null}),o=n.map(a=>({repoId:this.repoId,hash:a.hash,type:a.type,content:a.content}));return this.ingestTx(o),n.length}async findByPrefix(e){return e.length<4?[]:this.stmts.objPrefix.all(this.repoId,`${e}*`).map(s=>s.hash)}},_e=class{constructor(e,t,s){this.stmts=e;this.repoId=s;let n=e,o=s;this.casTx=t.transaction((a,i,f)=>{let c=n.refRead.get(o,a),l=null;if(c&&(c.type==="direct"?l=c.hash:c.type==="symbolic"&&c.target&&(l=$e(n,o,c.target))),i===null){if(c!==null)return!1}else if(l!==i)return!1;return f===null?n.refDelete.run(o,a):f.type==="symbolic"?n.refWrite.run(o,a,"symbolic",null,f.target):n.refWrite.run(o,a,"direct",f.hash,null),!0})}casTx;async readRef(e){let t=this.stmts.refRead.get(this.repoId,e);return t?t.type==="symbolic"?{type:"symbolic",target:t.target}:{type:"direct",hash:t.hash}:null}async writeRef(e,t){let s=$(t);s.type==="symbolic"?this.stmts.refWrite.run(this.repoId,e,"symbolic",null,s.target):this.stmts.refWrite.run(this.repoId,e,"direct",s.hash,null)}async deleteRef(e){this.stmts.refDelete.run(this.repoId,e)}async compareAndSwapRef(e,t,s){return this.casTx(e,t,s)}async listRefs(e){let t;e?t=this.stmts.refList.all(this.repoId,`${e}*`):t=this.stmts.refListAll.all(this.repoId);let s=[];for(let n of t)if(n.type==="direct"&&n.hash)s.push({name:n.name,hash:n.hash});else if(n.type==="symbolic"&&n.target){let o=$e(this.stmts,this.repoId,n.target);o&&s.push({name:n.name,hash:o})}return s}};function $e(r,e,t,s=0){if(s>10)return null;let n=r.refRead.get(e,t);return n?n.type==="direct"?n.hash:n.type==="symbolic"&&n.target?$e(r,e,n.target,s+1):null:null}var qr=`
|
|
49
49
|
CREATE TABLE IF NOT EXISTS git_objects (
|
|
50
50
|
repo_id TEXT NOT NULL,
|
|
51
51
|
hash TEXT NOT NULL,
|
|
@@ -62,7 +62,7 @@ CREATE TABLE IF NOT EXISTS git_refs (
|
|
|
62
62
|
target TEXT,
|
|
63
63
|
PRIMARY KEY (repo_id, name)
|
|
64
64
|
) WITHOUT ROWID;
|
|
65
|
-
`;function
|
|
65
|
+
`;function S(r){return{run:(...e)=>{r.run(...e)},get:(...e)=>r.get(...e)??null,all:(...e)=>r.all(...e)}}function zr(r){return{objInsert:S(r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)")),objRead:S(r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?")),objExists:S(r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1")),objPrefix:S(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?")),objDeleteAll:S(r.prepare("DELETE FROM git_objects WHERE repo_id = ?")),refRead:S(r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?")),refWrite:S(r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)")),refDelete:S(r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?")),refList:S(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?")),refListAll:S(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?")),refDeleteAll:S(r.prepare("DELETE FROM git_refs WHERE repo_id = ?"))}}var We=class{db;stmts;ingestTx;constructor(e){this.db=e,e.exec(qr),this.stmts=zr(e),this.ingestTx=e.transaction(t=>{for(let s of t)this.stmts.objInsert.run(s.repoId,s.hash,s.type,s.content)})}repo(e){return{objectStore:new Me(this.stmts,this.ingestTx,e),refStore:new Ge(this.stmts,this.db,e)}}async deleteRepo(e){this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e)}},Me=class{constructor(e,t,s){this.stmts=e;this.ingestTx=t;this.repoId=s;this.cache=new H}cache;async write(e,t){let s=_(e,t),n=await N(s);return this.stmts.objInsert.run(this.repoId,n,e,t),n}async read(e){let t=this.cache.get(e);if(t)return t;let s=this.stmts.objRead.get(this.repoId,e);if(!s)throw new Error(`object ${e} not found`);let n={type:s.type,content:new Uint8Array(s.content)};return this.cache.set(e,n),n}async exists(e){return this.stmts.objExists.get(this.repoId,e)!==null}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=await B(e,async a=>{let i=this.stmts.objRead.get(this.repoId,a);return i?{type:i.type,content:new Uint8Array(i.content)}:null}),o=n.map(a=>({repoId:this.repoId,hash:a.hash,type:a.type,content:a.content}));return this.ingestTx(o),n.length}async findByPrefix(e){return e.length<4?[]:this.stmts.objPrefix.all(this.repoId,`${e}*`).map(s=>s.hash)}},Ge=class{constructor(e,t,s){this.stmts=e;this.repoId=s;let n=e,o=s;this.casTx=t.transaction((a,i,f)=>{let c=n.refRead.get(o,a),l=null;if(c&&(c.type==="direct"?l=c.hash:c.type==="symbolic"&&c.target&&(l=Fe(n,o,c.target))),i===null){if(c!==null)return!1}else if(l!==i)return!1;return f===null?n.refDelete.run(o,a):f.type==="symbolic"?n.refWrite.run(o,a,"symbolic",null,f.target):n.refWrite.run(o,a,"direct",f.hash,null),!0})}casTx;async readRef(e){let t=this.stmts.refRead.get(this.repoId,e);return t?t.type==="symbolic"?{type:"symbolic",target:t.target}:{type:"direct",hash:t.hash}:null}async writeRef(e,t){let s=$(t);s.type==="symbolic"?this.stmts.refWrite.run(this.repoId,e,"symbolic",null,s.target):this.stmts.refWrite.run(this.repoId,e,"direct",s.hash,null)}async deleteRef(e){this.stmts.refDelete.run(this.repoId,e)}async compareAndSwapRef(e,t,s){return this.casTx(e,t,s)}async listRefs(e){let t;e?t=this.stmts.refList.all(this.repoId,`${e}*`):t=this.stmts.refListAll.all(this.repoId);let s=[];for(let n of t)if(n.type==="direct"&&n.hash)s.push({name:n.name,hash:n.hash});else if(n.type==="symbolic"&&n.target){let o=Fe(this.stmts,this.repoId,n.target);o&&s.push({name:n.name,hash:o})}return s}};function Fe(r,e,t,s=0){if(s>10)return null;let n=r.refRead.get(e,t);return n?n.type==="direct"?n.hash:n.type==="symbolic"&&n.target?Fe(r,e,n.target,s+1):null:null}function Xr(r){return{query:(e,t)=>r.query(e,t),async transaction(e){let t=await r.connect();try{await t.query("BEGIN");let n=await e({query:(o,a)=>t.query(o,a),transaction:()=>{throw new Error("nested transactions not supported")}});return await t.query("COMMIT"),n}catch(s){throw await t.query("ROLLBACK"),s}finally{t.release()}}}}var Kr=`
|
|
66
66
|
CREATE TABLE IF NOT EXISTS git_objects (
|
|
67
67
|
repo_id TEXT NOT NULL,
|
|
68
68
|
hash TEXT NOT NULL,
|
|
@@ -80,4 +80,4 @@ CREATE TABLE IF NOT EXISTS git_refs (
|
|
|
80
80
|
PRIMARY KEY (repo_id, name)
|
|
81
81
|
);
|
|
82
82
|
`,E={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",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)
|
|
83
|
-
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"},
|
|
83
|
+
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"},qe=class r{constructor(e){this.db=e}static async create(e){return await e.query(Kr),new r(e)}repo(e){return{objectStore:new ze(this.db,e),refStore:new Xe(this.db,e)}}async deleteRepo(e){await this.db.query(E.objDeleteAll,[e]),await this.db.query(E.refDeleteAll,[e])}},ze=class{constructor(e,t){this.db=e;this.repoId=t;this.cache=new H}cache;async write(e,t){let s=_(e,t),n=await N(s);return await this.db.query(E.objInsert,[this.repoId,n,e,t]),n}async read(e){let t=this.cache.get(e);if(t)return t;let{rows:s}=await this.db.query(E.objRead,[this.repoId,e]),n=s[0];if(!n)throw new Error(`object ${e} not found`);let o={type:n.type,content:new Uint8Array(n.content)};return this.cache.set(e,o),o}async exists(e){let{rows:t}=await this.db.query(E.objExists,[this.repoId,e]);return t.length>0}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=this.db,o=this.repoId,a=await B(e,async i=>{let{rows:f}=await n.query(E.objRead,[o,i]),c=f[0];return c?{type:c.type,content:new Uint8Array(c.content)}:null});return await n.transaction(async i=>{for(let f of a)await i.query(E.objInsert,[o,f.hash,f.type,f.content])}),a.length}async findByPrefix(e){if(e.length<4)return[];let{rows:t}=await this.db.query(E.objPrefix,[this.repoId,`${e}%`]);return t.map(s=>s.hash)}},Xe=class{constructor(e,t){this.db=e;this.repoId=t}async readRef(e){let{rows:t}=await this.db.query(E.refRead,[this.repoId,e]),s=t[0];return s?s.type==="symbolic"?{type:"symbolic",target:s.target}:{type:"direct",hash:s.hash}:null}async writeRef(e,t){let s=$(t);s.type==="symbolic"?await this.db.query(E.refWrite,[this.repoId,e,"symbolic",null,s.target]):await this.db.query(E.refWrite,[this.repoId,e,"direct",s.hash,null])}async deleteRef(e){await this.db.query(E.refDelete,[this.repoId,e])}async compareAndSwapRef(e,t,s){return this.db.transaction(async n=>{let{rows:o}=await n.query(E.refReadForUpdate,[this.repoId,e]),a=o[0]??null,i=null;if(a&&(a.type==="direct"?i=a.hash:a.type==="symbolic"&&a.target&&(i=await Ke(n,this.repoId,a.target))),t===null){if(a!==null)return!1}else if(i!==t)return!1;return s===null?await n.query(E.refDelete,[this.repoId,e]):s.type==="symbolic"?await n.query(E.refWrite,[this.repoId,e,"symbolic",null,s.target]):await n.query(E.refWrite,[this.repoId,e,"direct",s.hash,null]),!0})}async listRefs(e){let t;e?{rows:t}=await this.db.query(E.refList,[this.repoId,`${e}%`]):{rows:t}=await this.db.query(E.refListAll,[this.repoId]);let s=[];for(let n of t)if(n.type==="direct"&&n.hash)s.push({name:n.name,hash:n.hash});else if(n.type==="symbolic"&&n.target){let o=await Ke(this.db,this.repoId,n.target);o&&s.push({name:n.name,hash:o})}return s}};async function Ke(r,e,t,s=0){if(s>10)return null;let{rows:n}=await r.query(E.refRead,[e,t]),o=n[0];return o?o.type==="direct"?o.hash:o.type==="symbolic"&&o.target?Ke(r,e,o.target,s+1):null:null}export{We as BetterSqlite3Storage,Ne as BunSqliteStorage,Le as MemoryStorage,qe as PgStorage,$r as composeHooks,Nr as createGitServer,Mr as createStandardHooks,Br as toNodeHandler,Wr as withAuth,Xr as wrapPgPool};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "just-git",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.9",
|
|
4
4
|
"description": "Pure TypeScript git implementation: virtual filesystem client and embeddable server.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"build": "tsup",
|
|
49
49
|
"size": "tsup && bun -e \"const{gzipSync}=require('zlib'),{readFileSync}=require('fs'),b=readFileSync('dist/index.js'),g=gzipSync(b);console.log('dist/index.js '+((b.length/1024).toFixed(1))+' kB');console.log('gzipped '+((g.length/1024).toFixed(1))+' kB')\"",
|
|
50
50
|
"prepublishOnly": "bun run build",
|
|
51
|
-
"check": "bunx tsc --noEmit && oxfmt && oxlint --fix",
|
|
51
|
+
"check": "bunx tsc --noEmit && bunx tsc --noEmit -p test/tsconfig.json && oxfmt && oxlint --fix",
|
|
52
52
|
"oracle": "bun test/oracle/cli.ts",
|
|
53
53
|
"sandbox": "bun scripts/sandbox.ts",
|
|
54
54
|
"knip": "knip",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@types/node": "^25.4.0",
|
|
67
67
|
"@types/pg": "^8.18.0",
|
|
68
68
|
"better-sqlite3": "^12.8.0",
|
|
69
|
-
"just-bash": "^2.
|
|
69
|
+
"just-bash": "^2.14.0",
|
|
70
70
|
"knip": "^5.86.0",
|
|
71
71
|
"oxfmt": "^0.38.0",
|
|
72
72
|
"oxlint": "^1.53.0",
|