just-git 1.4.0 → 1.4.1

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/dist/index.js CHANGED
@@ -776,7 +776,7 @@ ${m}`,exitCode:0}}oe();ae();Cr();ge();ss();function Cd(e,t){e.command("tag",{des
776
776
  `)}if(n.list)return xd(s,n.name||void 0);if(n.name){if(!Ic(n.name))return O(`'${n.name}' is not a valid tag name`);let i=n.commit,a;if(i){let d=await wt(s,i,`Failed to resolve '${i}' as a valid ref.`);if(M(d))return d;a=d}else if(a=await Y(s),!a)return O("Failed to resolve 'HEAD' as a valid ref.");let c=`refs/tags/${n.name}`;if(await B(s,c)&&!n.force)return O(`tag '${n.name}' already exists`);if(n.annotate||n.message){if(!n.message)return O("no tag message specified (use -m)");let d=await nt(s,r.env);if(M(d))return d;let m=Mt(n.message),u=Cc({type:"tag",object:a,objectType:"commit",name:n.name,tagger:d,message:m}),h=await He(s,"tag",u);await Z(s,c,h)}else await Z(s,c,a);return{stdout:"",stderr:"",exitCode:0}}return xd(s)}})}async function xd(e,t){let n=await pe(e,"refs/tags");if(n.length===0)return{stdout:"",stderr:"",exitCode:0};let r=n.map(o=>o.name.replace("refs/tags/",""));return t&&(r=r.filter(o=>on(t,o,0)===0)),r.length===0?{stdout:"",stderr:"",exitCode:0}:{stdout:`${r.join(`
777
777
  `)}
778
778
  `,stderr:"",exitCode:0}}var Pd=new Set(["am","annotate","apply","archive","bugreport","bundle","cat-file","check-ignore","check-mailmap","check-ref-format","checkout-index","cherry","commit-tree","count-objects","credential","daemon","diff-files","diff-index","diff-tree","difftool","fast-export","fast-import","filter-branch","for-each-ref","format-patch","fsck","hash-object","instaweb","interpret-trailers","log--hierarchical","ls-remote","ls-tree","maintenance","merge-base","merge-tree","mergetool","multi-pack-index","name-rev","notes","pack-objects","pack-refs","patch-id","prune","range-diff","read-tree","receive-pack","replace","request-pull","rerere","rev-list","send-email","send-pack","shortlog","show-branch","show-ref","sparse-checkout","stash--helper","stripspace","submodule","symbolic-ref","unpack-objects","update-index","update-ref","upload-pack","var","verify-commit","verify-pack","verify-tag","whatchanged","worktree","write-tree"]),Ow={init:(e,t)=>Ml(e,t),clone:(e,t)=>cl(e,t),describe:(e,t)=>ll(e,t),fetch:(e,t)=>$l(e,t),pull:(e,t)=>ed(e,t),push:(e,t)=>td(e,t),add:(e,t)=>Vc(e,t),blame:(e,t)=>Sf(e,t),commit:(e,t)=>dl(e,t),status:(e,t)=>yd(e,t),log:(e,t)=>ql(e,t),branch:(e,t)=>vf(e,t),tag:(e,t)=>Cd(e,t),checkout:(e,t)=>Hf(e,t),diff:(e,t)=>kl(e,t),reset:(e,t)=>od(e,t),merge:(e,t)=>Vl(e,t),"cherry-pick":(e,t)=>Kf(e,t),revert:(e,t)=>fd(e,t),rebase:(e,t)=>Ql(e,t),mv:(e,t)=>Yl(e,t),rm:(e,t)=>ld(e,t),remote:(e,t)=>rd(e,t),config:(e,t)=>pl(e,t),show:(e,t)=>dd(e,t),stash:(e,t)=>bd(e,t),"rev-parse":(e,t)=>cd(e,t),"ls-files":(e,t)=>Kl(e,t),clean:(e,t)=>Vf(e,t),switch:(e,t)=>kd(e,t),restore:(e,t)=>ad(e,t),reflog:(e,t)=>nd(e,t),repack:(e,t)=>Sl(e,t),gc:(e,t)=>Tl(e,t),bisect:(e,t)=>pf(e,t),grep:(e,t)=>Dl(e,t)};function $d(e){let t=Vo("git",{description:"Git command"});for(let n of Object.values(Ow))n(t,e);return t.command("help",{description:"Display help information",args:[q.string().name("command").describe("Command to get help for").optional()],handler:async n=>{let r=n.command;if(!r)return{stdout:br(t),stderr:"",exitCode:0};let o=t.children.get(r);return o?{stdout:br(o),stderr:"",exitCode:0}:{stdout:"",stderr:`git: no help available for '${r}'
779
- `,exitCode:1}}}),t}var Iw="1.4.0";function Sw(e,t){if(!e)return t;let n=e.locked?"locked":"defaults",r={"user.name":e.name,"user.email":e.email};return t?{...t,[n]:{...r,...t[n]}}:{[n]:r}}var Bo=class{name="git";defaultFs;defaultCwd;blocked;hooks;inner;locks=new WeakMap;async withLock(t,n){let r=this.locks.get(t)??Promise.resolve(),o,s=new Promise(i=>{o=i});this.locks.set(t,s),await r;try{return await n()}finally{o()}}constructor(t){this.defaultFs=t?.fs,this.defaultCwd=t?.cwd??"/",this.hooks=t?.hooks,this.blocked=t?.disabled?.length?new Set(t.disabled):null;let n=t?.network,r=Sw(t?.identity,t?.config),o={hooks:t?.hooks,credentialProvider:t?.credentials,identityOverride:t?.identity,fetchFn:typeof n=="object"?n.fetch:void 0,networkPolicy:n,resolveRemote:t?.resolveRemote,...t?.objectStore?{objectStore:t.objectStore}:{},...t?.refStore?{refStore:t.refStore}:{},...t?.gitDir?{gitDir:t.gitDir,workTree:this.defaultCwd}:{},...r?{configOverrides:r}:{}};this.inner=$d(o).toCommand()}exec=async(t,n)=>{let r=n?.fs??this.defaultFs;if(!r)throw new Error("No filesystem: pass `fs` in exec() options or in createGit()");let o=n?.cwd??this.defaultCwd,s=Tw(t),i=new Map;if(n?.env)for(let[a,c]of Object.entries(n.env))i.set(a,c);return this.execute(s,{fs:r,cwd:o,env:i,stdin:n?.stdin??""})};execute=(t,n)=>this.withLock(n.fs,async()=>{let r=t[0]??"";if(r==="--version"||r==="version")return{stdout:`just-git version ${Iw} (virtual git implementation)
779
+ `,exitCode:1}}}),t}var Iw="1.4.1";function Sw(e,t){if(!e)return t;let n=e.locked?"locked":"defaults",r={"user.name":e.name,"user.email":e.email};return t?{...t,[n]:{...r,...t[n]}}:{[n]:r}}var Bo=class{name="git";defaultFs;defaultCwd;blocked;hooks;inner;locks=new WeakMap;async withLock(t,n){let r=this.locks.get(t)??Promise.resolve(),o,s=new Promise(i=>{o=i});this.locks.set(t,s),await r;try{return await n()}finally{o()}}constructor(t){this.defaultFs=t?.fs,this.defaultCwd=t?.cwd??"/",this.hooks=t?.hooks,this.blocked=t?.disabled?.length?new Set(t.disabled):null;let n=t?.network,r=Sw(t?.identity,t?.config),o={hooks:t?.hooks,credentialProvider:t?.credentials,identityOverride:t?.identity,fetchFn:typeof n=="object"?n.fetch:void 0,networkPolicy:n,resolveRemote:t?.resolveRemote,...t?.objectStore?{objectStore:t.objectStore}:{},...t?.refStore?{refStore:t.refStore}:{},...t?.gitDir?{gitDir:t.gitDir,workTree:this.defaultCwd}:{},...r?{configOverrides:r}:{}};this.inner=$d(o).toCommand()}exec=async(t,n)=>{let r=n?.fs??this.defaultFs;if(!r)throw new Error("No filesystem: pass `fs` in exec() options or in createGit()");let o=n?.cwd??this.defaultCwd,s=Tw(t),i=new Map;if(n?.env)for(let[a,c]of Object.entries(n.env))i.set(a,c);return this.execute(s,{fs:r,cwd:o,env:i,stdin:n?.stdin??""})};execute=(t,n)=>this.withLock(n.fs,async()=>{let r=t[0]??"";if(r==="--version"||r==="version")return{stdout:`just-git version ${Iw} (virtual git implementation)
780
780
  `,stderr:"",exitCode:0};if(this.blocked?.has(r))return{stdout:"",stderr:`git: '${r}' is not available in this environment
781
781
  `,exitCode:1};if(r&&Pd.has(r))return{stdout:"",stderr:`git: '${r}' is not implemented. Run 'git help' for available commands.
782
782
  `,exitCode:1};if(this.hooks?.beforeCommand){let s=await this.hooks.beforeCommand({command:r,args:t.slice(1),fs:n.fs,cwd:n.cwd,env:n.env});if(le(s))return{stdout:"",stderr:s.message??"",exitCode:1}}let o=await this.inner.execute(t,n);return this.hooks?.afterCommand&&await this.hooks.afterCommand({command:r,args:t.slice(1),result:o}),o})};function Tw(e){let t=[],n="",r=0;for(;r<e.length;){let o=e[r];if(o==='"'){for(r++;r<e.length&&e[r]!=='"';){if(e[r]==="\\"&&r+1<e.length){let s=e[r+1];if(s==='"'||s==="\\"){n+=s,r+=2;continue}}n+=e[r],r++}r++}else if(o==="'"){for(r++;r<e.length&&e[r]!=="'";)n+=e[r],r++;r++}else o===" "||o===" "?(n.length>0&&(t.push(n),n=""),r++):(n+=o,r++)}return n.length>0&&t.push(n),t.length>0&&t[0]==="git"&&t.shift(),t}function vw(e){return new Bo(e)}var Od=new TextEncoder,Aw=new TextDecoder;function hn(e){let t=[];for(let n of e.split("/"))n==="."||n===""||(n===".."?t.pop():t.push(n));return"/"+t.join("/")}function Wo(e){let t=e.lastIndexOf("/");return t<=0?"/":e.slice(0,t)}var Ra=class{data=new Map;constructor(t){if(this.data.set("/",{type:"directory",mode:16877,mtime:new Date}),t)for(let[n,r]of Object.entries(t)){let o=hn(n);this.ensureParents(o),this.data.set(o,{type:"file",content:typeof r=="string"?Od.encode(r):r,mode:33188,mtime:new Date})}}ensureParents(t){let n=Wo(t);n!=="/"&&(this.data.has(n)||(this.ensureParents(n),this.data.set(n,{type:"directory",mode:16877,mtime:new Date})))}resolve(t){let n="",r=new Set;for(let o of hn(t).slice(1).split("/")){n=`${n}/${o}`;let s=0,i=this.data.get(n);for(;i?.type==="symlink"&&s<40;){if(r.has(n))throw new Error(`ELOOP: too many levels of symbolic links, '${t}'`);r.add(n);let a=i.target;n=a.startsWith("/")?hn(a):hn(Wo(n)+"/"+a),i=this.data.get(n),s++}if(s>=40)throw new Error(`ELOOP: too many levels of symbolic links, '${t}'`)}return n}resolveParent(t){let n=hn(t);if(n==="/")return"/";let r=n.slice(1).split("/");if(r.length<=1)return n;let o="",s=new Set;for(let i=0;i<r.length-1;i++){o=`${o}/${r[i]}`;let a=this.data.get(o),c=0;for(;a?.type==="symlink"&&c<40;){if(s.has(o))throw new Error(`ELOOP: too many levels of symbolic links, '${t}'`);s.add(o);let f=a.target;o=f.startsWith("/")?hn(f):hn(Wo(o)+"/"+f),a=this.data.get(o),c++}}return`${o}/${r[r.length-1]}`}async readFile(t){return Aw.decode(await this.readFileBuffer(t))}async readFileBuffer(t){let n=this.data.get(this.resolve(t));if(!n)throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content}async writeFile(t,n){let r=this.resolve(t);this.ensureParents(r),this.data.set(r,{type:"file",content:typeof n=="string"?Od.encode(n):n,mode:33188,mtime:new Date})}async exists(t){try{return this.data.has(this.resolve(t))}catch{return!1}}async stat(t){let n=this.data.get(this.resolve(t));if(!n)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);return{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:n.type==="file"?n.content.byteLength:0,mtime:n.mtime}}async lstat(t){let n=this.resolveParent(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);return{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:r.type==="symlink",mode:r.mode,size:r.type==="file"?r.content.byteLength:r.type==="symlink"?r.target.length:0,mtime:r.mtime}}async mkdir(t,n){let r=hn(t);if(this.data.has(r)){if(this.data.get(r).type!=="directory")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${t}'`);return}let o=Wo(r);if(o!=="/"&&!this.data.has(o))if(n?.recursive)await this.mkdir(o,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(r,{type:"directory",mode:16877,mtime:new Date})}async readdir(t){let n=this.resolve(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);let o=n==="/"?"/":`${n}/`,s=new Set;for(let i of this.data.keys())if(i!==n&&i.startsWith(o)){let c=i.slice(o.length).split("/")[0];c&&s.add(c)}return[...s].sort()}async rm(t,n){let r=hn(t),o=this.data.get(r);if(!o){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(o.type==="directory"){if(!n?.recursive&&(await this.readdir(r)).length>0)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);let s=r==="/"?"/":`${r}/`;for(let i of[...this.data.keys()])i.startsWith(s)&&this.data.delete(i)}this.data.delete(r)}async readlink(t){let n=this.resolveParent(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}async symlink(t,n){let r=hn(n);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureParents(r),this.data.set(r,{type:"symlink",target:t,mode:40960,mtime:new Date})}};Gn();export{Bo as Git,Ra as MemoryFileSystem,Th as composeGitHooks,vw as createGit,tr as findRepo,le as isRejection};
@@ -1,5 +1,5 @@
1
1
  import { i as ObjectId, W as RawObject, X as Ref, g as GitRepo, $ as Rejection, N as NetworkPolicy } from '../hooks-C7c_BLqp.js';
2
- import { b as CommitOptions } from '../writing-CnM1ufDP.js';
2
+ import { b as CommitOptions, c as CommitResult } from '../writing-CnM1ufDP.js';
3
3
 
4
4
  /** Shallow boundary delta: what to add/remove from `.git/shallow`. */
5
5
  interface ShallowUpdate {
@@ -443,7 +443,7 @@ interface GitServer {
443
443
  * {@link asNetwork} instead.
444
444
  *
445
445
  * ```ts
446
- * const hash = await server.commit("my-repo", {
446
+ * const { hash } = await server.commit("my-repo", {
447
447
  * files: { "README.md": "# Hello\n" },
448
448
  * message: "auto-fix",
449
449
  * author: { name: "Bot", email: "bot@example.com" },
@@ -454,11 +454,11 @@ interface GitServer {
454
454
  * For lower-level control (e.g. constructing trees manually, multi-ref
455
455
  * updates), use `buildCommit()` + {@link updateRefs} directly.
456
456
  *
457
- * @returns The new commit's hash.
457
+ * @returns The new commit's hash and parent hash.
458
458
  * @throws If the repo does not exist, the server is shutting down,
459
459
  * or a concurrent write moved the branch.
460
460
  */
461
- commit(repoId: string, options: CommitOptions): Promise<string>;
461
+ commit(repoId: string, options: CommitOptions): Promise<CommitResult>;
462
462
  /**
463
463
  * Node.js `http.createServer` compatible handler.
464
464
  *
@@ -1,4 +1,4 @@
1
- var je=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});function U(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var ne="0000000000000000000000000000000000000000",Pt=(()=>{let r=new Array(256);for(let e=0;e<256;e++)r[e]=(e>>4).toString(16)+(e&15).toString(16);return r})();function Se(r){let e="";for(let t=0;t<20;t++)e+=Pt[r[t]];return e}function se(r,e){let t="";for(let n=0;n<20;n++)t+=Pt[r[e+n]];return t}function ae(r){let e=new Uint8Array(20);for(let t=0;t<20;t++)e[t]=parseInt(r.slice(t*2,t*2+2),16);return e}var Nr=new Set(["tree","commit","tag"]),Ie=class{map=new Map;currentBytes=0;maxBytes;constructor(e=16*1024*1024){this.maxBytes=e}get(e){return this.map.get(e)}set(e,t){if(!Nr.has(t.type))return;let n=t.content.byteLength;if(!(n>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+n>this.maxBytes&&this.map.size>0;){let s=this.map.keys().next().value;this.currentBytes-=this.map.get(s).content.byteLength,this.map.delete(s)}this.map.set(e,t),this.currentBytes+=n}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var Br=new TextEncoder;function Fe(r){return typeof r=="string"?Br.encode(r):r}function Mr(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(Fe(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=je(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(n){return e.update(Fe(n)),t},hex:()=>Promise.resolve(e.digest("hex"))};return t}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let r=[],e={update(t){return r.push(Fe(t)),e},async hex(){let t=0;for(let o of r)t+=o.byteLength;let n=new Uint8Array(t),s=0;for(let o of r)n.set(o,s),s+=o.byteLength;let a=await crypto.subtle.digest("SHA-1",n);return Se(new Uint8Array(a))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var vt=Mr(),z=vt;async function jt(r){return vt().update(r).hex()}var N=Uint8Array,K=Uint16Array,$r=Int32Array,St=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),It=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Wr=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Tt=(r,e)=>{let t=new K(31);for(let s=0;s<31;++s)t[s]=e+=1<<r[s-1];let n=new $r(t[30]);for(let s=1;s<30;++s)for(let a=t[s];a<t[s+1];++a)n[a]=a-t[s]<<5|s;return{b:t,r:n}},{b:Ut}=Tt(St,2);Ut[28]=258;var{b:_r}=Tt(It,0),Ve=new K(32768);for(let r=0;r<32768;++r){let e=(r&43690)>>1|(r&21845)<<1;e=(e&52428)>>2|(e&13107)<<2,e=(e&61680)>>4|(e&3855)<<4,Ve[r]=((e&65280)>>8|(e&255)<<8)>>1}var ie=(r,e,t)=>{let n=r.length,s=0,a=new K(e);for(;s<n;++s)r[s]&&++a[r[s]-1];let o=new K(e);for(s=1;s<e;++s)o[s]=o[s-1]+a[s-1]<<1;let i;if(t){i=new K(1<<e);let f=15-e;for(s=0;s<n;++s)if(r[s]){let c=s<<4|r[s],l=e-r[s],d=o[r[s]-1]++<<l;for(let u=d|(1<<l)-1;d<=u;++d)i[Ve[d]>>f]=c}}else for(i=new K(n),s=0;s<n;++s)r[s]&&(i[s]=Ve[o[r[s]-1]++]>>15-r[s]);return i},oe=new N(288);for(let r=0;r<144;++r)oe[r]=8;for(let r=144;r<256;++r)oe[r]=9;for(let r=256;r<280;++r)oe[r]=7;for(let r=280;r<288;++r)oe[r]=8;var Lt=new N(32);for(let r=0;r<32;++r)Lt[r]=5;var Fr=ie(oe,9,1),Gr=ie(Lt,5,1),Ge=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},D=(r,e,t)=>{let n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},qe=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},Ct=r=>(r+7)/8|0,qr=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new N(r.subarray(e,t))),B=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},Ht=(r,e,t,n)=>{let s=r.length,a=n?n.length:0;if(!s||e.f&&!e.l)return t||new N(0);let o=!t,i=o||e.i!=2,f=e.i;o&&(t=new N(s*3));let c=y=>{let b=t.length;if(y>b){let A=new N(Math.max(b*2,y));A.set(t),t=A}},l=e.f||0,d=e.p||0,u=e.b||0,h=e.l,p=e.d,m=e.m,R=e.n,E=s*8;do{if(!h){l=D(r,d,1);let w=D(r,d+1,3);if(d+=3,w)if(w==1)h=Fr,p=Gr,m=9,R=5;else if(w==2){let g=D(r,d,31)+257,O=D(r,d+10,15)+4,k=g+D(r,d+5,31)+1;d+=14;let v=new N(k),P=new N(19);for(let M=0;M<O;++M)P[Wr[M]]=D(r,d+M*3,7);d+=O*3;let S=Ge(P),I=(1<<S)-1,T=ie(P,S,1);for(let M=0;M<k;){let Et=T[D(r,d,I)];d+=Et&15;let re=Et>>4;if(re<16)v[M++]=re;else{let kt=0,ve=0;for(re==16?(ve=3+D(r,d,3),d+=2,kt=v[M-1]):re==17?(ve=3+D(r,d,7),d+=3):re==18&&(ve=11+D(r,d,127),d+=7);ve--;)v[M++]=kt}}let $=v.subarray(0,g),W=v.subarray(g);m=Ge($),R=Ge(W),h=ie($,m,1),p=ie(W,R,1)}else B(1);else{let g=Ct(d)+4,O=r[g-4]|r[g-3]<<8,k=g+O;if(k>s){f&&B(0);break}i&&c(u+O),t.set(r.subarray(g,k),u),e.b=u+=O,e.p=d=k*8,e.f=l;continue}if(d>E){f&&B(0);break}}i&&c(u+131072);let y=(1<<m)-1,b=(1<<R)-1,A=d;for(;;A=d){let w=h[qe(r,d)&y],g=w>>4;if(d+=w&15,d>E){f&&B(0);break}if(w||B(2),g<256)t[u++]=g;else if(g==256){A=d,h=null;break}else{let O=g-254;if(g>264){let I=g-257,T=St[I];O=D(r,d,(1<<T)-1)+Ut[I],d+=T}let k=p[qe(r,d)&b],v=k>>4;k||B(3),d+=k&15;let P=_r[v];if(v>3){let I=It[v];P+=qe(r,d)&(1<<I)-1,d+=I}if(d>E){f&&B(0);break}i&&c(u+131072);let S=u+O;if(u<P){let I=a-P,T=Math.min(P,S);for(I+u<0&&B(3);u<T;++u)t[u]=n[I+u]}for(;u<S;++u)t[u]=t[u-P]}}e.l=h,e.p=A,e.b=u,e.f=l,h&&(l=1,e.m=m,e.d=p,e.n=R)}while(!l);return u!=t.length&&o?qr(t,0,u):t.subarray(0,u)},Dt=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&B(0,"invalid zlib data"),r[1]&32&&B(0,"zlib dictionaries are not supported"),2);function Nt(r){let e=Dt(r);return Ht(r.subarray(e,-4),{i:2})}function ze(r){let e=Dt(r),t={i:2},n=Ht(r.subarray(e),t),s=Ct(t.p);return{result:n,bytesConsumed:e+s+4}}async function Vr(){let r;if(!(typeof document<"u"))try{r=je(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let n=null;try{let s=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});s?.engine&&typeof s.engine.bytesWritten=="number"&&(n=a=>{let o=r.inflateSync(a,{info:!0});return{result:new Uint8Array(o.buffer),bytesConsumed:o.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(r.deflateSync(s)),inflateSync:s=>new Uint8Array(r.inflateSync(s)),inflateWithConsumed:n??ze}}let t;return typeof globalThis.CompressionStream=="function"?t=async n=>{let s=new CompressionStream("deflate"),a=s.writable.getWriter();return a.write(n),a.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:Nt,inflateWithConsumed:ze}}var zr=null;function Bt(){return zr??=Vr()}async function Te(r){return await(await Bt()).deflateSync(r)}async function Ke(r,e){let t=await Bt(),{result:n,bytesConsumed:s}=t.inflateWithConsumed(r);if(n.byteLength!==e)throw new Error(`Inflate size mismatch: got ${n.byteLength}, expected ${e}`);return{result:n,bytesConsumed:s}}var Y=1346454347,Le=2,Wt=1,_t=2,Ft=3,Gt=4,_=6,ce=7,qt={[Wt]:"commit",[_t]:"tree",[Ft]:"blob",[Gt]:"tag"},Vt={commit:Wt,tree:_t,blob:Ft,tag:Gt};async function zt(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),n=t.getUint32(0);if(n!==Y)throw new Error(`Invalid pack signature: 0x${n.toString(16)} (expected 0x${Y.toString(16)})`);let s=t.getUint32(4);if(s!==Le)throw new Error(`Unsupported pack version: ${s}`);if(r.byteLength>=32){let c=se(r,r.byteLength-20),l=z();l.update(r.subarray(0,r.byteLength-20));let d=await l.hex();if(d!==c)throw new Error(`pack checksum mismatch: expected ${c}, computed ${d}`)}let a=t.getUint32(8),o=[],i=12;for(let c=0;c<a;c++){let l=await Kr(r,i);o.push(l),i=l.nextOffset}return(await Xr(o,e)).map((c,l)=>({...c,offset:o[l].headerOffset,nextOffset:o[l].nextOffset}))}async function Kr(r,e){let t=e,n=r[e++],s=n>>4&7,a=n&15,o=4;for(;n&128;)n=r[e++],a|=(n&127)<<o,o+=7;let i,f;if(s===_){let d=r[e++];for(i=d&127;d&128;)i+=1,d=r[e++],i=(i<<7)+(d&127);i=t-i}else s===ce&&(f=se(r,e),e+=20);let{result:c,bytesConsumed:l}=await Ke(r.subarray(e),a);return{headerOffset:t,typeNum:s,inflated:c,baseOffset:i,baseHash:f,nextOffset:e+l}}var Mt=50;async function Xr(r,e){let t=new Map;for(let a=0;a<r.length;a++)t.set(r[a].headerOffset,a);let n=new Array(r.length).fill(null);async function s(a,o=0){if(o>Mt)throw new Error(`delta chain depth ${o} exceeds limit of ${Mt}`);let i=n[a];if(i)return i;let f=r[a];if(f.typeNum!==_&&f.typeNum!==ce){let h=qt[f.typeNum];if(!h)throw new Error(`Unknown object type: ${f.typeNum}`);let p={type:h,content:f.inflated,hash:await X(h,f.inflated)};return n[a]=p,p}if(f.typeNum===_){let h=t.get(f.baseOffset);if(h===void 0)throw new Error(`OFS_DELTA base not found at offset ${f.baseOffset}`);let p=await s(h,o+1),m=Ue(p.content,f.inflated),R={type:p.type,content:m,hash:await X(p.type,m)};return n[a]=R,R}let c=await Yr(r,n,f.baseHash,s),l;if(c!==void 0)l=await s(c,o+1);else if(e){let h=await e(f.baseHash);h&&(l=h)}if(!l)throw new Error(`REF_DELTA base not found for hash ${f.baseHash}`);let d=Ue(l.content,f.inflated),u={type:l.type,content:d,hash:await X(l.type,d)};return n[a]=u,u}for(let a=0;a<r.length;a++)await s(a);return n}async function Yr(r,e,t,n){for(let s=0;s<e.length;s++)if(e[s]?.hash===t)return s;for(let s=0;s<r.length;s++){let a=r[s];if(a.typeNum!==_&&a.typeNum!==ce&&(await n(s)).hash===t)return s}}var Xe=class{buf=new Uint8Array(0);iter;eof=!1;_bytesRead=0;hasher;constructor(e,t=!1){this.iter=e[Symbol.asyncIterator](),this.hasher=t?z():null}get bytesRead(){return this._bytesRead}async pullMore(){if(this.eof)return!1;let{value:e,done:t}=await this.iter.next();if(t||!e)return this.eof=!0,!1;if(this.buf.byteLength===0)this.buf=new Uint8Array(e);else{let n=new Uint8Array(this.buf.byteLength+e.byteLength);n.set(this.buf),n.set(e,this.buf.byteLength),this.buf=n}return!0}async ensure(e){for(;this.buf.byteLength<e;)if(!await this.pullMore())throw new Error(`Unexpected end of pack data: needed ${e} bytes, have ${this.buf.byteLength}`)}consume(e){let t=new Uint8Array(this.buf.subarray(0,e));return this.hasher?.update(t),this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async readByte(){return await this.ensure(1),this.consume(1)[0]}async readExact(e){return await this.ensure(e),this.consume(e)}async readRaw(e){await this.ensure(e);let t=new Uint8Array(this.buf.subarray(0,e));return this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async inflateNext(e){for(this.buf.byteLength===0&&!this.eof&&await this.pullMore();;)try{let{result:t,bytesConsumed:n}=await Ke(this.buf,e);return this.consume(n),t}catch{if(!this.eof&&await this.pullMore())continue;throw new Error(`Failed to inflate pack entry at byte ${this._bytesRead} (expected ${e} bytes)`)}}async hashHex(){if(!this.hasher)throw new Error("Hashing not enabled");return this.hasher.hex()}};async function*Kt(r,e){let t=new Xe(r,!0),n=await t.readExact(12),s=new DataView(n.buffer,n.byteOffset,n.byteLength),a=s.getUint32(0);if(a!==Y)throw new Error(`Invalid pack signature: 0x${a.toString(16)} (expected 0x${Y.toString(16)})`);let o=s.getUint32(4);if(o!==Le)throw new Error(`Unsupported pack version: ${o}`);let i=s.getUint32(8),f=new Map,c=new Map;for(let u=0;u<i;u++){let h=t.bytesRead,p=await t.readByte(),m=p>>4&7,R=p&15,E=4;for(;p&128;)p=await t.readByte(),R|=(p&127)<<E,E+=7;let y,b;if(m===_){let g=await t.readByte();for(y=g&127;g&128;)y+=1,g=await t.readByte(),y=(y<<7)+(g&127);y=h-y}else if(m===ce){let g=await t.readExact(20);b=se(g,0)}let A=await t.inflateNext(R),w;if(m!==_&&m!==ce){let g=qt[m];if(!g)throw new Error(`Unknown object type: ${m}`);w={type:g,content:A,hash:await X(g,A)}}else if(m===_){let g=f.get(y);if(!g)throw new Error(`OFS_DELTA base not found at offset ${y}`);let O=Ue(g.content,A);w={type:g.type,content:O,hash:await X(g.type,O)}}else{let g=c.get(b);if(!g&&e&&(g=await e(b)??void 0),!g)throw new Error(`REF_DELTA base not found for hash ${b}`);let O=Ue(g.content,A);w={type:g.type,content:O,hash:await X(g.type,O)}}f.set(h,w),c.set(w.hash,w),yield w}let l=se(await t.readRaw(20),0),d=await t.hashHex();if(d!==l)throw new Error(`pack checksum mismatch: expected ${l}, computed ${d}`)}function Ue(r,e){let t=0,{value:n,newPos:s}=$t(e,t);if(t=s,n!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${n}, got ${r.byteLength}`);let{value:a,newPos:o}=$t(e,t);t=o;let i=new Uint8Array(a),f=0;for(;t<e.byteLength;){let c=e[t++];if(c&128){let l=0,d=0;c&1&&(l=e[t++]),c&2&&(l|=e[t++]<<8),c&4&&(l|=e[t++]<<16),c&8&&(l|=e[t++]<<24),c&16&&(d=e[t++]),c&32&&(d|=e[t++]<<8),c&64&&(d|=e[t++]<<16),d===0&&(d=65536),i.set(r.subarray(l,l+d),f),f+=d}else if(c>0)i.set(e.subarray(t,t+c),f),f+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(f!==a)throw new Error(`Delta produced ${f} bytes, expected ${a}`);return i}async function Z(r){let e=[],t=new Map,n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Y),s.setUint32(4,Le),s.setUint32(8,r.length),e.push(n);let a=12,o=[];for(let i of r){let f=a;t.set(i.hash,a);let c=i.delta&&i.deltaBaseHash?t.get(i.deltaBaseHash):void 0;if(i.delta&&c!==void 0){let l=Ye(_,i.delta.byteLength),d=Jr(a-c),u=await Te(i.delta);e.push(l,d,u),a+=l.byteLength+d.byteLength+u.byteLength}else{let l=Vt[i.type],d=Ye(l,i.content.byteLength),u=await Te(i.content);e.push(d,u),a+=d.byteLength+u.byteLength}o.push({hash:i.hash,offset:f,nextOffset:a})}return{data:await Zr(e),entries:o}}async function*Xt(r,e){let t=z(),n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Y),s.setUint32(4,Le),s.setUint32(8,r),t.update(n),yield n;for await(let a of e){let o=Vt[a.type],i=Ye(o,a.content.byteLength),f=await Te(a.content);t.update(i),t.update(f),yield Qr(i,f)}yield ae(await t.hex())}async function Zr(r){let e=0;for(let o of r)e+=o.byteLength;e+=20;let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.byteLength;let s=z();s.update(t.subarray(0,n));let a=await s.hex();return t.set(ae(a),n),t}function Jr(r){let e=[];e.push(r&127);let t=r>>>7;for(;t>0;)e.unshift(128|--t&127),t>>>=7;return new Uint8Array(e)}function Ye(r,e){let t=[],n=r<<4|e&15;for(e>>=4;e>0;)t.push(n|128),n=e&127,e>>=7;return t.push(n),new Uint8Array(t)}function $t(r,e){let t=0,n=0,s;do s=r[e++],t|=(s&127)<<n,n+=7;while(s&128);return{value:t,newPos:e}}function Qr(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var en=new TextEncoder;async function X(r,e){let t=en.encode(`${r} ${e.byteLength}\0`),n=z();return n.update(t),n.update(e),n.hex()}var tn=new TextEncoder,us=new TextDecoder;function Yt(r,e){let t=tn.encode(`${r} ${e.byteLength}\0`),n=new Uint8Array(t.byteLength+e.byteLength);return n.set(t),n.set(e,t.byteLength),n}function fe(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let n=r.slice(0,e).trimEnd(),s=r.slice(e+1,t),a=r.slice(t+2),[o="0",i="+0000"]=a.split(" "),f=parseInt(o,10);return{name:n,email:s,timestamp:f,timezone:i}}function Ce(r){return`${r.name} <${r.email}> ${r.timestamp} ${r.timezone}`}var rn=new TextEncoder,nn=new TextDecoder;function le(r){let e=nn.decode(r),t=e.indexOf(`
1
+ var je=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});function U(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var ne="0000000000000000000000000000000000000000",Pt=(()=>{let r=new Array(256);for(let e=0;e<256;e++)r[e]=(e>>4).toString(16)+(e&15).toString(16);return r})();function Se(r){let e="";for(let t=0;t<20;t++)e+=Pt[r[t]];return e}function se(r,e){let t="";for(let n=0;n<20;n++)t+=Pt[r[e+n]];return t}function ae(r){let e=new Uint8Array(20);for(let t=0;t<20;t++)e[t]=parseInt(r.slice(t*2,t*2+2),16);return e}var Nr=new Set(["tree","commit","tag"]),Ie=class{map=new Map;currentBytes=0;maxBytes;constructor(e=16*1024*1024){this.maxBytes=e}get(e){return this.map.get(e)}set(e,t){if(!Nr.has(t.type))return;let n=t.content.byteLength;if(!(n>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+n>this.maxBytes&&this.map.size>0;){let s=this.map.keys().next().value;this.currentBytes-=this.map.get(s).content.byteLength,this.map.delete(s)}this.map.set(e,t),this.currentBytes+=n}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var Br=new TextEncoder;function Fe(r){return typeof r=="string"?Br.encode(r):r}function Mr(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(Fe(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=je(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(n){return e.update(Fe(n)),t},hex:()=>Promise.resolve(e.digest("hex"))};return t}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let r=[],e={update(t){return r.push(Fe(t)),e},async hex(){let t=0;for(let o of r)t+=o.byteLength;let n=new Uint8Array(t),s=0;for(let o of r)n.set(o,s),s+=o.byteLength;let a=await crypto.subtle.digest("SHA-1",n);return Se(new Uint8Array(a))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var vt=Mr(),z=vt;async function jt(r){return vt().update(r).hex()}var N=Uint8Array,K=Uint16Array,$r=Int32Array,St=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),It=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Wr=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Tt=(r,e)=>{let t=new K(31);for(let s=0;s<31;++s)t[s]=e+=1<<r[s-1];let n=new $r(t[30]);for(let s=1;s<30;++s)for(let a=t[s];a<t[s+1];++a)n[a]=a-t[s]<<5|s;return{b:t,r:n}},{b:Ut}=Tt(St,2);Ut[28]=258;var{b:_r}=Tt(It,0),Ve=new K(32768);for(let r=0;r<32768;++r){let e=(r&43690)>>1|(r&21845)<<1;e=(e&52428)>>2|(e&13107)<<2,e=(e&61680)>>4|(e&3855)<<4,Ve[r]=((e&65280)>>8|(e&255)<<8)>>1}var ie=(r,e,t)=>{let n=r.length,s=0,a=new K(e);for(;s<n;++s)r[s]&&++a[r[s]-1];let o=new K(e);for(s=1;s<e;++s)o[s]=o[s-1]+a[s-1]<<1;let i;if(t){i=new K(1<<e);let f=15-e;for(s=0;s<n;++s)if(r[s]){let c=s<<4|r[s],l=e-r[s],d=o[r[s]-1]++<<l;for(let u=d|(1<<l)-1;d<=u;++d)i[Ve[d]>>f]=c}}else for(i=new K(n),s=0;s<n;++s)r[s]&&(i[s]=Ve[o[r[s]-1]++]>>15-r[s]);return i},oe=new N(288);for(let r=0;r<144;++r)oe[r]=8;for(let r=144;r<256;++r)oe[r]=9;for(let r=256;r<280;++r)oe[r]=7;for(let r=280;r<288;++r)oe[r]=8;var Lt=new N(32);for(let r=0;r<32;++r)Lt[r]=5;var Fr=ie(oe,9,1),Gr=ie(Lt,5,1),Ge=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},D=(r,e,t)=>{let n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},qe=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},Ct=r=>(r+7)/8|0,qr=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new N(r.subarray(e,t))),B=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},Ht=(r,e,t,n)=>{let s=r.length,a=n?n.length:0;if(!s||e.f&&!e.l)return t||new N(0);let o=!t,i=o||e.i!=2,f=e.i;o&&(t=new N(s*3));let c=y=>{let b=t.length;if(y>b){let A=new N(Math.max(b*2,y));A.set(t),t=A}},l=e.f||0,d=e.p||0,u=e.b||0,h=e.l,p=e.d,m=e.m,R=e.n,E=s*8;do{if(!h){l=D(r,d,1);let w=D(r,d+1,3);if(d+=3,w)if(w==1)h=Fr,p=Gr,m=9,R=5;else if(w==2){let g=D(r,d,31)+257,O=D(r,d+10,15)+4,k=g+D(r,d+5,31)+1;d+=14;let P=new N(k),j=new N(19);for(let M=0;M<O;++M)j[Wr[M]]=D(r,d+M*3,7);d+=O*3;let S=Ge(j),I=(1<<S)-1,T=ie(j,S,1);for(let M=0;M<k;){let Et=T[D(r,d,I)];d+=Et&15;let re=Et>>4;if(re<16)P[M++]=re;else{let kt=0,ve=0;for(re==16?(ve=3+D(r,d,3),d+=2,kt=P[M-1]):re==17?(ve=3+D(r,d,7),d+=3):re==18&&(ve=11+D(r,d,127),d+=7);ve--;)P[M++]=kt}}let $=P.subarray(0,g),W=P.subarray(g);m=Ge($),R=Ge(W),h=ie($,m,1),p=ie(W,R,1)}else B(1);else{let g=Ct(d)+4,O=r[g-4]|r[g-3]<<8,k=g+O;if(k>s){f&&B(0);break}i&&c(u+O),t.set(r.subarray(g,k),u),e.b=u+=O,e.p=d=k*8,e.f=l;continue}if(d>E){f&&B(0);break}}i&&c(u+131072);let y=(1<<m)-1,b=(1<<R)-1,A=d;for(;;A=d){let w=h[qe(r,d)&y],g=w>>4;if(d+=w&15,d>E){f&&B(0);break}if(w||B(2),g<256)t[u++]=g;else if(g==256){A=d,h=null;break}else{let O=g-254;if(g>264){let I=g-257,T=St[I];O=D(r,d,(1<<T)-1)+Ut[I],d+=T}let k=p[qe(r,d)&b],P=k>>4;k||B(3),d+=k&15;let j=_r[P];if(P>3){let I=It[P];j+=qe(r,d)&(1<<I)-1,d+=I}if(d>E){f&&B(0);break}i&&c(u+131072);let S=u+O;if(u<j){let I=a-j,T=Math.min(j,S);for(I+u<0&&B(3);u<T;++u)t[u]=n[I+u]}for(;u<S;++u)t[u]=t[u-j]}}e.l=h,e.p=A,e.b=u,e.f=l,h&&(l=1,e.m=m,e.d=p,e.n=R)}while(!l);return u!=t.length&&o?qr(t,0,u):t.subarray(0,u)},Dt=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&B(0,"invalid zlib data"),r[1]&32&&B(0,"zlib dictionaries are not supported"),2);function Nt(r){let e=Dt(r);return Ht(r.subarray(e,-4),{i:2})}function ze(r){let e=Dt(r),t={i:2},n=Ht(r.subarray(e),t),s=Ct(t.p);return{result:n,bytesConsumed:e+s+4}}async function Vr(){let r;if(!(typeof document<"u"))try{r=je(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let n=null;try{let s=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});s?.engine&&typeof s.engine.bytesWritten=="number"&&(n=a=>{let o=r.inflateSync(a,{info:!0});return{result:new Uint8Array(o.buffer),bytesConsumed:o.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(r.deflateSync(s)),inflateSync:s=>new Uint8Array(r.inflateSync(s)),inflateWithConsumed:n??ze}}let t;return typeof globalThis.CompressionStream=="function"?t=async n=>{let s=new CompressionStream("deflate"),a=s.writable.getWriter();return a.write(n),a.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:Nt,inflateWithConsumed:ze}}var zr=null;function Bt(){return zr??=Vr()}async function Te(r){return await(await Bt()).deflateSync(r)}async function Ke(r,e){let t=await Bt(),{result:n,bytesConsumed:s}=t.inflateWithConsumed(r);if(n.byteLength!==e)throw new Error(`Inflate size mismatch: got ${n.byteLength}, expected ${e}`);return{result:n,bytesConsumed:s}}var Y=1346454347,Le=2,Wt=1,_t=2,Ft=3,Gt=4,_=6,ce=7,qt={[Wt]:"commit",[_t]:"tree",[Ft]:"blob",[Gt]:"tag"},Vt={commit:Wt,tree:_t,blob:Ft,tag:Gt};async function zt(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),n=t.getUint32(0);if(n!==Y)throw new Error(`Invalid pack signature: 0x${n.toString(16)} (expected 0x${Y.toString(16)})`);let s=t.getUint32(4);if(s!==Le)throw new Error(`Unsupported pack version: ${s}`);if(r.byteLength>=32){let c=se(r,r.byteLength-20),l=z();l.update(r.subarray(0,r.byteLength-20));let d=await l.hex();if(d!==c)throw new Error(`pack checksum mismatch: expected ${c}, computed ${d}`)}let a=t.getUint32(8),o=[],i=12;for(let c=0;c<a;c++){let l=await Kr(r,i);o.push(l),i=l.nextOffset}return(await Xr(o,e)).map((c,l)=>({...c,offset:o[l].headerOffset,nextOffset:o[l].nextOffset}))}async function Kr(r,e){let t=e,n=r[e++],s=n>>4&7,a=n&15,o=4;for(;n&128;)n=r[e++],a|=(n&127)<<o,o+=7;let i,f;if(s===_){let d=r[e++];for(i=d&127;d&128;)i+=1,d=r[e++],i=(i<<7)+(d&127);i=t-i}else s===ce&&(f=se(r,e),e+=20);let{result:c,bytesConsumed:l}=await Ke(r.subarray(e),a);return{headerOffset:t,typeNum:s,inflated:c,baseOffset:i,baseHash:f,nextOffset:e+l}}var Mt=50;async function Xr(r,e){let t=new Map;for(let a=0;a<r.length;a++)t.set(r[a].headerOffset,a);let n=new Array(r.length).fill(null);async function s(a,o=0){if(o>Mt)throw new Error(`delta chain depth ${o} exceeds limit of ${Mt}`);let i=n[a];if(i)return i;let f=r[a];if(f.typeNum!==_&&f.typeNum!==ce){let h=qt[f.typeNum];if(!h)throw new Error(`Unknown object type: ${f.typeNum}`);let p={type:h,content:f.inflated,hash:await X(h,f.inflated)};return n[a]=p,p}if(f.typeNum===_){let h=t.get(f.baseOffset);if(h===void 0)throw new Error(`OFS_DELTA base not found at offset ${f.baseOffset}`);let p=await s(h,o+1),m=Ue(p.content,f.inflated),R={type:p.type,content:m,hash:await X(p.type,m)};return n[a]=R,R}let c=await Yr(r,n,f.baseHash,s),l;if(c!==void 0)l=await s(c,o+1);else if(e){let h=await e(f.baseHash);h&&(l=h)}if(!l)throw new Error(`REF_DELTA base not found for hash ${f.baseHash}`);let d=Ue(l.content,f.inflated),u={type:l.type,content:d,hash:await X(l.type,d)};return n[a]=u,u}for(let a=0;a<r.length;a++)await s(a);return n}async function Yr(r,e,t,n){for(let s=0;s<e.length;s++)if(e[s]?.hash===t)return s;for(let s=0;s<r.length;s++){let a=r[s];if(a.typeNum!==_&&a.typeNum!==ce&&(await n(s)).hash===t)return s}}var Xe=class{buf=new Uint8Array(0);iter;eof=!1;_bytesRead=0;hasher;constructor(e,t=!1){this.iter=e[Symbol.asyncIterator](),this.hasher=t?z():null}get bytesRead(){return this._bytesRead}async pullMore(){if(this.eof)return!1;let{value:e,done:t}=await this.iter.next();if(t||!e)return this.eof=!0,!1;if(this.buf.byteLength===0)this.buf=new Uint8Array(e);else{let n=new Uint8Array(this.buf.byteLength+e.byteLength);n.set(this.buf),n.set(e,this.buf.byteLength),this.buf=n}return!0}async ensure(e){for(;this.buf.byteLength<e;)if(!await this.pullMore())throw new Error(`Unexpected end of pack data: needed ${e} bytes, have ${this.buf.byteLength}`)}consume(e){let t=new Uint8Array(this.buf.subarray(0,e));return this.hasher?.update(t),this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async readByte(){return await this.ensure(1),this.consume(1)[0]}async readExact(e){return await this.ensure(e),this.consume(e)}async readRaw(e){await this.ensure(e);let t=new Uint8Array(this.buf.subarray(0,e));return this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async inflateNext(e){for(this.buf.byteLength===0&&!this.eof&&await this.pullMore();;)try{let{result:t,bytesConsumed:n}=await Ke(this.buf,e);return this.consume(n),t}catch{if(!this.eof&&await this.pullMore())continue;throw new Error(`Failed to inflate pack entry at byte ${this._bytesRead} (expected ${e} bytes)`)}}async hashHex(){if(!this.hasher)throw new Error("Hashing not enabled");return this.hasher.hex()}};async function*Kt(r,e){let t=new Xe(r,!0),n=await t.readExact(12),s=new DataView(n.buffer,n.byteOffset,n.byteLength),a=s.getUint32(0);if(a!==Y)throw new Error(`Invalid pack signature: 0x${a.toString(16)} (expected 0x${Y.toString(16)})`);let o=s.getUint32(4);if(o!==Le)throw new Error(`Unsupported pack version: ${o}`);let i=s.getUint32(8),f=new Map,c=new Map;for(let u=0;u<i;u++){let h=t.bytesRead,p=await t.readByte(),m=p>>4&7,R=p&15,E=4;for(;p&128;)p=await t.readByte(),R|=(p&127)<<E,E+=7;let y,b;if(m===_){let g=await t.readByte();for(y=g&127;g&128;)y+=1,g=await t.readByte(),y=(y<<7)+(g&127);y=h-y}else if(m===ce){let g=await t.readExact(20);b=se(g,0)}let A=await t.inflateNext(R),w;if(m!==_&&m!==ce){let g=qt[m];if(!g)throw new Error(`Unknown object type: ${m}`);w={type:g,content:A,hash:await X(g,A)}}else if(m===_){let g=f.get(y);if(!g)throw new Error(`OFS_DELTA base not found at offset ${y}`);let O=Ue(g.content,A);w={type:g.type,content:O,hash:await X(g.type,O)}}else{let g=c.get(b);if(!g&&e&&(g=await e(b)??void 0),!g)throw new Error(`REF_DELTA base not found for hash ${b}`);let O=Ue(g.content,A);w={type:g.type,content:O,hash:await X(g.type,O)}}f.set(h,w),c.set(w.hash,w),yield w}let l=se(await t.readRaw(20),0),d=await t.hashHex();if(d!==l)throw new Error(`pack checksum mismatch: expected ${l}, computed ${d}`)}function Ue(r,e){let t=0,{value:n,newPos:s}=$t(e,t);if(t=s,n!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${n}, got ${r.byteLength}`);let{value:a,newPos:o}=$t(e,t);t=o;let i=new Uint8Array(a),f=0;for(;t<e.byteLength;){let c=e[t++];if(c&128){let l=0,d=0;c&1&&(l=e[t++]),c&2&&(l|=e[t++]<<8),c&4&&(l|=e[t++]<<16),c&8&&(l|=e[t++]<<24),c&16&&(d=e[t++]),c&32&&(d|=e[t++]<<8),c&64&&(d|=e[t++]<<16),d===0&&(d=65536),i.set(r.subarray(l,l+d),f),f+=d}else if(c>0)i.set(e.subarray(t,t+c),f),f+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(f!==a)throw new Error(`Delta produced ${f} bytes, expected ${a}`);return i}async function Z(r){let e=[],t=new Map,n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Y),s.setUint32(4,Le),s.setUint32(8,r.length),e.push(n);let a=12,o=[];for(let i of r){let f=a;t.set(i.hash,a);let c=i.delta&&i.deltaBaseHash?t.get(i.deltaBaseHash):void 0;if(i.delta&&c!==void 0){let l=Ye(_,i.delta.byteLength),d=Jr(a-c),u=await Te(i.delta);e.push(l,d,u),a+=l.byteLength+d.byteLength+u.byteLength}else{let l=Vt[i.type],d=Ye(l,i.content.byteLength),u=await Te(i.content);e.push(d,u),a+=d.byteLength+u.byteLength}o.push({hash:i.hash,offset:f,nextOffset:a})}return{data:await Zr(e),entries:o}}async function*Xt(r,e){let t=z(),n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Y),s.setUint32(4,Le),s.setUint32(8,r),t.update(n),yield n;for await(let a of e){let o=Vt[a.type],i=Ye(o,a.content.byteLength),f=await Te(a.content);t.update(i),t.update(f),yield Qr(i,f)}yield ae(await t.hex())}async function Zr(r){let e=0;for(let o of r)e+=o.byteLength;e+=20;let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.byteLength;let s=z();s.update(t.subarray(0,n));let a=await s.hex();return t.set(ae(a),n),t}function Jr(r){let e=[];e.push(r&127);let t=r>>>7;for(;t>0;)e.unshift(128|--t&127),t>>>=7;return new Uint8Array(e)}function Ye(r,e){let t=[],n=r<<4|e&15;for(e>>=4;e>0;)t.push(n|128),n=e&127,e>>=7;return t.push(n),new Uint8Array(t)}function $t(r,e){let t=0,n=0,s;do s=r[e++],t|=(s&127)<<n,n+=7;while(s&128);return{value:t,newPos:e}}function Qr(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var en=new TextEncoder;async function X(r,e){let t=en.encode(`${r} ${e.byteLength}\0`),n=z();return n.update(t),n.update(e),n.hex()}var tn=new TextEncoder,us=new TextDecoder;function Yt(r,e){let t=tn.encode(`${r} ${e.byteLength}\0`),n=new Uint8Array(t.byteLength+e.byteLength);return n.set(t),n.set(e,t.byteLength),n}function fe(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let n=r.slice(0,e).trimEnd(),s=r.slice(e+1,t),a=r.slice(t+2),[o="0",i="+0000"]=a.split(" "),f=parseInt(o,10);return{name:n,email:s,timestamp:f,timezone:i}}function Ce(r){return`${r.name} <${r.email}> ${r.timestamp} ${r.timezone}`}var rn=new TextEncoder,nn=new TextDecoder;function le(r){let e=nn.decode(r),t=e.indexOf(`
2
2
 
3
3
  `),n=t===-1?e:e.slice(0,t),s=t===-1?"":e.slice(t+2),a="",o=[],i,f;for(let c of n.split(`
4
4
  `)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),u=c.slice(l+1);switch(d){case"tree":a=u;break;case"parent":o.push(u);break;case"author":i=fe(u);break;case"committer":f=fe(u);break}}if(!a)throw new Error("Commit missing tree field");if(!i)throw new Error("Commit missing author field");if(!f)throw new Error("Commit missing committer field");return{type:"commit",tree:a,parents:o,author:i,committer:f,message:s}}function Zt(r){let e=[];e.push(`tree ${r.tree}`);for(let t of r.parents)e.push(`parent ${t}`);return e.push(`author ${Ce(r.author)}`),e.push(`committer ${Ce(r.committer)}`),e.push(""),e.push(r.message),rn.encode(e.join(`
@@ -61,9 +61,9 @@ var je=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(
61
61
  `),128;await f.write(dt(m.refs,l,m.headTarget));let R=new _e(e.readable);try{if(l==="git-upload-pack"){let E=await Cn(R),y=await we(h,E,{cache:a,cacheKey:p,noDelta:o?.noDelta,deltaWindow:o?.deltaWindow});await Sr(f,y)}else{let{commands:E,capabilities:y}=await Hn(R),b=R.streamRemaining();await Ln({writer:f,repo:h,repoId:p,commands:E,capabilities:y,packStream:b,hooks:s,auth:i})}}finally{R.release()}return 0}catch(c){return t.onError?.(c),Ee(e,`fatal: internal error
62
62
  `),128}finally{try{await f.close()}catch{}}}async function Ln(r){let{writer:e,repo:t,repoId:n,commands:s,capabilities:a,packStream:o,hooks:i,auth:f}=r,c=await pt(t,s,a,o);if(c.updates.length===0)return;let l=c.capabilities.includes("side-band-64k"),d=c.capabilities.includes("report-status");if(!c.unpackOk){if(d){let h=c.updates.map(p=>({name:p.ref,ok:!1,error:"unpack failed"}));await e.write(Q(!1,h,l))}return}let{refResults:u}=await Re({repo:t,repoId:n,ingestResult:c,hooks:i,auth:f});if(d){let h=u.map(p=>({name:p.ref,ok:p.ok,error:p.error}));await e.write(Q(!0,h,l))}}function Ee(r,e){r.writeStderr?.(Un.encode(e))}var vr=new TextDecoder,_e=class{buf=new Uint8Array(0);byteReader;eof=!1;constructor(e){this.byteReader=e.getReader()}async fill(e){for(;this.buf.byteLength<e&&!this.eof;){let t=await this.byteReader.read();if(t.done||!t.value){this.eof=!0;break}let n=t.value,s=new Uint8Array(this.buf.byteLength+n.byteLength);s.set(this.buf),s.set(n,this.buf.byteLength),this.buf=s}return this.buf.byteLength>=e}consume(e){let t=this.buf.subarray(0,e);return this.buf=this.buf.subarray(e),t}async readPktLine(){if(!await this.fill(4))return null;let e=vr.decode(this.buf.subarray(0,4)),t=parseInt(e,16);if(t===0)return{type:"flush",raw:this.consume(4)};if(t===1)return{type:"delim",raw:this.consume(4)};if(t===2)return{type:"response-end",raw:this.consume(4)};if(t<4||!await this.fill(t))return null;let n=new Uint8Array(this.consume(t));return{type:"data",raw:n,text:vr.decode(n.subarray(4))}}async*streamRemaining(){for(this.buf.byteLength>0&&(yield this.consume(this.buf.byteLength));!this.eof;){let e=await this.byteReader.read();if(e.done||!e.value){this.eof=!0;break}yield e.value}}release(){this.byteReader.releaseLock()}};async function Cn(r){let e=[];for(;;){let t=await r.readPktLine();if(!t||(e.push(t.raw),t.type==="data"&&t.text.trimEnd()==="done"))break}return Bn(e)}async function Hn(r){let e=[],t=[],n=!0;for(;;){let s=await r.readPktLine();if(!s||s.type==="flush")break;if(s.type!=="data")continue;let a=s.text;if(a.endsWith(`
63
63
  `)&&(a=a.slice(0,-1)),n){let i=a.indexOf("\0");i!==-1&&(t=a.slice(i+1).split(" ").filter(Boolean),a=a.slice(0,i)),n=!1}let o=a.split(" ");o.length>=3&&e.push({oldHash:o[0],newHash:o[1],refName:o[2]})}return{commands:e,capabilities:t}}async function Dn(r,e,t,n,s){let{hooks:a,packCache:o,packOptions:i,auth:f}=s;for(;;){let c=await Nn(r);if(!c)break;if(c.command==="ls-refs"){let l=await Ae(t,n,c.args,a,f);if(U(l))break;await e.write(l)}else if(c.command==="fetch"){let l=await Oe(t,c.args,{cache:o,cacheKey:n,noDelta:i?.noDelta,deltaWindow:i?.deltaWindow});await Sr(e,l)}else break}}async function Nn(r){let e="",t=[],n=[],s=!1,a=!1;for(;;){let o=await r.readPktLine();if(!o)return a?{command:e,capabilities:t,args:n}:null;if(o.type==="flush"){if(!a)return null;break}if(o.type==="response-end")break;if(o.type==="delim"){s=!0;continue}a=!0;let i=o.text;i.endsWith(`
64
- `)&&(i=i.slice(0,-1)),s?n.push(i):i.startsWith("command=")?e=i.slice(8):t.push(i)}return e?{command:e,capabilities:t,args:n}:null}function Bn(r){if(r.length===0)return new Uint8Array(0);if(r.length===1)return r[0];let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}async function Sr(r,e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{value:n,done:s}=await t.read();if(s)break;await r.write(n)}}finally{t.releaseLock()}}else await r.write(e)}async function Tr(r,e,t,n){let s=n?.dryRun??!1,a=await Ir(r),o=Mn(a);if(o.length===0)return{deleted:0,retained:0};let i=await me(r,o,[]),f=new Set;for await(let h of i.objects)f.add(h.hash);let c=await e.listObjectHashes(t),l=[];for(let h of c)f.has(h)||l.push(h);let d=await Ir(r);return $n(a,d)?s||l.length===0?{deleted:l.length,retained:f.size}:{deleted:await e.deleteObjects(t,l),retained:f.size}:{deleted:0,retained:f.size,aborted:!0}}async function Ir(r){return r.refStore.listRefs()}function Mn(r){let e=new Set;for(let t of r)e.add(t.hash);return Array.from(e)}function $n(r,e){if(r.length!==e.length)return!1;let t=new Map;for(let n of r)t.set(n.name,n.hash);for(let n of e)if(t.get(n.name)!==n.hash)return!1;return!0}function Ur(r){function e(t){return{objectStore:new ht(r,t),refStore:new yt(r,t)}}return{async createRepo(t,n){if(await r.hasRepo(t))throw new Error(`repo '${t}' already exists`);let a=n?.defaultBranch??"main";return await r.insertRepo(t),await r.putRef(t,"HEAD",{type:"symbolic",target:`refs/heads/${a}`}),e(t)},async repo(t){return await r.hasRepo(t)?e(t):null},async deleteRepo(t){await r.deleteRepo(t)}}}var ht=class{constructor(e,t){this.driver=e;this.repoId=t}cache=new Ie;async write(e,t){let n=Yt(e,t),s=await jt(n);return await this.driver.putObject(this.repoId,s,e,t),s}async read(e){let t=this.cache.get(e);if(t)return t;let n=await this.driver.getObject(this.repoId,e);if(!n)throw new Error(`object ${e} not found`);return this.cache.set(e,n),n}async exists(e){return!!await this.driver.hasObject(this.repoId,e)}async ingestPack(e){if(e.byteLength<32)return 0;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0);if(n!==1346454347)throw new Error(`invalid pack signature: 0x${n.toString(16)} (expected 0x5041434b)`);let s=t.getUint32(4);if(s!==2)throw new Error(`unsupported pack version: ${s}`);if(t.getUint32(8)===0)return 0;let o=this.driver,i=this.repoId,f=await zt(e,async c=>{let l=await o.getObject(i,c);return l?{type:l.type,content:new Uint8Array(l.content)}:null});return await o.putObjects(i,f.map(c=>({hash:c.hash,type:c.type,content:c.content}))),f.length}async ingestPackStream(e){let t=[];for await(let n of e)t.push({hash:n.hash,type:n.type,content:n.content});return t.length===0?0:(await this.driver.putObjects(this.repoId,t),t.length)}async findByPrefix(e){return e.length<4?[]:Array.from(await this.driver.findObjectsByPrefix(this.repoId,e))}},yt=class{constructor(e,t){this.driver=e;this.repoId=t}async readRef(e){return await this.driver.getRef(this.repoId,e)??null}async writeRef(e,t){await this.driver.putRef(this.repoId,e,er(t))}async deleteRef(e){await this.driver.removeRef(this.repoId,e)}async listRefs(e){let t=await this.driver.listRefs(this.repoId,e),n=[];for(let s of t)if(s.ref.type==="direct")n.push({name:s.name,hash:s.ref.hash});else if(s.ref.type==="symbolic"){let a=await mt(o=>this.driver.getRef(this.repoId,o),s.ref.target);a&&n.push({name:s.name,hash:a})}return n}async compareAndSwapRef(e,t,n){return!!await this.driver.atomicRefUpdate(this.repoId,s=>ke(s.getRef(e),a=>{let o=a?a.type==="direct"?a.hash:mt(i=>s.getRef(i),a.target):null;return ke(o,i=>{if(t===null){if(a!==null)return!1}else if(i!==t)return!1;return n===null?ke(s.removeRef(e),()=>!0):ke(s.putRef(e,n),()=>!0)})}))}};function ke(r,e){return r instanceof Promise?r.then(e):e(r)}function mt(r,e,t=0){return t>10?null:ke(r(e),n=>n?n.type==="direct"?n.hash:n.type==="symbolic"?mt(r,n.target,t+1):null:null)}var Pe=class{repos=new Set;objects=new Map;refs=new Map;hasRepo(e){return this.repos.has(e)}insertRepo(e){this.repos.add(e)}deleteRepo(e){this.repos.delete(e),this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e)}getObject(e,t){let n=this.getObjMap(e).get(t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){let a=this.getObjMap(e);a.has(t)||a.set(t,{type:n,content:new Uint8Array(s)})}putObjects(e,t){let n=this.getObjMap(e);for(let s of t)n.has(s.hash)||n.set(s.hash,{type:s.type,content:new Uint8Array(s.content)})}hasObject(e,t){return this.getObjMap(e).has(t)}findObjectsByPrefix(e,t){let n=[];for(let s of this.getObjMap(e).keys())s.startsWith(t)&&n.push(s);return n}listObjectHashes(e){return Array.from(this.getObjMap(e).keys())}deleteObjects(e,t){let n=this.getObjMap(e),s=0;for(let a of t)n.delete(a)&&s++;return s}getRef(e,t){return this.getRefMap(e).get(t)??null}putRef(e,t,n){this.getRefMap(e).set(t,n)}removeRef(e,t){this.getRefMap(e).delete(t)}listRefs(e,t){let n=[];for(let[s,a]of this.getRefMap(e))t&&!s.startsWith(t)||n.push({name:s,ref:a});return n}atomicRefUpdate(e,t){let n=this.getRefMap(e);return t({getRef:s=>n.get(s)??null,putRef:(s,a)=>{n.set(s,a)},removeRef:s=>{n.delete(s)}})}repoIds(){return Array.from(this.repos)}getObjMap(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefMap(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}};var Wn={http:r=>({transport:"http",request:r}),ssh:r=>({transport:"ssh",username:r.username})};function Lr(r){if(r.length===0)return!1;for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n===0||n<32||n===127||n===92)return!1}let e=r.split("/");for(let t of e)if(t.length===0||t.charCodeAt(0)===46)return!1;return!0}function _n(r={}){let e=r.storage??new Pe,t=Ur(e),n=r.resolve??(y=>y),s=r.autoCreate,{basePath:a}=r;async function o(y){if(!Lr(y))return null;let b=await n(y);if(b==null||b!==y&&!Lr(b))return null;let A=await t.repo(b);if(A)return{repo:A,repoId:b};if(!s)return null;let w=typeof s=="object"?{defaultBranch:s.defaultBranch}:void 0;return{repo:await t.createRepo(b,w),repoId:b}}let i=qn(r.policy,r.hooks),f=r.auth??Wn,c=r.packCache===!1?void 0:new te(r.packCache?.maxBytes),l=r.onError===!1?void 0:r.onError??(y=>{let b=y instanceof Error?y.message:String(y);console.error(`[server] Internal error: ${b}`)}),d=!1,u=0,h=null,p=null;function m(){return d?!1:(u++,!0)}function R(){u--,d&&u===0&&h?.()}let E={async fetch(y){if(!m())return new Response("Service Unavailable",{status:503});let b;try{if(!f.http)return new Response("HTTP auth provider not configured",{status:501});let A=await f.http(y);if(A instanceof Response)return A;b=A;let w=new URL(y.url),g=decodeURIComponent(w.pathname);if(a){let O=a.replace(/\/+$/,"");if(!g.startsWith(O))return new Response("Not Found",{status:404});g=g.slice(O.length)}if(g.startsWith("/")||(g=`/${g}`),g.endsWith("/info/refs")&&y.method==="GET"){let O=w.searchParams.get("service");if(O!=="git-upload-pack"&&O!=="git-receive-pack")return new Response("Unsupported service",{status:403});let k=bt(g,"/info/refs"),v=await o(k);if(!v)return new Response("Not Found",{status:404});if(Cr(y)&&O==="git-upload-pack"){let T=await G(v.repo,v.repoId,O,i,b);if(U(T))return new Response(T.message??"Forbidden",{status:403});let $=xe();return new Response($,{headers:{"Content-Type":`application/x-${O}-advertisement`,"Cache-Control":"no-cache"}})}let S=await G(v.repo,v.repoId,O,i,b);if(U(S))return new Response(S.message??"Forbidden",{status:403});let I=lt(S.refs,O,S.headTarget);return new Response(I,{headers:{"Content-Type":`application/x-${O}-advertisement`,"Cache-Control":"no-cache"}})}if(g.endsWith("/git-upload-pack")&&y.method==="POST"){let O=bt(g,"/git-upload-pack"),k=await o(O);if(!k)return new Response("Not Found",{status:404});let v=await Hr(y);if(Cr(y)){let S=ot(v),I="application/x-git-upload-pack-result";if(S.command==="ls-refs"){let T=await Ae(k.repo,k.repoId,S.args,i,b);return U(T)?new Response(T.message??"Forbidden",{status:403}):new Response(T,{headers:{"Content-Type":I}})}if(S.command==="fetch"){let T=await Oe(k.repo,S.args,{cache:c,cacheKey:k.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(T,{headers:{"Content-Type":I}})}return new Response(`unknown command: ${S.command}`,{status:400})}let P=await we(k.repo,v,{cache:c,cacheKey:k.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(P,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(g.endsWith("/git-receive-pack")&&y.method==="POST"){let O=bt(g,"/git-receive-pack"),k=await o(O);if(!k)return new Response("Not Found",{status:404});let v=await Hr(y),P=await ut(k.repo,v);if(!P.sawFlush&&P.updates.length===0)return new Response("Bad Request",{status:400});let S=P.capabilities.includes("side-band-64k"),I=P.capabilities.includes("report-status");if(!P.unpackOk){if(I){let $=P.updates.map(W=>({name:W.ref,ok:!1,error:"unpack failed"}));return new Response(Q(!1,$,S),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}let{refResults:T}=await Re({repo:k.repo,repoId:k.repoId,ingestResult:P,hooks:i,auth:b});if(I){let $=T.map(W=>({name:W.ref,ok:W.ok,error:W.error}));return new Response(Q(!0,$,S),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response("Not Found",{status:404})}catch(A){return l?.(A,b),new Response("Internal Server Error",{status:500})}finally{R()}},async handleSession(y,b,A){if(!m())return b.writeStderr?.(new TextEncoder().encode(`fatal: server shutting down
64
+ `)&&(i=i.slice(0,-1)),s?n.push(i):i.startsWith("command=")?e=i.slice(8):t.push(i)}return e?{command:e,capabilities:t,args:n}:null}function Bn(r){if(r.length===0)return new Uint8Array(0);if(r.length===1)return r[0];let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}async function Sr(r,e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{value:n,done:s}=await t.read();if(s)break;await r.write(n)}}finally{t.releaseLock()}}else await r.write(e)}async function Tr(r,e,t,n){let s=n?.dryRun??!1,a=await Ir(r),o=Mn(a);if(o.length===0)return{deleted:0,retained:0};let i=await me(r,o,[]),f=new Set;for await(let h of i.objects)f.add(h.hash);let c=await e.listObjectHashes(t),l=[];for(let h of c)f.has(h)||l.push(h);let d=await Ir(r);return $n(a,d)?s||l.length===0?{deleted:l.length,retained:f.size}:{deleted:await e.deleteObjects(t,l),retained:f.size}:{deleted:0,retained:f.size,aborted:!0}}async function Ir(r){return r.refStore.listRefs()}function Mn(r){let e=new Set;for(let t of r)e.add(t.hash);return Array.from(e)}function $n(r,e){if(r.length!==e.length)return!1;let t=new Map;for(let n of r)t.set(n.name,n.hash);for(let n of e)if(t.get(n.name)!==n.hash)return!1;return!0}function Ur(r){function e(t){return{objectStore:new ht(r,t),refStore:new yt(r,t)}}return{async createRepo(t,n){if(await r.hasRepo(t))throw new Error(`repo '${t}' already exists`);let a=n?.defaultBranch??"main";return await r.insertRepo(t),await r.putRef(t,"HEAD",{type:"symbolic",target:`refs/heads/${a}`}),e(t)},async repo(t){return await r.hasRepo(t)?e(t):null},async deleteRepo(t){await r.deleteRepo(t)}}}var ht=class{constructor(e,t){this.driver=e;this.repoId=t}cache=new Ie;async write(e,t){let n=Yt(e,t),s=await jt(n);return await this.driver.putObject(this.repoId,s,e,t),s}async read(e){let t=this.cache.get(e);if(t)return t;let n=await this.driver.getObject(this.repoId,e);if(!n)throw new Error(`object ${e} not found`);return this.cache.set(e,n),n}async exists(e){return!!await this.driver.hasObject(this.repoId,e)}async ingestPack(e){if(e.byteLength<32)return 0;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0);if(n!==1346454347)throw new Error(`invalid pack signature: 0x${n.toString(16)} (expected 0x5041434b)`);let s=t.getUint32(4);if(s!==2)throw new Error(`unsupported pack version: ${s}`);if(t.getUint32(8)===0)return 0;let o=this.driver,i=this.repoId,f=await zt(e,async c=>{let l=await o.getObject(i,c);return l?{type:l.type,content:new Uint8Array(l.content)}:null});return await o.putObjects(i,f.map(c=>({hash:c.hash,type:c.type,content:c.content}))),f.length}async ingestPackStream(e){let t=[];for await(let n of e)t.push({hash:n.hash,type:n.type,content:n.content});return t.length===0?0:(await this.driver.putObjects(this.repoId,t),t.length)}async findByPrefix(e){return e.length<4?[]:Array.from(await this.driver.findObjectsByPrefix(this.repoId,e))}},yt=class{constructor(e,t){this.driver=e;this.repoId=t}async readRef(e){return await this.driver.getRef(this.repoId,e)??null}async writeRef(e,t){await this.driver.putRef(this.repoId,e,er(t))}async deleteRef(e){await this.driver.removeRef(this.repoId,e)}async listRefs(e){let t=await this.driver.listRefs(this.repoId,e),n=[];for(let s of t)if(s.ref.type==="direct")n.push({name:s.name,hash:s.ref.hash});else if(s.ref.type==="symbolic"){let a=await mt(o=>this.driver.getRef(this.repoId,o),s.ref.target);a&&n.push({name:s.name,hash:a})}return n}async compareAndSwapRef(e,t,n){return!!await this.driver.atomicRefUpdate(this.repoId,s=>ke(s.getRef(e),a=>{let o=a?a.type==="direct"?a.hash:mt(i=>s.getRef(i),a.target):null;return ke(o,i=>{if(t===null){if(a!==null)return!1}else if(i!==t)return!1;return n===null?ke(s.removeRef(e),()=>!0):ke(s.putRef(e,n),()=>!0)})}))}};function ke(r,e){return r instanceof Promise?r.then(e):e(r)}function mt(r,e,t=0){return t>10?null:ke(r(e),n=>n?n.type==="direct"?n.hash:n.type==="symbolic"?mt(r,n.target,t+1):null:null)}var Pe=class{repos=new Set;objects=new Map;refs=new Map;hasRepo(e){return this.repos.has(e)}insertRepo(e){this.repos.add(e)}deleteRepo(e){this.repos.delete(e),this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e)}getObject(e,t){let n=this.getObjMap(e).get(t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){let a=this.getObjMap(e);a.has(t)||a.set(t,{type:n,content:new Uint8Array(s)})}putObjects(e,t){let n=this.getObjMap(e);for(let s of t)n.has(s.hash)||n.set(s.hash,{type:s.type,content:new Uint8Array(s.content)})}hasObject(e,t){return this.getObjMap(e).has(t)}findObjectsByPrefix(e,t){let n=[];for(let s of this.getObjMap(e).keys())s.startsWith(t)&&n.push(s);return n}listObjectHashes(e){return Array.from(this.getObjMap(e).keys())}deleteObjects(e,t){let n=this.getObjMap(e),s=0;for(let a of t)n.delete(a)&&s++;return s}getRef(e,t){return this.getRefMap(e).get(t)??null}putRef(e,t,n){this.getRefMap(e).set(t,n)}removeRef(e,t){this.getRefMap(e).delete(t)}listRefs(e,t){let n=[];for(let[s,a]of this.getRefMap(e))t&&!s.startsWith(t)||n.push({name:s,ref:a});return n}atomicRefUpdate(e,t){let n=this.getRefMap(e);return t({getRef:s=>n.get(s)??null,putRef:(s,a)=>{n.set(s,a)},removeRef:s=>{n.delete(s)}})}repoIds(){return Array.from(this.repos)}getObjMap(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefMap(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}};var Wn={http:r=>({transport:"http",request:r}),ssh:r=>({transport:"ssh",username:r.username})};function Lr(r){if(r.length===0)return!1;for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n===0||n<32||n===127||n===92)return!1}let e=r.split("/");for(let t of e)if(t.length===0||t.charCodeAt(0)===46)return!1;return!0}function _n(r={}){let e=r.storage??new Pe,t=Ur(e),n=r.resolve??(y=>y),s=r.autoCreate,{basePath:a}=r;async function o(y){if(!Lr(y))return null;let b=await n(y);if(b==null||b!==y&&!Lr(b))return null;let A=await t.repo(b);if(A)return{repo:A,repoId:b};if(!s)return null;let w=typeof s=="object"?{defaultBranch:s.defaultBranch}:void 0;return{repo:await t.createRepo(b,w),repoId:b}}let i=qn(r.policy,r.hooks),f=r.auth??Wn,c=r.packCache===!1?void 0:new te(r.packCache?.maxBytes),l=r.onError===!1?void 0:r.onError??(y=>{let b=y instanceof Error?y.message:String(y);console.error(`[server] Internal error: ${b}`)}),d=!1,u=0,h=null,p=null;function m(){return d?!1:(u++,!0)}function R(){u--,d&&u===0&&h?.()}let E={async fetch(y){if(!m())return new Response("Service Unavailable",{status:503});let b;try{if(!f.http)return new Response("HTTP auth provider not configured",{status:501});let A=await f.http(y);if(A instanceof Response)return A;b=A;let w=new URL(y.url),g=decodeURIComponent(w.pathname);if(a){let O=a.replace(/\/+$/,"");if(!g.startsWith(O))return new Response("Not Found",{status:404});g=g.slice(O.length)}if(g.startsWith("/")||(g=`/${g}`),g.endsWith("/info/refs")&&y.method==="GET"){let O=w.searchParams.get("service");if(O!=="git-upload-pack"&&O!=="git-receive-pack")return new Response("Unsupported service",{status:403});let k=bt(g,"/info/refs"),P=await o(k);if(!P)return new Response("Not Found",{status:404});if(Cr(y)&&O==="git-upload-pack"){let T=await G(P.repo,P.repoId,O,i,b);if(U(T))return new Response(T.message??"Forbidden",{status:403});let $=xe();return new Response($,{headers:{"Content-Type":`application/x-${O}-advertisement`,"Cache-Control":"no-cache"}})}let S=await G(P.repo,P.repoId,O,i,b);if(U(S))return new Response(S.message??"Forbidden",{status:403});let I=lt(S.refs,O,S.headTarget);return new Response(I,{headers:{"Content-Type":`application/x-${O}-advertisement`,"Cache-Control":"no-cache"}})}if(g.endsWith("/git-upload-pack")&&y.method==="POST"){let O=bt(g,"/git-upload-pack"),k=await o(O);if(!k)return new Response("Not Found",{status:404});let P=await Hr(y);if(Cr(y)){let S=ot(P),I="application/x-git-upload-pack-result";if(S.command==="ls-refs"){let T=await Ae(k.repo,k.repoId,S.args,i,b);return U(T)?new Response(T.message??"Forbidden",{status:403}):new Response(T,{headers:{"Content-Type":I}})}if(S.command==="fetch"){let T=await Oe(k.repo,S.args,{cache:c,cacheKey:k.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(T,{headers:{"Content-Type":I}})}return new Response(`unknown command: ${S.command}`,{status:400})}let j=await we(k.repo,P,{cache:c,cacheKey:k.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(j,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(g.endsWith("/git-receive-pack")&&y.method==="POST"){let O=bt(g,"/git-receive-pack"),k=await o(O);if(!k)return new Response("Not Found",{status:404});let P=await Hr(y),j=await ut(k.repo,P);if(!j.sawFlush&&j.updates.length===0)return new Response("Bad Request",{status:400});let S=j.capabilities.includes("side-band-64k"),I=j.capabilities.includes("report-status");if(!j.unpackOk){if(I){let $=j.updates.map(W=>({name:W.ref,ok:!1,error:"unpack failed"}));return new Response(Q(!1,$,S),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}let{refResults:T}=await Re({repo:k.repo,repoId:k.repoId,ingestResult:j,hooks:i,auth:b});if(I){let $=T.map(W=>({name:W.ref,ok:W.ok,error:W.error}));return new Response(Q(!0,$,S),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response("Not Found",{status:404})}catch(A){return l?.(A,b),new Response("Internal Server Error",{status:500})}finally{R()}},async handleSession(y,b,A){if(!m())return b.writeStderr?.(new TextEncoder().encode(`fatal: server shutting down
65
65
  `)),128;try{if(!f.ssh)return b.writeStderr?.(new TextEncoder().encode(`fatal: SSH auth provider not configured
66
- `)),128;let w=await f.ssh(A??{});return await jr(y,b,{resolveRepo:o,hooks:i,packCache:c,packOptions:r.packOptions,auth:w,onError:l?g=>l(g,w):void 0})}finally{R()}},async updateRefs(y,b){if(!m())throw new Error("Server is shutting down");try{let A=await E.requireRepo(y),w=await We(A,b);return $e(A,w)}finally{R()}},async commit(y,b){if(!m())throw new Error("Server is shutting down");try{let A=await E.requireRepo(y),{hash:w,parentHash:g}=await nr(A,b),O=`refs/heads/${b.branch}`,k=await We(A,[{ref:O,newHash:w,oldHash:g}]),P=(await $e(A,k)).refResults[0];if(!P?.ok)throw new Error(P?.error??"ref update failed");return w}finally{R()}},nodeHandler(y,b){let A=[];y.on("data",w=>A.push(new Uint8Array(w))),y.on("error",()=>{b.writeHead(500),b.end("Internal Server Error")}),y.on("end",()=>{Fn(E,y,A,b).catch(()=>{try{b.writeHead(500),b.end("Internal Server Error")}catch{}})})},createRepo:(y,b)=>t.createRepo(y,b),repo:y=>t.repo(y),async requireRepo(y){let b=await t.repo(y);if(!b)throw new Error(`Repository "${y}" not found`);return b},deleteRepo:y=>t.deleteRepo(y),async gc(y,b){if(!m())throw new Error("Server is shutting down");try{let A=await E.requireRepo(y);return Tr(A,e,y,b)}finally{R()}},get closed(){return d},asNetwork(y="http://git"){return{allowed:[y.endsWith("/")?y:`${y}/`],fetch:(A,w)=>E.fetch(new Request(A,w))}},async close(y){if(d)return p??Promise.resolve();if(d=!0,c?.clear(),u!==0){if(p=new Promise(b=>{h=b}),y?.signal){if(y.signal.aborted){h();return}let b=()=>h?.();y.signal.addEventListener("abort",b,{once:!0}),p.then(()=>y.signal.removeEventListener("abort",b))}return p}}};return E}function Cr(r){let e=r.headers.get("git-protocol");return e!==null&&e.includes("version=2")}function bt(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Hr(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let n=new DecompressionStream("gzip"),s=n.writable.getWriter();return s.write(e),s.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}return e}async function Fn(r,e,t,n){let s=typeof e.headers.host=="string"?e.headers.host:"localhost",a=new URL(e.url??"/",`http://${s}`),o=new Headers;for(let[h,p]of Object.entries(e.headers))if(p!==void 0)if(Array.isArray(p))for(let m of p)o.append(h,m);else o.set(h,p);let i=e.method??"GET",f;if(i!=="GET"&&i!=="HEAD"){let h=0;for(let R of t)h+=R.byteLength;let p=new Uint8Array(h),m=0;for(let R of t)p.set(R,m),m+=R.byteLength;f=p}let c=new Request(a.href,{method:i,headers:o,body:f}),l=await r.fetch(c),d={};l.headers.forEach((h,p)=>{d[p]=h}),n.writeHead(l.status,d);let u=new Uint8Array(await l.arrayBuffer());u.byteLength>0&&n.write(u),n.end()}function Gn(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:n=!1,immutableTags:s=!1}=r,a=new Set(e.map(i=>i.startsWith("refs/")?i:`refs/heads/${i}`)),o={};return a.size>0&&(o.preReceive=async i=>{for(let f of i.updates)if(a.has(f.ref)){if(f.isDelete)return{reject:!0,message:`cannot delete protected branch ${f.ref}`};if(!f.isCreate&&!f.isFF)return{reject:!0,message:`non-fast-forward push to protected branch ${f.ref}`}}}),(t||n||s)&&(o.update=async i=>{if(n&&i.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(s&&i.update.ref.startsWith("refs/tags/")){if(i.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!i.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!i.update.isCreate&&!i.update.isDelete&&!i.update.isFF)return{reject:!0,message:"non-fast-forward"}}),o}function qn(r,e){let t=r?Gn(r):void 0;return t&&e?Dr(t,e):t??e}function Dr(...r){let e=r.filter(i=>i!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},n=e.filter(i=>i.preReceive).map(i=>i.preReceive);n.length>0&&(t.preReceive=async i=>{for(let f of n){let c=await f(i);if(U(c))return c}});let s=e.filter(i=>i.update).map(i=>i.update);s.length>0&&(t.update=async i=>{for(let f of s){let c=await f(i);if(U(c))return c}});let a=e.filter(i=>i.postReceive).map(i=>i.postReceive);a.length>0&&(t.postReceive=async i=>{for(let f of a)try{await f(i)}catch{}});let o=e.filter(i=>i.advertiseRefs).map(i=>i.advertiseRefs);return o.length>0&&(t.advertiseRefs=async i=>{let f=i.refs;for(let c of o){let l=await c({...i,refs:f});if(U(l))return l;l&&(f=l)}return f}),t}var Vn=`
66
+ `)),128;let w=await f.ssh(A??{});return await jr(y,b,{resolveRepo:o,hooks:i,packCache:c,packOptions:r.packOptions,auth:w,onError:l?g=>l(g,w):void 0})}finally{R()}},async updateRefs(y,b){if(!m())throw new Error("Server is shutting down");try{let A=await E.requireRepo(y),w=await We(A,b);return $e(A,w)}finally{R()}},async commit(y,b){if(!m())throw new Error("Server is shutting down");try{let A=await E.requireRepo(y),w=await nr(A,b),g=`refs/heads/${b.branch}`,O=await We(A,[{ref:g,newHash:w.hash,oldHash:w.parentHash}]),P=(await $e(A,O)).refResults[0];if(!P?.ok)throw new Error(P?.error??"ref update failed");return w}finally{R()}},nodeHandler(y,b){let A=[];y.on("data",w=>A.push(new Uint8Array(w))),y.on("error",()=>{b.writeHead(500),b.end("Internal Server Error")}),y.on("end",()=>{Fn(E,y,A,b).catch(()=>{try{b.writeHead(500),b.end("Internal Server Error")}catch{}})})},createRepo:(y,b)=>t.createRepo(y,b),repo:y=>t.repo(y),async requireRepo(y){let b=await t.repo(y);if(!b)throw new Error(`Repository "${y}" not found`);return b},deleteRepo:y=>t.deleteRepo(y),async gc(y,b){if(!m())throw new Error("Server is shutting down");try{let A=await E.requireRepo(y);return Tr(A,e,y,b)}finally{R()}},get closed(){return d},asNetwork(y="http://git"){return{allowed:[y.endsWith("/")?y:`${y}/`],fetch:(A,w)=>E.fetch(new Request(A,w))}},async close(y){if(d)return p??Promise.resolve();if(d=!0,c?.clear(),u!==0){if(p=new Promise(b=>{h=b}),y?.signal){if(y.signal.aborted){h();return}let b=()=>h?.();y.signal.addEventListener("abort",b,{once:!0}),p.then(()=>y.signal.removeEventListener("abort",b))}return p}}};return E}function Cr(r){let e=r.headers.get("git-protocol");return e!==null&&e.includes("version=2")}function bt(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Hr(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let n=new DecompressionStream("gzip"),s=n.writable.getWriter();return s.write(e),s.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}return e}async function Fn(r,e,t,n){let s=typeof e.headers.host=="string"?e.headers.host:"localhost",a=new URL(e.url??"/",`http://${s}`),o=new Headers;for(let[h,p]of Object.entries(e.headers))if(p!==void 0)if(Array.isArray(p))for(let m of p)o.append(h,m);else o.set(h,p);let i=e.method??"GET",f;if(i!=="GET"&&i!=="HEAD"){let h=0;for(let R of t)h+=R.byteLength;let p=new Uint8Array(h),m=0;for(let R of t)p.set(R,m),m+=R.byteLength;f=p}let c=new Request(a.href,{method:i,headers:o,body:f}),l=await r.fetch(c),d={};l.headers.forEach((h,p)=>{d[p]=h}),n.writeHead(l.status,d);let u=new Uint8Array(await l.arrayBuffer());u.byteLength>0&&n.write(u),n.end()}function Gn(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:n=!1,immutableTags:s=!1}=r,a=new Set(e.map(i=>i.startsWith("refs/")?i:`refs/heads/${i}`)),o={};return a.size>0&&(o.preReceive=async i=>{for(let f of i.updates)if(a.has(f.ref)){if(f.isDelete)return{reject:!0,message:`cannot delete protected branch ${f.ref}`};if(!f.isCreate&&!f.isFF)return{reject:!0,message:`non-fast-forward push to protected branch ${f.ref}`}}}),(t||n||s)&&(o.update=async i=>{if(n&&i.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(s&&i.update.ref.startsWith("refs/tags/")){if(i.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!i.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!i.update.isCreate&&!i.update.isDelete&&!i.update.isFF)return{reject:!0,message:"non-fast-forward"}}),o}function qn(r,e){let t=r?Gn(r):void 0;return t&&e?Dr(t,e):t??e}function Dr(...r){let e=r.filter(i=>i!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},n=e.filter(i=>i.preReceive).map(i=>i.preReceive);n.length>0&&(t.preReceive=async i=>{for(let f of n){let c=await f(i);if(U(c))return c}});let s=e.filter(i=>i.update).map(i=>i.update);s.length>0&&(t.update=async i=>{for(let f of s){let c=await f(i);if(U(c))return c}});let a=e.filter(i=>i.postReceive).map(i=>i.postReceive);a.length>0&&(t.postReceive=async i=>{for(let f of a)try{await f(i)}catch{}});let o=e.filter(i=>i.advertiseRefs).map(i=>i.advertiseRefs);return o.length>0&&(t.advertiseRefs=async i=>{let f=i.refs;for(let c of o){let l=await c({...i,refs:f});if(U(l))return l;l&&(f=l)}return f}),t}var Vn=`
67
67
  CREATE TABLE IF NOT EXISTS git_repos (
68
68
  id TEXT PRIMARY KEY
69
69
  );
@@ -126,5 +126,5 @@ CREATE TABLE IF NOT EXISTS git_refs (
126
126
  target TEXT,
127
127
  PRIMARY KEY (repo_id, name)
128
128
  );
129
- `,j={repoInsert:"INSERT INTO git_repos (id) VALUES ($1)",repoExists:"SELECT 1 FROM git_repos WHERE id = $1 LIMIT 1",repoDelete:"DELETE FROM git_repos WHERE id = $1",objInsert:"INSERT INTO git_objects (repo_id, hash, type, content) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING",objRead:"SELECT type, content FROM git_objects WHERE repo_id = $1 AND hash = $2",objExists:"SELECT 1 FROM git_objects WHERE repo_id = $1 AND hash = $2 LIMIT 1",objPrefix:"SELECT hash FROM git_objects WHERE repo_id = $1 AND hash LIKE $2",objDeleteAll:"DELETE FROM git_objects WHERE repo_id = $1",objListHashes:"SELECT hash FROM git_objects WHERE repo_id = $1",refRead:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2",refReadForUpdate:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2 FOR UPDATE",refWrite:`INSERT INTO git_refs (repo_id, name, type, hash, target) VALUES ($1, $2, $3, $4, $5)
130
- ON CONFLICT (repo_id, name) DO UPDATE SET type = EXCLUDED.type, hash = EXCLUDED.hash, target = EXCLUDED.target`,refDelete:"DELETE FROM git_refs WHERE repo_id = $1 AND name = $2",refList:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1 AND name LIKE $2",refListAll:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1",refDeleteAll:"DELETE FROM git_refs WHERE repo_id = $1"},Ot=class r{constructor(e){this.pool=e}static async create(e){return await e.query(Yn),new r(e)}async transaction(e){let t=await this.pool.connect();try{await t.query("BEGIN");let n=await e((s,a)=>t.query(s,a));return await t.query("COMMIT"),n}catch(n){throw await t.query("ROLLBACK"),n}finally{t.release()}}async hasRepo(e){let{rows:t}=await this.pool.query(j.repoExists,[e]);return t.length>0}async insertRepo(e){await this.pool.query(j.repoInsert,[e])}async deleteRepo(e){await this.pool.query(j.repoDelete,[e]),await this.pool.query(j.objDeleteAll,[e]),await this.pool.query(j.refDeleteAll,[e])}async getObject(e,t){let{rows:n}=await this.pool.query(j.objRead,[e,t]),s=n[0];return s?{type:s.type,content:new Uint8Array(s.content)}:null}async putObject(e,t,n,s){await this.pool.query(j.objInsert,[e,t,n,s])}async putObjects(e,t){await this.transaction(async n=>{for(let s of t)await n(j.objInsert,[e,s.hash,s.type,s.content])})}async hasObject(e,t){let{rows:n}=await this.pool.query(j.objExists,[e,t]);return n.length>0}async findObjectsByPrefix(e,t){let{rows:n}=await this.pool.query(j.objPrefix,[e,`${t}%`]);return n.map(s=>s.hash)}async listObjectHashes(e){let{rows:t}=await this.pool.query(j.objListHashes,[e]);return t.map(n=>n.hash)}async deleteObjects(e,t){if(t.length===0)return 0;let{rows:n}=await this.pool.query("DELETE FROM git_objects WHERE repo_id = $1 AND hash = ANY($2::text[]) RETURNING hash",[e,Array.from(t)]);return n.length}async getRef(e,t){let{rows:n}=await this.pool.query(j.refRead,[e,t]);return At(n[0]??null)}async putRef(e,t,n){n.type==="symbolic"?await this.pool.query(j.refWrite,[e,t,"symbolic",null,n.target]):await this.pool.query(j.refWrite,[e,t,"direct",n.hash,null])}async removeRef(e,t){await this.pool.query(j.refDelete,[e,t])}async listRefs(e,t){let n;return t?{rows:n}=await this.pool.query(j.refList,[e,`${t}%`]):{rows:n}=await this.pool.query(j.refListAll,[e]),n.flatMap(s=>{let a=At(s);return a?[{name:s.name,ref:a}]:[]})}async atomicRefUpdate(e,t){return this.transaction(async n=>t({getRef:async s=>{let{rows:a}=await n(j.refReadForUpdate,[e,s]);return At(a[0]??null)},putRef:async(s,a)=>{a.type==="symbolic"?await n(j.refWrite,[e,s,"symbolic",null,a.target]):await n(j.refWrite,[e,s,"direct",a.hash,null])},removeRef:async s=>{await n(j.refDelete,[e,s])}}))}};function At(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}export{xt as BetterSqlite3Storage,wt as BunSqliteStorage,Pe as MemoryStorage,Ot as PgStorage,G as advertiseRefsWithHooks,$e as applyCasRefUpdates,Re as applyReceivePack,lt as buildRefAdvertisementBytes,dt as buildRefListBytes,Me as buildRefListPktLines,it as buildV2CapabilityAdvertisement,xe as buildV2CapabilityAdvertisementBytes,ee as buildV2FetchResponse,ct as buildV2LsRefsResponse,xr as collectRefs,Dr as composeHooks,_n as createServer,Ae as handleLsRefs,we as handleUploadPack,Oe as handleV2Fetch,ut as ingestReceivePack,pt as ingestReceivePackFromStream,ot as parseV2CommandRequest,ft as parseV2FetchArgs,We as resolveRefUpdates};
129
+ `,v={repoInsert:"INSERT INTO git_repos (id) VALUES ($1)",repoExists:"SELECT 1 FROM git_repos WHERE id = $1 LIMIT 1",repoDelete:"DELETE FROM git_repos WHERE id = $1",objInsert:"INSERT INTO git_objects (repo_id, hash, type, content) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING",objRead:"SELECT type, content FROM git_objects WHERE repo_id = $1 AND hash = $2",objExists:"SELECT 1 FROM git_objects WHERE repo_id = $1 AND hash = $2 LIMIT 1",objPrefix:"SELECT hash FROM git_objects WHERE repo_id = $1 AND hash LIKE $2",objDeleteAll:"DELETE FROM git_objects WHERE repo_id = $1",objListHashes:"SELECT hash FROM git_objects WHERE repo_id = $1",refRead:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2",refReadForUpdate:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2 FOR UPDATE",refWrite:`INSERT INTO git_refs (repo_id, name, type, hash, target) VALUES ($1, $2, $3, $4, $5)
130
+ ON CONFLICT (repo_id, name) DO UPDATE SET type = EXCLUDED.type, hash = EXCLUDED.hash, target = EXCLUDED.target`,refDelete:"DELETE FROM git_refs WHERE repo_id = $1 AND name = $2",refList:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1 AND name LIKE $2",refListAll:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1",refDeleteAll:"DELETE FROM git_refs WHERE repo_id = $1"},Ot=class r{constructor(e){this.pool=e}static async create(e){return await e.query(Yn),new r(e)}async transaction(e){let t=await this.pool.connect();try{await t.query("BEGIN");let n=await e((s,a)=>t.query(s,a));return await t.query("COMMIT"),n}catch(n){throw await t.query("ROLLBACK"),n}finally{t.release()}}async hasRepo(e){let{rows:t}=await this.pool.query(v.repoExists,[e]);return t.length>0}async insertRepo(e){await this.pool.query(v.repoInsert,[e])}async deleteRepo(e){await this.pool.query(v.repoDelete,[e]),await this.pool.query(v.objDeleteAll,[e]),await this.pool.query(v.refDeleteAll,[e])}async getObject(e,t){let{rows:n}=await this.pool.query(v.objRead,[e,t]),s=n[0];return s?{type:s.type,content:new Uint8Array(s.content)}:null}async putObject(e,t,n,s){await this.pool.query(v.objInsert,[e,t,n,s])}async putObjects(e,t){await this.transaction(async n=>{for(let s of t)await n(v.objInsert,[e,s.hash,s.type,s.content])})}async hasObject(e,t){let{rows:n}=await this.pool.query(v.objExists,[e,t]);return n.length>0}async findObjectsByPrefix(e,t){let{rows:n}=await this.pool.query(v.objPrefix,[e,`${t}%`]);return n.map(s=>s.hash)}async listObjectHashes(e){let{rows:t}=await this.pool.query(v.objListHashes,[e]);return t.map(n=>n.hash)}async deleteObjects(e,t){if(t.length===0)return 0;let{rows:n}=await this.pool.query("DELETE FROM git_objects WHERE repo_id = $1 AND hash = ANY($2::text[]) RETURNING hash",[e,Array.from(t)]);return n.length}async getRef(e,t){let{rows:n}=await this.pool.query(v.refRead,[e,t]);return At(n[0]??null)}async putRef(e,t,n){n.type==="symbolic"?await this.pool.query(v.refWrite,[e,t,"symbolic",null,n.target]):await this.pool.query(v.refWrite,[e,t,"direct",n.hash,null])}async removeRef(e,t){await this.pool.query(v.refDelete,[e,t])}async listRefs(e,t){let n;return t?{rows:n}=await this.pool.query(v.refList,[e,`${t}%`]):{rows:n}=await this.pool.query(v.refListAll,[e]),n.flatMap(s=>{let a=At(s);return a?[{name:s.name,ref:a}]:[]})}async atomicRefUpdate(e,t){return this.transaction(async n=>t({getRef:async s=>{let{rows:a}=await n(v.refReadForUpdate,[e,s]);return At(a[0]??null)},putRef:async(s,a)=>{a.type==="symbolic"?await n(v.refWrite,[e,s,"symbolic",null,a.target]):await n(v.refWrite,[e,s,"direct",a.hash,null])},removeRef:async s=>{await n(v.refDelete,[e,s])}}))}};function At(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}export{xt as BetterSqlite3Storage,wt as BunSqliteStorage,Pe as MemoryStorage,Ot as PgStorage,G as advertiseRefsWithHooks,$e as applyCasRefUpdates,Re as applyReceivePack,lt as buildRefAdvertisementBytes,dt as buildRefListBytes,Me as buildRefListPktLines,it as buildV2CapabilityAdvertisement,xe as buildV2CapabilityAdvertisementBytes,ee as buildV2FetchResponse,ct as buildV2LsRefsResponse,xr as collectRefs,Dr as composeHooks,_n as createServer,Ae as handleLsRefs,we as handleUploadPack,Oe as handleV2Fetch,ut as ingestReceivePack,pt as ingestReceivePackFromStream,ot as parseV2CommandRequest,ft as parseV2FetchArgs,We as resolveRefUpdates};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "just-git",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Pure TypeScript git implementation: virtual filesystem client and embeddable server.",
5
5
  "keywords": [
6
6
  "agent",