just-git 1.2.0 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { a as GitRepo, Z as Rejection } from '../hooks-Boa35Qx_.js';
1
+ import { f as GitRepo, X as Rejection } from '../hooks-4DvkF2xT.js';
2
2
 
3
3
  interface GitServerConfig {
4
4
  /**
@@ -37,6 +37,14 @@ interface GitServerConfig {
37
37
  /** Delta window size (default 10). Smaller = faster, worse compression ratio. */
38
38
  deltaWindow?: number;
39
39
  };
40
+ /**
41
+ * Called when the server catches an unhandled error.
42
+ *
43
+ * Defaults to logging `err.message` (no stack trace) to `console.error`.
44
+ * Override to integrate with your own logging, or set to `false` to
45
+ * suppress all error output.
46
+ */
47
+ onError?: false | ((err: unknown, request: Request) => void);
40
48
  }
41
49
  interface GitServer {
42
50
  /** Standard fetch-API handler: (Request) => Response */
@@ -67,32 +75,43 @@ interface ServerHooks {
67
75
  */
68
76
  advertiseRefs?: (event: AdvertiseRefsEvent) => RefAdvertisement[] | void | Promise<RefAdvertisement[] | void>;
69
77
  }
78
+ /** A single ref update within a push. */
70
79
  interface RefUpdate {
80
+ /** Full ref name, e.g. "refs/heads/main". */
71
81
  ref: string;
82
+ /** Previous hash, or null if creating a new ref. */
72
83
  oldHash: string | null;
84
+ /** New hash being pushed. */
73
85
  newHash: string;
86
+ /** Whether the update is a fast-forward. */
74
87
  isFF: boolean;
88
+ /** Whether this creates a new ref. */
75
89
  isCreate: boolean;
90
+ /** Whether this deletes an existing ref. */
76
91
  isDelete: boolean;
77
92
  }
93
+ /** Fired after objects are unpacked but before refs are updated. */
78
94
  interface PreReceiveEvent {
79
95
  repo: GitRepo;
80
96
  repoPath: string;
81
97
  updates: readonly RefUpdate[];
82
98
  request: Request;
83
99
  }
100
+ /** Fired per-ref after preReceive passes. */
84
101
  interface UpdateEvent {
85
102
  repo: GitRepo;
86
103
  repoPath: string;
87
104
  update: RefUpdate;
88
105
  request: Request;
89
106
  }
107
+ /** Fired after all ref updates succeed. */
90
108
  interface PostReceiveEvent {
91
109
  repo: GitRepo;
92
110
  repoPath: string;
93
111
  updates: readonly RefUpdate[];
94
112
  request: Request;
95
113
  }
114
+ /** Fired during ref advertisement (info/refs). */
96
115
  interface AdvertiseRefsEvent {
97
116
  repo: GitRepo;
98
117
  repoPath: string;
@@ -100,6 +119,7 @@ interface AdvertiseRefsEvent {
100
119
  service: "git-upload-pack" | "git-receive-pack";
101
120
  request: Request;
102
121
  }
122
+ /** A ref name and hash advertised to clients during fetch/push discovery. */
103
123
  interface RefAdvertisement {
104
124
  name: string;
105
125
  hash: string;
@@ -160,91 +180,6 @@ declare function toNodeHandler(server: GitServer): (req: NodeHttpRequest, res: N
160
180
  */
161
181
  declare function composeHooks(...hookSets: (ServerHooks | undefined)[]): ServerHooks;
162
182
 
163
- /**
164
- * High-level server operations for Git Smart HTTP.
165
- *
166
- * Each operation accepts a `GitRepo` (ObjectStore + RefStore)
167
- * and returns protocol-level results. The handler layer is
168
- * responsible for hook invocation and ref application.
169
- */
170
-
171
- interface PackCacheEntry {
172
- packData: Uint8Array;
173
- objectCount: number;
174
- deltaCount: number;
175
- }
176
- /**
177
- * Bounded LRU-ish cache for generated packfiles.
178
- *
179
- * Keyed on `(repoPath, sorted wants)` — only caches full clones
180
- * (requests with no `have` lines). Incremental fetches always
181
- * compute fresh packs.
182
- *
183
- * Entries are automatically invalidated when refs change: since the
184
- * cache key includes the exact want hashes, a ref update changes
185
- * the want set on the next client request, producing a cache miss.
186
- */
187
- declare class PackCache {
188
- private entries;
189
- private currentBytes;
190
- private maxBytes;
191
- private hits;
192
- private misses;
193
- constructor(maxBytes?: number);
194
- /** Build a cache key. Returns null for requests with haves (not cacheable). */
195
- static key(repoPath: string, wants: string[], haves: string[]): string | null;
196
- get(key: string): PackCacheEntry | undefined;
197
- set(key: string, entry: PackCacheEntry): void;
198
- get stats(): {
199
- entries: number;
200
- bytes: number;
201
- hits: number;
202
- misses: number;
203
- };
204
- }
205
- interface RefsData {
206
- refs: RefAdvertisement[];
207
- headTarget?: string;
208
- }
209
- /**
210
- * Collect the structured ref list from a repo (no wire encoding).
211
- * The handler can pass this through an advertiseRefs hook to filter,
212
- * then call `buildRefAdvertisementBytes` to produce the wire format.
213
- */
214
- declare function collectRefs(repo: GitRepo): Promise<RefsData>;
215
- /**
216
- * Build the wire-format ref advertisement from a (possibly filtered) ref list.
217
- */
218
- declare function buildRefAdvertisementBytes(refs: RefAdvertisement[], service: "git-upload-pack" | "git-receive-pack", headTarget?: string): Uint8Array;
219
- interface UploadPackOptions {
220
- /** Pack cache instance. When provided, full clones (no haves) are cached. */
221
- cache?: PackCache;
222
- /** Repo path used as part of the cache key. Required when cache is set. */
223
- cacheKey?: string;
224
- /** Skip delta compression — faster pack generation, larger output. */
225
- noDelta?: boolean;
226
- /** Delta window size (default 10). Ignored when noDelta is true. */
227
- deltaWindow?: number;
228
- }
229
- /**
230
- * Handle a `POST /git-upload-pack` request.
231
- *
232
- * Returns `Uint8Array` for buffered responses (cache hits, deltified packs)
233
- * or `ReadableStream<Uint8Array>` for streaming no-delta responses.
234
- */
235
- declare function handleUploadPack(repo: GitRepo, requestBody: Uint8Array, options?: UploadPackOptions): Promise<Uint8Array | ReadableStream<Uint8Array>>;
236
- interface ReceivePackResult {
237
- updates: RefUpdate[];
238
- unpackOk: boolean;
239
- capabilities: string[];
240
- }
241
- /**
242
- * Ingest a receive-pack request: parse commands, ingest the packfile,
243
- * and compute enriched RefUpdate objects. Does NOT apply ref updates —
244
- * the handler runs hooks first, then applies surviving updates.
245
- */
246
- declare function ingestReceivePack(repo: GitRepo, requestBody: Uint8Array): Promise<ReceivePackResult>;
247
-
248
183
  /**
249
184
  * Opinionated hook presets built on top of the minimal ServerHooks interface.
250
185
  */
@@ -299,7 +234,7 @@ declare function createStandardHooks(config: StandardHooksConfig): ServerHooks;
299
234
  /**
300
235
  * Abstract storage backend for multi-repo git object and ref storage.
301
236
  *
302
- * Implemented by `SqliteStorage` and `PgStorage`.
237
+ * Implemented by `BunSqliteStorage`, `BetterSqlite3Storage`, and `PgStorage`.
303
238
  */
304
239
  interface Storage {
305
240
  /** Get a `GitRepo` scoped to a specific repo. */
@@ -330,76 +265,79 @@ declare class MemoryStorage implements Storage {
330
265
  private getRefs;
331
266
  }
332
267
 
333
- interface SqliteStatement {
268
+ /** Minimal prepared statement interface matching `bun:sqlite`. */
269
+ interface BunSqliteStatement {
334
270
  run(...params: any[]): void;
335
271
  get(...params: any[]): any;
336
272
  all(...params: any[]): any[];
337
273
  }
338
- interface SqliteDatabase {
274
+ /** Minimal database interface matching `bun:sqlite`'s `Database` class. */
275
+ interface BunSqliteDatabase {
339
276
  run(sql: string): void;
340
- prepare(sql: string): SqliteStatement;
277
+ prepare(sql: string): BunSqliteStatement;
341
278
  transaction<F extends (...args: any[]) => any>(fn: F): (...args: Parameters<F>) => ReturnType<F>;
342
279
  }
280
+ /**
281
+ * SQLite-backed git storage using `bun:sqlite`.
282
+ *
283
+ * ```ts
284
+ * import { Database } from "bun:sqlite";
285
+ * const storage = new BunSqliteStorage(new Database("repos.db"));
286
+ * ```
287
+ */
288
+ declare class BunSqliteStorage implements Storage {
289
+ private db;
290
+ private stmts;
291
+ private ingestTx;
292
+ constructor(db: BunSqliteDatabase);
293
+ repo(repoId: string): GitRepo;
294
+ deleteRepo(repoId: string): Promise<void>;
295
+ }
296
+
297
+ /** Minimal prepared statement interface matching `better-sqlite3`. */
343
298
  interface BetterSqlite3Statement {
344
299
  run(...params: any[]): any;
345
300
  get(...params: any[]): any;
346
301
  all(...params: any[]): any[];
347
302
  }
303
+ /** Minimal database interface matching the `better-sqlite3` `Database` class. */
348
304
  interface BetterSqlite3Database {
349
305
  exec(sql: string): any;
350
306
  prepare(sql: string): BetterSqlite3Statement;
351
307
  transaction<F extends (...args: any[]) => any>(fn: F): (...args: Parameters<F>) => ReturnType<F>;
352
308
  }
353
309
  /**
354
- * Wrap a `better-sqlite3` database into a `SqliteDatabase`.
355
- *
356
- * Adapts `exec` → `run` and coerces `get` results from `undefined`
357
- * to `null` to match the `bun:sqlite` convention.
310
+ * SQLite-backed git storage using `better-sqlite3`.
358
311
  *
359
312
  * ```ts
360
313
  * import Database from "better-sqlite3";
361
- * const db = wrapBetterSqlite3(new Database("repos.sqlite"));
362
- * const storage = new SqliteStorage(db);
314
+ * const storage = new BetterSqlite3Storage(new Database("repos.db"));
363
315
  * ```
364
316
  */
365
- declare function wrapBetterSqlite3(raw: BetterSqlite3Database): SqliteDatabase;
366
- /**
367
- * SQLite-backed git storage with multi-repo support.
368
- *
369
- * Creates and manages `git_objects` and `git_refs` tables in the
370
- * provided database. Multiple repos are partitioned by `repo_id`.
371
- *
372
- * ```ts
373
- * const db = new Database("repos.sqlite");
374
- * const storage = new SqliteStorage(db);
375
- * const server = createGitServer({
376
- * resolve: async (repoPath) => storage.repo(repoPath),
377
- * });
378
- * ```
379
- */
380
- declare class SqliteStorage implements Storage {
317
+ declare class BetterSqlite3Storage implements Storage {
381
318
  private db;
382
319
  private stmts;
383
320
  private ingestTx;
384
- constructor(db: SqliteDatabase);
385
- /** Get a `GitRepo` scoped to a specific repo. */
321
+ constructor(db: BetterSqlite3Database);
386
322
  repo(repoId: string): GitRepo;
387
- /** Delete all objects and refs for a repo. */
388
323
  deleteRepo(repoId: string): Promise<void>;
389
324
  }
390
325
 
326
+ /** Minimal database interface for PostgreSQL. Use {@link wrapPgPool} to adapt a `pg` Pool. */
391
327
  interface PgDatabase {
392
328
  query<T = any>(text: string, values?: any[]): Promise<{
393
329
  rows: T[];
394
330
  }>;
395
331
  transaction<R>(fn: (tx: PgDatabase) => Promise<R>): Promise<R>;
396
332
  }
333
+ /** Minimal pool interface matching the `pg` package's `Pool` class. */
397
334
  interface PgPool {
398
335
  query(text: string, values?: any[]): Promise<{
399
336
  rows: any[];
400
337
  }>;
401
338
  connect(): Promise<PgPoolClient>;
402
339
  }
340
+ /** Minimal pool client interface matching the `pg` package's `PoolClient`. */
403
341
  interface PgPoolClient {
404
342
  query(text: string, values?: any[]): Promise<{
405
343
  rows: any[];
@@ -445,4 +383,4 @@ declare class PgStorage implements Storage {
445
383
  deleteRepo(repoId: string): Promise<void>;
446
384
  }
447
385
 
448
- export { type AdvertiseRefsEvent, type BetterSqlite3Database, type BetterSqlite3Statement, type GitServer, type GitServerConfig, MemoryStorage, type NodeHttpRequest, type NodeHttpResponse, PackCache, type PgDatabase, type PgPool, type PgPoolClient, PgStorage, type PostReceiveEvent, type PreReceiveEvent, type ReceivePackResult, type RefAdvertisement, type RefUpdate, type RefsData, Rejection, type ServerHooks, type SqliteDatabase, type SqliteStatement, SqliteStorage, type StandardHooksConfig, type Storage, type UpdateEvent, type UploadPackOptions, buildRefAdvertisementBytes, collectRefs, composeHooks, createGitServer, createStandardHooks, handleUploadPack, ingestReceivePack, toNodeHandler, withAuth, wrapBetterSqlite3, wrapPgPool };
386
+ export { type AdvertiseRefsEvent, type BetterSqlite3Database, type BetterSqlite3Statement, BetterSqlite3Storage, type BunSqliteDatabase, type BunSqliteStatement, BunSqliteStorage, type GitServer, type GitServerConfig, MemoryStorage, type PgDatabase, type PgPool, type PgPoolClient, PgStorage, type PostReceiveEvent, type PreReceiveEvent, type RefAdvertisement, type RefUpdate, Rejection, type ServerHooks, type StandardHooksConfig, type Storage, type UpdateEvent, composeHooks, createGitServer, createStandardHooks, toNodeHandler, withAuth, wrapPgPool };
@@ -1,34 +1,34 @@
1
- var ae=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});function Y(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var be="0000000000000000000000000000000000000000",Ve=(()=>{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 ie(r){let e="";for(let t=0;t<20;t++)e+=Ve[r[t]];return e}function Ze(r,e){let t="";for(let s=0;s<20;s++)t+=Ve[r[e+s]];return t}function ce(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 Bt=new TextEncoder;function me(r){return typeof r=="string"?Bt.encode(r):r}function $t(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(me(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=ae(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(s){return e.update(me(s)),t},hex:()=>Promise.resolve(e.digest("hex"))};return t}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let r=[],e={update(t){return r.push(me(t)),e},async hex(){let t=0;for(let i of r)t+=i.byteLength;let s=new Uint8Array(t),n=0;for(let i of r)s.set(i,n),n+=i.byteLength;let o=await crypto.subtle.digest("SHA-1",s);return ie(new Uint8Array(o))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var Je=$t(),fe=Je;async function B(r){return Je().update(r).hex()}var _t=new Set(["tree","commit","tag"]),$=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(!_t.has(t.type))return;let s=t.content.byteLength;if(!(s>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+s>this.maxBytes&&this.map.size>0;){let n=this.map.keys().next().value;this.currentBytes-=this.map.get(n).content.byteLength,this.map.delete(n)}this.map.set(e,t),this.currentBytes+=s}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var I=Uint8Array,_=Uint16Array,Gt=Int32Array,Qe=new I([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]),et=new I([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]),Mt=new I([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),tt=(r,e)=>{let t=new _(31);for(let n=0;n<31;++n)t[n]=e+=1<<r[n-1];let s=new Gt(t[30]);for(let n=1;n<30;++n)for(let o=t[n];o<t[n+1];++o)s[o]=o-t[n]<<5|n;return{b:t,r:s}},{b:rt}=tt(Qe,2);rt[28]=258;var{b:Wt}=tt(et,0),we=new _(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,we[r]=((e&65280)>>8|(e&255)<<8)>>1}var V=(r,e,t)=>{let s=r.length,n=0,o=new _(e);for(;n<s;++n)r[n]&&++o[r[n]-1];let i=new _(e);for(n=1;n<e;++n)i[n]=i[n-1]+o[n-1]<<1;let a;if(t){a=new _(1<<e);let f=15-e;for(n=0;n<s;++n)if(r[n]){let c=n<<4|r[n],l=e-r[n],p=i[r[n]-1]++<<l;for(let d=p|(1<<l)-1;p<=d;++p)a[we[p]>>f]=c}}else for(a=new _(s),n=0;n<s;++n)r[n]&&(a[n]=we[i[r[n]-1]++]>>15-r[n]);return a},Z=new I(288);for(let r=0;r<144;++r)Z[r]=8;for(let r=144;r<256;++r)Z[r]=9;for(let r=256;r<280;++r)Z[r]=7;for(let r=280;r<288;++r)Z[r]=8;var nt=new I(32);for(let r=0;r<32;++r)nt[r]=5;var Ft=V(Z,9,1),qt=V(nt,5,1),xe=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},v=(r,e,t)=>{let s=e/8|0;return(r[s]|r[s+1]<<8)>>(e&7)&t},ge=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},st=r=>(r+7)/8|0,zt=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new I(r.subarray(e,t))),S=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},ot=(r,e,t,s)=>{let n=r.length,o=s?s.length:0;if(!n||e.f&&!e.l)return t||new I(0);let i=!t,a=i||e.i!=2,f=e.i;i&&(t=new I(n*3));let c=b=>{let m=t.length;if(b>m){let g=new I(Math.max(m*2,b));g.set(t),t=g}},l=e.f||0,p=e.p||0,d=e.b||0,u=e.l,h=e.d,y=e.m,x=e.n,w=n*8;do{if(!u){l=v(r,p,1);let R=v(r,p+1,3);if(p+=3,R)if(R==1)u=Ft,h=qt,y=9,x=5;else if(R==2){let O=v(r,p,31)+257,k=v(r,p+10,15)+4,E=O+v(r,p+5,31)+1;p+=14;let T=new I(E),C=new I(19);for(let L=0;L<k;++L)C[Mt[L]]=v(r,p+L*3,7);p+=k*3;let K=xe(C),A=(1<<K)-1,N=V(C,K,1);for(let L=0;L<E;){let Xe=N[v(r,p,A)];p+=Xe&15;let X=Xe>>4;if(X<16)T[L++]=X;else{let Ye=0,oe=0;for(X==16?(oe=3+v(r,p,3),p+=2,Ye=T[L-1]):X==17?(oe=3+v(r,p,7),p+=3):X==18&&(oe=11+v(r,p,127),p+=7);oe--;)T[L++]=Ye}}let ze=T.subarray(0,O),Ke=T.subarray(O);y=xe(ze),x=xe(Ke),u=V(ze,y,1),h=V(Ke,x,1)}else S(1);else{let O=st(p)+4,k=r[O-4]|r[O-3]<<8,E=O+k;if(E>n){f&&S(0);break}a&&c(d+k),t.set(r.subarray(O,E),d),e.b=d+=k,e.p=p=E*8,e.f=l;continue}if(p>w){f&&S(0);break}}a&&c(d+131072);let b=(1<<y)-1,m=(1<<x)-1,g=p;for(;;g=p){let R=u[ge(r,p)&b],O=R>>4;if(p+=R&15,p>w){f&&S(0);break}if(R||S(2),O<256)t[d++]=O;else if(O==256){g=p,u=null;break}else{let k=O-254;if(O>264){let A=O-257,N=Qe[A];k=v(r,p,(1<<N)-1)+rt[A],p+=N}let E=h[ge(r,p)&m],T=E>>4;E||S(3),p+=E&15;let C=Wt[T];if(T>3){let A=et[T];C+=ge(r,p)&(1<<A)-1,p+=A}if(p>w){f&&S(0);break}a&&c(d+131072);let K=d+k;if(d<C){let A=o-C,N=Math.min(C,K);for(A+d<0&&S(3);d<N;++d)t[d]=s[A+d]}for(;d<K;++d)t[d]=t[d-C]}}e.l=u,e.p=g,e.b=d,e.f=l,u&&(l=1,e.m=y,e.d=h,e.n=x)}while(!l);return d!=t.length&&i?zt(t,0,d):t.subarray(0,d)},at=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&S(0,"invalid zlib data"),r[1]&32&&S(0,"zlib dictionaries are not supported"),2);function it(r){let e=at(r);return ot(r.subarray(e,-4),{i:2})}function Re(r){let e=at(r),t={i:2},s=ot(r.subarray(e),t),n=st(t.p);return{result:s,bytesConsumed:e+n+4}}async function Kt(){let r;if(!(typeof document<"u"))try{r=ae(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let s=null;try{let n=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});n?.engine&&typeof n.engine.bytesWritten=="number"&&(s=o=>{let i=r.inflateSync(o,{info:!0});return{result:new Uint8Array(i.buffer),bytesConsumed:i.engine.bytesWritten}})}catch{}return{deflateSync:n=>new Uint8Array(r.deflateSync(n)),inflateSync:n=>new Uint8Array(r.inflateSync(n)),inflateWithConsumed:s??Re}}let t;return typeof globalThis.CompressionStream=="function"?t=async s=>{let n=new CompressionStream("deflate"),o=n.writable.getWriter();return o.write(s),o.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:it,inflateWithConsumed:Re}}var Xt=null;function ct(){return Xt??=Kt()}async function le(r){return await(await ct()).deflateSync(r)}async function ft(r,e){let t=await ct(),{result:s,bytesConsumed:n}=t.inflateWithConsumed(r);if(s.byteLength!==e)throw new Error(`Inflate size mismatch: got ${s.byteLength}, expected ${e}`);return{result:s,bytesConsumed:n}}var de=1346454347,je=2,pt=1,ut=2,ht=3,yt=4,J=6,ke=7,Yt={[pt]:"commit",[ut]:"tree",[ht]:"blob",[yt]:"tag"},bt={commit:pt,tree:ut,blob:ht,tag:yt};async function G(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=t.getUint32(0);if(s!==de)throw new Error(`Invalid pack signature: 0x${s.toString(16)} (expected 0x${de.toString(16)})`);let n=t.getUint32(4);if(n!==je)throw new Error(`Unsupported pack version: ${n}`);let o=t.getUint32(8),i=[],a=12;for(let c=0;c<o;c++){let l=await Vt(r,a);i.push(l),a=l.nextOffset}return(await Zt(i,e)).map((c,l)=>({...c,offset:i[l].headerOffset,nextOffset:i[l].nextOffset}))}async function Vt(r,e){let t=e,s=r[e++],n=s>>4&7,o=s&15,i=4;for(;s&128;)s=r[e++],o|=(s&127)<<i,i+=7;let a,f;if(n===J){let p=r[e++];for(a=p&127;p&128;)a+=1,p=r[e++],a=(a<<7)+(p&127);a=t-a}else n===ke&&(f=Ze(r,e),e+=20);let{result:c,bytesConsumed:l}=await ft(r.subarray(e),o);return{headerOffset:t,typeNum:n,inflated:c,baseOffset:a,baseHash:f,nextOffset:e+l}}async function Zt(r,e){let t=new Map;for(let o=0;o<r.length;o++)t.set(r[o].headerOffset,o);let s=new Array(r.length).fill(null);async function n(o){let i=s[o];if(i)return i;let a=r[o];if(a.typeNum!==J&&a.typeNum!==ke){let d=Yt[a.typeNum];if(!d)throw new Error(`Unknown object type: ${a.typeNum}`);let u={type:d,content:a.inflated,hash:await Pe(d,a.inflated)};return s[o]=u,u}if(a.typeNum===J){let d=t.get(a.baseOffset);if(d===void 0)throw new Error(`OFS_DELTA base not found at offset ${a.baseOffset}`);let u=await n(d),h=lt(u.content,a.inflated),y={type:u.type,content:h,hash:await Pe(u.type,h)};return s[o]=y,y}let f=await Jt(r,s,a.baseHash,n),c;if(f!==void 0)c=await n(f);else if(e){let d=await e(a.baseHash);d&&(c=d)}if(!c)throw new Error(`REF_DELTA base not found for hash ${a.baseHash}`);let l=lt(c.content,a.inflated),p={type:c.type,content:l,hash:await Pe(c.type,l)};return s[o]=p,p}for(let o=0;o<r.length;o++)await n(o);return s}async function Jt(r,e,t,s){for(let n=0;n<e.length;n++)if(e[n]?.hash===t)return n;for(let n=0;n<r.length;n++){let o=r[n];if(o.typeNum!==J&&o.typeNum!==ke&&(await s(n)).hash===t)return n}}function lt(r,e){let t=0,{value:s,newPos:n}=dt(e,t);if(t=n,s!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${s}, got ${r.byteLength}`);let{value:o,newPos:i}=dt(e,t);t=i;let a=new Uint8Array(o),f=0;for(;t<e.byteLength;){let c=e[t++];if(c&128){let l=0,p=0;c&1&&(l=e[t++]),c&2&&(l|=e[t++]<<8),c&4&&(l|=e[t++]<<16),c&8&&(l|=e[t++]<<24),c&16&&(p=e[t++]),c&32&&(p|=e[t++]<<8),c&64&&(p|=e[t++]<<16),p===0&&(p=65536),a.set(r.subarray(l,l+p),f),f+=p}else if(c>0)a.set(e.subarray(t,t+c),f),f+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(f!==o)throw new Error(`Delta produced ${f} bytes, expected ${o}`);return a}async function pe(r){let e=[],t=new Map,s=new Uint8Array(12),n=new DataView(s.buffer);n.setUint32(0,de),n.setUint32(4,je),n.setUint32(8,r.length),e.push(s);let o=12,i=[];for(let a of r){let f=o;t.set(a.hash,o);let c=a.delta&&a.deltaBaseHash?t.get(a.deltaBaseHash):void 0;if(a.delta&&c!==void 0){let l=Oe(J,a.delta.byteLength),p=er(o-c),d=await le(a.delta);e.push(l,p,d),o+=l.byteLength+p.byteLength+d.byteLength}else{let l=bt[a.type],p=Oe(l,a.content.byteLength),d=await le(a.content);e.push(p,d),o+=p.byteLength+d.byteLength}i.push({hash:a.hash,offset:f,nextOffset:o})}return{data:await Qt(e),entries:i}}async function*mt(r,e){let t=fe(),s=new Uint8Array(12),n=new DataView(s.buffer);n.setUint32(0,de),n.setUint32(4,je),n.setUint32(8,r),t.update(s),yield s;for await(let o of e){let i=bt[o.type],a=Oe(i,o.content.byteLength),f=await le(o.content);t.update(a),t.update(f),yield tr(a,f)}yield ce(await t.hex())}async function Qt(r){let e=0;for(let i of r)e+=i.byteLength;e+=20;let t=new Uint8Array(e),s=0;for(let i of r)t.set(i,s),s+=i.byteLength;let n=fe();n.update(t.subarray(0,s));let o=await n.hex();return t.set(ce(o),s),t}function er(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 Oe(r,e){let t=[],s=r<<4|e&15;for(e>>=4;e>0;)t.push(s|128),s=e&127,e>>=7;return t.push(s),new Uint8Array(t)}function dt(r,e){let t=0,s=0,n;do n=r[e++],t|=(n&127)<<s,s+=7;while(n&128);return{value:t,newPos:e}}function tr(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var rr=new TextEncoder;async function Pe(r,e){let t=rr.encode(`${r} ${e.byteLength}\0`),s=fe();return s.update(t),s.update(e),s.hex()}var nr=new TextEncoder,Vr=new TextDecoder;function M(r,e){let t=nr.encode(`${r} ${e.byteLength}\0`),s=new Uint8Array(t.byteLength+e.byteLength);return s.set(t),s.set(e,t.byteLength),s}function Q(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let s=r.slice(0,e).trimEnd(),n=r.slice(e+1,t),o=r.slice(t+2),[i="0",a="+0000"]=o.split(" "),f=parseInt(i,10);return{name:s,email:n,timestamp:f,timezone:a}}var en=new TextEncoder,or=new TextDecoder;function ee(r){let e=or.decode(r),t=e.indexOf(`
1
+ var ie=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});function Y(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var me="0000000000000000000000000000000000000000",Ze=(()=>{let r=new Array(256);for(let e=0;e<256;e++)r[e]=(e>>4).toString(16)+(e&15).toString(16);return r})();function ce(r){let e="";for(let t=0;t<20;t++)e+=Ze[r[t]];return e}function Je(r,e){let t="";for(let s=0;s<20;s++)t+=Ze[r[e+s]];return t}function fe(r){let e=new Uint8Array(20);for(let t=0;t<20;t++)e[t]=parseInt(r.slice(t*2,t*2+2),16);return e}var Gt=new TextEncoder;function xe(r){return typeof r=="string"?Gt.encode(r):r}function Ft(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(xe(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=ie(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(s){return e.update(xe(s)),t},hex:()=>Promise.resolve(e.digest("hex"))};return t}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let r=[],e={update(t){return r.push(xe(t)),e},async hex(){let t=0;for(let i of r)t+=i.byteLength;let s=new Uint8Array(t),n=0;for(let i of r)s.set(i,n),n+=i.byteLength;let o=await crypto.subtle.digest("SHA-1",s);return ce(new Uint8Array(o))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var Qe=Ft(),le=Qe;async function D(r){return Qe().update(r).hex()}var qt=new Set(["tree","commit","tag"]),N=class{map=new Map;currentBytes=0;maxBytes;constructor(e=16*1024*1024){this.maxBytes=e}get(e){return this.map.get(e)}set(e,t){if(!qt.has(t.type))return;let s=t.content.byteLength;if(!(s>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+s>this.maxBytes&&this.map.size>0;){let n=this.map.keys().next().value;this.currentBytes-=this.map.get(n).content.byteLength,this.map.delete(n)}this.map.set(e,t),this.currentBytes+=s}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var A=Uint8Array,F=Uint16Array,zt=Int32Array,et=new A([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),tt=new A([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Xt=new A([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),rt=(r,e)=>{let t=new F(31);for(let n=0;n<31;++n)t[n]=e+=1<<r[n-1];let s=new zt(t[30]);for(let n=1;n<30;++n)for(let o=t[n];o<t[n+1];++o)s[o]=o-t[n]<<5|n;return{b:t,r:s}},{b:nt}=rt(et,2);nt[28]=258;var{b:Kt}=rt(tt,0),Re=new F(32768);for(let r=0;r<32768;++r){let e=(r&43690)>>1|(r&21845)<<1;e=(e&52428)>>2|(e&13107)<<2,e=(e&61680)>>4|(e&3855)<<4,Re[r]=((e&65280)>>8|(e&255)<<8)>>1}var V=(r,e,t)=>{let s=r.length,n=0,o=new F(e);for(;n<s;++n)r[n]&&++o[r[n]-1];let i=new F(e);for(n=1;n<e;++n)i[n]=i[n-1]+o[n-1]<<1;let a;if(t){a=new F(1<<e);let f=15-e;for(n=0;n<s;++n)if(r[n]){let c=n<<4|r[n],l=e-r[n],d=i[r[n]-1]++<<l;for(let p=d|(1<<l)-1;d<=p;++d)a[Re[d]>>f]=c}}else for(a=new F(s),n=0;n<s;++n)r[n]&&(a[n]=Re[i[r[n]-1]++]>>15-r[n]);return a},Z=new A(288);for(let r=0;r<144;++r)Z[r]=8;for(let r=144;r<256;++r)Z[r]=9;for(let r=256;r<280;++r)Z[r]=7;for(let r=280;r<288;++r)Z[r]=8;var st=new A(32);for(let r=0;r<32;++r)st[r]=5;var Yt=V(Z,9,1),Vt=V(st,5,1),ge=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},v=(r,e,t)=>{let s=e/8|0;return(r[s]|r[s+1]<<8)>>(e&7)&t},we=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},ot=r=>(r+7)/8|0,Zt=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new A(r.subarray(e,t))),T=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},at=(r,e,t,s)=>{let n=r.length,o=s?s.length:0;if(!n||e.f&&!e.l)return t||new A(0);let i=!t,a=i||e.i!=2,f=e.i;i&&(t=new A(n*3));let c=b=>{let w=t.length;if(b>w){let R=new A(Math.max(w*2,b));R.set(t),t=R}},l=e.f||0,d=e.p||0,p=e.b||0,u=e.l,h=e.d,y=e.m,m=e.n,O=n*8;do{if(!u){l=v(r,d,1);let x=v(r,d+1,3);if(d+=3,x)if(x==1)u=Yt,h=Vt,y=9,m=5;else if(x==2){let g=v(r,d,31)+257,P=v(r,d+10,15)+4,I=g+v(r,d+5,31)+1;d+=14;let C=new A(I),L=new A(19);for(let H=0;H<P;++H)L[Xt[H]]=v(r,d+H*3,7);d+=P*3;let X=ge(L),S=(1<<X)-1,G=V(L,X,1);for(let H=0;H<I;){let Ye=G[v(r,d,S)];d+=Ye&15;let K=Ye>>4;if(K<16)C[H++]=K;else{let Ve=0,ae=0;for(K==16?(ae=3+v(r,d,3),d+=2,Ve=C[H-1]):K==17?(ae=3+v(r,d,7),d+=3):K==18&&(ae=11+v(r,d,127),d+=7);ae--;)C[H++]=Ve}}let Xe=C.subarray(0,g),Ke=C.subarray(g);y=ge(Xe),m=ge(Ke),u=V(Xe,y,1),h=V(Ke,m,1)}else T(1);else{let g=ot(d)+4,P=r[g-4]|r[g-3]<<8,I=g+P;if(I>n){f&&T(0);break}a&&c(p+P),t.set(r.subarray(g,I),p),e.b=p+=P,e.p=d=I*8,e.f=l;continue}if(d>O){f&&T(0);break}}a&&c(p+131072);let b=(1<<y)-1,w=(1<<m)-1,R=d;for(;;R=d){let x=u[we(r,d)&b],g=x>>4;if(d+=x&15,d>O){f&&T(0);break}if(x||T(2),g<256)t[p++]=g;else if(g==256){R=d,u=null;break}else{let P=g-254;if(g>264){let S=g-257,G=et[S];P=v(r,d,(1<<G)-1)+nt[S],d+=G}let I=h[we(r,d)&w],C=I>>4;I||T(3),d+=I&15;let L=Kt[C];if(C>3){let S=tt[C];L+=we(r,d)&(1<<S)-1,d+=S}if(d>O){f&&T(0);break}a&&c(p+131072);let X=p+P;if(p<L){let S=o-L,G=Math.min(L,X);for(S+p<0&&T(3);p<G;++p)t[p]=s[S+p]}for(;p<X;++p)t[p]=t[p-L]}}e.l=u,e.p=R,e.b=p,e.f=l,u&&(l=1,e.m=y,e.d=h,e.n=m)}while(!l);return p!=t.length&&i?Zt(t,0,p):t.subarray(0,p)},it=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&T(0,"invalid zlib data"),r[1]&32&&T(0,"zlib dictionaries are not supported"),2);function ct(r){let e=it(r);return at(r.subarray(e,-4),{i:2})}function Oe(r){let e=it(r),t={i:2},s=at(r.subarray(e),t),n=ot(t.p);return{result:s,bytesConsumed:e+n+4}}async function Jt(){let r;if(!(typeof document<"u"))try{r=ie(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let s=null;try{let n=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});n?.engine&&typeof n.engine.bytesWritten=="number"&&(s=o=>{let i=r.inflateSync(o,{info:!0});return{result:new Uint8Array(i.buffer),bytesConsumed:i.engine.bytesWritten}})}catch{}return{deflateSync:n=>new Uint8Array(r.deflateSync(n)),inflateSync:n=>new Uint8Array(r.inflateSync(n)),inflateWithConsumed:s??Oe}}let t;return typeof globalThis.CompressionStream=="function"?t=async s=>{let n=new CompressionStream("deflate"),o=n.writable.getWriter();return o.write(s),o.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:ct,inflateWithConsumed:Oe}}var Qt=null;function ft(){return Qt??=Jt()}async function de(r){return await(await ft()).deflateSync(r)}async function lt(r,e){let t=await ft(),{result:s,bytesConsumed:n}=t.inflateWithConsumed(r);if(s.byteLength!==e)throw new Error(`Inflate size mismatch: got ${s.byteLength}, expected ${e}`);return{result:s,bytesConsumed:n}}var pe=1346454347,Ee=2,ut=1,ht=2,yt=3,bt=4,J=6,Ie=7,er={[ut]:"commit",[ht]:"tree",[yt]:"blob",[bt]:"tag"},mt={commit:ut,tree:ht,blob:yt,tag:bt};async function B(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=t.getUint32(0);if(s!==pe)throw new Error(`Invalid pack signature: 0x${s.toString(16)} (expected 0x${pe.toString(16)})`);let n=t.getUint32(4);if(n!==Ee)throw new Error(`Unsupported pack version: ${n}`);let o=t.getUint32(8),i=[],a=12;for(let c=0;c<o;c++){let l=await tr(r,a);i.push(l),a=l.nextOffset}return(await rr(i,e)).map((c,l)=>({...c,offset:i[l].headerOffset,nextOffset:i[l].nextOffset}))}async function tr(r,e){let t=e,s=r[e++],n=s>>4&7,o=s&15,i=4;for(;s&128;)s=r[e++],o|=(s&127)<<i,i+=7;let a,f;if(n===J){let d=r[e++];for(a=d&127;d&128;)a+=1,d=r[e++],a=(a<<7)+(d&127);a=t-a}else n===Ie&&(f=Je(r,e),e+=20);let{result:c,bytesConsumed:l}=await lt(r.subarray(e),o);return{headerOffset:t,typeNum:n,inflated:c,baseOffset:a,baseHash:f,nextOffset:e+l}}async function rr(r,e){let t=new Map;for(let o=0;o<r.length;o++)t.set(r[o].headerOffset,o);let s=new Array(r.length).fill(null);async function n(o){let i=s[o];if(i)return i;let a=r[o];if(a.typeNum!==J&&a.typeNum!==Ie){let p=er[a.typeNum];if(!p)throw new Error(`Unknown object type: ${a.typeNum}`);let u={type:p,content:a.inflated,hash:await je(p,a.inflated)};return s[o]=u,u}if(a.typeNum===J){let p=t.get(a.baseOffset);if(p===void 0)throw new Error(`OFS_DELTA base not found at offset ${a.baseOffset}`);let u=await n(p),h=dt(u.content,a.inflated),y={type:u.type,content:h,hash:await je(u.type,h)};return s[o]=y,y}let f=await nr(r,s,a.baseHash,n),c;if(f!==void 0)c=await n(f);else if(e){let p=await e(a.baseHash);p&&(c=p)}if(!c)throw new Error(`REF_DELTA base not found for hash ${a.baseHash}`);let l=dt(c.content,a.inflated),d={type:c.type,content:l,hash:await je(c.type,l)};return s[o]=d,d}for(let o=0;o<r.length;o++)await n(o);return s}async function nr(r,e,t,s){for(let n=0;n<e.length;n++)if(e[n]?.hash===t)return n;for(let n=0;n<r.length;n++){let o=r[n];if(o.typeNum!==J&&o.typeNum!==Ie&&(await s(n)).hash===t)return n}}function dt(r,e){let t=0,{value:s,newPos:n}=pt(e,t);if(t=n,s!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${s}, got ${r.byteLength}`);let{value:o,newPos:i}=pt(e,t);t=i;let a=new Uint8Array(o),f=0;for(;t<e.byteLength;){let c=e[t++];if(c&128){let l=0,d=0;c&1&&(l=e[t++]),c&2&&(l|=e[t++]<<8),c&4&&(l|=e[t++]<<16),c&8&&(l|=e[t++]<<24),c&16&&(d=e[t++]),c&32&&(d|=e[t++]<<8),c&64&&(d|=e[t++]<<16),d===0&&(d=65536),a.set(r.subarray(l,l+d),f),f+=d}else if(c>0)a.set(e.subarray(t,t+c),f),f+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(f!==o)throw new Error(`Delta produced ${f} bytes, expected ${o}`);return a}async function ue(r){let e=[],t=new Map,s=new Uint8Array(12),n=new DataView(s.buffer);n.setUint32(0,pe),n.setUint32(4,Ee),n.setUint32(8,r.length),e.push(s);let o=12,i=[];for(let a of r){let f=o;t.set(a.hash,o);let c=a.delta&&a.deltaBaseHash?t.get(a.deltaBaseHash):void 0;if(a.delta&&c!==void 0){let l=Pe(J,a.delta.byteLength),d=or(o-c),p=await de(a.delta);e.push(l,d,p),o+=l.byteLength+d.byteLength+p.byteLength}else{let l=mt[a.type],d=Pe(l,a.content.byteLength),p=await de(a.content);e.push(d,p),o+=d.byteLength+p.byteLength}i.push({hash:a.hash,offset:f,nextOffset:o})}return{data:await sr(e),entries:i}}async function*xt(r,e){let t=le(),s=new Uint8Array(12),n=new DataView(s.buffer);n.setUint32(0,pe),n.setUint32(4,Ee),n.setUint32(8,r),t.update(s),yield s;for await(let o of e){let i=mt[o.type],a=Pe(i,o.content.byteLength),f=await de(o.content);t.update(a),t.update(f),yield ar(a,f)}yield fe(await t.hex())}async function sr(r){let e=0;for(let i of r)e+=i.byteLength;e+=20;let t=new Uint8Array(e),s=0;for(let i of r)t.set(i,s),s+=i.byteLength;let n=le();n.update(t.subarray(0,s));let o=await n.hex();return t.set(fe(o),s),t}function or(r){let e=[];e.push(r&127);let t=r>>>7;for(;t>0;)e.unshift(128|--t&127),t>>>=7;return new Uint8Array(e)}function Pe(r,e){let t=[],s=r<<4|e&15;for(e>>=4;e>0;)t.push(s|128),s=e&127,e>>=7;return t.push(s),new Uint8Array(t)}function pt(r,e){let t=0,s=0,n;do n=r[e++],t|=(n&127)<<s,s+=7;while(n&128);return{value:t,newPos:e}}function ar(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var ir=new TextEncoder;async function je(r,e){let t=ir.encode(`${r} ${e.byteLength}\0`),s=le();return s.update(t),s.update(e),s.hex()}var cr=new TextEncoder,rn=new TextDecoder;function _(r,e){let t=cr.encode(`${r} ${e.byteLength}\0`),s=new Uint8Array(t.byteLength+e.byteLength);return s.set(t),s.set(e,t.byteLength),s}function Q(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let s=r.slice(0,e).trimEnd(),n=r.slice(e+1,t),o=r.slice(t+2),[i="0",a="+0000"]=o.split(" "),f=parseInt(i,10);return{name:s,email:n,timestamp:f,timezone:a}}var an=new TextEncoder,lr=new TextDecoder;function ee(r){let e=lr.decode(r),t=e.indexOf(`
2
2
 
3
3
  `),s=t===-1?e:e.slice(0,t),n=t===-1?"":e.slice(t+2),o="",i=[],a,f;for(let c of s.split(`
4
- `)){let l=c.indexOf(" ");if(l===-1)continue;let p=c.slice(0,l),d=c.slice(l+1);switch(p){case"tree":o=d;break;case"parent":i.push(d);break;case"author":a=Q(d);break;case"committer":f=Q(d);break}}if(!o)throw new Error("Commit missing tree field");if(!a)throw new Error("Commit missing author field");if(!f)throw new Error("Commit missing committer field");return{type:"commit",tree:o,parents:i,author:a,committer:f,message:n}}var nn=new TextEncoder,ar=new TextDecoder;function D(r){let e=ar.decode(r),t=e.indexOf(`
4
+ `)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),p=c.slice(l+1);switch(d){case"tree":o=p;break;case"parent":i.push(p);break;case"author":a=Q(p);break;case"committer":f=Q(p);break}}if(!o)throw new Error("Commit missing tree field");if(!a)throw new Error("Commit missing author field");if(!f)throw new Error("Commit missing committer field");return{type:"commit",tree:o,parents:i,author:a,committer:f,message:n}}var ln=new TextEncoder,dr=new TextDecoder;function M(r){let e=dr.decode(r),t=e.indexOf(`
5
5
 
6
6
  `),s=t===-1?e:e.slice(0,t),n=t===-1?"":e.slice(t+2),o="",i="commit",a="",f;for(let c of s.split(`
7
- `)){let l=c.indexOf(" ");if(l===-1)continue;let p=c.slice(0,l),d=c.slice(l+1);switch(p){case"object":o=d;break;case"type":i=d;break;case"tag":a=d;break;case"tagger":f=Q(d);break}}if(!o)throw new Error("Tag missing object field");if(!a)throw new Error("Tag missing tag name field");if(!f)throw new Error("Tag missing tagger field");return{type:"tag",object:o,objectType:i,name:a,tagger:f,message:n}}async function te(r,e){return r.objectStore.read(e)}async function re(r,e){return r.objectStore.exists(e)}var an=new TextDecoder;async function W(r,e){let t=await te(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return ee(t.content)}function F(r){return typeof r=="string"?{type:"direct",hash:r}:r}var dn=new TextEncoder,xt=new TextDecoder;function ve(r){let e=[],t=0;for(;t<r.byteLength;){let s=r.indexOf(32,t);if(s===-1)break;let n=xt.decode(r.subarray(t,s)),o=r.indexOf(0,s+1);if(o===-1)break;let i=xt.decode(r.subarray(s+1,o)),a=r.subarray(o+1,o+21),f=ie(a),c=n.padStart(6,"0");e.push({mode:c,name:i,hash:f}),t=o+21}return{type:"tree",entries:e}}async function gt(r,e,t){if(e===t)return!0;let s=new Set,n=[t],o=0;for(;o<n.length;){let i=n[o++];if(i===e)return!0;if(s.has(i))continue;s.add(i);let a;try{a=await W(r,i)}catch{continue}for(let f of a.parents)s.has(f)||n.push(f)}return!1}var he=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]),ir=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]),ue=64,cr=4,Ie=4096,wt=65536,fr=127;function lr(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let s=t>>>2;s<16&&(s=16),s=pr(s);let n=s-1,o=new Uint32Array(s),i=[],a=-1>>>0;for(let d=t*16-16;d>=0;d-=16){let u=0;for(let h=1;h<=16;h++)u=(u<<8|r[d+h])^he[u>>>23];if(u=u>>>0,u===a)i[i.length-1].ptr=d+16;else{a=u;let h=u&n;i.push({ptr:d+16,val:u}),o[h]++}}let f=new Map;for(let d of i){let u=d.val&n,h=f.get(u);h||(h=[],f.set(u,h)),h.push(d)}for(let[d,u]of f){if(u.length<=ue)continue;let h=[],y=u.length/ue;for(let x=0;x<ue;x++)h.push(u[Math.floor(x*y)]);f.set(d,h),o[d]=ue}let c=new Uint32Array(s+1),l=[],p=0;for(let d=0;d<s;d++){c[d]=p;let u=f.get(d);if(u){for(let h of u)l.push(h);p+=u.length}}return c[s]=p,{src:r,hashMask:n,buckets:c,entries:l}}function dr(r,e,t){if(!r||e.byteLength===0)return null;let s=r.src.byteLength,n=e.byteLength,o=r.src,i=new Uint8Array(Math.max(n,1024)),a=0;function f(y){for(;a+y>i.length;){let x=new Uint8Array(i.length*2);x.set(i),i=x}}a=Pt(i,a,s),a=Pt(i,a,n),f(18),a++;let c=0,l=0,p=Math.min(16,n);for(let y=0;y<p;y++)i[a++]=e[y],c=(c<<8|e[y])^he[c>>>23],l++;c=c>>>0;let d=p,u=0,h=0;for(;d<n;){if(h<Ie){c^=ir[e[d-16]],c=((c<<8|e[d])^he[c>>>23])>>>0;let y=c&r.hashMask,x=r.buckets[y],w=r.buckets[y+1];for(let b=x;b<w;b++){let m=r.entries[b];if(m.val!==c)continue;let g=m.ptr,R=o.byteLength-g,O=n-d;if(R>O&&(R=O),R<=h)break;let k=0;for(;k<R&&o[g+k]===e[d+k];)k++;if(k>h&&(h=k,u=g,h>=Ie))break}}if(h<cr)f(2),l===0&&a++,i[a++]=e[d++],l++,l===fr&&(i[a-l-1]=l,l=0),h=0;else{if(l>0){for(;u>0&&o[u-1]===e[d-1];)if(h++,u--,d--,a--,!(--l>0)){a--,l=-1;break}l>0&&(i[a-l-1]=l),l=0}let y=h>wt?h-wt:0;h-=y,f(8);let x=a++,w=128;if(u&255&&(i[a++]=u&255,w|=1),u&65280&&(i[a++]=u>>>8&255,w|=2),u&16711680&&(i[a++]=u>>>16&255,w|=4),u&4278190080&&(i[a++]=u>>>24&255,w|=8),h&255&&(i[a++]=h&255,w|=16),h&65280&&(i[a++]=h>>>8&255,w|=32),i[x]=w,d+=h,u+=h,h=y,u>4294967295&&(h=0),h<Ie){c=0;for(let b=-16;b<0;b++)c=(c<<8|e[d+b])^he[c>>>23];c=c>>>0}}if(t&&a>t)return null}return l>0&&(i[a-l-1]=l),t&&a>t?null:i.subarray(0,a)}var Rt={blob:0,tree:1,commit:2,tag:3};function Ot(r,e){let t=e?.window??10,s=e?.depth??50,n=r.slice().sort((c,l)=>{let p=Rt[c.type]??99,d=Rt[l.type]??99;return p!==d?p-d:l.content.byteLength-c.content.byteLength}),o=new Map,i=[],a=[],f=[];for(let c=0;c<n.length;c++){let l=n[c],p={hash:l.hash,type:l.type,content:l.content,depth:0},d=null,u=null,h=Math.max(0,c-t);for(let y=c-1;y>=h;y--){let x=n[y];if(x.type!==l.type||(o.get(x.hash)?.depth??0)>=s||l.content.byteLength<x.content.byteLength>>>5)continue;let m=a[y-h]??null;if(!m)continue;let g=d?d.byteLength:l.content.byteLength/2|0;if(g<16)continue;let R=dr(m,l.content,g);R&&(!d||R.byteLength<d.byteLength)&&(d=R,u=x.hash)}if(d&&u){p.delta=d,p.deltaBase=u;let y=o.get(u);p.depth=(y?.depth??0)+1}o.set(l.hash,p),i.push(p),a.length>=t&&(a.shift(),f.shift()),a.push(lr(l.content)),f.push(l.hash)}return i}function pr(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 Pt(r,e,t){let s=t;do{let n=s&127;s>>>=7,s>0&&(n|=128),r[e++]=n}while(s>0);return e}var ur=2147483647;async function jt(r,e,t,s){if(t>=ur)return{shallow:[],unshallow:[...s]};let n=new Map,o=[];for(let c of e)!n.has(c)&&await re(r,c)&&(n.set(c,1),o.push({hash:c,level:1}));let i=new Set,a=0;for(;a<o.length;){let{hash:c,level:l}=o[a++];if(l>=t){i.add(c);continue}let p;try{p=await W(r,c)}catch{continue}for(let d of p.parents)!n.has(d)&&await re(r,d)&&(n.set(d,l+1),o.push({hash:d,level:l+1}))}let f=[];for(let c of s){let l=n.get(c);l!==void 0&&l<t&&f.push(c)}return{shallow:[...i],unshallow:f}}async function Ee(r,e,t,s,n){let o=n??s,i=new Set;for(let l of t)await ne(r,l,i,o);let a=[...e];if(n&&s)for(let l of n)try{let p=await W(r,l);for(let d of p.parents)i.has(d)||a.push(d)}catch{}let f=[],c=new Set;for(let l of a)await se(r,l,i,c,f,s);return{count:f.length,objects:hr(f)}}async function kt(r,e,t,s,n){let{count:o,objects:i}=await Ee(r,e,t,s,n);return{count:o,objects:yr(r,i)}}async function*hr(r){for(let e of r)yield e}async function*yr(r,e){for await(let t of e){let s=await te(r,t.hash);yield{hash:t.hash,type:t.type,content:s.content}}}async function vt(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function ne(r,e,t,s){if(t.has(e)||(t.add(e),!await re(r,e)))return;let n=await te(r,e);switch(n.type){case"commit":{let o=ee(n.content);if(await ne(r,o.tree,t,s),!s?.has(e))for(let i of o.parents)await ne(r,i,t,s);break}case"tree":{let o=ve(n.content);for(let i of o.entries)await ne(r,i.hash,t,s);break}case"tag":{let o=D(n.content);await ne(r,o.object,t,s);break}case"blob":break}}async function se(r,e,t,s,n,o){if(s.has(e)||t.has(e))return;s.add(e);let i=await te(r,e);switch(n.push({hash:e,type:i.type}),i.type){case"commit":{let a=ee(i.content);if(await se(r,a.tree,t,s,n,o),!o?.has(e))for(let f of a.parents)await se(r,f,t,s,n,o);break}case"tree":{let a=ve(i.content);for(let f of a.entries)await se(r,f.hash,t,s,n,o);break}case"tag":{let a=D(i.content);await se(r,a.object,t,s,n,o);break}case"blob":break}}var br=new TextEncoder,Et=new TextDecoder,It=65520,mr=new Uint8Array([48,48,48,48]);function P(r){let e=typeof r=="string"?br.encode(r):r,t=4+e.byteLength;if(t>It)throw new Error(`pkt-line too long: ${t} bytes (max ${It})`);let s=t.toString(16).padStart(4,"0"),n=new Uint8Array(t);return n[0]=s.charCodeAt(0),n[1]=s.charCodeAt(1),n[2]=s.charCodeAt(2),n[3]=s.charCodeAt(3),n.set(e,4),n}function U(){return mr.slice()}function H(...r){let e=0;for(let n of r)e+=n.byteLength;let t=new Uint8Array(e),s=0;for(let n of r)t.set(n,s),s+=n.byteLength;return t}function At(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let s=Et.decode(r.subarray(t,t+4)),n=parseInt(s,16);if(Number.isNaN(n))throw new Error(`Invalid pkt-line length: ${s}`);if(n===0){e.push({type:"flush"}),t+=4;continue}if(n<4)throw new Error(`Invalid pkt-line length: ${n}`);if(t+n>r.byteLength)throw new Error(`Truncated pkt-line: need ${n} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+n)}),t+=n}return e}function St(r){if(r.type==="flush")return"";let e=Et.decode(r.data);return e.endsWith(`
8
- `)?e.slice(0,-1):e}var Ut=65515;function Tt(r,e,t,s){let n=[];n.push(P(`# service=${e}
9
- `)),n.push(U());let o=[...t];s&&o.push(`symref=HEAD:${s}`),o.push("agent=just-git/1.0");let i=o.join(" ");if(r.length===0)n.push(P(`0000000000000000000000000000000000000000 capabilities^{}\0${i}
10
- `));else for(let a=0;a<r.length;a++){let f=r[a];a===0?n.push(P(`${f.hash} ${f.name}\0${i}
11
- `)):n.push(P(`${f.hash} ${f.name}
12
- `))}return n.push(U()),H(...n)}function Ct(r){let e=At(r),t=[],s=[],n=[],o=[],i,a=!1;for(let f of e){if(f.type==="flush")continue;let c=St(f);if(c.startsWith("want ")){let l=c.slice(5);if(t.length===0){let p=l.indexOf(" ");p!==-1?(t.push(l.slice(0,p)),o=l.slice(p+1).split(" ").filter(Boolean)):t.push(l)}else t.push(l)}else c.startsWith("have ")?s.push(c.slice(5)):c.startsWith("shallow ")?n.push(c.slice(8)):c.startsWith("deepen ")?(i=parseInt(c.slice(7),10),Number.isNaN(i)&&(i=void 0)):c==="done"&&(a=!0)}return{wants:t,haves:s,capabilities:o,clientShallows:n,depth:i,done:a}}function q(r,e,t,s){let n=[];if(s){for(let o of s.shallow)n.push(P(`shallow ${o}
13
- `));for(let o of s.unshallow)n.push(P(`unshallow ${o}
14
- `));n.push(U())}if(t&&t.length>0){for(let i of t)n.push(P(`ACK ${i} common
15
- `));let o=t[t.length-1];n.push(P(`ACK ${o} ready
16
- `)),n.push(P(`ACK ${o}
17
- `))}else n.push(P(`NAK
18
- `));if(e){let o=0;for(;o<r.byteLength;){let i=Math.min(Ut,r.byteLength-o);n.push(Ae(1,r.subarray(o,o+i))),o+=i}n.push(U())}else{let o=new Uint8Array(r.byteLength);o.set(r),n.push(o)}return H(...n)}function Lt(r){let e=[];for(let t of r.shallow)e.push(P(`shallow ${t}
19
- `));for(let t of r.unshallow)e.push(P(`unshallow ${t}
20
- `));return e.push(U()),H(...e)}async function*Ht(r,e,t,s){if(s){let o=[];for(let i of s.shallow)o.push(P(`shallow ${i}
21
- `));for(let i of s.unshallow)o.push(P(`unshallow ${i}
22
- `));o.push(U()),yield H(...o)}let n=[];if(t&&t.length>0){for(let i of t)n.push(P(`ACK ${i} common
23
- `));let o=t[t.length-1];n.push(P(`ACK ${o} ready
24
- `)),n.push(P(`ACK ${o}
25
- `))}else n.push(P(`NAK
26
- `));if(yield H(...n),e){for await(let o of r){let i=0;for(;i<o.byteLength;){let a=Math.min(Ut,o.byteLength-i);yield Ae(1,o.subarray(i,i+a)),i+=a}}yield U()}else for await(let o of r)yield o}function Dt(r){let e=new TextDecoder,t=[],s=[],n=0;for(;n<r.byteLength&&!(n+4>r.byteLength);){let i=e.decode(r.subarray(n,n+4)),a=parseInt(i,16);if(Number.isNaN(a))break;if(a===0){n+=4;break}if(a<4||n+a>r.byteLength)break;let f=r.subarray(n+4,n+a);n+=a;let c=f.indexOf(0),l;if(c!==-1)l=e.decode(f.subarray(0,c)),s=e.decode(f.subarray(c+1)).replace(/\n$/,"").split(" ").filter(Boolean);else{let d=e.decode(f);l=d.endsWith(`
27
- `)?d.slice(0,-1):d}let p=l.split(" ");p.length>=3&&t.push({oldHash:p[0],newHash:p[1],refName:p[2]})}let o=n<r.byteLength?r.subarray(n):new Uint8Array(0);return{commands:t,packData:o,capabilities:s}}function ye(r,e,t){let s=[];s.push(P(r?`unpack ok
7
+ `)){let l=c.indexOf(" ");if(l===-1)continue;let d=c.slice(0,l),p=c.slice(l+1);switch(d){case"object":o=p;break;case"type":i=p;break;case"tag":a=p;break;case"tagger":f=Q(p);break}}if(!o)throw new Error("Tag missing object field");if(!a)throw new Error("Tag missing tag name field");if(!f)throw new Error("Tag missing tagger field");return{type:"tag",object:o,objectType:i,name:a,tagger:f,message:n}}async function te(r,e){return r.objectStore.read(e)}async function re(r,e){return r.objectStore.exists(e)}var un=new TextDecoder;async function q(r,e){let t=await te(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return ee(t.content)}function W(r){return typeof r=="string"?{type:"direct",hash:r}:r}var mn=new TextEncoder,gt=new TextDecoder;function ve(r){let e=[],t=0;for(;t<r.byteLength;){let s=r.indexOf(32,t);if(s===-1)break;let n=gt.decode(r.subarray(t,s)),o=r.indexOf(0,s+1);if(o===-1)break;let i=gt.decode(r.subarray(s+1,o)),a=r.subarray(o+1,o+21),f=ce(a),c=n.padStart(6,"0");e.push({mode:c,name:i,hash:f}),t=o+21}return{type:"tree",entries:e}}async function wt(r,e,t){if(e===t)return!0;let s=new Set,n=[t],o=0;for(;o<n.length;){let i=n[o++];if(i===e)return!0;if(s.has(i))continue;s.add(i);let a;try{a=await q(r,i)}catch{continue}for(let f of a.parents)s.has(f)||n.push(f)}return!1}var ye=new Uint32Array([0,2874782929,1454598562,4260027763,104818581,2909197124,1351355959,4225088230,209637162,2804382715,1523426952,4053013081,172075199,2702711918,1559413021,4155209164,419274324,3013880453,1313798134,3843506983,516094401,3046853904,1215402083,3811058866,344150398,3218793903,1110456540,3916008461,314324715,3118826042,1141858121,4015451032,838548648,2594343033,1732793610,3423723995,935615293,2627596268,1635201695,3392046670,1032188802,2531018579,1798740512,3228511985,1002083351,2430804166,1829371317,3327150436,688300796,2187269677,2142620510,3572268943,792315241,2220913080,2039131339,3537049626,628649430,2384582919,1942684788,3633492133,591858243,2283716242,1978950625,3735934768,1677097296,3366964609,893718770,2652677155,1707679429,3465587220,863663975,2552480694,1871230586,3302032043,960225240,2455923465,1773654511,3270403390,1057273933,2489126044,2064377604,3495056341,767069862,2262907511,2100592785,3597481024,730327347,2162056674,2004166702,3693911295,566641036,2325738845,1900695483,3658742634,670639641,2359333576,1376601592,4183093545,79572058,2951190667,1412571757,4285241020,42027983,2849570590,1584630482,4113186307,146858864,2744735649,1481436487,4078262678,251626725,2779131956,1257298860,3785977725,474198542,3071936223,1288682553,3885369576,444388763,2972016970,1183716486,3990331479,272465188,3143944693,1085371155,3957901250,369236657,3176902240,1823819377,3354194592,973483987,2438961922,1787437540,3251868981,1010387014,2539715735,1623951707,3415358858,913891577,2636207144,1727327950,3450690079,809994092,2602447805,1950930981,3742461172,586920327,2309096790,1920450480,3643673441,616879634,2409456323,2016810767,3547309022,780500653,2245839484,2114547866,3578840139,683284792,2212736489,1565424345,4128755208,201134971,2695145386,1534139724,4029196701,230847726,2795225151,1362146803,4201185570,126082129,2899994752,1460654694,4233520823,29146052,2867138325,1169417357,4008333404,318803247,3092855294,1133282072,3906287561,356510394,3194379883,1238182823,3801390966,528368133,3022517972,1341279282,3836475619,423699856,2987954497,256065313,2753203184,1508923011,4071219794,159144116,2720394341,1607414038,4103505351,54390795,2825143514,1435408809,4275514744,84055966,2925208399,1404173884,4175973101,398369141,3169260964,1091422423,3931405318,293717728,3134747185,1194504002,3966442387,465595999,2962872974,1299384317,3861558060,503253450,3064380699,1263296616,3759527097,1052246921,2514597720,1745578539,3276988154,948397084,2480853197,1848905150,3312302447,851889315,2577365106,1685431553,3475771856,888777526,2678071271,1649066644,3373495877,642096605,2367432972,1895232639,3685695662,544930376,2334346905,1992922090,3717211963,708530935,2170742310,2089302869,3620835204,738473314,2271052211,2058837184,3522095121]),pr=new Uint32Array([0,2125799437,1446245579,679924934,121527623,2039184714,1359849868,800622977,243055246,1892260483,1481592389,653946440,155379657,2012727236,1601245954,566506255,486110492,1649169681,1254785495,880779738,466036827,1701972054,1307892880,859962525,310759314,1815146399,1152793433,973282132,364614357,1796125400,1133012510,1027425811,972220984,1195887157,1874927347,292830974,1053603711,1081710450,1761559476,373973945,932073654,1228632251,1639818365,520651888,816844273,1308962300,1719925050,406247735,621518628,1539227433,1933077487,227363810,573948515,1551950446,1946564264,179508901,729228714,1438778791,2101662049,66187628,743012589,1392269536,2054851622,80718891,1944441968,223409277,634790075,1533214902,1960544567,175024442,585661948,1549622769,2107207422,53235443,732600885,1428142648,2057778105,68293556,747947890,1377953663,1864147308,296321377,959403431,1201305002,1747123243,379051046,1041303776,1084500205,1633688546,534068207,928247593,1239863076,1717454501,418080424,812495470,1322816099,1243037256,883039813,472173187,1653729934,1294557967,865878786,454727620,1706014665,1147897030,987669707,307785741,1827491840,1129699713,1038154124,359017802,1808993607,1458457428,677079897,14532511,2120785810,1372591635,795162142,132375256,2035729109,1486025178,640143831,245433617,1880368412,1605151901,555322512,161437782,1999272027,1284643889,841432124,446818554,1679083767,1269580150,890855803,497006013,1663735216,1122936511,1012631218,350048884,1785229945,1171323896,996531189,333647667,1834364734,1349216557,786319648,106470886,2028846571,1465201770,702551143,23511201,2144592044,1578619811,547550126,136587112,1989216101,1495895780,664579817,253393455,1907317282,1969288713,198563332,592642754,1575363279,1918806862,216763203,611147653,1524137864,2065452167,94989450,758102092,1402640449,2082607552,43463117,705815819,1420084486,1771668245,388801304,1068136414,1092573139,1856495186,269680223,949234329,1176570516,1743075739,424679830,836160848,1331948893,1624990940,510543057,921210903,1214099482,1064814657,1103292492,1766079626,401677447,944346374,1190966539,1853514189,282018240,822833871,1337873090,1731757572,428713481,909455240,1216352133,1611062083,515111758,596557149,1564187984,1975339414,185100699,615571482,1510326295,1921193169,204879068,770836435,1397172190,2076308248,91542293,718035604,1417247385,2097131103,38440530,109388409,2016412276,1354159794,772011711,29065022,2131648307,1468566517,691907576,150575351,1984739578,1590324284,545213489,264750512,1903355325,1509175675,658575734,444356453,1690924904,1280287662,855278499,490867234,1677142575,1265762025,902094564,335605227,1790299622,1110645024,1015429421,322875564,1837863073,1158497383,1001940074]),he=64,ur=4,Ae=4096,Rt=65536,hr=127;function yr(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let s=t>>>2;s<16&&(s=16),s=mr(s);let n=s-1,o=new Uint32Array(s),i=[],a=-1>>>0;for(let p=t*16-16;p>=0;p-=16){let u=0;for(let h=1;h<=16;h++)u=(u<<8|r[p+h])^ye[u>>>23];if(u=u>>>0,u===a)i[i.length-1].ptr=p+16;else{a=u;let h=u&n;i.push({ptr:p+16,val:u}),o[h]++}}let f=new Map;for(let p of i){let u=p.val&n,h=f.get(u);h||(h=[],f.set(u,h)),h.push(p)}for(let[p,u]of f){if(u.length<=he)continue;let h=[],y=u.length/he;for(let m=0;m<he;m++)h.push(u[Math.floor(m*y)]);f.set(p,h),o[p]=he}let c=new Uint32Array(s+1),l=[],d=0;for(let p=0;p<s;p++){c[p]=d;let u=f.get(p);if(u){for(let h of u)l.push(h);d+=u.length}}return c[s]=d,{src:r,hashMask:n,buckets:c,entries:l}}function br(r,e,t){if(!r||e.byteLength===0)return null;let s=r.src.byteLength,n=e.byteLength,o=r.src,i=new Uint8Array(Math.max(n,1024)),a=0;function f(y){for(;a+y>i.length;){let m=new Uint8Array(i.length*2);m.set(i),i=m}}a=jt(i,a,s),a=jt(i,a,n),f(18),a++;let c=0,l=0,d=Math.min(16,n);for(let y=0;y<d;y++)i[a++]=e[y],c=(c<<8|e[y])^ye[c>>>23],l++;c=c>>>0;let p=d,u=0,h=0;for(;p<n;){if(h<Ae){c^=pr[e[p-16]],c=((c<<8|e[p])^ye[c>>>23])>>>0;let y=c&r.hashMask,m=r.buckets[y],O=r.buckets[y+1];for(let b=m;b<O;b++){let w=r.entries[b];if(w.val!==c)continue;let R=w.ptr,x=o.byteLength-R,g=n-p;if(x>g&&(x=g),x<=h)break;let P=0;for(;P<x&&o[R+P]===e[p+P];)P++;if(P>h&&(h=P,u=R,h>=Ae))break}}if(h<ur)f(2),l===0&&a++,i[a++]=e[p++],l++,l===hr&&(i[a-l-1]=l,l=0),h=0;else{if(l>0){for(;u>0&&o[u-1]===e[p-1];)if(h++,u--,p--,a--,!(--l>0)){a--,l=-1;break}l>0&&(i[a-l-1]=l),l=0}let y=h>Rt?h-Rt:0;h-=y,f(8);let m=a++,O=128;if(u&255&&(i[a++]=u&255,O|=1),u&65280&&(i[a++]=u>>>8&255,O|=2),u&16711680&&(i[a++]=u>>>16&255,O|=4),u&4278190080&&(i[a++]=u>>>24&255,O|=8),h&255&&(i[a++]=h&255,O|=16),h&65280&&(i[a++]=h>>>8&255,O|=32),i[m]=O,p+=h,u+=h,h=y,u>4294967295&&(h=0),h<Ae){c=0;for(let b=-16;b<0;b++)c=(c<<8|e[p+b])^ye[c>>>23];c=c>>>0}}if(t&&a>t)return null}return l>0&&(i[a-l-1]=l),t&&a>t?null:i.subarray(0,a)}var Ot={blob:0,tree:1,commit:2,tag:3};function Pt(r,e){let t=e?.window??10,s=e?.depth??50,n=r.slice().sort((c,l)=>{let d=Ot[c.type]??99,p=Ot[l.type]??99;return d!==p?d-p:l.content.byteLength-c.content.byteLength}),o=new Map,i=[],a=[],f=[];for(let c=0;c<n.length;c++){let l=n[c],d={hash:l.hash,type:l.type,content:l.content,depth:0},p=null,u=null,h=Math.max(0,c-t);for(let y=c-1;y>=h;y--){let m=n[y];if(m.type!==l.type||(o.get(m.hash)?.depth??0)>=s||l.content.byteLength<m.content.byteLength>>>5)continue;let w=a[y-h]??null;if(!w)continue;let R=p?p.byteLength:l.content.byteLength/2|0;if(R<16)continue;let x=br(w,l.content,R);x&&(!p||x.byteLength<p.byteLength)&&(p=x,u=m.hash)}if(p&&u){d.delta=p,d.deltaBase=u;let y=o.get(u);d.depth=(y?.depth??0)+1}o.set(l.hash,d),i.push(d),a.length>=t&&(a.shift(),f.shift()),a.push(yr(l.content)),f.push(l.hash)}return i}function mr(r){let e=r;return e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e++,e<16?16:e}function jt(r,e,t){let s=t;do{let n=s&127;s>>>=7,s>0&&(n|=128),r[e++]=n}while(s>0);return e}var xr=2147483647;async function Et(r,e,t,s){if(t>=xr)return{shallow:[],unshallow:[...s]};let n=new Map,o=[];for(let c of e)!n.has(c)&&await re(r,c)&&(n.set(c,1),o.push({hash:c,level:1}));let i=new Set,a=0;for(;a<o.length;){let{hash:c,level:l}=o[a++];if(l>=t){i.add(c);continue}let d;try{d=await q(r,c)}catch{continue}for(let p of d.parents)!n.has(p)&&await re(r,p)&&(n.set(p,l+1),o.push({hash:p,level:l+1}))}let f=[];for(let c of s){let l=n.get(c);l!==void 0&&l<t&&f.push(c)}return{shallow:[...i],unshallow:f}}async function ke(r,e,t,s,n){let o=n??s,i=new Set;for(let l of t)await ne(r,l,i,o);let a=[...e];if(n&&s)for(let l of n)try{let d=await q(r,l);for(let p of d.parents)i.has(p)||a.push(p)}catch{}let f=[],c=new Set;for(let l of a)await se(r,l,i,c,f,s);return{count:f.length,objects:gr(f)}}async function It(r,e,t,s,n){let{count:o,objects:i}=await ke(r,e,t,s,n);return{count:o,objects:wr(r,i)}}async function*gr(r){for(let e of r)yield e}async function*wr(r,e){for await(let t of e){let s=await te(r,t.hash);yield{hash:t.hash,type:t.type,content:s.content}}}async function vt(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function ne(r,e,t,s){if(t.has(e)||(t.add(e),!await re(r,e)))return;let n=await te(r,e);switch(n.type){case"commit":{let o=ee(n.content);if(await ne(r,o.tree,t,s),!s?.has(e))for(let i of o.parents)await ne(r,i,t,s);break}case"tree":{let o=ve(n.content);for(let i of o.entries)await ne(r,i.hash,t,s);break}case"tag":{let o=M(n.content);await ne(r,o.object,t,s);break}case"blob":break}}async function se(r,e,t,s,n,o){if(s.has(e)||t.has(e))return;s.add(e);let i=await te(r,e);switch(n.push({hash:e,type:i.type}),i.type){case"commit":{let a=ee(i.content);if(await se(r,a.tree,t,s,n,o),!o?.has(e))for(let f of a.parents)await se(r,f,t,s,n,o);break}case"tree":{let a=ve(i.content);for(let f of a.entries)await se(r,f.hash,t,s,n,o);break}case"tag":{let a=M(i.content);await se(r,a.object,t,s,n,o);break}case"blob":break}}var Rr=new TextEncoder,kt=new TextDecoder,At=65520,Or=new Uint8Array([48,48,48,48]);function j(r){let e=typeof r=="string"?Rr.encode(r):r,t=4+e.byteLength;if(t>At)throw new Error(`pkt-line too long: ${t} bytes (max ${At})`);let s=t.toString(16).padStart(4,"0"),n=new Uint8Array(t);return n[0]=s.charCodeAt(0),n[1]=s.charCodeAt(1),n[2]=s.charCodeAt(2),n[3]=s.charCodeAt(3),n.set(e,4),n}function U(){return Or.slice()}function $(...r){let e=0;for(let n of r)e+=n.byteLength;let t=new Uint8Array(e),s=0;for(let n of r)t.set(n,s),s+=n.byteLength;return t}function St(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let s=kt.decode(r.subarray(t,t+4)),n=parseInt(s,16);if(Number.isNaN(n))throw new Error(`Invalid pkt-line length: ${s}`);if(n===0){e.push({type:"flush"}),t+=4;continue}if(n<4)throw new Error(`Invalid pkt-line length: ${n}`);if(t+n>r.byteLength)throw new Error(`Truncated pkt-line: need ${n} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+n)}),t+=n}return e}function Tt(r){if(r.type==="flush")return"";let e=kt.decode(r.data);return e.endsWith(`
8
+ `)?e.slice(0,-1):e}var Ut=65515;function Ct(r,e,t,s){let n=[];n.push(j(`# service=${e}
9
+ `)),n.push(U());let o=[...t];s&&o.push(`symref=HEAD:${s}`),o.push("agent=just-git/1.0");let i=o.join(" ");if(r.length===0)n.push(j(`0000000000000000000000000000000000000000 capabilities^{}\0${i}
10
+ `));else for(let a=0;a<r.length;a++){let f=r[a];a===0?n.push(j(`${f.hash} ${f.name}\0${i}
11
+ `)):n.push(j(`${f.hash} ${f.name}
12
+ `))}return n.push(U()),$(...n)}function Lt(r){let e=St(r),t=[],s=[],n=[],o=[],i,a=!1;for(let f of e){if(f.type==="flush")continue;let c=Tt(f);if(c.startsWith("want ")){let l=c.slice(5);if(t.length===0){let d=l.indexOf(" ");d!==-1?(t.push(l.slice(0,d)),o=l.slice(d+1).split(" ").filter(Boolean)):t.push(l)}else t.push(l)}else c.startsWith("have ")?s.push(c.slice(5)):c.startsWith("shallow ")?n.push(c.slice(8)):c.startsWith("deepen ")?(i=parseInt(c.slice(7),10),Number.isNaN(i)&&(i=void 0)):c==="done"&&(a=!0)}return{wants:t,haves:s,capabilities:o,clientShallows:n,depth:i,done:a}}function z(r,e,t,s){let n=[];if(s){for(let o of s.shallow)n.push(j(`shallow ${o}
13
+ `));for(let o of s.unshallow)n.push(j(`unshallow ${o}
14
+ `));n.push(U())}if(t&&t.length>0){for(let i of t)n.push(j(`ACK ${i} common
15
+ `));let o=t[t.length-1];n.push(j(`ACK ${o} ready
16
+ `)),n.push(j(`ACK ${o}
17
+ `))}else n.push(j(`NAK
18
+ `));if(e){let o=0;for(;o<r.byteLength;){let i=Math.min(Ut,r.byteLength-o);n.push(Se(1,r.subarray(o,o+i))),o+=i}n.push(U())}else{let o=new Uint8Array(r.byteLength);o.set(r),n.push(o)}return $(...n)}function Ht(r){let e=[];for(let t of r.shallow)e.push(j(`shallow ${t}
19
+ `));for(let t of r.unshallow)e.push(j(`unshallow ${t}
20
+ `));return e.push(U()),$(...e)}async function*Dt(r,e,t,s){if(s){let o=[];for(let i of s.shallow)o.push(j(`shallow ${i}
21
+ `));for(let i of s.unshallow)o.push(j(`unshallow ${i}
22
+ `));o.push(U()),yield $(...o)}let n=[];if(t&&t.length>0){for(let i of t)n.push(j(`ACK ${i} common
23
+ `));let o=t[t.length-1];n.push(j(`ACK ${o} ready
24
+ `)),n.push(j(`ACK ${o}
25
+ `))}else n.push(j(`NAK
26
+ `));if(yield $(...n),e){for await(let o of r){let i=0;for(;i<o.byteLength;){let a=Math.min(Ut,o.byteLength-i);yield Se(1,o.subarray(i,i+a)),i+=a}}yield U()}else for await(let o of r)yield o}function Nt(r){let e=new TextDecoder,t=[],s=[],n=0,o=!1;for(;n<r.byteLength&&!(n+4>r.byteLength);){let a=e.decode(r.subarray(n,n+4)),f=parseInt(a,16);if(Number.isNaN(f))break;if(f===0){o=!0,n+=4;break}if(f<4||n+f>r.byteLength)break;let c=r.subarray(n+4,n+f);n+=f;let l=c.indexOf(0),d;if(l!==-1)d=e.decode(c.subarray(0,l)),s=e.decode(c.subarray(l+1)).replace(/\n$/,"").split(" ").filter(Boolean);else{let u=e.decode(c);d=u.endsWith(`
27
+ `)?u.slice(0,-1):u}let p=d.split(" ");p.length>=3&&t.push({oldHash:p[0],newHash:p[1],refName:p[2]})}let i=n<r.byteLength?r.subarray(n):new Uint8Array(0);return{commands:t,packData:i,capabilities:s,sawFlush:o}}function be(r,e,t){let s=[];s.push(j(r?`unpack ok
28
28
  `:`unpack error
29
- `));for(let o of e)o.ok?s.push(P(`ok ${o.name}
30
- `)):s.push(P(`ng ${o.name} ${o.error??"failed"}
31
- `));s.push(U());let n=H(...s);if(t){let o=[];return o.push(Ae(1,n)),o.push(U()),H(...o)}return n}function Ae(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),P(t)}var z=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,s){if(s.length>0)return null;let n=t.slice().sort();return`${e}\0${n.join(",")}`}get(e){let t=this.entries.get(e);return t?this.hits++:this.misses++,t}set(e,t){if(this.entries.has(e))return;let s=t.packData.byteLength;if(!(s>this.maxBytes)){for(;this.currentBytes+s>this.maxBytes&&this.entries.size>0;){let n=this.entries.keys().next().value;this.currentBytes-=this.entries.get(n).packData.byteLength,this.entries.delete(n)}this.entries.set(e,t),this.currentBytes+=s}}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},xr=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","allow-reachable-sha1-in-want","shallow"],gr=["report-status","side-band-64k","ofs-delta","delete-refs"];async function Se(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),s=[],n=null,o;if(t)if(t.type==="symbolic"){o=t.target;let a=await r.refStore.readRef(t.target);a?.type==="direct"&&(n=a.hash)}else n=t.hash;let i=e.slice().sort((a,f)=>a.name<f.name?-1:a.name>f.name?1:0);if(!n&&i.length>0){let a=Rr(i);a&&(n=a.hash,o=a.name)}n&&s.push({name:"HEAD",hash:n});for(let a of i)if(s.push({name:a.name,hash:a.hash}),a.name.startsWith("refs/tags/"))try{let f=await r.objectStore.read(a.hash);if(f.type==="tag"){let c=D(f.content);s.push({name:`${a.name}^{}`,hash:c.object})}}catch{}return{refs:s,headTarget:o}}var wr=["refs/heads/main","refs/heads/master"];function Rr(r){for(let t of wr){let s=r.find(n=>n.name===t);if(s)return s}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function Ue(r,e,t){return Tt(r,e,e==="git-upload-pack"?xr:gr,t)}async function Te(r,e,t){let{wants:s,haves:n,capabilities:o,clientShallows:i,depth:a,done:f}=Ct(e);if(s.length===0)return q(new Uint8Array(0),!1);let c=o.includes("multi_ack_detailed"),l=o.includes("side-band-64k"),p,d,u;if(i.length>0&&(u=new Set(i)),a!==void 0){let x=await jt(r,s,a,u??new Set);p=x,d=new Set(x.shallow)}if(p&&!f)return Lt(p);let h;if(c&&n.length>0){h=[];for(let x of n)await r.objectStore.exists(x)&&h.push(x);h.length===0&&(h=void 0)}let y=!d&&t?.cache&&t.cacheKey?z.key(t.cacheKey,s,n):null;if(y&&t?.cache){let x=t.cache.get(y);if(x)return q(x.packData,l,h)}return t?.noDelta?Pr(r,s,n,o,l,h,p,d,u):Or(r,s,n,o,l,h,t,y,p,d,u)}async function Pr(r,e,t,s,n,o,i,a,f){let{count:c,objects:l}=await Ee(r,e,t,a,f);if(c===0){let{data:b}=await pe([]),m=q(b,n,o,i);return new ReadableStream({start(g){g.enqueue(m),g.close()}})}let p=[];for await(let b of l)p.push(b);let d=new Set(p.map(b=>b.hash)),u=[];if(s.includes("include-tag")){let b=await r.refStore.listRefs("refs/tags");for(let m of b)if(!d.has(m.hash))try{let g=await r.objectStore.read(m.hash);if(g.type==="tag"){let R=D(g.content);d.has(R.object)&&u.push({hash:m.hash,type:"tag",content:g.content})}}catch{}}let h=p.length+u.length;async function*y(){for(let b of p){let m=await r.objectStore.read(b.hash);yield{type:m.type,content:m.content}}for(let b of u)yield{type:b.type,content:b.content}}let x=mt(h,y()),w=Ht(x,n,o,i);return new ReadableStream({async pull(b){let{value:m,done:g}=await w.next();g?b.close():b.enqueue(m)}})}async function Or(r,e,t,s,n,o,i,a,f,c,l){let p=await kt(r,e,t,c,l);if(p.count===0){let{data:b}=await pe([]);return q(b,n,o,f)}let d=await vt(p),u=new Set(d.map(b=>b.hash));if(s.includes("include-tag")){let b=await r.refStore.listRefs("refs/tags");for(let m of b)if(!u.has(m.hash))try{let g=await r.objectStore.read(m.hash);if(g.type==="tag"){let R=D(g.content);u.has(R.object)&&(d.push({hash:m.hash,type:"tag",content:g.content}),u.add(m.hash))}}catch{}}let h=i?.deltaWindow?{window:i.deltaWindow}:void 0,y=Ot(d,h),x=y.map(b=>({hash:b.hash,type:b.type,content:b.content,delta:b.delta,deltaBaseHash:b.deltaBase})),{data:w}=await pe(x);if(a&&i?.cache){let b=y.filter(m=>m.delta).length;i.cache.set(a,{packData:w,objectCount:d.length,deltaCount:b})}return q(w,n,o,f)}async function Ce(r,e){let{commands:t,packData:s,capabilities:n}=Dt(e),o=!0;if(s.byteLength>0)try{await r.objectStore.ingestPack(s)}catch{o=!1}let i=[];for(let a of t){let f=a.oldHash===be,c=a.newHash===be,l=!1;if(!f&&!c&&o)try{l=await gt(r,a.oldHash,a.newHash)}catch{}i.push({ref:a.refName,oldHash:f?null:a.oldHash,newHash:a.newHash,isFF:l,isCreate:f,isDelete:c})}return{updates:i,unpackOk:o,capabilities:n}}function jr(r){let{resolveRepo:e,hooks:t,basePath:s}=r,n=r.packCache===!1?void 0:new z(r.packCache?.maxBytes);return{async fetch(o){try{let i=new URL(o.url),a=decodeURIComponent(i.pathname);if(s){let f=s.replace(/\/+$/,"");if(!a.startsWith(f))return new Response("Not Found",{status:404});a=a.slice(f.length)}if(a.startsWith("/")||(a=`/${a}`),a.endsWith("/info/refs")&&o.method==="GET"){let f=i.searchParams.get("service");if(f!=="git-upload-pack"&&f!=="git-receive-pack")return new Response("Unsupported service",{status:403});let c=Le(a,"/info/refs"),l=await e(c,o);if(l instanceof Response)return l;if(!l)return new Response("Not Found",{status:404});let p=l,{refs:d,headTarget:u}=await Se(p),h=d;if(t?.advertiseRefs){let x=await t.advertiseRefs({repo:p,repoPath:c,refs:d,service:f,request:o});x&&(h=x)}let y=Ue(h,f,u);return new Response(y,{headers:{"Content-Type":`application/x-${f}-advertisement`,"Cache-Control":"no-cache"}})}if(a.endsWith("/git-upload-pack")&&o.method==="POST"){let f=Le(a,"/git-upload-pack"),c=await e(f,o);if(c instanceof Response)return c;if(!c)return new Response("Not Found",{status:404});let l=c,p=await Nt(o),d=await Te(l,p,{cache:n,cacheKey:f,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(d,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(a.endsWith("/git-receive-pack")&&o.method==="POST"){let f=Le(a,"/git-receive-pack"),c=await e(f,o);if(c instanceof Response)return c;if(!c)return new Response("Not Found",{status:404});let l=c,p=await Nt(o),{updates:d,unpackOk:u,capabilities:h}=await Ce(l,p),y=h.includes("side-band-64k"),x=h.includes("report-status");if(!u){if(x){let m=d.map(g=>({name:g.ref,ok:!1,error:"unpack failed"}));return new Response(ye(!1,m,y),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}if(t?.preReceive){let m=await t.preReceive({repo:l,repoPath:f,updates:d,request:o});if(Y(m)){if(x){let g=m.message??"pre-receive hook declined",R=d.map(O=>({name:O.ref,ok:!1,error:g}));return new Response(ye(!0,R,y),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}}let w=[],b=[];for(let m of d){if(t?.update){let g=await t.update({repo:l,repoPath:f,update:m,request:o});if(Y(g)){w.push({ref:m.ref,ok:!1,error:g.message??"update hook declined"});continue}}try{let g=m.isCreate?null:m.oldHash,R=m.isDelete?null:{type:"direct",hash:m.newHash};if(!await l.refStore.compareAndSwapRef(m.ref,g,R)){w.push({ref:m.ref,ok:!1,error:"failed to lock"});continue}w.push({ref:m.ref,ok:!0}),b.push(m)}catch(g){w.push({ref:m.ref,ok:!1,error:g instanceof Error?g.message:String(g)})}}if(t?.postReceive&&b.length>0)try{await t.postReceive({repo:l,repoPath:f,updates:b,request:o})}catch{}if(x){let m=w.map(g=>({name:g.ref,ok:g.ok,error:g.error}));return new Response(ye(!0,m,y),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response("Not Found",{status:404})}catch(i){return console.error(" [server] Internal error:",i),new Response("Internal Server Error",{status:500})}}}}function Le(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Nt(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let s=new DecompressionStream("gzip"),n=s.writable.getWriter();return n.write(e),n.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}return e}function kr(r){return(e,t)=>{let s=[];e.on("data",n=>s.push(new Uint8Array(n))),e.on("error",()=>{t.writeHead(500),t.end("Internal Server Error")}),e.on("end",()=>{vr(r,e,s,t).catch(()=>{try{t.writeHead(500),t.end("Internal Server Error")}catch{}})})}}async function vr(r,e,t,s){let n=typeof e.headers.host=="string"?e.headers.host:"localhost",o=new URL(e.url??"/",`http://${n}`),i=new Headers;for(let[u,h]of Object.entries(e.headers))if(h!==void 0)if(Array.isArray(h))for(let y of h)i.append(u,y);else i.set(u,h);let a=e.method??"GET",f;if(a!=="GET"&&a!=="HEAD"){let u=0;for(let x of t)u+=x.byteLength;let h=new Uint8Array(u),y=0;for(let x of t)h.set(x,y),y+=x.byteLength;f=h}let c=new Request(o.href,{method:a,headers:i,body:f}),l=await r.fetch(c),p={};l.headers.forEach((u,h)=>{p[h]=u}),s.writeHead(l.status,p);let d=new Uint8Array(await l.arrayBuffer());d.byteLength>0&&s.write(d),s.end()}function Ir(...r){let e=r.filter(a=>a!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},s=e.filter(a=>a.preReceive).map(a=>a.preReceive);s.length>0&&(t.preReceive=async a=>{for(let f of s){let c=await f(a);if(Y(c))return c}});let n=e.filter(a=>a.update).map(a=>a.update);n.length>0&&(t.update=async a=>{for(let f of n){let c=await f(a);if(Y(c))return c}});let o=e.filter(a=>a.postReceive).map(a=>a.postReceive);o.length>0&&(t.postReceive=async a=>{for(let f of o)try{await f(a)}catch{}});let i=e.filter(a=>a.advertiseRefs).map(a=>a.advertiseRefs);return i.length>0&&(t.advertiseRefs=async a=>{let f=a.refs;for(let c of i){let l=await c({...a,refs:f});l&&(f=l)}return f}),t}function Er(r,e){return async(t,s)=>{let n=await r(s);return n instanceof Response?n:n?e(t,s):new Response("Forbidden",{status:403})}}function Ar(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:s=!1,denyDeleteTags:n=!1,authorizePush:o,onPush:i}=r,a=new Set(e.map(c=>c.startsWith("refs/")?c:`refs/heads/${c}`)),f={};return(o||a.size>0)&&(f.preReceive=async c=>{if(o&&!await o(c.request))return{reject:!0,message:"unauthorized"};for(let l of c.updates)if(a.has(l.ref)){if(l.isDelete)return{reject:!0,message:`cannot delete protected branch ${l.ref}`};if(!l.isCreate&&!l.isFF)return{reject:!0,message:`non-fast-forward push to protected branch ${l.ref}`}}}),(t||s||n)&&(f.update=async c=>{if(s&&c.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(n&&c.update.ref.startsWith("refs/tags/")){if(c.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!c.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!c.update.isCreate&&!c.update.isDelete&&!c.update.isFF)return{reject:!0,message:"non-fast-forward"}}),i&&(f.postReceive=i),f}var He=class{objects=new Map;refs=new Map;repo(e){return{objectStore:new De(this.getObjects(e)),refStore:new Ne(this.getRefs(e))}}async deleteRepo(e){this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e)}getObjects(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefs(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}},De=class{constructor(e){this.store=e}async write(e,t){let s=await B(M(e,t));return this.store.has(s)||this.store.set(s,{type:e,content:new Uint8Array(t)}),s}async read(e){let t=this.store.get(e);if(!t)throw new Error(`object ${e} not found`);return{type:t.type,content:new Uint8Array(t.content)}}async exists(e){return this.store.has(e)}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=this.store,o=await G(e,async i=>{let a=n.get(i);return a?{type:a.type,content:new Uint8Array(a.content)}:null});for(let i of o)n.has(i.hash)||n.set(i.hash,{type:i.type,content:i.content});return o.length}async findByPrefix(e){if(e.length<4)return[];let t=[];for(let s of this.store.keys())s.startsWith(e)&&t.push(s);return t}},Ne=class{constructor(e){this.store=e}async readRef(e){return this.store.get(e)??null}async writeRef(e,t){this.store.set(e,F(t))}async deleteRef(e){this.store.delete(e)}async compareAndSwapRef(e,t,s){let n=this.store.get(e)??null,o=null;if(n&&(n.type==="direct"?o=n.hash:n.type==="symbolic"&&(o=this.resolveChain(n.target))),t===null){if(n!==null)return!1}else if(o!==t)return!1;return s===null?this.store.delete(e):this.store.set(e,s),!0}async listRefs(e){let t=[];for(let[s,n]of this.store)if(!(e&&!s.startsWith(e))){if(n.type==="direct")t.push({name:s,hash:n.hash});else if(n.type==="symbolic"){let o=this.resolveChain(n.target);o&&t.push({name:s,hash:o})}}return t}resolveChain(e,t=0){if(t>10)return null;let s=this.store.get(e);return s?s.type==="direct"?s.hash:s.type==="symbolic"?this.resolveChain(s.target,t+1):null:null}};function Sr(r){return{run:e=>r.exec(e),prepare:e=>{let t=r.prepare(e);return{run:(...s)=>t.run(...s),get:(...s)=>t.get(...s)??null,all:(...s)=>t.all(...s)}},transaction:e=>r.transaction(e)}}var Ur=`
29
+ `));for(let o of e)o.ok?s.push(j(`ok ${o.name}
30
+ `)):s.push(j(`ng ${o.name} ${o.error??"failed"}
31
+ `));s.push(U());let n=$(...s);if(t){let o=[];return o.push(Se(1,n)),o.push(U()),$(...o)}return n}function Se(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),j(t)}var oe=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,s){if(s.length>0)return null;let n=t.slice().sort();return`${e}\0${n.join(",")}`}get(e){let t=this.entries.get(e);return t?this.hits++:this.misses++,t}set(e,t){if(this.entries.has(e))return;let s=t.packData.byteLength;if(!(s>this.maxBytes)){for(;this.currentBytes+s>this.maxBytes&&this.entries.size>0;){let n=this.entries.keys().next().value;this.currentBytes-=this.entries.get(n).packData.byteLength,this.entries.delete(n)}this.entries.set(e,t),this.currentBytes+=s}}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},jr=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","allow-reachable-sha1-in-want","shallow"],Pr=["report-status","side-band-64k","ofs-delta","delete-refs"];async function Bt(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),s=[],n=null,o;if(t)if(t.type==="symbolic"){o=t.target;let a=await r.refStore.readRef(t.target);a?.type==="direct"&&(n=a.hash)}else n=t.hash;let i=e.slice().sort((a,f)=>a.name<f.name?-1:a.name>f.name?1:0);if(!n&&i.length>0){let a=Ir(i);a&&(n=a.hash,o=a.name)}n&&s.push({name:"HEAD",hash:n});for(let a of i)if(s.push({name:a.name,hash:a.hash}),a.name.startsWith("refs/tags/"))try{let f=await r.objectStore.read(a.hash);if(f.type==="tag"){let c=M(f.content);s.push({name:`${a.name}^{}`,hash:c.object})}}catch{}return{refs:s,headTarget:o}}var Er=["refs/heads/main","refs/heads/master"];function Ir(r){for(let t of Er){let s=r.find(n=>n.name===t);if(s)return s}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function _t(r,e,t){return Ct(r,e,e==="git-upload-pack"?jr:Pr,t)}async function Wt(r,e,t){let{wants:s,haves:n,capabilities:o,clientShallows:i,depth:a,done:f}=Lt(e);if(s.length===0)return z(new Uint8Array(0),!1);let c=o.includes("multi_ack_detailed"),l=o.includes("side-band-64k"),d,p,u;if(i.length>0&&(u=new Set(i)),a!==void 0){let m=await Et(r,s,a,u??new Set);d=m,p=new Set(m.shallow)}if(d&&!f)return Ht(d);let h;if(c&&n.length>0){h=[];for(let m of n)await r.objectStore.exists(m)&&h.push(m);h.length===0&&(h=void 0)}let y=!p&&t?.cache&&t.cacheKey?oe.key(t.cacheKey,s,n):null;if(y&&t?.cache){let m=t.cache.get(y);if(m)return z(m.packData,l,h)}return t?.noDelta?vr(r,s,n,o,l,h,d,p,u):Ar(r,s,n,o,l,h,t,y,d,p,u)}async function vr(r,e,t,s,n,o,i,a,f){let{count:c,objects:l}=await ke(r,e,t,a,f);if(c===0){let{data:b}=await ue([]),w=z(b,n,o,i);return new ReadableStream({start(R){R.enqueue(w),R.close()}})}let d=[];for await(let b of l)d.push(b);let p=new Set(d.map(b=>b.hash)),u=[];if(s.includes("include-tag")){let b=await r.refStore.listRefs("refs/tags");for(let w of b)if(!p.has(w.hash))try{let R=await r.objectStore.read(w.hash);if(R.type==="tag"){let x=M(R.content);p.has(x.object)&&u.push({hash:w.hash,type:"tag",content:R.content})}}catch{}}let h=d.length+u.length;async function*y(){for(let b of d){let w=await r.objectStore.read(b.hash);yield{type:w.type,content:w.content}}for(let b of u)yield{type:b.type,content:b.content}}let m=xt(h,y()),O=Dt(m,n,o,i);return new ReadableStream({async pull(b){let{value:w,done:R}=await O.next();R?b.close():b.enqueue(w)}})}async function Ar(r,e,t,s,n,o,i,a,f,c,l){let d=await It(r,e,t,c,l);if(d.count===0){let{data:b}=await ue([]);return z(b,n,o,f)}let p=await vt(d),u=new Set(p.map(b=>b.hash));if(s.includes("include-tag")){let b=await r.refStore.listRefs("refs/tags");for(let w of b)if(!u.has(w.hash))try{let R=await r.objectStore.read(w.hash);if(R.type==="tag"){let x=M(R.content);u.has(x.object)&&(p.push({hash:w.hash,type:"tag",content:R.content}),u.add(w.hash))}}catch{}}let h=i?.deltaWindow?{window:i.deltaWindow}:void 0,y=Pt(p,h),m=y.map(b=>({hash:b.hash,type:b.type,content:b.content,delta:b.delta,deltaBaseHash:b.deltaBase})),{data:O}=await ue(m);if(a&&i?.cache){let b=y.filter(w=>w.delta).length;i.cache.set(a,{packData:O,objectCount:p.length,deltaCount:b})}return z(O,n,o,f)}async function $t(r,e){let{commands:t,packData:s,capabilities:n,sawFlush:o}=Nt(e),i=!0;if(s.byteLength>0)try{await r.objectStore.ingestPack(s)}catch{i=!1}let a=[];for(let f of t){let c=f.oldHash===me,l=f.newHash===me,d=!1;if(!c&&!l&&i)try{d=await wt(r,f.oldHash,f.newHash)}catch{}a.push({ref:f.refName,oldHash:c?null:f.oldHash,newHash:f.newHash,isFF:d,isCreate:c,isDelete:l})}return{updates:a,unpackOk:i,capabilities:n,sawFlush:o}}function kr(r){let{resolveRepo:e,hooks:t,basePath:s}=r,n=r.packCache===!1?void 0:new oe(r.packCache?.maxBytes),o=r.onError===!1?void 0:r.onError??(i=>{let a=i instanceof Error?i.message:String(i);console.error(`[server] Internal error: ${a}`)});return{async fetch(i){try{let a=new URL(i.url),f=decodeURIComponent(a.pathname);if(s){let c=s.replace(/\/+$/,"");if(!f.startsWith(c))return new Response("Not Found",{status:404});f=f.slice(c.length)}if(f.startsWith("/")||(f=`/${f}`),f.endsWith("/info/refs")&&i.method==="GET"){let c=a.searchParams.get("service");if(c!=="git-upload-pack"&&c!=="git-receive-pack")return new Response("Unsupported service",{status:403});let l=Te(f,"/info/refs"),d=await e(l,i);if(d instanceof Response)return d;if(!d)return new Response("Not Found",{status:404});let p=d,{refs:u,headTarget:h}=await Bt(p),y=u;if(t?.advertiseRefs){let O=await t.advertiseRefs({repo:p,repoPath:l,refs:u,service:c,request:i});O&&(y=O)}let m=_t(y,c,h);return new Response(m,{headers:{"Content-Type":`application/x-${c}-advertisement`,"Cache-Control":"no-cache"}})}if(f.endsWith("/git-upload-pack")&&i.method==="POST"){let c=Te(f,"/git-upload-pack"),l=await e(c,i);if(l instanceof Response)return l;if(!l)return new Response("Not Found",{status:404});let d=l,p=await Mt(i),u=await Wt(d,p,{cache:n,cacheKey:c,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(u,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(f.endsWith("/git-receive-pack")&&i.method==="POST"){let c=Te(f,"/git-receive-pack"),l=await e(c,i);if(l instanceof Response)return l;if(!l)return new Response("Not Found",{status:404});let d=l,p=await Mt(i),{updates:u,unpackOk:h,capabilities:y,sawFlush:m}=await $t(d,p);if(!m&&u.length===0)return new Response("Bad Request",{status:400});let O=y.includes("side-band-64k"),b=y.includes("report-status");if(!h){if(b){let x=u.map(g=>({name:g.ref,ok:!1,error:"unpack failed"}));return new Response(be(!1,x,O),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}if(t?.preReceive){let x=await t.preReceive({repo:d,repoPath:c,updates:u,request:i});if(Y(x)){if(b){let g=x.message??"pre-receive hook declined",P=u.map(I=>({name:I.ref,ok:!1,error:g}));return new Response(be(!0,P,O),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}}let w=[],R=[];for(let x of u){if(t?.update){let g=await t.update({repo:d,repoPath:c,update:x,request:i});if(Y(g)){w.push({ref:x.ref,ok:!1,error:g.message??"update hook declined"});continue}}try{let g=x.isCreate?null:x.oldHash,P=x.isDelete?null:{type:"direct",hash:x.newHash};if(!await d.refStore.compareAndSwapRef(x.ref,g,P)){w.push({ref:x.ref,ok:!1,error:"failed to lock"});continue}w.push({ref:x.ref,ok:!0}),R.push(x)}catch(g){w.push({ref:x.ref,ok:!1,error:g instanceof Error?g.message:String(g)})}}if(t?.postReceive&&R.length>0)try{await t.postReceive({repo:d,repoPath:c,updates:R,request:i})}catch{}if(b){let x=w.map(g=>({name:g.ref,ok:g.ok,error:g.error}));return new Response(be(!0,x,O),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response("Not Found",{status:404})}catch(a){return o?.(a,i),new Response("Internal Server Error",{status:500})}}}}function Te(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function Mt(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let s=new DecompressionStream("gzip"),n=s.writable.getWriter();return n.write(e),n.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}return e}function Sr(r){return(e,t)=>{let s=[];e.on("data",n=>s.push(new Uint8Array(n))),e.on("error",()=>{t.writeHead(500),t.end("Internal Server Error")}),e.on("end",()=>{Tr(r,e,s,t).catch(()=>{try{t.writeHead(500),t.end("Internal Server Error")}catch{}})})}}async function Tr(r,e,t,s){let n=typeof e.headers.host=="string"?e.headers.host:"localhost",o=new URL(e.url??"/",`http://${n}`),i=new Headers;for(let[u,h]of Object.entries(e.headers))if(h!==void 0)if(Array.isArray(h))for(let y of h)i.append(u,y);else i.set(u,h);let a=e.method??"GET",f;if(a!=="GET"&&a!=="HEAD"){let u=0;for(let m of t)u+=m.byteLength;let h=new Uint8Array(u),y=0;for(let m of t)h.set(m,y),y+=m.byteLength;f=h}let c=new Request(o.href,{method:a,headers:i,body:f}),l=await r.fetch(c),d={};l.headers.forEach((u,h)=>{d[h]=u}),s.writeHead(l.status,d);let p=new Uint8Array(await l.arrayBuffer());p.byteLength>0&&s.write(p),s.end()}function Ur(...r){let e=r.filter(a=>a!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},s=e.filter(a=>a.preReceive).map(a=>a.preReceive);s.length>0&&(t.preReceive=async a=>{for(let f of s){let c=await f(a);if(Y(c))return c}});let n=e.filter(a=>a.update).map(a=>a.update);n.length>0&&(t.update=async a=>{for(let f of n){let c=await f(a);if(Y(c))return c}});let o=e.filter(a=>a.postReceive).map(a=>a.postReceive);o.length>0&&(t.postReceive=async a=>{for(let f of o)try{await f(a)}catch{}});let i=e.filter(a=>a.advertiseRefs).map(a=>a.advertiseRefs);return i.length>0&&(t.advertiseRefs=async a=>{let f=a.refs;for(let c of i){let l=await c({...a,refs:f});l&&(f=l)}return f}),t}function Cr(r,e){return async(t,s)=>{let n=await r(s);return n instanceof Response?n:n?e(t,s):new Response("Forbidden",{status:403})}}function Lr(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:s=!1,denyDeleteTags:n=!1,authorizePush:o,onPush:i}=r,a=new Set(e.map(c=>c.startsWith("refs/")?c:`refs/heads/${c}`)),f={};return(o||a.size>0)&&(f.preReceive=async c=>{if(o&&!await o(c.request))return{reject:!0,message:"unauthorized"};for(let l of c.updates)if(a.has(l.ref)){if(l.isDelete)return{reject:!0,message:`cannot delete protected branch ${l.ref}`};if(!l.isCreate&&!l.isFF)return{reject:!0,message:`non-fast-forward push to protected branch ${l.ref}`}}}),(t||s||n)&&(f.update=async c=>{if(s&&c.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(n&&c.update.ref.startsWith("refs/tags/")){if(c.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!c.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!c.update.isCreate&&!c.update.isDelete&&!c.update.isFF)return{reject:!0,message:"non-fast-forward"}}),i&&(f.postReceive=i),f}var Ue=class{objects=new Map;refs=new Map;repo(e){return{objectStore:new Ce(this.getObjects(e)),refStore:new Le(this.getRefs(e))}}async deleteRepo(e){this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e)}getObjects(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefs(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}},Ce=class{constructor(e){this.store=e}async write(e,t){let s=await D(_(e,t));return this.store.has(s)||this.store.set(s,{type:e,content:new Uint8Array(t)}),s}async read(e){let t=this.store.get(e);if(!t)throw new Error(`object ${e} not found`);return{type:t.type,content:new Uint8Array(t.content)}}async exists(e){return this.store.has(e)}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=this.store,o=await B(e,async i=>{let a=n.get(i);return a?{type:a.type,content:new Uint8Array(a.content)}:null});for(let i of o)n.has(i.hash)||n.set(i.hash,{type:i.type,content:i.content});return o.length}async findByPrefix(e){if(e.length<4)return[];let t=[];for(let s of this.store.keys())s.startsWith(e)&&t.push(s);return t}},Le=class{constructor(e){this.store=e}async readRef(e){return this.store.get(e)??null}async writeRef(e,t){this.store.set(e,W(t))}async deleteRef(e){this.store.delete(e)}async compareAndSwapRef(e,t,s){let n=this.store.get(e)??null,o=null;if(n&&(n.type==="direct"?o=n.hash:n.type==="symbolic"&&(o=this.resolveChain(n.target))),t===null){if(n!==null)return!1}else if(o!==t)return!1;return s===null?this.store.delete(e):this.store.set(e,s),!0}async listRefs(e){let t=[];for(let[s,n]of this.store)if(!(e&&!s.startsWith(e))){if(n.type==="direct")t.push({name:s,hash:n.hash});else if(n.type==="symbolic"){let o=this.resolveChain(n.target);o&&t.push({name:s,hash:o})}}return t}resolveChain(e,t=0){if(t>10)return null;let s=this.store.get(e);return s?s.type==="direct"?s.hash:s.type==="symbolic"?this.resolveChain(s.target,t+1):null:null}};var Hr=`
32
32
  CREATE TABLE IF NOT EXISTS git_objects (
33
33
  repo_id TEXT NOT NULL,
34
34
  hash TEXT NOT NULL,
@@ -45,7 +45,24 @@ CREATE TABLE IF NOT EXISTS git_refs (
45
45
  target TEXT,
46
46
  PRIMARY KEY (repo_id, name)
47
47
  ) WITHOUT ROWID;
48
- `;function Tr(r){return{objInsert:r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)"),objRead:r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?"),objExists:r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1"),objPrefix:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?"),objDeleteAll:r.prepare("DELETE FROM git_objects WHERE repo_id = ?"),refRead:r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?"),refWrite:r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)"),refDelete:r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?"),refList:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?"),refListAll:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?"),refDeleteAll:r.prepare("DELETE FROM git_refs WHERE repo_id = ?")}}var Be=class{db;stmts;ingestTx;constructor(e){this.db=e,e.run(Ur),this.stmts=Tr(e),this.ingestTx=e.transaction(t=>{for(let s of t)this.stmts.objInsert.run(s.repoId,s.hash,s.type,s.content)})}repo(e){return{objectStore:new $e(this.stmts,this.ingestTx,e),refStore:new _e(this.stmts,this.db,e)}}async deleteRepo(e){this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e)}},$e=class{constructor(e,t,s){this.stmts=e;this.ingestTx=t;this.repoId=s;this.cache=new $}cache;async write(e,t){let s=M(e,t),n=await B(s);return this.stmts.objInsert.run(this.repoId,n,e,t),n}async read(e){let t=this.cache.get(e);if(t)return t;let s=this.stmts.objRead.get(this.repoId,e);if(!s)throw new Error(`object ${e} not found`);let n={type:s.type,content:new Uint8Array(s.content)};return this.cache.set(e,n),n}async exists(e){return this.stmts.objExists.get(this.repoId,e)!==null}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=await G(e,async i=>{let a=this.stmts.objRead.get(this.repoId,i);return a?{type:a.type,content:new Uint8Array(a.content)}:null}),o=n.map(i=>({repoId:this.repoId,hash:i.hash,type:i.type,content:i.content}));return this.ingestTx(o),n.length}async findByPrefix(e){return e.length<4?[]:this.stmts.objPrefix.all(this.repoId,`${e}*`).map(s=>s.hash)}},_e=class{constructor(e,t,s){this.stmts=e;this.repoId=s;let n=e,o=s;this.casTx=t.transaction((i,a,f)=>{let c=n.refRead.get(o,i),l=null;if(c&&(c.type==="direct"?l=c.hash:c.type==="symbolic"&&c.target&&(l=Ge(n,o,c.target))),a===null){if(c!==null)return!1}else if(l!==a)return!1;return f===null?n.refDelete.run(o,i):f.type==="symbolic"?n.refWrite.run(o,i,"symbolic",null,f.target):n.refWrite.run(o,i,"direct",f.hash,null),!0})}casTx;async readRef(e){let t=this.stmts.refRead.get(this.repoId,e);return t?t.type==="symbolic"?{type:"symbolic",target:t.target}:{type:"direct",hash:t.hash}:null}async writeRef(e,t){let s=F(t);s.type==="symbolic"?this.stmts.refWrite.run(this.repoId,e,"symbolic",null,s.target):this.stmts.refWrite.run(this.repoId,e,"direct",s.hash,null)}async deleteRef(e){this.stmts.refDelete.run(this.repoId,e)}async compareAndSwapRef(e,t,s){return this.casTx(e,t,s)}async listRefs(e){let t;e?t=this.stmts.refList.all(this.repoId,`${e}*`):t=this.stmts.refListAll.all(this.repoId);let s=[];for(let n of t)if(n.type==="direct"&&n.hash)s.push({name:n.name,hash:n.hash});else if(n.type==="symbolic"&&n.target){let o=Ge(this.stmts,this.repoId,n.target);o&&s.push({name:n.name,hash:o})}return s}};function Ge(r,e,t,s=0){if(s>10)return null;let n=r.refRead.get(e,t);return n?n.type==="direct"?n.hash:n.type==="symbolic"&&n.target?Ge(r,e,n.target,s+1):null:null}function Cr(r){return{query:(e,t)=>r.query(e,t),async transaction(e){let t=await r.connect();try{await t.query("BEGIN");let n=await e({query:(o,i)=>t.query(o,i),transaction:()=>{throw new Error("nested transactions not supported")}});return await t.query("COMMIT"),n}catch(s){throw await t.query("ROLLBACK"),s}finally{t.release()}}}}var Lr=`
48
+ `;function Dr(r){return{objInsert:r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)"),objRead:r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?"),objExists:r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1"),objPrefix:r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?"),objDeleteAll:r.prepare("DELETE FROM git_objects WHERE repo_id = ?"),refRead:r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?"),refWrite:r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)"),refDelete:r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?"),refList:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?"),refListAll:r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?"),refDeleteAll:r.prepare("DELETE FROM git_refs WHERE repo_id = ?")}}var He=class{db;stmts;ingestTx;constructor(e){this.db=e,e.run(Hr),this.stmts=Dr(e),this.ingestTx=e.transaction(t=>{for(let s of t)this.stmts.objInsert.run(s.repoId,s.hash,s.type,s.content)})}repo(e){return{objectStore:new De(this.stmts,this.ingestTx,e),refStore:new Ne(this.stmts,this.db,e)}}async deleteRepo(e){this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e)}},De=class{constructor(e,t,s){this.stmts=e;this.ingestTx=t;this.repoId=s;this.cache=new N}cache;async write(e,t){let s=_(e,t),n=await D(s);return this.stmts.objInsert.run(this.repoId,n,e,t),n}async read(e){let t=this.cache.get(e);if(t)return t;let s=this.stmts.objRead.get(this.repoId,e);if(!s)throw new Error(`object ${e} not found`);let n={type:s.type,content:new Uint8Array(s.content)};return this.cache.set(e,n),n}async exists(e){return this.stmts.objExists.get(this.repoId,e)!==null}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=await B(e,async i=>{let a=this.stmts.objRead.get(this.repoId,i);return a?{type:a.type,content:new Uint8Array(a.content)}:null}),o=n.map(i=>({repoId:this.repoId,hash:i.hash,type:i.type,content:i.content}));return this.ingestTx(o),n.length}async findByPrefix(e){return e.length<4?[]:this.stmts.objPrefix.all(this.repoId,`${e}*`).map(s=>s.hash)}},Ne=class{constructor(e,t,s){this.stmts=e;this.repoId=s;let n=e,o=s;this.casTx=t.transaction((i,a,f)=>{let c=n.refRead.get(o,i),l=null;if(c&&(c.type==="direct"?l=c.hash:c.type==="symbolic"&&c.target&&(l=Be(n,o,c.target))),a===null){if(c!==null)return!1}else if(l!==a)return!1;return f===null?n.refDelete.run(o,i):f.type==="symbolic"?n.refWrite.run(o,i,"symbolic",null,f.target):n.refWrite.run(o,i,"direct",f.hash,null),!0})}casTx;async readRef(e){let t=this.stmts.refRead.get(this.repoId,e);return t?t.type==="symbolic"?{type:"symbolic",target:t.target}:{type:"direct",hash:t.hash}:null}async writeRef(e,t){let s=W(t);s.type==="symbolic"?this.stmts.refWrite.run(this.repoId,e,"symbolic",null,s.target):this.stmts.refWrite.run(this.repoId,e,"direct",s.hash,null)}async deleteRef(e){this.stmts.refDelete.run(this.repoId,e)}async compareAndSwapRef(e,t,s){return this.casTx(e,t,s)}async listRefs(e){let t;e?t=this.stmts.refList.all(this.repoId,`${e}*`):t=this.stmts.refListAll.all(this.repoId);let s=[];for(let n of t)if(n.type==="direct"&&n.hash)s.push({name:n.name,hash:n.hash});else if(n.type==="symbolic"&&n.target){let o=Be(this.stmts,this.repoId,n.target);o&&s.push({name:n.name,hash:o})}return s}};function Be(r,e,t,s=0){if(s>10)return null;let n=r.refRead.get(e,t);return n?n.type==="direct"?n.hash:n.type==="symbolic"&&n.target?Be(r,e,n.target,s+1):null:null}var Nr=`
49
+ CREATE TABLE IF NOT EXISTS git_objects (
50
+ repo_id TEXT NOT NULL,
51
+ hash TEXT NOT NULL,
52
+ type TEXT NOT NULL,
53
+ content BLOB NOT NULL,
54
+ PRIMARY KEY (repo_id, hash)
55
+ ) WITHOUT ROWID;
56
+
57
+ CREATE TABLE IF NOT EXISTS git_refs (
58
+ repo_id TEXT NOT NULL,
59
+ name TEXT NOT NULL,
60
+ type TEXT NOT NULL CHECK(type IN ('direct', 'symbolic')),
61
+ hash TEXT,
62
+ target TEXT,
63
+ PRIMARY KEY (repo_id, name)
64
+ ) WITHOUT ROWID;
65
+ `;function k(r){return{run:(...e)=>{r.run(...e)},get:(...e)=>r.get(...e)??null,all:(...e)=>r.all(...e)}}function Br(r){return{objInsert:k(r.prepare("INSERT OR IGNORE INTO git_objects (repo_id, hash, type, content) VALUES (?, ?, ?, ?)")),objRead:k(r.prepare("SELECT type, content FROM git_objects WHERE repo_id = ? AND hash = ?")),objExists:k(r.prepare("SELECT 1 FROM git_objects WHERE repo_id = ? AND hash = ? LIMIT 1")),objPrefix:k(r.prepare("SELECT hash FROM git_objects WHERE repo_id = ? AND hash GLOB ?")),objDeleteAll:k(r.prepare("DELETE FROM git_objects WHERE repo_id = ?")),refRead:k(r.prepare("SELECT type, hash, target FROM git_refs WHERE repo_id = ? AND name = ?")),refWrite:k(r.prepare("INSERT OR REPLACE INTO git_refs (repo_id, name, type, hash, target) VALUES (?, ?, ?, ?, ?)")),refDelete:k(r.prepare("DELETE FROM git_refs WHERE repo_id = ? AND name = ?")),refList:k(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ? AND name GLOB ?")),refListAll:k(r.prepare("SELECT name, type, hash, target FROM git_refs WHERE repo_id = ?")),refDeleteAll:k(r.prepare("DELETE FROM git_refs WHERE repo_id = ?"))}}var _e=class{db;stmts;ingestTx;constructor(e){this.db=e,e.exec(Nr),this.stmts=Br(e),this.ingestTx=e.transaction(t=>{for(let s of t)this.stmts.objInsert.run(s.repoId,s.hash,s.type,s.content)})}repo(e){return{objectStore:new We(this.stmts,this.ingestTx,e),refStore:new $e(this.stmts,this.db,e)}}async deleteRepo(e){this.stmts.objDeleteAll.run(e),this.stmts.refDeleteAll.run(e)}},We=class{constructor(e,t,s){this.stmts=e;this.ingestTx=t;this.repoId=s;this.cache=new N}cache;async write(e,t){let s=_(e,t),n=await D(s);return this.stmts.objInsert.run(this.repoId,n,e,t),n}async read(e){let t=this.cache.get(e);if(t)return t;let s=this.stmts.objRead.get(this.repoId,e);if(!s)throw new Error(`object ${e} not found`);let n={type:s.type,content:new Uint8Array(s.content)};return this.cache.set(e,n),n}async exists(e){return this.stmts.objExists.get(this.repoId,e)!==null}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=await B(e,async i=>{let a=this.stmts.objRead.get(this.repoId,i);return a?{type:a.type,content:new Uint8Array(a.content)}:null}),o=n.map(i=>({repoId:this.repoId,hash:i.hash,type:i.type,content:i.content}));return this.ingestTx(o),n.length}async findByPrefix(e){return e.length<4?[]:this.stmts.objPrefix.all(this.repoId,`${e}*`).map(s=>s.hash)}},$e=class{constructor(e,t,s){this.stmts=e;this.repoId=s;let n=e,o=s;this.casTx=t.transaction((i,a,f)=>{let c=n.refRead.get(o,i),l=null;if(c&&(c.type==="direct"?l=c.hash:c.type==="symbolic"&&c.target&&(l=Me(n,o,c.target))),a===null){if(c!==null)return!1}else if(l!==a)return!1;return f===null?n.refDelete.run(o,i):f.type==="symbolic"?n.refWrite.run(o,i,"symbolic",null,f.target):n.refWrite.run(o,i,"direct",f.hash,null),!0})}casTx;async readRef(e){let t=this.stmts.refRead.get(this.repoId,e);return t?t.type==="symbolic"?{type:"symbolic",target:t.target}:{type:"direct",hash:t.hash}:null}async writeRef(e,t){let s=W(t);s.type==="symbolic"?this.stmts.refWrite.run(this.repoId,e,"symbolic",null,s.target):this.stmts.refWrite.run(this.repoId,e,"direct",s.hash,null)}async deleteRef(e){this.stmts.refDelete.run(this.repoId,e)}async compareAndSwapRef(e,t,s){return this.casTx(e,t,s)}async listRefs(e){let t;e?t=this.stmts.refList.all(this.repoId,`${e}*`):t=this.stmts.refListAll.all(this.repoId);let s=[];for(let n of t)if(n.type==="direct"&&n.hash)s.push({name:n.name,hash:n.hash});else if(n.type==="symbolic"&&n.target){let o=Me(this.stmts,this.repoId,n.target);o&&s.push({name:n.name,hash:o})}return s}};function Me(r,e,t,s=0){if(s>10)return null;let n=r.refRead.get(e,t);return n?n.type==="direct"?n.hash:n.type==="symbolic"&&n.target?Me(r,e,n.target,s+1):null:null}function _r(r){return{query:(e,t)=>r.query(e,t),async transaction(e){let t=await r.connect();try{await t.query("BEGIN");let n=await e({query:(o,i)=>t.query(o,i),transaction:()=>{throw new Error("nested transactions not supported")}});return await t.query("COMMIT"),n}catch(s){throw await t.query("ROLLBACK"),s}finally{t.release()}}}}var Wr=`
49
66
  CREATE TABLE IF NOT EXISTS git_objects (
50
67
  repo_id TEXT NOT NULL,
51
68
  hash TEXT NOT NULL,
@@ -62,5 +79,5 @@ CREATE TABLE IF NOT EXISTS git_refs (
62
79
  target TEXT,
63
80
  PRIMARY KEY (repo_id, name)
64
81
  );
65
- `,j={objInsert:"INSERT INTO git_objects (repo_id, hash, type, content) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING",objRead:"SELECT type, content FROM git_objects WHERE repo_id = $1 AND hash = $2",objExists:"SELECT 1 FROM git_objects WHERE repo_id = $1 AND hash = $2 LIMIT 1",objPrefix:"SELECT hash FROM git_objects WHERE repo_id = $1 AND hash LIKE $2",objDeleteAll:"DELETE FROM git_objects WHERE repo_id = $1",refRead:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2",refReadForUpdate:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2 FOR UPDATE",refWrite:`INSERT INTO git_refs (repo_id, name, type, hash, target) VALUES ($1, $2, $3, $4, $5)
66
- 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"},Me=class r{constructor(e){this.db=e}static async create(e){return await e.query(Lr),new r(e)}repo(e){return{objectStore:new We(this.db,e),refStore:new Fe(this.db,e)}}async deleteRepo(e){await this.db.query(j.objDeleteAll,[e]),await this.db.query(j.refDeleteAll,[e])}},We=class{constructor(e,t){this.db=e;this.repoId=t;this.cache=new $}cache;async write(e,t){let s=M(e,t),n=await B(s);return await this.db.query(j.objInsert,[this.repoId,n,e,t]),n}async read(e){let t=this.cache.get(e);if(t)return t;let{rows:s}=await this.db.query(j.objRead,[this.repoId,e]),n=s[0];if(!n)throw new Error(`object ${e} not found`);let o={type:n.type,content:new Uint8Array(n.content)};return this.cache.set(e,o),o}async exists(e){let{rows:t}=await this.db.query(j.objExists,[this.repoId,e]);return t.length>0}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=this.db,o=this.repoId,i=await G(e,async a=>{let{rows:f}=await n.query(j.objRead,[o,a]),c=f[0];return c?{type:c.type,content:new Uint8Array(c.content)}:null});return await n.transaction(async a=>{for(let f of i)await a.query(j.objInsert,[o,f.hash,f.type,f.content])}),i.length}async findByPrefix(e){if(e.length<4)return[];let{rows:t}=await this.db.query(j.objPrefix,[this.repoId,`${e}%`]);return t.map(s=>s.hash)}},Fe=class{constructor(e,t){this.db=e;this.repoId=t}async readRef(e){let{rows:t}=await this.db.query(j.refRead,[this.repoId,e]),s=t[0];return s?s.type==="symbolic"?{type:"symbolic",target:s.target}:{type:"direct",hash:s.hash}:null}async writeRef(e,t){let s=F(t);s.type==="symbolic"?await this.db.query(j.refWrite,[this.repoId,e,"symbolic",null,s.target]):await this.db.query(j.refWrite,[this.repoId,e,"direct",s.hash,null])}async deleteRef(e){await this.db.query(j.refDelete,[this.repoId,e])}async compareAndSwapRef(e,t,s){return this.db.transaction(async n=>{let{rows:o}=await n.query(j.refReadForUpdate,[this.repoId,e]),i=o[0]??null,a=null;if(i&&(i.type==="direct"?a=i.hash:i.type==="symbolic"&&i.target&&(a=await qe(n,this.repoId,i.target))),t===null){if(i!==null)return!1}else if(a!==t)return!1;return s===null?await n.query(j.refDelete,[this.repoId,e]):s.type==="symbolic"?await n.query(j.refWrite,[this.repoId,e,"symbolic",null,s.target]):await n.query(j.refWrite,[this.repoId,e,"direct",s.hash,null]),!0})}async listRefs(e){let t;e?{rows:t}=await this.db.query(j.refList,[this.repoId,`${e}%`]):{rows:t}=await this.db.query(j.refListAll,[this.repoId]);let s=[];for(let n of t)if(n.type==="direct"&&n.hash)s.push({name:n.name,hash:n.hash});else if(n.type==="symbolic"&&n.target){let o=await qe(this.db,this.repoId,n.target);o&&s.push({name:n.name,hash:o})}return s}};async function qe(r,e,t,s=0){if(s>10)return null;let{rows:n}=await r.query(j.refRead,[e,t]),o=n[0];return o?o.type==="direct"?o.hash:o.type==="symbolic"&&o.target?qe(r,e,o.target,s+1):null:null}export{He as MemoryStorage,z as PackCache,Me as PgStorage,Be as SqliteStorage,Ue as buildRefAdvertisementBytes,Se as collectRefs,Ir as composeHooks,jr as createGitServer,Ar as createStandardHooks,Te as handleUploadPack,Ce as ingestReceivePack,kr as toNodeHandler,Er as withAuth,Sr as wrapBetterSqlite3,Cr as wrapPgPool};
82
+ `,E={objInsert:"INSERT INTO git_objects (repo_id, hash, type, content) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING",objRead:"SELECT type, content FROM git_objects WHERE repo_id = $1 AND hash = $2",objExists:"SELECT 1 FROM git_objects WHERE repo_id = $1 AND hash = $2 LIMIT 1",objPrefix:"SELECT hash FROM git_objects WHERE repo_id = $1 AND hash LIKE $2",objDeleteAll:"DELETE FROM git_objects WHERE repo_id = $1",refRead:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2",refReadForUpdate:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2 FOR UPDATE",refWrite:`INSERT INTO git_refs (repo_id, name, type, hash, target) VALUES ($1, $2, $3, $4, $5)
83
+ ON CONFLICT (repo_id, name) DO UPDATE SET type = EXCLUDED.type, hash = EXCLUDED.hash, target = EXCLUDED.target`,refDelete:"DELETE FROM git_refs WHERE repo_id = $1 AND name = $2",refList:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1 AND name LIKE $2",refListAll:"SELECT name, type, hash, target FROM git_refs WHERE repo_id = $1",refDeleteAll:"DELETE FROM git_refs WHERE repo_id = $1"},Ge=class r{constructor(e){this.db=e}static async create(e){return await e.query(Wr),new r(e)}repo(e){return{objectStore:new Fe(this.db,e),refStore:new qe(this.db,e)}}async deleteRepo(e){await this.db.query(E.objDeleteAll,[e]),await this.db.query(E.refDeleteAll,[e])}},Fe=class{constructor(e,t){this.db=e;this.repoId=t;this.cache=new N}cache;async write(e,t){let s=_(e,t),n=await D(s);return await this.db.query(E.objInsert,[this.repoId,n,e,t]),n}async read(e){let t=this.cache.get(e);if(t)return t;let{rows:s}=await this.db.query(E.objRead,[this.repoId,e]),n=s[0];if(!n)throw new Error(`object ${e} not found`);let o={type:n.type,content:new Uint8Array(n.content)};return this.cache.set(e,o),o}async exists(e){let{rows:t}=await this.db.query(E.objExists,[this.repoId,e]);return t.length>0}async ingestPack(e){if(e.byteLength<32||new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(8)===0)return 0;let n=this.db,o=this.repoId,i=await B(e,async a=>{let{rows:f}=await n.query(E.objRead,[o,a]),c=f[0];return c?{type:c.type,content:new Uint8Array(c.content)}:null});return await n.transaction(async a=>{for(let f of i)await a.query(E.objInsert,[o,f.hash,f.type,f.content])}),i.length}async findByPrefix(e){if(e.length<4)return[];let{rows:t}=await this.db.query(E.objPrefix,[this.repoId,`${e}%`]);return t.map(s=>s.hash)}},qe=class{constructor(e,t){this.db=e;this.repoId=t}async readRef(e){let{rows:t}=await this.db.query(E.refRead,[this.repoId,e]),s=t[0];return s?s.type==="symbolic"?{type:"symbolic",target:s.target}:{type:"direct",hash:s.hash}:null}async writeRef(e,t){let s=W(t);s.type==="symbolic"?await this.db.query(E.refWrite,[this.repoId,e,"symbolic",null,s.target]):await this.db.query(E.refWrite,[this.repoId,e,"direct",s.hash,null])}async deleteRef(e){await this.db.query(E.refDelete,[this.repoId,e])}async compareAndSwapRef(e,t,s){return this.db.transaction(async n=>{let{rows:o}=await n.query(E.refReadForUpdate,[this.repoId,e]),i=o[0]??null,a=null;if(i&&(i.type==="direct"?a=i.hash:i.type==="symbolic"&&i.target&&(a=await ze(n,this.repoId,i.target))),t===null){if(i!==null)return!1}else if(a!==t)return!1;return s===null?await n.query(E.refDelete,[this.repoId,e]):s.type==="symbolic"?await n.query(E.refWrite,[this.repoId,e,"symbolic",null,s.target]):await n.query(E.refWrite,[this.repoId,e,"direct",s.hash,null]),!0})}async listRefs(e){let t;e?{rows:t}=await this.db.query(E.refList,[this.repoId,`${e}%`]):{rows:t}=await this.db.query(E.refListAll,[this.repoId]);let s=[];for(let n of t)if(n.type==="direct"&&n.hash)s.push({name:n.name,hash:n.hash});else if(n.type==="symbolic"&&n.target){let o=await ze(this.db,this.repoId,n.target);o&&s.push({name:n.name,hash:o})}return s}};async function ze(r,e,t,s=0){if(s>10)return null;let{rows:n}=await r.query(E.refRead,[e,t]),o=n[0];return o?o.type==="direct"?o.hash:o.type==="symbolic"&&o.target?ze(r,e,o.target,s+1):null:null}export{_e as BetterSqlite3Storage,He as BunSqliteStorage,Ue as MemoryStorage,Ge as PgStorage,Ur as composeHooks,kr as createGitServer,Lr as createStandardHooks,Sr as toNodeHandler,Cr as withAuth,_r as wrapPgPool};