just-git 1.5.12 → 1.5.13

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 CHANGED
@@ -65,7 +65,7 @@ Both `fs` and `cwd` can be set once in `createGit` and overridden per-call. `cwd
65
65
 
66
66
  ### Server
67
67
 
68
- Stand up a git server in two lines. Storage defaults to in-memory; swap in SQLite, PostgreSQL, or your own backend for persistence:
68
+ Stand up a git server in two lines. Storage defaults to in-memory; swap in SQLite, PostgreSQL, [Cloudflare Durable Objects](docs/SERVER.md#durableobjectsqlitestorage), or your own backend for persistence:
69
69
 
70
70
  ```ts
71
71
  import { createServer } from "just-git/server";
@@ -117,7 +117,7 @@ await server.gc("my-repo");
117
117
  Bun.serve({ fetch: server.fetch });
118
118
  ```
119
119
 
120
- Uses web-standard `Request`/`Response`. Works with Bun, Hono, Cloudflare Workers, or any fetch-compatible runtime. For Node.js, use `server.nodeHandler` with `http.createServer` and `BetterSqlite3Storage` for `better-sqlite3`. SSH is supported via `server.handleSession`. The [`Storage` interface](docs/SERVER.md#custom-storage) is small enough to plug in any datastore. See [SERVER.md](docs/SERVER.md) for the full API.
120
+ Uses web-standard `Request`/`Response`. Works with Bun, Hono, Cloudflare Workers, Durable Objects, or any fetch-compatible runtime. For Node.js, use `server.nodeHandler` with `http.createServer` and `BetterSqlite3Storage` for `better-sqlite3`. SSH is supported via `server.handleSession`. The [`Storage` interface](docs/SERVER.md#custom-storage) is small enough to plug in any datastore. See [SERVER.md](docs/SERVER.md) for the full API.
121
121
 
122
122
  ## Repo module
123
123
 
package/dist/index.js CHANGED
@@ -873,7 +873,7 @@ ${u}`,exitCode:0}}oe();ie();Tr();we();us();function Kd(e,t){e.command("tag",{des
873
873
  `)}if(n.list)return qd(s,n.name||void 0);if(n.name){if(!Wc(n.name))return I(`'${n.name}' is not a valid tag name`);let i=n.commit,a;if(i){let d=await bt(s,i,`Failed to resolve '${i}' as a valid ref.`);if(j(d))return d;a=d}else if(a=await X(s),!a)return I("Failed to resolve 'HEAD' as a valid ref.");let c=`refs/tags/${n.name}`;if(await B(s,c)&&!n.force)return I(`tag '${n.name}' already exists`);if(n.annotate||n.message){if(!n.message)return I("no tag message specified (use -m)");let d=await tt(s,r.env);if(j(d))return d;let u=Nt(n.message),h=Fc({type:"tag",object:a,objectType:"commit",name:n.name,tagger:d,message:u}),m=await Ie(s,"tag",h);await J(s,c,m)}else await J(s,c,a);return{stdout:"",stderr:"",exitCode:0}}return qd(s)}})}async function qd(e,t){let n=await ge(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=>fn(t,o,0)===0)),r.length===0?{stdout:"",stderr:"",exitCode:0}:{stdout:`${r.join(`
874
874
  `)}
875
875
  `,stderr:"",exitCode:0}}var zd=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"]),Jw={init:(e,t)=>nd(e,t),clone:(e,t)=>Il(e,t),describe:(e,t)=>vl(e,t),fetch:(e,t)=>zl(e,t),pull:(e,t)=>kd(e,t),push:(e,t)=>xd(e,t),add:(e,t)=>hf(e,t),blame:(e,t)=>Kf(e,t),commit:(e,t)=>Al(e,t),status:(e,t)=>_d(e,t),log:(e,t)=>ud(e,t),branch:(e,t)=>Vf(e,t),tag:(e,t)=>Kd(e,t),checkout:(e,t)=>Xf(e,t),diff:(e,t)=>Ul(e,t),reset:(e,t)=>Od(e,t),merge:(e,t)=>pd(e,t),"cherry-pick":(e,t)=>ll(e,t),revert:(e,t)=>vd(e,t),rebase:(e,t)=>Ed(e,t),mv:(e,t)=>gd(e,t),rm:(e,t)=>Ad(e,t),remote:(e,t)=>Pd(e,t),config:(e,t)=>jl(e,t),show:(e,t)=>Hd(e,t),stash:(e,t)=>Fd(e,t),"rev-parse":(e,t)=>Td(e,t),"ls-files":(e,t)=>md(e,t),clean:(e,t)=>dl(e,t),switch:(e,t)=>Bd(e,t),restore:(e,t)=>Id(e,t),reflog:(e,t)=>Cd(e,t),repack:(e,t)=>Xl(e,t),gc:(e,t)=>Zl(e,t),bisect:(e,t)=>Af(e,t),grep:(e,t)=>td(e,t)};function Vd(e){let t=ai("git",{description:"Git command"});for(let n of Object.values(Jw))n(t,e);return t.command("help",{description:"Display help information",args:[K.string().name("command").describe("Command to get help for").optional()],handler:async n=>{let r=n.command;if(!r)return{stdout:Cr(t),stderr:"",exitCode:0};let o=t.children.get(r);return o?{stdout:Cr(o),stderr:"",exitCode:0}:{stdout:"",stderr:`git: no help available for '${r}'
876
- `,exitCode:1}}}),t}var Qw="1.5.12";function eb(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 ei=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=eb(t?.identity,t?.config),o=t?.gitDir?{gitDir:t.gitDir,workTree:this.defaultCwd}:{},s={hooks:t?.hooks,credentialProvider:t?.credentials,identityOverride:t?.identity,fetchFn:typeof n=="object"?n.fetch:void 0,networkPolicy:n,resolveRemote:t?.resolveRemote,credentialCache:new Map,onProgress:t?.onProgress,...t?.objectStore?{objectStore:t.objectStore}:{},...t?.refStore?{refStore:t.refStore}:{},...o,...r?{configOverrides:r}:{}};this.inner=Vd(s).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=tb(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 ${Qw} (virtual git implementation)
876
+ `,exitCode:1}}}),t}var Qw="1.5.13";function eb(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 ei=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=eb(t?.identity,t?.config),o=t?.gitDir?{gitDir:t.gitDir,workTree:this.defaultCwd}:{},s={hooks:t?.hooks,credentialProvider:t?.credentials,identityOverride:t?.identity,fetchFn:typeof n=="object"?n.fetch:void 0,networkPolicy:n,resolveRemote:t?.resolveRemote,credentialCache:new Map,onProgress:t?.onProgress,...t?.objectStore?{objectStore:t.objectStore}:{},...t?.refStore?{refStore:t.refStore}:{},...o,...r?{configOverrides:r}:{}};this.inner=Vd(s).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=tb(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 ${Qw} (virtual git implementation)
877
877
  `,stderr:"",exitCode:0};if(this.blocked?.has(r))return{stdout:"",stderr:`git: '${r}' is not available in this environment
878
878
  `,exitCode:1};if(r&&zd.has(r))return{stdout:"",stderr:`git: '${r}' is not implemented. Run 'git help' for available commands.
879
879
  `,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(fe(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 tb(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 nb(e){return new ei(e)}var Yd=new TextEncoder,rb=new TextDecoder;function gn(e){let t=[];for(let n of e.split("/"))n==="."||n===""||(n===".."?t.pop():t.push(n));return"/"+t.join("/")}function ti(e){let t=e.lastIndexOf("/");return t<=0?"/":e.slice(0,t)}var ja=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=gn(n);this.ensureParents(o),this.data.set(o,{type:"file",content:typeof r=="string"?Yd.encode(r):r,mode:33188,mtime:new Date})}}ensureParents(t){let n=ti(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 gn(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("/")?gn(a):gn(ti(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=gn(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("/")?gn(f):gn(ti(o)+"/"+f),a=this.data.get(o),c++}}return`${o}/${r[r.length-1]}`}async readFile(t){return rb.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"?Yd.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=gn(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=ti(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=gn(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=gn(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})}};Nn();export{ei as Git,ja as MemoryFileSystem,Zm as composeGitHooks,nb as createGit,ir as findRepo,fe as isRejection};
@@ -1,6 +1,6 @@
1
1
  import { g as GitRepo, _ as RefEntry, e as Commit, a4 as TreeEntry, i as ObjectId, h as Identity, a5 as TreeDiffEntry, d as GitContext, F as FileSystem } from '../hooks-B50z7ycn.js';
2
- import { C as CommitIdentity } from '../writing-DnvEscb-.js';
3
- export { B as BuildCommitOptions, a as CommitAuthor, b as CommitOptions, c as CommitResult, d as CreateAnnotatedTagOptions, e as CreateCommitOptions, T as TreeEntryInput, f as TreeUpdate, g as buildCommit, h as commit, i as createAnnotatedTag, j as createCommit, u as updateTree, w as writeBlob, k as writeTree } from '../writing-DnvEscb-.js';
2
+ import { b as CommitIdentity } from '../writing-BYrXF-yM.js';
3
+ export { B as BuildCommitOptions, c as CommitAuthor, C as CommitOptions, a as CommitResult, d as CreateAnnotatedTagOptions, e as CreateCommitOptions, T as TreeEntryInput, f as TreeUpdate, g as buildCommit, h as commit, i as createAnnotatedTag, j as createCommit, u as updateTree, w as writeBlob, k as writeTree } from '../writing-BYrXF-yM.js';
4
4
 
5
5
  /** Extract the short branch name from a full ref path like "refs/heads/main" → "main". */
6
6
  declare function branchNameFromRef(ref: string): string;
@@ -1,5 +1,5 @@
1
1
  import { i as ObjectId, X as RawObject, Y as Ref, g as GitRepo, a0 as Rejection, N as NetworkPolicy } from '../hooks-B50z7ycn.js';
2
- import { b as CommitOptions, c as CommitResult } from '../writing-DnvEscb-.js';
2
+ import { C as CommitOptions, a as CommitResult } from '../writing-BYrXF-yM.js';
3
3
 
4
4
  /** Shallow boundary delta: what to add/remove from `.git/shallow`. */
5
5
  interface ShallowUpdate {
@@ -1259,4 +1259,77 @@ declare class PgStorage implements Storage {
1259
1259
  listForks(repoId: string): Promise<string[]>;
1260
1260
  }
1261
1261
 
1262
- export { type AdvertiseRefsEvent, type AdvertiseResult, type ApplyReceivePackOptions, type Auth, type AuthProvider, type BetterSqlite3Database, BetterSqlite3Storage, type BunSqliteDatabase, BunSqliteStorage, type CreateRepoOptions, type GcOptions, type GcResult, GitRepo, type GitServer, type GitServerConfig, type MaybeAsync, MemoryStorage, type NodeHttpRequest, type NodeHttpResponse, type PgPool, PgStorage, type PostReceiveEvent, type PreReceiveEvent, type PushCommand, RawObject, type RawRefEntry, type ReceivePackResult, Ref, type RefAdvertisement, type RefOps, type RefResult, type RefUpdate, type RefUpdateCreate, type RefUpdateDelete, type RefUpdateModify, type RefUpdateRequest, type RefUpdateResult, Rejection, type ServerHooks, type ServerPolicy, type SshChannel, type SshSessionInfo, type Storage, type UpdateEvent, type V2CommandRequest, type V2FetchRequest, type V2FetchResponseOptions, type V2LsRefsRef, advertiseRefsWithHooks, applyCasRefUpdates, applyReceivePack, buildRefAdvertisementBytes, buildRefListBytes, buildRefListPktLines, buildV2CapabilityAdvertisement, buildV2CapabilityAdvertisementBytes, buildV2FetchResponse, buildV2LsRefsResponse, collectRefs, composeHooks, createServer, handleLsRefs, handleUploadPack, handleV2Fetch, ingestReceivePack, ingestReceivePackFromStream, parseV2CommandRequest, parseV2FetchArgs, resolveRefUpdates };
1262
+ /** Minimal cursor interface matching Cloudflare's `SqlStorageCursor`. */
1263
+ interface DOSqlCursor {
1264
+ next(): {
1265
+ done?: false;
1266
+ value: any;
1267
+ } | {
1268
+ done: true;
1269
+ value?: undefined;
1270
+ };
1271
+ toArray(): any[];
1272
+ }
1273
+ /** Minimal interface matching the `SqlStorage` property of `DurableObjectStorage`. */
1274
+ interface DOSqlApi {
1275
+ exec(query: string, ...bindings: any[]): DOSqlCursor;
1276
+ }
1277
+ /**
1278
+ * Minimal interface matching Cloudflare's `DurableObjectStorage` for
1279
+ * SQLite-backed Durable Objects.
1280
+ *
1281
+ * Only the `sql` and `transactionSync` properties are required.
1282
+ * Pass `ctx.storage` from your Durable Object constructor.
1283
+ */
1284
+ interface DurableObjectStorageSql {
1285
+ sql: DOSqlApi;
1286
+ transactionSync<T>(closure: () => T): T;
1287
+ }
1288
+ /**
1289
+ * SQLite-backed storage for Cloudflare Durable Objects.
1290
+ *
1291
+ * Uses the DO SQLite API (`ctx.storage.sql`) for queries and
1292
+ * `ctx.storage.transactionSync()` for atomic ref updates.
1293
+ *
1294
+ * ```ts
1295
+ * import { DurableObject } from "cloudflare:workers";
1296
+ *
1297
+ * export class GitRepoDO extends DurableObject {
1298
+ * private storage;
1299
+ *
1300
+ * constructor(ctx: DurableObjectState, env: Env) {
1301
+ * super(ctx, env);
1302
+ * this.storage = new DurableObjectSqliteStorage(ctx.storage);
1303
+ * }
1304
+ * }
1305
+ * ```
1306
+ */
1307
+ declare class DurableObjectSqliteStorage implements Storage {
1308
+ private storage;
1309
+ private sql;
1310
+ constructor(storage: DurableObjectStorageSql);
1311
+ hasRepo(repoId: string): boolean;
1312
+ insertRepo(repoId: string): void;
1313
+ deleteRepo(repoId: string): void;
1314
+ getObject(repoId: string, hash: string): RawObject | null;
1315
+ putObject(repoId: string, hash: string, type: string, content: Uint8Array): void;
1316
+ putObjects(repoId: string, objects: ReadonlyArray<{
1317
+ hash: string;
1318
+ type: string;
1319
+ content: Uint8Array;
1320
+ }>): void;
1321
+ hasObject(repoId: string, hash: string): boolean;
1322
+ findObjectsByPrefix(repoId: string, prefix: string): string[];
1323
+ listObjectHashes(repoId: string): string[];
1324
+ deleteObjects(repoId: string, hashes: ReadonlyArray<string>): number;
1325
+ getRef(repoId: string, name: string): Ref | null;
1326
+ putRef(repoId: string, name: string, ref: Ref): void;
1327
+ removeRef(repoId: string, name: string): void;
1328
+ listRefs(repoId: string, prefix?: string): RawRefEntry[];
1329
+ atomicRefUpdate<T>(repoId: string, fn: (ops: RefOps) => T): T;
1330
+ forkRepo(sourceId: string, targetId: string): void;
1331
+ getForkParent(repoId: string): string | null;
1332
+ listForks(repoId: string): string[];
1333
+ }
1334
+
1335
+ export { type AdvertiseRefsEvent, type AdvertiseResult, type ApplyReceivePackOptions, type Auth, type AuthProvider, type BetterSqlite3Database, BetterSqlite3Storage, type BunSqliteDatabase, BunSqliteStorage, type CreateRepoOptions, DurableObjectSqliteStorage, type DurableObjectStorageSql, type GcOptions, type GcResult, GitRepo, type GitServer, type GitServerConfig, type MaybeAsync, MemoryStorage, type NodeHttpRequest, type NodeHttpResponse, type PgPool, PgStorage, type PostReceiveEvent, type PreReceiveEvent, type PushCommand, RawObject, type RawRefEntry, type ReceivePackResult, Ref, type RefAdvertisement, type RefOps, type RefResult, type RefUpdate, type RefUpdateCreate, type RefUpdateDelete, type RefUpdateModify, type RefUpdateRequest, type RefUpdateResult, Rejection, type ServerHooks, type ServerPolicy, type SshChannel, type SshSessionInfo, type Storage, type UpdateEvent, type V2CommandRequest, type V2FetchRequest, type V2FetchResponseOptions, type V2LsRefsRef, advertiseRefsWithHooks, applyCasRefUpdates, applyReceivePack, buildRefAdvertisementBytes, buildRefListBytes, buildRefListPktLines, buildV2CapabilityAdvertisement, buildV2CapabilityAdvertisementBytes, buildV2FetchResponse, buildV2LsRefsResponse, collectRefs, composeHooks, createServer, handleLsRefs, handleUploadPack, handleV2Fetch, ingestReceivePack, ingestReceivePackFromStream, parseV2CommandRequest, parseV2FetchArgs, resolveRefUpdates };
@@ -1,69 +1,69 @@
1
- var Le=(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 X="0000000000000000000000000000000000000000",Tt=(()=>{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+=Tt[r[t]];return e}function ce(r,e){let t="";for(let n=0;n<20;n++)t+=Tt[r[e+n]];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 qr=new Set(["tree","commit","tag"]),He=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(!qr.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 Vr=new TextEncoder;function Xe(r){return typeof r=="string"?Vr.encode(r):r}function zr(){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=Le(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(n){return e.update(Xe(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(Xe(t)),e},async hex(){let t=0;for(let i of r)t+=i.byteLength;let n=new Uint8Array(t),s=0;for(let i of r)n.set(i,s),s+=i.byteLength;let a=await crypto.subtle.digest("SHA-1",n);return Ce(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 Ut=zr(),Y=Ut;async function Lt(r){return Ut().update(r).hex()}var $=Uint8Array,Z=Uint16Array,Kr=Int32Array,Ct=new $([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ht=new $([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Xr=new $([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Dt=(r,e)=>{let t=new Z(31);for(let s=0;s<31;++s)t[s]=e+=1<<r[s-1];let n=new Kr(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:Bt}=Dt(Ct,2);Bt[28]=258;var{b:Yr}=Dt(Ht,0),Je=new Z(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,Je[r]=((e&65280)>>8|(e&255)<<8)>>1}var le=(r,e,t)=>{let n=r.length,s=0,a=new Z(e);for(;s<n;++s)r[s]&&++a[r[s]-1];let i=new Z(e);for(s=1;s<e;++s)i[s]=i[s-1]+a[s-1]<<1;let o;if(t){o=new Z(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=i[r[s]-1]++<<l;for(let u=d|(1<<l)-1;d<=u;++d)o[Je[d]>>f]=c}}else for(o=new Z(n),s=0;s<n;++s)r[s]&&(o[s]=Je[i[r[s]-1]++]>>15-r[s]);return o},de=new $(288);for(let r=0;r<144;++r)de[r]=8;for(let r=144;r<256;++r)de[r]=9;for(let r=256;r<280;++r)de[r]=7;for(let r=280;r<288;++r)de[r]=8;var _t=new $(32);for(let r=0;r<32;++r)_t[r]=5;var Zr=le(de,9,1),Jr=le(_t,5,1),Ye=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},N=(r,e,t)=>{let n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},Ze=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},Nt=r=>(r+7)/8|0,Qr=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new $(r.subarray(e,t))),M=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},$t=(r,e,t,n)=>{let s=r.length,a=n?n.length:0;if(!s||e.f&&!e.l)return t||new $(0);let i=!t,o=i||e.i!=2,f=e.i;i&&(t=new $(s*3));let c=A=>{let x=t.length;if(A>x){let m=new $(Math.max(x*2,A));m.set(t),t=m}},l=e.f||0,d=e.p||0,u=e.b||0,h=e.l,p=e.d,g=e.m,R=e.n,P=s*8;do{if(!h){l=N(r,d,1);let b=N(r,d+1,3);if(d+=3,b)if(b==1)h=Zr,p=Jr,g=9,R=5;else if(b==2){let y=N(r,d,31)+257,w=N(r,d+10,15)+4,O=y+N(r,d+5,31)+1;d+=14;let E=new $(O),S=new $(19);for(let T=0;T<w;++T)S[Xr[T]]=N(r,d+T*3,7);d+=w*3;let j=Ye(S),v=(1<<j)-1,L=le(S,j,1);for(let T=0;T<O;){let G=L[N(r,d,v)];d+=G&15;let oe=G>>4;if(oe<16)E[T++]=oe;else{let It=0,Ue=0;for(oe==16?(Ue=3+N(r,d,3),d+=2,It=E[T-1]):oe==17?(Ue=3+N(r,d,7),d+=3):oe==18&&(Ue=11+N(r,d,127),d+=7);Ue--;)E[T++]=It}}let H=E.subarray(0,y),F=E.subarray(y);g=Ye(H),R=Ye(F),h=le(H,g,1),p=le(F,R,1)}else M(1);else{let y=Nt(d)+4,w=r[y-4]|r[y-3]<<8,O=y+w;if(O>s){f&&M(0);break}o&&c(u+w),t.set(r.subarray(y,O),u),e.b=u+=w,e.p=d=O*8,e.f=l;continue}if(d>P){f&&M(0);break}}o&&c(u+131072);let A=(1<<g)-1,x=(1<<R)-1,m=d;for(;;m=d){let b=h[Ze(r,d)&A],y=b>>4;if(d+=b&15,d>P){f&&M(0);break}if(b||M(2),y<256)t[u++]=y;else if(y==256){m=d,h=null;break}else{let w=y-254;if(y>264){let v=y-257,L=Ct[v];w=N(r,d,(1<<L)-1)+Bt[v],d+=L}let O=p[Ze(r,d)&x],E=O>>4;O||M(3),d+=O&15;let S=Yr[E];if(E>3){let v=Ht[E];S+=Ze(r,d)&(1<<v)-1,d+=v}if(d>P){f&&M(0);break}o&&c(u+131072);let j=u+w;if(u<S){let v=a-S,L=Math.min(S,j);for(v+u<0&&M(3);u<L;++u)t[u]=n[v+u]}for(;u<j;++u)t[u]=t[u-S]}}e.l=h,e.p=m,e.b=u,e.f=l,h&&(l=1,e.m=g,e.d=p,e.n=R)}while(!l);return u!=t.length&&i?Qr(t,0,u):t.subarray(0,u)},Ft=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&M(0,"invalid zlib data"),r[1]&32&&M(0,"zlib dictionaries are not supported"),2);function Mt(r){let e=Ft(r);return $t(r.subarray(e,-4),{i:2})}function Qe(r){let e=Ft(r),t={i:2},n=$t(r.subarray(e),t),s=Nt(t.p);return{result:n,bytesConsumed:e+s+4}}async function en(){let r;if(!(typeof document<"u"))try{r=Le(["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 i=r.inflateSync(a,{info:!0});return{result:new Uint8Array(i.buffer),bytesConsumed:i.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(r.deflateSync(s)),inflateSync:s=>new Uint8Array(r.inflateSync(s)),inflateWithConsumed:n??Qe}}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:Mt,inflateWithConsumed:Qe}}var tn=null;function Wt(){return tn??=en()}async function De(r){return await(await Wt()).deflateSync(r)}async function et(r,e){let t=await Wt(),{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 Q=1346454347,_e=2,Vt=1,zt=2,Kt=3,Xt=4,q=6,ue=7,Yt={[Vt]:"commit",[zt]:"tree",[Kt]:"blob",[Xt]:"tag"},Zt={commit:Vt,tree:zt,blob:Kt,tag:Xt};async function Jt(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),n=t.getUint32(0);if(n!==Q)throw new Error(`Invalid pack signature: 0x${n.toString(16)} (expected 0x${Q.toString(16)})`);let s=t.getUint32(4);if(s!==_e)throw new Error(`Unsupported pack version: ${s}`);if(r.byteLength>=32){let c=ce(r,r.byteLength-20),l=Y();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),i=[],o=12;for(let c=0;c<a;c++){let l=await rn(r,o);i.push(l),o=l.nextOffset}return(await nn(i,e)).map((c,l)=>({...c,offset:i[l].headerOffset,nextOffset:i[l].nextOffset}))}async function rn(r,e){let t=e,n=r[e++],s=n>>4&7,a=n&15,i=4;for(;n&128;)n=r[e++],a|=(n&127)<<i,i+=7;let o,f;if(s===q){let d=r[e++];for(o=d&127;d&128;)o+=1,d=r[e++],o=(o<<7)+(d&127);o=t-o}else s===ue&&(f=ce(r,e),e+=20);let{result:c,bytesConsumed:l}=await et(r.subarray(e),a);return{headerOffset:t,typeNum:s,inflated:c,baseOffset:o,baseHash:f,nextOffset:e+l}}var Gt=50;async function nn(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,i=0){if(i>Gt)throw new Error(`delta chain depth ${i} exceeds limit of ${Gt}`);let o=n[a];if(o)return o;let f=r[a];if(f.typeNum!==q&&f.typeNum!==ue){let h=Yt[f.typeNum];if(!h)throw new Error(`Unknown object type: ${f.typeNum}`);let p={type:h,content:f.inflated,hash:await J(h,f.inflated)};return n[a]=p,p}if(f.typeNum===q){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,i+1),g=Be(p.content,f.inflated),R={type:p.type,content:g,hash:await J(p.type,g)};return n[a]=R,R}let c=await sn(r,n,f.baseHash,s),l;if(c!==void 0)l=await s(c,i+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=Be(l.content,f.inflated),u={type:l.type,content:d,hash:await J(l.type,d)};return n[a]=u,u}for(let a=0;a<r.length;a++)await s(a);return n}async function sn(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!==q&&a.typeNum!==ue&&(await n(s)).hash===t)return s}}var tt=class{buf=new Uint8Array(0);iter;eof=!1;_bytesRead=0;hasher;constructor(e,t=!1){this.iter=e[Symbol.asyncIterator](),this.hasher=t?Y():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 et(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*Qt(r,e){let t=new tt(r,!0),n=await t.readExact(12),s=new DataView(n.buffer,n.byteOffset,n.byteLength),a=s.getUint32(0);if(a!==Q)throw new Error(`Invalid pack signature: 0x${a.toString(16)} (expected 0x${Q.toString(16)})`);let i=s.getUint32(4);if(i!==_e)throw new Error(`Unsupported pack version: ${i}`);let o=s.getUint32(8),f=new Map,c=new Map;for(let u=0;u<o;u++){let h=t.bytesRead,p=await t.readByte(),g=p>>4&7,R=p&15,P=4;for(;p&128;)p=await t.readByte(),R|=(p&127)<<P,P+=7;let A,x;if(g===q){let y=await t.readByte();for(A=y&127;y&128;)A+=1,y=await t.readByte(),A=(A<<7)+(y&127);A=h-A}else if(g===ue){let y=await t.readExact(20);x=ce(y,0)}let m=await t.inflateNext(R),b;if(g!==q&&g!==ue){let y=Yt[g];if(!y)throw new Error(`Unknown object type: ${g}`);b={type:y,content:m,hash:await J(y,m)}}else if(g===q){let y=f.get(A);if(!y)throw new Error(`OFS_DELTA base not found at offset ${A}`);let w=Be(y.content,m);b={type:y.type,content:w,hash:await J(y.type,w)}}else{let y=c.get(x);if(!y&&e&&(y=await e(x)??void 0),!y)throw new Error(`REF_DELTA base not found for hash ${x}`);let w=Be(y.content,m);b={type:y.type,content:w,hash:await J(y.type,w)}}f.set(h,b),c.set(b.hash,b),yield b}let l=ce(await t.readRaw(20),0),d=await t.hashHex();if(d!==l)throw new Error(`pack checksum mismatch: expected ${l}, computed ${d}`)}function Be(r,e){let t=0,{value:n,newPos:s}=qt(e,t);if(t=s,n!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${n}, got ${r.byteLength}`);let{value:a,newPos:i}=qt(e,t);t=i;let o=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),o.set(r.subarray(l,l+d),f),f+=d}else if(c>0)o.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 o}async function ee(r){let e=[],t=new Map,n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Q),s.setUint32(4,_e),s.setUint32(8,r.length),e.push(n);let a=12,i=[];for(let o of r){let f=a;t.set(o.hash,a);let c=o.delta&&o.deltaBaseHash?t.get(o.deltaBaseHash):void 0;if(o.delta&&c!==void 0){let l=rt(q,o.delta.byteLength),d=on(a-c),u=await De(o.delta);e.push(l,d,u),a+=l.byteLength+d.byteLength+u.byteLength}else{let l=Zt[o.type],d=rt(l,o.content.byteLength),u=await De(o.content);e.push(d,u),a+=d.byteLength+u.byteLength}i.push({hash:o.hash,offset:f,nextOffset:a})}return{data:await an(e),entries:i}}async function*er(r,e){let t=Y(),n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,Q),s.setUint32(4,_e),s.setUint32(8,r),t.update(n),yield n;for await(let a of e){let i=Zt[a.type],o=rt(i,a.content.byteLength),f=await De(a.content);t.update(o),t.update(f),yield cn(o,f)}yield fe(await t.hex())}async function an(r){let e=0;for(let i of r)e+=i.byteLength;e+=20;let t=new Uint8Array(e),n=0;for(let i of r)t.set(i,n),n+=i.byteLength;let s=Y();s.update(t.subarray(0,n));let a=await s.hex();return t.set(fe(a),n),t}function on(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 rt(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 qt(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 cn(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var fn=new TextEncoder;async function J(r,e){let t=fn.encode(`${r} ${e.byteLength}\0`),n=Y();return n.update(t),n.update(e),n.hex()}var ln=new TextEncoder,As=new TextDecoder;function tr(r,e){let t=ln.encode(`${r} ${e.byteLength}\0`),n=new Uint8Array(t.byteLength+e.byteLength);return n.set(t),n.set(e,t.byteLength),n}function pe(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),[i="0",o="+0000"]=a.split(" "),f=parseInt(i,10);return{name:n,email:s,timestamp:f,timezone:o}}function Ne(r){return`${r.name} <${r.email}> ${r.timestamp} ${r.timezone}`}var dn=new TextEncoder,un=new TextDecoder;function he(r){let e=un.decode(r),t=e.indexOf(`
1
+ var He=(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 Y="0000000000000000000000000000000000000000",Ht=(()=>{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 De(r){let e="";for(let t=0;t<20;t++)e+=Ht[r[t]];return e}function le(r,e){let t="";for(let n=0;n<20;n++)t+=Ht[r[e+n]];return t}function de(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 Kr=new Set(["tree","commit","tag"]),_e=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(!Kr.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 Yr=new TextEncoder;function Ze(r){return typeof r=="string"?Yr.encode(r):r}function Zr(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(Ze(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=He(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(n){return e.update(Ze(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(Ze(t)),e},async hex(){let t=0;for(let i of r)t+=i.byteLength;let n=new Uint8Array(t),s=0;for(let i of r)n.set(i,s),s+=i.byteLength;let a=await crypto.subtle.digest("SHA-1",n);return De(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 Dt=Zr(),Z=Dt;async function _t(r){return Dt().update(r).hex()}var M=Uint8Array,J=Uint16Array,Jr=Int32Array,Nt=new M([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]),Bt=new M([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]),Qr=new M([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ft=(r,e)=>{let t=new J(31);for(let s=0;s<31;++s)t[s]=e+=1<<r[s-1];let n=new Jr(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:Mt}=Ft(Nt,2);Mt[28]=258;var{b:en}=Ft(Bt,0),et=new J(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,et[r]=((e&65280)>>8|(e&255)<<8)>>1}var ue=(r,e,t)=>{let n=r.length,s=0,a=new J(e);for(;s<n;++s)r[s]&&++a[r[s]-1];let i=new J(e);for(s=1;s<e;++s)i[s]=i[s-1]+a[s-1]<<1;let o;if(t){o=new J(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=i[r[s]-1]++<<l;for(let u=d|(1<<l)-1;d<=u;++d)o[et[d]>>f]=c}}else for(o=new J(n),s=0;s<n;++s)r[s]&&(o[s]=et[i[r[s]-1]++]>>15-r[s]);return o},pe=new M(288);for(let r=0;r<144;++r)pe[r]=8;for(let r=144;r<256;++r)pe[r]=9;for(let r=256;r<280;++r)pe[r]=7;for(let r=280;r<288;++r)pe[r]=8;var Wt=new M(32);for(let r=0;r<32;++r)Wt[r]=5;var tn=ue(pe,9,1),rn=ue(Wt,5,1),Je=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},F=(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)},$t=r=>(r+7)/8|0,nn=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new M(r.subarray(e,t))),$=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},Gt=(r,e,t,n)=>{let s=r.length,a=n?n.length:0;if(!s||e.f&&!e.l)return t||new M(0);let i=!t,o=i||e.i!=2,f=e.i;i&&(t=new M(s*3));let c=k=>{let x=t.length;if(k>x){let m=new M(Math.max(x*2,k));m.set(t),t=m}},l=e.f||0,d=e.p||0,u=e.b||0,h=e.l,p=e.d,g=e.m,w=e.n,O=s*8;do{if(!h){l=F(r,d,1);let b=F(r,d+1,3);if(d+=3,b)if(b==1)h=tn,p=rn,g=9,w=5;else if(b==2){let y=F(r,d,31)+257,R=F(r,d+10,15)+4,P=y+F(r,d+5,31)+1;d+=14;let A=new M(P),S=new M(19);for(let L=0;L<R;++L)S[Qr[L]]=F(r,d+L*3,7);d+=R*3;let v=Je(S),j=(1<<v)-1,C=ue(S,v,1);for(let L=0;L<P;){let q=C[F(r,d,j)];d+=q&15;let fe=q>>4;if(fe<16)A[L++]=fe;else{let Ct=0,Ce=0;for(fe==16?(Ce=3+F(r,d,3),d+=2,Ct=A[L-1]):fe==17?(Ce=3+F(r,d,7),d+=3):fe==18&&(Ce=11+F(r,d,127),d+=7);Ce--;)A[L++]=Ct}}let D=A.subarray(0,y),W=A.subarray(y);g=Je(D),w=Je(W),h=ue(D,g,1),p=ue(W,w,1)}else $(1);else{let y=$t(d)+4,R=r[y-4]|r[y-3]<<8,P=y+R;if(P>s){f&&$(0);break}o&&c(u+R),t.set(r.subarray(y,P),u),e.b=u+=R,e.p=d=P*8,e.f=l;continue}if(d>O){f&&$(0);break}}o&&c(u+131072);let k=(1<<g)-1,x=(1<<w)-1,m=d;for(;;m=d){let b=h[Qe(r,d)&k],y=b>>4;if(d+=b&15,d>O){f&&$(0);break}if(b||$(2),y<256)t[u++]=y;else if(y==256){m=d,h=null;break}else{let R=y-254;if(y>264){let j=y-257,C=Nt[j];R=F(r,d,(1<<C)-1)+Mt[j],d+=C}let P=p[Qe(r,d)&x],A=P>>4;P||$(3),d+=P&15;let S=en[A];if(A>3){let j=Bt[A];S+=Qe(r,d)&(1<<j)-1,d+=j}if(d>O){f&&$(0);break}o&&c(u+131072);let v=u+R;if(u<S){let j=a-S,C=Math.min(S,v);for(j+u<0&&$(3);u<C;++u)t[u]=n[j+u]}for(;u<v;++u)t[u]=t[u-S]}}e.l=h,e.p=m,e.b=u,e.f=l,h&&(l=1,e.m=g,e.d=p,e.n=w)}while(!l);return u!=t.length&&i?nn(t,0,u):t.subarray(0,u)},qt=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&$(0,"invalid zlib data"),r[1]&32&&$(0,"zlib dictionaries are not supported"),2);function Vt(r){let e=qt(r);return Gt(r.subarray(e,-4),{i:2})}function tt(r){let e=qt(r),t={i:2},n=Gt(r.subarray(e),t),s=$t(t.p);return{result:n,bytesConsumed:e+s+4}}async function sn(){let r;if(!(typeof document<"u"))try{r=He(["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 i=r.inflateSync(a,{info:!0});return{result:new Uint8Array(i.buffer),bytesConsumed:i.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(r.deflateSync(s)),inflateSync:s=>new Uint8Array(r.inflateSync(s)),inflateWithConsumed:n??tt}}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:Vt,inflateWithConsumed:tt}}var an=null;function zt(){return an??=sn()}async function Ne(r){return await(await zt()).deflateSync(r)}async function rt(r,e){let t=await zt(),{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 ee=1346454347,Fe=2,Yt=1,Zt=2,Jt=3,Qt=4,V=6,he=7,er={[Yt]:"commit",[Zt]:"tree",[Jt]:"blob",[Qt]:"tag"},tr={commit:Yt,tree:Zt,blob:Jt,tag:Qt};async function rr(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),n=t.getUint32(0);if(n!==ee)throw new Error(`Invalid pack signature: 0x${n.toString(16)} (expected 0x${ee.toString(16)})`);let s=t.getUint32(4);if(s!==Fe)throw new Error(`Unsupported pack version: ${s}`);if(r.byteLength>=32){let c=le(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),i=[],o=12;for(let c=0;c<a;c++){let l=await on(r,o);i.push(l),o=l.nextOffset}return(await cn(i,e)).map((c,l)=>({...c,offset:i[l].headerOffset,nextOffset:i[l].nextOffset}))}async function on(r,e){let t=e,n=r[e++],s=n>>4&7,a=n&15,i=4;for(;n&128;)n=r[e++],a|=(n&127)<<i,i+=7;let o,f;if(s===V){let d=r[e++];for(o=d&127;d&128;)o+=1,d=r[e++],o=(o<<7)+(d&127);o=t-o}else s===he&&(f=le(r,e),e+=20);let{result:c,bytesConsumed:l}=await rt(r.subarray(e),a);return{headerOffset:t,typeNum:s,inflated:c,baseOffset:o,baseHash:f,nextOffset:e+l}}var Xt=50;async function cn(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,i=0){if(i>Xt)throw new Error(`delta chain depth ${i} exceeds limit of ${Xt}`);let o=n[a];if(o)return o;let f=r[a];if(f.typeNum!==V&&f.typeNum!==he){let h=er[f.typeNum];if(!h)throw new Error(`Unknown object type: ${f.typeNum}`);let p={type:h,content:f.inflated,hash:await Q(h,f.inflated)};return n[a]=p,p}if(f.typeNum===V){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,i+1),g=Be(p.content,f.inflated),w={type:p.type,content:g,hash:await Q(p.type,g)};return n[a]=w,w}let c=await fn(r,n,f.baseHash,s),l;if(c!==void 0)l=await s(c,i+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=Be(l.content,f.inflated),u={type:l.type,content:d,hash:await Q(l.type,d)};return n[a]=u,u}for(let a=0;a<r.length;a++)await s(a);return n}async function fn(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!==V&&a.typeNum!==he&&(await n(s)).hash===t)return s}}var nt=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 rt(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*nr(r,e){let t=new nt(r,!0),n=await t.readExact(12),s=new DataView(n.buffer,n.byteOffset,n.byteLength),a=s.getUint32(0);if(a!==ee)throw new Error(`Invalid pack signature: 0x${a.toString(16)} (expected 0x${ee.toString(16)})`);let i=s.getUint32(4);if(i!==Fe)throw new Error(`Unsupported pack version: ${i}`);let o=s.getUint32(8),f=new Map,c=new Map;for(let u=0;u<o;u++){let h=t.bytesRead,p=await t.readByte(),g=p>>4&7,w=p&15,O=4;for(;p&128;)p=await t.readByte(),w|=(p&127)<<O,O+=7;let k,x;if(g===V){let y=await t.readByte();for(k=y&127;y&128;)k+=1,y=await t.readByte(),k=(k<<7)+(y&127);k=h-k}else if(g===he){let y=await t.readExact(20);x=le(y,0)}let m=await t.inflateNext(w),b;if(g!==V&&g!==he){let y=er[g];if(!y)throw new Error(`Unknown object type: ${g}`);b={type:y,content:m,hash:await Q(y,m)}}else if(g===V){let y=f.get(k);if(!y)throw new Error(`OFS_DELTA base not found at offset ${k}`);let R=Be(y.content,m);b={type:y.type,content:R,hash:await Q(y.type,R)}}else{let y=c.get(x);if(!y&&e&&(y=await e(x)??void 0),!y)throw new Error(`REF_DELTA base not found for hash ${x}`);let R=Be(y.content,m);b={type:y.type,content:R,hash:await Q(y.type,R)}}f.set(h,b),c.set(b.hash,b),yield b}let l=le(await t.readRaw(20),0),d=await t.hashHex();if(d!==l)throw new Error(`pack checksum mismatch: expected ${l}, computed ${d}`)}function Be(r,e){let t=0,{value:n,newPos:s}=Kt(e,t);if(t=s,n!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${n}, got ${r.byteLength}`);let{value:a,newPos:i}=Kt(e,t);t=i;let o=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),o.set(r.subarray(l,l+d),f),f+=d}else if(c>0)o.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 o}async function te(r){let e=[],t=new Map,n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,ee),s.setUint32(4,Fe),s.setUint32(8,r.length),e.push(n);let a=12,i=[];for(let o of r){let f=a;t.set(o.hash,a);let c=o.delta&&o.deltaBaseHash?t.get(o.deltaBaseHash):void 0;if(o.delta&&c!==void 0){let l=st(V,o.delta.byteLength),d=dn(a-c),u=await Ne(o.delta);e.push(l,d,u),a+=l.byteLength+d.byteLength+u.byteLength}else{let l=tr[o.type],d=st(l,o.content.byteLength),u=await Ne(o.content);e.push(d,u),a+=d.byteLength+u.byteLength}i.push({hash:o.hash,offset:f,nextOffset:a})}return{data:await ln(e),entries:i}}async function*sr(r,e){let t=Z(),n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,ee),s.setUint32(4,Fe),s.setUint32(8,r),t.update(n),yield n;for await(let a of e){let i=tr[a.type],o=st(i,a.content.byteLength),f=await Ne(a.content);t.update(o),t.update(f),yield un(o,f)}yield de(await t.hex())}async function ln(r){let e=0;for(let i of r)e+=i.byteLength;e+=20;let t=new Uint8Array(e),n=0;for(let i of r)t.set(i,n),n+=i.byteLength;let s=Z();s.update(t.subarray(0,n));let a=await s.hex();return t.set(de(a),n),t}function dn(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 st(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 Kt(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 un(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var pn=new TextEncoder;async function Q(r,e){let t=pn.encode(`${r} ${e.byteLength}\0`),n=Z();return n.update(t),n.update(e),n.hex()}var hn=new TextEncoder,js=new TextDecoder;function ar(r,e){let t=hn.encode(`${r} ${e.byteLength}\0`),n=new Uint8Array(t.byteLength+e.byteLength);return n.set(t),n.set(e,t.byteLength),n}function ye(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),[i="0",o="+0000"]=a.split(" "),f=parseInt(i,10);return{name:n,email:s,timestamp:f,timezone:o}}function Me(r){return`${r.name} <${r.email}> ${r.timestamp} ${r.timezone}`}var yn=new TextEncoder,mn=new TextDecoder;function me(r){let e=mn.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="",i=[],o,f;for(let c of n.split(`
4
- `)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),u=c.slice(l+1);switch(d){case"tree":a=u;break;case"parent":i.push(u);break;case"author":o=pe(u);break;case"committer":f=pe(u);break}}if(!a)throw new Error("Commit missing tree field");if(!o)throw new Error("Commit missing author field");if(!f)throw new Error("Commit missing committer field");return{type:"commit",tree:a,parents:i,author:o,committer:f,message:s}}function rr(r){let e=[];e.push(`tree ${r.tree}`);for(let t of r.parents)e.push(`parent ${t}`);return e.push(`author ${Ne(r.author)}`),e.push(`committer ${Ne(r.committer)}`),e.push(""),e.push(r.message),dn.encode(e.join(`
5
- `))}var js=new TextEncoder,pn=new TextDecoder;function te(r){let e=pn.decode(r),t=e.indexOf(`
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":i.push(u);break;case"author":o=ye(u);break;case"committer":f=ye(u);break}}if(!a)throw new Error("Commit missing tree field");if(!o)throw new Error("Commit missing author field");if(!f)throw new Error("Commit missing committer field");return{type:"commit",tree:a,parents:i,author:o,committer:f,message:s}}function ir(r){let e=[];e.push(`tree ${r.tree}`);for(let t of r.parents)e.push(`parent ${t}`);return e.push(`author ${Me(r.author)}`),e.push(`committer ${Me(r.committer)}`),e.push(""),e.push(r.message),yn.encode(e.join(`
5
+ `))}var Cs=new TextEncoder,bn=new TextDecoder;function re(r){let e=bn.decode(r),t=e.indexOf(`
6
6
 
7
7
  `),n=t===-1?e:e.slice(0,t),s=t===-1?"":e.slice(t+2),a="",i="commit",o="",f;for(let c of n.split(`
8
- `)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),u=c.slice(l+1);switch(d){case"object":a=u;break;case"type":i=u;break;case"tag":o=u;break;case"tagger":f=pe(u);break}}if(!a)throw new Error("Tag missing object field");if(!o)throw new Error("Tag missing tag name field");if(!f)throw new Error("Tag missing tagger field");return{type:"tag",object:a,objectType:i,name:o,tagger:f,message:s}}async function $e(r,e,t){let n=await r.objectStore.write(e,t);return r.hooks?.onObjectWrite?.({repo:r,type:e,hash:n}),n}async function z(r,e){return r.objectStore.read(e)}async function ye(r,e){return r.objectStore.exists(e)}var Us=new TextDecoder;async function V(r,e){let t=await z(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return he(t.content)}var hn=new TextEncoder,nr=new TextDecoder,yn=new Set(["100644","100755","040000","120000","160000"]);function mn(r){return r.length===4&&r.toLowerCase()===".git"}function bn(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(mn(r))throw new Error(`invalid tree entry: '${r}'`);if(!yn.has(e))throw new Error(`invalid tree entry mode: '${e}' for '${r}'`)}function me(r){let e=[],t=0;for(;t<r.byteLength;){let n=r.indexOf(32,t);if(n===-1)break;let s=nr.decode(r.subarray(t,n)),a=r.indexOf(0,n+1);if(a===-1)break;let i=nr.decode(r.subarray(n+1,a)),o=r.subarray(a+1,a+21),f=Ce(o),c=s.padStart(6,"0");bn(i,c),e.push({mode:c,name:i,hash:f}),t=a+21}return{type:"tree",entries:e}}function sr(r){let e=[];for(let a of r.entries){let i=a.mode.replace(/^0+/,""),o=hn.encode(`${i} ${a.name}\0`),f=fe(a.hash);e.push(o),e.push(f)}let t=e.reduce((a,i)=>a+i.byteLength,0),n=new Uint8Array(t),s=0;for(let a of e)n.set(a,s),s+=a.byteLength;return n}function ar(r){return typeof r=="string"?{type:"direct",hash:r}:r}var nt=".lock";var gn=[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 wn(r,e,t){let n=0,s=!1,a=e;for(;a<r.length;a++){let o=r.charCodeAt(a);switch(o<128?gn[o]:0){case 1:break;case 2:if(n===46)return{len:-1,starConsumed:s};n=o;continue;case 3:if(n===64)return{len:-1,starConsumed:s};n=o;continue;case 4:return{len:-1,starConsumed:s};case 5:if(!t)return{len:-1,starConsumed:s};s=!0,n=o;continue;default:n=o;continue}break}let i=a-e;return i===0?{len:0,starConsumed:s}:r.charCodeAt(e)===46?{len:-1,starConsumed:s}:i>=nt.length&&r.slice(a-nt.length,a)===nt?{len:-1,starConsumed:s}:{len:i,starConsumed:s}}function st(r,e=0){if(r==="@"||r.length===0)return!1;let t=0,n=0,s=!!(e&2);for(;t<=r.length;){let{len:a,starConsumed:i}=wn(r,t,s);if(a<0||a===0)return!1;i&&(s=!1),n++,t+=a+1}return!(r.charCodeAt(r.length-1)===46||!(e&1)&&n<2)}var Rn=10;async function xn(r,e){return r.refStore.readRef(e)}async function be(r,e){let t=e;for(let n=0;n<Rn;n++){let s=await xn(r,t);if(!s)return null;if(s.type==="direct")return s.hash;t=s.target}throw new Error(`Symbolic ref loop detected resolving "${e}"`)}function kn(r){let e=Math.abs(r),t=r<=0?"+":"-",n=String(Math.floor(e/60)).padStart(2,"0"),s=String(e%60).padStart(2,"0");return`${t}${n}${s}`}function ir(r){if("timestamp"in r)return r;let e=r.date??new Date;return{name:r.name,email:r.email,timestamp:Math.floor(e.getTime()/1e3),timezone:kn(e.getTimezoneOffset())}}async function cr(r,e){let t=e.branch?`refs/heads/${e.branch}`:null,n=t?await be(r,t):null,s=null;n&&(s=(await V(r,n)).tree);let a=[];for(let[u,h]of Object.entries(e.files))if(h===null)a.push({path:u,hash:null});else{let p=typeof h=="string"?new TextEncoder().encode(h):h,g=await $e(r,"blob",p);a.push({path:u,hash:g})}let i;s?i=await An(r,s,a):i=await it(r,null,at(a));let o=ir(e.author),f=e.committer?ir(e.committer):o,l=rr({type:"commit",tree:i,parents:n?[n]:[],author:o,committer:f,message:e.message});return{hash:await $e(r,"commit",l),parentHash:n}}async function An(r,e,t){return it(r,e,at(t))}function at(r){let e=new Map,t=new Map;for(let n of r){let s=n.path.indexOf("/");if(s===-1)e.set(n.path,{hash:n.hash,mode:n.mode??"100644"});else{let a=n.path.slice(0,s),i=n.path.slice(s+1),o=t.get(a);o||(o=[],t.set(a,o)),o.push({...n,path:i})}}return{files:e,dirs:t}}async function or(r,e){let t=await z(r,e);if(t.type!=="tree")throw new Error(`Expected tree object, got ${t.type}`);return me(t.content).entries}async function it(r,e,t){let n=new Map;if(e)for(let i of await or(r,e))n.set(i.name,i);for(let[i,{hash:o,mode:f}]of t.files)o===null?n.delete(i):n.set(i,{name:i,hash:o,mode:f});for(let[i,o]of t.dirs){let f=n.get(i),c=f?.mode==="040000"?f.hash:null,l=at(o),d=await it(r,c,l);(await or(r,d)).length===0?n.delete(i):n.set(i,{name:i,hash:d,mode:"040000"})}let s=[...n.values()].sort((i,o)=>{let f=i.mode==="040000"?`${i.name}/`:i.name,c=o.mode==="040000"?`${o.name}/`:o.name;return f<c?-1:f>c?1:0}),a=sr({type:"tree",entries:s});return $e(r,"tree",a)}async function ot(r,e,t){if(e===t)return!0;let n=new Set,s=[t],a=0;for(;a<s.length;){let i=s[a++];if(i===e)return!0;if(n.has(i))continue;n.add(i);let o;try{o=await V(r,i)}catch{continue}for(let f of o.parents)n.has(f)||s.push(f)}return!1}var Me=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]),En=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]),Fe=64,Pn=4,ct=4096,fr=65536,On=127;function Sn(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let n=t>>>2;n<16&&(n=16),n=jn(n);let s=n-1,a=new Uint32Array(n),i=[],o=-1>>>0;for(let u=t*16-16;u>=0;u-=16){let h=0;for(let p=1;p<=16;p++)h=(h<<8|r[u+p])^Me[h>>>23];if(h=h>>>0,h===o)i[i.length-1].ptr=u+16;else{o=h;let p=h&s;i.push({ptr:u+16,val:h}),a[p]++}}let f=new Map;for(let u of i){let h=u.val&s,p=f.get(h);p||(p=[],f.set(h,p)),p.push(u)}for(let[u,h]of f){if(h.length<=Fe)continue;let p=[],g=h.length/Fe;for(let R=0;R<Fe;R++)p.push(h[Math.floor(R*g)]);f.set(u,p),a[u]=Fe}let c=new Uint32Array(n+1),l=[],d=0;for(let u=0;u<n;u++){c[u]=d;let h=f.get(u);if(h){for(let p of h)l.push(p);d+=h.length}}return c[n]=d,{src:r,hashMask:s,buckets:c,entries:l}}function vn(r,e,t){if(!r||e.byteLength===0)return null;let n=r.src.byteLength,s=e.byteLength,a=r.src,i=new Uint8Array(Math.max(s,1024)),o=0;function f(g){for(;o+g>i.length;){let R=new Uint8Array(i.length*2);R.set(i),i=R}}o=dr(i,o,n),o=dr(i,o,s),f(18),o++;let c=0,l=0,d=Math.min(16,s);for(let g=0;g<d;g++)i[o++]=e[g],c=(c<<8|e[g])^Me[c>>>23],l++;c=c>>>0;let u=d,h=0,p=0;for(;u<s;){if(p<ct){c^=En[e[u-16]],c=((c<<8|e[u])^Me[c>>>23])>>>0;let g=c&r.hashMask,R=r.buckets[g],P=r.buckets[g+1];for(let A=R;A<P;A++){let x=r.entries[A];if(x.val!==c)continue;let m=x.ptr,b=a.byteLength-m,y=s-u;if(b>y&&(b=y),b<=p)break;let w=0;for(;w<b&&a[m+w]===e[u+w];)w++;if(w>p&&(p=w,h=m,p>=ct))break}}if(p<Pn)f(2),l===0&&o++,i[o++]=e[u++],l++,l===On&&(i[o-l-1]=l,l=0),p=0;else{if(l>0){for(;h>0&&a[h-1]===e[u-1];)if(p++,h--,u--,o--,!(--l>0)){o--,l=-1;break}l>0&&(i[o-l-1]=l),l=0}let g=p>fr?p-fr:0;p-=g,f(8);let R=o++,P=128;if(h&255&&(i[o++]=h&255,P|=1),h&65280&&(i[o++]=h>>>8&255,P|=2),h&16711680&&(i[o++]=h>>>16&255,P|=4),h&4278190080&&(i[o++]=h>>>24&255,P|=8),p&255&&(i[o++]=p&255,P|=16),p&65280&&(i[o++]=p>>>8&255,P|=32),i[R]=P,u+=p,h+=p,p=g,h>4294967295&&(p=0),p<ct){c=0;for(let A=-16;A<0;A++)c=(c<<8|e[u+A])^Me[c>>>23];c=c>>>0}}if(t&&o>t)return null}return l>0&&(i[o-l-1]=l),t&&o>t?null:i.subarray(0,o)}var lr={blob:0,tree:1,commit:2,tag:3};function ur(r,e){let t=e?.window??10,n=e?.depth??50,s=r.slice().sort((c,l)=>{let d=lr[c.type]??99,u=lr[l.type]??99;return d!==u?d-u:l.content.byteLength-c.content.byteLength}),a=new Map,i=[],o=[],f=[];for(let c=0;c<s.length;c++){let l=s[c],d={hash:l.hash,type:l.type,content:l.content,depth:0},u=null,h=null,p=Math.max(0,c-t);for(let g=c-1;g>=p;g--){let R=s[g];if(R.type!==l.type||(a.get(R.hash)?.depth??0)>=n||l.content.byteLength<R.content.byteLength>>>5)continue;let x=o[g-p]??null;if(!x)continue;let m=u?u.byteLength:l.content.byteLength/2|0;if(m<16)continue;let b=vn(x,l.content,m);b&&(!u||b.byteLength<u.byteLength)&&(u=b,h=R.hash)}if(u&&h){d.delta=u,d.deltaBase=h;let g=a.get(h);d.depth=(g?.depth??0)+1}a.set(l.hash,d),i.push(d),o.length>=t&&(o.shift(),f.shift()),o.push(Sn(l.content)),f.push(l.hash)}return i}function jn(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 dr(r,e,t){let n=t;do{let s=n&127;n>>>=7,n>0&&(s|=128),r[e++]=s}while(n>0);return e}var In=2147483647;async function ft(r,e,t,n){if(t>=In)return{shallow:[],unshallow:[...n]};let s=new Map,a=[];for(let c of e)!s.has(c)&&await ye(r,c)&&(s.set(c,1),a.push({hash:c,level:1}));let i=new Set,o=0;for(;o<a.length;){let{hash:c,level:l}=a[o++];if(l>=t){i.add(c);continue}let d;try{d=await V(r,c)}catch{continue}for(let u of d.parents)!s.has(u)&&await ye(r,u)&&(s.set(u,l+1),a.push({hash:u,level:l+1}))}let f=[];for(let c of n){let l=s.get(c);l!==void 0&&l<t&&f.push(c)}return{shallow:[...i],unshallow:f}}async function Re(r,e,t,n,s){let a=s??n,i=new Set;for(let l of t)await ge(r,l,i,a);let o=[...e];if(s&&n)for(let l of s)try{let d=await V(r,l);for(let u of d.parents)i.has(u)||o.push(u)}catch{}let f=[],c=new Set;for(let l of o)await we(r,l,i,c,f,n);return{count:f.length,objects:Tn(f)}}async function pr(r,e,t,n,s){let{count:a,objects:i}=await Re(r,e,t,n,s);return{count:a,objects:Un(r,i)}}async function*Tn(r){for(let e of r)yield e}async function*Un(r,e){for await(let t of e){let n=await z(r,t.hash);yield{hash:t.hash,type:t.type,content:n.content}}}async function hr(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function ge(r,e,t,n){if(t.has(e)||(t.add(e),!await ye(r,e)))return;let s=await z(r,e);switch(s.type){case"commit":{let a=he(s.content);if(await ge(r,a.tree,t,n),!n?.has(e))for(let i of a.parents)await ge(r,i,t,n);break}case"tree":{let a=me(s.content);for(let i of a.entries)await ge(r,i.hash,t,n);break}case"tag":{let a=te(s.content);await ge(r,a.object,t,n);break}case"blob":break}}async function we(r,e,t,n,s,a){if(n.has(e)||t.has(e))return;n.add(e);let i=await z(r,e);switch(s.push({hash:e,type:i.type}),i.type){case"commit":{let o=he(i.content);if(await we(r,o.tree,t,n,s,a),!a?.has(e))for(let f of o.parents)await we(r,f,t,n,s,a);break}case"tree":{let o=me(i.content);for(let f of o.entries)await we(r,f.hash,t,n,s,a);break}case"tag":{let o=te(i.content);await we(r,o.object,t,n,s,a);break}case"blob":break}}var Ln=new TextEncoder,mr=new TextDecoder,yr=65520,Cn=new Uint8Array([48,48,48,48]),Hn=new Uint8Array([48,48,48,49]),ea=new Uint8Array([48,48,48,50]);function k(r){let e=typeof r=="string"?Ln.encode(r):r,t=4+e.byteLength;if(t>yr)throw new Error(`pkt-line too long: ${t} bytes (max ${yr})`);let n=t.toString(16).padStart(4,"0"),s=new Uint8Array(t);return s[0]=n.charCodeAt(0),s[1]=n.charCodeAt(1),s[2]=n.charCodeAt(2),s[3]=n.charCodeAt(3),s.set(e,4),s}function _(){return Cn.slice()}function K(){return Hn.slice()}function B(...r){let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}function lt(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let n=mr.decode(r.subarray(t,t+4)),s=parseInt(n,16);if(Number.isNaN(s))throw new Error(`Invalid pkt-line length: ${n}`);if(s===0){e.push({type:"flush"}),t+=4;continue}if(s===1){e.push({type:"delim"}),t+=4;continue}if(s===2){e.push({type:"response-end"}),t+=4;continue}if(s<4)throw new Error(`Invalid pkt-line length: ${s}`);if(t+s>r.byteLength)throw new Error(`Truncated pkt-line: need ${s} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+s)}),t+=s}return e}function dt(r){if(r.type!=="data")return"";let e=mr.decode(r.data);return e.endsWith(`
9
- `)?e.slice(0,-1):e}var We=65515;function Ge(r,e,t){let n=[],s=[...e];t&&s.push(`symref=HEAD:${t}`),s.push("agent=just-git/1.0");let a=s.join(" ");if(r.length===0)n.push(k(`0000000000000000000000000000000000000000 capabilities^{}\0${a}
10
- `));else for(let i=0;i<r.length;i++){let o=r[i];i===0?n.push(k(`${o.hash} ${o.name}\0${a}
11
- `)):n.push(k(`${o.hash} ${o.name}
12
- `))}return n.push(_()),B(...n)}function br(r,e,t,n){let s=B(k(`# service=${e}
13
- `),_()),a=Ge(r,t,n),i=new Uint8Array(s.byteLength+a.byteLength);return i.set(s,0),i.set(a,s.byteLength),i}function gr(r){let e=lt(r),t=[],n=[],s=[],a=[],i,o=!1;for(let f of e){if(f.type==="flush")continue;let c=dt(f);if(c.startsWith("want ")){let l=c.slice(5);if(t.length===0){let d=l.indexOf(" ");d!==-1?(t.push(l.slice(0,d)),a=l.slice(d+1).split(" ").filter(Boolean)):t.push(l)}else t.push(l)}else c.startsWith("have ")?n.push(c.slice(5)):c.startsWith("shallow ")?s.push(c.slice(8)):c.startsWith("deepen ")?(i=parseInt(c.slice(7),10),Number.isNaN(i)&&(i=void 0)):c==="done"&&(o=!0)}return{wants:t,haves:n,capabilities:a,clientShallows:s,depth:i,done:o}}function xe(r,e,t,n){let s=[];if(n){for(let a of n.shallow)s.push(k(`shallow ${a}
14
- `));for(let a of n.unshallow)s.push(k(`unshallow ${a}
15
- `));s.push(_())}if(t&&t.length>0){for(let i of t)s.push(k(`ACK ${i} common
16
- `));let a=t[t.length-1];s.push(k(`ACK ${a} ready
17
- `)),s.push(k(`ACK ${a}
18
- `))}else s.push(k(`NAK
19
- `));if(e){let a=0;for(;a<r.byteLength;){let i=Math.min(We,r.byteLength-a);s.push(ke(1,r.subarray(a,a+i))),a+=i}s.push(_())}else{let a=new Uint8Array(r.byteLength);a.set(r),s.push(a)}return B(...s)}function wr(r){let e=[];for(let t of r.shallow)e.push(k(`shallow ${t}
20
- `));for(let t of r.unshallow)e.push(k(`unshallow ${t}
21
- `));return e.push(_()),B(...e)}async function*Rr(r,e,t,n){if(n){let a=[];for(let i of n.shallow)a.push(k(`shallow ${i}
22
- `));for(let i of n.unshallow)a.push(k(`unshallow ${i}
23
- `));a.push(_()),yield B(...a)}let s=[];if(t&&t.length>0){for(let i of t)s.push(k(`ACK ${i} common
24
- `));let a=t[t.length-1];s.push(k(`ACK ${a} ready
25
- `)),s.push(k(`ACK ${a}
26
- `))}else s.push(k(`NAK
27
- `));if(yield B(...s),e){for await(let a of r){let i=0;for(;i<a.byteLength;){let o=Math.min(We,a.byteLength-i);yield ke(1,a.subarray(i,i+o)),i+=o}}yield _()}else for await(let a of r)yield a}function xr(r){let e=new TextDecoder,t=[],n=[],s=0,a=!1;for(;s<r.byteLength&&!(s+4>r.byteLength);){let o=e.decode(r.subarray(s,s+4)),f=parseInt(o,16);if(Number.isNaN(f))break;if(f===0){a=!0,s+=4;break}if(f<4||s+f>r.byteLength)break;let c=r.subarray(s+4,s+f);s+=f;let l=c.indexOf(0),d;if(l!==-1)d=e.decode(c.subarray(0,l)),n=e.decode(c.subarray(l+1)).replace(/\n$/,"").split(" ").filter(Boolean);else{let h=e.decode(c);d=h.endsWith(`
28
- `)?h.slice(0,-1):h}let u=d.split(" ");u.length>=3&&t.push({oldHash:u[0],newHash:u[1],refName:u[2]})}let i=s<r.byteLength?r.subarray(s):new Uint8Array(0);return{commands:t,packData:i,capabilities:n,sawFlush:a}}function re(r,e,t){let n=[];n.push(k(r?`unpack ok
8
+ `)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),u=c.slice(l+1);switch(d){case"object":a=u;break;case"type":i=u;break;case"tag":o=u;break;case"tagger":f=ye(u);break}}if(!a)throw new Error("Tag missing object field");if(!o)throw new Error("Tag missing tag name field");if(!f)throw new Error("Tag missing tagger field");return{type:"tag",object:a,objectType:i,name:o,tagger:f,message:s}}async function We(r,e,t){let n=await r.objectStore.write(e,t);return r.hooks?.onObjectWrite?.({repo:r,type:e,hash:n}),n}async function X(r,e){return r.objectStore.read(e)}async function be(r,e){return r.objectStore.exists(e)}var _s=new TextDecoder;async function z(r,e){let t=await X(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return me(t.content)}var gn=new TextEncoder,or=new TextDecoder,Rn=new Set(["100644","100755","040000","120000","160000"]);function wn(r){return r.length===4&&r.toLowerCase()===".git"}function xn(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(wn(r))throw new Error(`invalid tree entry: '${r}'`);if(!Rn.has(e))throw new Error(`invalid tree entry mode: '${e}' for '${r}'`)}function ge(r){let e=[],t=0;for(;t<r.byteLength;){let n=r.indexOf(32,t);if(n===-1)break;let s=or.decode(r.subarray(t,n)),a=r.indexOf(0,n+1);if(a===-1)break;let i=or.decode(r.subarray(n+1,a)),o=r.subarray(a+1,a+21),f=De(o),c=s.padStart(6,"0");xn(i,c),e.push({mode:c,name:i,hash:f}),t=a+21}return{type:"tree",entries:e}}function cr(r){let e=[];for(let a of r.entries){let i=a.mode.replace(/^0+/,""),o=gn.encode(`${i} ${a.name}\0`),f=de(a.hash);e.push(o),e.push(f)}let t=e.reduce((a,i)=>a+i.byteLength,0),n=new Uint8Array(t),s=0;for(let a of e)n.set(a,s),s+=a.byteLength;return n}function fr(r){return typeof r=="string"?{type:"direct",hash:r}:r}var at=".lock";var En=[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 kn(r,e,t){let n=0,s=!1,a=e;for(;a<r.length;a++){let o=r.charCodeAt(a);switch(o<128?En[o]:0){case 1:break;case 2:if(n===46)return{len:-1,starConsumed:s};n=o;continue;case 3:if(n===64)return{len:-1,starConsumed:s};n=o;continue;case 4:return{len:-1,starConsumed:s};case 5:if(!t)return{len:-1,starConsumed:s};s=!0,n=o;continue;default:n=o;continue}break}let i=a-e;return i===0?{len:0,starConsumed:s}:r.charCodeAt(e)===46?{len:-1,starConsumed:s}:i>=at.length&&r.slice(a-at.length,a)===at?{len:-1,starConsumed:s}:{len:i,starConsumed:s}}function it(r,e=0){if(r==="@"||r.length===0)return!1;let t=0,n=0,s=!!(e&2);for(;t<=r.length;){let{len:a,starConsumed:i}=kn(r,t,s);if(a<0||a===0)return!1;i&&(s=!1),n++,t+=a+1}return!(r.charCodeAt(r.length-1)===46||!(e&1)&&n<2)}var An=10;async function On(r,e){return r.refStore.readRef(e)}async function Re(r,e){let t=e;for(let n=0;n<An;n++){let s=await On(r,t);if(!s)return null;if(s.type==="direct")return s.hash;t=s.target}throw new Error(`Symbolic ref loop detected resolving "${e}"`)}function Pn(r){let e=Math.abs(r),t=r<=0?"+":"-",n=String(Math.floor(e/60)).padStart(2,"0"),s=String(e%60).padStart(2,"0");return`${t}${n}${s}`}function lr(r){if("timestamp"in r)return r;let e=r.date??new Date;return{name:r.name,email:r.email,timestamp:Math.floor(e.getTime()/1e3),timezone:Pn(e.getTimezoneOffset())}}async function ur(r,e){let t=e.branch?`refs/heads/${e.branch}`:null,n=t?await Re(r,t):null,s=null;n&&(s=(await z(r,n)).tree);let a=[];for(let[u,h]of Object.entries(e.files))if(h===null)a.push({path:u,hash:null});else{let p=typeof h=="string"?new TextEncoder().encode(h):h,g=await We(r,"blob",p);a.push({path:u,hash:g})}let i;s?i=await Sn(r,s,a):i=await ct(r,null,ot(a));let o=lr(e.author),f=e.committer?lr(e.committer):o,l=ir({type:"commit",tree:i,parents:n?[n]:[],author:o,committer:f,message:e.message});return{hash:await We(r,"commit",l),parentHash:n}}async function Sn(r,e,t){return ct(r,e,ot(t))}function ot(r){let e=new Map,t=new Map;for(let n of r){let s=n.path.indexOf("/");if(s===-1)e.set(n.path,{hash:n.hash,mode:n.mode??"100644"});else{let a=n.path.slice(0,s),i=n.path.slice(s+1),o=t.get(a);o||(o=[],t.set(a,o)),o.push({...n,path:i})}}return{files:e,dirs:t}}async function dr(r,e){let t=await X(r,e);if(t.type!=="tree")throw new Error(`Expected tree object, got ${t.type}`);return ge(t.content).entries}async function ct(r,e,t){let n=new Map;if(e)for(let i of await dr(r,e))n.set(i.name,i);for(let[i,{hash:o,mode:f}]of t.files)o===null?n.delete(i):n.set(i,{name:i,hash:o,mode:f});for(let[i,o]of t.dirs){let f=n.get(i),c=f?.mode==="040000"?f.hash:null,l=ot(o),d=await ct(r,c,l);(await dr(r,d)).length===0?n.delete(i):n.set(i,{name:i,hash:d,mode:"040000"})}let s=[...n.values()].sort((i,o)=>{let f=i.mode==="040000"?`${i.name}/`:i.name,c=o.mode==="040000"?`${o.name}/`:o.name;return f<c?-1:f>c?1:0}),a=cr({type:"tree",entries:s});return We(r,"tree",a)}async function ft(r,e,t){if(e===t)return!0;let n=new Set,s=[t],a=0;for(;a<s.length;){let i=s[a++];if(i===e)return!0;if(n.has(i))continue;n.add(i);let o;try{o=await z(r,i)}catch{continue}for(let f of o.parents)n.has(f)||s.push(f)}return!1}var Ge=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]),jn=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]),$e=64,vn=4,lt=4096,pr=65536,Tn=127;function In(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let n=t>>>2;n<16&&(n=16),n=Un(n);let s=n-1,a=new Uint32Array(n),i=[],o=-1>>>0;for(let u=t*16-16;u>=0;u-=16){let h=0;for(let p=1;p<=16;p++)h=(h<<8|r[u+p])^Ge[h>>>23];if(h=h>>>0,h===o)i[i.length-1].ptr=u+16;else{o=h;let p=h&s;i.push({ptr:u+16,val:h}),a[p]++}}let f=new Map;for(let u of i){let h=u.val&s,p=f.get(h);p||(p=[],f.set(h,p)),p.push(u)}for(let[u,h]of f){if(h.length<=$e)continue;let p=[],g=h.length/$e;for(let w=0;w<$e;w++)p.push(h[Math.floor(w*g)]);f.set(u,p),a[u]=$e}let c=new Uint32Array(n+1),l=[],d=0;for(let u=0;u<n;u++){c[u]=d;let h=f.get(u);if(h){for(let p of h)l.push(p);d+=h.length}}return c[n]=d,{src:r,hashMask:s,buckets:c,entries:l}}function Ln(r,e,t){if(!r||e.byteLength===0)return null;let n=r.src.byteLength,s=e.byteLength,a=r.src,i=new Uint8Array(Math.max(s,1024)),o=0;function f(g){for(;o+g>i.length;){let w=new Uint8Array(i.length*2);w.set(i),i=w}}o=yr(i,o,n),o=yr(i,o,s),f(18),o++;let c=0,l=0,d=Math.min(16,s);for(let g=0;g<d;g++)i[o++]=e[g],c=(c<<8|e[g])^Ge[c>>>23],l++;c=c>>>0;let u=d,h=0,p=0;for(;u<s;){if(p<lt){c^=jn[e[u-16]],c=((c<<8|e[u])^Ge[c>>>23])>>>0;let g=c&r.hashMask,w=r.buckets[g],O=r.buckets[g+1];for(let k=w;k<O;k++){let x=r.entries[k];if(x.val!==c)continue;let m=x.ptr,b=a.byteLength-m,y=s-u;if(b>y&&(b=y),b<=p)break;let R=0;for(;R<b&&a[m+R]===e[u+R];)R++;if(R>p&&(p=R,h=m,p>=lt))break}}if(p<vn)f(2),l===0&&o++,i[o++]=e[u++],l++,l===Tn&&(i[o-l-1]=l,l=0),p=0;else{if(l>0){for(;h>0&&a[h-1]===e[u-1];)if(p++,h--,u--,o--,!(--l>0)){o--,l=-1;break}l>0&&(i[o-l-1]=l),l=0}let g=p>pr?p-pr:0;p-=g,f(8);let w=o++,O=128;if(h&255&&(i[o++]=h&255,O|=1),h&65280&&(i[o++]=h>>>8&255,O|=2),h&16711680&&(i[o++]=h>>>16&255,O|=4),h&4278190080&&(i[o++]=h>>>24&255,O|=8),p&255&&(i[o++]=p&255,O|=16),p&65280&&(i[o++]=p>>>8&255,O|=32),i[w]=O,u+=p,h+=p,p=g,h>4294967295&&(p=0),p<lt){c=0;for(let k=-16;k<0;k++)c=(c<<8|e[u+k])^Ge[c>>>23];c=c>>>0}}if(t&&o>t)return null}return l>0&&(i[o-l-1]=l),t&&o>t?null:i.subarray(0,o)}var hr={blob:0,tree:1,commit:2,tag:3};function mr(r,e){let t=e?.window??10,n=e?.depth??50,s=r.slice().sort((c,l)=>{let d=hr[c.type]??99,u=hr[l.type]??99;return d!==u?d-u:l.content.byteLength-c.content.byteLength}),a=new Map,i=[],o=[],f=[];for(let c=0;c<s.length;c++){let l=s[c],d={hash:l.hash,type:l.type,content:l.content,depth:0},u=null,h=null,p=Math.max(0,c-t);for(let g=c-1;g>=p;g--){let w=s[g];if(w.type!==l.type||(a.get(w.hash)?.depth??0)>=n||l.content.byteLength<w.content.byteLength>>>5)continue;let x=o[g-p]??null;if(!x)continue;let m=u?u.byteLength:l.content.byteLength/2|0;if(m<16)continue;let b=Ln(x,l.content,m);b&&(!u||b.byteLength<u.byteLength)&&(u=b,h=w.hash)}if(u&&h){d.delta=u,d.deltaBase=h;let g=a.get(h);d.depth=(g?.depth??0)+1}a.set(l.hash,d),i.push(d),o.length>=t&&(o.shift(),f.shift()),o.push(In(l.content)),f.push(l.hash)}return i}function Un(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 yr(r,e,t){let n=t;do{let s=n&127;n>>>=7,n>0&&(s|=128),r[e++]=s}while(n>0);return e}var Cn=2147483647;async function dt(r,e,t,n){if(t>=Cn)return{shallow:[],unshallow:[...n]};let s=new Map,a=[];for(let c of e)!s.has(c)&&await be(r,c)&&(s.set(c,1),a.push({hash:c,level:1}));let i=new Set,o=0;for(;o<a.length;){let{hash:c,level:l}=a[o++];if(l>=t){i.add(c);continue}let d;try{d=await z(r,c)}catch{continue}for(let u of d.parents)!s.has(u)&&await be(r,u)&&(s.set(u,l+1),a.push({hash:u,level:l+1}))}let f=[];for(let c of n){let l=s.get(c);l!==void 0&&l<t&&f.push(c)}return{shallow:[...i],unshallow:f}}async function Ee(r,e,t,n,s){let a=s??n,i=new Set;for(let l of t)await we(r,l,i,a);let o=[...e];if(s&&n)for(let l of s)try{let d=await z(r,l);for(let u of d.parents)i.has(u)||o.push(u)}catch{}let f=[],c=new Set;for(let l of o)await xe(r,l,i,c,f,n);return{count:f.length,objects:Hn(f)}}async function br(r,e,t,n,s){let{count:a,objects:i}=await Ee(r,e,t,n,s);return{count:a,objects:Dn(r,i)}}async function*Hn(r){for(let e of r)yield e}async function*Dn(r,e){for await(let t of e){let n=await X(r,t.hash);yield{hash:t.hash,type:t.type,content:n.content}}}async function gr(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function we(r,e,t,n){if(t.has(e)||(t.add(e),!await be(r,e)))return;let s=await X(r,e);switch(s.type){case"commit":{let a=me(s.content);if(await we(r,a.tree,t,n),!n?.has(e))for(let i of a.parents)await we(r,i,t,n);break}case"tree":{let a=ge(s.content);for(let i of a.entries)await we(r,i.hash,t,n);break}case"tag":{let a=re(s.content);await we(r,a.object,t,n);break}case"blob":break}}async function xe(r,e,t,n,s,a){if(n.has(e)||t.has(e))return;n.add(e);let i=await X(r,e);switch(s.push({hash:e,type:i.type}),i.type){case"commit":{let o=me(i.content);if(await xe(r,o.tree,t,n,s,a),!a?.has(e))for(let f of o.parents)await xe(r,f,t,n,s,a);break}case"tree":{let o=ge(i.content);for(let f of o.entries)await xe(r,f.hash,t,n,s,a);break}case"tag":{let o=re(i.content);await xe(r,o.object,t,n,s,a);break}case"blob":break}}var _n=new TextEncoder,wr=new TextDecoder,Rr=65520,Nn=new Uint8Array([48,48,48,48]),Bn=new Uint8Array([48,48,48,49]),aa=new Uint8Array([48,48,48,50]);function E(r){let e=typeof r=="string"?_n.encode(r):r,t=4+e.byteLength;if(t>Rr)throw new Error(`pkt-line too long: ${t} bytes (max ${Rr})`);let n=t.toString(16).padStart(4,"0"),s=new Uint8Array(t);return s[0]=n.charCodeAt(0),s[1]=n.charCodeAt(1),s[2]=n.charCodeAt(2),s[3]=n.charCodeAt(3),s.set(e,4),s}function B(){return Nn.slice()}function K(){return Bn.slice()}function N(...r){let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}function ut(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let n=wr.decode(r.subarray(t,t+4)),s=parseInt(n,16);if(Number.isNaN(s))throw new Error(`Invalid pkt-line length: ${n}`);if(s===0){e.push({type:"flush"}),t+=4;continue}if(s===1){e.push({type:"delim"}),t+=4;continue}if(s===2){e.push({type:"response-end"}),t+=4;continue}if(s<4)throw new Error(`Invalid pkt-line length: ${s}`);if(t+s>r.byteLength)throw new Error(`Truncated pkt-line: need ${s} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+s)}),t+=s}return e}function pt(r){if(r.type!=="data")return"";let e=wr.decode(r.data);return e.endsWith(`
9
+ `)?e.slice(0,-1):e}var qe=65515;function Ve(r,e,t){let n=[],s=[...e];t&&s.push(`symref=HEAD:${t}`),s.push("agent=just-git/1.0");let a=s.join(" ");if(r.length===0)n.push(E(`0000000000000000000000000000000000000000 capabilities^{}\0${a}
10
+ `));else for(let i=0;i<r.length;i++){let o=r[i];i===0?n.push(E(`${o.hash} ${o.name}\0${a}
11
+ `)):n.push(E(`${o.hash} ${o.name}
12
+ `))}return n.push(B()),N(...n)}function xr(r,e,t,n){let s=N(E(`# service=${e}
13
+ `),B()),a=Ve(r,t,n),i=new Uint8Array(s.byteLength+a.byteLength);return i.set(s,0),i.set(a,s.byteLength),i}function Er(r){let e=ut(r),t=[],n=[],s=[],a=[],i,o=!1;for(let f of e){if(f.type==="flush")continue;let c=pt(f);if(c.startsWith("want ")){let l=c.slice(5);if(t.length===0){let d=l.indexOf(" ");d!==-1?(t.push(l.slice(0,d)),a=l.slice(d+1).split(" ").filter(Boolean)):t.push(l)}else t.push(l)}else c.startsWith("have ")?n.push(c.slice(5)):c.startsWith("shallow ")?s.push(c.slice(8)):c.startsWith("deepen ")?(i=parseInt(c.slice(7),10),Number.isNaN(i)&&(i=void 0)):c==="done"&&(o=!0)}return{wants:t,haves:n,capabilities:a,clientShallows:s,depth:i,done:o}}function ke(r,e,t,n){let s=[];if(n){for(let a of n.shallow)s.push(E(`shallow ${a}
14
+ `));for(let a of n.unshallow)s.push(E(`unshallow ${a}
15
+ `));s.push(B())}if(t&&t.length>0){for(let i of t)s.push(E(`ACK ${i} common
16
+ `));let a=t[t.length-1];s.push(E(`ACK ${a} ready
17
+ `)),s.push(E(`ACK ${a}
18
+ `))}else s.push(E(`NAK
19
+ `));if(e){let a=0;for(;a<r.byteLength;){let i=Math.min(qe,r.byteLength-a);s.push(Ae(1,r.subarray(a,a+i))),a+=i}s.push(B())}else{let a=new Uint8Array(r.byteLength);a.set(r),s.push(a)}return N(...s)}function kr(r){let e=[];for(let t of r.shallow)e.push(E(`shallow ${t}
20
+ `));for(let t of r.unshallow)e.push(E(`unshallow ${t}
21
+ `));return e.push(B()),N(...e)}async function*Ar(r,e,t,n){if(n){let a=[];for(let i of n.shallow)a.push(E(`shallow ${i}
22
+ `));for(let i of n.unshallow)a.push(E(`unshallow ${i}
23
+ `));a.push(B()),yield N(...a)}let s=[];if(t&&t.length>0){for(let i of t)s.push(E(`ACK ${i} common
24
+ `));let a=t[t.length-1];s.push(E(`ACK ${a} ready
25
+ `)),s.push(E(`ACK ${a}
26
+ `))}else s.push(E(`NAK
27
+ `));if(yield N(...s),e){for await(let a of r){let i=0;for(;i<a.byteLength;){let o=Math.min(qe,a.byteLength-i);yield Ae(1,a.subarray(i,i+o)),i+=o}}yield B()}else for await(let a of r)yield a}function Or(r){let e=new TextDecoder,t=[],n=[],s=0,a=!1;for(;s<r.byteLength&&!(s+4>r.byteLength);){let o=e.decode(r.subarray(s,s+4)),f=parseInt(o,16);if(Number.isNaN(f))break;if(f===0){a=!0,s+=4;break}if(f<4||s+f>r.byteLength)break;let c=r.subarray(s+4,s+f);s+=f;let l=c.indexOf(0),d;if(l!==-1)d=e.decode(c.subarray(0,l)),n=e.decode(c.subarray(l+1)).replace(/\n$/,"").split(" ").filter(Boolean);else{let h=e.decode(c);d=h.endsWith(`
28
+ `)?h.slice(0,-1):h}let u=d.split(" ");u.length>=3&&t.push({oldHash:u[0],newHash:u[1],refName:u[2]})}let i=s<r.byteLength?r.subarray(s):new Uint8Array(0);return{commands:t,packData:i,capabilities:n,sawFlush:a}}function ne(r,e,t){let n=[];n.push(E(r?`unpack ok
29
29
  `:`unpack error
30
- `));for(let a of e)a.ok?n.push(k(`ok ${a.name}
31
- `)):n.push(k(`ng ${a.name} ${a.error??"failed"}
32
- `));n.push(_());let s=B(...n);if(t){let a=[];return a.push(ke(1,s)),a.push(_()),B(...a)}return s}function ke(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),k(t)}function ut(r){let e=[];e.push(k(`version 2
33
- `));for(let t of r)e.push(k(`${t}
34
- `));return e.push(_()),B(...e)}function pt(r){let e=lt(r),t="",n=[],s=[],a=!1;for(let i of e){if(i.type==="flush"||i.type==="response-end")break;if(i.type==="delim"){a=!0;continue}let o=dt(i);o&&(a?s.push(o):o.startsWith("command=")?t=o.slice(8):n.push(o))}return{command:t,capabilities:n,args:s}}function ht(r){let e=[];for(let t of r){let n=`${t.hash} ${t.name}`;t.symrefTarget&&(n+=` symref-target:${t.symrefTarget}`),t.peeledHash&&(n+=` peeled:${t.peeledHash}`),e.push(k(`${n}
35
- `))}return e.push(_()),B(...e)}function yt(r){let e=[],t=[],n=[],s=[],a=!1,i,o=!1,f=!1;for(let c of r)c.startsWith("want ")?e.push(c.slice(5)):c.startsWith("have ")?t.push(c.slice(5)):c.startsWith("shallow ")?n.push(c.slice(8)):c.startsWith("deepen ")?(i=parseInt(c.slice(7),10),Number.isNaN(i)&&(i=void 0)):c.startsWith("want-ref ")?s.push(c.slice(9)):c==="done"?a=!0:c==="include-tag"?o=!0:c==="ofs-delta"&&(f=!0);return{wants:e,haves:t,done:a,clientShallows:n,depth:i,includeTag:o,ofsDeltas:f,wantRefs:s}}function ne(r,e){let t=[],{commonHashes:n,shallowInfo:s,wantedRefs:a}=e??{};if(n&&n.length>0){t.push(k(`acknowledgments
36
- `));for(let o of n)t.push(k(`ACK ${o}
37
- `));t.push(k(`ready
38
- `)),t.push(K())}if(s&&(s.shallow.length>0||s.unshallow.length>0)){t.push(k(`shallow-info
39
- `));for(let o of s.shallow)t.push(k(`shallow ${o}
40
- `));for(let o of s.unshallow)t.push(k(`unshallow ${o}
41
- `));t.push(K())}if(a&&a.length>0){t.push(k(`wanted-refs
42
- `));for(let o of a)t.push(k(`${o.hash} ${o.name}
43
- `));t.push(K())}t.push(k(`packfile
44
- `));let i=0;for(;i<r.byteLength;){let o=Math.min(We,r.byteLength-i);t.push(ke(1,r.subarray(i,i+o))),i+=o}return t.push(_()),B(...t)}function kr(r,e){let t=[];if(t.push(k(`acknowledgments
45
- `)),r.length>0)for(let n of r)t.push(k(`ACK ${n}
46
- `));else t.push(k(`NAK
47
- `));return e&&t.push(k(`ready
48
- `)),t.push(_()),B(...t)}async function*Ar(r,e){let{commonHashes:t,shallowInfo:n,wantedRefs:s}=e??{};if(t&&t.length>0){let a=[];a.push(k(`acknowledgments
49
- `));for(let i of t)a.push(k(`ACK ${i}
50
- `));a.push(k(`ready
51
- `)),a.push(K()),yield B(...a)}if(n&&(n.shallow.length>0||n.unshallow.length>0)){let a=[];a.push(k(`shallow-info
52
- `));for(let i of n.shallow)a.push(k(`shallow ${i}
53
- `));for(let i of n.unshallow)a.push(k(`unshallow ${i}
54
- `));a.push(K()),yield B(...a)}if(s&&s.length>0){let a=[];a.push(k(`wanted-refs
55
- `));for(let i of s)a.push(k(`${i.hash} ${i.name}
56
- `));a.push(K()),yield B(...a)}yield k(`packfile
57
- `);for await(let a of r){let i=0;for(;i<a.byteLength;){let o=Math.min(We,a.byteLength-i);yield ke(1,a.subarray(i,i+o)),i+=o}}yield _()}var D=class extends Error{status=413;constructor(e){super(e),this.name="RequestLimitError"}};function Er(r){async function e(t){let n=r.getForkParent?await r.getForkParent(t):null;return{objectStore:new mt(r,t,n),refStore:new bt(r,t)}}return{async createRepo(t,n){if(await r.hasRepo(t))throw new Error(`repo '${t}' already exists`);let a=n?.defaultBranch??"main";return await r.insertRepo(t),await r.putRef(t,"HEAD",{type:"symbolic",target:`refs/heads/${a}`}),e(t)},async repo(t){return await r.hasRepo(t)?e(t):null},async deleteRepo(t){if(r.listForks){let n=await r.listForks(t);if(n.length>0)throw new Error(`cannot delete repo '${t}': has ${n.length} active fork(s)`)}await r.deleteRepo(t)},async forkRepo(t,n,s){if(!r.forkRepo||!r.getForkParent||!r.listForks)throw new Error("storage backend does not support forks");if(!await r.hasRepo(t))throw new Error(`source repo '${t}' not found`);if(await r.hasRepo(n))throw new Error(`repo '${n}' already exists`);let f=await r.getForkParent(t)??t;await r.insertRepo(n),await r.forkRepo(f,n);let c=await r.listRefs(t);for(let d of c)await r.putRef(n,d.name,d.ref);let l=await r.getRef(t,"HEAD");if(l)await r.putRef(n,"HEAD",l);else{let d=s?.defaultBranch??"main";await r.putRef(n,"HEAD",{type:"symbolic",target:`refs/heads/${d}`})}return e(n)}}}function qe(r){return typeof r=="object"&&r!==null&&typeof r.preparePack=="function"&&typeof r.commitPack=="function"&&typeof r.deleteObjects=="function"}var mt=class{constructor(e,t,n=null){this.driver=e;this.repoId=t;this.parentId=n}cache=new He;async write(e,t){let n=tr(e,t),s=await Lt(n);return await this.driver.putObject(this.repoId,s,e,t),s}async read(e){let t=this.cache.get(e);if(t)return t;let n=await this.driver.getObject(this.repoId,e);if(!n&&this.parentId&&(n=await this.driver.getObject(this.parentId,e)),!n)throw new Error(`object ${e} not found`);return this.cache.set(e,n),n}async exists(e){return await this.driver.hasObject(this.repoId,e)?!0:this.parentId?!!await this.driver.hasObject(this.parentId,e):!1}async preparePack(e){if(e.byteLength<32)return[];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[];let i=this.driver,o=this.repoId,f=this.parentId;return(await Jt(e,async l=>{let d=await i.getObject(o,l);return!d&&f&&(d=await i.getObject(f,l)),d?{type:d.type,content:new Uint8Array(d.content)}:null})).map(l=>({hash:l.hash,type:l.type,content:l.content}))}async preparePackStream(e){let t=[];for await(let n of e)t.push({hash:n.hash,type:n.type,content:n.content});return t}async commitPack(e){return e.length===0?0:(await this.driver.putObjects(this.repoId,e),e.length)}async ingestPack(e){let t=await this.preparePack(e);return this.commitPack(t)}async ingestPackStream(e){let t=await this.preparePackStream(e);return this.commitPack(t)}async deleteObjects(e){return e.length===0?0:this.driver.deleteObjects(this.repoId,e)}async findByPrefix(e){if(e.length<4)return[];let t=await this.driver.findObjectsByPrefix(this.repoId,e);if(!this.parentId)return Array.from(t);let n=await this.driver.findObjectsByPrefix(this.parentId,e),s=new Set(t);for(let a of n)s.add(a);return Array.from(s)}},bt=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,ar(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 gt(i=>this.driver.getRef(this.repoId,i),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=>Ae(s.getRef(e),a=>{let i=a?a.type==="direct"?a.hash:gt(o=>s.getRef(o),a.target):null;return Ae(i,o=>{if(t===null){if(a!==null)return!1}else if(o!==t)return!1;return n===null?Ae(s.removeRef(e),()=>!0):Ae(s.putRef(e,n),()=>!0)})}))}};function Ae(r,e){return r instanceof Promise?r.then(e):e(r)}function gt(r,e,t=0){return t>10?null:Ae(r(e),n=>n?n.type==="direct"?n.hash:n.type==="symbolic"?gt(r,n.target,t+1):null:null)}var se=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,n){if(n.length>0)return null;let s=t.slice().sort();return`${e}\0${s.join(",")}`}get(e){let t=this.entries.get(e);return t?this.hits++:this.misses++,t}set(e,t){if(this.entries.has(e))return;let n=t.packData.byteLength;if(!(n>this.maxBytes)){for(;this.currentBytes+n>this.maxBytes&&this.entries.size>0;){let s=this.entries.keys().next().value;this.currentBytes-=this.entries.get(s).packData.byteLength,this.entries.delete(s)}this.entries.set(e,t),this.currentBytes+=n}}clear(){this.entries.clear(),this.currentBytes=0}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},Pr=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","shallow"],Or=["report-status","side-band-64k","ofs-delta","delete-refs"];async function Sr(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),n=[],s=null,a;if(t)if(t.type==="symbolic"){a=t.target;let o=await r.refStore.readRef(t.target);o?.type==="direct"&&(s=o.hash)}else s=t.hash;let i=e.slice().sort((o,f)=>o.name<f.name?-1:o.name>f.name?1:0);if(!s&&i.length>0){let o=Bn(i);o&&(s=o.hash,a=o.name)}s&&n.push({name:"HEAD",hash:s});for(let o of i)if(n.push({name:o.name,hash:o.hash}),o.name.startsWith("refs/tags/"))try{let f=await r.objectStore.read(o.hash);if(f.type==="tag"){let c=te(f.content);n.push({name:`${o.name}^{}`,hash:c.object})}}catch{}return{refs:n,headTarget:a}}var Dn=["refs/heads/main","refs/heads/master"];function Bn(r){for(let t of Dn){let n=r.find(s=>s.name===t);if(n)return n}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function wt(r,e,t){return br(r,e,e==="git-upload-pack"?Pr:Or,t)}function Rt(r,e,t){return Ge(r,e==="git-upload-pack"?Pr:Or,t)}async function W(r,e,t,n,s){let{refs:a,headTarget:i}=await Sr(r),o=a;if(n?.advertiseRefs){let f=await n.advertiseRefs({repo:r,repoId:e,refs:a,service:t,auth:s});if(U(f))return f;f&&(o=f)}return{refs:o,headTarget:i}}function Ee(r){let e=new Map,t=new Set;for(let n of r.refs)e.set(n.name,n.hash),t.add(n.hash);return{allowedRefHashes:e,allowedWantHashes:t}}async function Pe(r,e,t){let{wants:n,haves:s,capabilities:a,clientShallows:i,depth:o,done:f}=gr(e);if(n.length===0)return xe(new Uint8Array(0),!1);if(t?.authorizedFetchSet){for(let x of n)if(!t.authorizedFetchSet.allowedWantHashes.has(x))return{reject:!0,message:`forbidden want ${x}`}}let c=a.includes("multi_ack_detailed"),l=a.includes("side-band-64k"),d,u,h;if(i.length>0&&(h=new Set(i)),o!==void 0){let x=await ft(r,n,o,h??new Set);d=x,u=new Set(x.shallow)}if(d&&!f)return wr(d);let p;if(c&&s.length>0){p=[];for(let x of s)await r.objectStore.exists(x)&&p.push(x);p.length===0&&(p=void 0)}let g=!u&&t?.cache&&t.cacheKey?se.key(t.cacheKey,n,s):null;if(g&&t?.cache){let x=t.cache.get(g);if(x)return xe(x.packData,l,p)}let R=a.includes("include-tag"),P={repo:r,wants:n,haves:s,includeTag:R,shallowBoundary:u,clientShallowBoundary:h,cache:t?.cache,cacheKey:g,deltaWindow:t?.deltaWindow};if(t?.noDelta){let x=await Ir(P);if(!x){let{data:m}=await ee([]);return xe(m,l,p,d)}return Tr(Rr(x,l,p,d))}let A=await jr(P);return xe(A,l,p,d)}async function vr(r,e){let t=[],n=await r.refStore.listRefs("refs/tags");for(let s of n)if(!e.has(s.hash))try{let a=await r.objectStore.read(s.hash);if(a.type==="tag"){let i=te(a.content);e.has(i.object)&&(t.push({hash:s.hash,type:"tag",content:a.content}),e.add(s.hash))}}catch{}return t}async function jr(r){let{repo:e,wants:t,haves:n,includeTag:s,shallowBoundary:a,clientShallowBoundary:i}=r,o=await pr(e,t,n,a,i);if(o.count===0){let{data:p}=await ee([]);return p}let f=await hr(o),c=new Set(f.map(p=>p.hash));if(s){let p=await vr(e,c);f.push(...p)}let l=r.deltaWindow?{window:r.deltaWindow}:void 0,d=ur(f,l),u=d.map(p=>({hash:p.hash,type:p.type,content:p.content,delta:p.delta,deltaBaseHash:p.deltaBase})),{data:h}=await ee(u);if(r.cacheKey&&r.cache){let p=d.filter(g=>g.delta).length;r.cache.set(r.cacheKey,{packData:h,objectCount:f.length,deltaCount:p})}return h}async function Ir(r){let{repo:e,wants:t,haves:n,includeTag:s,shallowBoundary:a,clientShallowBoundary:i}=r,{count:o,objects:f}=await Re(e,t,n,a,i);if(o===0)return null;let c=[];for await(let p of f)c.push(p);let l=new Set(c.map(p=>p.hash)),d=s?await vr(e,l):[],u=c.length+d.length;async function*h(){for(let p of c){let g=await e.objectStore.read(p.hash);yield{type:g.type,content:g.content}}for(let p of d)yield{type:p.type,content:p.content}}return er(u,h())}function Tr(r){let e=r[Symbol.asyncIterator]();return new ReadableStream({async pull(t){let{value:n,done:s}=await e.next();s?t.close():t.enqueue(n)}})}async function Ur(r,e){return await r.commitPack(e),e.map(t=>t.hash)}async function _n(r,e){qe(r.objectStore)&&await r.objectStore.deleteObjects(e)}async function xt(r,e,t){let{commands:n,packData:s,capabilities:a,sawFlush:i}=xr(e),o=!0,f;if(s.byteLength>0)try{if($n(s,t),qe(r.objectStore)){let l=await r.objectStore.preparePack(s);f=await Ur(r.objectStore,l)}else await r.objectStore.ingestPack(s)}catch(l){if(l instanceof D)throw l;o=!1}return{updates:await Lr(r,n,o),unpackOk:o,capabilities:a,sawFlush:i,ingestedHashes:f}}async function kt(r,e,t,n,s=!0,a){let i=!0,o;if(e.some(l=>l.newHash!==X))try{let l=async u=>{try{return await r.objectStore.read(u)}catch{return null}},d=Qt(Fn(n,a),l);if(qe(r.objectStore)){let u=await r.objectStore.preparePackStream(d);o=await Ur(r.objectStore,u)}else await r.objectStore.ingestPackStream(d)}catch(l){if(l instanceof D)throw l;i=!1}return{updates:await Lr(r,e,i),unpackOk:i,capabilities:t,sawFlush:s,ingestedHashes:o}}async function Lr(r,e,t){let n=[];for(let s of e){let a=s.oldHash===X,i=s.newHash===X;if(a)n.push({ref:s.refName,oldHash:null,newHash:s.newHash,isFF:!1,isCreate:!0,isDelete:!1});else if(i)n.push({ref:s.refName,oldHash:s.oldHash,newHash:s.newHash,isFF:!1,isCreate:!1,isDelete:!0});else{let o=!1;if(t)try{o=await ot(r,s.oldHash,s.newHash)}catch{}n.push({ref:s.refName,oldHash:s.oldHash,newHash:s.newHash,isFF:o,isCreate:!1,isDelete:!1})}}return n}async function Ve(r,e){let t=[],n=[];for(let s of e){if(s.ref==="HEAD"){t.push({ref:s.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!s.isDelete&&!st(s.ref)){t.push({ref:s.ref,ok:!1,error:"invalid refname"});continue}if(!s.isDelete&&!await r.objectStore.exists(s.newHash)){t.push({ref:s.ref,ok:!1,error:"missing objects"});continue}try{let a=s.isCreate?null:s.oldHash,i=s.isDelete?null:{type:"direct",hash:s.newHash};if(!await r.refStore.compareAndSwapRef(s.ref,a,i)){t.push({ref:s.ref,ok:!1,error:"failed to lock"});continue}t.push({ref:s.ref,ok:!0}),n.push(s)}catch(a){t.push({ref:s.ref,ok:!1,error:a instanceof Error?a.message:String(a)})}}return{refResults:t,applied:n}}async function Oe(r){let{repo:e,repoId:t,ingestResult:n,hooks:s,auth:a}=r,{updates:i}=n;if(s?.preReceive){let c=await s.preReceive({repo:e,repoId:t,updates:i,auth:a});if(U(c)){n.ingestedHashes?.length&&await _n(e,n.ingestedHashes);let l=c.message??"pre-receive hook declined";return{refResults:i.map(d=>({ref:d.ref,ok:!1,error:l})),applied:[]}}}let o=[],f=[];for(let c of i){if(c.ref==="HEAD"){o.push({ref:c.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!c.isDelete&&!st(c.ref)){o.push({ref:c.ref,ok:!1,error:"invalid refname"});continue}if(s?.update){let l=await s.update({repo:e,repoId:t,update:c,auth:a});if(U(l)){o.push({ref:c.ref,ok:!1,error:l.message??"update hook declined"});continue}}if(!c.isDelete&&!await e.objectStore.exists(c.newHash)){o.push({ref:c.ref,ok:!1,error:"missing objects"});continue}try{let l=c.isCreate?null:c.oldHash,d=c.isDelete?null:{type:"direct",hash:c.newHash};if(!await e.refStore.compareAndSwapRef(c.ref,l,d)){o.push({ref:c.ref,ok:!1,error:"failed to lock"});continue}o.push({ref:c.ref,ok:!0}),f.push(c)}catch(l){o.push({ref:c.ref,ok:!1,error:l instanceof Error?l.message:String(l)})}}if(s?.postReceive&&f.length>0)try{await s.postReceive({repo:e,repoId:t,updates:f,auth:a})}catch{}return{refResults:o,applied:f}}async function ze(r,e){let t=[];for(let n of e){let s=n.oldHash!==void 0?n.oldHash:await be(r,n.ref);if(s===null)t.push({ref:n.ref,oldHash:null,newHash:n.newHash??X,isFF:!1,isCreate:!0,isDelete:!1});else if(n.newHash===null)t.push({ref:n.ref,oldHash:s,newHash:X,isFF:!1,isCreate:!1,isDelete:!0});else{let a=!1;try{a=await ot(r,s,n.newHash)}catch{}t.push({ref:n.ref,oldHash:s,newHash:n.newHash,isFF:a,isCreate:!1,isDelete:!1})}}return t}var Nn=["agent=just-git/1.0","ls-refs=unborn","fetch=shallow","server-option","object-format=sha1"];function Se(){return ut(Nn)}async function ve(r,e,t,n,s){let a=t.includes("symrefs"),i=t.includes("peel"),o=t.includes("unborn"),f=t.filter(h=>h.startsWith("ref-prefix ")).map(h=>h.slice(11)),c=await W(r,e,"git-upload-pack",n,s);if(U(c))return c;let{refs:l,headTarget:d}=c,u=[];for(let h of l){if(h.name.endsWith("^{}")||f.length>0&&!f.some(g=>h.name.startsWith(g)))continue;let p={hash:h.hash,name:h.name};if(a&&h.name==="HEAD"&&d&&(p.symrefTarget=d),i&&h.name.startsWith("refs/tags/")){let g=l.find(R=>R.name===`${h.name}^{}`);g&&(p.peeledHash=g.hash)}u.push(p)}return o&&!u.some(h=>h.name==="HEAD")&&d&&(f.length===0||f.some(p=>"HEAD".startsWith(p)))&&u.unshift({hash:"unborn",name:"HEAD",symrefTarget:d}),ht(u)}async function je(r,e,t){let{wants:n,haves:s,done:a,clientShallows:i,depth:o,includeTag:f,wantRefs:c}=yt(e);if(n.length===0&&c.length===0){let{data:y}=await ee([]);return ne(y)}let l=t?.authorizedFetchSet,d=[],u=[...n];for(let y of c)if(l){let w=l.allowedRefHashes.get(y);if(!w)return{reject:!0,message:`forbidden want-ref ${y}`};d.push({hash:w,name:y}),u.includes(w)||u.push(w)}else{let w=await be(r,y);w&&(d.push({hash:w,name:y}),u.includes(w)||u.push(w))}if(l){for(let y of n)if(!l.allowedWantHashes.has(y))return{reject:!0,message:`forbidden want ${y}`}}let h,p,g;if(i.length>0&&(g=new Set(i)),o!==void 0){let y=await ft(r,u,o,g??new Set);h=y,p=new Set(y.shallow)}let R;if(s.length>0){R=[];for(let y of s)await r.objectStore.exists(y)&&R.push(y);R.length===0&&(R=void 0)}let P=R&&R.length>0;if(!a&&!P)return kr(R??[]);let A=!p&&t?.cache&&t.cacheKey?se.key(t.cacheKey,u,s):null,x={commonHashes:R,shallowInfo:h,wantedRefs:d.length>0?d:void 0};if(A&&t?.cache){let y=t.cache.get(A);if(y)return ne(y.packData,x)}let m={repo:r,wants:u,haves:s,includeTag:f,shallowBoundary:p,clientShallowBoundary:g,cache:t?.cache,cacheKey:A,deltaWindow:t?.deltaWindow};if(t?.noDelta){let y=await Ir(m);if(!y){let{data:w}=await ee([]);return ne(w,x)}return Tr(Ar(y,x))}let b=await jr(m);return ne(b,x)}function $n(r,e){if(e){if(e.maxPackBytes!==void 0&&r.byteLength>e.maxPackBytes)throw new D("Pack payload too large");if(e.maxPackObjects!==void 0&&r.byteLength>=12&&new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(8)>e.maxPackObjects)throw new D("Pack contains too many objects")}}async function*Fn(r,e){if(!e){for await(let a of r)yield a;return}let t=0,n=new Uint8Array(12),s=0;for await(let a of r){if(t+=a.byteLength,e.maxPackBytes!==void 0&&t>e.maxPackBytes)throw new D("Pack payload too large");if(s<12){let i=Math.min(12-s,a.byteLength);if(n.set(a.subarray(0,i),s),s+=i,s===12&&e.maxPackObjects!==void 0&&new DataView(n.buffer).getUint32(8)>e.maxPackObjects)throw new D("Pack contains too many objects")}yield a}}function Mn(r){let e=/--protocol=version=2/.test(r),n=r.replace(/\s*--protocol=version=\d+/g,"").match(/^git[\s-](upload-pack|receive-pack)\s+'?([^']+?)'?\s*$/);if(!n)return null;let s=`git-${n[1]}`,a=n[2];return a.startsWith("/")&&(a=a.slice(1)),e?{service:s,repoPath:a,protocolV2:e}:{service:s,repoPath:a}}var Wn=new TextEncoder;async function Hr(r,e,t){let{resolveRepo:n,hooks:s,packCache:a,packOptions:i,receiveLimits:o,fetchLimits:f,auth:c}=t,l=e.writable.getWriter();try{let d=Mn(r);if(!d)return Ie(e,`fatal: unrecognized command '${r}'
58
- `),128;let{service:u,repoPath:h}=d,p=await n(h);if(!p)return Ie(e,`fatal: '${h}' does not appear to be a git repository
59
- `),128;let{repo:g,repoId:R}=p;if(d.protocolV2&&u==="git-upload-pack"){let x=await W(g,R,u,s,c);if(U(x))return ae(e,x);await l.write(Se());let m=new Ke(e.readable);try{return await zn(m,l,g,R,e,{hooks:s,packCache:a,packOptions:i,receiveLimits:o,fetchLimits:f,auth:c})}finally{m.release()}}let P=await W(g,R,u,s,c);if(U(P))return ae(e,P);await l.write(Rt(P.refs,u,P.headTarget));let A=new Ke(e.readable);try{if(u==="git-upload-pack"){let x=s?.advertiseRefs?Ee(P):void 0,m=await qn(A,f?.maxRequestBytes),b=await Pe(g,m,{cache:a,cacheKey:R,noDelta:i?.noDelta,deltaWindow:i?.deltaWindow,authorizedFetchSet:x});if(U(b))return ae(e,b);await Dr(l,b)}else{let{commands:x,capabilities:m}=await Vn(A),b=A.streamRemaining();await Gn({writer:l,repo:g,repoId:R,commands:x,capabilities:m,packStream:b,hooks:s,receiveLimits:o,auth:c})}}finally{A.release()}return 0}catch(d){return d instanceof D?(Ie(e,`fatal: ${d.message}
60
- `),128):(t.onError?.(d),Ie(e,`fatal: internal error
61
- `),128)}finally{try{await l.close()}catch{}}}async function Gn(r){let{writer:e,repo:t,repoId:n,commands:s,capabilities:a,packStream:i,hooks:o,receiveLimits:f,auth:c}=r,l=await kt(t,s,a,i,!0,f);if(l.updates.length===0)return;let d=l.capabilities.includes("side-band-64k"),u=l.capabilities.includes("report-status");if(!l.unpackOk){if(u){let p=l.updates.map(g=>({name:g.ref,ok:!1,error:"unpack failed"}));await e.write(re(!1,p,d))}return}let{refResults:h}=await Oe({repo:t,repoId:n,ingestResult:l,hooks:o,auth:c});if(u){let p=h.map(g=>({name:g.ref,ok:g.ok,error:g.error}));await e.write(re(!0,p,d))}}function Ie(r,e){r.writeStderr?.(Wn.encode(e))}function ae(r,e){return Ie(r,`fatal: ${e.message??"access denied"}
62
- `),128}var Cr=new TextDecoder,Ke=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=Cr.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:Cr.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 qn(r,e){let t=[],n=0;for(;;){let s=await r.readPktLine();if(!s)break;if(n+=s.raw.byteLength,e!==void 0&&n>e)throw new D("Request body too large");if(t.push(s.raw),s.type==="data"&&s.text.trimEnd()==="done")break}return Xn(t)}async function Vn(r){let e=[],t=[],n=!0;for(;;){let s=await r.readPktLine();if(!s||s.type==="flush")break;if(s.type!=="data")continue;let a=s.text;if(a.endsWith(`
63
- `)&&(a=a.slice(0,-1)),n){let o=a.indexOf("\0");o!==-1&&(t=a.slice(o+1).split(" ").filter(Boolean),a=a.slice(0,o)),n=!1}let i=a.split(" ");i.length>=3&&e.push({oldHash:i[0],newHash:i[1],refName:i[2]})}return{commands:e,capabilities:t}}async function zn(r,e,t,n,s,a){let{hooks:i,packCache:o,packOptions:f,fetchLimits:c,auth:l}=a;for(;;){let d=await Kn(r,c?.maxRequestBytes);if(!d)break;if(d.command==="ls-refs"){let u=await ve(t,n,d.args,i,l);if(U(u))return ae(s,u);await e.write(u)}else if(d.command==="fetch"){let u;if(i?.advertiseRefs){let p=await W(t,n,"git-upload-pack",i,l);if(U(p))return ae(s,p);u=Ee(p)}let h=await je(t,d.args,{cache:o,cacheKey:n,noDelta:f?.noDelta,deltaWindow:f?.deltaWindow,authorizedFetchSet:u});if(U(h))return ae(s,h);await Dr(e,h)}else break}return 0}async function Kn(r,e){let t="",n=[],s=[],a=!1,i=!1,o=0;for(;;){let f=await r.readPktLine();if(!f)return i?{command:t,capabilities:n,args:s}:null;if(f.type==="flush"){if(!i)return null;break}if(f.type==="response-end")break;if(o+=f.raw.byteLength,e!==void 0&&o>e)throw new D("Request body too large");if(f.type==="delim"){a=!0;continue}i=!0;let c=f.text;c.endsWith(`
64
- `)&&(c=c.slice(0,-1)),a?s.push(c):c.startsWith("command=")?t=c.slice(8):n.push(c)}return t?{command:t,capabilities:n,args:s}:null}function Xn(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 Dr(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 _r(r,e,t,n,s){let a=n?.dryRun??!1,i=await Br(r),o=Yn(i);if(s)for(let p of s)o.push(p);if(o.length===0)return{deleted:0,retained:0};let f=await Re(r,o,[]),c=new Set;for await(let p of f.objects)c.add(p.hash);let l=await e.listObjectHashes(t),d=[];for(let p of l)c.has(p)||d.push(p);let u=await Br(r);return Zn(i,u)?a||d.length===0?{deleted:d.length,retained:c.size}:{deleted:await e.deleteObjects(t,d),retained:c.size}:{deleted:0,retained:c.size,aborted:!0}}async function Br(r){return r.refStore.listRefs()}function Yn(r){let e=new Set;for(let t of r)e.add(t.hash);return Array.from(e)}function Zn(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}var Te=class{repos=new Set;objects=new Map;refs=new Map;forks=new Map;hasRepo(e){return this.repos.has(e)}insertRepo(e){this.repos.add(e)}deleteRepo(e){this.repos.delete(e),this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e),this.forks.delete(e)}getObject(e,t){let n=this.getObjMap(e).get(t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){let a=this.getObjMap(e);a.has(t)||a.set(t,{type:n,content:new Uint8Array(s)})}putObjects(e,t){let n=this.getObjMap(e);for(let s of t)n.has(s.hash)||n.set(s.hash,{type:s.type,content:new Uint8Array(s.content)})}hasObject(e,t){return this.getObjMap(e).has(t)}findObjectsByPrefix(e,t){let n=[];for(let s of this.getObjMap(e).keys())s.startsWith(t)&&n.push(s);return n}listObjectHashes(e){return Array.from(this.getObjMap(e).keys())}deleteObjects(e,t){let n=this.getObjMap(e),s=0;for(let a of t)n.delete(a)&&s++;return s}getRef(e,t){return this.getRefMap(e).get(t)??null}putRef(e,t,n){this.getRefMap(e).set(t,n)}removeRef(e,t){this.getRefMap(e).delete(t)}listRefs(e,t){let n=[];for(let[s,a]of this.getRefMap(e))t&&!s.startsWith(t)||n.push({name:s,ref:a});return n}atomicRefUpdate(e,t){let n=this.getRefMap(e);return t({getRef:s=>n.get(s)??null,putRef:(s,a)=>{n.set(s,a)},removeRef:s=>{n.delete(s)}})}forkRepo(e,t){this.forks.set(t,e)}getForkParent(e){return this.forks.get(e)??null}listForks(e){let t=[];for(let[n,s]of this.forks)s===e&&t.push(n);return t}repoIds(){return Array.from(this.repos)}getObjMap(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefMap(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}};var Nr=new WeakMap,Jn={http:r=>({transport:"http",request:r}),ssh:r=>({transport:"ssh",username:r.username})};function $r(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 Qn(r={}){let e=r.storage??new Te,t=Er(e),n=r.resolve??(m=>m),s=r.autoCreate,{basePath:a}=r,i={maxRequestBytes:128*1024*1024,maxInflatedBytes:256*1024*1024,maxPackBytes:128*1024*1024,maxPackObjects:25e4,...r.receiveLimits},o={maxRequestBytes:10*1024*1024,maxInflatedBytes:20*1024*1024,...r.fetchLimits};async function f(m){if(!$r(m))return null;let b=await n(m);if(b==null||b!==m&&!$r(b))return null;let y=await t.repo(b);if(y)return{repo:y,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 c=rs(r.policy,r.hooks),l=r.auth??Jn,d=r.packCache===!1?void 0:new se(r.packCache?.maxBytes),u=r.onError===!1?void 0:r.onError??(m=>{let b=m instanceof Error?m.message:String(m);console.error(`[server] Internal error: ${b}`)}),h=!1,p=0,g=null,R=null;function P(){return h?!1:(p++,!0)}function A(){p--,h&&p===0&&g?.()}let x={async fetch(m){if(!P())return new Response("Service Unavailable",{status:503});let b;try{let y=Nr.get(m);if(y!==void 0)b=y;else{if(!l.http)return new Response("HTTP auth provider not configured",{status:501});let E=await l.http(m);if(E instanceof Response)return E;b=E}let w=new URL(m.url),O=decodeURIComponent(w.pathname);if(a){let E=a.replace(/\/+$/,"");if(!O.startsWith(E))return new Response("Not Found",{status:404});O=O.slice(E.length)}if(O.startsWith("/")||(O=`/${O}`),O.endsWith("/info/refs")&&m.method==="GET"){let E=w.searchParams.get("service");if(E!=="git-upload-pack"&&E!=="git-receive-pack")return new Response("Unsupported service",{status:403});let S=At(O,"/info/refs"),j=await f(S);if(!j)return new Response("Not Found",{status:404});if(Fr(m)&&E==="git-upload-pack"){let F=await W(j.repo,j.repoId,E,c,b);if(U(F))return ie(F);let T=Se();return new Response(T,{headers:{"Content-Type":`application/x-${E}-advertisement`,"Cache-Control":"no-cache"}})}let L=await W(j.repo,j.repoId,E,c,b);if(U(L))return ie(L);let H=wt(L.refs,E,L.headTarget);return new Response(H,{headers:{"Content-Type":`application/x-${E}-advertisement`,"Cache-Control":"no-cache"}})}if(O.endsWith("/git-upload-pack")&&m.method==="POST"){let E=At(O,"/git-upload-pack"),S=await f(E);if(!S)return new Response("Not Found",{status:404});let j;if(c?.advertiseRefs){let H=await W(S.repo,S.repoId,"git-upload-pack",c,b);if(U(H))return ie(H);j=Ee(H)}let v=await Mr(m,o);if(Fr(m)){let H=pt(v),F="application/x-git-upload-pack-result";if(H.command==="ls-refs"){let T=await ve(S.repo,S.repoId,H.args,c,b);return U(T)?ie(T):new Response(T,{headers:{"Content-Type":F}})}if(H.command==="fetch"){let T=await je(S.repo,H.args,{cache:d,cacheKey:S.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow,authorizedFetchSet:j});return U(T)?ie(T):new Response(T,{headers:{"Content-Type":F}})}return new Response(`unknown command: ${H.command}`,{status:400})}let L=await Pe(S.repo,v,{cache:d,cacheKey:S.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow,authorizedFetchSet:j});return U(L)?ie(L):new Response(L,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(O.endsWith("/git-receive-pack")&&m.method==="POST"){let E=At(O,"/git-receive-pack"),S=await f(E);if(!S)return new Response("Not Found",{status:404});let j=await Mr(m,i),v=await xt(S.repo,j,i);if(!v.sawFlush&&v.updates.length===0)return new Response("Bad Request",{status:400});let L=v.capabilities.includes("side-band-64k"),H=v.capabilities.includes("report-status");if(!v.unpackOk){if(H){let T=v.updates.map(G=>({name:G.ref,ok:!1,error:"unpack failed"}));return new Response(re(!1,T,L),{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:F}=await Oe({repo:S.repo,repoId:S.repoId,ingestResult:v,hooks:c,auth:b});if(H){let T=F.map(G=>({name:G.ref,ok:G.ok,error:G.error}));return new Response(re(!0,T,L),{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(y){return y instanceof D?new Response(y.message,{status:y.status}):(u?.(y,b),new Response("Internal Server Error",{status:500}))}finally{A()}},async handleSession(m,b,y){if(!P())return b.writeStderr?.(new TextEncoder().encode(`fatal: server shutting down
30
+ `));for(let a of e)a.ok?n.push(E(`ok ${a.name}
31
+ `)):n.push(E(`ng ${a.name} ${a.error??"failed"}
32
+ `));n.push(B());let s=N(...n);if(t){let a=[];return a.push(Ae(1,s)),a.push(B()),N(...a)}return s}function Ae(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),E(t)}function ht(r){let e=[];e.push(E(`version 2
33
+ `));for(let t of r)e.push(E(`${t}
34
+ `));return e.push(B()),N(...e)}function yt(r){let e=ut(r),t="",n=[],s=[],a=!1;for(let i of e){if(i.type==="flush"||i.type==="response-end")break;if(i.type==="delim"){a=!0;continue}let o=pt(i);o&&(a?s.push(o):o.startsWith("command=")?t=o.slice(8):n.push(o))}return{command:t,capabilities:n,args:s}}function mt(r){let e=[];for(let t of r){let n=`${t.hash} ${t.name}`;t.symrefTarget&&(n+=` symref-target:${t.symrefTarget}`),t.peeledHash&&(n+=` peeled:${t.peeledHash}`),e.push(E(`${n}
35
+ `))}return e.push(B()),N(...e)}function bt(r){let e=[],t=[],n=[],s=[],a=!1,i,o=!1,f=!1;for(let c of r)c.startsWith("want ")?e.push(c.slice(5)):c.startsWith("have ")?t.push(c.slice(5)):c.startsWith("shallow ")?n.push(c.slice(8)):c.startsWith("deepen ")?(i=parseInt(c.slice(7),10),Number.isNaN(i)&&(i=void 0)):c.startsWith("want-ref ")?s.push(c.slice(9)):c==="done"?a=!0:c==="include-tag"?o=!0:c==="ofs-delta"&&(f=!0);return{wants:e,haves:t,done:a,clientShallows:n,depth:i,includeTag:o,ofsDeltas:f,wantRefs:s}}function se(r,e){let t=[],{commonHashes:n,shallowInfo:s,wantedRefs:a}=e??{};if(n&&n.length>0){t.push(E(`acknowledgments
36
+ `));for(let o of n)t.push(E(`ACK ${o}
37
+ `));t.push(E(`ready
38
+ `)),t.push(K())}if(s&&(s.shallow.length>0||s.unshallow.length>0)){t.push(E(`shallow-info
39
+ `));for(let o of s.shallow)t.push(E(`shallow ${o}
40
+ `));for(let o of s.unshallow)t.push(E(`unshallow ${o}
41
+ `));t.push(K())}if(a&&a.length>0){t.push(E(`wanted-refs
42
+ `));for(let o of a)t.push(E(`${o.hash} ${o.name}
43
+ `));t.push(K())}t.push(E(`packfile
44
+ `));let i=0;for(;i<r.byteLength;){let o=Math.min(qe,r.byteLength-i);t.push(Ae(1,r.subarray(i,i+o))),i+=o}return t.push(B()),N(...t)}function Pr(r,e){let t=[];if(t.push(E(`acknowledgments
45
+ `)),r.length>0)for(let n of r)t.push(E(`ACK ${n}
46
+ `));else t.push(E(`NAK
47
+ `));return e&&t.push(E(`ready
48
+ `)),t.push(B()),N(...t)}async function*Sr(r,e){let{commonHashes:t,shallowInfo:n,wantedRefs:s}=e??{};if(t&&t.length>0){let a=[];a.push(E(`acknowledgments
49
+ `));for(let i of t)a.push(E(`ACK ${i}
50
+ `));a.push(E(`ready
51
+ `)),a.push(K()),yield N(...a)}if(n&&(n.shallow.length>0||n.unshallow.length>0)){let a=[];a.push(E(`shallow-info
52
+ `));for(let i of n.shallow)a.push(E(`shallow ${i}
53
+ `));for(let i of n.unshallow)a.push(E(`unshallow ${i}
54
+ `));a.push(K()),yield N(...a)}if(s&&s.length>0){let a=[];a.push(E(`wanted-refs
55
+ `));for(let i of s)a.push(E(`${i.hash} ${i.name}
56
+ `));a.push(K()),yield N(...a)}yield E(`packfile
57
+ `);for await(let a of r){let i=0;for(;i<a.byteLength;){let o=Math.min(qe,a.byteLength-i);yield Ae(1,a.subarray(i,i+o)),i+=o}}yield B()}var _=class extends Error{status=413;constructor(e){super(e),this.name="RequestLimitError"}};function jr(r){async function e(t){let n=r.getForkParent?await r.getForkParent(t):null;return{objectStore:new gt(r,t,n),refStore:new Rt(r,t)}}return{async createRepo(t,n){if(await r.hasRepo(t))throw new Error(`repo '${t}' already exists`);let a=n?.defaultBranch??"main";return await r.insertRepo(t),await r.putRef(t,"HEAD",{type:"symbolic",target:`refs/heads/${a}`}),e(t)},async repo(t){return await r.hasRepo(t)?e(t):null},async deleteRepo(t){if(r.listForks){let n=await r.listForks(t);if(n.length>0)throw new Error(`cannot delete repo '${t}': has ${n.length} active fork(s)`)}await r.deleteRepo(t)},async forkRepo(t,n,s){if(!r.forkRepo||!r.getForkParent||!r.listForks)throw new Error("storage backend does not support forks");if(!await r.hasRepo(t))throw new Error(`source repo '${t}' not found`);if(await r.hasRepo(n))throw new Error(`repo '${n}' already exists`);let f=await r.getForkParent(t)??t;await r.insertRepo(n),await r.forkRepo(f,n);let c=await r.listRefs(t);for(let d of c)await r.putRef(n,d.name,d.ref);let l=await r.getRef(t,"HEAD");if(l)await r.putRef(n,"HEAD",l);else{let d=s?.defaultBranch??"main";await r.putRef(n,"HEAD",{type:"symbolic",target:`refs/heads/${d}`})}return e(n)}}}function ze(r){return typeof r=="object"&&r!==null&&typeof r.preparePack=="function"&&typeof r.commitPack=="function"&&typeof r.deleteObjects=="function"}var gt=class{constructor(e,t,n=null){this.driver=e;this.repoId=t;this.parentId=n}cache=new _e;async write(e,t){let n=ar(e,t),s=await _t(n);return await this.driver.putObject(this.repoId,s,e,t),s}async read(e){let t=this.cache.get(e);if(t)return t;let n=await this.driver.getObject(this.repoId,e);if(!n&&this.parentId&&(n=await this.driver.getObject(this.parentId,e)),!n)throw new Error(`object ${e} not found`);return this.cache.set(e,n),n}async exists(e){return await this.driver.hasObject(this.repoId,e)?!0:this.parentId?!!await this.driver.hasObject(this.parentId,e):!1}async preparePack(e){if(e.byteLength<32)return[];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[];let i=this.driver,o=this.repoId,f=this.parentId;return(await rr(e,async l=>{let d=await i.getObject(o,l);return!d&&f&&(d=await i.getObject(f,l)),d?{type:d.type,content:new Uint8Array(d.content)}:null})).map(l=>({hash:l.hash,type:l.type,content:l.content}))}async preparePackStream(e){let t=[];for await(let n of e)t.push({hash:n.hash,type:n.type,content:n.content});return t}async commitPack(e){return e.length===0?0:(await this.driver.putObjects(this.repoId,e),e.length)}async ingestPack(e){let t=await this.preparePack(e);return this.commitPack(t)}async ingestPackStream(e){let t=await this.preparePackStream(e);return this.commitPack(t)}async deleteObjects(e){return e.length===0?0:this.driver.deleteObjects(this.repoId,e)}async findByPrefix(e){if(e.length<4)return[];let t=await this.driver.findObjectsByPrefix(this.repoId,e);if(!this.parentId)return Array.from(t);let n=await this.driver.findObjectsByPrefix(this.parentId,e),s=new Set(t);for(let a of n)s.add(a);return Array.from(s)}},Rt=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,fr(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 wt(i=>this.driver.getRef(this.repoId,i),s.ref.target);a&&n.push({name:s.name,hash:a})}return n}async compareAndSwapRef(e,t,n){return!!await this.driver.atomicRefUpdate(this.repoId,s=>Oe(s.getRef(e),a=>{let i=a?a.type==="direct"?a.hash:wt(o=>s.getRef(o),a.target):null;return Oe(i,o=>{if(t===null){if(a!==null)return!1}else if(o!==t)return!1;return n===null?Oe(s.removeRef(e),()=>!0):Oe(s.putRef(e,n),()=>!0)})}))}};function Oe(r,e){return r instanceof Promise?r.then(e):e(r)}function wt(r,e,t=0){return t>10?null:Oe(r(e),n=>n?n.type==="direct"?n.hash:n.type==="symbolic"?wt(r,n.target,t+1):null:null)}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,n){if(n.length>0)return null;let s=t.slice().sort();return`${e}\0${s.join(",")}`}get(e){let t=this.entries.get(e);return t?this.hits++:this.misses++,t}set(e,t){if(this.entries.has(e))return;let n=t.packData.byteLength;if(!(n>this.maxBytes)){for(;this.currentBytes+n>this.maxBytes&&this.entries.size>0;){let s=this.entries.keys().next().value;this.currentBytes-=this.entries.get(s).packData.byteLength,this.entries.delete(s)}this.entries.set(e,t),this.currentBytes+=n}}clear(){this.entries.clear(),this.currentBytes=0}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},vr=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","shallow"],Tr=["report-status","side-band-64k","ofs-delta","delete-refs"];async function Ir(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),n=[],s=null,a;if(t)if(t.type==="symbolic"){a=t.target;let o=await r.refStore.readRef(t.target);o?.type==="direct"&&(s=o.hash)}else s=t.hash;let i=e.slice().sort((o,f)=>o.name<f.name?-1:o.name>f.name?1:0);if(!s&&i.length>0){let o=Mn(i);o&&(s=o.hash,a=o.name)}s&&n.push({name:"HEAD",hash:s});for(let o of i)if(n.push({name:o.name,hash:o.hash}),o.name.startsWith("refs/tags/"))try{let f=await r.objectStore.read(o.hash);if(f.type==="tag"){let c=re(f.content);n.push({name:`${o.name}^{}`,hash:c.object})}}catch{}return{refs:n,headTarget:a}}var Fn=["refs/heads/main","refs/heads/master"];function Mn(r){for(let t of Fn){let n=r.find(s=>s.name===t);if(n)return n}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function xt(r,e,t){return xr(r,e,e==="git-upload-pack"?vr:Tr,t)}function Et(r,e,t){return Ve(r,e==="git-upload-pack"?vr:Tr,t)}async function G(r,e,t,n,s){let{refs:a,headTarget:i}=await Ir(r),o=a;if(n?.advertiseRefs){let f=await n.advertiseRefs({repo:r,repoId:e,refs:a,service:t,auth:s});if(U(f))return f;f&&(o=f)}return{refs:o,headTarget:i}}function Pe(r){let e=new Map,t=new Set;for(let n of r.refs)e.set(n.name,n.hash),t.add(n.hash);return{allowedRefHashes:e,allowedWantHashes:t}}async function Se(r,e,t){let{wants:n,haves:s,capabilities:a,clientShallows:i,depth:o,done:f}=Er(e);if(n.length===0)return ke(new Uint8Array(0),!1);if(t?.authorizedFetchSet){for(let x of n)if(!t.authorizedFetchSet.allowedWantHashes.has(x))return{reject:!0,message:`forbidden want ${x}`}}let c=a.includes("multi_ack_detailed"),l=a.includes("side-band-64k"),d,u,h;if(i.length>0&&(h=new Set(i)),o!==void 0){let x=await dt(r,n,o,h??new Set);d=x,u=new Set(x.shallow)}if(d&&!f)return kr(d);let p;if(c&&s.length>0){p=[];for(let x of s)await r.objectStore.exists(x)&&p.push(x);p.length===0&&(p=void 0)}let g=!u&&t?.cache&&t.cacheKey?ae.key(t.cacheKey,n,s):null;if(g&&t?.cache){let x=t.cache.get(g);if(x)return ke(x.packData,l,p)}let w=a.includes("include-tag"),O={repo:r,wants:n,haves:s,includeTag:w,shallowBoundary:u,clientShallowBoundary:h,cache:t?.cache,cacheKey:g,deltaWindow:t?.deltaWindow};if(t?.noDelta){let x=await Cr(O);if(!x){let{data:m}=await te([]);return ke(m,l,p,d)}return Hr(Ar(x,l,p,d))}let k=await Ur(O);return ke(k,l,p,d)}async function Lr(r,e){let t=[],n=await r.refStore.listRefs("refs/tags");for(let s of n)if(!e.has(s.hash))try{let a=await r.objectStore.read(s.hash);if(a.type==="tag"){let i=re(a.content);e.has(i.object)&&(t.push({hash:s.hash,type:"tag",content:a.content}),e.add(s.hash))}}catch{}return t}async function Ur(r){let{repo:e,wants:t,haves:n,includeTag:s,shallowBoundary:a,clientShallowBoundary:i}=r,o=await br(e,t,n,a,i);if(o.count===0){let{data:p}=await te([]);return p}let f=await gr(o),c=new Set(f.map(p=>p.hash));if(s){let p=await Lr(e,c);f.push(...p)}let l=r.deltaWindow?{window:r.deltaWindow}:void 0,d=mr(f,l),u=d.map(p=>({hash:p.hash,type:p.type,content:p.content,delta:p.delta,deltaBaseHash:p.deltaBase})),{data:h}=await te(u);if(r.cacheKey&&r.cache){let p=d.filter(g=>g.delta).length;r.cache.set(r.cacheKey,{packData:h,objectCount:f.length,deltaCount:p})}return h}async function Cr(r){let{repo:e,wants:t,haves:n,includeTag:s,shallowBoundary:a,clientShallowBoundary:i}=r,{count:o,objects:f}=await Ee(e,t,n,a,i);if(o===0)return null;let c=[];for await(let p of f)c.push(p);let l=new Set(c.map(p=>p.hash)),d=s?await Lr(e,l):[],u=c.length+d.length;async function*h(){for(let p of c){let g=await e.objectStore.read(p.hash);yield{type:g.type,content:g.content}}for(let p of d)yield{type:p.type,content:p.content}}return sr(u,h())}function Hr(r){let e=r[Symbol.asyncIterator]();return new ReadableStream({async pull(t){let{value:n,done:s}=await e.next();s?t.close():t.enqueue(n)}})}async function Dr(r,e){return await r.commitPack(e),e.map(t=>t.hash)}async function Wn(r,e){ze(r.objectStore)&&await r.objectStore.deleteObjects(e)}async function kt(r,e,t){let{commands:n,packData:s,capabilities:a,sawFlush:i}=Or(e),o=!0,f;if(s.byteLength>0)try{if(Gn(s,t),ze(r.objectStore)){let l=await r.objectStore.preparePack(s);f=await Dr(r.objectStore,l)}else await r.objectStore.ingestPack(s)}catch(l){if(l instanceof _)throw l;o=!1}return{updates:await _r(r,n,o),unpackOk:o,capabilities:a,sawFlush:i,ingestedHashes:f}}async function At(r,e,t,n,s=!0,a){let i=!0,o;if(e.some(l=>l.newHash!==Y))try{let l=async u=>{try{return await r.objectStore.read(u)}catch{return null}},d=nr(qn(n,a),l);if(ze(r.objectStore)){let u=await r.objectStore.preparePackStream(d);o=await Dr(r.objectStore,u)}else await r.objectStore.ingestPackStream(d)}catch(l){if(l instanceof _)throw l;i=!1}return{updates:await _r(r,e,i),unpackOk:i,capabilities:t,sawFlush:s,ingestedHashes:o}}async function _r(r,e,t){let n=[];for(let s of e){let a=s.oldHash===Y,i=s.newHash===Y;if(a)n.push({ref:s.refName,oldHash:null,newHash:s.newHash,isFF:!1,isCreate:!0,isDelete:!1});else if(i)n.push({ref:s.refName,oldHash:s.oldHash,newHash:s.newHash,isFF:!1,isCreate:!1,isDelete:!0});else{let o=!1;if(t)try{o=await ft(r,s.oldHash,s.newHash)}catch{}n.push({ref:s.refName,oldHash:s.oldHash,newHash:s.newHash,isFF:o,isCreate:!1,isDelete:!1})}}return n}async function Xe(r,e){let t=[],n=[];for(let s of e){if(s.ref==="HEAD"){t.push({ref:s.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!s.isDelete&&!it(s.ref)){t.push({ref:s.ref,ok:!1,error:"invalid refname"});continue}if(!s.isDelete&&!await r.objectStore.exists(s.newHash)){t.push({ref:s.ref,ok:!1,error:"missing objects"});continue}try{let a=s.isCreate?null:s.oldHash,i=s.isDelete?null:{type:"direct",hash:s.newHash};if(!await r.refStore.compareAndSwapRef(s.ref,a,i)){t.push({ref:s.ref,ok:!1,error:"failed to lock"});continue}t.push({ref:s.ref,ok:!0}),n.push(s)}catch(a){t.push({ref:s.ref,ok:!1,error:a instanceof Error?a.message:String(a)})}}return{refResults:t,applied:n}}async function je(r){let{repo:e,repoId:t,ingestResult:n,hooks:s,auth:a}=r,{updates:i}=n;if(s?.preReceive){let c=await s.preReceive({repo:e,repoId:t,updates:i,auth:a});if(U(c)){n.ingestedHashes?.length&&await Wn(e,n.ingestedHashes);let l=c.message??"pre-receive hook declined";return{refResults:i.map(d=>({ref:d.ref,ok:!1,error:l})),applied:[]}}}let o=[],f=[];for(let c of i){if(c.ref==="HEAD"){o.push({ref:c.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!c.isDelete&&!it(c.ref)){o.push({ref:c.ref,ok:!1,error:"invalid refname"});continue}if(s?.update){let l=await s.update({repo:e,repoId:t,update:c,auth:a});if(U(l)){o.push({ref:c.ref,ok:!1,error:l.message??"update hook declined"});continue}}if(!c.isDelete&&!await e.objectStore.exists(c.newHash)){o.push({ref:c.ref,ok:!1,error:"missing objects"});continue}try{let l=c.isCreate?null:c.oldHash,d=c.isDelete?null:{type:"direct",hash:c.newHash};if(!await e.refStore.compareAndSwapRef(c.ref,l,d)){o.push({ref:c.ref,ok:!1,error:"failed to lock"});continue}o.push({ref:c.ref,ok:!0}),f.push(c)}catch(l){o.push({ref:c.ref,ok:!1,error:l instanceof Error?l.message:String(l)})}}if(s?.postReceive&&f.length>0)try{await s.postReceive({repo:e,repoId:t,updates:f,auth:a})}catch{}return{refResults:o,applied:f}}async function Ke(r,e){let t=[];for(let n of e){let s=n.oldHash!==void 0?n.oldHash:await Re(r,n.ref);if(s===null)t.push({ref:n.ref,oldHash:null,newHash:n.newHash??Y,isFF:!1,isCreate:!0,isDelete:!1});else if(n.newHash===null)t.push({ref:n.ref,oldHash:s,newHash:Y,isFF:!1,isCreate:!1,isDelete:!0});else{let a=!1;try{a=await ft(r,s,n.newHash)}catch{}t.push({ref:n.ref,oldHash:s,newHash:n.newHash,isFF:a,isCreate:!1,isDelete:!1})}}return t}var $n=["agent=just-git/1.0","ls-refs=unborn","fetch=shallow","server-option","object-format=sha1"];function ve(){return ht($n)}async function Te(r,e,t,n,s){let a=t.includes("symrefs"),i=t.includes("peel"),o=t.includes("unborn"),f=t.filter(h=>h.startsWith("ref-prefix ")).map(h=>h.slice(11)),c=await G(r,e,"git-upload-pack",n,s);if(U(c))return c;let{refs:l,headTarget:d}=c,u=[];for(let h of l){if(h.name.endsWith("^{}")||f.length>0&&!f.some(g=>h.name.startsWith(g)))continue;let p={hash:h.hash,name:h.name};if(a&&h.name==="HEAD"&&d&&(p.symrefTarget=d),i&&h.name.startsWith("refs/tags/")){let g=l.find(w=>w.name===`${h.name}^{}`);g&&(p.peeledHash=g.hash)}u.push(p)}return o&&!u.some(h=>h.name==="HEAD")&&d&&(f.length===0||f.some(p=>"HEAD".startsWith(p)))&&u.unshift({hash:"unborn",name:"HEAD",symrefTarget:d}),mt(u)}async function Ie(r,e,t){let{wants:n,haves:s,done:a,clientShallows:i,depth:o,includeTag:f,wantRefs:c}=bt(e);if(n.length===0&&c.length===0){let{data:y}=await te([]);return se(y)}let l=t?.authorizedFetchSet,d=[],u=[...n];for(let y of c)if(l){let R=l.allowedRefHashes.get(y);if(!R)return{reject:!0,message:`forbidden want-ref ${y}`};d.push({hash:R,name:y}),u.includes(R)||u.push(R)}else{let R=await Re(r,y);R&&(d.push({hash:R,name:y}),u.includes(R)||u.push(R))}if(l){for(let y of n)if(!l.allowedWantHashes.has(y))return{reject:!0,message:`forbidden want ${y}`}}let h,p,g;if(i.length>0&&(g=new Set(i)),o!==void 0){let y=await dt(r,u,o,g??new Set);h=y,p=new Set(y.shallow)}let w;if(s.length>0){w=[];for(let y of s)await r.objectStore.exists(y)&&w.push(y);w.length===0&&(w=void 0)}let O=w&&w.length>0;if(!a&&!O)return Pr(w??[]);let k=!p&&t?.cache&&t.cacheKey?ae.key(t.cacheKey,u,s):null,x={commonHashes:w,shallowInfo:h,wantedRefs:d.length>0?d:void 0};if(k&&t?.cache){let y=t.cache.get(k);if(y)return se(y.packData,x)}let m={repo:r,wants:u,haves:s,includeTag:f,shallowBoundary:p,clientShallowBoundary:g,cache:t?.cache,cacheKey:k,deltaWindow:t?.deltaWindow};if(t?.noDelta){let y=await Cr(m);if(!y){let{data:R}=await te([]);return se(R,x)}return Hr(Sr(y,x))}let b=await Ur(m);return se(b,x)}function Gn(r,e){if(e){if(e.maxPackBytes!==void 0&&r.byteLength>e.maxPackBytes)throw new _("Pack payload too large");if(e.maxPackObjects!==void 0&&r.byteLength>=12&&new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(8)>e.maxPackObjects)throw new _("Pack contains too many objects")}}async function*qn(r,e){if(!e){for await(let a of r)yield a;return}let t=0,n=new Uint8Array(12),s=0;for await(let a of r){if(t+=a.byteLength,e.maxPackBytes!==void 0&&t>e.maxPackBytes)throw new _("Pack payload too large");if(s<12){let i=Math.min(12-s,a.byteLength);if(n.set(a.subarray(0,i),s),s+=i,s===12&&e.maxPackObjects!==void 0&&new DataView(n.buffer).getUint32(8)>e.maxPackObjects)throw new _("Pack contains too many objects")}yield a}}function Vn(r){let e=/--protocol=version=2/.test(r),n=r.replace(/\s*--protocol=version=\d+/g,"").match(/^git[\s-](upload-pack|receive-pack)\s+'?([^']+?)'?\s*$/);if(!n)return null;let s=`git-${n[1]}`,a=n[2];return a.startsWith("/")&&(a=a.slice(1)),e?{service:s,repoPath:a,protocolV2:e}:{service:s,repoPath:a}}var zn=new TextEncoder;async function Br(r,e,t){let{resolveRepo:n,hooks:s,packCache:a,packOptions:i,receiveLimits:o,fetchLimits:f,auth:c}=t,l=e.writable.getWriter();try{let d=Vn(r);if(!d)return Le(e,`fatal: unrecognized command '${r}'
58
+ `),128;let{service:u,repoPath:h}=d,p=await n(h);if(!p)return Le(e,`fatal: '${h}' does not appear to be a git repository
59
+ `),128;let{repo:g,repoId:w}=p;if(d.protocolV2&&u==="git-upload-pack"){let x=await G(g,w,u,s,c);if(U(x))return ie(e,x);await l.write(ve());let m=new Ye(e.readable);try{return await Zn(m,l,g,w,e,{hooks:s,packCache:a,packOptions:i,receiveLimits:o,fetchLimits:f,auth:c})}finally{m.release()}}let O=await G(g,w,u,s,c);if(U(O))return ie(e,O);await l.write(Et(O.refs,u,O.headTarget));let k=new Ye(e.readable);try{if(u==="git-upload-pack"){let x=s?.advertiseRefs?Pe(O):void 0,m=await Kn(k,f?.maxRequestBytes),b=await Se(g,m,{cache:a,cacheKey:w,noDelta:i?.noDelta,deltaWindow:i?.deltaWindow,authorizedFetchSet:x});if(U(b))return ie(e,b);await Fr(l,b)}else{let{commands:x,capabilities:m}=await Yn(k),b=k.streamRemaining();await Xn({writer:l,repo:g,repoId:w,commands:x,capabilities:m,packStream:b,hooks:s,receiveLimits:o,auth:c})}}finally{k.release()}return 0}catch(d){return d instanceof _?(Le(e,`fatal: ${d.message}
60
+ `),128):(t.onError?.(d),Le(e,`fatal: internal error
61
+ `),128)}finally{try{await l.close()}catch{}}}async function Xn(r){let{writer:e,repo:t,repoId:n,commands:s,capabilities:a,packStream:i,hooks:o,receiveLimits:f,auth:c}=r,l=await At(t,s,a,i,!0,f);if(l.updates.length===0)return;let d=l.capabilities.includes("side-band-64k"),u=l.capabilities.includes("report-status");if(!l.unpackOk){if(u){let p=l.updates.map(g=>({name:g.ref,ok:!1,error:"unpack failed"}));await e.write(ne(!1,p,d))}return}let{refResults:h}=await je({repo:t,repoId:n,ingestResult:l,hooks:o,auth:c});if(u){let p=h.map(g=>({name:g.ref,ok:g.ok,error:g.error}));await e.write(ne(!0,p,d))}}function Le(r,e){r.writeStderr?.(zn.encode(e))}function ie(r,e){return Le(r,`fatal: ${e.message??"access denied"}
62
+ `),128}var Nr=new TextDecoder,Ye=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=Nr.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:Nr.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 Kn(r,e){let t=[],n=0;for(;;){let s=await r.readPktLine();if(!s)break;if(n+=s.raw.byteLength,e!==void 0&&n>e)throw new _("Request body too large");if(t.push(s.raw),s.type==="data"&&s.text.trimEnd()==="done")break}return Qn(t)}async function Yn(r){let e=[],t=[],n=!0;for(;;){let s=await r.readPktLine();if(!s||s.type==="flush")break;if(s.type!=="data")continue;let a=s.text;if(a.endsWith(`
63
+ `)&&(a=a.slice(0,-1)),n){let o=a.indexOf("\0");o!==-1&&(t=a.slice(o+1).split(" ").filter(Boolean),a=a.slice(0,o)),n=!1}let i=a.split(" ");i.length>=3&&e.push({oldHash:i[0],newHash:i[1],refName:i[2]})}return{commands:e,capabilities:t}}async function Zn(r,e,t,n,s,a){let{hooks:i,packCache:o,packOptions:f,fetchLimits:c,auth:l}=a;for(;;){let d=await Jn(r,c?.maxRequestBytes);if(!d)break;if(d.command==="ls-refs"){let u=await Te(t,n,d.args,i,l);if(U(u))return ie(s,u);await e.write(u)}else if(d.command==="fetch"){let u;if(i?.advertiseRefs){let p=await G(t,n,"git-upload-pack",i,l);if(U(p))return ie(s,p);u=Pe(p)}let h=await Ie(t,d.args,{cache:o,cacheKey:n,noDelta:f?.noDelta,deltaWindow:f?.deltaWindow,authorizedFetchSet:u});if(U(h))return ie(s,h);await Fr(e,h)}else break}return 0}async function Jn(r,e){let t="",n=[],s=[],a=!1,i=!1,o=0;for(;;){let f=await r.readPktLine();if(!f)return i?{command:t,capabilities:n,args:s}:null;if(f.type==="flush"){if(!i)return null;break}if(f.type==="response-end")break;if(o+=f.raw.byteLength,e!==void 0&&o>e)throw new _("Request body too large");if(f.type==="delim"){a=!0;continue}i=!0;let c=f.text;c.endsWith(`
64
+ `)&&(c=c.slice(0,-1)),a?s.push(c):c.startsWith("command=")?t=c.slice(8):n.push(c)}return t?{command:t,capabilities:n,args:s}:null}function Qn(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 Fr(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 Wr(r,e,t,n,s){let a=n?.dryRun??!1,i=await Mr(r),o=es(i);if(s)for(let p of s)o.push(p);if(o.length===0)return{deleted:0,retained:0};let f=await Ee(r,o,[]),c=new Set;for await(let p of f.objects)c.add(p.hash);let l=await e.listObjectHashes(t),d=[];for(let p of l)c.has(p)||d.push(p);let u=await Mr(r);return ts(i,u)?a||d.length===0?{deleted:d.length,retained:c.size}:{deleted:await e.deleteObjects(t,d),retained:c.size}:{deleted:0,retained:c.size,aborted:!0}}async function Mr(r){return r.refStore.listRefs()}function es(r){let e=new Set;for(let t of r)e.add(t.hash);return Array.from(e)}function ts(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}var Ue=class{repos=new Set;objects=new Map;refs=new Map;forks=new Map;hasRepo(e){return this.repos.has(e)}insertRepo(e){this.repos.add(e)}deleteRepo(e){this.repos.delete(e),this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e),this.forks.delete(e)}getObject(e,t){let n=this.getObjMap(e).get(t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){let a=this.getObjMap(e);a.has(t)||a.set(t,{type:n,content:new Uint8Array(s)})}putObjects(e,t){let n=this.getObjMap(e);for(let s of t)n.has(s.hash)||n.set(s.hash,{type:s.type,content:new Uint8Array(s.content)})}hasObject(e,t){return this.getObjMap(e).has(t)}findObjectsByPrefix(e,t){let n=[];for(let s of this.getObjMap(e).keys())s.startsWith(t)&&n.push(s);return n}listObjectHashes(e){return Array.from(this.getObjMap(e).keys())}deleteObjects(e,t){let n=this.getObjMap(e),s=0;for(let a of t)n.delete(a)&&s++;return s}getRef(e,t){return this.getRefMap(e).get(t)??null}putRef(e,t,n){this.getRefMap(e).set(t,n)}removeRef(e,t){this.getRefMap(e).delete(t)}listRefs(e,t){let n=[];for(let[s,a]of this.getRefMap(e))t&&!s.startsWith(t)||n.push({name:s,ref:a});return n}atomicRefUpdate(e,t){let n=this.getRefMap(e);return t({getRef:s=>n.get(s)??null,putRef:(s,a)=>{n.set(s,a)},removeRef:s=>{n.delete(s)}})}forkRepo(e,t){this.forks.set(t,e)}getForkParent(e){return this.forks.get(e)??null}listForks(e){let t=[];for(let[n,s]of this.forks)s===e&&t.push(n);return t}repoIds(){return Array.from(this.repos)}getObjMap(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefMap(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}};var $r=new WeakMap,rs={http:r=>({transport:"http",request:r}),ssh:r=>({transport:"ssh",username:r.username})};function Gr(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 ns(r={}){let e=r.storage??new Ue,t=jr(e),n=r.resolve??(m=>m),s=r.autoCreate,{basePath:a}=r,i={maxRequestBytes:128*1024*1024,maxInflatedBytes:256*1024*1024,maxPackBytes:128*1024*1024,maxPackObjects:25e4,...r.receiveLimits},o={maxRequestBytes:10*1024*1024,maxInflatedBytes:20*1024*1024,...r.fetchLimits};async function f(m){if(!Gr(m))return null;let b=await n(m);if(b==null||b!==m&&!Gr(b))return null;let y=await t.repo(b);if(y)return{repo:y,repoId:b};if(!s)return null;let R=typeof s=="object"?{defaultBranch:s.defaultBranch}:void 0;return{repo:await t.createRepo(b,R),repoId:b}}let c=is(r.policy,r.hooks),l=r.auth??rs,d=r.packCache===!1?void 0:new ae(r.packCache?.maxBytes),u=r.onError===!1?void 0:r.onError??(m=>{let b=m instanceof Error?m.message:String(m);console.error(`[server] Internal error: ${b}`)}),h=!1,p=0,g=null,w=null;function O(){return h?!1:(p++,!0)}function k(){p--,h&&p===0&&g?.()}let x={async fetch(m){if(!O())return new Response("Service Unavailable",{status:503});let b;try{let y=$r.get(m);if(y!==void 0)b=y;else{if(!l.http)return new Response("HTTP auth provider not configured",{status:501});let A=await l.http(m);if(A instanceof Response)return A;b=A}let R=new URL(m.url),P=decodeURIComponent(R.pathname);if(a){let A=a.replace(/\/+$/,"");if(!P.startsWith(A))return new Response("Not Found",{status:404});P=P.slice(A.length)}if(P.startsWith("/")||(P=`/${P}`),P.endsWith("/info/refs")&&m.method==="GET"){let A=R.searchParams.get("service");if(A!=="git-upload-pack"&&A!=="git-receive-pack")return new Response("Unsupported service",{status:403});let S=Ot(P,"/info/refs"),v=await f(S);if(!v)return new Response("Not Found",{status:404});if(qr(m)&&A==="git-upload-pack"){let W=await G(v.repo,v.repoId,A,c,b);if(U(W))return oe(W);let L=ve();return new Response(L,{headers:{"Content-Type":`application/x-${A}-advertisement`,"Cache-Control":"no-cache"}})}let C=await G(v.repo,v.repoId,A,c,b);if(U(C))return oe(C);let D=xt(C.refs,A,C.headTarget);return new Response(D,{headers:{"Content-Type":`application/x-${A}-advertisement`,"Cache-Control":"no-cache"}})}if(P.endsWith("/git-upload-pack")&&m.method==="POST"){let A=Ot(P,"/git-upload-pack"),S=await f(A);if(!S)return new Response("Not Found",{status:404});let v;if(c?.advertiseRefs){let D=await G(S.repo,S.repoId,"git-upload-pack",c,b);if(U(D))return oe(D);v=Pe(D)}let j=await Vr(m,o);if(qr(m)){let D=yt(j),W="application/x-git-upload-pack-result";if(D.command==="ls-refs"){let L=await Te(S.repo,S.repoId,D.args,c,b);return U(L)?oe(L):new Response(L,{headers:{"Content-Type":W}})}if(D.command==="fetch"){let L=await Ie(S.repo,D.args,{cache:d,cacheKey:S.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow,authorizedFetchSet:v});return U(L)?oe(L):new Response(L,{headers:{"Content-Type":W}})}return new Response(`unknown command: ${D.command}`,{status:400})}let C=await Se(S.repo,j,{cache:d,cacheKey:S.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow,authorizedFetchSet:v});return U(C)?oe(C):new Response(C,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(P.endsWith("/git-receive-pack")&&m.method==="POST"){let A=Ot(P,"/git-receive-pack"),S=await f(A);if(!S)return new Response("Not Found",{status:404});let v=await Vr(m,i),j=await kt(S.repo,v,i);if(!j.sawFlush&&j.updates.length===0)return new Response("Bad Request",{status:400});let C=j.capabilities.includes("side-band-64k"),D=j.capabilities.includes("report-status");if(!j.unpackOk){if(D){let L=j.updates.map(q=>({name:q.ref,ok:!1,error:"unpack failed"}));return new Response(ne(!1,L,C),{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:W}=await je({repo:S.repo,repoId:S.repoId,ingestResult:j,hooks:c,auth:b});if(D){let L=W.map(q=>({name:q.ref,ok:q.ok,error:q.error}));return new Response(ne(!0,L,C),{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(y){return y instanceof _?new Response(y.message,{status:y.status}):(u?.(y,b),new Response("Internal Server Error",{status:500}))}finally{k()}},async handleSession(m,b,y){if(!O())return b.writeStderr?.(new TextEncoder().encode(`fatal: server shutting down
65
65
  `)),128;try{if(!l.ssh)return b.writeStderr?.(new TextEncoder().encode(`fatal: SSH auth provider not configured
66
- `)),128;let w=await l.ssh(y??{});return await Hr(m,b,{resolveRepo:f,hooks:c,packCache:d,packOptions:r.packOptions,receiveLimits:i,fetchLimits:o,auth:w,onError:u?O=>u(O,w):void 0})}finally{A()}},async updateRefs(m,b){if(!P())throw new Error("Server is shutting down");try{let y=await x.requireRepo(m),w=await ze(y,b);return Ve(y,w)}finally{A()}},async commit(m,b){if(!P())throw new Error("Server is shutting down");try{let y=await x.requireRepo(m),w=await cr(y,b),O=`refs/heads/${b.branch}`,E=await ze(y,[{ref:O,newHash:w.hash,oldHash:w.parentHash}]),j=(await Ve(y,E)).refResults[0];if(!j?.ok)throw new Error(j?.error??"ref update failed");return w}finally{A()}},nodeHandler(m,b){let y=[],w=0,O=!1,j=new URL(m.url??"/","http://localhost").pathname.endsWith("/git-upload-pack")?o.maxRequestBytes:i.maxRequestBytes;m.on("data",v=>{if(!O){if(w+=v.byteLength,m.method!=="GET"&&m.method!=="HEAD"&&j!==void 0&&w>j){O=!0,y.length=0,b.writeHead(413),b.end("Request body too large");try{m.destroy?.()}catch{}return}y.push(new Uint8Array(v))}}),m.on("error",()=>{b.writeHead(500),b.end("Internal Server Error")}),m.on("end",()=>{O||es(x,m,y,b).catch(()=>{try{b.writeHead(500),b.end("Internal Server Error")}catch{}})})},createRepo:(m,b)=>t.createRepo(m,b),repo:m=>t.repo(m),async requireRepo(m){let b=await t.repo(m);if(!b)throw new Error(`Repository "${m}" not found`);return b},deleteRepo:m=>t.deleteRepo(m),async forkRepo(m,b,y){if(!P())throw new Error("Server is shutting down");try{return await t.forkRepo(m,b,y)}finally{A()}},async gc(m,b){if(!P())throw new Error("Server is shutting down");try{let y=await x.requireRepo(m),w;if(e.listForks&&e.getForkParent&&!await e.getForkParent(m)){let E=await e.listForks(m);if(E.length>0){w=[];for(let S of E){let j=await t.repo(S);if(!j)continue;let v=await j.refStore.listRefs();for(let L of v)w.push(L.hash)}}}return _r(y,e,m,b,w)}finally{A()}},get closed(){return h},asNetwork(m="http://git",b){return{allowed:[m.endsWith("/")?m:`${m}/`],fetch:(w,O)=>{let E=new Request(w,O);return b!==void 0&&Nr.set(E,b),x.fetch(E)}}},async close(m){if(h)return R??Promise.resolve();if(h=!0,d?.clear(),p!==0){if(R=new Promise(b=>{g=b}),m?.signal){if(m.signal.aborted){g();return}let b=()=>g?.();m.signal.addEventListener("abort",b,{once:!0}),R.then(()=>m.signal.removeEventListener("abort",b))}return R}}};return x}function ie(r){return new Response(r.message??"Forbidden",{status:403})}function Fr(r){let e=r.headers.get("git-protocol");return e!==null&&e.includes("version=2")}function At(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Mr(r,e){let t=r.headers.get("content-length");if(t){let a=Number(t);if(Number.isFinite(a)&&e.maxRequestBytes!==void 0&&a>e.maxRequestBytes)throw new D("Request body too large")}let n=await Wr(r.body,e.maxRequestBytes,"Request body too large"),s=r.headers.get("content-encoding");if(s==="gzip"||s==="x-gzip"){let a=new DecompressionStream("gzip"),i=a.writable.getWriter(),o=new Uint8Array(n.byteLength);return o.set(n),await i.write(o),await i.close(),Wr(a.readable,e.maxInflatedBytes,"Decompressed body too large")}return n}async function Wr(r,e,t){if(!r)return new Uint8Array(0);let n=r.getReader(),s=[],a=0;try{for(;;){let{value:f,done:c}=await n.read();if(c)break;if(f){if(a+=f.byteLength,e!==void 0&&a>e)throw new D(t);s.push(f)}}}finally{n.releaseLock()}if(s.length===0)return new Uint8Array(0);let i=new Uint8Array(a),o=0;for(let f of s)i.set(f,o),o+=f.byteLength;return i}async function es(r,e,t,n){let s=typeof e.headers.host=="string"?e.headers.host:"localhost",a=new URL(e.url??"/",`http://${s}`),i=new Headers;for(let[h,p]of Object.entries(e.headers))if(p!==void 0)if(Array.isArray(p))for(let g of p)i.append(h,g);else i.set(h,p);let o=e.method??"GET",f;if(o!=="GET"&&o!=="HEAD"){let h=0;for(let R of t)h+=R.byteLength;let p=new Uint8Array(h),g=0;for(let R of t)p.set(R,g),g+=R.byteLength;f=p}let c=new Request(a.href,{method:o,headers:i,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 ts(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:n=!1,immutableTags:s=!1}=r,a=new Set(e.map(o=>o.startsWith("refs/")?o:`refs/heads/${o}`)),i={};return a.size>0&&(i.preReceive=async o=>{for(let f of o.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)&&(i.update=async o=>{if(n&&o.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(s&&o.update.ref.startsWith("refs/tags/")){if(o.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!o.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!o.update.isCreate&&!o.update.isDelete&&!o.update.isFF)return{reject:!0,message:"non-fast-forward"}}),i}function rs(r,e){let t=r?ts(r):void 0;return t&&e?Gr(t,e):t??e}function Gr(...r){let e=r.filter(o=>o!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},n=e.filter(o=>o.preReceive).map(o=>o.preReceive);n.length>0&&(t.preReceive=async o=>{for(let f of n){let c=await f(o);if(U(c))return c}});let s=e.filter(o=>o.update).map(o=>o.update);s.length>0&&(t.update=async o=>{for(let f of s){let c=await f(o);if(U(c))return c}});let a=e.filter(o=>o.postReceive).map(o=>o.postReceive);a.length>0&&(t.postReceive=async o=>{for(let f of a)try{await f(o)}catch{}});let i=e.filter(o=>o.advertiseRefs).map(o=>o.advertiseRefs);return i.length>0&&(t.advertiseRefs=async o=>{let f=o.refs;for(let c of i){let l=await c({...o,refs:f});if(U(l))return l;l&&(f=l)}return f}),t}var ns=`
66
+ `)),128;let R=await l.ssh(y??{});return await Br(m,b,{resolveRepo:f,hooks:c,packCache:d,packOptions:r.packOptions,receiveLimits:i,fetchLimits:o,auth:R,onError:u?P=>u(P,R):void 0})}finally{k()}},async updateRefs(m,b){if(!O())throw new Error("Server is shutting down");try{let y=await x.requireRepo(m),R=await Ke(y,b);return Xe(y,R)}finally{k()}},async commit(m,b){if(!O())throw new Error("Server is shutting down");try{let y=await x.requireRepo(m),R=await ur(y,b),P=`refs/heads/${b.branch}`,A=await Ke(y,[{ref:P,newHash:R.hash,oldHash:R.parentHash}]),v=(await Xe(y,A)).refResults[0];if(!v?.ok)throw new Error(v?.error??"ref update failed");return R}finally{k()}},nodeHandler(m,b){let y=[],R=0,P=!1,v=new URL(m.url??"/","http://localhost").pathname.endsWith("/git-upload-pack")?o.maxRequestBytes:i.maxRequestBytes;m.on("data",j=>{if(!P){if(R+=j.byteLength,m.method!=="GET"&&m.method!=="HEAD"&&v!==void 0&&R>v){P=!0,y.length=0,b.writeHead(413),b.end("Request body too large");try{m.destroy?.()}catch{}return}y.push(new Uint8Array(j))}}),m.on("error",()=>{b.writeHead(500),b.end("Internal Server Error")}),m.on("end",()=>{P||ss(x,m,y,b).catch(()=>{try{b.writeHead(500),b.end("Internal Server Error")}catch{}})})},createRepo:(m,b)=>t.createRepo(m,b),repo:m=>t.repo(m),async requireRepo(m){let b=await t.repo(m);if(!b)throw new Error(`Repository "${m}" not found`);return b},deleteRepo:m=>t.deleteRepo(m),async forkRepo(m,b,y){if(!O())throw new Error("Server is shutting down");try{return await t.forkRepo(m,b,y)}finally{k()}},async gc(m,b){if(!O())throw new Error("Server is shutting down");try{let y=await x.requireRepo(m),R;if(e.listForks&&e.getForkParent&&!await e.getForkParent(m)){let A=await e.listForks(m);if(A.length>0){R=[];for(let S of A){let v=await t.repo(S);if(!v)continue;let j=await v.refStore.listRefs();for(let C of j)R.push(C.hash)}}}return Wr(y,e,m,b,R)}finally{k()}},get closed(){return h},asNetwork(m="http://git",b){return{allowed:[m.endsWith("/")?m:`${m}/`],fetch:(R,P)=>{let A=new Request(R,P);return b!==void 0&&$r.set(A,b),x.fetch(A)}}},async close(m){if(h)return w??Promise.resolve();if(h=!0,d?.clear(),p!==0){if(w=new Promise(b=>{g=b}),m?.signal){if(m.signal.aborted){g();return}let b=()=>g?.();m.signal.addEventListener("abort",b,{once:!0}),w.then(()=>m.signal.removeEventListener("abort",b))}return w}}};return x}function oe(r){return new Response(r.message??"Forbidden",{status:403})}function qr(r){let e=r.headers.get("git-protocol");return e!==null&&e.includes("version=2")}function Ot(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Vr(r,e){let t=r.headers.get("content-length");if(t){let a=Number(t);if(Number.isFinite(a)&&e.maxRequestBytes!==void 0&&a>e.maxRequestBytes)throw new _("Request body too large")}let n=await zr(r.body,e.maxRequestBytes,"Request body too large"),s=r.headers.get("content-encoding");if(s==="gzip"||s==="x-gzip"){let a=new DecompressionStream("gzip"),i=a.writable.getWriter(),o=new Uint8Array(n.byteLength);return o.set(n),await i.write(o),await i.close(),zr(a.readable,e.maxInflatedBytes,"Decompressed body too large")}return n}async function zr(r,e,t){if(!r)return new Uint8Array(0);let n=r.getReader(),s=[],a=0;try{for(;;){let{value:f,done:c}=await n.read();if(c)break;if(f){if(a+=f.byteLength,e!==void 0&&a>e)throw new _(t);s.push(f)}}}finally{n.releaseLock()}if(s.length===0)return new Uint8Array(0);let i=new Uint8Array(a),o=0;for(let f of s)i.set(f,o),o+=f.byteLength;return i}async function ss(r,e,t,n){let s=typeof e.headers.host=="string"?e.headers.host:"localhost",a=new URL(e.url??"/",`http://${s}`),i=new Headers;for(let[h,p]of Object.entries(e.headers))if(p!==void 0)if(Array.isArray(p))for(let g of p)i.append(h,g);else i.set(h,p);let o=e.method??"GET",f;if(o!=="GET"&&o!=="HEAD"){let h=0;for(let w of t)h+=w.byteLength;let p=new Uint8Array(h),g=0;for(let w of t)p.set(w,g),g+=w.byteLength;f=p}let c=new Request(a.href,{method:o,headers:i,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 as(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:n=!1,immutableTags:s=!1}=r,a=new Set(e.map(o=>o.startsWith("refs/")?o:`refs/heads/${o}`)),i={};return a.size>0&&(i.preReceive=async o=>{for(let f of o.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)&&(i.update=async o=>{if(n&&o.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(s&&o.update.ref.startsWith("refs/tags/")){if(o.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!o.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!o.update.isCreate&&!o.update.isDelete&&!o.update.isFF)return{reject:!0,message:"non-fast-forward"}}),i}function is(r,e){let t=r?as(r):void 0;return t&&e?Xr(t,e):t??e}function Xr(...r){let e=r.filter(o=>o!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},n=e.filter(o=>o.preReceive).map(o=>o.preReceive);n.length>0&&(t.preReceive=async o=>{for(let f of n){let c=await f(o);if(U(c))return c}});let s=e.filter(o=>o.update).map(o=>o.update);s.length>0&&(t.update=async o=>{for(let f of s){let c=await f(o);if(U(c))return c}});let a=e.filter(o=>o.postReceive).map(o=>o.postReceive);a.length>0&&(t.postReceive=async o=>{for(let f of a)try{await f(o)}catch{}});let i=e.filter(o=>o.advertiseRefs).map(o=>o.advertiseRefs);return i.length>0&&(t.advertiseRefs=async o=>{let f=o.refs;for(let c of i){let l=await c({...o,refs:f});if(U(l))return l;l&&(f=l)}return f}),t}var os=`
67
67
  CREATE TABLE IF NOT EXISTS git_repos (
68
68
  id TEXT PRIMARY KEY
69
69
  );
@@ -89,7 +89,7 @@ CREATE TABLE IF NOT EXISTS git_forks (
89
89
  repo_id TEXT PRIMARY KEY,
90
90
  parent_id TEXT NOT NULL
91
91
  );
92
- `;function ss(r){return{repoInsert:r.prepare("INSERT INTO git_repos (id) VALUES (?)"),repoExists:r.prepare("SELECT 1 FROM git_repos WHERE id = ? LIMIT 1"),repoDelete:r.prepare("DELETE FROM git_repos WHERE id = ?"),objInsert:r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)"),objRead:r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?"),objExists:r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1"),objPrefix:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?"),objDeleteAll:r.prepare("DELETE FROM git_objects WHERE repo_id = ?"),objListHashes:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ?"),objDelete:r.prepare("DELETE FROM git_objects WHERE repo_id = ? AND hash = ?"),refRead:r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?"),refWrite:r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)"),refDelete:r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?"),refList:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?"),refListAll:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?"),refDeleteAll:r.prepare("DELETE FROM git_refs WHERE repo_id = ?"),forkInsert:r.prepare("INSERT INTO git_forks (repo_id, parent_id) VALUES (?, ?)"),forkGetParent:r.prepare("SELECT parent_id FROM git_forks WHERE repo_id = ?"),forkListChildren:r.prepare("SELECT repo_id FROM git_forks WHERE parent_id = ?"),forkDelete:r.prepare("DELETE FROM git_forks WHERE repo_id = ?")}}var Pt=class{constructor(e){this.db=e;e.run(ns),this.stmts=ss(e),this.batchInsertTx=e.transaction(t=>{for(let n of t)this.stmts.objInsert.run(n.repoId,n.hash,n.type,n.content)}),this.batchDeleteTx=e.transaction((t,n,s)=>{let a=0;for(let i of n)this.stmts.objDelete.run(t,i),a++;s(a)})}stmts;batchInsertTx;batchDeleteTx;hasRepo(e){return this.stmts.repoExists.get(e)!==null}insertRepo(e){this.stmts.repoInsert.run(e)}deleteRepo(e){this.stmts.repoDelete.run(e),this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e),this.stmts.forkDelete.run(e)}getObject(e,t){let n=this.stmts.objRead.get(e,t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.stmts.objInsert.run(e,t,n,s)}putObjects(e,t){this.batchInsertTx(t.map(n=>({repoId:e,...n})))}hasObject(e,t){return this.stmts.objExists.get(e,t)!==null}findObjectsByPrefix(e,t){return this.stmts.objPrefix.all(e,`${t}*`).map(s=>s.hash)}listObjectHashes(e){return this.stmts.objListHashes.all(e).map(n=>n.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.batchDeleteTx(e,t,s=>{n+=s}),n}getRef(e,t){let n=this.stmts.refRead.get(e,t);return Et(n)}putRef(e,t,n){n.type==="symbolic"?this.stmts.refWrite.run(e,t,"symbolic",null,n.target):this.stmts.refWrite.run(e,t,"direct",n.hash,null)}removeRef(e,t){this.stmts.refDelete.run(e,t)}listRefs(e,t){return(t?this.stmts.refList.all(e,`${t}*`):this.stmts.refListAll.all(e)).flatMap(s=>{let a=Et(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){let n=this.stmts;return this.db.transaction(()=>t({getRef:a=>Et(n.refRead.get(e,a)),putRef:(a,i)=>{i.type==="symbolic"?n.refWrite.run(e,a,"symbolic",null,i.target):n.refWrite.run(e,a,"direct",i.hash,null)},removeRef:a=>{n.refDelete.run(e,a)}}))()}forkRepo(e,t){this.stmts.forkInsert.run(t,e)}getForkParent(e){return this.stmts.forkGetParent.get(e)?.parent_id??null}listForks(e){return this.stmts.forkListChildren.all(e).map(n=>n.repo_id)}};function Et(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var as=`
92
+ `;function cs(r){return{repoInsert:r.prepare("INSERT INTO git_repos (id) VALUES (?)"),repoExists:r.prepare("SELECT 1 FROM git_repos WHERE id = ? LIMIT 1"),repoDelete:r.prepare("DELETE FROM git_repos WHERE id = ?"),objInsert:r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)"),objRead:r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?"),objExists:r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1"),objPrefix:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?"),objDeleteAll:r.prepare("DELETE FROM git_objects WHERE repo_id = ?"),objListHashes:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ?"),objDelete:r.prepare("DELETE FROM git_objects WHERE repo_id = ? AND hash = ?"),refRead:r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?"),refWrite:r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)"),refDelete:r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?"),refList:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?"),refListAll:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?"),refDeleteAll:r.prepare("DELETE FROM git_refs WHERE repo_id = ?"),forkInsert:r.prepare("INSERT INTO git_forks (repo_id, parent_id) VALUES (?, ?)"),forkGetParent:r.prepare("SELECT parent_id FROM git_forks WHERE repo_id = ?"),forkListChildren:r.prepare("SELECT repo_id FROM git_forks WHERE parent_id = ?"),forkDelete:r.prepare("DELETE FROM git_forks WHERE repo_id = ?")}}var St=class{constructor(e){this.db=e;e.run(os),this.stmts=cs(e),this.batchInsertTx=e.transaction(t=>{for(let n of t)this.stmts.objInsert.run(n.repoId,n.hash,n.type,n.content)}),this.batchDeleteTx=e.transaction((t,n,s)=>{let a=0;for(let i of n)this.stmts.objDelete.run(t,i),a++;s(a)})}stmts;batchInsertTx;batchDeleteTx;hasRepo(e){return this.stmts.repoExists.get(e)!==null}insertRepo(e){this.stmts.repoInsert.run(e)}deleteRepo(e){this.stmts.repoDelete.run(e),this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e),this.stmts.forkDelete.run(e)}getObject(e,t){let n=this.stmts.objRead.get(e,t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.stmts.objInsert.run(e,t,n,s)}putObjects(e,t){this.batchInsertTx(t.map(n=>({repoId:e,...n})))}hasObject(e,t){return this.stmts.objExists.get(e,t)!==null}findObjectsByPrefix(e,t){return this.stmts.objPrefix.all(e,`${t}*`).map(s=>s.hash)}listObjectHashes(e){return this.stmts.objListHashes.all(e).map(n=>n.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.batchDeleteTx(e,t,s=>{n+=s}),n}getRef(e,t){let n=this.stmts.refRead.get(e,t);return Pt(n)}putRef(e,t,n){n.type==="symbolic"?this.stmts.refWrite.run(e,t,"symbolic",null,n.target):this.stmts.refWrite.run(e,t,"direct",n.hash,null)}removeRef(e,t){this.stmts.refDelete.run(e,t)}listRefs(e,t){return(t?this.stmts.refList.all(e,`${t}*`):this.stmts.refListAll.all(e)).flatMap(s=>{let a=Pt(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){let n=this.stmts;return this.db.transaction(()=>t({getRef:a=>Pt(n.refRead.get(e,a)),putRef:(a,i)=>{i.type==="symbolic"?n.refWrite.run(e,a,"symbolic",null,i.target):n.refWrite.run(e,a,"direct",i.hash,null)},removeRef:a=>{n.refDelete.run(e,a)}}))()}forkRepo(e,t){this.stmts.forkInsert.run(t,e)}getForkParent(e){return this.stmts.forkGetParent.get(e)?.parent_id??null}listForks(e){return this.stmts.forkListChildren.all(e).map(n=>n.repo_id)}};function Pt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var fs=`
93
93
  CREATE TABLE IF NOT EXISTS git_repos (
94
94
  id TEXT PRIMARY KEY
95
95
  );
@@ -115,7 +115,7 @@ CREATE TABLE IF NOT EXISTS git_forks (
115
115
  repo_id TEXT PRIMARY KEY,
116
116
  parent_id TEXT NOT NULL
117
117
  );
118
- `;function C(r){return{run:(...e)=>{r.run(...e)},get:(...e)=>r.get(...e)??null,all:(...e)=>r.all(...e)}}function is(r){return{repoInsert:C(r.prepare("INSERT INTO git_repos (id) VALUES (?)")),repoExists:C(r.prepare("SELECT 1 FROM git_repos WHERE id = ? LIMIT 1")),repoDelete:C(r.prepare("DELETE FROM git_repos WHERE id = ?")),objInsert:C(r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)")),objRead:C(r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?")),objExists:C(r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1")),objPrefix:C(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?")),objDeleteAll:C(r.prepare("DELETE FROM git_objects WHERE repo_id = ?")),objListHashes:C(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ?")),objDelete:C(r.prepare("DELETE FROM git_objects WHERE repo_id = ? AND hash = ?")),refRead:C(r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?")),refWrite:C(r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)")),refDelete:C(r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?")),refList:C(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?")),refListAll:C(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?")),refDeleteAll:C(r.prepare("DELETE FROM git_refs WHERE repo_id = ?")),forkInsert:C(r.prepare("INSERT INTO git_forks (repo_id, parent_id) VALUES (?, ?)")),forkGetParent:C(r.prepare("SELECT parent_id FROM git_forks WHERE repo_id = ?")),forkListChildren:C(r.prepare("SELECT repo_id FROM git_forks WHERE parent_id = ?")),forkDelete:C(r.prepare("DELETE FROM git_forks WHERE repo_id = ?"))}}var St=class{constructor(e){this.db=e;e.exec(as),this.stmts=is(e),this.batchInsertTx=e.transaction(t=>{for(let n of t)this.stmts.objInsert.run(n.repoId,n.hash,n.type,n.content)}),this.batchDeleteTx=e.transaction((t,n,s)=>{let a=0;for(let i of n)this.stmts.objDelete.run(t,i),a++;s(a)})}stmts;batchInsertTx;batchDeleteTx;hasRepo(e){return this.stmts.repoExists.get(e)!==null}insertRepo(e){this.stmts.repoInsert.run(e)}deleteRepo(e){this.stmts.repoDelete.run(e),this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e),this.stmts.forkDelete.run(e)}getObject(e,t){let n=this.stmts.objRead.get(e,t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.stmts.objInsert.run(e,t,n,s)}putObjects(e,t){this.batchInsertTx(t.map(n=>({repoId:e,...n})))}hasObject(e,t){return this.stmts.objExists.get(e,t)!==null}findObjectsByPrefix(e,t){return this.stmts.objPrefix.all(e,`${t}*`).map(s=>s.hash)}listObjectHashes(e){return this.stmts.objListHashes.all(e).map(n=>n.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.batchDeleteTx(e,t,s=>{n+=s}),n}getRef(e,t){let n=this.stmts.refRead.get(e,t);return Ot(n)}putRef(e,t,n){n.type==="symbolic"?this.stmts.refWrite.run(e,t,"symbolic",null,n.target):this.stmts.refWrite.run(e,t,"direct",n.hash,null)}removeRef(e,t){this.stmts.refDelete.run(e,t)}listRefs(e,t){return(t?this.stmts.refList.all(e,`${t}*`):this.stmts.refListAll.all(e)).flatMap(s=>{let a=Ot(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){let n=this.stmts;return this.db.transaction(()=>t({getRef:a=>Ot(n.refRead.get(e,a)),putRef:(a,i)=>{i.type==="symbolic"?n.refWrite.run(e,a,"symbolic",null,i.target):n.refWrite.run(e,a,"direct",i.hash,null)},removeRef:a=>{n.refDelete.run(e,a)}}))()}forkRepo(e,t){this.stmts.forkInsert.run(t,e)}getForkParent(e){return this.stmts.forkGetParent.get(e)?.parent_id??null}listForks(e){return this.stmts.forkListChildren.all(e).map(n=>n.repo_id)}};function Ot(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var os=`
118
+ `;function H(r){return{run:(...e)=>{r.run(...e)},get:(...e)=>r.get(...e)??null,all:(...e)=>r.all(...e)}}function ls(r){return{repoInsert:H(r.prepare("INSERT INTO git_repos (id) VALUES (?)")),repoExists:H(r.prepare("SELECT 1 FROM git_repos WHERE id = ? LIMIT 1")),repoDelete:H(r.prepare("DELETE FROM git_repos WHERE id = ?")),objInsert:H(r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)")),objRead:H(r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?")),objExists:H(r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1")),objPrefix:H(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?")),objDeleteAll:H(r.prepare("DELETE FROM git_objects WHERE repo_id = ?")),objListHashes:H(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ?")),objDelete:H(r.prepare("DELETE FROM git_objects WHERE repo_id = ? AND hash = ?")),refRead:H(r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?")),refWrite:H(r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)")),refDelete:H(r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?")),refList:H(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?")),refListAll:H(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?")),refDeleteAll:H(r.prepare("DELETE FROM git_refs WHERE repo_id = ?")),forkInsert:H(r.prepare("INSERT INTO git_forks (repo_id, parent_id) VALUES (?, ?)")),forkGetParent:H(r.prepare("SELECT parent_id FROM git_forks WHERE repo_id = ?")),forkListChildren:H(r.prepare("SELECT repo_id FROM git_forks WHERE parent_id = ?")),forkDelete:H(r.prepare("DELETE FROM git_forks WHERE repo_id = ?"))}}var vt=class{constructor(e){this.db=e;e.exec(fs),this.stmts=ls(e),this.batchInsertTx=e.transaction(t=>{for(let n of t)this.stmts.objInsert.run(n.repoId,n.hash,n.type,n.content)}),this.batchDeleteTx=e.transaction((t,n,s)=>{let a=0;for(let i of n)this.stmts.objDelete.run(t,i),a++;s(a)})}stmts;batchInsertTx;batchDeleteTx;hasRepo(e){return this.stmts.repoExists.get(e)!==null}insertRepo(e){this.stmts.repoInsert.run(e)}deleteRepo(e){this.stmts.repoDelete.run(e),this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e),this.stmts.forkDelete.run(e)}getObject(e,t){let n=this.stmts.objRead.get(e,t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.stmts.objInsert.run(e,t,n,s)}putObjects(e,t){this.batchInsertTx(t.map(n=>({repoId:e,...n})))}hasObject(e,t){return this.stmts.objExists.get(e,t)!==null}findObjectsByPrefix(e,t){return this.stmts.objPrefix.all(e,`${t}*`).map(s=>s.hash)}listObjectHashes(e){return this.stmts.objListHashes.all(e).map(n=>n.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.batchDeleteTx(e,t,s=>{n+=s}),n}getRef(e,t){let n=this.stmts.refRead.get(e,t);return jt(n)}putRef(e,t,n){n.type==="symbolic"?this.stmts.refWrite.run(e,t,"symbolic",null,n.target):this.stmts.refWrite.run(e,t,"direct",n.hash,null)}removeRef(e,t){this.stmts.refDelete.run(e,t)}listRefs(e,t){return(t?this.stmts.refList.all(e,`${t}*`):this.stmts.refListAll.all(e)).flatMap(s=>{let a=jt(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){let n=this.stmts;return this.db.transaction(()=>t({getRef:a=>jt(n.refRead.get(e,a)),putRef:(a,i)=>{i.type==="symbolic"?n.refWrite.run(e,a,"symbolic",null,i.target):n.refWrite.run(e,a,"direct",i.hash,null)},removeRef:a=>{n.refDelete.run(e,a)}}))()}forkRepo(e,t){this.stmts.forkInsert.run(t,e)}getForkParent(e){return this.stmts.forkGetParent.get(e)?.parent_id??null}listForks(e){return this.stmts.forkListChildren.all(e).map(n=>n.repo_id)}};function jt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var ds=`
119
119
  CREATE TABLE IF NOT EXISTS git_repos (
120
120
  id TEXT PRIMARY KEY
121
121
  );
@@ -142,4 +142,30 @@ CREATE TABLE IF NOT EXISTS git_forks (
142
142
  parent_id TEXT NOT NULL
143
143
  );
144
144
  `,I={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)
145
- ON CONFLICT (repo_id, name) DO UPDATE SET type = EXCLUDED.type, hash = EXCLUDED.hash, target = EXCLUDED.target`,refDelete:"DELETE FROM git_refs WHERE repo_id = $1 AND name = $2",refList:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1 AND name LIKE $2",refListAll:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1",refDeleteAll:"DELETE FROM git_refs WHERE repo_id = $1",forkInsert:"INSERT INTO git_forks (repo_id, parent_id) VALUES ($1, $2)",forkGetParent:"SELECT parent_id FROM git_forks WHERE repo_id = $1",forkListChildren:"SELECT repo_id FROM git_forks WHERE parent_id = $1",forkDelete:"DELETE FROM git_forks WHERE repo_id = $1"},jt=class r{constructor(e){this.pool=e}static async create(e){return await e.query(os),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(I.repoExists,[e]);return t.length>0}async insertRepo(e){await this.pool.query(I.repoInsert,[e])}async deleteRepo(e){await this.pool.query(I.repoDelete,[e]),await this.pool.query(I.objDeleteAll,[e]),await this.pool.query(I.refDeleteAll,[e]),await this.pool.query(I.forkDelete,[e])}async getObject(e,t){let{rows:n}=await this.pool.query(I.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(I.objInsert,[e,t,n,s])}async putObjects(e,t){await this.transaction(async n=>{for(let s of t)await n(I.objInsert,[e,s.hash,s.type,s.content])})}async hasObject(e,t){let{rows:n}=await this.pool.query(I.objExists,[e,t]);return n.length>0}async findObjectsByPrefix(e,t){let{rows:n}=await this.pool.query(I.objPrefix,[e,`${t}%`]);return n.map(s=>s.hash)}async listObjectHashes(e){let{rows:t}=await this.pool.query(I.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(I.refRead,[e,t]);return vt(n[0]??null)}async putRef(e,t,n){n.type==="symbolic"?await this.pool.query(I.refWrite,[e,t,"symbolic",null,n.target]):await this.pool.query(I.refWrite,[e,t,"direct",n.hash,null])}async removeRef(e,t){await this.pool.query(I.refDelete,[e,t])}async listRefs(e,t){let n;return t?{rows:n}=await this.pool.query(I.refList,[e,`${t}%`]):{rows:n}=await this.pool.query(I.refListAll,[e]),n.flatMap(s=>{let a=vt(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(I.refReadForUpdate,[e,s]);return vt(a[0]??null)},putRef:async(s,a)=>{a.type==="symbolic"?await n(I.refWrite,[e,s,"symbolic",null,a.target]):await n(I.refWrite,[e,s,"direct",a.hash,null])},removeRef:async s=>{await n(I.refDelete,[e,s])}}))}async forkRepo(e,t){await this.pool.query(I.forkInsert,[t,e])}async getForkParent(e){let{rows:t}=await this.pool.query(I.forkGetParent,[e]);return t[0]?.parent_id??null}async listForks(e){let{rows:t}=await this.pool.query(I.forkListChildren,[e]);return t.map(n=>n.repo_id)}};function vt(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{St as BetterSqlite3Storage,Pt as BunSqliteStorage,Te as MemoryStorage,jt as PgStorage,W as advertiseRefsWithHooks,Ve as applyCasRefUpdates,Oe as applyReceivePack,wt as buildRefAdvertisementBytes,Rt as buildRefListBytes,Ge as buildRefListPktLines,ut as buildV2CapabilityAdvertisement,Se as buildV2CapabilityAdvertisementBytes,ne as buildV2FetchResponse,ht as buildV2LsRefsResponse,Sr as collectRefs,Gr as composeHooks,Qn as createServer,ve as handleLsRefs,Pe as handleUploadPack,je as handleV2Fetch,xt as ingestReceivePack,kt as ingestReceivePackFromStream,pt as parseV2CommandRequest,yt as parseV2FetchArgs,ze as resolveRefUpdates};
145
+ ON CONFLICT (repo_id, name) DO UPDATE SET type = EXCLUDED.type, hash = EXCLUDED.hash, target = EXCLUDED.target`,refDelete:"DELETE FROM git_refs WHERE repo_id = $1 AND name = $2",refList:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1 AND name LIKE $2",refListAll:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1",refDeleteAll:"DELETE FROM git_refs WHERE repo_id = $1",forkInsert:"INSERT INTO git_forks (repo_id, parent_id) VALUES ($1, $2)",forkGetParent:"SELECT parent_id FROM git_forks WHERE repo_id = $1",forkListChildren:"SELECT repo_id FROM git_forks WHERE parent_id = $1",forkDelete:"DELETE FROM git_forks WHERE repo_id = $1"},It=class r{constructor(e){this.pool=e}static async create(e){return await e.query(ds),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(I.repoExists,[e]);return t.length>0}async insertRepo(e){await this.pool.query(I.repoInsert,[e])}async deleteRepo(e){await this.pool.query(I.repoDelete,[e]),await this.pool.query(I.objDeleteAll,[e]),await this.pool.query(I.refDeleteAll,[e]),await this.pool.query(I.forkDelete,[e])}async getObject(e,t){let{rows:n}=await this.pool.query(I.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(I.objInsert,[e,t,n,s])}async putObjects(e,t){await this.transaction(async n=>{for(let s of t)await n(I.objInsert,[e,s.hash,s.type,s.content])})}async hasObject(e,t){let{rows:n}=await this.pool.query(I.objExists,[e,t]);return n.length>0}async findObjectsByPrefix(e,t){let{rows:n}=await this.pool.query(I.objPrefix,[e,`${t}%`]);return n.map(s=>s.hash)}async listObjectHashes(e){let{rows:t}=await this.pool.query(I.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(I.refRead,[e,t]);return Tt(n[0]??null)}async putRef(e,t,n){n.type==="symbolic"?await this.pool.query(I.refWrite,[e,t,"symbolic",null,n.target]):await this.pool.query(I.refWrite,[e,t,"direct",n.hash,null])}async removeRef(e,t){await this.pool.query(I.refDelete,[e,t])}async listRefs(e,t){let n;return t?{rows:n}=await this.pool.query(I.refList,[e,`${t}%`]):{rows:n}=await this.pool.query(I.refListAll,[e]),n.flatMap(s=>{let a=Tt(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(I.refReadForUpdate,[e,s]);return Tt(a[0]??null)},putRef:async(s,a)=>{a.type==="symbolic"?await n(I.refWrite,[e,s,"symbolic",null,a.target]):await n(I.refWrite,[e,s,"direct",a.hash,null])},removeRef:async s=>{await n(I.refDelete,[e,s])}}))}async forkRepo(e,t){await this.pool.query(I.forkInsert,[t,e])}async getForkParent(e){let{rows:t}=await this.pool.query(I.forkGetParent,[e]);return t[0]?.parent_id??null}async listForks(e){let{rows:t}=await this.pool.query(I.forkListChildren,[e]);return t.map(n=>n.repo_id)}};function Tt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}var us=`
146
+ CREATE TABLE IF NOT EXISTS git_repos (
147
+ id TEXT PRIMARY KEY
148
+ );
149
+
150
+ CREATE TABLE IF NOT EXISTS git_objects (
151
+ repo_id TEXT NOT NULL,
152
+ hash TEXT NOT NULL,
153
+ type TEXT NOT NULL,
154
+ content BLOB NOT NULL,
155
+ PRIMARY KEY (repo_id, hash)
156
+ ) WITHOUT ROWID;
157
+
158
+ CREATE TABLE IF NOT EXISTS git_refs (
159
+ repo_id TEXT NOT NULL,
160
+ name TEXT NOT NULL,
161
+ type TEXT NOT NULL CHECK(type IN ('direct', 'symbolic')),
162
+ hash TEXT,
163
+ target TEXT,
164
+ PRIMARY KEY (repo_id, name)
165
+ ) WITHOUT ROWID;
166
+
167
+ CREATE TABLE IF NOT EXISTS git_forks (
168
+ repo_id TEXT PRIMARY KEY,
169
+ parent_id TEXT NOT NULL
170
+ );
171
+ `,T={repoInsert:"INSERT INTO git_repos (id) VALUES (?)",repoExists:"SELECT 1 FROM git_repos WHERE id = ? LIMIT 1",repoDelete:"DELETE FROM git_repos WHERE id = ?",objInsert:"INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)",objRead:"SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?",objExists:"SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1",objPrefix:"SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?",objDeleteAll:"DELETE FROM git_objects WHERE repo_id = ?",objListHashes:"SELECT hash FROM git_objects WHERE repo_id = ?",objDelete:"DELETE FROM git_objects WHERE repo_id = ? AND hash = ?",refRead:"SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?",refWrite:"INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)",refDelete:"DELETE FROM git_refs WHERE repo_id = ? AND name = ?",refList:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?",refListAll:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?",refDeleteAll:"DELETE FROM git_refs WHERE repo_id = ?",forkInsert:"INSERT INTO git_forks (repo_id, parent_id) VALUES (?, ?)",forkGetParent:"SELECT parent_id FROM git_forks WHERE repo_id = ?",forkListChildren:"SELECT repo_id FROM git_forks WHERE parent_id = ?",forkDelete:"DELETE FROM git_forks WHERE repo_id = ?"};function ce(r){let e=r.next();return e.done?null:e.value}var Ut=class{constructor(e){this.storage=e;this.sql=e.sql,this.sql.exec(us)}sql;hasRepo(e){return ce(this.sql.exec(T.repoExists,e))!==null}insertRepo(e){this.sql.exec(T.repoInsert,e)}deleteRepo(e){this.sql.exec(T.repoDelete,e),this.sql.exec(T.objDeleteAll,e),this.sql.exec(T.refDeleteAll,e),this.sql.exec(T.forkDelete,e)}getObject(e,t){let n=ce(this.sql.exec(T.objRead,e,t));return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){this.sql.exec(T.objInsert,e,t,n,s)}putObjects(e,t){this.storage.transactionSync(()=>{for(let n of t)this.sql.exec(T.objInsert,e,n.hash,n.type,n.content)})}hasObject(e,t){return ce(this.sql.exec(T.objExists,e,t))!==null}findObjectsByPrefix(e,t){return this.sql.exec(T.objPrefix,e,`${t}*`).toArray().map(n=>n.hash)}listObjectHashes(e){return this.sql.exec(T.objListHashes,e).toArray().map(t=>t.hash)}deleteObjects(e,t){if(t.length===0)return 0;let n=0;return this.storage.transactionSync(()=>{for(let s of t)this.sql.exec(T.objDelete,e,s),n++}),n}getRef(e,t){return Lt(ce(this.sql.exec(T.refRead,e,t)))}putRef(e,t,n){n.type==="symbolic"?this.sql.exec(T.refWrite,e,t,"symbolic",null,n.target):this.sql.exec(T.refWrite,e,t,"direct",n.hash,null)}removeRef(e,t){this.sql.exec(T.refDelete,e,t)}listRefs(e,t){return(t?this.sql.exec(T.refList,e,`${t}*`).toArray():this.sql.exec(T.refListAll,e).toArray()).flatMap(s=>{let a=Lt(s);return a?[{name:s.name,ref:a}]:[]})}atomicRefUpdate(e,t){return this.storage.transactionSync(()=>t({getRef:n=>Lt(ce(this.sql.exec(T.refRead,e,n))),putRef:(n,s)=>{s.type==="symbolic"?this.sql.exec(T.refWrite,e,n,"symbolic",null,s.target):this.sql.exec(T.refWrite,e,n,"direct",s.hash,null)},removeRef:n=>{this.sql.exec(T.refDelete,e,n)}}))}forkRepo(e,t){this.sql.exec(T.forkInsert,t,e)}getForkParent(e){return ce(this.sql.exec(T.forkGetParent,e))?.parent_id??null}listForks(e){return this.sql.exec(T.forkListChildren,e).toArray().map(t=>t.repo_id)}};function Lt(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{vt as BetterSqlite3Storage,St as BunSqliteStorage,Ut as DurableObjectSqliteStorage,Ue as MemoryStorage,It as PgStorage,G as advertiseRefsWithHooks,Xe as applyCasRefUpdates,je as applyReceivePack,xt as buildRefAdvertisementBytes,Et as buildRefListBytes,Ve as buildRefListPktLines,ht as buildV2CapabilityAdvertisement,ve as buildV2CapabilityAdvertisementBytes,se as buildV2FetchResponse,mt as buildV2LsRefsResponse,Ir as collectRefs,Xr as composeHooks,ns as createServer,Te as handleLsRefs,Se as handleUploadPack,Ie as handleV2Fetch,kt as ingestReceivePack,At as ingestReceivePackFromStream,yt as parseV2CommandRequest,bt as parseV2FetchArgs,Ke as resolveRefUpdates};
@@ -201,4 +201,4 @@ interface TreeUpdate {
201
201
  */
202
202
  declare function updateTree(repo: GitRepo, treeHash: string, updates: TreeUpdate[]): Promise<string>;
203
203
 
204
- export { type BuildCommitOptions as B, type CommitIdentity as C, type TreeEntryInput as T, type CommitAuthor as a, type CommitOptions as b, type CommitResult as c, type CreateAnnotatedTagOptions as d, type CreateCommitOptions as e, type TreeUpdate as f, buildCommit as g, commit as h, createAnnotatedTag as i, createCommit as j, writeTree as k, updateTree as u, writeBlob as w };
204
+ export { type BuildCommitOptions as B, type CommitOptions as C, type TreeEntryInput as T, type CommitResult as a, type CommitIdentity as b, type CommitAuthor as c, type CreateAnnotatedTagOptions as d, type CreateCommitOptions as e, type TreeUpdate as f, buildCommit as g, commit as h, createAnnotatedTag as i, createCommit as j, writeTree as k, updateTree as u, writeBlob as w };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "just-git",
3
- "version": "1.5.12",
3
+ "version": "1.5.13",
4
4
  "description": "Pure TypeScript git implementation: virtual filesystem client and embeddable server.",
5
5
  "keywords": [
6
6
  "agent",