just-git 1.3.5 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/dist/{hooks-t3k-y0u_.d.ts → hooks-DNBNCTgb.d.ts} +7 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/repo/index.d.ts +119 -4
- package/dist/repo/index.js +11 -10
- package/dist/server/index.d.ts +3 -1
- package/dist/server/index.js +14 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -99,7 +99,15 @@ Uses web-standard `Request`/`Response`. Works with Bun, Hono, Cloudflare Workers
|
|
|
99
99
|
Everything operates on `GitRepo`, a minimal `{ objectStore, refStore }` interface shared by the client and server. A `GitRepo` can be backed by a virtual filesystem, SQLite, Postgres, or any custom storage. The same helpers work inside both client-side hooks and server-side hooks, and `createWorktree` lets you spin up a full git client against a database-backed repo.
|
|
100
100
|
|
|
101
101
|
```ts
|
|
102
|
-
import { readFileAtCommit, getChangedFiles, mergeTrees } from "just-git/repo";
|
|
102
|
+
import { commit, readFileAtCommit, getChangedFiles, mergeTrees } from "just-git/repo";
|
|
103
|
+
|
|
104
|
+
// Commit files to a branch — handles blobs, trees, parents, and refs
|
|
105
|
+
await commit(repo, {
|
|
106
|
+
files: { "README.md": "# Hello\n", "src/index.ts": "export {};\n" },
|
|
107
|
+
message: "initial commit\n",
|
|
108
|
+
author: { name: "Alice", email: "alice@example.com" },
|
|
109
|
+
branch: "main",
|
|
110
|
+
});
|
|
103
111
|
|
|
104
112
|
const content = await readFileAtCommit(repo, commitHash, "src/index.ts");
|
|
105
113
|
const changes = await getChangedFiles(repo, parentHash, commitHash);
|
|
@@ -105,6 +105,12 @@ interface RawObject {
|
|
|
105
105
|
type: ObjectType;
|
|
106
106
|
content: Uint8Array;
|
|
107
107
|
}
|
|
108
|
+
interface TreeEntry {
|
|
109
|
+
/** e.g. "100644", "040000", "100755", "120000", "160000" */
|
|
110
|
+
mode: string;
|
|
111
|
+
name: string;
|
|
112
|
+
hash: ObjectId;
|
|
113
|
+
}
|
|
108
114
|
/** Author or committer identity with timestamp. */
|
|
109
115
|
interface Identity {
|
|
110
116
|
name: string;
|
|
@@ -647,4 +653,4 @@ interface GitHooks {
|
|
|
647
653
|
*/
|
|
648
654
|
declare function composeGitHooks(...hookSets: (GitHooks | undefined)[]): GitHooks;
|
|
649
655
|
|
|
650
|
-
export { type Ref as $, type AfterCommandEvent as A, type BeforeCommandEvent as B, type CredentialProvider as C, type DirectRef as D, type ExecResult as E, type FileSystem as F, type GitHooks as G, type HttpAuth as H, type IdentityOverride as I, type PreCleanEvent as J, type PreCloneEvent as K, type PreCommitEvent as L, type MergeMsgEvent as M, type NetworkPolicy as N, type ObjectStore as O, type PackObject as P, type PreFetchEvent as Q, type RemoteResolver as R, type PreMergeCommitEvent as S, type PrePullEvent as T, type PrePushEvent as U, type PreRebaseEvent as V, type PreResetEvent as W, type PreRevertEvent as X, type PreRmEvent as Y, type PreStashEvent as Z, type RawObject as _, type RefStore as a, type RefDeleteEvent as a0, type RefEntry as a1, type RefUpdateEvent as a2, type Rejection as a3, type SymbolicRef as a4, composeGitHooks as a5, isRejection as a6, type
|
|
656
|
+
export { type Ref as $, type AfterCommandEvent as A, type BeforeCommandEvent as B, type CredentialProvider as C, type DirectRef as D, type ExecResult as E, type FileSystem as F, type GitHooks as G, type HttpAuth as H, type IdentityOverride as I, type PreCleanEvent as J, type PreCloneEvent as K, type PreCommitEvent as L, type MergeMsgEvent as M, type NetworkPolicy as N, type ObjectStore as O, type PackObject as P, type PreFetchEvent as Q, type RemoteResolver as R, type PreMergeCommitEvent as S, type PrePullEvent as T, type PrePushEvent as U, type PreRebaseEvent as V, type PreResetEvent as W, type PreRevertEvent as X, type PreRmEvent as Y, type PreStashEvent as Z, type RawObject as _, type RefStore as a, type RefDeleteEvent as a0, type RefEntry as a1, type RefUpdateEvent as a2, type Rejection as a3, type SymbolicRef as a4, composeGitHooks as a5, isRejection as a6, type TreeEntry as a7, type TreeDiffEntry as a8, type ConfigOverrides as b, type FileStat as c, type GitContext as d, type Commit as e, type CommitMsgEvent as f, type GitRepo as g, type Identity as h, type ObjectId as i, type ObjectType as j, type ObjectWriteEvent as k, type PostCheckoutEvent as l, type PostCherryPickEvent as m, type PostCleanEvent as n, type PostCloneEvent as o, type PostCommitEvent as p, type PostFetchEvent as q, type PostMergeEvent as r, type PostPullEvent as s, type PostPushEvent as t, type PostResetEvent as u, type PostRevertEvent as v, type PostRmEvent as w, type PostStashEvent as x, type PreCheckoutEvent as y, type PreCherryPickEvent as z };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FileSystem, G as GitHooks, C as CredentialProvider, I as IdentityOverride, N as NetworkPolicy, R as RemoteResolver, O as ObjectStore, a as RefStore, b as ConfigOverrides, E as ExecResult, c as FileStat, d as GitContext } from './hooks-
|
|
2
|
-
export { A as AfterCommandEvent, B as BeforeCommandEvent, e as Commit, f as CommitMsgEvent, D as DirectRef, g as GitRepo, H as HttpAuth, h as Identity, M as MergeMsgEvent, i as ObjectId, j as ObjectType, k as ObjectWriteEvent, P as PackObject, l as PostCheckoutEvent, m as PostCherryPickEvent, n as PostCleanEvent, o as PostCloneEvent, p as PostCommitEvent, q as PostFetchEvent, r as PostMergeEvent, s as PostPullEvent, t as PostPushEvent, u as PostResetEvent, v as PostRevertEvent, w as PostRmEvent, x as PostStashEvent, y as PreCheckoutEvent, z as PreCherryPickEvent, J as PreCleanEvent, K as PreCloneEvent, L as PreCommitEvent, Q as PreFetchEvent, S as PreMergeCommitEvent, T as PrePullEvent, U as PrePushEvent, V as PreRebaseEvent, W as PreResetEvent, X as PreRevertEvent, Y as PreRmEvent, Z as PreStashEvent, _ as RawObject, $ as Ref, a0 as RefDeleteEvent, a1 as RefEntry, a2 as RefUpdateEvent, a3 as Rejection, a4 as SymbolicRef, a5 as composeGitHooks, a6 as isRejection } from './hooks-
|
|
1
|
+
import { F as FileSystem, G as GitHooks, C as CredentialProvider, I as IdentityOverride, N as NetworkPolicy, R as RemoteResolver, O as ObjectStore, a as RefStore, b as ConfigOverrides, E as ExecResult, c as FileStat, d as GitContext } from './hooks-DNBNCTgb.js';
|
|
2
|
+
export { A as AfterCommandEvent, B as BeforeCommandEvent, e as Commit, f as CommitMsgEvent, D as DirectRef, g as GitRepo, H as HttpAuth, h as Identity, M as MergeMsgEvent, i as ObjectId, j as ObjectType, k as ObjectWriteEvent, P as PackObject, l as PostCheckoutEvent, m as PostCherryPickEvent, n as PostCleanEvent, o as PostCloneEvent, p as PostCommitEvent, q as PostFetchEvent, r as PostMergeEvent, s as PostPullEvent, t as PostPushEvent, u as PostResetEvent, v as PostRevertEvent, w as PostRmEvent, x as PostStashEvent, y as PreCheckoutEvent, z as PreCherryPickEvent, J as PreCleanEvent, K as PreCloneEvent, L as PreCommitEvent, Q as PreFetchEvent, S as PreMergeCommitEvent, T as PrePullEvent, U as PrePushEvent, V as PreRebaseEvent, W as PreResetEvent, X as PreRevertEvent, Y as PreRmEvent, Z as PreStashEvent, _ as RawObject, $ as Ref, a0 as RefDeleteEvent, a1 as RefEntry, a2 as RefUpdateEvent, a3 as Rejection, a4 as SymbolicRef, a5 as composeGitHooks, a6 as isRejection } from './hooks-DNBNCTgb.js';
|
|
3
3
|
|
|
4
4
|
/** Options for subcommand execution (mirrors just-bash's CommandExecOptions). */
|
|
5
5
|
interface CommandExecOptions {
|
package/dist/index.js
CHANGED
|
@@ -776,7 +776,7 @@ ${m}`,exitCode:0}}ie();ce();$r();ge();is();function $d(e,t){e.command("tag",{des
|
|
|
776
776
|
`)}if(n.list)return Pd(s,n.name||void 0);if(n.name){if(!vc(n.name))return I(`'${n.name}' is not a valid tag name`);let i=n.commit,a;if(i){let d=await wt(s,i,`Failed to resolve '${i}' as a valid ref.`);if(M(d))return d;a=d}else if(a=await Z(s),!a)return I("Failed to resolve 'HEAD' as a valid ref.");let c=`refs/tags/${n.name}`;if(await B(s,c)&&!n.force)return I(`tag '${n.name}' already exists`);if(n.annotate||n.message){if(!n.message)return I("no tag message specified (use -m)");let d=await nt(s,r.env);if(M(d))return d;let m=Mt(n.message),u=$c({type:"tag",object:a,objectType:"commit",name:n.name,tagger:d,message:m}),h=await Ae(s,"tag",u);await X(s,c,h)}else await X(s,c,a);return{stdout:"",stderr:"",exitCode:0}}return Pd(s)}})}async function Pd(e,t){let n=await pe(e,"refs/tags");if(n.length===0)return{stdout:"",stderr:"",exitCode:0};let r=n.map(o=>o.name.replace("refs/tags/",""));return t&&(r=r.filter(o=>on(t,o,0)===0)),r.length===0?{stdout:"",stderr:"",exitCode:0}:{stdout:`${r.join(`
|
|
777
777
|
`)}
|
|
778
778
|
`,stderr:"",exitCode:0}}var Od=new Set(["am","annotate","apply","archive","bugreport","bundle","cat-file","check-ignore","check-mailmap","check-ref-format","checkout-index","cherry","commit-tree","count-objects","credential","daemon","diff-files","diff-index","diff-tree","difftool","fast-export","fast-import","filter-branch","for-each-ref","format-patch","fsck","hash-object","instaweb","interpret-trailers","log--hierarchical","ls-remote","ls-tree","maintenance","merge-base","merge-tree","mergetool","multi-pack-index","name-rev","notes","pack-objects","pack-refs","patch-id","prune","range-diff","read-tree","receive-pack","replace","request-pull","rerere","rev-list","send-email","send-pack","shortlog","show-branch","show-ref","sparse-checkout","stash--helper","stripspace","submodule","symbolic-ref","unpack-objects","update-index","update-ref","upload-pack","var","verify-commit","verify-pack","verify-tag","whatchanged","worktree","write-tree"]),Iw={init:(e,t)=>Gl(e,t),clone:(e,t)=>ll(e,t),describe:(e,t)=>ul(e,t),fetch:(e,t)=>Il(e,t),pull:(e,t)=>nd(e,t),push:(e,t)=>rd(e,t),add:(e,t)=>Xc(e,t),blame:(e,t)=>Tf(e,t),commit:(e,t)=>ml(e,t),status:(e,t)=>kd(e,t),log:(e,t)=>Kl(e,t),branch:(e,t)=>Af(e,t),tag:(e,t)=>$d(e,t),checkout:(e,t)=>Mf(e,t),diff:(e,t)=>xl(e,t),reset:(e,t)=>ad(e,t),merge:(e,t)=>Xl(e,t),"cherry-pick":(e,t)=>Yf(e,t),revert:(e,t)=>dd(e,t),rebase:(e,t)=>td(e,t),mv:(e,t)=>Zl(e,t),rm:(e,t)=>ud(e,t),remote:(e,t)=>od(e,t),config:(e,t)=>wl(e,t),show:(e,t)=>md(e,t),stash:(e,t)=>Ed(e,t),"rev-parse":(e,t)=>ld(e,t),"ls-files":(e,t)=>Yl(e,t),clean:(e,t)=>Xf(e,t),switch:(e,t)=>xd(e,t),restore:(e,t)=>fd(e,t),reflog:(e,t)=>sd(e,t),repack:(e,t)=>Tl(e,t),gc:(e,t)=>Hl(e,t),bisect:(e,t)=>wf(e,t),grep:(e,t)=>jl(e,t)};function Id(e){let t=Xo("git",{description:"Git command"});for(let n of Object.values(Iw))n(t,e);return t.command("help",{description:"Display help information",args:[q.string().name("command").describe("Command to get help for").optional()],handler:async n=>{let r=n.command;if(!r)return{stdout:Er(t),stderr:"",exitCode:0};let o=t.children.get(r);return o?{stdout:Er(o),stderr:"",exitCode:0}:{stdout:"",stderr:`git: no help available for '${r}'
|
|
779
|
-
`,exitCode:1}}}),t}var Sw="1.3.
|
|
779
|
+
`,exitCode:1}}}),t}var Sw="1.3.6";function vw(e,t){if(!e)return t;let n=e.locked?"locked":"defaults",r={"user.name":e.name,"user.email":e.email};return t?{...t,[n]:{...r,...t[n]}}:{[n]:r}}var qo=class{name="git";defaultFs;defaultCwd;blocked;hooks;inner;locks=new WeakMap;async withLock(t,n){let r=this.locks.get(t)??Promise.resolve(),o,s=new Promise(i=>{o=i});this.locks.set(t,s),await r;try{return await n()}finally{o()}}constructor(t){this.defaultFs=t?.fs,this.defaultCwd=t?.cwd??"/",this.hooks=t?.hooks,this.blocked=t?.disabled?.length?new Set(t.disabled):null;let n=t?.network,r=vw(t?.identity,t?.config),o={hooks:t?.hooks,credentialProvider:t?.credentials,identityOverride:t?.identity,fetchFn:typeof n=="object"?n.fetch:void 0,networkPolicy:n,resolveRemote:t?.resolveRemote,...t?.objectStore?{objectStore:t.objectStore}:{},...t?.refStore?{refStore:t.refStore}:{},...t?.gitDir?{gitDir:t.gitDir,workTree:this.defaultCwd}:{},...r?{configOverrides:r}:{}};this.inner=Id(o).toCommand()}exec=async(t,n)=>{let r=n?.fs??this.defaultFs;if(!r)throw new Error("No filesystem: pass `fs` in exec() options or in createGit()");let o=n?.cwd??this.defaultCwd,s=Tw(t),i=new Map;if(n?.env)for(let[a,c]of Object.entries(n.env))i.set(a,c);return this.execute(s,{fs:r,cwd:o,env:i,stdin:n?.stdin??""})};execute=(t,n)=>this.withLock(n.fs,async()=>{let r=t[0]??"";if(r==="--version"||r==="version")return{stdout:`just-git version ${Sw} (virtual git implementation)
|
|
780
780
|
`,stderr:"",exitCode:0};if(this.blocked?.has(r))return{stdout:"",stderr:`git: '${r}' is not available in this environment
|
|
781
781
|
`,exitCode:1};if(r&&Od.has(r))return{stdout:"",stderr:`git: '${r}' is not implemented. Run 'git help' for available commands.
|
|
782
782
|
`,exitCode:1};if(this.hooks?.beforeCommand){let s=await this.hooks.beforeCommand({command:r,args:t.slice(1),fs:n.fs,cwd:n.cwd,env:n.env});if(ee(s))return{stdout:"",stderr:s.message??"",exitCode:1}}let o=await this.inner.execute(t,n);return this.hooks?.afterCommand&&await this.hooks.afterCommand({command:r,args:t.slice(1),result:o}),o})};function Tw(e){let t=[],n="",r=0;for(;r<e.length;){let o=e[r];if(o==='"'){for(r++;r<e.length&&e[r]!=='"';){if(e[r]==="\\"&&r+1<e.length){let s=e[r+1];if(s==='"'||s==="\\"){n+=s,r+=2;continue}}n+=e[r],r++}r++}else if(o==="'"){for(r++;r<e.length&&e[r]!=="'";)n+=e[r],r++;r++}else o===" "||o===" "?(n.length>0&&(t.push(n),n=""),r++):(n+=o,r++)}return n.length>0&&t.push(n),t.length>0&&t[0]==="git"&&t.shift(),t}function Hw(e){return new qo(e)}var Sd=new TextEncoder,Aw=new TextDecoder;function hn(e){let t=[];for(let n of e.split("/"))n==="."||n===""||(n===".."?t.pop():t.push(n));return"/"+t.join("/")}function zo(e){let t=e.lastIndexOf("/");return t<=0?"/":e.slice(0,t)}var Ca=class{data=new Map;constructor(t){if(this.data.set("/",{type:"directory",mode:16877,mtime:new Date}),t)for(let[n,r]of Object.entries(t)){let o=hn(n);this.ensureParents(o),this.data.set(o,{type:"file",content:typeof r=="string"?Sd.encode(r):r,mode:33188,mtime:new Date})}}ensureParents(t){let n=zo(t);n!=="/"&&(this.data.has(n)||(this.ensureParents(n),this.data.set(n,{type:"directory",mode:16877,mtime:new Date})))}resolve(t){let n="",r=new Set;for(let o of hn(t).slice(1).split("/")){n=`${n}/${o}`;let s=0,i=this.data.get(n);for(;i?.type==="symlink"&&s<40;){if(r.has(n))throw new Error(`ELOOP: too many levels of symbolic links, '${t}'`);r.add(n);let a=i.target;n=a.startsWith("/")?hn(a):hn(zo(n)+"/"+a),i=this.data.get(n),s++}if(s>=40)throw new Error(`ELOOP: too many levels of symbolic links, '${t}'`)}return n}resolveParent(t){let n=hn(t);if(n==="/")return"/";let r=n.slice(1).split("/");if(r.length<=1)return n;let o="",s=new Set;for(let i=0;i<r.length-1;i++){o=`${o}/${r[i]}`;let a=this.data.get(o),c=0;for(;a?.type==="symlink"&&c<40;){if(s.has(o))throw new Error(`ELOOP: too many levels of symbolic links, '${t}'`);s.add(o);let f=a.target;o=f.startsWith("/")?hn(f):hn(zo(o)+"/"+f),a=this.data.get(o),c++}}return`${o}/${r[r.length-1]}`}async readFile(t){return Aw.decode(await this.readFileBuffer(t))}async readFileBuffer(t){let n=this.data.get(this.resolve(t));if(!n)throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content}async writeFile(t,n){let r=this.resolve(t);this.ensureParents(r),this.data.set(r,{type:"file",content:typeof n=="string"?Sd.encode(n):n,mode:33188,mtime:new Date})}async exists(t){try{return this.data.has(this.resolve(t))}catch{return!1}}async stat(t){let n=this.data.get(this.resolve(t));if(!n)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);return{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:n.type==="file"?n.content.byteLength:0,mtime:n.mtime}}async lstat(t){let n=this.resolveParent(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);return{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:r.type==="symlink",mode:r.mode,size:r.type==="file"?r.content.byteLength:r.type==="symlink"?r.target.length:0,mtime:r.mtime}}async mkdir(t,n){let r=hn(t);if(this.data.has(r)){if(this.data.get(r).type!=="directory")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${t}'`);return}let o=zo(r);if(o!=="/"&&!this.data.has(o))if(n?.recursive)await this.mkdir(o,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(r,{type:"directory",mode:16877,mtime:new Date})}async readdir(t){let n=this.resolve(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);let o=n==="/"?"/":`${n}/`,s=new Set;for(let i of this.data.keys())if(i!==n&&i.startsWith(o)){let c=i.slice(o.length).split("/")[0];c&&s.add(c)}return[...s].sort()}async rm(t,n){let r=hn(t),o=this.data.get(r);if(!o){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(o.type==="directory"){if(!n?.recursive&&(await this.readdir(r)).length>0)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);let s=r==="/"?"/":`${r}/`;for(let i of[...this.data.keys()])i.startsWith(s)&&this.data.delete(i)}this.data.delete(r)}async readlink(t){let n=this.resolveParent(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}async symlink(t,n){let r=hn(n);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureParents(r),this.data.set(r,{type:"symlink",target:t,mode:40960,mtime:new Date})}};Gn();export{qo as Git,Ca as MemoryFileSystem,Th as composeGitHooks,Hw as createGit,rr as findRepo,ee as isRejection};
|
package/dist/repo/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as GitRepo, a1 as RefEntry, e as Commit, i as ObjectId, h as Identity,
|
|
1
|
+
import { g as GitRepo, a1 as RefEntry, e as Commit, a7 as TreeEntry, i as ObjectId, h as Identity, a8 as TreeDiffEntry, j as ObjectType, d as GitContext, F as FileSystem } from '../hooks-DNBNCTgb.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Core grep matching logic shared by the `git grep` command and the
|
|
@@ -21,6 +21,21 @@ declare function readCommit(repo: GitRepo, hash: string): Promise<Commit>;
|
|
|
21
21
|
declare function readBlob(repo: GitRepo, hash: string): Promise<Uint8Array>;
|
|
22
22
|
/** Read a blob as a UTF-8 string by its hash. */
|
|
23
23
|
declare function readBlobText(repo: GitRepo, hash: string): Promise<string>;
|
|
24
|
+
/**
|
|
25
|
+
* Read the direct children of a tree object.
|
|
26
|
+
*
|
|
27
|
+
* Unlike {@link flattenTree} (which recursively walks and returns full
|
|
28
|
+
* paths), this returns single-level entries — the same shape that
|
|
29
|
+
* {@link writeTree} accepts, making read-modify-write round-trips
|
|
30
|
+
* straightforward.
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* const entries = await readTree(repo, commit.tree);
|
|
34
|
+
* entries.push({ name: "new-file.txt", hash: blobHash, mode: "100644" });
|
|
35
|
+
* const newTreeHash = await writeTree(repo, entries);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
declare function readTree(repo: GitRepo, treeHash: string): Promise<TreeEntry[]>;
|
|
24
39
|
/**
|
|
25
40
|
* Read a file's content at a specific commit.
|
|
26
41
|
* Returns null if the file doesn't exist at that commit.
|
|
@@ -201,14 +216,29 @@ declare function walkCommitHistory(repo: GitRepo, startHash: string | string[],
|
|
|
201
216
|
paths?: string[];
|
|
202
217
|
}): AsyncGenerator<CommitInfo>;
|
|
203
218
|
|
|
219
|
+
/**
|
|
220
|
+
* Simplified identity for the public API. When `date` is omitted,
|
|
221
|
+
* defaults to the current time. Accepts either this form or the
|
|
222
|
+
* internal `Identity` (with `timestamp`/`timezone`) for full control.
|
|
223
|
+
*/
|
|
224
|
+
interface CommitAuthor {
|
|
225
|
+
name: string;
|
|
226
|
+
email: string;
|
|
227
|
+
/** Defaults to `new Date()` (current time). */
|
|
228
|
+
date?: Date;
|
|
229
|
+
}
|
|
230
|
+
/** Accepts either the simplified {@link CommitAuthor} or the internal `Identity` with raw timestamp/timezone. */
|
|
231
|
+
type CommitIdentity = CommitAuthor | Identity;
|
|
204
232
|
/** Options for {@link createCommit}. */
|
|
205
233
|
interface CreateCommitOptions {
|
|
206
234
|
/** Hash of the tree object for this commit. */
|
|
207
235
|
tree: string;
|
|
208
236
|
/** Parent commit hashes (empty for root commits). */
|
|
209
237
|
parents: string[];
|
|
210
|
-
|
|
211
|
-
|
|
238
|
+
/** Author identity. Accepts `{ name, email, date? }` or full `Identity`. */
|
|
239
|
+
author: CommitIdentity;
|
|
240
|
+
/** Committer identity. Defaults to `author` when omitted. */
|
|
241
|
+
committer?: CommitIdentity;
|
|
212
242
|
message: string;
|
|
213
243
|
/**
|
|
214
244
|
* When set, advances `refs/heads/<branch>` to the new commit.
|
|
@@ -226,6 +256,68 @@ interface CreateCommitOptions {
|
|
|
226
256
|
* Without `branch`, no refs are updated.
|
|
227
257
|
*/
|
|
228
258
|
declare function createCommit(repo: GitRepo, options: CreateCommitOptions): Promise<string>;
|
|
259
|
+
/** Options for {@link createAnnotatedTag}. */
|
|
260
|
+
interface CreateAnnotatedTagOptions {
|
|
261
|
+
/** Hash of the target object (usually a commit). */
|
|
262
|
+
target: string;
|
|
263
|
+
/** Tag name (written into the tag object and used for the ref). */
|
|
264
|
+
name: string;
|
|
265
|
+
/** Tagger identity. Accepts `{ name, email, date? }` or full `Identity`. */
|
|
266
|
+
tagger: CommitIdentity;
|
|
267
|
+
message: string;
|
|
268
|
+
/** Type of the target object. Defaults to `"commit"`. */
|
|
269
|
+
targetType?: ObjectType;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Create an annotated tag object and its ref.
|
|
273
|
+
* Returns the tag object's hash.
|
|
274
|
+
*
|
|
275
|
+
* ```ts
|
|
276
|
+
* await createAnnotatedTag(repo, {
|
|
277
|
+
* target: commitHash,
|
|
278
|
+
* name: "v1.0.0",
|
|
279
|
+
* tagger: { name: "Alice", email: "alice@example.com" },
|
|
280
|
+
* message: "Release 1.0.0",
|
|
281
|
+
* });
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
284
|
+
declare function createAnnotatedTag(repo: GitRepo, options: CreateAnnotatedTagOptions): Promise<string>;
|
|
285
|
+
/** Options for {@link commit}. */
|
|
286
|
+
interface CommitOptions {
|
|
287
|
+
/**
|
|
288
|
+
* Files to add, update, or delete.
|
|
289
|
+
* - `string` values are written as UTF-8 blobs.
|
|
290
|
+
* - `Uint8Array` values are written as raw blobs.
|
|
291
|
+
* - `null` deletes the file from the tree.
|
|
292
|
+
*/
|
|
293
|
+
files: Record<string, string | Uint8Array | null>;
|
|
294
|
+
message: string;
|
|
295
|
+
/** Author identity. Accepts `{ name, email, date? }` or full `Identity`. Timestamp defaults to now. */
|
|
296
|
+
author: CommitIdentity;
|
|
297
|
+
/** Committer identity. Defaults to `author` when omitted. */
|
|
298
|
+
committer?: CommitIdentity;
|
|
299
|
+
/** Branch to commit to. Parent is auto-resolved from the current branch tip. */
|
|
300
|
+
branch: string;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Commit files to a branch in one call.
|
|
304
|
+
*
|
|
305
|
+
* Handles blob creation, tree construction, parent resolution, and
|
|
306
|
+
* ref advancement. When the branch already exists, the specified
|
|
307
|
+
* files are applied on top of the existing tree (unmentioned files
|
|
308
|
+
* are preserved). When the branch doesn't exist, a root commit is
|
|
309
|
+
* created with only the specified files.
|
|
310
|
+
*
|
|
311
|
+
* ```ts
|
|
312
|
+
* await commit(repo, {
|
|
313
|
+
* files: { "README.md": "# Hello\n", "src/index.ts": "export {};\n" },
|
|
314
|
+
* message: "initial commit",
|
|
315
|
+
* author: { name: "Alice", email: "alice@example.com" },
|
|
316
|
+
* branch: "main",
|
|
317
|
+
* });
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
declare function commit(repo: GitRepo, options: CommitOptions): Promise<string>;
|
|
229
321
|
/** An entry to include in a tree built by {@link writeTree}. */
|
|
230
322
|
interface TreeEntryInput {
|
|
231
323
|
/** Filename (not a path — nesting is achieved by including tree entries). */
|
|
@@ -246,6 +338,29 @@ declare function writeTree(repo: GitRepo, entries: TreeEntryInput[]): Promise<st
|
|
|
246
338
|
* Returns the blob's hash.
|
|
247
339
|
*/
|
|
248
340
|
declare function writeBlob(repo: GitRepo, content: string): Promise<string>;
|
|
341
|
+
/** A file to add or update in a tree via {@link updateTree}. */
|
|
342
|
+
interface TreeUpdate {
|
|
343
|
+
/** Full repo-relative path (e.g. `"src/lib/foo.ts"`). */
|
|
344
|
+
path: string;
|
|
345
|
+
/** Blob hash. When `null`, the file is removed. */
|
|
346
|
+
hash: string | null;
|
|
347
|
+
/** File mode (default `"100644"`). Ignored when `hash` is `null`. */
|
|
348
|
+
mode?: string;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Apply path-based additions, updates, and deletions to an existing
|
|
352
|
+
* tree, handling nested subtree construction automatically.
|
|
353
|
+
* Returns the new root tree hash.
|
|
354
|
+
*
|
|
355
|
+
* ```ts
|
|
356
|
+
* const blob = await writeBlob(repo, "hello world\n");
|
|
357
|
+
* const newTree = await updateTree(repo, commit.tree, [
|
|
358
|
+
* { path: "src/new-file.ts", hash: blob },
|
|
359
|
+
* { path: "old-file.txt", hash: null },
|
|
360
|
+
* ]);
|
|
361
|
+
* ```
|
|
362
|
+
*/
|
|
363
|
+
declare function updateTree(repo: GitRepo, treeHash: string, updates: TreeUpdate[]): Promise<string>;
|
|
249
364
|
|
|
250
365
|
interface MergeConflict {
|
|
251
366
|
path: string;
|
|
@@ -429,4 +544,4 @@ declare function readonlyRepo(repo: GitRepo): GitRepo;
|
|
|
429
544
|
*/
|
|
430
545
|
declare function overlayRepo(repo: GitRepo): GitRepo;
|
|
431
546
|
|
|
432
|
-
export { type BlameEntry, Commit, type CommitInfo, type CreateCommitOptions, type CreateWorktreeOptions, type DiffHunk, type ExtractTreeResult, type FileDiff, type FlatTreeEntry, GitRepo, type GrepFileMatch, type GrepMatch, type GrepOptions, Identity, type MergeConflict, type MergeTreesResult, RefEntry, TreeDiffEntry, type TreeEntryInput, type WorktreeResult, blame, countAheadBehind, createCommit, createSandboxWorktree, createWorktree, diffCommits, diffTrees, extractTree, findMergeBases, flattenTree, getChangedFiles, getNewCommits, grep, isAncestor, listBranches, listTags, mergeTrees, mergeTreesFromTreeHashes, overlayRepo, readBlob, readBlobText, readCommit, readFileAtCommit, readonlyRepo, resolveRef, walkCommitHistory, writeBlob, writeTree };
|
|
547
|
+
export { type BlameEntry, Commit, type CommitAuthor, type CommitIdentity, type CommitInfo, type CommitOptions, type CreateAnnotatedTagOptions, type CreateCommitOptions, type CreateWorktreeOptions, type DiffHunk, type ExtractTreeResult, type FileDiff, type FlatTreeEntry, GitRepo, type GrepFileMatch, type GrepMatch, type GrepOptions, Identity, type MergeConflict, type MergeTreesResult, RefEntry, TreeDiffEntry, TreeEntry, type TreeEntryInput, type TreeUpdate, type WorktreeResult, blame, commit, countAheadBehind, createAnnotatedTag, createCommit, createSandboxWorktree, createWorktree, diffCommits, diffTrees, extractTree, findMergeBases, flattenTree, getChangedFiles, getNewCommits, grep, isAncestor, listBranches, listTags, mergeTrees, mergeTreesFromTreeHashes, overlayRepo, readBlob, readBlobText, readCommit, readFileAtCommit, readTree, readonlyRepo, resolveRef, updateTree, walkCommitHistory, writeBlob, writeTree };
|
package/dist/repo/index.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
var Me=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var kt=(()=>{let t=new Array(256);for(let e=0;e<256;e++)t[e]=(e>>4).toString(16)+(e&15).toString(16);return t})();function ke(t){let e="";for(let n=0;n<20;n++)e+=kt[t[n]];return e}function Je(t,e){let n="";for(let r=0;r<20;r++)n+=kt[t[e+r]];return n}function ye(t){let e=new Uint8Array(20);for(let n=0;n<20;n++)e[n]=parseInt(t.slice(n*2,n*2+2),16);return e}var zn=new TextEncoder;function Qe(t){return typeof t=="string"?zn.encode(t):t}function Vn(){if(typeof globalThis.Bun<"u")return()=>{let t=new Bun.CryptoHasher("sha1"),e={update(n){return t.update(Qe(n)),e},hex:()=>Promise.resolve(t.digest("hex"))};return e};try{let t=Me(["node","crypto"].join(":"));if(typeof t.createHash=="function")return()=>{let e=t.createHash("sha1"),n={update(r){return e.update(Qe(r)),n},hex:()=>Promise.resolve(e.digest("hex"))};return n}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let t=[],e={update(n){return t.push(Qe(n)),e},async hex(){let n=0;for(let o of t)n+=o.byteLength;let r=new Uint8Array(n),s=0;for(let o of t)r.set(o,s),s+=o.byteLength;let i=await crypto.subtle.digest("SHA-1",r);return ke(new Uint8Array(i))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var Tt=Vn(),et=Tt;async function De(t){return Tt().update(t).hex()}var Z=Uint8Array,ge=Uint16Array,Kn=Int32Array,St=new Z([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]),Ct=new Z([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]),Yn=new Z([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),vt=(t,e)=>{let n=new ge(31);for(let s=0;s<31;++s)n[s]=e+=1<<t[s-1];let r=new Kn(n[30]);for(let s=1;s<30;++s)for(let i=n[s];i<n[s+1];++i)r[i]=i-n[s]<<5|s;return{b:n,r}},{b:jt}=vt(St,2);jt[28]=258;var{b:qn}=vt(Ct,0),rt=new ge(32768);for(let t=0;t<32768;++t){let e=(t&43690)>>1|(t&21845)<<1;e=(e&52428)>>2|(e&13107)<<2,e=(e&61680)>>4|(e&3855)<<4,rt[t]=((e&65280)>>8|(e&255)<<8)>>1}var Te=(t,e,n)=>{let r=t.length,s=0,i=new ge(e);for(;s<r;++s)t[s]&&++i[t[s]-1];let o=new ge(e);for(s=1;s<e;++s)o[s]=o[s-1]+i[s-1]<<1;let a;if(n){a=new ge(1<<e);let c=15-e;for(s=0;s<r;++s)if(t[s]){let l=s<<4|t[s],f=e-t[s],u=o[t[s]-1]++<<f;for(let d=u|(1<<f)-1;u<=d;++u)a[rt[u]>>c]=l}}else for(a=new ge(r),s=0;s<r;++s)t[s]&&(a[s]=rt[o[t[s]-1]++]>>15-t[s]);return a},Se=new Z(288);for(let t=0;t<144;++t)Se[t]=8;for(let t=144;t<256;++t)Se[t]=9;for(let t=256;t<280;++t)Se[t]=7;for(let t=280;t<288;++t)Se[t]=8;var At=new Z(32);for(let t=0;t<32;++t)At[t]=5;var Xn=Te(Se,9,1),Zn=Te(At,5,1),tt=t=>{let e=t[0];for(let n=1;n<t.length;++n)t[n]>e&&(e=t[n]);return e},X=(t,e,n)=>{let r=e/8|0;return(t[r]|t[r+1]<<8)>>(e&7)&n},nt=(t,e)=>{let n=e/8|0;return(t[n]|t[n+1]<<8|t[n+2]<<16)>>(e&7)},$t=t=>(t+7)/8|0,Jn=(t,e,n)=>((e==null||e<0)&&(e=0),(n==null||n>t.length)&&(n=t.length),new Z(t.subarray(e,n))),Q=(t,e)=>{let n=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||n[t]||"unknown inflate error")},Lt=(t,e,n,r)=>{let s=t.length,i=r?r.length:0;if(!s||e.f&&!e.l)return n||new Z(0);let o=!n,a=o||e.i!=2,c=e.i;o&&(n=new Z(s*3));let l=R=>{let v=n.length;if(R>v){let j=new Z(Math.max(v*2,R));j.set(n),n=j}},f=e.f||0,u=e.p||0,d=e.b||0,h=e.l,m=e.d,y=e.m,p=e.n,b=s*8;do{if(!h){f=X(t,u,1);let O=X(t,u+1,3);if(u+=3,O)if(O==1)h=Xn,m=Zn,y=9,p=5;else if(O==2){let w=X(t,u,31)+257,x=X(t,u+10,15)+4,S=w+X(t,u+5,31)+1;u+=14;let E=new Z(S),P=new Z(19);for(let g=0;g<x;++g)P[Yn[g]]=X(t,u+g*3,7);u+=x*3;let T=tt(P),$=(1<<T)-1,D=Te(P,T,1);for(let g=0;g<S;){let k=D[X(t,u,$)];u+=k&15;let M=k>>4;if(M<16)E[g++]=M;else{let L=0,C=0;for(M==16?(C=3+X(t,u,3),u+=2,L=E[g-1]):M==17?(C=3+X(t,u,7),u+=3):M==18&&(C=11+X(t,u,127),u+=7);C--;)E[g++]=L}}let oe=E.subarray(0,w),I=E.subarray(w);y=tt(oe),p=tt(I),h=Te(oe,y,1),m=Te(I,p,1)}else Q(1);else{let w=$t(u)+4,x=t[w-4]|t[w-3]<<8,S=w+x;if(S>s){c&&Q(0);break}a&&l(d+x),n.set(t.subarray(w,S),d),e.b=d+=x,e.p=u=S*8,e.f=f;continue}if(u>b){c&&Q(0);break}}a&&l(d+131072);let R=(1<<y)-1,v=(1<<p)-1,j=u;for(;;j=u){let O=h[nt(t,u)&R],w=O>>4;if(u+=O&15,u>b){c&&Q(0);break}if(O||Q(2),w<256)n[d++]=w;else if(w==256){j=u,h=null;break}else{let x=w-254;if(w>264){let $=w-257,D=St[$];x=X(t,u,(1<<D)-1)+jt[$],u+=D}let S=m[nt(t,u)&v],E=S>>4;S||Q(3),u+=S&15;let P=qn[E];if(E>3){let $=Ct[E];P+=nt(t,u)&(1<<$)-1,u+=$}if(u>b){c&&Q(0);break}a&&l(d+131072);let T=d+x;if(d<P){let $=i-P,D=Math.min(P,T);for($+d<0&&Q(3);d<D;++d)n[d]=r[$+d]}for(;d<T;++d)n[d]=n[d-P]}}e.l=h,e.p=j,e.b=d,e.f=f,h&&(f=1,e.m=y,e.d=m,e.n=p)}while(!f);return d!=n.length&&o?Jn(n,0,d):n.subarray(0,d)},Mt=t=>(((t[0]&15)!=8||t[0]>>4>7||(t[0]<<8|t[1])%31)&&Q(0,"invalid zlib data"),t[1]&32&&Q(0,"zlib dictionaries are not supported"),2);function Dt(t){let e=Mt(t);return Lt(t.subarray(e,-4),{i:2})}function st(t){let e=Mt(t),n={i:2},r=Lt(t.subarray(e),n),s=$t(n.p);return{result:r,bytesConsumed:e+s+4}}async function Qn(){let t;if(!(typeof document<"u"))try{t=Me(["node","zlib"].join(":"))}catch{try{t=await import(["node","zlib"].join(":"))}catch{}}if(t&&typeof t.deflateSync=="function"&&typeof t.inflateSync=="function"){let r=null;try{let s=t.inflateSync(t.deflateSync(Buffer.from("x")),{info:!0});s?.engine&&typeof s.engine.bytesWritten=="number"&&(r=i=>{let o=t.inflateSync(i,{info:!0});return{result:new Uint8Array(o.buffer),bytesConsumed:o.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(t.deflateSync(s)),inflateSync:s=>new Uint8Array(t.inflateSync(s)),inflateWithConsumed:r??st}}let n;return typeof globalThis.CompressionStream=="function"?n=async r=>{let s=new CompressionStream("deflate"),i=s.writable.getWriter();return i.write(r),i.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}:n=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:n,inflateSync:Dt,inflateWithConsumed:st}}var er=null;function tr(){return er??=Qn()}async function Ht(t,e){let n=await tr(),{result:r,bytesConsumed:s}=n.inflateWithConsumed(t);if(r.byteLength!==e)throw new Error(`Inflate size mismatch: got ${r.byteLength}, expected ${e}`);return{result:r,bytesConsumed:s}}var Ut=1346454347,nr=2,rr=1,sr=2,ir=3,or=4,He=6,ot=7,ar={[rr]:"commit",[sr]:"tree",[ir]:"blob",[or]:"tag"};async function Gt(t,e){let n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=n.getUint32(0);if(r!==Ut)throw new Error(`Invalid pack signature: 0x${r.toString(16)} (expected 0x${Ut.toString(16)})`);let s=n.getUint32(4);if(s!==nr)throw new Error(`Unsupported pack version: ${s}`);if(t.byteLength>=32){let l=Je(t,t.byteLength-20),f=et();f.update(t.subarray(0,t.byteLength-20));let u=await f.hex();if(u!==l)throw new Error(`pack checksum mismatch: expected ${l}, computed ${u}`)}let i=n.getUint32(8),o=[],a=12;for(let l=0;l<i;l++){let f=await cr(t,a);o.push(f),a=f.nextOffset}return(await lr(o,e)).map((l,f)=>({...l,offset:o[f].headerOffset,nextOffset:o[f].nextOffset}))}async function cr(t,e){let n=e,r=t[e++],s=r>>4&7,i=r&15,o=4;for(;r&128;)r=t[e++],i|=(r&127)<<o,o+=7;let a,c;if(s===He){let u=t[e++];for(a=u&127;u&128;)a+=1,u=t[e++],a=(a<<7)+(u&127);a=n-a}else s===ot&&(c=Je(t,e),e+=20);let{result:l,bytesConsumed:f}=await Ht(t.subarray(e),i);return{headerOffset:n,typeNum:s,inflated:l,baseOffset:a,baseHash:c,nextOffset:e+f}}var Nt=50;async function lr(t,e){let n=new Map;for(let i=0;i<t.length;i++)n.set(t[i].headerOffset,i);let r=new Array(t.length).fill(null);async function s(i,o=0){if(o>Nt)throw new Error(`delta chain depth ${o} exceeds limit of ${Nt}`);let a=r[i];if(a)return a;let c=t[i];if(c.typeNum!==He&&c.typeNum!==ot){let h=ar[c.typeNum];if(!h)throw new Error(`Unknown object type: ${c.typeNum}`);let m={type:h,content:c.inflated,hash:await it(h,c.inflated)};return r[i]=m,m}if(c.typeNum===He){let h=n.get(c.baseOffset);if(h===void 0)throw new Error(`OFS_DELTA base not found at offset ${c.baseOffset}`);let m=await s(h,o+1),y=Bt(m.content,c.inflated),p={type:m.type,content:y,hash:await it(m.type,y)};return r[i]=p,p}let l=await fr(t,r,c.baseHash,s),f;if(l!==void 0)f=await s(l,o+1);else if(e){let h=await e(c.baseHash);h&&(f=h)}if(!f)throw new Error(`REF_DELTA base not found for hash ${c.baseHash}`);let u=Bt(f.content,c.inflated),d={type:f.type,content:u,hash:await it(f.type,u)};return r[i]=d,d}for(let i=0;i<t.length;i++)await s(i);return r}async function fr(t,e,n,r){for(let s=0;s<e.length;s++)if(e[s]?.hash===n)return s;for(let s=0;s<t.length;s++){let i=t[s];if(i.typeNum!==He&&i.typeNum!==ot&&(await r(s)).hash===n)return s}}function Bt(t,e){let n=0,{value:r,newPos:s}=Ft(e,n);if(n=s,r!==t.byteLength)throw new Error(`Delta base size mismatch: expected ${r}, got ${t.byteLength}`);let{value:i,newPos:o}=Ft(e,n);n=o;let a=new Uint8Array(i),c=0;for(;n<e.byteLength;){let l=e[n++];if(l&128){let f=0,u=0;l&1&&(f=e[n++]),l&2&&(f|=e[n++]<<8),l&4&&(f|=e[n++]<<16),l&8&&(f|=e[n++]<<24),l&16&&(u=e[n++]),l&32&&(u|=e[n++]<<8),l&64&&(u|=e[n++]<<16),u===0&&(u=65536),a.set(t.subarray(f,f+u),c),c+=u}else if(l>0)a.set(e.subarray(n,n+l),c),c+=l,n+=l;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(c!==i)throw new Error(`Delta produced ${c} bytes, expected ${i}`);return a}function Ft(t,e){let n=0,r=0,s;do s=t[e++],n|=(s&127)<<r,r+=7;while(s&128);return{value:n,newPos:e}}var ur=new TextEncoder;async function it(t,e){let n=ur.encode(`${t} ${e.byteLength}\0`),r=et();return r.update(n),r.update(e),r.hex()}function hr(t){if(t==="")return".";if(t==="/")return"/";let e=t.charCodeAt(0)===47,n=t.charCodeAt(t.length-1)===47,r=t.split("/"),s=[];for(let o of r)o===""||o==="."||(o===".."?e||s.length>0&&s[s.length-1]!==".."?s.pop():s.push(".."):s.push(o));let i=s.join("/");return e&&(i=`/${i}`),n&&i.length>1&&!i.endsWith("/")&&(i+="/"),i||(e?"/":n?"./":".")}function be(...t){if(t.length===0)return".";let e=t.filter(n=>n!=="").join("/");return e===""?".":hr(e)}function _t(t){if(t==="")return".";if(t==="/")return"/";let e=t.length;for(;e>1&&t.charCodeAt(e-1)===47;)e--;let n=t.slice(0,e),r=n.lastIndexOf("/");return r===-1?".":r===0?"/":n.slice(0,r)}var dr=new TextEncoder,Ei=new TextDecoder;function Wt(t,e){let n=dr.encode(`${t} ${e.byteLength}\0`),r=new Uint8Array(n.byteLength+e.byteLength);return r.set(n),r.set(e,n.byteLength),r}function Ce(t){let e=t.indexOf("<"),n=t.indexOf(">");if(e===-1||n===-1)throw new Error(`Malformed identity line: "${t}"`);let r=t.slice(0,e).trimEnd(),s=t.slice(e+1,n),i=t.slice(n+2),[o="0",a="+0000"]=i.split(" "),c=parseInt(o,10);return{name:r,email:s,timestamp:c,timezone:a}}function Ue(t){return`${t.name} <${t.email}> ${t.timestamp} ${t.timezone}`}var mr=new TextEncoder,pr=new TextDecoder;function zt(t){let e=pr.decode(t),n=e.indexOf(`
|
|
1
|
+
var Ne=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Ct=(()=>{let t=new Array(256);for(let e=0;e<256;e++)t[e]=(e>>4).toString(16)+(e&15).toString(16);return t})();function Te(t){let e="";for(let n=0;n<20;n++)e+=Ct[t[n]];return e}function Qe(t,e){let n="";for(let r=0;r<20;r++)n+=Ct[t[e+r]];return n}function ye(t){let e=new Uint8Array(20);for(let n=0;n<20;n++)e[n]=parseInt(t.slice(n*2,n*2+2),16);return e}var Jn=new TextEncoder;function et(t){return typeof t=="string"?Jn.encode(t):t}function Qn(){if(typeof globalThis.Bun<"u")return()=>{let t=new Bun.CryptoHasher("sha1"),e={update(n){return t.update(et(n)),e},hex:()=>Promise.resolve(t.digest("hex"))};return e};try{let t=Ne(["node","crypto"].join(":"));if(typeof t.createHash=="function")return()=>{let e=t.createHash("sha1"),n={update(r){return e.update(et(r)),n},hex:()=>Promise.resolve(e.digest("hex"))};return n}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let t=[],e={update(n){return t.push(et(n)),e},async hex(){let n=0;for(let o of t)n+=o.byteLength;let r=new Uint8Array(n),s=0;for(let o of t)r.set(o,s),s+=o.byteLength;let i=await crypto.subtle.digest("SHA-1",r);return Te(new Uint8Array(i))}};return e};throw new Error("No SHA-1 implementation available. Requires Bun, Node.js, Deno, or a browser with Web Crypto.")}var jt=Qn(),tt=jt;async function Be(t){return jt().update(t).hex()}var Z=Uint8Array,be=Uint16Array,er=Int32Array,vt=new Z([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]),At=new Z([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]),tr=new Z([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),$t=(t,e)=>{let n=new be(31);for(let s=0;s<31;++s)n[s]=e+=1<<t[s-1];let r=new er(n[30]);for(let s=1;s<30;++s)for(let i=n[s];i<n[s+1];++i)r[i]=i-n[s]<<5|s;return{b:n,r}},{b:Lt}=$t(vt,2);Lt[28]=258;var{b:nr}=$t(At,0),st=new be(32768);for(let t=0;t<32768;++t){let e=(t&43690)>>1|(t&21845)<<1;e=(e&52428)>>2|(e&13107)<<2,e=(e&61680)>>4|(e&3855)<<4,st[t]=((e&65280)>>8|(e&255)<<8)>>1}var Se=(t,e,n)=>{let r=t.length,s=0,i=new be(e);for(;s<r;++s)t[s]&&++i[t[s]-1];let o=new be(e);for(s=1;s<e;++s)o[s]=o[s-1]+i[s-1]<<1;let a;if(n){a=new be(1<<e);let c=15-e;for(s=0;s<r;++s)if(t[s]){let l=s<<4|t[s],f=e-t[s],u=o[t[s]-1]++<<f;for(let d=u|(1<<f)-1;u<=d;++u)a[st[u]>>c]=l}}else for(a=new be(r),s=0;s<r;++s)t[s]&&(a[s]=st[o[t[s]-1]++]>>15-t[s]);return a},Ce=new Z(288);for(let t=0;t<144;++t)Ce[t]=8;for(let t=144;t<256;++t)Ce[t]=9;for(let t=256;t<280;++t)Ce[t]=7;for(let t=280;t<288;++t)Ce[t]=8;var Mt=new Z(32);for(let t=0;t<32;++t)Mt[t]=5;var rr=Se(Ce,9,1),sr=Se(Mt,5,1),nt=t=>{let e=t[0];for(let n=1;n<t.length;++n)t[n]>e&&(e=t[n]);return e},X=(t,e,n)=>{let r=e/8|0;return(t[r]|t[r+1]<<8)>>(e&7)&n},rt=(t,e)=>{let n=e/8|0;return(t[n]|t[n+1]<<8|t[n+2]<<16)>>(e&7)},Dt=t=>(t+7)/8|0,ir=(t,e,n)=>((e==null||e<0)&&(e=0),(n==null||n>t.length)&&(n=t.length),new Z(t.subarray(e,n))),ee=(t,e)=>{let n=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||n[t]||"unknown inflate error")},Ht=(t,e,n,r)=>{let s=t.length,i=r?r.length:0;if(!s||e.f&&!e.l)return n||new Z(0);let o=!n,a=o||e.i!=2,c=e.i;o&&(n=new Z(s*3));let l=R=>{let j=n.length;if(R>j){let A=new Z(Math.max(j*2,R));A.set(n),n=A}},f=e.f||0,u=e.p||0,d=e.b||0,h=e.l,m=e.d,g=e.m,p=e.n,b=s*8;do{if(!h){f=X(t,u,1);let O=X(t,u+1,3);if(u+=3,O)if(O==1)h=rr,m=sr,g=9,p=5;else if(O==2){let w=X(t,u,31)+257,x=X(t,u+10,15)+4,S=w+X(t,u+5,31)+1;u+=14;let E=new Z(S),P=new Z(19);for(let y=0;y<x;++y)P[tr[y]]=X(t,u+y*3,7);u+=x*3;let T=nt(P),$=(1<<T)-1,D=Se(P,T,1);for(let y=0;y<S;){let k=D[X(t,u,$)];u+=k&15;let M=k>>4;if(M<16)E[y++]=M;else{let L=0,C=0;for(M==16?(C=3+X(t,u,3),u+=2,L=E[y-1]):M==17?(C=3+X(t,u,7),u+=3):M==18&&(C=11+X(t,u,127),u+=7);C--;)E[y++]=L}}let ae=E.subarray(0,w),I=E.subarray(w);g=nt(ae),p=nt(I),h=Se(ae,g,1),m=Se(I,p,1)}else ee(1);else{let w=Dt(u)+4,x=t[w-4]|t[w-3]<<8,S=w+x;if(S>s){c&&ee(0);break}a&&l(d+x),n.set(t.subarray(w,S),d),e.b=d+=x,e.p=u=S*8,e.f=f;continue}if(u>b){c&&ee(0);break}}a&&l(d+131072);let R=(1<<g)-1,j=(1<<p)-1,A=u;for(;;A=u){let O=h[rt(t,u)&R],w=O>>4;if(u+=O&15,u>b){c&&ee(0);break}if(O||ee(2),w<256)n[d++]=w;else if(w==256){A=u,h=null;break}else{let x=w-254;if(w>264){let $=w-257,D=vt[$];x=X(t,u,(1<<D)-1)+Lt[$],u+=D}let S=m[rt(t,u)&j],E=S>>4;S||ee(3),u+=S&15;let P=nr[E];if(E>3){let $=At[E];P+=rt(t,u)&(1<<$)-1,u+=$}if(u>b){c&&ee(0);break}a&&l(d+131072);let T=d+x;if(d<P){let $=i-P,D=Math.min(P,T);for($+d<0&&ee(3);d<D;++d)n[d]=r[$+d]}for(;d<T;++d)n[d]=n[d-P]}}e.l=h,e.p=A,e.b=d,e.f=f,h&&(f=1,e.m=g,e.d=m,e.n=p)}while(!f);return d!=n.length&&o?ir(n,0,d):n.subarray(0,d)},Ut=t=>(((t[0]&15)!=8||t[0]>>4>7||(t[0]<<8|t[1])%31)&&ee(0,"invalid zlib data"),t[1]&32&&ee(0,"zlib dictionaries are not supported"),2);function Nt(t){let e=Ut(t);return Ht(t.subarray(e,-4),{i:2})}function it(t){let e=Ut(t),n={i:2},r=Ht(t.subarray(e),n),s=Dt(n.p);return{result:r,bytesConsumed:e+s+4}}async function or(){let t;if(!(typeof document<"u"))try{t=Ne(["node","zlib"].join(":"))}catch{try{t=await import(["node","zlib"].join(":"))}catch{}}if(t&&typeof t.deflateSync=="function"&&typeof t.inflateSync=="function"){let r=null;try{let s=t.inflateSync(t.deflateSync(Buffer.from("x")),{info:!0});s?.engine&&typeof s.engine.bytesWritten=="number"&&(r=i=>{let o=t.inflateSync(i,{info:!0});return{result:new Uint8Array(o.buffer),bytesConsumed:o.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(t.deflateSync(s)),inflateSync:s=>new Uint8Array(t.inflateSync(s)),inflateWithConsumed:r??it}}let n;return typeof globalThis.CompressionStream=="function"?n=async r=>{let s=new CompressionStream("deflate"),i=s.writable.getWriter();return i.write(r),i.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}:n=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:n,inflateSync:Nt,inflateWithConsumed:it}}var ar=null;function cr(){return ar??=or()}async function Bt(t,e){let n=await cr(),{result:r,bytesConsumed:s}=n.inflateWithConsumed(t);if(r.byteLength!==e)throw new Error(`Inflate size mismatch: got ${r.byteLength}, expected ${e}`);return{result:r,bytesConsumed:s}}var Gt=1346454347,lr=2,fr=1,ur=2,hr=3,dr=4,Ge=6,at=7,mr={[fr]:"commit",[ur]:"tree",[hr]:"blob",[dr]:"tag"};async function zt(t,e){let n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=n.getUint32(0);if(r!==Gt)throw new Error(`Invalid pack signature: 0x${r.toString(16)} (expected 0x${Gt.toString(16)})`);let s=n.getUint32(4);if(s!==lr)throw new Error(`Unsupported pack version: ${s}`);if(t.byteLength>=32){let l=Qe(t,t.byteLength-20),f=tt();f.update(t.subarray(0,t.byteLength-20));let u=await f.hex();if(u!==l)throw new Error(`pack checksum mismatch: expected ${l}, computed ${u}`)}let i=n.getUint32(8),o=[],a=12;for(let l=0;l<i;l++){let f=await pr(t,a);o.push(f),a=f.nextOffset}return(await gr(o,e)).map((l,f)=>({...l,offset:o[f].headerOffset,nextOffset:o[f].nextOffset}))}async function pr(t,e){let n=e,r=t[e++],s=r>>4&7,i=r&15,o=4;for(;r&128;)r=t[e++],i|=(r&127)<<o,o+=7;let a,c;if(s===Ge){let u=t[e++];for(a=u&127;u&128;)a+=1,u=t[e++],a=(a<<7)+(u&127);a=n-a}else s===at&&(c=Qe(t,e),e+=20);let{result:l,bytesConsumed:f}=await Bt(t.subarray(e),i);return{headerOffset:n,typeNum:s,inflated:l,baseOffset:a,baseHash:c,nextOffset:e+f}}var Ft=50;async function gr(t,e){let n=new Map;for(let i=0;i<t.length;i++)n.set(t[i].headerOffset,i);let r=new Array(t.length).fill(null);async function s(i,o=0){if(o>Ft)throw new Error(`delta chain depth ${o} exceeds limit of ${Ft}`);let a=r[i];if(a)return a;let c=t[i];if(c.typeNum!==Ge&&c.typeNum!==at){let h=mr[c.typeNum];if(!h)throw new Error(`Unknown object type: ${c.typeNum}`);let m={type:h,content:c.inflated,hash:await ot(h,c.inflated)};return r[i]=m,m}if(c.typeNum===Ge){let h=n.get(c.baseOffset);if(h===void 0)throw new Error(`OFS_DELTA base not found at offset ${c.baseOffset}`);let m=await s(h,o+1),g=_t(m.content,c.inflated),p={type:m.type,content:g,hash:await ot(m.type,g)};return r[i]=p,p}let l=await yr(t,r,c.baseHash,s),f;if(l!==void 0)f=await s(l,o+1);else if(e){let h=await e(c.baseHash);h&&(f=h)}if(!f)throw new Error(`REF_DELTA base not found for hash ${c.baseHash}`);let u=_t(f.content,c.inflated),d={type:f.type,content:u,hash:await ot(f.type,u)};return r[i]=d,d}for(let i=0;i<t.length;i++)await s(i);return r}async function yr(t,e,n,r){for(let s=0;s<e.length;s++)if(e[s]?.hash===n)return s;for(let s=0;s<t.length;s++){let i=t[s];if(i.typeNum!==Ge&&i.typeNum!==at&&(await r(s)).hash===n)return s}}function _t(t,e){let n=0,{value:r,newPos:s}=Wt(e,n);if(n=s,r!==t.byteLength)throw new Error(`Delta base size mismatch: expected ${r}, got ${t.byteLength}`);let{value:i,newPos:o}=Wt(e,n);n=o;let a=new Uint8Array(i),c=0;for(;n<e.byteLength;){let l=e[n++];if(l&128){let f=0,u=0;l&1&&(f=e[n++]),l&2&&(f|=e[n++]<<8),l&4&&(f|=e[n++]<<16),l&8&&(f|=e[n++]<<24),l&16&&(u=e[n++]),l&32&&(u|=e[n++]<<8),l&64&&(u|=e[n++]<<16),u===0&&(u=65536),a.set(t.subarray(f,f+u),c),c+=u}else if(l>0)a.set(e.subarray(n,n+l),c),c+=l,n+=l;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(c!==i)throw new Error(`Delta produced ${c} bytes, expected ${i}`);return a}function Wt(t,e){let n=0,r=0,s;do s=t[e++],n|=(s&127)<<r,r+=7;while(s&128);return{value:n,newPos:e}}var br=new TextEncoder;async function ot(t,e){let n=br.encode(`${t} ${e.byteLength}\0`),r=tt();return r.update(n),r.update(e),r.hex()}function wr(t){if(t==="")return".";if(t==="/")return"/";let e=t.charCodeAt(0)===47,n=t.charCodeAt(t.length-1)===47,r=t.split("/"),s=[];for(let o of r)o===""||o==="."||(o===".."?e||s.length>0&&s[s.length-1]!==".."?s.pop():s.push(".."):s.push(o));let i=s.join("/");return e&&(i=`/${i}`),n&&i.length>1&&!i.endsWith("/")&&(i+="/"),i||(e?"/":n?"./":".")}function we(...t){if(t.length===0)return".";let e=t.filter(n=>n!=="").join("/");return e===""?".":wr(e)}function Vt(t){if(t==="")return".";if(t==="/")return"/";let e=t.length;for(;e>1&&t.charCodeAt(e-1)===47;)e--;let n=t.slice(0,e),r=n.lastIndexOf("/");return r===-1?".":r===0?"/":n.slice(0,r)}var Ir=new TextEncoder,$i=new TextDecoder;function Kt(t,e){let n=Ir.encode(`${t} ${e.byteLength}\0`),r=new Uint8Array(n.byteLength+e.byteLength);return r.set(n),r.set(e,n.byteLength),r}function je(t){let e=t.indexOf("<"),n=t.indexOf(">");if(e===-1||n===-1)throw new Error(`Malformed identity line: "${t}"`);let r=t.slice(0,e).trimEnd(),s=t.slice(e+1,n),i=t.slice(n+2),[o="0",a="+0000"]=i.split(" "),c=parseInt(o,10);return{name:r,email:s,timestamp:c,timezone:a}}function ve(t){return`${t.name} <${t.email}> ${t.timestamp} ${t.timezone}`}var Er=new TextEncoder,xr=new TextDecoder;function Yt(t){let e=xr.decode(t),n=e.indexOf(`
|
|
2
2
|
|
|
3
3
|
`),r=n===-1?e:e.slice(0,n),s=n===-1?"":e.slice(n+2),i="",o=[],a,c;for(let l of r.split(`
|
|
4
|
-
`)){let f=l.indexOf(" ");if(f===-1)continue;let u=l.slice(0,f),d=l.slice(f+1);switch(u){case"tree":i=d;break;case"parent":o.push(d);break;case"author":a=
|
|
5
|
-
`))}var
|
|
4
|
+
`)){let f=l.indexOf(" ");if(f===-1)continue;let u=l.slice(0,f),d=l.slice(f+1);switch(u){case"tree":i=d;break;case"parent":o.push(d);break;case"author":a=je(d);break;case"committer":c=je(d);break}}if(!i)throw new Error("Commit missing tree field");if(!a)throw new Error("Commit missing author field");if(!c)throw new Error("Commit missing committer field");return{type:"commit",tree:i,parents:o,author:a,committer:c,message:s}}function Ae(t){let e=[];e.push(`tree ${t.tree}`);for(let n of t.parents)e.push(`parent ${n}`);return e.push(`author ${ve(t.author)}`),e.push(`committer ${ve(t.committer)}`),e.push(""),e.push(t.message),Er.encode(e.join(`
|
|
5
|
+
`))}var Or=new TextEncoder,Rr=new TextDecoder;function qt(t){let e=Rr.decode(t),n=e.indexOf(`
|
|
6
6
|
|
|
7
7
|
`),r=n===-1?e:e.slice(0,n),s=n===-1?"":e.slice(n+2),i="",o="commit",a="",c;for(let l of r.split(`
|
|
8
|
-
`)){let f=l.indexOf(" ");if(f===-1)continue;let u=l.slice(0,f),d=l.slice(f+1);switch(u){case"object":i=d;break;case"type":o=d;break;case"tag":a=d;break;case"tagger":c=
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
`);return e[e.length-1]===""&&e.pop(),e}var Vr=4,cn=1024,_e=100,Ve=0,We=1,we=2;function ut(t){let e=1;for(;e*e<t;)e++;return e}function Kr(t,e){let n=new Map,r=[],s=new Array(t.length),i=new Array(e.length);for(let o=0;o<t.length;o++){let a=t[o],c=n.get(a);c===void 0&&(c=r.length,n.set(a,c),r.push({len1:0,len2:0})),r[c].len1++,s[o]=c}for(let o=0;o<e.length;o++){let a=e[o],c=n.get(a);c===void 0&&(c=r.length,n.set(a,c),r.push({len1:0,len2:0})),r[c].len2++,i[o]=c}return{classes1:s,classes2:i,classInfo:r}}function Yr(t,e,n,r){let s=0,i=Math.min(e,r);for(;s<i&&t[s]===n[s];)s++;let o=s,a=0,c=i-o;for(;a<c&&t[e-1-a]===n[r-1-a];)a++;return{dstart:o,dend1:e-a-1,dend2:r-a-1}}function ln(t,e,n,r){e-n>_e&&(n=e-_e),r-e>_e&&(r=e+_e);let s=0,i=1;for(let c=1;e-c>=n;c++){let l=t[e-c];if(l===Ve)s++;else if(l===we)i++;else break}if(s===0)return!1;let o=0,a=1;for(let c=1;e+c<=r;c++){let l=t[e+c];if(l===Ve)o++;else if(l===we)a++;else break}return o===0?!1:(o+=s,a+=i,a*Vr<a+o)}function qr(t,e,n,r,s,i,o,a,c,l){let f=new Uint8Array(e),u=new Uint8Array(r),d=Math.min(ut(e),cn);for(let p=i;p<=o;p++){let b=s[t[p]].len2;b===0?f[p]=Ve:b>=d?f[p]=we:f[p]=We}let h=Math.min(ut(r),cn);for(let p=i;p<=a;p++){let b=s[n[p]].len1;b===0?u[p]=Ve:b>=h?u[p]=we:u[p]=We}let m=[];for(let p=i;p<=o;p++)f[p]===We||f[p]===we&&!ln(f,p,i,o)?m.push(p):c[p]=1;let y=[];for(let p=i;p<=a;p++)u[p]===We||u[p]===we&&!ln(u,p,i,a)?y.push(p):l[p]=1;return{refIndex1:m,nreff1:m.length,refIndex2:y,nreff2:y.length}}var le=20,fn=4,Xr=256,Zr=256,ze=2147483647;function z(t,e){return t[e]??0}function Jr(t,e,n,r,s,i,o,a,c,l){let f=e-i,u=n-s,d=e-s,h=n-i,m=d-h&1,y=d,p=d,b=h,R=h;o[d]=e,a[h]=n;for(let v=1;;v++){let j=!1;y>f?o[--y-1]=-1:++y,p<u?o[++p+1]=-1:--p;for(let O=p;O>=y;O-=2){let w;z(o,O-1)>=z(o,O+1)?w=z(o,O-1)+1:w=z(o,O+1);let x=w,S=w-O;for(;w<n&&S<i&&t[w]===r[S];)w++,S++;if(w-x>le&&(j=!0),o[O]=w,m&&b<=O&&O<=R&&z(a,O)<=w)return{i1:w,i2:S,minLo:!0,minHi:!0}}b>f?a[--b-1]=ze:++b,R<u?a[++R+1]=ze:--R;for(let O=R;O>=b;O-=2){let w;z(a,O-1)<z(a,O+1)?w=z(a,O-1):w=z(a,O+1)-1;let x=w,S=w-O;for(;w>e&&S>s&&t[w-1]===r[S-1];)w--,S--;if(x-w>le&&(j=!0),a[O]=w,!m&&y<=O&&O<=p&&w<=z(o,O))return{i1:w,i2:S,minLo:!0,minHi:!0}}if(!c){if(j&&v>Xr){let O=0,w=null;for(let x=p;x>=y;x-=2){let S=x>d?x-d:d-x,E=z(o,x),P=E-x,T=E-e+(P-s)-S;if(T>fn*v&&T>O&&e+le<=E&&E<n&&s+le<=P&&P<i){let $=!0;for(let D=1;D<=le;D++)if(t[E-D]!==r[P-D]){$=!1;break}$&&(O=T,w={i1:E,i2:P,minLo:!0,minHi:!1})}}if(w)return w;O=0,w=null;for(let x=R;x>=b;x-=2){let S=x>h?x-h:h-x,E=z(a,x),P=E-x,T=n-E+(i-P)-S;if(T>fn*v&&T>O&&e<E&&E<=n-le&&s<P&&P<=i-le){let $=!0;for(let D=0;D<le;D++)if(t[E+D]!==r[P+D]){$=!1;break}$&&(O=T,w={i1:E,i2:P,minLo:!1,minHi:!0})}}if(w)return w}if(v>=l){let O=-1,w=-1;for(let E=p;E>=y;E-=2){let P=Math.min(z(o,E),n),T=P-E;i<T&&(P=i+E,T=i),O<P+T&&(O=P+T,w=P)}let x=ze,S=ze;for(let E=R;E>=b;E-=2){let P=Math.max(e,z(a,E)),T=P-E;T<s&&(P=s+E,T=s),P+T<x&&(x=P+T,S=P)}return n+i-x<O-(e+s)?{i1:w,i2:O-w,minLo:!0,minHi:!1}:{i1:S,i2:x-S,minLo:!1,minHi:!0}}}}}function ht(t,e,n,r,s,i,o,a,c,l,f,u,d,h){for(;e<n&&s<i&&t[e]===r[s];)e++,s++;for(;e<n&&s<i&&t[n-1]===r[i-1];)n--,i--;if(e===n)for(let m=s;m<i;m++)a[l[m]]=1;else if(s===i)for(let m=e;m<n;m++)o[c[m]]=1;else{let m=Jr(t,e,n,r,s,i,f,u,d,h);ht(t,e,m.i1,r,s,m.i2,o,a,c,l,f,u,m.minLo,h),ht(t,m.i1,n,r,m.i2,i,o,a,c,l,f,u,m.minHi,h)}}function Qr(t,e,n,r){let s=[],i=0,o=0,a=1,c=1;for(;i<t.length||o<e.length;){if(i<t.length&&o<e.length&&!n[i]&&!r[o]){s.push({type:"keep",line:t[i]??"",oldLineNo:a++,newLineNo:c++}),i++,o++;continue}for(;i<t.length&&n[i];)s.push({type:"delete",line:t[i]??"",oldLineNo:a++,newLineNo:0}),i++;for(;o<e.length&&r[o];)s.push({type:"insert",line:e[o]??"",oldLineNo:0,newLineNo:c++}),o++}return s}var un=200,hn=20,dn=100,es=1,ts=21,ns=-30,rs=6,ss=-4,is=10,os=24,as=17,cs=23,ls=17,fs=60;function ft(t){let e=0;for(let n=0;n<t.length;n++){let r=t.charCodeAt(n);if(r===32)e+=1;else if(r===9)e+=8-e%8;else if(!(r===10||r===13||r===11||r===12))return e;if(e>=un)return un}return-1}function mn(t,e,n){let r={endOfFile:!1,indent:-1,preBlank:0,preIndent:-1,postBlank:0,postIndent:-1};n>=e?(r.endOfFile=!0,r.indent=-1):(r.endOfFile=!1,r.indent=ft(t[n]));for(let s=n-1;s>=0&&(r.preIndent=ft(t[s]),r.preIndent===-1);s--)if(r.preBlank+=1,r.preBlank===hn){r.preIndent=0;break}for(let s=n+1;s<e&&(r.postIndent=ft(t[s]),r.postIndent===-1);s++)if(r.postBlank+=1,r.postBlank===hn){r.postIndent=0;break}return r}function pn(t,e){t.preIndent===-1&&t.preBlank===0&&(e.penalty+=es),t.endOfFile&&(e.penalty+=ts);let n=t.indent===-1?1+t.postBlank:0,r=t.preBlank+n;e.penalty+=ns*r,e.penalty+=rs*n;let s=t.indent!==-1?t.indent:t.postIndent,i=r!==0;e.effectiveIndent+=s,s===-1||t.preIndent===-1||(s>t.preIndent?e.penalty+=i?is:ss:s===t.preIndent||(t.postIndent!==-1&&t.postIndent>s?e.penalty+=i?as:os:e.penalty+=i?ls:cs))}function us(t,e){let n=(t.effectiveIndent>e.effectiveIndent?1:0)-(t.effectiveIndent<e.effectiveIndent?1:0);return fs*n+(t.penalty-e.penalty)}function yn(t,e,n,r,s,i){let o=0,a=0;for(;t[a];)a++;let c=0,l=0;for(;s[l];)l++;let f=(u,d)=>e[u]===e[d];for(;;){if(a!==o){let u,d,h;do{for(u=a-o,d=-1;o>0&&f(o-1,a-1);){for(t[--o]=1,t[--a]=0;t[o-1];)o--;if(c===0)break;for(l=c-1,c=l;s[c-1];c--);}for(h=a,l>c&&(d=a);!(a>=r||!f(o,a));){for(t[o++]=0,t[a++]=1;t[a];)a++;if(l>=i)break;for(c=l+1,l=c;s[l];l++);l>c&&(d=a)}}while(u!==a-o);if(a!==h)if(d!==-1)for(;l===c;){for(t[--a]=0,t[--o]=1;t[o-1];)o--;for(l=c-1,c=l;s[c-1];c--);}else{let m=-1,y={effectiveIndent:0,penalty:0},p=h;for(a-u-1>p&&(p=a-u-1),a-dn>p&&(p=a-dn);p<=a;p++){let b={effectiveIndent:0,penalty:0},R=mn(n,r,p);pn(R,b);let v=mn(n,r,p-u);pn(v,b),(m===-1||us(b,y)<=0)&&(y={effectiveIndent:b.effectiveIndent,penalty:b.penalty},m=p)}for(;a>m;){for(t[--a]=0,t[--o]=1;t[o-1];)o--;for(l=c-1,c=l;s[c-1];c--);}}}if(a>=r)break;for(o=a+1,a=o;t[a];a++);if(l>=i)break;for(c=l+1,l=c;s[l];l++);}}function dt(t,e){let n=t.length,r=e.length,s=new Uint8Array(n),i=new Uint8Array(r);if(n>0&&r>0){let{classes1:o,classes2:a,classInfo:c}=Kr(t,e),{dstart:l,dend1:f,dend2:u}=Yr(o,n,a,r);if(l>f)for(let d=l;d<r-(n-1-f);d++)i[d]=1;else if(l>u)for(let d=l;d<n-(r-1-u);d++)s[d]=1;else{let{refIndex1:d,nreff1:h,refIndex2:m,nreff2:y}=qr(o,n,a,r,c,l,f,u,s,i);if(h>0&&y>0){let p=new Array(h);for(let w=0;w<h;w++)p[w]=o[d[w]];let b=new Array(y);for(let w=0;w<y;w++)b[w]=a[m[w]];let R={},v={},j=h+y+3,O=Math.max(Zr,ut(j));ht(p,0,h,b,0,y,s,i,d,m,R,v,!1,O)}else if(h===0)for(let p=0;p<y;p++)i[m[p]]=1;else for(let p=0;p<h;p++)s[d[p]]=1;yn(s,o,t,n,i,r),yn(i,a,e,r,s,n)}}else n===0?i.fill(1):s.fill(1);return{changedOld:s,changedNew:i}}function Ie(t,e){let n=t.length,r=e.length;if(n===0&&r===0)return[];if(n===0)return e.map((o,a)=>({type:"insert",line:o,oldLineNo:0,newLineNo:a+1}));if(r===0)return t.map((o,a)=>({type:"delete",line:o,oldLineNo:a+1,newLineNo:0}));let{changedOld:s,changedNew:i}=dt(t,e);return Qr(t,e,s,i)}var hs=3;function gn(t,e=hs){if(e=Math.max(0,e),t.length===0)return[];let n=[];for(let a=0;a<t.length;a++){let c=t[a];c&&c.type!=="keep"&&n.push(a)}if(n.length===0)return[];let r=n[0]??0,s=[],i=Math.max(0,r-e),o=Math.min(t.length-1,r+e);for(let a=1;a<n.length;a++){let c=n[a]??0,l=Math.max(0,c-e),f=Math.min(t.length-1,c+e);l<=o+1||(s.push({start:i,end:o}),i=l),o=f}return s.push({start:i,end:o}),s.map(a=>ds(t,a.start,a.end))}function ds(t,e,n){let r=0,s=0,i=0,o=0,a=[],c=!1,l=!1;for(let f=e;f<=n;f++){let u=t[f];if(u)switch(u.type){case"keep":c||(r=u.oldLineNo,c=!0),l||(i=u.newLineNo,l=!0),s++,o++,a.push({type:"context",content:u.line});break;case"delete":c||(r=u.oldLineNo,c=!0),s++,a.push({type:"delete",content:u.line});break;case"insert":l||(i=u.newLineNo,l=!0),o++,a.push({type:"insert",content:u.line});break}}if(c||(r=i>0?i:1),l||(i=r>0?r:1),s===0)for(let f=e;f<=n;f++){let u=t[f];if(u&&u.type==="insert"){r=u.newLineNo>1?u.newLineNo-1:0;break}}if(o===0)for(let f=e;f<=n;f++){let u=t[f];if(u&&u.type==="delete"){i=u.oldLineNo>1?u.oldLineNo-1:0;break}}return{oldStart:r,oldCount:s,newStart:i,newCount:o,lines:a}}function Ee(t){let e=t.lastIndexOf("/");return e>=0?t.slice(e+1):t}function ms(t,e){if(t.length===0)return;if(t.length===1)return t.shift();let n=Ee(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];if(i&&Ee(i.path)===n){r=s;break}}return t.splice(r,1)[0]}var ps=50;async function de(t,e,n=ps){let r=new Map,s=[],i=[],o=[];for(let f of e)if(f.status==="deleted"&&f.oldHash){let u=r.get(f.oldHash)??[];u.push(f),r.set(f.oldHash,u),s.push(f)}else f.status==="added"&&f.newHash?i.push(f):o.push(f);let a=[],c=[];for(let f of i){let u=f.newHash;if(!u){c.push(f);continue}let d=r.get(u);if(d&&d.length>0){let h=ms(d,f.path);h&&a.push({oldPath:h.path,newPath:f.path,oldHash:h.oldHash??u,newHash:u,similarity:100,oldMode:h.oldMode,newMode:f.newMode})}else c.push(f)}let l=[...r.values()].flat();if(l.length>0&&c.length>0){let f=await ys(t,l,c,n);if(f.length>0){let u=new Set(f.map(h=>h.oldPath)),d=new Set(f.map(h=>h.newPath));l=l.filter(h=>!u.has(h.path)),c=c.filter(h=>!d.has(h.path)),a.push(...f)}}if(l.length>0&&c.length>0){let f=await ws(t,l,c,n);if(f.length>0){let u=new Set(f.map(h=>h.oldPath)),d=new Set(f.map(h=>h.newPath));l=l.filter(h=>!u.has(h.path)),c=c.filter(h=>!d.has(h.path)),a.push(...f)}}return{remaining:[...o,...l,...c],renames:a}}async function ys(t,e,n,r){let s=new Map;for(let a=0;a<e.length;a++){let c=e[a];if(!c)continue;let l=Ee(c.path);s.has(l)?s.set(l,-1):s.set(l,a)}let i=new Map;for(let a=0;a<n.length;a++){let c=n[a];if(!c)continue;let l=Ee(c.path);i.has(l)?i.set(l,-1):i.set(l,a)}let o=[];for(let[a,c]of s){if(c===-1)continue;let l=i.get(a);if(l===void 0||l===-1)continue;let f=e[c],u=n[l];if(!f?.oldHash||!u?.newHash||f.oldHash===u.newHash)continue;let d=await ne(t,f.oldHash),h=await ne(t,u.newHash),m=bs(d,h);m<r||o.push({oldPath:f.path,newPath:u.path,oldHash:f.oldHash,newHash:u.newHash,similarity:m,oldMode:f.oldMode,newMode:u.newMode})}return o}var bn=107927;function Ke(t){let e=new Map,n=0,r=0,s=0;for(let o=0;o<t.length;o++){let a=t[o],c=r;if(r=(r<<7^s>>>25)>>>0,s=(s<<7^c>>>25)>>>0,r=r+a>>>0,n++,n<64&&a!==10)continue;let l=(r+Math.imul(s,97))%bn;e.set(l,(e.get(l)??0)+n),n=0,r=0,s=0}if(n>0){let o=(r+Math.imul(s,97))%bn;e.set(o,(e.get(o)??0)+n)}let i=[];for(let[o,a]of e)i.push({hash:o,count:a});return i.sort((o,a)=>o.hash-a.hash),i}function gs(t,e){let n=0,r=0,s=0,i=0;for(;s<t.length;){let o=t[s];if(!o)break;for(;i<e.length;){let l=e[i];if(!l||l.hash>=o.hash)break;r+=l.count,i++}let a=o.count,c=0;if(i<e.length){let l=e[i];l&&l.hash===o.hash&&(c=l.count,i++)}a<c?(r+=c-a,n+=a):n+=c,s++}for(;i<e.length;){let o=e[i];o&&(r+=o.count),i++}return{srcCopied:n,literalAdded:r}}function bs(t,e){return t.length===0&&e.length===0?100:t.length===0||e.length===0?0:wn(t.length,Ke(t),e.length,Ke(e))}function wn(t,e,n,r){let s=Math.max(t,n),i=Math.min(t,n);if(i<s-i)return 0;let{srcCopied:o}=gs(e,r);return Math.floor(o*100/s)}async function ws(t,e,n,r){let s=[];for(let f of e)if(f.oldHash){let u=await ne(t,f.oldHash);s.push({size:u.length,chunks:Ke(u)})}else s.push(null);let i=[];for(let f of n)if(f.newHash){let u=await ne(t,f.newHash);i.push({size:u.length,chunks:Ke(u)})}else i.push(null);let o=[];for(let f=0;f<e.length;f++){let u=e[f],d=s[f];if(!(!u||!d))for(let h=0;h<n.length;h++){let m=n[h],y=i[h];if(!m||!y)continue;let p=wn(d.size,d.chunks,y.size,y.chunks);if(p>=r){let b=Ee(u.path)===Ee(m.path)?1:0;o.push({similarity:p,nameScore:b,delIdx:f,addIdx:h})}}}o.sort((f,u)=>u.similarity-f.similarity||u.nameScore-f.nameScore);let a=new Set,c=new Set,l=[];for(let{similarity:f,delIdx:u,addIdx:d}of o){if(a.has(u)||c.has(d))continue;a.add(u),c.add(d);let h=e[u],m=n[d];!h||!m||l.push({oldPath:h.path,newPath:m.path,oldHash:h.oldHash??"",newHash:m.newHash??"",similarity:f,oldMode:h.oldMode,newMode:m.newMode})}return l}async function fe(t,e,n){return(await ce(t,e)).get(n)?.hash??null}async function In(t,e,n,r){let s=await ie(t,e,n);if(!s.find(c=>c.status==="added"&&c.path===r))return null;let{renames:o}=await de(t,s);return o.find(c=>c.newPath===r)?.oldPath??null}async function Is(t,e,n,r,s,i){let o=await fe(t,(await A(t,e)).tree,n);if(!o){let y=new Map,p=await A(t,e);for(let b of r)y.set(b.finalIdx,ue(e,n,b.currentLine,i+b.finalIdx,s[b.finalIdx],p,!1,void 0));return y}let a=await H(t,o),c=ee(a),l=new Array(s.length),f=[...r],u=e,d=n,h=c;for(;f.length>0;){let y=await A(t,u);if(y.parents.length===0){for(let E of f)l[E.finalIdx]=ue(u,d,E.currentLine,i+E.finalIdx,s[E.finalIdx],y,!0,void 0);break}let p=await fe(t,y.tree,d),b=null,R=[];for(let E of y.parents){let P=await A(t,E),T=d,$=await fe(t,P.tree,T);if(!$){let D=await In(t,P.tree,y.tree,d);D&&(T=D,$=await fe(t,P.tree,T))}if($&&(R.push({hash:E,path:T,blobHash:$}),$===p)){b={hash:E,path:T};break}}if(b){u=b.hash,d=b.path;continue}if(R.length===0){for(let E of f)l[E.finalIdx]=ue(u,d,E.currentLine,i+E.finalIdx,s[E.finalIdx],y,!1,void 0);break}let v=R[0],j=await H(t,v.blobHash),O=ee(j),w=Ie(O,h),x=new Map;for(let E of w)E.type==="keep"&&x.set(E.newLineNo,E.oldLineNo);let S=[];for(let E of f){let P=x.get(E.currentLine);P!==void 0?S.push({finalIdx:E.finalIdx,currentLine:P}):l[E.finalIdx]=ue(u,d,E.currentLine,i+E.finalIdx,s[E.finalIdx],y,!1,{hash:v.hash,path:v.path})}f=S,u=v.hash,d=v.path,h=O}let m=new Map;for(let y of r)l[y.finalIdx]&&m.set(y.finalIdx,l[y.finalIdx]);return m}async function En(t,e,n,r){let s=await A(t,e),i=await fe(t,s.tree,n);if(!i)throw new Error(`no such path '${n}' in ${e.slice(0,7)}`);let o=await H(t,i),a=ee(o),c=r?.startLine??1,l=r?.endLine??a.length,f=a.slice(c-1,l),u=new Array(f.length),d=f.map((p,b)=>({finalIdx:b,currentLine:c+b})),h=e,m=n,y=a;for(;d.length>0;){let p=await A(t,h);if(p.parents.length===0){for(let x of d)u[x.finalIdx]=ue(h,m,x.currentLine,c+x.finalIdx,f[x.finalIdx],p,!0,void 0);break}let b=await fe(t,p.tree,m),R=[],v=null;for(let x of p.parents){let S=await A(t,x),E=m,P=await fe(t,S.tree,E);if(!P){let T=await In(t,S.tree,p.tree,m);T&&(E=T,P=await fe(t,S.tree,E))}if(P){let T={hash:x,path:E,blobHash:P};if(R.push(T),P===b){v=T;break}}}if(v){h=v.hash,m=v.path;continue}if(R.length===0){for(let x of d)u[x.finalIdx]=ue(h,m,x.currentLine,c+x.finalIdx,f[x.finalIdx],p,!1,void 0);break}if(R.length===1){let x=R[0],S=await H(t,x.blobHash),E=ee(S),P=Ie(E,y),T=new Map;for(let D of P)D.type==="keep"&&T.set(D.newLineNo,D.oldLineNo);let $=[];for(let D of d){let oe=T.get(D.currentLine);oe!==void 0?$.push({finalIdx:D.finalIdx,currentLine:oe}):u[D.finalIdx]=ue(h,m,D.currentLine,c+D.finalIdx,f[D.finalIdx],p,!1,{hash:x.hash,path:x.path})}d=$,h=x.hash,m=x.path,y=E;continue}let j=[];for(let x of R){let S=await H(t,x.blobHash),E=ee(S),P=Ie(E,y),T=new Map;for(let $ of P)$.type==="keep"&&T.set($.newLineNo,$.oldLineNo);j.push({info:x,newToOld:T})}let O=new Map;for(let x of d){let S=!1;for(let E=0;E<j.length;E++){let P=j[E],T=P.newToOld.get(x.currentLine);if(T!==void 0){let $=O.get(E);$||($={info:P.info,lines:[]},O.set(E,$)),$.lines.push({finalIdx:x.finalIdx,currentLine:T}),S=!0;break}}S||(u[x.finalIdx]=ue(h,m,x.currentLine,c+x.finalIdx,f[x.finalIdx],p,!1,{hash:R[0].hash,path:R[0].path}))}let w=O.get(0);for(let[x,S]of O){if(x===0)continue;let E=await Is(t,S.info.hash,S.info.path,S.lines,f,c);for(let[P,T]of E)u[P]=T}if(w&&w.lines.length>0){d=w.lines,h=w.info.hash,m=w.info.path;let x=await H(t,w.info.blobHash);y=ee(x)}else break}return u}function ue(t,e,n,r,s,i,o,a){return{hash:t,origPath:e,origLine:n,finalLine:r,content:s,author:i.author,committer:i.committer,summary:i.message.split(`
|
|
12
|
-
`)[0],boundary:o,previous:a}}var xe=class{heap=[];nextEpoch=0;get size(){return this.heap.length}push(e){this.heap.push({entry:e,epoch:this.nextEpoch++}),this.siftUp(this.heap.length-1)}pop(){let{heap:e}=this;if(e.length===0)return;let n=e[0],r=e.pop();return e.length>0&&(e[0]=r,this.siftDown(0)),n.entry}higher(e,n){let r=e.entry.commit.committer.timestamp,s=n.entry.commit.committer.timestamp;return r>s||r===s&&e.epoch<n.epoch}siftUp(e){let{heap:n}=this;for(;e>0;){let r=e-1>>1;if(!this.higher(n[e],n[r]))break;[n[r],n[e]]=[n[e],n[r]],e=r}}siftDown(e){let{heap:n}=this,r=n.length;for(;;){let s=e,i=2*e+1,o=2*e+2;if(i<r&&this.higher(n[i],n[s])&&(s=i),o<r&&this.higher(n[o],n[s])&&(s=o),s===e)break;[n[e],n[s]]=[n[s],n[e]],e=s}}};async function*me(t,e,n){if(n?.topoOrder){yield*Es(t,e,n);return}let r=await On(t,n?.exclude),s=new Set(r),i=new xe,o=n?.shallowBoundary,a=Array.isArray(e)?e:[e];for(let c of a)s.has(c)||i.push(await Ye(t,c));for(;i.size>0;){let c=i.pop();if(s.has(c.hash)||(s.add(c.hash),yield c,o?.has(c.hash)))continue;let l=n?.firstParent?c.commit.parents.slice(0,1):c.commit.parents;for(let f of l)if(!s.has(f))try{i.push(await Ye(t,f))}catch{}}}async function*Es(t,e,n){let r=await On(t,n?.exclude),s=new Set(r),i=new xe,o=n?.shallowBoundary,a=Array.isArray(e)?e:[e];for(let h of a)s.has(h)||i.push(await Ye(t,h));let c=[],l=new Map;for(;i.size>0;){let h=i.pop();if(s.has(h.hash)||(s.add(h.hash),l.set(h.hash,c.length),c.push(h),o?.has(h.hash)))continue;let m=n?.firstParent?h.commit.parents.slice(0,1):h.commit.parents;for(let y of m)if(!s.has(y))try{i.push(await Ye(t,y))}catch{}}let f=c.length;if(f===0)return;let u=new Int32Array(f);for(let h of c){let m=n?.firstParent?h.commit.parents.slice(0,1):h.commit.parents;for(let y of m){let p=l.get(y);p!==void 0&&(u[p]=(u[p]??0)+1)}}let d=[];for(let h=f-1;h>=0;h--)u[h]===0&&d.push(h);for(;d.length>0;){let h=d.pop();yield c[h];let m=n?.firstParent?c[h].commit.parents.slice(0,1):c[h].commit.parents;for(let y of m){let p=l.get(y);if(p!==void 0){let b=(u[p]??0)-1;u[p]=b,b===0&&d.push(p)}}}}async function xn(t,e,n){if(e===n)return{ahead:0,behind:0};let r=new Set;for await(let a of me(t,e))r.add(a.hash);let s=new Set;for await(let a of me(t,n))s.add(a.hash);let i=0;for(let a of r)s.has(a)||i++;let o=0;for(let a of s)r.has(a)||o++;return{ahead:i,behind:o}}async function On(t,e){if(!e||e.length===0)return new Set;let n=new Set;for await(let r of me(t,e))n.add(r.hash);return n}async function Ye(t,e){return{hash:e,commit:await A(t,e)}}async function xs(t,e){let n=new Set,r=[e],s=0;for(;s<r.length;){let i=r[s++];if(n.has(i))continue;n.add(i);let o;try{o=await A(t,i)}catch{continue}for(let a of o.parents)n.has(a)||r.push(a)}return n}async function mt(t,e,n){if(e===n)return!0;let r=new Set,s=[n],i=0;for(;i<s.length;){let o=s[i++];if(o===e)return!0;if(r.has(o))continue;r.add(o);let a;try{a=await A(t,o)}catch{continue}for(let c of a.parents)r.has(c)||s.push(c)}return!1}async function $e(t,e,n){if(e===n)return[e];let r=await xs(t,e),s=[],i=new Set,o=[n],a=0;for(;a<o.length;){let l=o[a++];if(i.has(l))continue;if(i.add(l),r.has(l)){s.push(l);continue}let f;try{f=await A(t,l)}catch{continue}for(let u of f.parents)i.has(u)||o.push(u)}if(s.length<=1)return s;let c=[];for(let l of s){let f=!1;for(let u of s)if(u!==l&&await mt(t,l,u)){f=!0;break}f||c.push(l)}return c.length<=1?c:Os(t,e,n,c)}async function Os(t,e,n,r){let s=new Set(r),i=new Set,o=[],a=new Map,c=new Map,l=0,f=[{hash:e,mask:1,seq:l++},{hash:n,mask:2,seq:l++}];async function u(d){let h=c.get(d);if(h!==void 0)return h;let m=(await A(t,d)).committer.timestamp;return c.set(d,m),m}for(;f.length>0;){let d=0,h=await u(f[0].hash);for(let R=1;R<f.length;R++){let v=f[R],j=await u(v.hash),O=f[d];(j>h||j===h&&v.seq<O.seq)&&(d=R,h=j)}let m=f.splice(d,1)[0],y=a.get(m.hash)??0,p=y|m.mask;if(p===y)continue;if(a.set(m.hash,p),p===3&&s.has(m.hash)&&!i.has(m.hash)&&(o.push(m.hash),i.add(m.hash),i.size===s.size))break;let b=await A(t,m.hash);for(let R of b.parents)f.push({hash:R,mask:p,seq:l++})}for(let d of r)i.has(d)||o.push(d);return o}async function Rs(t,e){return J(t,e)}async function Ps(t,e,n){return ie(t,e,n)}async function ks(t,e,n){let r=await A(t,n),s=null;return e&&(s=(await A(t,e)).tree),ie(t,s,r.tree)}async function*Ts(t,e,n){let r=e?[e]:[];for await(let s of me(t,n,{exclude:r}))yield{hash:s.hash,message:s.commit.message,tree:s.commit.tree,parents:s.commit.parents,author:s.commit.author,committer:s.commit.committer}}async function Ss(t,e,n){return mt(t,e,n)}async function Cs(t,e,n){return $e(t,e,n)}async function vs(t,e,n){return xn(t,e,n)}async function js(t,e,n,r){return En(t,e,n,r)}function As(t){return t==="insert"?"+":t==="delete"?"-":" "}function $s(t){return{oldStart:t.oldStart,oldCount:t.oldCount,newStart:t.newStart,newCount:t.newCount,lines:t.lines.map(e=>As(e.type)+e.content)}}function Rn(t,e,n){let r=ee(t),s=ee(e),i=Ie(r,s);return gn(i,n).map($s)}async function Pn(t,e){let n=await Fe(t,e);if(n)return n;throw new Error(`ref or commit '${e}' not found`)}async function Ls(t,e,n,r){let s=await Pn(t,e),i=await Pn(t,n),o=await A(t,s),a=await A(t,i),c=await ie(t,o.tree,a.tree),l=r?.renames!==!1,f=r?.contextLines,u=r?.paths,d=[];if(l){let m=await de(t,c);c=m.remaining,d=m.renames}let h=[];for(let m of c){if(u&&!u.some(R=>m.path.startsWith(R)))continue;let y=m.oldHash?await H(t,m.oldHash):"",p=m.newHash?await H(t,m.newHash):"",b=Rn(y,p,f);h.push({path:m.path,status:m.status,hunks:b})}for(let m of d){if(u&&!u.some(R=>m.newPath.startsWith(R)||m.oldPath.startsWith(R)))continue;let y=await H(t,m.oldHash),p=await H(t,m.newHash),b=Rn(y,p,f);h.push({path:m.newPath,status:"renamed",oldPath:m.oldPath,similarity:m.similarity,hunks:b})}return h.sort((m,y)=>m.path.localeCompare(y.path)),h}async function*Ms(t,e,n){if(n?.paths&&n.paths.length>0){yield*Ds(t,e,n.paths,n);return}for await(let r of me(t,e,n))yield{hash:r.hash,message:r.commit.message,tree:r.commit.tree,parents:r.commit.parents,author:r.commit.author,committer:r.commit.committer}}function pt(t,e){return e.some(n=>t===n||t.startsWith(n.endsWith("/")?n:n+"/"))}async function*Ds(t,e,n,r){let s=new Set;if(r?.exclude)for await(let l of me(t,r.exclude))s.add(l.hash);let i=new Set(s),o=new xe,a=async l=>{if(!i.has(l))try{let f=await A(t,l);o.push({hash:l,commit:f})}catch{}},c=Array.isArray(e)?e:[e];for(let l of c)await a(l);for(;o.size>0;){let l=o.pop();if(i.has(l.hash))continue;i.add(l.hash);let{commit:f}=l,u=r?.firstParent?f.parents.slice(0,1):f.parents,d=()=>({hash:l.hash,message:f.message,tree:f.tree,parents:f.parents,author:f.author,committer:f.committer});if(u.length===0){(await ie(t,null,f.tree)).some(y=>pt(y.path,n))&&(yield d());continue}if(u.length===1){let m=u[0];try{let y=await A(t,m);(await ie(t,y.tree,f.tree)).some(b=>pt(b.path,n))&&(yield d())}catch{yield d()}await a(m);continue}let h=[];for(let m of u)try{let y=await A(t,m);(await ie(t,y.tree,f.tree)).some(b=>pt(b.path,n))||h.push(m)}catch{}if(h.length>0)await a(h[0]);else{yield d();for(let m of u)await a(m)}}}async function Hs(t,e){let n=Ne({type:"commit",tree:e.tree,parents:e.parents,author:e.author,committer:e.committer,message:e.message}),r=await _(t,"commit",n);if(e.branch){let s=`refs/heads/${e.branch}`;await t.refStore.writeRef(s,{type:"direct",hash:r}),await t.refStore.readRef("HEAD")||await t.refStore.writeRef("HEAD",{type:"symbolic",target:s})}return r}async function Us(t,e){let n=[...e].sort((i,o)=>i.name.localeCompare(o.name)),r=await Promise.all(n.map(async i=>{let o=i.mode;return o||(o=(await t.objectStore.read(i.hash)).type==="tree"?"040000":"100644"),{mode:o,name:i.name,hash:i.hash}})),s=Ge({type:"tree",entries:r});return _(t,"tree",s)}async function Ns(t,e){return _(t,"blob",new TextEncoder().encode(e))}function yt(t,e){let n=t.length,r=e.length;if(n===0&&r===0)return[];if(n===0)return[{buffer1:[0,0],buffer2:[0,r]}];if(r===0)return[{buffer1:[0,n],buffer2:[0,0]}];let{changedOld:s,changedNew:i}=dt(t,e);return Bs(s,n,i,r)}function Bs(t,e,n,r){let s=[],i=0,o=0;for(;i<e||o<r;){for(;i<e&&o<r&&!t[i]&&!n[o];)i++,o++;if(i>=e&&o>=r)break;let a=i,c=o;for(;i<e&&t[i];)i++;for(;o<r&&n[o];)o++;(i>a||o>c)&&s.push({buffer1:[a,i-a],buffer2:[c,o-c]})}return s}function Fs(t,e,n){let r=[];for(let c of yt(e,t))r.push({ab:"a",oStart:c.buffer1[0],oLength:c.buffer1[1],abStart:c.buffer2[0],abLength:c.buffer2[1]});for(let c of yt(e,n))r.push({ab:"b",oStart:c.buffer1[0],oLength:c.buffer1[1],abStart:c.buffer2[0],abLength:c.buffer2[1]});r.sort((c,l)=>c.oStart-l.oStart);let s=[],i=0;function o(c){c>i&&(s.push({stable:!0,buffer:"o",bufferStart:i,bufferLength:c-i,content:e.slice(i,c)}),i=c)}let a=0;for(;a<r.length;){let c=r[a++],l=c.oStart,f=c.oStart+c.oLength,u=[c];for(o(l);a<r.length;){let d=r[a];if(d.oStart>f)break;f=Math.max(f,d.oStart+d.oLength),u.push(d),a++}if(u.length===1){if(c.abLength>0){let d=c.ab==="a"?t:n;s.push({stable:!0,buffer:c.ab,bufferStart:c.abStart,bufferLength:c.abLength,content:d.slice(c.abStart,c.abStart+c.abLength)})}}else{let d={a:{abMin:t.length,abMax:-1,oMin:e.length,oMax:-1},b:{abMin:n.length,abMax:-1,oMin:e.length,oMax:-1}};for(let b of u){let R=b.oStart,v=R+b.oLength,j=b.abStart,O=j+b.abLength,w=d[b.ab];w.abMin=Math.min(j,w.abMin),w.abMax=Math.max(O,w.abMax),w.oMin=Math.min(R,w.oMin),w.oMax=Math.max(v,w.oMax)}let h=d.a.abMin+(l-d.a.oMin),m=d.a.abMax+(f-d.a.oMax),y=d.b.abMin+(l-d.b.oMin),p=d.b.abMax+(f-d.b.oMax);s.push({stable:!1,a:t.slice(h,m),o:e.slice(l,f),b:n.slice(y,p)})}i=f}return o(e.length),s}function Gs(t,e,n,r){let s=r?.excludeFalseConflicts??!0,i=Fs(t,e,n),o=[],a=[];function c(){a.length&&(o.push({type:"ok",lines:a}),a=[])}for(let l of i)l.stable?a.push(...l.content):s&&Tn(l.a,l.b)?a.push(...l.a):(c(),o.push({type:"conflict",a:l.a,o:l.o,b:l.b}));return c(),r?.conflictStyle==="diff3"?kn(o):kn(_s(o))}function Le(t,e,n,r){let s=r?.markerSize??7,i=r?.conflictStyle??"merge",o=`${"<".repeat(s)}${r?.a?` ${r.a}`:""}`,a=`${"|".repeat(s)}${r?.o?` ${r.o}`:""}`,c="=".repeat(s),l=`${">".repeat(s)}${r?.b?` ${r.b}`:""}`,f=Gs(t,e,n,{conflictStyle:i}),u=!1,d=[];for(let h of f)h.type==="ok"?d.push(...h.lines):(u=!0,i==="diff3"?d.push(o,...h.a,a,...h.o,c,...h.b,l):d.push(o,...h.a,c,...h.b,l));return{conflict:u,result:d}}function _s(t){let e=[];for(let n of t)n.type==="ok"?e.push(n):e.push(...Ws(n));return e}function Ws(t){let{a:e,b:n}=t;if(e.length===0||n.length===0)return[t];if(Tn(e,n))return[t];let r=yt(e,n);if(r.length===0)return[{type:"ok",lines:e}];let s=[],i=0;for(let a of r){let c=a.buffer1[0];c-i>0&&s.push({type:"ok",lines:e.slice(i,c)});let f=c+a.buffer1[1],u=a.buffer2[0]+a.buffer2[1];s.push({type:"conflict",a:e.slice(c,f),o:[],b:n.slice(a.buffer2[0],u)}),i=f}return e.length-i>0&&s.push({type:"ok",lines:e.slice(i)}),s.length===1&&s[0].type==="conflict"?[t]:s}function kn(t){if(t.length<3)return t;let e=[t[0]];for(let r=1;r<t.length;r++){let s=e[e.length-1],i=t[r];s.type==="ok"&&i.type==="ok"?s.lines=[...s.lines,...i.lines]:e.push(i)}if(e.length<3)return e;let n=[e[0]];for(let r=1;r<e.length;r++){let s=n[n.length-1],i=e[r];if(s.type==="conflict"&&i.type==="ok"&&i.lines.length<=3&&r+1<e.length&&e[r+1].type==="conflict"){let o=e[r+1],a=s;a.a=[...s.a,...i.lines,...o.a],a.b=[...s.b,...i.lines,...o.b],a.o=[...s.o,...i.lines,...o.o],r++}else n.push(i)}return n}function pe(t,e,n,r){let s=Le(Y(t),Y(e),Y(n),{a:r.a,o:r.o,b:r.b,markerSize:r.markerSize,conflictStyle:r.conflictStyle}),o=(s.result[s.result.length-1]??"").endsWith("\0"),a=s.result.map(gt);return(a[a.length-1]??"").startsWith(">>>>>>>")||!o?`${a.join(`
|
|
8
|
+
`)){let f=l.indexOf(" ");if(f===-1)continue;let u=l.slice(0,f),d=l.slice(f+1);switch(u){case"object":i=d;break;case"type":o=d;break;case"tag":a=d;break;case"tagger":c=je(d);break}}if(!i)throw new Error("Tag missing object field");if(!a)throw new Error("Tag missing tag name field");if(!c)throw new Error("Tag missing tagger field");return{type:"tag",object:i,objectType:o,name:a,tagger:c,message:s}}function Xt(t){let e=[];return e.push(`object ${t.object}`),e.push(`type ${t.objectType}`),e.push(`tag ${t.name}`),e.push(`tagger ${ve(t.tagger)}`),e.push(""),e.push(t.message),Or.encode(e.join(`
|
|
9
|
+
`))}async function B(t,e,n){let r=await t.objectStore.write(e,n);return t.hooks?.onObjectWrite?.({repo:t,type:e,hash:r}),r}async function F(t,e){return t.objectStore.read(e)}async function Zt(t,e){return t.objectStore.exists(e)}async function Jt(t,e){return t.objectStore.findByPrefix(e)}function ne(t){let e=Math.min(t.length,8e3);for(let n=0;n<e;n++)if(t.charCodeAt(n)===0)return!0;return!1}var Pr=new TextDecoder;async function H(t,e){let n=await F(t,e);if(n.type!=="blob")throw new Error(`Expected blob for ${e}, got ${n.type}`);return Pr.decode(n.content)}async function re(t,e){let n=await F(t,e);if(n.type!=="blob")throw new Error(`Expected blob for ${e}, got ${n.type}`);return n.content}async function v(t,e){let n=await F(t,e);if(n.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${n.type}`);return Yt(n.content)}async function $e(t,e){let n=e;for(let r=0;r<100;r++){let s=await F(t,n);if(s.type==="commit")return n;if(s.type==="tag"){n=qt(s.content).object;continue}throw new Error(`Cannot peel ${s.type} object ${e} to commit`)}throw new Error(`Tag chain too deep for ${e}`)}var kr=new TextEncoder,Qt=new TextDecoder,Tr=new Set(["100644","100755","040000","120000","160000"]);function Sr(t){return t.length===4&&t.toLowerCase()===".git"}function Cr(t,e){if(t.length===0)throw new Error("invalid tree entry: empty name");if(t.includes("/"))throw new Error(`invalid tree entry: name contains slash: '${t}'`);if(t.includes("\0"))throw new Error("invalid tree entry: name contains null byte");if(t==="."||t==="..")throw new Error(`invalid tree entry: '${t}'`);if(Sr(t))throw new Error(`invalid tree entry: '${t}'`);if(!Tr.has(e))throw new Error(`invalid tree entry mode: '${e}' for '${t}'`)}function se(t){let e=[],n=0;for(;n<t.byteLength;){let r=t.indexOf(32,n);if(r===-1)break;let s=Qt.decode(t.subarray(n,r)),i=t.indexOf(0,r+1);if(i===-1)break;let o=Qt.decode(t.subarray(r+1,i)),a=t.subarray(i+1,i+21),c=Te(a),l=s.padStart(6,"0");Cr(o,l),e.push({mode:l,name:o,hash:c}),n=i+21}return{type:"tree",entries:e}}function Le(t){let e=[];for(let i of t.entries){let o=i.mode.replace(/^0+/,""),a=kr.encode(`${o} ${i.name}\0`),c=ye(i.hash);e.push(a),e.push(c)}let n=e.reduce((i,o)=>i+o.byteLength,0),r=new Uint8Array(n),s=0;for(let i of e)r.set(i,s),s+=i.byteLength;return r}var _={REGULAR:"100644",EXECUTABLE:"100755",SYMLINK:"120000",DIRECTORY:"040000",SUBMODULE:"160000"};function en(t){return typeof t=="string"?{type:"direct",hash:t}:t}var jr=10;async function vr(t,e){return t.refStore.readRef(e)}async function J(t,e){let n=e;for(let r=0;r<jr;r++){let s=await vr(t,n);if(!s)return null;if(s.type==="direct")return s.hash;n=s.target}throw new Error(`Symbolic ref loop detected resolving "${e}"`)}async function ct(t,e="refs"){return t.refStore.listRefs(e)}function tn(t){return t.length===4&&t.toLowerCase()===".git"}function nn(t){if(t.length===0||t.includes("\0")||t.charCodeAt(0)===47||t.charCodeAt(t.length-1)===47)return!1;let e=t.split("/");for(let n of e)if(n.length===0||n==="."||n===".."||tn(n))return!1;return!0}function rn(t,e){return e===t?!1:t==="/"?e.startsWith("/")&&e.length>1:e.startsWith(t+"/")}function sn(t){if(t.length===0||t.charCodeAt(0)===47)return!1;let e=t.split("/");for(let n of e)if(n===".."||tn(n))return!1;return!0}var Ar=1145655875,$r=2;async function Fe(t,e){let n=we(t.gitDir,"index"),r=await Lr(e);await t.fs.writeFile(n,r)}function on(t){let e=[...t].sort(an);return{version:$r,entries:e}}function ce(){return{ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,uid:0,gid:0,size:0}}async function Lr(t){let e=new TextEncoder,n=[...t.entries].sort(an),r=[],s=12;for(let d of n){let h=e.encode(d.path);r.push(h);let m=62+h.byteLength+1;s+=Math.ceil(m/8)*8}s+=20;let i=new ArrayBuffer(s),o=new Uint8Array(i),a=new DataView(i),c=0;a.setUint32(c,Ar),c+=4,a.setUint32(c,t.version),c+=4,a.setUint32(c,n.length),c+=4;for(let d=0;d<n.length;d++){let h=n[d],m=r[d],g=c;a.setUint32(c,h.stat.ctimeSeconds),a.setUint32(c+4,h.stat.ctimeNanoseconds),a.setUint32(c+8,h.stat.mtimeSeconds),a.setUint32(c+12,h.stat.mtimeNanoseconds),a.setUint32(c+16,h.stat.dev),a.setUint32(c+20,h.stat.ino),a.setUint32(c+24,h.mode),a.setUint32(c+28,h.stat.uid),a.setUint32(c+32,h.stat.gid),a.setUint32(c+36,h.stat.size),c+=40;let p=ye(h.hash);o.set(p,c),c+=20;let b=Math.min(m.byteLength,4095),R=(h.stage&3)<<12|b;a.setUint16(c,R),c+=2,o.set(m,c),c+=m.byteLength,o[c]=0,c+=1;let j=62+m.byteLength+1,A=Math.ceil(j/8)*8;c=g+A}let l=o.subarray(0,c),f=await Be(l),u=ye(f);return o.set(u,c),o}function an(t,e){return t.path<e.path?-1:t.path>e.path?1:t.stage-e.stage}function Mr(t){let e=[],n=t.length;for(;n>0;){let i=t.slice(0,n).match(/^(.+?)~(\d*)$/);if(i&&i[1]!==void 0&&i[2]!==void 0){let c=i[2]===""?1:parseInt(i[2],10);e.unshift({type:"tilde",n:c}),n=i[1].length;continue}let o=t.slice(0,n).match(/^(.+?)\^{([^}]*)}$/);if(o&&o[1]!==void 0&&o[2]!==void 0){e.unshift({type:"peel",target:o[2]}),n=o[1].length;continue}let a=t.slice(0,n).match(/^(.+?)\^(\d*)$/);if(a&&a[1]!==void 0&&a[2]!==void 0){let c=a[2]===""?1:parseInt(a[2],10);e.unshift({type:"caret",n:c}),n=a[1].length;continue}break}let r=t.slice(0,n),s=r.match(/^(.+?)@\{(\d+)\}$/);return s&&s[1]!==void 0&&s[2]!==void 0?{base:s[1],reflogIndex:parseInt(s[2],10),suffixes:e}:{base:r,suffixes:e}}var Dr=["HEAD","FETCH_HEAD","ORIG_HEAD","MERGE_HEAD","CHERRY_PICK_HEAD","REBASE_HEAD"];async function Hr(t,e){let n=await Jt(t,e);if(n.length===0)return null;if(n.length>1)throw new lt(e);return n[0]}var lt=class extends Error{constructor(n){super(`short object ID ${n} is ambiguous`);this.prefix=n}};async function Ur(t,e){if(e==="HEAD"||e==="@")return J(t,"HEAD");if(Dr.includes(e))return J(t,e);if(/^[0-9a-f]{40}$/.test(e))return await Zt(t,e)?e:null;if(/^[0-9a-f]{4,39}$/.test(e)){let i=await Hr(t,e);if(i)return i}if(e.startsWith("refs/")){let i=await J(t,e);if(i)return i}let n=await J(t,`refs/heads/${e}`);if(n)return n;let r=await J(t,`refs/tags/${e}`);if(r)return r;let s=await J(t,`refs/remotes/${e}`);return s||null}async function Nr(t,e,n){if(n===""||n==="commit")try{return await $e(t,e)}catch{return null}if(n==="tree"){let s;try{s=await $e(t,e)}catch{return null}return(await v(t,s)).tree}return(await F(t,e)).type!==n?null:e}async function Br(t,e,n){let r=e;n.some(i=>i.type==="tilde"||i.type==="caret")&&(r=await $e(t,r));for(let i of n)if(i.type==="peel"){if(!r)return null;r=await Nr(t,r,i.target)}else if(i.type==="tilde")for(let o=0;o<i.n;o++){if(!r)return null;let a=await v(t,r);if(a.parents.length===0||(r=a.parents[0]??null,!r))return null}else{if(i.n===0)continue;if(!r)return null;let o=await v(t,r);if(i.n>o.parents.length||(r=o.parents[i.n-1]??null,!r))return null}return r}async function _e(t,e){let{base:n,reflogIndex:r,suffixes:s}=Mr(e);if(r!==void 0)return null;let i=await Ur(t,n);return i?Br(t,i,s):null}var to=new TextEncoder;function ie(t){return typeof t=="string"?t==="120000":t===40960}function cn(t){return{stdout:"",stderr:`fatal: ${t}
|
|
10
|
+
`,exitCode:128}}var ro=cn("not a git repository (or any of the parent directories): .git"),so=cn("this operation must be run in a work tree");function Me(t,e){return t<e?-1:t>e?1:0}async function ft(t,e){return ln(t,e,"")}async function ln(t,e,n){let r=[],s=new Map;for(let o of e){let a=n?o.path.slice(n.length+1):o.path,c=a.indexOf("/");if(c===-1)r.push({mode:Gr(o.mode),name:a,hash:o.hash});else{let l=a.slice(0,c),f=s.get(l);f||(f=[],s.set(l,f)),f.push(o)}}for(let[o,a]of s){let c=n?`${n}/${o}`:o,l=await ln(t,a,c);r.push({mode:_.DIRECTORY,name:o,hash:l})}r.sort((o,a)=>{let c=o.mode===_.DIRECTORY?`${o.name}/`:o.name,l=a.mode===_.DIRECTORY?`${a.name}/`:a.name;return c<l?-1:c>l?1:0});let i=Le({type:"tree",entries:r});return B(t,"tree",i)}async function Q(t,e,n=""){let r=await F(t,e);if(r.type!=="tree")throw new Error(`Expected tree object, got ${r.type}`);let s=se(r.content),i=[];for(let o of s.entries){let a=n?`${n}/${o.name}`:o.name;if(o.mode===_.DIRECTORY){let c=await Q(t,o.hash,a);i.push(...c)}else i.push({path:a,mode:o.mode,hash:o.hash})}return i}async function le(t,e){if(!e)return new Map;let n=await Q(t,e);return new Map(n.map(r=>[r.path,r]))}async function oe(t,e,n){let r=await le(t,e),s=await le(t,n),i=[];for(let[o,a]of r){let c=s.get(o);c?(a.hash!==c.hash||a.mode!==c.mode)&&i.push({path:o,status:"modified",oldHash:a.hash,newHash:c.hash,oldMode:a.mode,newMode:c.mode}):i.push({path:o,status:"deleted",oldHash:a.hash,oldMode:a.mode})}for(let[o,a]of s)r.has(o)||i.push({path:o,status:"added",newHash:a.hash,newMode:a.mode});return i.sort((o,a)=>Me(o.path,a.path))}function Gr(t){return t.toString(8).padStart(6,"0")}function Fr(t){let e=Math.min(t.length,8e3),n=0;for(let r=0;r<e;r++)t.charCodeAt(r)===0&&n++;return n>e*.01}function fn(t,e,n,r){if(Fr(t)){let o=e.some(a=>a.test(t));return{matches:[],binary:o}}let s=t.split(`
|
|
11
|
+
`);if(s.length>0&&s[s.length-1]===""&&s.pop(),n&&e.length>1&&!e.every(a=>s.some(c=>a.test(c))))return{matches:[],binary:!1};let i=[];for(let o=0;o<s.length;o++){let a=s[o],c=e.some(l=>l.test(a));(r?!c:c)&&i.push({lineNo:o+1,line:a})}return{matches:i,binary:!1}}function _r(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function un(t,e){let n=e?.fixed?_r(t):t;e?.wordRegexp&&(n=`\\b${n}\\b`);let r=e?.ignoreCase?"i":"";try{return new RegExp(n,r)}catch{return null}}async function Wr(t,e){return J(t,e)}async function zr(t){return ct(t,"refs/heads")}async function Vr(t){return ct(t,"refs/tags")}async function Kr(t,e){return v(t,e)}async function Yr(t,e){return re(t,e)}async function qr(t,e){return H(t,e)}async function Xr(t,e){let n=await F(t,e);if(n.type!=="tree")throw new Error(`Expected tree object, got ${n.type}`);return se(n.content).entries}async function Zr(t,e,n){let r=await v(t,e),i=(await Q(t,r.tree)).find(o=>o.path===n);return i?H(t,i.hash):null}function Jr(t){let e=0;for(let n=0;n<t.length;n++)t[n]==="/"&&e++;return e}function Qr(t,e){let n=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"\0").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/\0/g,".*");return new RegExp(`^${n}$`).test(e)}async function es(t,e,n,r){let s=[];for(let m of n)if(m instanceof RegExp)s.push(m);else{let g=un(m,{fixed:r?.fixed,ignoreCase:r?.ignoreCase,wordRegexp:r?.wordRegexp});if(!g)throw new Error(`Invalid pattern: ${m}`);s.push(g)}let i=await v(t,e),a=(await Q(t,i.tree)).filter(m=>!m.mode.startsWith("120")).sort((m,g)=>m.path<g.path?-1:m.path>g.path?1:0),c=r?.allMatch??!1,l=r?.invert??!1,f=r?.maxCount,u=r?.maxDepth,d=r?.paths,h=[];for(let m of a){if(u!==void 0&&Jr(m.path)>u||d&&!d.some(R=>Qr(R,m.path)))continue;let g=await H(t,m.hash),p=fn(g,s,c,l);if(p.binary){h.push({path:m.path,matches:[],binary:!0});continue}if(p.matches.length===0)continue;let b=f!==void 0?p.matches.slice(0,f):p.matches;h.push({path:m.path,matches:b,binary:!1})}return h}function te(t){if(t.length===0)return[];let e=t.split(`
|
|
12
|
+
`);return e[e.length-1]===""&&e.pop(),e}var ts=4,hn=1024,We=100,Ke=0,ze=1,Ie=2;function ht(t){let e=1;for(;e*e<t;)e++;return e}function ns(t,e){let n=new Map,r=[],s=new Array(t.length),i=new Array(e.length);for(let o=0;o<t.length;o++){let a=t[o],c=n.get(a);c===void 0&&(c=r.length,n.set(a,c),r.push({len1:0,len2:0})),r[c].len1++,s[o]=c}for(let o=0;o<e.length;o++){let a=e[o],c=n.get(a);c===void 0&&(c=r.length,n.set(a,c),r.push({len1:0,len2:0})),r[c].len2++,i[o]=c}return{classes1:s,classes2:i,classInfo:r}}function rs(t,e,n,r){let s=0,i=Math.min(e,r);for(;s<i&&t[s]===n[s];)s++;let o=s,a=0,c=i-o;for(;a<c&&t[e-1-a]===n[r-1-a];)a++;return{dstart:o,dend1:e-a-1,dend2:r-a-1}}function dn(t,e,n,r){e-n>We&&(n=e-We),r-e>We&&(r=e+We);let s=0,i=1;for(let c=1;e-c>=n;c++){let l=t[e-c];if(l===Ke)s++;else if(l===Ie)i++;else break}if(s===0)return!1;let o=0,a=1;for(let c=1;e+c<=r;c++){let l=t[e+c];if(l===Ke)o++;else if(l===Ie)a++;else break}return o===0?!1:(o+=s,a+=i,a*ts<a+o)}function ss(t,e,n,r,s,i,o,a,c,l){let f=new Uint8Array(e),u=new Uint8Array(r),d=Math.min(ht(e),hn);for(let p=i;p<=o;p++){let b=s[t[p]].len2;b===0?f[p]=Ke:b>=d?f[p]=Ie:f[p]=ze}let h=Math.min(ht(r),hn);for(let p=i;p<=a;p++){let b=s[n[p]].len1;b===0?u[p]=Ke:b>=h?u[p]=Ie:u[p]=ze}let m=[];for(let p=i;p<=o;p++)f[p]===ze||f[p]===Ie&&!dn(f,p,i,o)?m.push(p):c[p]=1;let g=[];for(let p=i;p<=a;p++)u[p]===ze||u[p]===Ie&&!dn(u,p,i,a)?g.push(p):l[p]=1;return{refIndex1:m,nreff1:m.length,refIndex2:g,nreff2:g.length}}var fe=20,mn=4,is=256,os=256,Ve=2147483647;function z(t,e){return t[e]??0}function as(t,e,n,r,s,i,o,a,c,l){let f=e-i,u=n-s,d=e-s,h=n-i,m=d-h&1,g=d,p=d,b=h,R=h;o[d]=e,a[h]=n;for(let j=1;;j++){let A=!1;g>f?o[--g-1]=-1:++g,p<u?o[++p+1]=-1:--p;for(let O=p;O>=g;O-=2){let w;z(o,O-1)>=z(o,O+1)?w=z(o,O-1)+1:w=z(o,O+1);let x=w,S=w-O;for(;w<n&&S<i&&t[w]===r[S];)w++,S++;if(w-x>fe&&(A=!0),o[O]=w,m&&b<=O&&O<=R&&z(a,O)<=w)return{i1:w,i2:S,minLo:!0,minHi:!0}}b>f?a[--b-1]=Ve:++b,R<u?a[++R+1]=Ve:--R;for(let O=R;O>=b;O-=2){let w;z(a,O-1)<z(a,O+1)?w=z(a,O-1):w=z(a,O+1)-1;let x=w,S=w-O;for(;w>e&&S>s&&t[w-1]===r[S-1];)w--,S--;if(x-w>fe&&(A=!0),a[O]=w,!m&&g<=O&&O<=p&&w<=z(o,O))return{i1:w,i2:S,minLo:!0,minHi:!0}}if(!c){if(A&&j>is){let O=0,w=null;for(let x=p;x>=g;x-=2){let S=x>d?x-d:d-x,E=z(o,x),P=E-x,T=E-e+(P-s)-S;if(T>mn*j&&T>O&&e+fe<=E&&E<n&&s+fe<=P&&P<i){let $=!0;for(let D=1;D<=fe;D++)if(t[E-D]!==r[P-D]){$=!1;break}$&&(O=T,w={i1:E,i2:P,minLo:!0,minHi:!1})}}if(w)return w;O=0,w=null;for(let x=R;x>=b;x-=2){let S=x>h?x-h:h-x,E=z(a,x),P=E-x,T=n-E+(i-P)-S;if(T>mn*j&&T>O&&e<E&&E<=n-fe&&s<P&&P<=i-fe){let $=!0;for(let D=0;D<fe;D++)if(t[E+D]!==r[P+D]){$=!1;break}$&&(O=T,w={i1:E,i2:P,minLo:!1,minHi:!0})}}if(w)return w}if(j>=l){let O=-1,w=-1;for(let E=p;E>=g;E-=2){let P=Math.min(z(o,E),n),T=P-E;i<T&&(P=i+E,T=i),O<P+T&&(O=P+T,w=P)}let x=Ve,S=Ve;for(let E=R;E>=b;E-=2){let P=Math.max(e,z(a,E)),T=P-E;T<s&&(P=s+E,T=s),P+T<x&&(x=P+T,S=P)}return n+i-x<O-(e+s)?{i1:w,i2:O-w,minLo:!0,minHi:!1}:{i1:S,i2:x-S,minLo:!1,minHi:!0}}}}}function dt(t,e,n,r,s,i,o,a,c,l,f,u,d,h){for(;e<n&&s<i&&t[e]===r[s];)e++,s++;for(;e<n&&s<i&&t[n-1]===r[i-1];)n--,i--;if(e===n)for(let m=s;m<i;m++)a[l[m]]=1;else if(s===i)for(let m=e;m<n;m++)o[c[m]]=1;else{let m=as(t,e,n,r,s,i,f,u,d,h);dt(t,e,m.i1,r,s,m.i2,o,a,c,l,f,u,m.minLo,h),dt(t,m.i1,n,r,m.i2,i,o,a,c,l,f,u,m.minHi,h)}}function cs(t,e,n,r){let s=[],i=0,o=0,a=1,c=1;for(;i<t.length||o<e.length;){if(i<t.length&&o<e.length&&!n[i]&&!r[o]){s.push({type:"keep",line:t[i]??"",oldLineNo:a++,newLineNo:c++}),i++,o++;continue}for(;i<t.length&&n[i];)s.push({type:"delete",line:t[i]??"",oldLineNo:a++,newLineNo:0}),i++;for(;o<e.length&&r[o];)s.push({type:"insert",line:e[o]??"",oldLineNo:0,newLineNo:c++}),o++}return s}var pn=200,gn=20,yn=100,ls=1,fs=21,us=-30,hs=6,ds=-4,ms=10,ps=24,gs=17,ys=23,bs=17,ws=60;function ut(t){let e=0;for(let n=0;n<t.length;n++){let r=t.charCodeAt(n);if(r===32)e+=1;else if(r===9)e+=8-e%8;else if(!(r===10||r===13||r===11||r===12))return e;if(e>=pn)return pn}return-1}function bn(t,e,n){let r={endOfFile:!1,indent:-1,preBlank:0,preIndent:-1,postBlank:0,postIndent:-1};n>=e?(r.endOfFile=!0,r.indent=-1):(r.endOfFile=!1,r.indent=ut(t[n]));for(let s=n-1;s>=0&&(r.preIndent=ut(t[s]),r.preIndent===-1);s--)if(r.preBlank+=1,r.preBlank===gn){r.preIndent=0;break}for(let s=n+1;s<e&&(r.postIndent=ut(t[s]),r.postIndent===-1);s++)if(r.postBlank+=1,r.postBlank===gn){r.postIndent=0;break}return r}function wn(t,e){t.preIndent===-1&&t.preBlank===0&&(e.penalty+=ls),t.endOfFile&&(e.penalty+=fs);let n=t.indent===-1?1+t.postBlank:0,r=t.preBlank+n;e.penalty+=us*r,e.penalty+=hs*n;let s=t.indent!==-1?t.indent:t.postIndent,i=r!==0;e.effectiveIndent+=s,s===-1||t.preIndent===-1||(s>t.preIndent?e.penalty+=i?ms:ds:s===t.preIndent||(t.postIndent!==-1&&t.postIndent>s?e.penalty+=i?gs:ps:e.penalty+=i?bs:ys))}function Is(t,e){let n=(t.effectiveIndent>e.effectiveIndent?1:0)-(t.effectiveIndent<e.effectiveIndent?1:0);return ws*n+(t.penalty-e.penalty)}function In(t,e,n,r,s,i){let o=0,a=0;for(;t[a];)a++;let c=0,l=0;for(;s[l];)l++;let f=(u,d)=>e[u]===e[d];for(;;){if(a!==o){let u,d,h;do{for(u=a-o,d=-1;o>0&&f(o-1,a-1);){for(t[--o]=1,t[--a]=0;t[o-1];)o--;if(c===0)break;for(l=c-1,c=l;s[c-1];c--);}for(h=a,l>c&&(d=a);!(a>=r||!f(o,a));){for(t[o++]=0,t[a++]=1;t[a];)a++;if(l>=i)break;for(c=l+1,l=c;s[l];l++);l>c&&(d=a)}}while(u!==a-o);if(a!==h)if(d!==-1)for(;l===c;){for(t[--a]=0,t[--o]=1;t[o-1];)o--;for(l=c-1,c=l;s[c-1];c--);}else{let m=-1,g={effectiveIndent:0,penalty:0},p=h;for(a-u-1>p&&(p=a-u-1),a-yn>p&&(p=a-yn);p<=a;p++){let b={effectiveIndent:0,penalty:0},R=bn(n,r,p);wn(R,b);let j=bn(n,r,p-u);wn(j,b),(m===-1||Is(b,g)<=0)&&(g={effectiveIndent:b.effectiveIndent,penalty:b.penalty},m=p)}for(;a>m;){for(t[--a]=0,t[--o]=1;t[o-1];)o--;for(l=c-1,c=l;s[c-1];c--);}}}if(a>=r)break;for(o=a+1,a=o;t[a];a++);if(l>=i)break;for(c=l+1,l=c;s[l];l++);}}function mt(t,e){let n=t.length,r=e.length,s=new Uint8Array(n),i=new Uint8Array(r);if(n>0&&r>0){let{classes1:o,classes2:a,classInfo:c}=ns(t,e),{dstart:l,dend1:f,dend2:u}=rs(o,n,a,r);if(l>f)for(let d=l;d<r-(n-1-f);d++)i[d]=1;else if(l>u)for(let d=l;d<n-(r-1-u);d++)s[d]=1;else{let{refIndex1:d,nreff1:h,refIndex2:m,nreff2:g}=ss(o,n,a,r,c,l,f,u,s,i);if(h>0&&g>0){let p=new Array(h);for(let w=0;w<h;w++)p[w]=o[d[w]];let b=new Array(g);for(let w=0;w<g;w++)b[w]=a[m[w]];let R={},j={},A=h+g+3,O=Math.max(os,ht(A));dt(p,0,h,b,0,g,s,i,d,m,R,j,!1,O)}else if(h===0)for(let p=0;p<g;p++)i[m[p]]=1;else for(let p=0;p<h;p++)s[d[p]]=1;In(s,o,t,n,i,r),In(i,a,e,r,s,n)}}else n===0?i.fill(1):s.fill(1);return{changedOld:s,changedNew:i}}function Ee(t,e){let n=t.length,r=e.length;if(n===0&&r===0)return[];if(n===0)return e.map((o,a)=>({type:"insert",line:o,oldLineNo:0,newLineNo:a+1}));if(r===0)return t.map((o,a)=>({type:"delete",line:o,oldLineNo:a+1,newLineNo:0}));let{changedOld:s,changedNew:i}=mt(t,e);return cs(t,e,s,i)}var Es=3;function En(t,e=Es){if(e=Math.max(0,e),t.length===0)return[];let n=[];for(let a=0;a<t.length;a++){let c=t[a];c&&c.type!=="keep"&&n.push(a)}if(n.length===0)return[];let r=n[0]??0,s=[],i=Math.max(0,r-e),o=Math.min(t.length-1,r+e);for(let a=1;a<n.length;a++){let c=n[a]??0,l=Math.max(0,c-e),f=Math.min(t.length-1,c+e);l<=o+1||(s.push({start:i,end:o}),i=l),o=f}return s.push({start:i,end:o}),s.map(a=>xs(t,a.start,a.end))}function xs(t,e,n){let r=0,s=0,i=0,o=0,a=[],c=!1,l=!1;for(let f=e;f<=n;f++){let u=t[f];if(u)switch(u.type){case"keep":c||(r=u.oldLineNo,c=!0),l||(i=u.newLineNo,l=!0),s++,o++,a.push({type:"context",content:u.line});break;case"delete":c||(r=u.oldLineNo,c=!0),s++,a.push({type:"delete",content:u.line});break;case"insert":l||(i=u.newLineNo,l=!0),o++,a.push({type:"insert",content:u.line});break}}if(c||(r=i>0?i:1),l||(i=r>0?r:1),s===0)for(let f=e;f<=n;f++){let u=t[f];if(u&&u.type==="insert"){r=u.newLineNo>1?u.newLineNo-1:0;break}}if(o===0)for(let f=e;f<=n;f++){let u=t[f];if(u&&u.type==="delete"){i=u.oldLineNo>1?u.oldLineNo-1:0;break}}return{oldStart:r,oldCount:s,newStart:i,newCount:o,lines:a}}function xe(t){let e=t.lastIndexOf("/");return e>=0?t.slice(e+1):t}function Os(t,e){if(t.length===0)return;if(t.length===1)return t.shift();let n=xe(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];if(i&&xe(i.path)===n){r=s;break}}return t.splice(r,1)[0]}var Rs=50;async function me(t,e,n=Rs){let r=new Map,s=[],i=[],o=[];for(let f of e)if(f.status==="deleted"&&f.oldHash){let u=r.get(f.oldHash)??[];u.push(f),r.set(f.oldHash,u),s.push(f)}else f.status==="added"&&f.newHash?i.push(f):o.push(f);let a=[],c=[];for(let f of i){let u=f.newHash;if(!u){c.push(f);continue}let d=r.get(u);if(d&&d.length>0){let h=Os(d,f.path);h&&a.push({oldPath:h.path,newPath:f.path,oldHash:h.oldHash??u,newHash:u,similarity:100,oldMode:h.oldMode,newMode:f.newMode})}else c.push(f)}let l=[...r.values()].flat();if(l.length>0&&c.length>0){let f=await Ps(t,l,c,n);if(f.length>0){let u=new Set(f.map(h=>h.oldPath)),d=new Set(f.map(h=>h.newPath));l=l.filter(h=>!u.has(h.path)),c=c.filter(h=>!d.has(h.path)),a.push(...f)}}if(l.length>0&&c.length>0){let f=await Ss(t,l,c,n);if(f.length>0){let u=new Set(f.map(h=>h.oldPath)),d=new Set(f.map(h=>h.newPath));l=l.filter(h=>!u.has(h.path)),c=c.filter(h=>!d.has(h.path)),a.push(...f)}}return{remaining:[...o,...l,...c],renames:a}}async function Ps(t,e,n,r){let s=new Map;for(let a=0;a<e.length;a++){let c=e[a];if(!c)continue;let l=xe(c.path);s.has(l)?s.set(l,-1):s.set(l,a)}let i=new Map;for(let a=0;a<n.length;a++){let c=n[a];if(!c)continue;let l=xe(c.path);i.has(l)?i.set(l,-1):i.set(l,a)}let o=[];for(let[a,c]of s){if(c===-1)continue;let l=i.get(a);if(l===void 0||l===-1)continue;let f=e[c],u=n[l];if(!f?.oldHash||!u?.newHash||f.oldHash===u.newHash)continue;let d=await re(t,f.oldHash),h=await re(t,u.newHash),m=Ts(d,h);m<r||o.push({oldPath:f.path,newPath:u.path,oldHash:f.oldHash,newHash:u.newHash,similarity:m,oldMode:f.oldMode,newMode:u.newMode})}return o}var xn=107927;function Ye(t){let e=new Map,n=0,r=0,s=0;for(let o=0;o<t.length;o++){let a=t[o],c=r;if(r=(r<<7^s>>>25)>>>0,s=(s<<7^c>>>25)>>>0,r=r+a>>>0,n++,n<64&&a!==10)continue;let l=(r+Math.imul(s,97))%xn;e.set(l,(e.get(l)??0)+n),n=0,r=0,s=0}if(n>0){let o=(r+Math.imul(s,97))%xn;e.set(o,(e.get(o)??0)+n)}let i=[];for(let[o,a]of e)i.push({hash:o,count:a});return i.sort((o,a)=>o.hash-a.hash),i}function ks(t,e){let n=0,r=0,s=0,i=0;for(;s<t.length;){let o=t[s];if(!o)break;for(;i<e.length;){let l=e[i];if(!l||l.hash>=o.hash)break;r+=l.count,i++}let a=o.count,c=0;if(i<e.length){let l=e[i];l&&l.hash===o.hash&&(c=l.count,i++)}a<c?(r+=c-a,n+=a):n+=c,s++}for(;i<e.length;){let o=e[i];o&&(r+=o.count),i++}return{srcCopied:n,literalAdded:r}}function Ts(t,e){return t.length===0&&e.length===0?100:t.length===0||e.length===0?0:On(t.length,Ye(t),e.length,Ye(e))}function On(t,e,n,r){let s=Math.max(t,n),i=Math.min(t,n);if(i<s-i)return 0;let{srcCopied:o}=ks(e,r);return Math.floor(o*100/s)}async function Ss(t,e,n,r){let s=[];for(let f of e)if(f.oldHash){let u=await re(t,f.oldHash);s.push({size:u.length,chunks:Ye(u)})}else s.push(null);let i=[];for(let f of n)if(f.newHash){let u=await re(t,f.newHash);i.push({size:u.length,chunks:Ye(u)})}else i.push(null);let o=[];for(let f=0;f<e.length;f++){let u=e[f],d=s[f];if(!(!u||!d))for(let h=0;h<n.length;h++){let m=n[h],g=i[h];if(!m||!g)continue;let p=On(d.size,d.chunks,g.size,g.chunks);if(p>=r){let b=xe(u.path)===xe(m.path)?1:0;o.push({similarity:p,nameScore:b,delIdx:f,addIdx:h})}}}o.sort((f,u)=>u.similarity-f.similarity||u.nameScore-f.nameScore);let a=new Set,c=new Set,l=[];for(let{similarity:f,delIdx:u,addIdx:d}of o){if(a.has(u)||c.has(d))continue;a.add(u),c.add(d);let h=e[u],m=n[d];!h||!m||l.push({oldPath:h.path,newPath:m.path,oldHash:h.oldHash??"",newHash:m.newHash??"",similarity:f,oldMode:h.oldMode,newMode:m.newMode})}return l}async function ue(t,e,n){return(await le(t,e)).get(n)?.hash??null}async function Rn(t,e,n,r){let s=await oe(t,e,n);if(!s.find(c=>c.status==="added"&&c.path===r))return null;let{renames:o}=await me(t,s);return o.find(c=>c.newPath===r)?.oldPath??null}async function Cs(t,e,n,r,s,i){let o=await ue(t,(await v(t,e)).tree,n);if(!o){let g=new Map,p=await v(t,e);for(let b of r)g.set(b.finalIdx,he(e,n,b.currentLine,i+b.finalIdx,s[b.finalIdx],p,!1,void 0));return g}let a=await H(t,o),c=te(a),l=new Array(s.length),f=[...r],u=e,d=n,h=c;for(;f.length>0;){let g=await v(t,u);if(g.parents.length===0){for(let E of f)l[E.finalIdx]=he(u,d,E.currentLine,i+E.finalIdx,s[E.finalIdx],g,!0,void 0);break}let p=await ue(t,g.tree,d),b=null,R=[];for(let E of g.parents){let P=await v(t,E),T=d,$=await ue(t,P.tree,T);if(!$){let D=await Rn(t,P.tree,g.tree,d);D&&(T=D,$=await ue(t,P.tree,T))}if($&&(R.push({hash:E,path:T,blobHash:$}),$===p)){b={hash:E,path:T};break}}if(b){u=b.hash,d=b.path;continue}if(R.length===0){for(let E of f)l[E.finalIdx]=he(u,d,E.currentLine,i+E.finalIdx,s[E.finalIdx],g,!1,void 0);break}let j=R[0],A=await H(t,j.blobHash),O=te(A),w=Ee(O,h),x=new Map;for(let E of w)E.type==="keep"&&x.set(E.newLineNo,E.oldLineNo);let S=[];for(let E of f){let P=x.get(E.currentLine);P!==void 0?S.push({finalIdx:E.finalIdx,currentLine:P}):l[E.finalIdx]=he(u,d,E.currentLine,i+E.finalIdx,s[E.finalIdx],g,!1,{hash:j.hash,path:j.path})}f=S,u=j.hash,d=j.path,h=O}let m=new Map;for(let g of r)l[g.finalIdx]&&m.set(g.finalIdx,l[g.finalIdx]);return m}async function Pn(t,e,n,r){let s=await v(t,e),i=await ue(t,s.tree,n);if(!i)throw new Error(`no such path '${n}' in ${e.slice(0,7)}`);let o=await H(t,i),a=te(o),c=r?.startLine??1,l=r?.endLine??a.length,f=a.slice(c-1,l),u=new Array(f.length),d=f.map((p,b)=>({finalIdx:b,currentLine:c+b})),h=e,m=n,g=a;for(;d.length>0;){let p=await v(t,h);if(p.parents.length===0){for(let x of d)u[x.finalIdx]=he(h,m,x.currentLine,c+x.finalIdx,f[x.finalIdx],p,!0,void 0);break}let b=await ue(t,p.tree,m),R=[],j=null;for(let x of p.parents){let S=await v(t,x),E=m,P=await ue(t,S.tree,E);if(!P){let T=await Rn(t,S.tree,p.tree,m);T&&(E=T,P=await ue(t,S.tree,E))}if(P){let T={hash:x,path:E,blobHash:P};if(R.push(T),P===b){j=T;break}}}if(j){h=j.hash,m=j.path;continue}if(R.length===0){for(let x of d)u[x.finalIdx]=he(h,m,x.currentLine,c+x.finalIdx,f[x.finalIdx],p,!1,void 0);break}if(R.length===1){let x=R[0],S=await H(t,x.blobHash),E=te(S),P=Ee(E,g),T=new Map;for(let D of P)D.type==="keep"&&T.set(D.newLineNo,D.oldLineNo);let $=[];for(let D of d){let ae=T.get(D.currentLine);ae!==void 0?$.push({finalIdx:D.finalIdx,currentLine:ae}):u[D.finalIdx]=he(h,m,D.currentLine,c+D.finalIdx,f[D.finalIdx],p,!1,{hash:x.hash,path:x.path})}d=$,h=x.hash,m=x.path,g=E;continue}let A=[];for(let x of R){let S=await H(t,x.blobHash),E=te(S),P=Ee(E,g),T=new Map;for(let $ of P)$.type==="keep"&&T.set($.newLineNo,$.oldLineNo);A.push({info:x,newToOld:T})}let O=new Map;for(let x of d){let S=!1;for(let E=0;E<A.length;E++){let P=A[E],T=P.newToOld.get(x.currentLine);if(T!==void 0){let $=O.get(E);$||($={info:P.info,lines:[]},O.set(E,$)),$.lines.push({finalIdx:x.finalIdx,currentLine:T}),S=!0;break}}S||(u[x.finalIdx]=he(h,m,x.currentLine,c+x.finalIdx,f[x.finalIdx],p,!1,{hash:R[0].hash,path:R[0].path}))}let w=O.get(0);for(let[x,S]of O){if(x===0)continue;let E=await Cs(t,S.info.hash,S.info.path,S.lines,f,c);for(let[P,T]of E)u[P]=T}if(w&&w.lines.length>0){d=w.lines,h=w.info.hash,m=w.info.path;let x=await H(t,w.info.blobHash);g=te(x)}else break}return u}function he(t,e,n,r,s,i,o,a){return{hash:t,origPath:e,origLine:n,finalLine:r,content:s,author:i.author,committer:i.committer,summary:i.message.split(`
|
|
13
|
+
`)[0],boundary:o,previous:a}}var Oe=class{heap=[];nextEpoch=0;get size(){return this.heap.length}push(e){this.heap.push({entry:e,epoch:this.nextEpoch++}),this.siftUp(this.heap.length-1)}pop(){let{heap:e}=this;if(e.length===0)return;let n=e[0],r=e.pop();return e.length>0&&(e[0]=r,this.siftDown(0)),n.entry}higher(e,n){let r=e.entry.commit.committer.timestamp,s=n.entry.commit.committer.timestamp;return r>s||r===s&&e.epoch<n.epoch}siftUp(e){let{heap:n}=this;for(;e>0;){let r=e-1>>1;if(!this.higher(n[e],n[r]))break;[n[r],n[e]]=[n[e],n[r]],e=r}}siftDown(e){let{heap:n}=this,r=n.length;for(;;){let s=e,i=2*e+1,o=2*e+2;if(i<r&&this.higher(n[i],n[s])&&(s=i),o<r&&this.higher(n[o],n[s])&&(s=o),s===e)break;[n[e],n[s]]=[n[s],n[e]],e=s}}};async function*pe(t,e,n){if(n?.topoOrder){yield*js(t,e,n);return}let r=await Tn(t,n?.exclude),s=new Set(r),i=new Oe,o=n?.shallowBoundary,a=Array.isArray(e)?e:[e];for(let c of a)s.has(c)||i.push(await qe(t,c));for(;i.size>0;){let c=i.pop();if(s.has(c.hash)||(s.add(c.hash),yield c,o?.has(c.hash)))continue;let l=n?.firstParent?c.commit.parents.slice(0,1):c.commit.parents;for(let f of l)if(!s.has(f))try{i.push(await qe(t,f))}catch{}}}async function*js(t,e,n){let r=await Tn(t,n?.exclude),s=new Set(r),i=new Oe,o=n?.shallowBoundary,a=Array.isArray(e)?e:[e];for(let h of a)s.has(h)||i.push(await qe(t,h));let c=[],l=new Map;for(;i.size>0;){let h=i.pop();if(s.has(h.hash)||(s.add(h.hash),l.set(h.hash,c.length),c.push(h),o?.has(h.hash)))continue;let m=n?.firstParent?h.commit.parents.slice(0,1):h.commit.parents;for(let g of m)if(!s.has(g))try{i.push(await qe(t,g))}catch{}}let f=c.length;if(f===0)return;let u=new Int32Array(f);for(let h of c){let m=n?.firstParent?h.commit.parents.slice(0,1):h.commit.parents;for(let g of m){let p=l.get(g);p!==void 0&&(u[p]=(u[p]??0)+1)}}let d=[];for(let h=f-1;h>=0;h--)u[h]===0&&d.push(h);for(;d.length>0;){let h=d.pop();yield c[h];let m=n?.firstParent?c[h].commit.parents.slice(0,1):c[h].commit.parents;for(let g of m){let p=l.get(g);if(p!==void 0){let b=(u[p]??0)-1;u[p]=b,b===0&&d.push(p)}}}}async function kn(t,e,n){if(e===n)return{ahead:0,behind:0};let r=new Set;for await(let a of pe(t,e))r.add(a.hash);let s=new Set;for await(let a of pe(t,n))s.add(a.hash);let i=0;for(let a of r)s.has(a)||i++;let o=0;for(let a of s)r.has(a)||o++;return{ahead:i,behind:o}}async function Tn(t,e){if(!e||e.length===0)return new Set;let n=new Set;for await(let r of pe(t,e))n.add(r.hash);return n}async function qe(t,e){return{hash:e,commit:await v(t,e)}}async function vs(t,e){let n=new Set,r=[e],s=0;for(;s<r.length;){let i=r[s++];if(n.has(i))continue;n.add(i);let o;try{o=await v(t,i)}catch{continue}for(let a of o.parents)n.has(a)||r.push(a)}return n}async function pt(t,e,n){if(e===n)return!0;let r=new Set,s=[n],i=0;for(;i<s.length;){let o=s[i++];if(o===e)return!0;if(r.has(o))continue;r.add(o);let a;try{a=await v(t,o)}catch{continue}for(let c of a.parents)r.has(c)||s.push(c)}return!1}async function De(t,e,n){if(e===n)return[e];let r=await vs(t,e),s=[],i=new Set,o=[n],a=0;for(;a<o.length;){let l=o[a++];if(i.has(l))continue;if(i.add(l),r.has(l)){s.push(l);continue}let f;try{f=await v(t,l)}catch{continue}for(let u of f.parents)i.has(u)||o.push(u)}if(s.length<=1)return s;let c=[];for(let l of s){let f=!1;for(let u of s)if(u!==l&&await pt(t,l,u)){f=!0;break}f||c.push(l)}return c.length<=1?c:As(t,e,n,c)}async function As(t,e,n,r){let s=new Set(r),i=new Set,o=[],a=new Map,c=new Map,l=0,f=[{hash:e,mask:1,seq:l++},{hash:n,mask:2,seq:l++}];async function u(d){let h=c.get(d);if(h!==void 0)return h;let m=(await v(t,d)).committer.timestamp;return c.set(d,m),m}for(;f.length>0;){let d=0,h=await u(f[0].hash);for(let R=1;R<f.length;R++){let j=f[R],A=await u(j.hash),O=f[d];(A>h||A===h&&j.seq<O.seq)&&(d=R,h=A)}let m=f.splice(d,1)[0],g=a.get(m.hash)??0,p=g|m.mask;if(p===g)continue;if(a.set(m.hash,p),p===3&&s.has(m.hash)&&!i.has(m.hash)&&(o.push(m.hash),i.add(m.hash),i.size===s.size))break;let b=await v(t,m.hash);for(let R of b.parents)f.push({hash:R,mask:p,seq:l++})}for(let d of r)i.has(d)||o.push(d);return o}async function $s(t,e){return Q(t,e)}async function Ls(t,e,n){return oe(t,e,n)}async function Ms(t,e,n){let r=await v(t,n),s=null;return e&&(s=(await v(t,e)).tree),oe(t,s,r.tree)}async function*Ds(t,e,n){let r=e?[e]:[];for await(let s of pe(t,n,{exclude:r}))yield{hash:s.hash,message:s.commit.message,tree:s.commit.tree,parents:s.commit.parents,author:s.commit.author,committer:s.commit.committer}}async function Hs(t,e,n){return pt(t,e,n)}async function Us(t,e,n){return De(t,e,n)}async function Ns(t,e,n){return kn(t,e,n)}async function Bs(t,e,n,r){return Pn(t,e,n,r)}function Gs(t){return t==="insert"?"+":t==="delete"?"-":" "}function Fs(t){return{oldStart:t.oldStart,oldCount:t.oldCount,newStart:t.newStart,newCount:t.newCount,lines:t.lines.map(e=>Gs(e.type)+e.content)}}function Sn(t,e,n){let r=te(t),s=te(e),i=Ee(r,s);return En(i,n).map(Fs)}async function Cn(t,e){let n=await _e(t,e);if(n)return n;throw new Error(`ref or commit '${e}' not found`)}async function _s(t,e,n,r){let s=await Cn(t,e),i=await Cn(t,n),o=await v(t,s),a=await v(t,i),c=await oe(t,o.tree,a.tree),l=r?.renames!==!1,f=r?.contextLines,u=r?.paths,d=[];if(l){let m=await me(t,c);c=m.remaining,d=m.renames}let h=[];for(let m of c){if(u&&!u.some(R=>m.path.startsWith(R)))continue;let g=m.oldHash?await H(t,m.oldHash):"",p=m.newHash?await H(t,m.newHash):"",b=Sn(g,p,f);h.push({path:m.path,status:m.status,hunks:b})}for(let m of d){if(u&&!u.some(R=>m.newPath.startsWith(R)||m.oldPath.startsWith(R)))continue;let g=await H(t,m.oldHash),p=await H(t,m.newHash),b=Sn(g,p,f);h.push({path:m.newPath,status:"renamed",oldPath:m.oldPath,similarity:m.similarity,hunks:b})}return h.sort((m,g)=>m.path.localeCompare(g.path)),h}async function*Ws(t,e,n){if(n?.paths&&n.paths.length>0){yield*zs(t,e,n.paths,n);return}for await(let r of pe(t,e,n))yield{hash:r.hash,message:r.commit.message,tree:r.commit.tree,parents:r.commit.parents,author:r.commit.author,committer:r.commit.committer}}function gt(t,e){return e.some(n=>t===n||t.startsWith(n.endsWith("/")?n:n+"/"))}async function*zs(t,e,n,r){let s=new Set;if(r?.exclude)for await(let l of pe(t,r.exclude))s.add(l.hash);let i=new Set(s),o=new Oe,a=async l=>{if(!i.has(l))try{let f=await v(t,l);o.push({hash:l,commit:f})}catch{}},c=Array.isArray(e)?e:[e];for(let l of c)await a(l);for(;o.size>0;){let l=o.pop();if(i.has(l.hash))continue;i.add(l.hash);let{commit:f}=l,u=r?.firstParent?f.parents.slice(0,1):f.parents,d=()=>({hash:l.hash,message:f.message,tree:f.tree,parents:f.parents,author:f.author,committer:f.committer});if(u.length===0){(await oe(t,null,f.tree)).some(g=>gt(g.path,n))&&(yield d());continue}if(u.length===1){let m=u[0];try{let g=await v(t,m);(await oe(t,g.tree,f.tree)).some(b=>gt(b.path,n))&&(yield d())}catch{yield d()}await a(m);continue}let h=[];for(let m of u)try{let g=await v(t,m);(await oe(t,g.tree,f.tree)).some(b=>gt(b.path,n))||h.push(m)}catch{}if(h.length>0)await a(h[0]);else{yield d();for(let m of u)await a(m)}}}function Vs(t){let e=Math.abs(t),n=t<=0?"+":"-",r=String(Math.floor(e/60)).padStart(2,"0"),s=String(e%60).padStart(2,"0");return`${n}${r}${s}`}function He(t){if("timestamp"in t)return t;let e=t.date??new Date;return{name:t.name,email:t.email,timestamp:Math.floor(e.getTime()/1e3),timezone:Vs(e.getTimezoneOffset())}}async function Ks(t,e){let n=He(e.author),r=e.committer?He(e.committer):n,s=Ae({type:"commit",tree:e.tree,parents:e.parents,author:n,committer:r,message:e.message}),i=await B(t,"commit",s);return e.branch&&await vn(t,e.branch,i),i}async function Ys(t,e){let n=He(e.tagger),r=Xt({type:"tag",object:e.target,objectType:e.targetType??"commit",name:e.name,tagger:n,message:e.message}),s=await B(t,"tag",r);return await t.refStore.writeRef(`refs/tags/${e.name}`,{type:"direct",hash:s}),s}async function qs(t,e){let n=`refs/heads/${e.branch}`,r=await J(t,n),s=null;r&&(s=(await v(t,r)).tree);let i=[];for(let[d,h]of Object.entries(e.files))if(h===null)i.push({path:d,hash:null});else{let m=typeof h=="string"?new TextEncoder().encode(h):h,g=await B(t,"blob",m);i.push({path:d,hash:g})}let o;s?o=await An(t,s,i):o=await bt(t,null,yt(i));let a=He(e.author),c=e.committer?He(e.committer):a,f=Ae({type:"commit",tree:o,parents:r?[r]:[],author:a,committer:c,message:e.message}),u=await B(t,"commit",f);return await vn(t,e.branch,u),u}async function vn(t,e,n){let r=`refs/heads/${e}`;await t.refStore.writeRef(r,{type:"direct",hash:n}),await t.refStore.readRef("HEAD")||await t.refStore.writeRef("HEAD",{type:"symbolic",target:r})}async function Xs(t,e){let n=[...e].sort((i,o)=>i.name.localeCompare(o.name)),r=await Promise.all(n.map(async i=>{let o=i.mode;return o||(o=(await t.objectStore.read(i.hash)).type==="tree"?"040000":"100644"),{mode:o,name:i.name,hash:i.hash}})),s=Le({type:"tree",entries:r});return B(t,"tree",s)}async function Zs(t,e){return B(t,"blob",new TextEncoder().encode(e))}async function An(t,e,n){return bt(t,e,yt(n))}function yt(t){let e=new Map,n=new Map;for(let r of t){let s=r.path.indexOf("/");if(s===-1)e.set(r.path,{hash:r.hash,mode:r.mode??"100644"});else{let i=r.path.slice(0,s),o=r.path.slice(s+1),a=n.get(i);a||(a=[],n.set(i,a)),a.push({...r,path:o})}}return{files:e,dirs:n}}async function jn(t,e){let n=await F(t,e);if(n.type!=="tree")throw new Error(`Expected tree object, got ${n.type}`);return se(n.content).entries}async function bt(t,e,n){let r=new Map;if(e)for(let o of await jn(t,e))r.set(o.name,o);for(let[o,{hash:a,mode:c}]of n.files)a===null?r.delete(o):r.set(o,{name:o,hash:a,mode:c});for(let[o,a]of n.dirs){let c=r.get(o),l=c?.mode==="040000"?c.hash:null,f=yt(a),u=await bt(t,l,f);(await jn(t,u)).length===0?r.delete(o):r.set(o,{name:o,hash:u,mode:"040000"})}let s=[...r.values()].sort((o,a)=>{let c=o.mode==="040000"?`${o.name}/`:o.name,l=a.mode==="040000"?`${a.name}/`:a.name;return c<l?-1:c>l?1:0}),i=Le({type:"tree",entries:s});return B(t,"tree",i)}function wt(t,e){let n=t.length,r=e.length;if(n===0&&r===0)return[];if(n===0)return[{buffer1:[0,0],buffer2:[0,r]}];if(r===0)return[{buffer1:[0,n],buffer2:[0,0]}];let{changedOld:s,changedNew:i}=mt(t,e);return Js(s,n,i,r)}function Js(t,e,n,r){let s=[],i=0,o=0;for(;i<e||o<r;){for(;i<e&&o<r&&!t[i]&&!n[o];)i++,o++;if(i>=e&&o>=r)break;let a=i,c=o;for(;i<e&&t[i];)i++;for(;o<r&&n[o];)o++;(i>a||o>c)&&s.push({buffer1:[a,i-a],buffer2:[c,o-c]})}return s}function Qs(t,e,n){let r=[];for(let c of wt(e,t))r.push({ab:"a",oStart:c.buffer1[0],oLength:c.buffer1[1],abStart:c.buffer2[0],abLength:c.buffer2[1]});for(let c of wt(e,n))r.push({ab:"b",oStart:c.buffer1[0],oLength:c.buffer1[1],abStart:c.buffer2[0],abLength:c.buffer2[1]});r.sort((c,l)=>c.oStart-l.oStart);let s=[],i=0;function o(c){c>i&&(s.push({stable:!0,buffer:"o",bufferStart:i,bufferLength:c-i,content:e.slice(i,c)}),i=c)}let a=0;for(;a<r.length;){let c=r[a++],l=c.oStart,f=c.oStart+c.oLength,u=[c];for(o(l);a<r.length;){let d=r[a];if(d.oStart>f)break;f=Math.max(f,d.oStart+d.oLength),u.push(d),a++}if(u.length===1){if(c.abLength>0){let d=c.ab==="a"?t:n;s.push({stable:!0,buffer:c.ab,bufferStart:c.abStart,bufferLength:c.abLength,content:d.slice(c.abStart,c.abStart+c.abLength)})}}else{let d={a:{abMin:t.length,abMax:-1,oMin:e.length,oMax:-1},b:{abMin:n.length,abMax:-1,oMin:e.length,oMax:-1}};for(let b of u){let R=b.oStart,j=R+b.oLength,A=b.abStart,O=A+b.abLength,w=d[b.ab];w.abMin=Math.min(A,w.abMin),w.abMax=Math.max(O,w.abMax),w.oMin=Math.min(R,w.oMin),w.oMax=Math.max(j,w.oMax)}let h=d.a.abMin+(l-d.a.oMin),m=d.a.abMax+(f-d.a.oMax),g=d.b.abMin+(l-d.b.oMin),p=d.b.abMax+(f-d.b.oMax);s.push({stable:!1,a:t.slice(h,m),o:e.slice(l,f),b:n.slice(g,p)})}i=f}return o(e.length),s}function ei(t,e,n,r){let s=r?.excludeFalseConflicts??!0,i=Qs(t,e,n),o=[],a=[];function c(){a.length&&(o.push({type:"ok",lines:a}),a=[])}for(let l of i)l.stable?a.push(...l.content):s&&Ln(l.a,l.b)?a.push(...l.a):(c(),o.push({type:"conflict",a:l.a,o:l.o,b:l.b}));return c(),r?.conflictStyle==="diff3"?$n(o):$n(ti(o))}function Ue(t,e,n,r){let s=r?.markerSize??7,i=r?.conflictStyle??"merge",o=`${"<".repeat(s)}${r?.a?` ${r.a}`:""}`,a=`${"|".repeat(s)}${r?.o?` ${r.o}`:""}`,c="=".repeat(s),l=`${">".repeat(s)}${r?.b?` ${r.b}`:""}`,f=ei(t,e,n,{conflictStyle:i}),u=!1,d=[];for(let h of f)h.type==="ok"?d.push(...h.lines):(u=!0,i==="diff3"?d.push(o,...h.a,a,...h.o,c,...h.b,l):d.push(o,...h.a,c,...h.b,l));return{conflict:u,result:d}}function ti(t){let e=[];for(let n of t)n.type==="ok"?e.push(n):e.push(...ni(n));return e}function ni(t){let{a:e,b:n}=t;if(e.length===0||n.length===0)return[t];if(Ln(e,n))return[t];let r=wt(e,n);if(r.length===0)return[{type:"ok",lines:e}];let s=[],i=0;for(let a of r){let c=a.buffer1[0];c-i>0&&s.push({type:"ok",lines:e.slice(i,c)});let f=c+a.buffer1[1],u=a.buffer2[0]+a.buffer2[1];s.push({type:"conflict",a:e.slice(c,f),o:[],b:n.slice(a.buffer2[0],u)}),i=f}return e.length-i>0&&s.push({type:"ok",lines:e.slice(i)}),s.length===1&&s[0].type==="conflict"?[t]:s}function $n(t){if(t.length<3)return t;let e=[t[0]];for(let r=1;r<t.length;r++){let s=e[e.length-1],i=t[r];s.type==="ok"&&i.type==="ok"?s.lines=[...s.lines,...i.lines]:e.push(i)}if(e.length<3)return e;let n=[e[0]];for(let r=1;r<e.length;r++){let s=n[n.length-1],i=e[r];if(s.type==="conflict"&&i.type==="ok"&&i.lines.length<=3&&r+1<e.length&&e[r+1].type==="conflict"){let o=e[r+1],a=s;a.a=[...s.a,...i.lines,...o.a],a.b=[...s.b,...i.lines,...o.b],a.o=[...s.o,...i.lines,...o.o],r++}else n.push(i)}return n}function ge(t,e,n,r){let s=Ue(Y(t),Y(e),Y(n),{a:r.a,o:r.o,b:r.b,markerSize:r.markerSize,conflictStyle:r.conflictStyle}),o=(s.result[s.result.length-1]??"").endsWith("\0"),a=s.result.map(It);return(a[a.length-1]??"").startsWith(">>>>>>>")||!o?`${a.join(`
|
|
13
14
|
`)}
|
|
14
15
|
`:a.join(`
|
|
15
16
|
`)}function Y(t){if(t==="")return[];let e=t.split(`
|
|
16
|
-
`);if(e[e.length-1]==="")e.pop();else{let n=e[e.length-1]??"";e[e.length-1]=`${n}\0`}return e}function gt(t){return t.endsWith("\0")?t.slice(0,-1):t}function Tn(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}var Oe=new TextDecoder,he=new TextEncoder,Sn={name:"virtual",email:"virtual@merge",timestamp:0,timezone:"+0000"};async function Re(t,e,n,r,s){let{paths:i,baseMap:o,oursMap:a,theirsMap:c}=await zs(t,e,n,r),l=await Ks(t,i,o,a,c,s);return Ys(t,i,s,l)}async function Mn(t,e,n,r){let s=await $e(t,e,n),i=await A(t,e),o=await A(t,n);if(s.length===0)return{...await Re(t,null,i.tree,o.tree,r),baseTree:null};if(s.length===1){let l=await A(t,s[0]);return{...await Re(t,l.tree,i.tree,o.tree,r),baseTree:l.tree}}let a=await Hn(t,e,n,s,1);return{...await Re(t,a,i.tree,o.tree,r),baseTree:a}}async function zs(t,e,n,r){let s=await ce(t,e),i=await ce(t,n),o=await ce(t,r),a=new Set;for(let l of s.keys())a.add(l);for(let l of i.keys())a.add(l);for(let l of o.keys())a.add(l);let c=new Map;for(let l of a){let f=s.get(l)??null,u=i.get(l)??null,d=o.get(l)??null,h=f?{hash:f.hash,mode:f.mode}:null,m=u?{hash:u.hash,mode:u.mode}:null,y=d?{hash:d.hash,mode:d.mode}:null,p=(f?1:0)|(u?2:0)|(d?4:0),b=f?.hash??null,R=u?.hash??null,v=d?.hash??null,j=0;b!==null&&b===R&&(j|=3),b!==null&&b===v&&(j|=5),R!==null&&R===v&&(j|=6);let O={path:l,stages:[h,m,y],pathnames:[l,l,l],filemask:p,matchMask:j,merged:{result:null,clean:!1},pathConflict:!1};if(Vs(O)){c.set(l,O);continue}c.set(l,O)}return{paths:c,baseMap:s,oursMap:i,theirsMap:o}}function Vs(t){let[e,n,r]=t.stages,s=e?.hash??null,i=n?.hash??null,o=r?.hash??null;return i===s&&o===s?(n?t.merged={result:{hash:i,mode:n.mode},clean:!0}:t.merged={result:null,clean:!0},!0):i===o&&i!==null?(t.merged={result:{hash:i,mode:n.mode},clean:!0},!0):i===null&&o===null?(t.merged={result:null,clean:!0},!0):o===s&&i!==s?(n?t.merged={result:{hash:i,mode:n.mode},clean:!0}:t.merged={result:null,clean:!0},!0):i===s&&o!==s?(r?t.merged={result:{hash:o,mode:r.mode},clean:!0}:t.merged={result:null,clean:!0},!0):!1}async function Ks(t,e,n,r,s,i){let o={entries:[],conflicts:[],msgBuf:[],worktreeBlobs:new Map},a=[],c=[];for(let[I,g]of n)r.has(I)||a.push({path:I,status:"deleted",oldHash:g.hash,oldMode:g.mode}),s.has(I)||c.push({path:I,status:"deleted",oldHash:g.hash,oldMode:g.mode});for(let[I,g]of r)n.has(I)||a.push({path:I,status:"added",newHash:g.hash,newMode:g.mode});for(let[I,g]of s)n.has(I)||c.push({path:I,status:"added",newHash:g.hash,newMode:g.mode});let l=await de(t,a),f=await de(t,c);if(l.renames.length===0&&f.renames.length===0)return o;let u=new Map,d=new Map;for(let I of l.renames)u.set(I.oldPath,I);for(let I of f.renames)d.set(I.oldPath,I);let h=new Set;for(let[I]of r)!n.has(I)&&s.has(I)&&h.add(I);let m=new Set,y=i?.a??"HEAD",p=i?.b??"theirs";function b(I,g,k=0){o.msgBuf.push({sortKey:I,subOrder:k,text:g})}for(let I of[...n.keys()].sort()){let g=u.get(I),k=d.get(I);if(!g&&!k)continue;let M=n.get(I);if(m.add(I),g&&k)if(m.add(g.newPath),m.add(k.newPath),g.newPath===k.newPath){let L=r.get(g.newPath),C=s.get(k.newPath);if(L.hash===C.hash)o.entries.push(V(g.newPath,L));else{let N=bt(e,g.newPath);N.stages=[{hash:M.hash,mode:M.mode},{hash:L.hash,mode:L.mode},{hash:C.hash,mode:C.mode}],N.pathnames=[I,g.newPath,k.newPath],N.filemask=7,N.merged={result:null,clean:!1}}}else{let L=r.get(g.newPath),C=s.get(k.newPath),N=await Dn(t,M,L,C,i);N.conflict&&b(I,`Auto-merging ${I}`,-1),o.conflicts.push({path:I,reason:"rename-rename",oursPath:g.newPath,theirsPath:k.newPath}),b(I,`CONFLICT (rename/rename): ${I} renamed to ${g.newPath} in ${y} and to ${k.newPath} in ${p}.`),o.entries.push(V(I,M,1)),o.entries.push(G(g.newPath,L.mode,N.hash,2)),o.entries.push(G(k.newPath,C.mode,N.hash,3)),o.worktreeBlobs.set(g.newPath,{hash:N.hash,mode:L.mode}),o.worktreeBlobs.set(k.newPath,{hash:N.hash,mode:C.mode})}else if(g){m.add(g.newPath);let L=s.get(I),C=r.get(g.newPath),N=h.has(g.newPath);if(L)if(N)await Ln(t,o,g.newPath,I,M,C,L,r,s,!1,i);else if(L.hash===M.hash&&C.hash===M.hash)o.entries.push(V(g.newPath,C));else if(L.hash===M.hash)o.entries.push(V(g.newPath,C));else if(C.hash===M.hash)o.entries.push(G(g.newPath,C.mode,L.hash));else{let B=bt(e,g.newPath);B.stages=[{hash:M.hash,mode:M.mode},{hash:C.hash,mode:C.mode},{hash:L.hash,mode:L.mode}],B.pathnames=[I,g.newPath,I],B.filemask=7,B.merged={result:null,clean:!1}}else{let B=s.get(g.newPath);if(o.conflicts.push({path:g.newPath,reason:"rename-delete",deletedBy:"theirs",oldPath:I}),b(g.newPath,`CONFLICT (rename/delete): ${I} renamed to ${g.newPath} in ${y}, but deleted in ${p}.`),B){o.conflicts.push({path:g.newPath,reason:"add-add"}),b(g.newPath,`Auto-merging ${g.newPath}`,0),b(g.newPath,`CONFLICT (add/add): Merge conflict in ${g.newPath}`,1),o.entries.push(V(g.newPath,C,2)),o.entries.push(V(g.newPath,B,3));let Ze=await qe(t,C.hash,B.hash,C.mode,i);o.worktreeBlobs.set(g.newPath,{hash:Ze,mode:C.mode})}else o.entries.push(G(g.newPath,M.mode,M.hash,1)),o.entries.push(V(g.newPath,C,2)),o.worktreeBlobs.set(g.newPath,{hash:C.hash,mode:C.mode}),C.hash!==M.hash&&b(g.newPath,`CONFLICT (modify/delete): ${g.newPath} deleted in ${p} and modified in ${y}. Version ${y} of ${g.newPath} left in tree.`,1)}}else if(k){m.add(k.newPath);let L=r.get(I),C=s.get(k.newPath),N=h.has(k.newPath);if(L)if(N)await Ln(t,o,k.newPath,I,M,L,C,r,s,!0,i);else if(L.hash===M.hash&&C.hash===M.hash)o.entries.push(V(k.newPath,C));else if(L.hash===M.hash)o.entries.push(V(k.newPath,C));else if(C.hash===M.hash)o.entries.push(G(k.newPath,C.mode,L.hash));else{let B=bt(e,k.newPath);B.stages=[{hash:M.hash,mode:M.mode},{hash:L.hash,mode:L.mode},{hash:C.hash,mode:C.mode}],B.pathnames=[I,I,k.newPath],B.filemask=7,B.merged={result:null,clean:!1}}else{let B=r.get(k.newPath);if(o.conflicts.push({path:k.newPath,reason:"rename-delete",deletedBy:"ours",oldPath:I}),b(k.newPath,`CONFLICT (rename/delete): ${I} renamed to ${k.newPath} in ${p}, but deleted in ${y}.`),B){o.conflicts.push({path:k.newPath,reason:"add-add"}),b(k.newPath,`Auto-merging ${k.newPath}`,0),b(k.newPath,`CONFLICT (add/add): Merge conflict in ${k.newPath}`,1),o.entries.push(V(k.newPath,B,2)),o.entries.push(V(k.newPath,C,3));let Ze=await qe(t,B.hash,C.hash,B.mode,i);o.worktreeBlobs.set(k.newPath,{hash:Ze,mode:B.mode})}else o.entries.push(G(k.newPath,M.mode,M.hash,1)),o.entries.push(V(k.newPath,C,3)),o.worktreeBlobs.set(k.newPath,{hash:C.hash,mode:C.mode}),C.hash!==M.hash&&b(k.newPath,`CONFLICT (modify/delete): ${k.newPath} deleted in ${y} and modified in ${p}. Version ${p} of ${k.newPath} left in tree.`,1)}}}let R=new Set(l.renames.map(I=>I.newPath)),v=new Set(f.renames.map(I=>I.newPath)),j=Cn(n,r),O=Cn(n,s),w=vn(j,s,n),x=vn(O,r,n),S=jn(l.renames,w),E=jn(f.renames,x),P=An(S),T=An(E);for(let I of[...P.keys()])T.has(I)&&(P.delete(I),T.delete(I));let $=new Set(P.keys()),D=new Set(T.keys());if(T.size>0)for(let I of a){if(I.status!=="added"||R.has(I.path))continue;let g=$n(I.path,T,$);if(!g)continue;if(e.has(g)||n.has(g)||r.has(g)||s.has(g)){if(r.has(g)){b(g,`CONFLICT (implicit dir rename): Existing file/dir at ${g} in the way of implicit directory rename(s) putting the following path(s) there: ${I.path}.`,1);continue}let L=r.get(I.path),C=s.get(g)??n.get(g);o.entries.push(G(g,L.mode,L.hash,2)),C&&o.entries.push(G(g,C.mode,C.hash,3)),o.worktreeBlobs.set(g,{hash:L.hash,mode:L.mode}),o.conflicts.push({path:g,reason:"add-add"}),b(g,`CONFLICT (file location): ${I.path} added in ${y} inside a directory that was renamed in ${p}, suggesting it should perhaps be moved to ${g}.`,1);let N=e.get(I.path);N&&(N.merged={result:null,clean:!0}),m.add(I.path);continue}let k=r.get(I.path);o.entries.push(G(g,k.mode,k.hash,2)),o.worktreeBlobs.set(g,{hash:k.hash,mode:k.mode}),o.conflicts.push({path:g,reason:"directory-rename"}),b(g,`CONFLICT (file location): ${I.path} added in ${y} inside a directory that was renamed in ${p}, suggesting it should perhaps be moved to ${g}.`,1);let M=e.get(I.path);M&&(M.merged={result:null,clean:!0}),m.add(I.path)}if(P.size>0)for(let I of c){if(I.status!=="added"||v.has(I.path))continue;let g=$n(I.path,P,D);if(!g)continue;if(e.has(g)||n.has(g)||r.has(g)||s.has(g)){if(s.has(g)){b(g,`CONFLICT (implicit dir rename): Existing file/dir at ${g} in the way of implicit directory rename(s) putting the following path(s) there: ${I.path}.`,1);continue}let L=s.get(I.path),C=r.get(g)??n.get(g);C&&o.entries.push(G(g,C.mode,C.hash,2)),o.entries.push(G(g,L.mode,L.hash,3)),o.worktreeBlobs.set(g,{hash:L.hash,mode:L.mode}),o.conflicts.push({path:g,reason:"add-add"}),b(g,`CONFLICT (file location): ${I.path} added in ${p} inside a directory that was renamed in ${y}, suggesting it should perhaps be moved to ${g}.`,1);let N=e.get(I.path);N&&(N.merged={result:null,clean:!0}),m.add(I.path);continue}let k=s.get(I.path);o.entries.push(G(g,k.mode,k.hash,3)),o.worktreeBlobs.set(g,{hash:k.hash,mode:k.mode}),o.conflicts.push({path:g,reason:"directory-rename"}),b(g,`CONFLICT (file location): ${I.path} added in ${p} inside a directory that was renamed in ${y}, suggesting it should perhaps be moved to ${g}.`,1);let M=e.get(I.path);M&&(M.merged={result:null,clean:!0}),m.add(I.path)}let oe=new Set(o.entries.map(I=>I.path));for(let I of oe){let g=e.get(I);g&&(g.merged={result:null,clean:!0})}for(let I of m){if(oe.has(I))continue;let g=e.get(I);if(!g||g.merged.clean)continue;g.filemask===7&&!g.pathConflict||(g.merged={result:null,clean:!0})}return o}function Cn(t,e){let n=new Set;for(let i of t.keys()){let o=q(i);for(;o;)n.add(o),o=q(o)}let r=new Set;for(let i of e.keys()){let o=q(i);for(;o;)r.add(o),o=q(o)}let s=new Set;for(let i of n)r.has(i)||s.add(i);return s}function vn(t,e,n){if(t.size===0)return t;let r=new Set;for(let s of e.keys()){if(n.has(s))continue;let i=q(s)??"";t.has(i)&&r.add(i)}for(let s of[...r]){let i=q(s);for(;i;)t.has(i)&&!r.has(i)&&r.add(i),i=q(i)}return r}function jn(t,e){let n=new Map;for(let r of t){let s=q(r.oldPath),i=q(r.newPath),o=!0;for(;;){if(!o){let a=s.length+(s?1:0),c=i.length+(i?1:0),l=r.oldPath.slice(a,r.oldPath.indexOf("/",a)),f=r.newPath.slice(c,r.newPath.indexOf("/",c));if(l!==f)break}if(e.has(s)){let a=n.get(s);a||(a=new Map,n.set(s,a)),a.set(i,(a.get(i)??0)+1)}if(o=!1,!s||!i)break;s=q(s),i=q(i)}}return n}function An(t){let e=new Map;for(let[n,r]of t){let s=0,i=0,o=null;for(let[a,c]of r)c===s?i=s:c>s&&(s=c,o=a);s>0&&i!==s&&o!==null&&e.set(n,o)}return e}function $n(t,e,n){let r=q(t);for(;r;){let i=e.get(r);if(i!==void 0){if(n.has(i))return null;let o=t.slice(r.length+1);return i?`${i}/${o}`:o}r=q(r)}let s=e.get("");return s!==void 0&&!n.has(s)?`${s}/${t}`:null}function q(t){let e=t.lastIndexOf("/");return e===-1?"":t.slice(0,e)}async function Ln(t,e,n,r,s,i,o,a,c,l=!1,f){let u=l?a.get(n):c.get(n),d=l?o:i;if(u.hash===d.hash){e.entries.push(G(n,u.mode,u.hash)),e.msgBuf.push({sortKey:r,subOrder:0,text:`Auto-merging ${r}`});return}let m=await Dn(t,s,i,o,f,l?{oursPath:r,theirsPath:n}:{oursPath:n,theirsPath:r},8);if(u.hash===m.hash)e.entries.push(G(n,u.mode,m.hash));else if(e.conflicts.push({path:n,reason:"add-add"}),e.msgBuf.push({sortKey:n,subOrder:0,text:`Auto-merging ${n}`}),e.msgBuf.push({sortKey:n,subOrder:1,text:`CONFLICT (add/add): Merge conflict in ${n}`}),l){e.entries.push(V(n,u,2)),e.entries.push(G(n,o.mode,m.hash,3));let y=await qe(t,u.hash,m.hash,u.mode,f);e.worktreeBlobs.set(n,{hash:y,mode:u.mode})}else{e.entries.push(G(n,i.mode,m.hash,2)),e.entries.push(V(n,u,3));let y=await qe(t,m.hash,u.hash,i.mode,f);e.worktreeBlobs.set(n,{hash:y,mode:i.mode})}}async function Dn(t,e,n,r,s,i,o){if(n.hash===e.hash)return{hash:r.hash,conflict:!1};if(r.hash===e.hash)return{hash:n.hash,conflict:!1};if(n.hash===r.hash)return{hash:n.hash,conflict:!1};if(se(e.mode)||se(n.mode)||se(r.mode))return{hash:n.hash,conflict:!0};let a=await H(t,e.hash),c=await H(t,n.hash),l=await H(t,r.hash);if(te(c)||te(l)||te(a))return{hash:n.hash,conflict:!0};let f=Y(a),u=Y(c),d=Y(l),h=s?.conflictStyle,m=Le(u,f,d,{conflictStyle:h});if(!m.conflict)return{hash:await wt(t,m.result),conflict:!1};let y=s?.a??"HEAD",p=s?.b??"theirs",b=i?.oursPath?`${y}:${i.oursPath}`:y,R=i?.theirsPath?`${p}:${i.theirsPath}`:p,v=pe(c,a,l,{a:b,b:R,markerSize:o??7,conflictStyle:h});return{hash:await _(t,"blob",he.encode(v)),conflict:!0}}async function qe(t,e,n,r,s){let i=await H(t,e),o=await H(t,n),a=pe(i,"",o,{a:s?.a??"HEAD",b:s?.b??"theirs",conflictStyle:s?.conflictStyle});return _(t,"blob",he.encode(a))}function V(t,e,n=0){return G(t,e.mode,e.hash,n)}function G(t,e,n,r=0){return{path:t,mode:parseInt(e,8),hash:n,stage:r,stat:ae()}}async function Ys(t,e,n,r){let s=[...r.entries],i=[...r.conflicts],o=[...r.msgBuf],a=new Map(r.worktreeBlobs);function c(h,m,y=0){o.push({sortKey:h,subOrder:y,text:m})}for(let h of[...e.keys()].sort()){let m=e.get(h);if(m.merged.clean){m.merged.result?.hash&&s.push(U(h,m.merged.result.hash,m.merged.result.mode));continue}await qs(t,m,n,s,i,c,a)}o.sort((h,m)=>(h.sortKey<m.sortKey?-1:h.sortKey>m.sortKey?1:0)||h.subOrder-m.subOrder);let l=o.map(h=>h.text),f=[],u=new Set;for(let h of s)h.stage===0&&(f.push(h),u.add(h.path));for(let[h,m]of a)u.has(h)||f.push(U(h,m.hash,m.mode));f.sort((h,m)=>je(h.path,m.path));let d=await lt(t,f);return{entries:s,conflicts:i,messages:l,resultTree:d}}async function qs(t,e,n,r,s,i,o){let a=e.path,[c,l,f]=e.stages,u=c?.hash??null,d=l?.hash??null,h=f?.hash??null;if(d===null&&h!==null&&u!==null){s.push({path:a,reason:"delete-modify",deletedBy:"ours"});let m=n?.a??"HEAD",y=n?.b??"theirs";i(a,`CONFLICT (modify/delete): ${a} deleted in ${m} and modified in ${y}. Version ${y} of ${a} left in tree.`),c&&r.push(U(a,u,c.mode,1)),r.push(U(a,h,f.mode,3)),o.set(a,{hash:h,mode:f.mode});return}if(h===null&&d!==null&&u!==null){s.push({path:a,reason:"delete-modify",deletedBy:"theirs"});let m=n?.b??"theirs",y=n?.a??"HEAD";i(a,`CONFLICT (modify/delete): ${a} deleted in ${m} and modified in ${y}. Version ${y} of ${a} left in tree.`),c&&r.push(U(a,u,c.mode,1)),r.push(U(a,d,l.mode,2)),o.set(a,{hash:d,mode:l.mode});return}if(u===null&&d!==null&&h!==null){if(d===h){r.push(U(a,d,l.mode));return}i(a,`Auto-merging ${a}`,0);let m=await H(t,d),y=await H(t,h);if(te(m)||te(y)){s.push({path:a,reason:"add-add"}),i(a,`warning: Cannot merge binary files: ${a} (${n?.a??"HEAD"} vs. ${n?.b??"theirs"})`,-1),i(a,`CONFLICT (add/add): Merge conflict in ${a}`,1),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3)),o.set(a,{hash:d,mode:l.mode});return}let p=Y(""),b=Y(m),R=Y(y),v=Le(b,p,R,{conflictStyle:n?.conflictStyle});if(!v.conflict){let w=await wt(t,v.result);r.push(U(a,w,l.mode));return}s.push({path:a,reason:"add-add"}),i(a,`CONFLICT (add/add): Merge conflict in ${a}`,1),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3));let j=pe(m,"",y,{a:n?.a??"HEAD",b:n?.b??"theirs",conflictStyle:n?.conflictStyle}),O=await _(t,"blob",he.encode(j));o.set(a,{hash:O,mode:l.mode});return}if(u!==null&&d!==null&&h!==null){if(d===u){r.push(U(a,h,f.mode));return}if(h===u){r.push(U(a,d,l.mode));return}if(d===h){r.push(U(a,d,l.mode));return}if(i(a,`Auto-merging ${a}`,0),se(c.mode)||se(l.mode)||se(f.mode)){s.push({path:a,reason:"content"}),i(a,`CONFLICT (content): Merge conflict in ${a}`,1),r.push(U(a,u,c.mode,1)),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3)),o.set(a,{hash:d,mode:l.mode});return}let m=await H(t,u),y=await H(t,d),p=await H(t,h);if(te(y)||te(p)||te(m)){s.push({path:a,reason:"content"}),i(a,`warning: Cannot merge binary files: ${a} (${n?.a??"HEAD"} vs. ${n?.b??"theirs"})`,-1),i(a,`CONFLICT (content): Merge conflict in ${a}`,1),r.push(U(a,u,c.mode,1)),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3)),o.set(a,{hash:d,mode:l.mode});return}let b=Y(m),R=Y(y),v=Y(p),j=Le(R,b,v,{conflictStyle:n?.conflictStyle});if(j.conflict){let O=e.pathnames[1],w=e.pathnames[2],x=O!==a||w!==a,S={path:a,reason:"content"};x&&(O!==a&&(S.oursOrigPath=O),w!==a&&(S.theirsOrigPath=w)),s.push(S),i(a,`CONFLICT (content): Merge conflict in ${a}`,1),r.push(U(a,u,c.mode,1)),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3));let E=x?`${n?.a??"HEAD"}:${O}`:n?.a??"HEAD",P=x?`${n?.b??"theirs"}:${w}`:n?.b??"theirs",T=pe(y,m,p,{a:E,b:P,conflictStyle:n?.conflictStyle}),$=await _(t,"blob",he.encode(T));o.set(a,{hash:$,mode:l.mode})}else{let O=await wt(t,j.result);r.push(U(a,O,l.mode))}return}}var Xs=200;async function Hn(t,e,n,r,s){let i=await Promise.all(r.map(async f=>({hash:f,timestamp:(await A(t,f)).committer.timestamp})));i.sort((f,u)=>f.timestamp-u.timestamp);let o=i.map(f=>f.hash),a=o[0],c=a,l=(await A(t,a)).tree;for(let f=1;f<o.length;f++){let u=o[f],d=(await A(t,u)).tree,h=null;if(s>=Xs)h=l;else{let p=await $e(t,c,u);p.length===0?h=null:p.length===1?h=(await A(t,p[0])).tree:h=await Hn(t,c,u,p,s+1)}let m=await Re(t,h,l,d);l=await Zs(t,m,s);let y=Ne({type:"commit",tree:l,parents:[c,u],author:Sn,committer:Sn,message:"merged common ancestors"});c=await _(t,"commit",y)}return l}async function Zs(t,e,n){let r=e.entries.filter(a=>a.stage===0),s=new Map;for(let a of e.entries)a.stage>0&&s.set(`${a.path}\0${a.stage}`,a);let i=(a,c)=>s.get(`${a}\0${c}`),o={a:"Temporary merge branch 1",b:"Temporary merge branch 2",markerSize:7+n*2};for(let a of e.conflicts){if(a.reason==="delete-modify"||a.reason==="rename-delete"){let f=i(a.path,1);if(f){r.push({...f,stage:0});continue}}if(a.reason==="rename-rename"){let f=a.oursPath??a.path,u=a.theirsPath??a.path,d=i(a.path,1),h=i(f,2),m=i(u,3);if(h&&m){let y=Oe.decode((await W(t,h.hash)).content),p=Oe.decode((await W(t,m.hash)).content),b=d?Oe.decode((await W(t,d.hash)).content):"",R=8+n*2,v=o.a??"Temporary merge branch 1",j=o.b??"Temporary merge branch 2",O=pe(y,b,p,{a:`${v}:${f}`,o:o.o,b:`${j}:${u}`,markerSize:R}),w=await _(t,"blob",he.encode(O));r.push({path:f,mode:h.mode,hash:w,stage:0,stat:ae()}),r.push({path:u,mode:m.mode,hash:w,stage:0,stat:ae()});continue}else if(h){r.push({...h,stage:0});continue}}let c=i(a.path,2),l=i(a.path,3);if(c&&l&&(a.reason==="content"||a.reason==="add-add")){let f=Oe.decode((await W(t,c.hash)).content),u=Oe.decode((await W(t,l.hash)).content),d=a.reason==="content"?i(a.path,1):null,h=d?Oe.decode((await W(t,d.hash)).content):"",m=a.oursOrigPath||a.theirsOrigPath,y=o.a??"Temporary merge branch 1",p=o.b??"Temporary merge branch 2",b=m?`${y}:${a.oursOrigPath??a.path}`:y,R=m?`${p}:${a.theirsOrigPath??a.path}`:p,v=pe(f,h,u,{a:b,o:o.o,b:R,markerSize:o.markerSize}),j=await _(t,"blob",he.encode(v));r.push({path:a.path,mode:c.mode,hash:j,stage:0,stat:ae()})}else c?r.push({...c,stage:0}):l&&r.push({...l,stage:0})}return r.sort((a,c)=>je(a.path,c.path)),lt(t,r)}async function wt(t,e){let n=e.map(gt);if(n.length===0)return _(t,"blob",he.encode(""));let i=(e[e.length-1]??"").endsWith("\0")?n.join(`
|
|
17
|
+
`);if(e[e.length-1]==="")e.pop();else{let n=e[e.length-1]??"";e[e.length-1]=`${n}\0`}return e}function It(t){return t.endsWith("\0")?t.slice(0,-1):t}function Ln(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}var Re=new TextDecoder,de=new TextEncoder,Mn={name:"virtual",email:"virtual@merge",timestamp:0,timezone:"+0000"};async function Pe(t,e,n,r,s){let{paths:i,baseMap:o,oursMap:a,theirsMap:c}=await ri(t,e,n,r),l=await ii(t,i,o,a,c,s);return oi(t,i,s,l)}async function Fn(t,e,n,r){let s=await De(t,e,n),i=await v(t,e),o=await v(t,n);if(s.length===0)return{...await Pe(t,null,i.tree,o.tree,r),baseTree:null};if(s.length===1){let l=await v(t,s[0]);return{...await Pe(t,l.tree,i.tree,o.tree,r),baseTree:l.tree}}let a=await Wn(t,e,n,s,1);return{...await Pe(t,a,i.tree,o.tree,r),baseTree:a}}async function ri(t,e,n,r){let s=await le(t,e),i=await le(t,n),o=await le(t,r),a=new Set;for(let l of s.keys())a.add(l);for(let l of i.keys())a.add(l);for(let l of o.keys())a.add(l);let c=new Map;for(let l of a){let f=s.get(l)??null,u=i.get(l)??null,d=o.get(l)??null,h=f?{hash:f.hash,mode:f.mode}:null,m=u?{hash:u.hash,mode:u.mode}:null,g=d?{hash:d.hash,mode:d.mode}:null,p=(f?1:0)|(u?2:0)|(d?4:0),b=f?.hash??null,R=u?.hash??null,j=d?.hash??null,A=0;b!==null&&b===R&&(A|=3),b!==null&&b===j&&(A|=5),R!==null&&R===j&&(A|=6);let O={path:l,stages:[h,m,g],pathnames:[l,l,l],filemask:p,matchMask:A,merged:{result:null,clean:!1},pathConflict:!1};if(si(O)){c.set(l,O);continue}c.set(l,O)}return{paths:c,baseMap:s,oursMap:i,theirsMap:o}}function si(t){let[e,n,r]=t.stages,s=e?.hash??null,i=n?.hash??null,o=r?.hash??null;return i===s&&o===s?(n?t.merged={result:{hash:i,mode:n.mode},clean:!0}:t.merged={result:null,clean:!0},!0):i===o&&i!==null?(t.merged={result:{hash:i,mode:n.mode},clean:!0},!0):i===null&&o===null?(t.merged={result:null,clean:!0},!0):o===s&&i!==s?(n?t.merged={result:{hash:i,mode:n.mode},clean:!0}:t.merged={result:null,clean:!0},!0):i===s&&o!==s?(r?t.merged={result:{hash:o,mode:r.mode},clean:!0}:t.merged={result:null,clean:!0},!0):!1}async function ii(t,e,n,r,s,i){let o={entries:[],conflicts:[],msgBuf:[],worktreeBlobs:new Map},a=[],c=[];for(let[I,y]of n)r.has(I)||a.push({path:I,status:"deleted",oldHash:y.hash,oldMode:y.mode}),s.has(I)||c.push({path:I,status:"deleted",oldHash:y.hash,oldMode:y.mode});for(let[I,y]of r)n.has(I)||a.push({path:I,status:"added",newHash:y.hash,newMode:y.mode});for(let[I,y]of s)n.has(I)||c.push({path:I,status:"added",newHash:y.hash,newMode:y.mode});let l=await me(t,a),f=await me(t,c);if(l.renames.length===0&&f.renames.length===0)return o;let u=new Map,d=new Map;for(let I of l.renames)u.set(I.oldPath,I);for(let I of f.renames)d.set(I.oldPath,I);let h=new Set;for(let[I]of r)!n.has(I)&&s.has(I)&&h.add(I);let m=new Set,g=i?.a??"HEAD",p=i?.b??"theirs";function b(I,y,k=0){o.msgBuf.push({sortKey:I,subOrder:k,text:y})}for(let I of[...n.keys()].sort()){let y=u.get(I),k=d.get(I);if(!y&&!k)continue;let M=n.get(I);if(m.add(I),y&&k)if(m.add(y.newPath),m.add(k.newPath),y.newPath===k.newPath){let L=r.get(y.newPath),C=s.get(k.newPath);if(L.hash===C.hash)o.entries.push(V(y.newPath,L));else{let N=Et(e,y.newPath);N.stages=[{hash:M.hash,mode:M.mode},{hash:L.hash,mode:L.mode},{hash:C.hash,mode:C.mode}],N.pathnames=[I,y.newPath,k.newPath],N.filemask=7,N.merged={result:null,clean:!1}}}else{let L=r.get(y.newPath),C=s.get(k.newPath),N=await _n(t,M,L,C,i);N.conflict&&b(I,`Auto-merging ${I}`,-1),o.conflicts.push({path:I,reason:"rename-rename",oursPath:y.newPath,theirsPath:k.newPath}),b(I,`CONFLICT (rename/rename): ${I} renamed to ${y.newPath} in ${g} and to ${k.newPath} in ${p}.`),o.entries.push(V(I,M,1)),o.entries.push(W(y.newPath,L.mode,N.hash,2)),o.entries.push(W(k.newPath,C.mode,N.hash,3)),o.worktreeBlobs.set(y.newPath,{hash:N.hash,mode:L.mode}),o.worktreeBlobs.set(k.newPath,{hash:N.hash,mode:C.mode})}else if(y){m.add(y.newPath);let L=s.get(I),C=r.get(y.newPath),N=h.has(y.newPath);if(L)if(N)await Gn(t,o,y.newPath,I,M,C,L,r,s,!1,i);else if(L.hash===M.hash&&C.hash===M.hash)o.entries.push(V(y.newPath,C));else if(L.hash===M.hash)o.entries.push(V(y.newPath,C));else if(C.hash===M.hash)o.entries.push(W(y.newPath,C.mode,L.hash));else{let G=Et(e,y.newPath);G.stages=[{hash:M.hash,mode:M.mode},{hash:C.hash,mode:C.mode},{hash:L.hash,mode:L.mode}],G.pathnames=[I,y.newPath,I],G.filemask=7,G.merged={result:null,clean:!1}}else{let G=s.get(y.newPath);if(o.conflicts.push({path:y.newPath,reason:"rename-delete",deletedBy:"theirs",oldPath:I}),b(y.newPath,`CONFLICT (rename/delete): ${I} renamed to ${y.newPath} in ${g}, but deleted in ${p}.`),G){o.conflicts.push({path:y.newPath,reason:"add-add"}),b(y.newPath,`Auto-merging ${y.newPath}`,0),b(y.newPath,`CONFLICT (add/add): Merge conflict in ${y.newPath}`,1),o.entries.push(V(y.newPath,C,2)),o.entries.push(V(y.newPath,G,3));let Je=await Xe(t,C.hash,G.hash,C.mode,i);o.worktreeBlobs.set(y.newPath,{hash:Je,mode:C.mode})}else o.entries.push(W(y.newPath,M.mode,M.hash,1)),o.entries.push(V(y.newPath,C,2)),o.worktreeBlobs.set(y.newPath,{hash:C.hash,mode:C.mode}),C.hash!==M.hash&&b(y.newPath,`CONFLICT (modify/delete): ${y.newPath} deleted in ${p} and modified in ${g}. Version ${g} of ${y.newPath} left in tree.`,1)}}else if(k){m.add(k.newPath);let L=r.get(I),C=s.get(k.newPath),N=h.has(k.newPath);if(L)if(N)await Gn(t,o,k.newPath,I,M,L,C,r,s,!0,i);else if(L.hash===M.hash&&C.hash===M.hash)o.entries.push(V(k.newPath,C));else if(L.hash===M.hash)o.entries.push(V(k.newPath,C));else if(C.hash===M.hash)o.entries.push(W(k.newPath,C.mode,L.hash));else{let G=Et(e,k.newPath);G.stages=[{hash:M.hash,mode:M.mode},{hash:L.hash,mode:L.mode},{hash:C.hash,mode:C.mode}],G.pathnames=[I,I,k.newPath],G.filemask=7,G.merged={result:null,clean:!1}}else{let G=r.get(k.newPath);if(o.conflicts.push({path:k.newPath,reason:"rename-delete",deletedBy:"ours",oldPath:I}),b(k.newPath,`CONFLICT (rename/delete): ${I} renamed to ${k.newPath} in ${p}, but deleted in ${g}.`),G){o.conflicts.push({path:k.newPath,reason:"add-add"}),b(k.newPath,`Auto-merging ${k.newPath}`,0),b(k.newPath,`CONFLICT (add/add): Merge conflict in ${k.newPath}`,1),o.entries.push(V(k.newPath,G,2)),o.entries.push(V(k.newPath,C,3));let Je=await Xe(t,G.hash,C.hash,G.mode,i);o.worktreeBlobs.set(k.newPath,{hash:Je,mode:G.mode})}else o.entries.push(W(k.newPath,M.mode,M.hash,1)),o.entries.push(V(k.newPath,C,3)),o.worktreeBlobs.set(k.newPath,{hash:C.hash,mode:C.mode}),C.hash!==M.hash&&b(k.newPath,`CONFLICT (modify/delete): ${k.newPath} deleted in ${g} and modified in ${p}. Version ${p} of ${k.newPath} left in tree.`,1)}}}let R=new Set(l.renames.map(I=>I.newPath)),j=new Set(f.renames.map(I=>I.newPath)),A=Dn(n,r),O=Dn(n,s),w=Hn(A,s,n),x=Hn(O,r,n),S=Un(l.renames,w),E=Un(f.renames,x),P=Nn(S),T=Nn(E);for(let I of[...P.keys()])T.has(I)&&(P.delete(I),T.delete(I));let $=new Set(P.keys()),D=new Set(T.keys());if(T.size>0)for(let I of a){if(I.status!=="added"||R.has(I.path))continue;let y=Bn(I.path,T,$);if(!y)continue;if(e.has(y)||n.has(y)||r.has(y)||s.has(y)){if(r.has(y)){b(y,`CONFLICT (implicit dir rename): Existing file/dir at ${y} in the way of implicit directory rename(s) putting the following path(s) there: ${I.path}.`,1);continue}let L=r.get(I.path),C=s.get(y)??n.get(y);o.entries.push(W(y,L.mode,L.hash,2)),C&&o.entries.push(W(y,C.mode,C.hash,3)),o.worktreeBlobs.set(y,{hash:L.hash,mode:L.mode}),o.conflicts.push({path:y,reason:"add-add"}),b(y,`CONFLICT (file location): ${I.path} added in ${g} inside a directory that was renamed in ${p}, suggesting it should perhaps be moved to ${y}.`,1);let N=e.get(I.path);N&&(N.merged={result:null,clean:!0}),m.add(I.path);continue}let k=r.get(I.path);o.entries.push(W(y,k.mode,k.hash,2)),o.worktreeBlobs.set(y,{hash:k.hash,mode:k.mode}),o.conflicts.push({path:y,reason:"directory-rename"}),b(y,`CONFLICT (file location): ${I.path} added in ${g} inside a directory that was renamed in ${p}, suggesting it should perhaps be moved to ${y}.`,1);let M=e.get(I.path);M&&(M.merged={result:null,clean:!0}),m.add(I.path)}if(P.size>0)for(let I of c){if(I.status!=="added"||j.has(I.path))continue;let y=Bn(I.path,P,D);if(!y)continue;if(e.has(y)||n.has(y)||r.has(y)||s.has(y)){if(s.has(y)){b(y,`CONFLICT (implicit dir rename): Existing file/dir at ${y} in the way of implicit directory rename(s) putting the following path(s) there: ${I.path}.`,1);continue}let L=s.get(I.path),C=r.get(y)??n.get(y);C&&o.entries.push(W(y,C.mode,C.hash,2)),o.entries.push(W(y,L.mode,L.hash,3)),o.worktreeBlobs.set(y,{hash:L.hash,mode:L.mode}),o.conflicts.push({path:y,reason:"add-add"}),b(y,`CONFLICT (file location): ${I.path} added in ${p} inside a directory that was renamed in ${g}, suggesting it should perhaps be moved to ${y}.`,1);let N=e.get(I.path);N&&(N.merged={result:null,clean:!0}),m.add(I.path);continue}let k=s.get(I.path);o.entries.push(W(y,k.mode,k.hash,3)),o.worktreeBlobs.set(y,{hash:k.hash,mode:k.mode}),o.conflicts.push({path:y,reason:"directory-rename"}),b(y,`CONFLICT (file location): ${I.path} added in ${p} inside a directory that was renamed in ${g}, suggesting it should perhaps be moved to ${y}.`,1);let M=e.get(I.path);M&&(M.merged={result:null,clean:!0}),m.add(I.path)}let ae=new Set(o.entries.map(I=>I.path));for(let I of ae){let y=e.get(I);y&&(y.merged={result:null,clean:!0})}for(let I of m){if(ae.has(I))continue;let y=e.get(I);if(!y||y.merged.clean)continue;y.filemask===7&&!y.pathConflict||(y.merged={result:null,clean:!0})}return o}function Dn(t,e){let n=new Set;for(let i of t.keys()){let o=q(i);for(;o;)n.add(o),o=q(o)}let r=new Set;for(let i of e.keys()){let o=q(i);for(;o;)r.add(o),o=q(o)}let s=new Set;for(let i of n)r.has(i)||s.add(i);return s}function Hn(t,e,n){if(t.size===0)return t;let r=new Set;for(let s of e.keys()){if(n.has(s))continue;let i=q(s)??"";t.has(i)&&r.add(i)}for(let s of[...r]){let i=q(s);for(;i;)t.has(i)&&!r.has(i)&&r.add(i),i=q(i)}return r}function Un(t,e){let n=new Map;for(let r of t){let s=q(r.oldPath),i=q(r.newPath),o=!0;for(;;){if(!o){let a=s.length+(s?1:0),c=i.length+(i?1:0),l=r.oldPath.slice(a,r.oldPath.indexOf("/",a)),f=r.newPath.slice(c,r.newPath.indexOf("/",c));if(l!==f)break}if(e.has(s)){let a=n.get(s);a||(a=new Map,n.set(s,a)),a.set(i,(a.get(i)??0)+1)}if(o=!1,!s||!i)break;s=q(s),i=q(i)}}return n}function Nn(t){let e=new Map;for(let[n,r]of t){let s=0,i=0,o=null;for(let[a,c]of r)c===s?i=s:c>s&&(s=c,o=a);s>0&&i!==s&&o!==null&&e.set(n,o)}return e}function Bn(t,e,n){let r=q(t);for(;r;){let i=e.get(r);if(i!==void 0){if(n.has(i))return null;let o=t.slice(r.length+1);return i?`${i}/${o}`:o}r=q(r)}let s=e.get("");return s!==void 0&&!n.has(s)?`${s}/${t}`:null}function q(t){let e=t.lastIndexOf("/");return e===-1?"":t.slice(0,e)}async function Gn(t,e,n,r,s,i,o,a,c,l=!1,f){let u=l?a.get(n):c.get(n),d=l?o:i;if(u.hash===d.hash){e.entries.push(W(n,u.mode,u.hash)),e.msgBuf.push({sortKey:r,subOrder:0,text:`Auto-merging ${r}`});return}let m=await _n(t,s,i,o,f,l?{oursPath:r,theirsPath:n}:{oursPath:n,theirsPath:r},8);if(u.hash===m.hash)e.entries.push(W(n,u.mode,m.hash));else if(e.conflicts.push({path:n,reason:"add-add"}),e.msgBuf.push({sortKey:n,subOrder:0,text:`Auto-merging ${n}`}),e.msgBuf.push({sortKey:n,subOrder:1,text:`CONFLICT (add/add): Merge conflict in ${n}`}),l){e.entries.push(V(n,u,2)),e.entries.push(W(n,o.mode,m.hash,3));let g=await Xe(t,u.hash,m.hash,u.mode,f);e.worktreeBlobs.set(n,{hash:g,mode:u.mode})}else{e.entries.push(W(n,i.mode,m.hash,2)),e.entries.push(V(n,u,3));let g=await Xe(t,m.hash,u.hash,i.mode,f);e.worktreeBlobs.set(n,{hash:g,mode:i.mode})}}async function _n(t,e,n,r,s,i,o){if(n.hash===e.hash)return{hash:r.hash,conflict:!1};if(r.hash===e.hash)return{hash:n.hash,conflict:!1};if(n.hash===r.hash)return{hash:n.hash,conflict:!1};if(ie(e.mode)||ie(n.mode)||ie(r.mode))return{hash:n.hash,conflict:!0};let a=await H(t,e.hash),c=await H(t,n.hash),l=await H(t,r.hash);if(ne(c)||ne(l)||ne(a))return{hash:n.hash,conflict:!0};let f=Y(a),u=Y(c),d=Y(l),h=s?.conflictStyle,m=Ue(u,f,d,{conflictStyle:h});if(!m.conflict)return{hash:await xt(t,m.result),conflict:!1};let g=s?.a??"HEAD",p=s?.b??"theirs",b=i?.oursPath?`${g}:${i.oursPath}`:g,R=i?.theirsPath?`${p}:${i.theirsPath}`:p,j=ge(c,a,l,{a:b,b:R,markerSize:o??7,conflictStyle:h});return{hash:await B(t,"blob",de.encode(j)),conflict:!0}}async function Xe(t,e,n,r,s){let i=await H(t,e),o=await H(t,n),a=ge(i,"",o,{a:s?.a??"HEAD",b:s?.b??"theirs",conflictStyle:s?.conflictStyle});return B(t,"blob",de.encode(a))}function V(t,e,n=0){return W(t,e.mode,e.hash,n)}function W(t,e,n,r=0){return{path:t,mode:parseInt(e,8),hash:n,stage:r,stat:ce()}}async function oi(t,e,n,r){let s=[...r.entries],i=[...r.conflicts],o=[...r.msgBuf],a=new Map(r.worktreeBlobs);function c(h,m,g=0){o.push({sortKey:h,subOrder:g,text:m})}for(let h of[...e.keys()].sort()){let m=e.get(h);if(m.merged.clean){m.merged.result?.hash&&s.push(U(h,m.merged.result.hash,m.merged.result.mode));continue}await ai(t,m,n,s,i,c,a)}o.sort((h,m)=>(h.sortKey<m.sortKey?-1:h.sortKey>m.sortKey?1:0)||h.subOrder-m.subOrder);let l=o.map(h=>h.text),f=[],u=new Set;for(let h of s)h.stage===0&&(f.push(h),u.add(h.path));for(let[h,m]of a)u.has(h)||f.push(U(h,m.hash,m.mode));f.sort((h,m)=>Me(h.path,m.path));let d=await ft(t,f);return{entries:s,conflicts:i,messages:l,resultTree:d}}async function ai(t,e,n,r,s,i,o){let a=e.path,[c,l,f]=e.stages,u=c?.hash??null,d=l?.hash??null,h=f?.hash??null;if(d===null&&h!==null&&u!==null){s.push({path:a,reason:"delete-modify",deletedBy:"ours"});let m=n?.a??"HEAD",g=n?.b??"theirs";i(a,`CONFLICT (modify/delete): ${a} deleted in ${m} and modified in ${g}. Version ${g} of ${a} left in tree.`),c&&r.push(U(a,u,c.mode,1)),r.push(U(a,h,f.mode,3)),o.set(a,{hash:h,mode:f.mode});return}if(h===null&&d!==null&&u!==null){s.push({path:a,reason:"delete-modify",deletedBy:"theirs"});let m=n?.b??"theirs",g=n?.a??"HEAD";i(a,`CONFLICT (modify/delete): ${a} deleted in ${m} and modified in ${g}. Version ${g} of ${a} left in tree.`),c&&r.push(U(a,u,c.mode,1)),r.push(U(a,d,l.mode,2)),o.set(a,{hash:d,mode:l.mode});return}if(u===null&&d!==null&&h!==null){if(d===h){r.push(U(a,d,l.mode));return}i(a,`Auto-merging ${a}`,0);let m=await H(t,d),g=await H(t,h);if(ne(m)||ne(g)){s.push({path:a,reason:"add-add"}),i(a,`warning: Cannot merge binary files: ${a} (${n?.a??"HEAD"} vs. ${n?.b??"theirs"})`,-1),i(a,`CONFLICT (add/add): Merge conflict in ${a}`,1),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3)),o.set(a,{hash:d,mode:l.mode});return}let p=Y(""),b=Y(m),R=Y(g),j=Ue(b,p,R,{conflictStyle:n?.conflictStyle});if(!j.conflict){let w=await xt(t,j.result);r.push(U(a,w,l.mode));return}s.push({path:a,reason:"add-add"}),i(a,`CONFLICT (add/add): Merge conflict in ${a}`,1),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3));let A=ge(m,"",g,{a:n?.a??"HEAD",b:n?.b??"theirs",conflictStyle:n?.conflictStyle}),O=await B(t,"blob",de.encode(A));o.set(a,{hash:O,mode:l.mode});return}if(u!==null&&d!==null&&h!==null){if(d===u){r.push(U(a,h,f.mode));return}if(h===u){r.push(U(a,d,l.mode));return}if(d===h){r.push(U(a,d,l.mode));return}if(i(a,`Auto-merging ${a}`,0),ie(c.mode)||ie(l.mode)||ie(f.mode)){s.push({path:a,reason:"content"}),i(a,`CONFLICT (content): Merge conflict in ${a}`,1),r.push(U(a,u,c.mode,1)),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3)),o.set(a,{hash:d,mode:l.mode});return}let m=await H(t,u),g=await H(t,d),p=await H(t,h);if(ne(g)||ne(p)||ne(m)){s.push({path:a,reason:"content"}),i(a,`warning: Cannot merge binary files: ${a} (${n?.a??"HEAD"} vs. ${n?.b??"theirs"})`,-1),i(a,`CONFLICT (content): Merge conflict in ${a}`,1),r.push(U(a,u,c.mode,1)),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3)),o.set(a,{hash:d,mode:l.mode});return}let b=Y(m),R=Y(g),j=Y(p),A=Ue(R,b,j,{conflictStyle:n?.conflictStyle});if(A.conflict){let O=e.pathnames[1],w=e.pathnames[2],x=O!==a||w!==a,S={path:a,reason:"content"};x&&(O!==a&&(S.oursOrigPath=O),w!==a&&(S.theirsOrigPath=w)),s.push(S),i(a,`CONFLICT (content): Merge conflict in ${a}`,1),r.push(U(a,u,c.mode,1)),r.push(U(a,d,l.mode,2)),r.push(U(a,h,f.mode,3));let E=x?`${n?.a??"HEAD"}:${O}`:n?.a??"HEAD",P=x?`${n?.b??"theirs"}:${w}`:n?.b??"theirs",T=ge(g,m,p,{a:E,b:P,conflictStyle:n?.conflictStyle}),$=await B(t,"blob",de.encode(T));o.set(a,{hash:$,mode:l.mode})}else{let O=await xt(t,A.result);r.push(U(a,O,l.mode))}return}}var ci=200;async function Wn(t,e,n,r,s){let i=await Promise.all(r.map(async f=>({hash:f,timestamp:(await v(t,f)).committer.timestamp})));i.sort((f,u)=>f.timestamp-u.timestamp);let o=i.map(f=>f.hash),a=o[0],c=a,l=(await v(t,a)).tree;for(let f=1;f<o.length;f++){let u=o[f],d=(await v(t,u)).tree,h=null;if(s>=ci)h=l;else{let p=await De(t,c,u);p.length===0?h=null:p.length===1?h=(await v(t,p[0])).tree:h=await Wn(t,c,u,p,s+1)}let m=await Pe(t,h,l,d);l=await li(t,m,s);let g=Ae({type:"commit",tree:l,parents:[c,u],author:Mn,committer:Mn,message:"merged common ancestors"});c=await B(t,"commit",g)}return l}async function li(t,e,n){let r=e.entries.filter(a=>a.stage===0),s=new Map;for(let a of e.entries)a.stage>0&&s.set(`${a.path}\0${a.stage}`,a);let i=(a,c)=>s.get(`${a}\0${c}`),o={a:"Temporary merge branch 1",b:"Temporary merge branch 2",markerSize:7+n*2};for(let a of e.conflicts){if(a.reason==="delete-modify"||a.reason==="rename-delete"){let f=i(a.path,1);if(f){r.push({...f,stage:0});continue}}if(a.reason==="rename-rename"){let f=a.oursPath??a.path,u=a.theirsPath??a.path,d=i(a.path,1),h=i(f,2),m=i(u,3);if(h&&m){let g=Re.decode((await F(t,h.hash)).content),p=Re.decode((await F(t,m.hash)).content),b=d?Re.decode((await F(t,d.hash)).content):"",R=8+n*2,j=o.a??"Temporary merge branch 1",A=o.b??"Temporary merge branch 2",O=ge(g,b,p,{a:`${j}:${f}`,o:o.o,b:`${A}:${u}`,markerSize:R}),w=await B(t,"blob",de.encode(O));r.push({path:f,mode:h.mode,hash:w,stage:0,stat:ce()}),r.push({path:u,mode:m.mode,hash:w,stage:0,stat:ce()});continue}else if(h){r.push({...h,stage:0});continue}}let c=i(a.path,2),l=i(a.path,3);if(c&&l&&(a.reason==="content"||a.reason==="add-add")){let f=Re.decode((await F(t,c.hash)).content),u=Re.decode((await F(t,l.hash)).content),d=a.reason==="content"?i(a.path,1):null,h=d?Re.decode((await F(t,d.hash)).content):"",m=a.oursOrigPath||a.theirsOrigPath,g=o.a??"Temporary merge branch 1",p=o.b??"Temporary merge branch 2",b=m?`${g}:${a.oursOrigPath??a.path}`:g,R=m?`${p}:${a.theirsOrigPath??a.path}`:p,j=ge(f,h,u,{a:b,o:o.o,b:R,markerSize:o.markerSize}),A=await B(t,"blob",de.encode(j));r.push({path:a.path,mode:c.mode,hash:A,stage:0,stat:ce()})}else c?r.push({...c,stage:0}):l&&r.push({...l,stage:0})}return r.sort((a,c)=>Me(a.path,c.path)),ft(t,r)}async function xt(t,e){let n=e.map(It);if(n.length===0)return B(t,"blob",de.encode(""));let i=(e[e.length-1]??"").endsWith("\0")?n.join(`
|
|
17
18
|
`):`${n.join(`
|
|
18
19
|
`)}
|
|
19
|
-
`;return _(t,"blob",he.encode(i))}function U(t,e,n,r=0){let s=typeof n=="string"?parseInt(n,8):n;return{path:t,mode:s,hash:e,stage:r,stat:ae()}}function bt(t,e){let n=t.get(e);return n||(n={path:e,stages:[null,null,null],pathnames:[e,e,e],filemask:0,matchMask:0,merged:{result:null,clean:!1},pathConflict:!1},t.set(e,n)),n}async function Js(t,e,n,r){let s=r?{a:r.ours??"ours",b:r.theirs??"theirs"}:void 0,i=await Mn(t,e,n,s);return{treeHash:i.resultTree,clean:i.conflicts.length===0,conflicts:i.conflicts,messages:i.messages}}async function Qs(t,e,n,r,s){let i=s?{a:s.ours??"ours",b:s.theirs??"theirs"}:void 0,o=await Re(t,e,n,r,i);return{treeHash:o.resultTree,clean:o.conflicts.length===0,conflicts:o.conflicts,messages:o.messages}}var ei=new TextEncoder,Un=new TextDecoder,Pe=16877,Fn=33188,ti=33261,Gn=40960;function K(t){let e=[];for(let n of t.split("/"))n==="."||n===""||(n===".."?e.pop():e.push(n));return"/"+e.join("/")}function Nn(t){let e=t.lastIndexOf("/");return e<=0?"/":t.slice(0,e)}function Bn(t){switch(t){case F.EXECUTABLE:return ti;case F.SYMLINK:return Gn;case F.DIRECTORY:return Pe;default:return Fn}}var Xe=class{constructor(e,n,r="/"){this.objectStore=e;this.rootTreeHash=n;this.rootPath=r;let s=K(r);this.overlay.set(s,{type:"directory",mode:Pe,mtime:this.epoch})}treeCache=new Map;overlay=new Map;removals=new Set;epoch=new Date(0);toRelative(e){let n=K(e),r=K(this.rootPath);if(n===r)return"";let s=r==="/"?"/":`${r}/`;return n.startsWith(s)?n.slice(s.length):null}async loadTreeDir(e){let n=this.treeCache.get(e);if(n)return n;if(e===""){let o=await this.objectStore.read(this.rootTreeHash);if(o.type!=="tree")return null;let a=Ae(o.content);return this.treeCache.set("",a.entries),a.entries}let r=e.split("/"),s=await this.loadTreeDir("");if(!s)return null;let i="";for(let o of r){let a=s.find(u=>u.name===o);if(!a||a.mode!==F.DIRECTORY)return null;i=i?`${i}/${o}`:o;let c=this.treeCache.get(i);if(c){s=c;continue}let l=await this.objectStore.read(a.hash);if(l.type!=="tree")return null;let f=Ae(l.content);this.treeCache.set(i,f.entries),s=f.entries}return s}async lookupTreeEntry(e){if(e==="")return null;let n=e.lastIndexOf("/"),r=n===-1?"":e.slice(0,n),s=n===-1?e:e.slice(n+1),i=await this.loadTreeDir(r);if(!i)return null;let o=i.find(a=>a.name===s);return o?{entry:o,dirEntries:i}:null}async isTreeDirectory(e){return e===""?!0:(await this.lookupTreeEntry(e))?.entry.mode===F.DIRECTORY}ensureOverlayParents(e){let n=Nn(e);n===K(this.rootPath)||n==="/"||this.overlay.has(n)||(this.ensureOverlayParents(n),this.overlay.set(n,{type:"directory",mode:Pe,mtime:new Date}))}async readFile(e){return Un.decode(await this.readFileBuffer(e))}async readFileBuffer(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, open '${e}'`);let r=this.overlay.get(n);if(r){if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return r.content}let s=this.toRelative(n);if(s===null||s==="")throw new Error(`ENOENT: no such file or directory, open '${e}'`);let i=await this.lookupTreeEntry(s);if(!i)throw new Error(`ENOENT: no such file or directory, open '${e}'`);if(i.entry.mode===F.DIRECTORY)throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);let o=await this.objectStore.read(i.entry.hash);if(o.type!=="blob")throw new Error(`ENOENT: no such file or directory, open '${e}'`);return o.content}async writeFile(e,n){let r=K(e);this.removals.delete(r),this.ensureOverlayParents(r),this.overlay.set(r,{type:"file",content:typeof n=="string"?ei.encode(n):new Uint8Array(n),mode:Fn,mtime:new Date})}async exists(e){let n=K(e);if(this.removals.has(n))return!1;if(this.overlay.has(n))return!0;let r=this.toRelative(n);return r===null?!1:r===""||await this.isTreeDirectory(r)?!0:await this.lookupTreeEntry(r)!==null}async stat(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let r=this.overlay.get(n);if(r)return{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:r.type==="file"?r.content.byteLength:0,mtime:r.mtime};let s=this.toRelative(n);if(s===null)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);if(s==="")return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:Pe,size:0,mtime:this.epoch};let i=await this.lookupTreeEntry(s);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let{entry:o}=i,a=o.mode===F.DIRECTORY,c=o.mode===F.SYMLINK,l=0;return a||(l=(await this.objectStore.read(o.hash)).content.byteLength),{isFile:!a&&!c,isDirectory:a,isSymbolicLink:!1,mode:Bn(o.mode),size:l,mtime:this.epoch}}async lstat(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let r=this.overlay.get(n);if(r)return{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:r.type==="symlink",mode:r.mode,size:r.type==="file"?r.content.byteLength:r.type==="symlink"?r.target.length:0,mtime:r.mtime};let s=this.toRelative(n);if(s===null)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);if(s==="")return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:Pe,size:0,mtime:this.epoch};let i=await this.lookupTreeEntry(s);if(!i)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let{entry:o}=i,a=o.mode===F.DIRECTORY,c=o.mode===F.SYMLINK,l=0;return a||(l=(await this.objectStore.read(o.hash)).content.byteLength),{isFile:!a&&!c,isDirectory:a,isSymbolicLink:c,mode:Bn(o.mode),size:l,mtime:this.epoch}}async mkdir(e,n){let r=K(e);if(this.overlay.has(r)){if(this.overlay.get(r).type!=="directory")throw new Error(`EEXIST: file already exists, mkdir '${e}'`);if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let s=this.toRelative(r);if(s!==null&&!this.removals.has(r)&&(s===""||await this.isTreeDirectory(s))){if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let i=Nn(r);if(!(this.overlay.has(i)||await this.exists(i)))if(n?.recursive)await this.mkdir(i,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.removals.delete(r),this.overlay.set(r,{type:"directory",mode:Pe,mtime:new Date})}async readdir(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set,s=this.toRelative(n);if(s!==null){let o=await this.loadTreeDir(s);if(o)for(let a of o){let c=n==="/"?`/${a.name}`:`${n}/${a.name}`;this.removals.has(c)||r.add(a.name)}}let i=n==="/"?"/":`${n}/`;for(let o of this.overlay.keys())if(o!==n&&o.startsWith(i)){let c=o.slice(i.length).split("/")[0];c&&!this.removals.has(n==="/"?`/${c}`:`${n}/${c}`)&&r.add(c)}if(r.size===0){if(this.overlay.get(n)?.type==="directory")return[];if(s!==null&&(s===""||await this.isTreeDirectory(s)))return[];throw new Error(`ENOENT: no such file or directory, scandir '${e}'`)}return[...r].sort()}async rm(e,n){let r=K(e);if(!await this.exists(r)){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}let i=r==="/"?"/":`${r}/`;if(n?.recursive)for(let o of[...this.overlay.keys()])o.startsWith(i)&&(this.overlay.delete(o),this.removals.add(o));if(this.overlay.delete(r),this.removals.add(r),n?.recursive){let o=this.toRelative(r);o!==null&&await this.markTreeChildrenRemoved(o,r)}}async markTreeChildrenRemoved(e,n){let r=await this.loadTreeDir(e);if(r)for(let s of r){let i=n==="/"?`/${s.name}`:`${n}/${s.name}`;if(this.removals.add(i),s.mode===F.DIRECTORY){let o=e?`${e}/${s.name}`:s.name;await this.markTreeChildrenRemoved(o,i)}}}async readlink(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);let r=this.overlay.get(n);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}let s=this.toRelative(n);if(s===null||s==="")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);let i=await this.lookupTreeEntry(s);if(!i||i.entry.mode!==F.SYMLINK)throw new Error(`EINVAL: invalid argument, readlink '${e}'`);let o=await this.objectStore.read(i.entry.hash);return Un.decode(o.content)}async symlink(e,n){let r=K(n);if(await this.exists(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureOverlayParents(r),this.removals.delete(r),this.overlay.set(r,{type:"symlink",target:e,mode:Gn,mtime:new Date})}};var It=class{constructor(e){this.inner=e}read(e){return this.inner.read(e)}write(e,n){throw new Error("cannot write: object store is read-only")}exists(e){return this.inner.exists(e)}ingestPack(e){throw new Error("cannot ingest pack: object store is read-only")}ingestPackStream(e){throw new Error("cannot ingest pack: object store is read-only")}findByPrefix(e){return this.inner.findByPrefix(e)}},Et=class{constructor(e){this.inner=e}readRef(e){return this.inner.readRef(e)}writeRef(e,n){throw new Error("cannot write ref: ref store is read-only")}deleteRef(e){throw new Error("cannot delete ref: ref store is read-only")}listRefs(e){return this.inner.listRefs(e)}compareAndSwapRef(e,n,r){throw new Error("cannot update ref: ref store is read-only")}};function ni(t){return{objectStore:new It(t.objectStore),refStore:new Et(t.refStore),hooks:t.hooks}}var xt=class{constructor(e){this.inner=e}overlay=new Map;async read(e){let n=this.overlay.get(e);return n?{type:n.type,content:new Uint8Array(n.content)}:this.inner.read(e)}async write(e,n){let r=await De(Wt(e,n));return this.overlay.has(r)||await this.inner.exists(r).catch(()=>!1)||this.overlay.set(r,{type:e,content:new Uint8Array(n)}),r}async exists(e){return this.overlay.has(e)?!0:this.inner.exists(e)}async ingestPack(e){if(e.byteLength<32)return 0;let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=n.getUint32(0);if(r!==1346454347)throw new Error(`invalid pack signature: 0x${r.toString(16)} (expected 0x5041434b)`);let s=n.getUint32(4);if(s!==2)throw new Error(`unsupported pack version: ${s}`);if(n.getUint32(8)===0)return 0;let o=this.overlay,a=this.inner,c=await Gt(e,async l=>{let f=o.get(l);if(f)return{type:f.type,content:new Uint8Array(f.content)};try{return await a.read(l)}catch{return null}});for(let l of c)o.has(l.hash)||o.set(l.hash,{type:l.type,content:l.content});return c.length}async ingestPackStream(e){let n=this.overlay,r=0;for await(let s of e)n.has(s.hash)||n.set(s.hash,{type:s.type,content:s.content}),r++;return r}async findByPrefix(e){let n=await this.inner.findByPrefix(e),r=[];for(let i of this.overlay.keys())i.startsWith(e)&&r.push(i);return[...new Set([...n,...r])]}},Ot=class{constructor(e){this.inner=e}overlay=new Map;deleted=new Set;async readRef(e){if(this.deleted.has(e))return null;let n=this.overlay.get(e);return n||this.inner.readRef(e)}async writeRef(e,n){this.deleted.delete(e),this.overlay.set(e,qt(n))}async deleteRef(e){this.overlay.delete(e),this.deleted.add(e)}async listRefs(e){let n=await this.inner.listRefs(e),r=new Map;for(let s of n)this.deleted.has(s.name)||r.set(s.name,s);for(let[s,i]of this.overlay)if(!(e&&!s.startsWith(e))){if(i.type==="direct")r.set(s,{name:s,hash:i.hash});else if(i.type==="symbolic"){let o=await this.resolveSymbolic(i.target);o&&r.set(s,{name:s,hash:o})}}return[...r.values()]}async compareAndSwapRef(e,n,r){let s=await this.readRef(e),i=null;if(s&&(s.type==="direct"?i=s.hash:s.type==="symbolic"&&(i=await this.resolveSymbolic(s.target))),n===null){if(s!==null)return!1}else if(i!==n)return!1;return r===null?(this.overlay.delete(e),this.deleted.add(e)):(this.deleted.delete(e),this.overlay.set(e,r)),!0}async resolveSymbolic(e,n=0){if(n>10)return null;let r=await this.readRef(e);return r?r.type==="direct"?r.hash:r.type==="symbolic"?this.resolveSymbolic(r.target,n+1):null:null}};function Rt(t){return{objectStore:new xt(t.objectStore),refStore:new Ot(t.refStore),hooks:t.hooks}}async function Pt(t,e){let n=await Fe(t,e);if(n)return n;throw new Error(`ref or commit '${e}' not found`)}async function _n(t,e,n,r){let s=new Set,i=0;for(let o of e){if(!Zt(o.path))throw new Error(`refusing to check out unsafe path '${o.path}'`);let a=be(r,o.path);if(!Jt(r,a))throw new Error(`refusing to check out path outside target directory: '${o.path}'`);let c=_t(a);if(c!==r&&!s.has(c)&&(await n.mkdir(c,{recursive:!0}),s.add(c)),se(o.mode)){let l=await H(t,o.hash);if(!Qt(l))throw new Error(`refusing to create symlink with unsafe target '${l}'`);n.symlink?await n.symlink(l,a):await n.writeFile(a,l)}else{let l=await ne(t,o.hash);await n.writeFile(a,l)}i++}return i}function Wn(t){return en(t.map(e=>({path:e.path,mode:parseInt(e.mode,8),hash:e.hash,stage:0,stat:ae()})))}async function ri(t,e,n,r="/"){let s=await Pt(t,e),i=await A(t,s),o=await J(t,i.tree),a=await _n(t,o,n,r);return{commitHash:s,treeHash:i.tree,filesWritten:a}}async function si(t,e,n){let r=n?.workTree??"/",s=n?.gitDir??be(r,".git"),i=n?.ref??"HEAD";await e.mkdir(s,{recursive:!0});let o=await Pt(t,i),a=await A(t,o),c=await J(t,a.tree),l={...t,fs:e,gitDir:s,workTree:r},f=await _n(t,c,e,r);return await Be(l,Wn(c)),{ctx:l,commitHash:o,treeHash:a.tree,filesWritten:f}}async function ii(t,e){let n=Rt(t),r=e?.workTree??"/",s=e?.gitDir??be(r,".git"),i=e?.ref??"HEAD",o=await Pt(n,i),a=await A(n,o),c=new Xe(n.objectStore,a.tree,r),l="refs/heads/main";await n.refStore.writeRef("HEAD",{type:"symbolic",target:l}),await n.refStore.writeRef(l,{type:"direct",hash:o});let f={...n,fs:c,gitDir:s,workTree:r},u=await J(n,a.tree);return await Be(f,Wn(u)),{ctx:f,commitHash:o,treeHash:a.tree,filesWritten:0}}export{js as blame,vs as countAheadBehind,Hs as createCommit,ii as createSandboxWorktree,si as createWorktree,Ls as diffCommits,Ps as diffTrees,ri as extractTree,Cs as findMergeBases,Rs as flattenTree,ks as getChangedFiles,Ts as getNewCommits,zr as grep,Ss as isAncestor,Hr as listBranches,Ur as listTags,Js as mergeTrees,Qs as mergeTreesFromTreeHashes,Rt as overlayRepo,Br as readBlob,Fr as readBlobText,Nr as readCommit,Gr as readFileAtCommit,ni as readonlyRepo,Dr as resolveRef,Ms as walkCommitHistory,Ns as writeBlob,Us as writeTree};
|
|
20
|
+
`;return B(t,"blob",de.encode(i))}function U(t,e,n,r=0){let s=typeof n=="string"?parseInt(n,8):n;return{path:t,mode:s,hash:e,stage:r,stat:ce()}}function Et(t,e){let n=t.get(e);return n||(n={path:e,stages:[null,null,null],pathnames:[e,e,e],filemask:0,matchMask:0,merged:{result:null,clean:!1},pathConflict:!1},t.set(e,n)),n}async function fi(t,e,n,r){let s=r?{a:r.ours??"ours",b:r.theirs??"theirs"}:void 0,i=await Fn(t,e,n,s);return{treeHash:i.resultTree,clean:i.conflicts.length===0,conflicts:i.conflicts,messages:i.messages}}async function ui(t,e,n,r,s){let i=s?{a:s.ours??"ours",b:s.theirs??"theirs"}:void 0,o=await Pe(t,e,n,r,i);return{treeHash:o.resultTree,clean:o.conflicts.length===0,conflicts:o.conflicts,messages:o.messages}}var hi=new TextEncoder,zn=new TextDecoder,ke=16877,Yn=33188,di=33261,qn=40960;function K(t){let e=[];for(let n of t.split("/"))n==="."||n===""||(n===".."?e.pop():e.push(n));return"/"+e.join("/")}function Vn(t){let e=t.lastIndexOf("/");return e<=0?"/":t.slice(0,e)}function Kn(t){switch(t){case _.EXECUTABLE:return di;case _.SYMLINK:return qn;case _.DIRECTORY:return ke;default:return Yn}}var Ze=class{constructor(e,n,r="/"){this.objectStore=e;this.rootTreeHash=n;this.rootPath=r;let s=K(r);this.overlay.set(s,{type:"directory",mode:ke,mtime:this.epoch})}treeCache=new Map;overlay=new Map;removals=new Set;epoch=new Date(0);toRelative(e){let n=K(e),r=K(this.rootPath);if(n===r)return"";let s=r==="/"?"/":`${r}/`;return n.startsWith(s)?n.slice(s.length):null}async loadTreeDir(e){let n=this.treeCache.get(e);if(n)return n;if(e===""){let o=await this.objectStore.read(this.rootTreeHash);if(o.type!=="tree")return null;let a=se(o.content);return this.treeCache.set("",a.entries),a.entries}let r=e.split("/"),s=await this.loadTreeDir("");if(!s)return null;let i="";for(let o of r){let a=s.find(u=>u.name===o);if(!a||a.mode!==_.DIRECTORY)return null;i=i?`${i}/${o}`:o;let c=this.treeCache.get(i);if(c){s=c;continue}let l=await this.objectStore.read(a.hash);if(l.type!=="tree")return null;let f=se(l.content);this.treeCache.set(i,f.entries),s=f.entries}return s}async lookupTreeEntry(e){if(e==="")return null;let n=e.lastIndexOf("/"),r=n===-1?"":e.slice(0,n),s=n===-1?e:e.slice(n+1),i=await this.loadTreeDir(r);if(!i)return null;let o=i.find(a=>a.name===s);return o?{entry:o,dirEntries:i}:null}async isTreeDirectory(e){return e===""?!0:(await this.lookupTreeEntry(e))?.entry.mode===_.DIRECTORY}ensureOverlayParents(e){let n=Vn(e);n===K(this.rootPath)||n==="/"||this.overlay.has(n)||(this.ensureOverlayParents(n),this.overlay.set(n,{type:"directory",mode:ke,mtime:new Date}))}async readFile(e){return zn.decode(await this.readFileBuffer(e))}async readFileBuffer(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, open '${e}'`);let r=this.overlay.get(n);if(r){if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return r.content}let s=this.toRelative(n);if(s===null||s==="")throw new Error(`ENOENT: no such file or directory, open '${e}'`);let i=await this.lookupTreeEntry(s);if(!i)throw new Error(`ENOENT: no such file or directory, open '${e}'`);if(i.entry.mode===_.DIRECTORY)throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);let o=await this.objectStore.read(i.entry.hash);if(o.type!=="blob")throw new Error(`ENOENT: no such file or directory, open '${e}'`);return o.content}async writeFile(e,n){let r=K(e);this.removals.delete(r),this.ensureOverlayParents(r),this.overlay.set(r,{type:"file",content:typeof n=="string"?hi.encode(n):new Uint8Array(n),mode:Yn,mtime:new Date})}async exists(e){let n=K(e);if(this.removals.has(n))return!1;if(this.overlay.has(n))return!0;let r=this.toRelative(n);return r===null?!1:r===""||await this.isTreeDirectory(r)?!0:await this.lookupTreeEntry(r)!==null}async stat(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let r=this.overlay.get(n);if(r)return{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:r.type==="file"?r.content.byteLength:0,mtime:r.mtime};let s=this.toRelative(n);if(s===null)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);if(s==="")return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:ke,size:0,mtime:this.epoch};let i=await this.lookupTreeEntry(s);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let{entry:o}=i,a=o.mode===_.DIRECTORY,c=o.mode===_.SYMLINK,l=0;return a||(l=(await this.objectStore.read(o.hash)).content.byteLength),{isFile:!a&&!c,isDirectory:a,isSymbolicLink:!1,mode:Kn(o.mode),size:l,mtime:this.epoch}}async lstat(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let r=this.overlay.get(n);if(r)return{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:r.type==="symlink",mode:r.mode,size:r.type==="file"?r.content.byteLength:r.type==="symlink"?r.target.length:0,mtime:r.mtime};let s=this.toRelative(n);if(s===null)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);if(s==="")return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:ke,size:0,mtime:this.epoch};let i=await this.lookupTreeEntry(s);if(!i)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let{entry:o}=i,a=o.mode===_.DIRECTORY,c=o.mode===_.SYMLINK,l=0;return a||(l=(await this.objectStore.read(o.hash)).content.byteLength),{isFile:!a&&!c,isDirectory:a,isSymbolicLink:c,mode:Kn(o.mode),size:l,mtime:this.epoch}}async mkdir(e,n){let r=K(e);if(this.overlay.has(r)){if(this.overlay.get(r).type!=="directory")throw new Error(`EEXIST: file already exists, mkdir '${e}'`);if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let s=this.toRelative(r);if(s!==null&&!this.removals.has(r)&&(s===""||await this.isTreeDirectory(s))){if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let i=Vn(r);if(!(this.overlay.has(i)||await this.exists(i)))if(n?.recursive)await this.mkdir(i,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.removals.delete(r),this.overlay.set(r,{type:"directory",mode:ke,mtime:new Date})}async readdir(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set,s=this.toRelative(n);if(s!==null){let o=await this.loadTreeDir(s);if(o)for(let a of o){let c=n==="/"?`/${a.name}`:`${n}/${a.name}`;this.removals.has(c)||r.add(a.name)}}let i=n==="/"?"/":`${n}/`;for(let o of this.overlay.keys())if(o!==n&&o.startsWith(i)){let c=o.slice(i.length).split("/")[0];c&&!this.removals.has(n==="/"?`/${c}`:`${n}/${c}`)&&r.add(c)}if(r.size===0){if(this.overlay.get(n)?.type==="directory")return[];if(s!==null&&(s===""||await this.isTreeDirectory(s)))return[];throw new Error(`ENOENT: no such file or directory, scandir '${e}'`)}return[...r].sort()}async rm(e,n){let r=K(e);if(!await this.exists(r)){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}let i=r==="/"?"/":`${r}/`;if(n?.recursive)for(let o of[...this.overlay.keys()])o.startsWith(i)&&(this.overlay.delete(o),this.removals.add(o));if(this.overlay.delete(r),this.removals.add(r),n?.recursive){let o=this.toRelative(r);o!==null&&await this.markTreeChildrenRemoved(o,r)}}async markTreeChildrenRemoved(e,n){let r=await this.loadTreeDir(e);if(r)for(let s of r){let i=n==="/"?`/${s.name}`:`${n}/${s.name}`;if(this.removals.add(i),s.mode===_.DIRECTORY){let o=e?`${e}/${s.name}`:s.name;await this.markTreeChildrenRemoved(o,i)}}}async readlink(e){let n=K(e);if(this.removals.has(n))throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);let r=this.overlay.get(n);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}let s=this.toRelative(n);if(s===null||s==="")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);let i=await this.lookupTreeEntry(s);if(!i||i.entry.mode!==_.SYMLINK)throw new Error(`EINVAL: invalid argument, readlink '${e}'`);let o=await this.objectStore.read(i.entry.hash);return zn.decode(o.content)}async symlink(e,n){let r=K(n);if(await this.exists(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureOverlayParents(r),this.removals.delete(r),this.overlay.set(r,{type:"symlink",target:e,mode:qn,mtime:new Date})}};var Ot=class{constructor(e){this.inner=e}read(e){return this.inner.read(e)}write(e,n){throw new Error("cannot write: object store is read-only")}exists(e){return this.inner.exists(e)}ingestPack(e){throw new Error("cannot ingest pack: object store is read-only")}ingestPackStream(e){throw new Error("cannot ingest pack: object store is read-only")}findByPrefix(e){return this.inner.findByPrefix(e)}},Rt=class{constructor(e){this.inner=e}readRef(e){return this.inner.readRef(e)}writeRef(e,n){throw new Error("cannot write ref: ref store is read-only")}deleteRef(e){throw new Error("cannot delete ref: ref store is read-only")}listRefs(e){return this.inner.listRefs(e)}compareAndSwapRef(e,n,r){throw new Error("cannot update ref: ref store is read-only")}};function mi(t){return{objectStore:new Ot(t.objectStore),refStore:new Rt(t.refStore),hooks:t.hooks}}var Pt=class{constructor(e){this.inner=e}overlay=new Map;async read(e){let n=this.overlay.get(e);return n?{type:n.type,content:new Uint8Array(n.content)}:this.inner.read(e)}async write(e,n){let r=await Be(Kt(e,n));return this.overlay.has(r)||await this.inner.exists(r).catch(()=>!1)||this.overlay.set(r,{type:e,content:new Uint8Array(n)}),r}async exists(e){return this.overlay.has(e)?!0:this.inner.exists(e)}async ingestPack(e){if(e.byteLength<32)return 0;let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=n.getUint32(0);if(r!==1346454347)throw new Error(`invalid pack signature: 0x${r.toString(16)} (expected 0x5041434b)`);let s=n.getUint32(4);if(s!==2)throw new Error(`unsupported pack version: ${s}`);if(n.getUint32(8)===0)return 0;let o=this.overlay,a=this.inner,c=await zt(e,async l=>{let f=o.get(l);if(f)return{type:f.type,content:new Uint8Array(f.content)};try{return await a.read(l)}catch{return null}});for(let l of c)o.has(l.hash)||o.set(l.hash,{type:l.type,content:l.content});return c.length}async ingestPackStream(e){let n=this.overlay,r=0;for await(let s of e)n.has(s.hash)||n.set(s.hash,{type:s.type,content:s.content}),r++;return r}async findByPrefix(e){let n=await this.inner.findByPrefix(e),r=[];for(let i of this.overlay.keys())i.startsWith(e)&&r.push(i);return[...new Set([...n,...r])]}},kt=class{constructor(e){this.inner=e}overlay=new Map;deleted=new Set;async readRef(e){if(this.deleted.has(e))return null;let n=this.overlay.get(e);return n||this.inner.readRef(e)}async writeRef(e,n){this.deleted.delete(e),this.overlay.set(e,en(n))}async deleteRef(e){this.overlay.delete(e),this.deleted.add(e)}async listRefs(e){let n=await this.inner.listRefs(e),r=new Map;for(let s of n)this.deleted.has(s.name)||r.set(s.name,s);for(let[s,i]of this.overlay)if(!(e&&!s.startsWith(e))){if(i.type==="direct")r.set(s,{name:s,hash:i.hash});else if(i.type==="symbolic"){let o=await this.resolveSymbolic(i.target);o&&r.set(s,{name:s,hash:o})}}return[...r.values()]}async compareAndSwapRef(e,n,r){let s=await this.readRef(e),i=null;if(s&&(s.type==="direct"?i=s.hash:s.type==="symbolic"&&(i=await this.resolveSymbolic(s.target))),n===null){if(s!==null)return!1}else if(i!==n)return!1;return r===null?(this.overlay.delete(e),this.deleted.add(e)):(this.deleted.delete(e),this.overlay.set(e,r)),!0}async resolveSymbolic(e,n=0){if(n>10)return null;let r=await this.readRef(e);return r?r.type==="direct"?r.hash:r.type==="symbolic"?this.resolveSymbolic(r.target,n+1):null:null}};function Tt(t){return{objectStore:new Pt(t.objectStore),refStore:new kt(t.refStore),hooks:t.hooks}}async function St(t,e){let n=await _e(t,e);if(n)return n;throw new Error(`ref or commit '${e}' not found`)}async function Xn(t,e,n,r){let s=new Set,i=0;for(let o of e){if(!nn(o.path))throw new Error(`refusing to check out unsafe path '${o.path}'`);let a=we(r,o.path);if(!rn(r,a))throw new Error(`refusing to check out path outside target directory: '${o.path}'`);let c=Vt(a);if(c!==r&&!s.has(c)&&(await n.mkdir(c,{recursive:!0}),s.add(c)),ie(o.mode)){let l=await H(t,o.hash);if(!sn(l))throw new Error(`refusing to create symlink with unsafe target '${l}'`);n.symlink?await n.symlink(l,a):await n.writeFile(a,l)}else{let l=await re(t,o.hash);await n.writeFile(a,l)}i++}return i}function Zn(t){return on(t.map(e=>({path:e.path,mode:parseInt(e.mode,8),hash:e.hash,stage:0,stat:ce()})))}async function pi(t,e,n,r="/"){let s=await St(t,e),i=await v(t,s),o=await Q(t,i.tree),a=await Xn(t,o,n,r);return{commitHash:s,treeHash:i.tree,filesWritten:a}}async function gi(t,e,n){let r=n?.workTree??"/",s=n?.gitDir??we(r,".git"),i=n?.ref??"HEAD";await e.mkdir(s,{recursive:!0});let o=await St(t,i),a=await v(t,o),c=await Q(t,a.tree),l={...t,fs:e,gitDir:s,workTree:r},f=await Xn(t,c,e,r);return await Fe(l,Zn(c)),{ctx:l,commitHash:o,treeHash:a.tree,filesWritten:f}}async function yi(t,e){let n=Tt(t),r=e?.workTree??"/",s=e?.gitDir??we(r,".git"),i=e?.ref??"HEAD",o=await St(n,i),a=await v(n,o),c=new Ze(n.objectStore,a.tree,r),l="refs/heads/main";await n.refStore.writeRef("HEAD",{type:"symbolic",target:l}),await n.refStore.writeRef(l,{type:"direct",hash:o});let f={...n,fs:c,gitDir:s,workTree:r},u=await Q(n,a.tree);return await Fe(f,Zn(u)),{ctx:f,commitHash:o,treeHash:a.tree,filesWritten:0}}export{Bs as blame,qs as commit,Ns as countAheadBehind,Ys as createAnnotatedTag,Ks as createCommit,yi as createSandboxWorktree,gi as createWorktree,_s as diffCommits,Ls as diffTrees,pi as extractTree,Us as findMergeBases,$s as flattenTree,Ms as getChangedFiles,Ds as getNewCommits,es as grep,Hs as isAncestor,zr as listBranches,Vr as listTags,fi as mergeTrees,ui as mergeTreesFromTreeHashes,Tt as overlayRepo,Yr as readBlob,qr as readBlobText,Kr as readCommit,Zr as readFileAtCommit,Xr as readTree,mi as readonlyRepo,Wr as resolveRef,An as updateTree,Ws as walkCommitHistory,Zs as writeBlob,Xs as writeTree};
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as RawObject, $ as Ref, g as GitRepo, a3 as Rejection, N as NetworkPolicy } from '../hooks-
|
|
1
|
+
import { _ as RawObject, $ as Ref, g as GitRepo, a3 as Rejection, N as NetworkPolicy } from '../hooks-DNBNCTgb.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A value that may be synchronous or asynchronous.
|
|
@@ -431,6 +431,8 @@ interface GitServer<S = Session> {
|
|
|
431
431
|
createRepo(id: string, options?: CreateRepoOptions): Promise<GitRepo>;
|
|
432
432
|
/** Get a repo by ID, or `null` if it doesn't exist. */
|
|
433
433
|
repo(id: string): Promise<GitRepo | null>;
|
|
434
|
+
/** Get a repo by ID, or throw if it doesn't exist. */
|
|
435
|
+
requireRepo(id: string): Promise<GitRepo>;
|
|
434
436
|
/** Delete a repo and all its data. */
|
|
435
437
|
deleteRepo(id: string): Promise<void>;
|
|
436
438
|
/**
|
package/dist/server/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
var ye=(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 T(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var J="0000000000000000000000000000000000000000",at=(()=>{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 be(r){let e="";for(let t=0;t<20;t++)e+=at[r[t]];return e}function Q(r,e){let t="";for(let n=0;n<20;n++)t+=at[r[e+n]];return t}function me(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 lr=new TextEncoder;function je(r){return typeof r=="string"?lr.encode(r):r}function dr(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(je(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=ye(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(n){return e.update(je(n)),t},hex:()=>Promise.resolve(e.digest("hex"))};return t}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let r=[],e={update(t){return r.push(je(t)),e},async hex(){let t=0;for(let i of r)t+=i.byteLength;let n=new Uint8Array(t),s=0;for(let i of r)n.set(i,s),s+=i.byteLength;let o=await crypto.subtle.digest("SHA-1",n);return be(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 it=dr(),G=it;async function ct(r){return it().update(r).hex()}var pr=new Set(["tree","commit","tag"]),ge=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(!pr.has(t.type))return;let n=t.content.byteLength;if(!(n>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+n>this.maxBytes&&this.map.size>0;){let s=this.map.keys().next().value;this.currentBytes-=this.map.get(s).content.byteLength,this.map.delete(s)}this.map.set(e,t),this.currentBytes+=n}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var L=Uint8Array,F=Uint16Array,ur=Int32Array,ft=new L([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]),lt=new L([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]),hr=new L([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),dt=(r,e)=>{let t=new F(31);for(let s=0;s<31;++s)t[s]=e+=1<<r[s-1];let n=new ur(t[30]);for(let s=1;s<30;++s)for(let o=t[s];o<t[s+1];++o)n[o]=o-t[s]<<5|s;return{b:t,r:n}},{b:pt}=dt(ft,2);pt[28]=258;var{b:yr}=dt(lt,0),Ie=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,Ie[r]=((e&65280)>>8|(e&255)<<8)>>1}var ee=(r,e,t)=>{let n=r.length,s=0,o=new F(e);for(;s<n;++s)r[s]&&++o[r[s]-1];let i=new F(e);for(s=1;s<e;++s)i[s]=i[s-1]+o[s-1]<<1;let a;if(t){a=new F(1<<e);let l=15-e;for(s=0;s<n;++s)if(r[s]){let c=s<<4|r[s],f=e-r[s],d=i[r[s]-1]++<<f;for(let p=d|(1<<f)-1;d<=p;++d)a[Ie[d]>>l]=c}}else for(a=new F(n),s=0;s<n;++s)r[s]&&(a[s]=Ie[i[r[s]-1]++]>>15-r[s]);return a},te=new L(288);for(let r=0;r<144;++r)te[r]=8;for(let r=144;r<256;++r)te[r]=9;for(let r=256;r<280;++r)te[r]=7;for(let r=280;r<288;++r)te[r]=8;var ut=new L(32);for(let r=0;r<32;++r)ut[r]=5;var br=ee(te,9,1),mr=ee(ut,5,1),Se=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},U=(r,e,t)=>{let n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},Ae=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},ht=r=>(r+7)/8|0,gr=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new L(r.subarray(e,t))),H=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},yt=(r,e,t,n)=>{let s=r.length,o=n?n.length:0;if(!s||e.f&&!e.l)return t||new L(0);let i=!t,a=i||e.i!=2,l=e.i;i&&(t=new L(s*3));let c=y=>{let g=t.length;if(y>g){let w=new L(Math.max(g*2,y));w.set(t),t=w}},f=e.f||0,d=e.p||0,p=e.b||0,u=e.l,h=e.d,m=e.m,R=e.n,b=s*8;do{if(!u){f=U(r,d,1);let E=U(r,d+1,3);if(d+=3,E)if(E==1)u=br,h=mr,m=9,R=5;else if(E==2){let x=U(r,d,31)+257,O=U(r,d+10,15)+4,j=x+U(r,d+5,31)+1;d+=14;let P=new L(j),A=new L(19);for(let N=0;N<O;++N)A[hr[N]]=U(r,d+N*3,7);d+=O*3;let B=Se(A),I=(1<<B)-1,C=ee(A,B,1);for(let N=0;N<j;){let st=C[U(r,d,I)];d+=st&15;let Z=st>>4;if(Z<16)P[N++]=Z;else{let ot=0,he=0;for(Z==16?(he=3+U(r,d,3),d+=2,ot=P[N-1]):Z==17?(he=3+U(r,d,7),d+=3):Z==18&&(he=11+U(r,d,127),d+=7);he--;)P[N++]=ot}}let $=P.subarray(0,x),nt=P.subarray(x);m=Se($),R=Se(nt),u=ee($,m,1),h=ee(nt,R,1)}else H(1);else{let x=ht(d)+4,O=r[x-4]|r[x-3]<<8,j=x+O;if(j>s){l&&H(0);break}a&&c(p+O),t.set(r.subarray(x,j),p),e.b=p+=O,e.p=d=j*8,e.f=f;continue}if(d>b){l&&H(0);break}}a&&c(p+131072);let y=(1<<m)-1,g=(1<<R)-1,w=d;for(;;w=d){let E=u[Ae(r,d)&y],x=E>>4;if(d+=E&15,d>b){l&&H(0);break}if(E||H(2),x<256)t[p++]=x;else if(x==256){w=d,u=null;break}else{let O=x-254;if(x>264){let I=x-257,C=ft[I];O=U(r,d,(1<<C)-1)+pt[I],d+=C}let j=h[Ae(r,d)&g],P=j>>4;j||H(3),d+=j&15;let A=yr[P];if(P>3){let I=lt[P];A+=Ae(r,d)&(1<<I)-1,d+=I}if(d>b){l&&H(0);break}a&&c(p+131072);let B=p+O;if(p<A){let I=o-A,C=Math.min(A,B);for(I+p<0&&H(3);p<C;++p)t[p]=n[I+p]}for(;p<B;++p)t[p]=t[p-A]}}e.l=u,e.p=w,e.b=p,e.f=f,u&&(f=1,e.m=m,e.d=h,e.n=R)}while(!f);return p!=t.length&&i?gr(t,0,p):t.subarray(0,p)},bt=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&H(0,"invalid zlib data"),r[1]&32&&H(0,"zlib dictionaries are not supported"),2);function mt(r){let e=bt(r);return yt(r.subarray(e,-4),{i:2})}function Te(r){let e=bt(r),t={i:2},n=yt(r.subarray(e),t),s=ht(t.p);return{result:n,bytesConsumed:e+s+4}}async function Rr(){let r;if(!(typeof document<"u"))try{r=ye(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let n=null;try{let s=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});s?.engine&&typeof s.engine.bytesWritten=="number"&&(n=o=>{let i=r.inflateSync(o,{info:!0});return{result:new Uint8Array(i.buffer),bytesConsumed:i.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(r.deflateSync(s)),inflateSync:s=>new Uint8Array(r.inflateSync(s)),inflateWithConsumed:n??Te}}let t;return typeof globalThis.CompressionStream=="function"?t=async n=>{let s=new CompressionStream("deflate"),o=s.writable.getWriter();return o.write(n),o.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:mt,inflateWithConsumed:Te}}var xr=null;function gt(){return xr??=Rr()}async function Re(r){return await(await gt()).deflateSync(r)}async function Ue(r,e){let t=await gt(),{result:n,bytesConsumed:s}=t.inflateWithConsumed(r);if(n.byteLength!==e)throw new Error(`Inflate size mismatch: got ${n.byteLength}, expected ${e}`);return{result:n,bytesConsumed:s}}var z=1346454347,we=2,wt=1,Et=2,Ot=3,Pt=4,_=6,re=7,vt={[wt]:"commit",[Et]:"tree",[Ot]:"blob",[Pt]:"tag"},kt={commit:wt,tree:Et,blob:Ot,tag:Pt};async function jt(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),n=t.getUint32(0);if(n!==z)throw new Error(`Invalid pack signature: 0x${n.toString(16)} (expected 0x${z.toString(16)})`);let s=t.getUint32(4);if(s!==we)throw new Error(`Unsupported pack version: ${s}`);if(r.byteLength>=32){let c=Q(r,r.byteLength-20),f=G();f.update(r.subarray(0,r.byteLength-20));let d=await f.hex();if(d!==c)throw new Error(`pack checksum mismatch: expected ${c}, computed ${d}`)}let o=t.getUint32(8),i=[],a=12;for(let c=0;c<o;c++){let f=await wr(r,a);i.push(f),a=f.nextOffset}return(await Er(i,e)).map((c,f)=>({...c,offset:i[f].headerOffset,nextOffset:i[f].nextOffset}))}async function wr(r,e){let t=e,n=r[e++],s=n>>4&7,o=n&15,i=4;for(;n&128;)n=r[e++],o|=(n&127)<<i,i+=7;let a,l;if(s===_){let d=r[e++];for(a=d&127;d&128;)a+=1,d=r[e++],a=(a<<7)+(d&127);a=t-a}else s===re&&(l=Q(r,e),e+=20);let{result:c,bytesConsumed:f}=await Ue(r.subarray(e),o);return{headerOffset:t,typeNum:s,inflated:c,baseOffset:a,baseHash:l,nextOffset:e+f}}var Rt=50;async function Er(r,e){let t=new Map;for(let o=0;o<r.length;o++)t.set(r[o].headerOffset,o);let n=new Array(r.length).fill(null);async function s(o,i=0){if(i>Rt)throw new Error(`delta chain depth ${i} exceeds limit of ${Rt}`);let a=n[o];if(a)return a;let l=r[o];if(l.typeNum!==_&&l.typeNum!==re){let u=vt[l.typeNum];if(!u)throw new Error(`Unknown object type: ${l.typeNum}`);let h={type:u,content:l.inflated,hash:await q(u,l.inflated)};return n[o]=h,h}if(l.typeNum===_){let u=t.get(l.baseOffset);if(u===void 0)throw new Error(`OFS_DELTA base not found at offset ${l.baseOffset}`);let h=await s(u,i+1),m=xe(h.content,l.inflated),R={type:h.type,content:m,hash:await q(h.type,m)};return n[o]=R,R}let c=await Or(r,n,l.baseHash,s),f;if(c!==void 0)f=await s(c,i+1);else if(e){let u=await e(l.baseHash);u&&(f=u)}if(!f)throw new Error(`REF_DELTA base not found for hash ${l.baseHash}`);let d=xe(f.content,l.inflated),p={type:f.type,content:d,hash:await q(f.type,d)};return n[o]=p,p}for(let o=0;o<r.length;o++)await s(o);return n}async function Or(r,e,t,n){for(let s=0;s<e.length;s++)if(e[s]?.hash===t)return s;for(let s=0;s<r.length;s++){let o=r[s];if(o.typeNum!==_&&o.typeNum!==re&&(await n(s)).hash===t)return s}}var Le=class{buf=new Uint8Array(0);iter;eof=!1;_bytesRead=0;hasher;constructor(e,t=!1){this.iter=e[Symbol.asyncIterator](),this.hasher=t?G():null}get bytesRead(){return this._bytesRead}async pullMore(){if(this.eof)return!1;let{value:e,done:t}=await this.iter.next();if(t||!e)return this.eof=!0,!1;if(this.buf.byteLength===0)this.buf=new Uint8Array(e);else{let n=new Uint8Array(this.buf.byteLength+e.byteLength);n.set(this.buf),n.set(e,this.buf.byteLength),this.buf=n}return!0}async ensure(e){for(;this.buf.byteLength<e;)if(!await this.pullMore())throw new Error(`Unexpected end of pack data: needed ${e} bytes, have ${this.buf.byteLength}`)}consume(e){let t=new Uint8Array(this.buf.subarray(0,e));return this.hasher?.update(t),this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async readByte(){return await this.ensure(1),this.consume(1)[0]}async readExact(e){return await this.ensure(e),this.consume(e)}async readRaw(e){await this.ensure(e);let t=new Uint8Array(this.buf.subarray(0,e));return this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async inflateNext(e){for(this.buf.byteLength===0&&!this.eof&&await this.pullMore();;)try{let{result:t,bytesConsumed:n}=await Ue(this.buf,e);return this.consume(n),t}catch{if(!this.eof&&await this.pullMore())continue;throw new Error(`Failed to inflate pack entry at byte ${this._bytesRead} (expected ${e} bytes)`)}}async hashHex(){if(!this.hasher)throw new Error("Hashing not enabled");return this.hasher.hex()}};async function*St(r,e){let t=new Le(r,!0),n=await t.readExact(12),s=new DataView(n.buffer,n.byteOffset,n.byteLength),o=s.getUint32(0);if(o!==z)throw new Error(`Invalid pack signature: 0x${o.toString(16)} (expected 0x${z.toString(16)})`);let i=s.getUint32(4);if(i!==we)throw new Error(`Unsupported pack version: ${i}`);let a=s.getUint32(8),l=new Map,c=new Map;for(let p=0;p<a;p++){let u=t.bytesRead,h=await t.readByte(),m=h>>4&7,R=h&15,b=4;for(;h&128;)h=await t.readByte(),R|=(h&127)<<b,b+=7;let y,g;if(m===_){let x=await t.readByte();for(y=x&127;x&128;)y+=1,x=await t.readByte(),y=(y<<7)+(x&127);y=u-y}else if(m===re){let x=await t.readExact(20);g=Q(x,0)}let w=await t.inflateNext(R),E;if(m!==_&&m!==re){let x=vt[m];if(!x)throw new Error(`Unknown object type: ${m}`);E={type:x,content:w,hash:await q(x,w)}}else if(m===_){let x=l.get(y);if(!x)throw new Error(`OFS_DELTA base not found at offset ${y}`);let O=xe(x.content,w);E={type:x.type,content:O,hash:await q(x.type,O)}}else{let x=c.get(g);if(!x&&e&&(x=await e(g)??void 0),!x)throw new Error(`REF_DELTA base not found for hash ${g}`);let O=xe(x.content,w);E={type:x.type,content:O,hash:await q(x.type,O)}}l.set(u,E),c.set(E.hash,E),yield E}let f=Q(await t.readRaw(20),0),d=await t.hashHex();if(d!==f)throw new Error(`pack checksum mismatch: expected ${f}, computed ${d}`)}function xe(r,e){let t=0,{value:n,newPos:s}=xt(e,t);if(t=s,n!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${n}, got ${r.byteLength}`);let{value:o,newPos:i}=xt(e,t);t=i;let a=new Uint8Array(o),l=0;for(;t<e.byteLength;){let c=e[t++];if(c&128){let f=0,d=0;c&1&&(f=e[t++]),c&2&&(f|=e[t++]<<8),c&4&&(f|=e[t++]<<16),c&8&&(f|=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(f,f+d),l),l+=d}else if(c>0)a.set(e.subarray(t,t+c),l),l+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(l!==o)throw new Error(`Delta produced ${l} bytes, expected ${o}`);return a}async function Ee(r){let e=[],t=new Map,n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,z),s.setUint32(4,we),s.setUint32(8,r.length),e.push(n);let o=12,i=[];for(let a of r){let l=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 f=Ce(_,a.delta.byteLength),d=vr(o-c),p=await Re(a.delta);e.push(f,d,p),o+=f.byteLength+d.byteLength+p.byteLength}else{let f=kt[a.type],d=Ce(f,a.content.byteLength),p=await Re(a.content);e.push(d,p),o+=d.byteLength+p.byteLength}i.push({hash:a.hash,offset:l,nextOffset:o})}return{data:await Pr(e),entries:i}}async function*At(r,e){let t=G(),n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,z),s.setUint32(4,we),s.setUint32(8,r),t.update(n),yield n;for await(let o of e){let i=kt[o.type],a=Ce(i,o.content.byteLength),l=await Re(o.content);t.update(a),t.update(l),yield kr(a,l)}yield me(await t.hex())}async function Pr(r){let e=0;for(let i of r)e+=i.byteLength;e+=20;let t=new Uint8Array(e),n=0;for(let i of r)t.set(i,n),n+=i.byteLength;let s=G();s.update(t.subarray(0,n));let o=await s.hex();return t.set(me(o),n),t}function vr(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 Ce(r,e){let t=[],n=r<<4|e&15;for(e>>=4;e>0;)t.push(n|128),n=e&127,e>>=7;return t.push(n),new Uint8Array(t)}function xt(r,e){let t=0,n=0,s;do s=r[e++],t|=(s&127)<<n,n+=7;while(s&128);return{value:t,newPos:e}}function kr(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var jr=new TextEncoder;async function q(r,e){let t=jr.encode(`${r} ${e.byteLength}\0`),n=G();return n.update(t),n.update(e),n.hex()}var Sr=new TextEncoder,Hn=new TextDecoder;function It(r,e){let t=Sr.encode(`${r} ${e.byteLength}\0`),n=new Uint8Array(t.byteLength+e.byteLength);return n.set(t),n.set(e,t.byteLength),n}function ne(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let n=r.slice(0,e).trimEnd(),s=r.slice(e+1,t),o=r.slice(t+2),[i="0",a="+0000"]=o.split(" "),l=parseInt(i,10);return{name:n,email:s,timestamp:l,timezone:a}}var Bn=new TextEncoder,Ir=new TextDecoder;function se(r){let e=Ir.decode(r),t=e.indexOf(`
|
|
1
|
+
var be=(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 T(r){return r!=null&&typeof r=="object"&&"reject"in r&&r.reject===!0}var J="0000000000000000000000000000000000000000",at=(()=>{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 me(r){let e="";for(let t=0;t<20;t++)e+=at[r[t]];return e}function Q(r,e){let t="";for(let n=0;n<20;n++)t+=at[r[e+n]];return t}function ge(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 lr=new TextEncoder;function je(r){return typeof r=="string"?lr.encode(r):r}function dr(){if(typeof globalThis.Bun<"u")return()=>{let r=new Bun.CryptoHasher("sha1"),e={update(t){return r.update(je(t)),e},hex:()=>Promise.resolve(r.digest("hex"))};return e};try{let r=be(["node","crypto"].join(":"));if(typeof r.createHash=="function")return()=>{let e=r.createHash("sha1"),t={update(n){return e.update(je(n)),t},hex:()=>Promise.resolve(e.digest("hex"))};return t}}catch{}if(typeof globalThis.crypto?.subtle?.digest=="function")return()=>{let r=[],e={update(t){return r.push(je(t)),e},async hex(){let t=0;for(let i of r)t+=i.byteLength;let n=new Uint8Array(t),s=0;for(let i of r)n.set(i,s),s+=i.byteLength;let o=await crypto.subtle.digest("SHA-1",n);return me(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 it=dr(),G=it;async function ct(r){return it().update(r).hex()}var pr=new Set(["tree","commit","tag"]),Re=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(!pr.has(t.type))return;let n=t.content.byteLength;if(!(n>this.maxBytes/2)&&!this.map.has(e)){for(;this.currentBytes+n>this.maxBytes&&this.map.size>0;){let s=this.map.keys().next().value;this.currentBytes-=this.map.get(s).content.byteLength,this.map.delete(s)}this.map.set(e,t),this.currentBytes+=n}}get size(){return this.map.size}get bytes(){return this.currentBytes}clear(){this.map.clear(),this.currentBytes=0}};var L=Uint8Array,F=Uint16Array,ur=Int32Array,ft=new L([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]),lt=new L([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]),hr=new L([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),dt=(r,e)=>{let t=new F(31);for(let s=0;s<31;++s)t[s]=e+=1<<r[s-1];let n=new ur(t[30]);for(let s=1;s<30;++s)for(let o=t[s];o<t[s+1];++o)n[o]=o-t[s]<<5|s;return{b:t,r:n}},{b:pt}=dt(ft,2);pt[28]=258;var{b:yr}=dt(lt,0),Ie=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,Ie[r]=((e&65280)>>8|(e&255)<<8)>>1}var ee=(r,e,t)=>{let n=r.length,s=0,o=new F(e);for(;s<n;++s)r[s]&&++o[r[s]-1];let i=new F(e);for(s=1;s<e;++s)i[s]=i[s-1]+o[s-1]<<1;let a;if(t){a=new F(1<<e);let l=15-e;for(s=0;s<n;++s)if(r[s]){let c=s<<4|r[s],f=e-r[s],d=i[r[s]-1]++<<f;for(let p=d|(1<<f)-1;d<=p;++d)a[Ie[d]>>l]=c}}else for(a=new F(n),s=0;s<n;++s)r[s]&&(a[s]=Ie[i[r[s]-1]++]>>15-r[s]);return a},te=new L(288);for(let r=0;r<144;++r)te[r]=8;for(let r=144;r<256;++r)te[r]=9;for(let r=256;r<280;++r)te[r]=7;for(let r=280;r<288;++r)te[r]=8;var ut=new L(32);for(let r=0;r<32;++r)ut[r]=5;var br=ee(te,9,1),mr=ee(ut,5,1),Se=r=>{let e=r[0];for(let t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},U=(r,e,t)=>{let n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},Ae=(r,e)=>{let t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},ht=r=>(r+7)/8|0,gr=(r,e,t)=>((e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new L(r.subarray(e,t))),H=(r,e)=>{let t=["unexpected EOF","invalid block type","invalid length/literal","invalid distance"];throw new Error(e||t[r]||"unknown inflate error")},yt=(r,e,t,n)=>{let s=r.length,o=n?n.length:0;if(!s||e.f&&!e.l)return t||new L(0);let i=!t,a=i||e.i!=2,l=e.i;i&&(t=new L(s*3));let c=h=>{let R=t.length;if(h>R){let w=new L(Math.max(R*2,h));w.set(t),t=w}},f=e.f||0,d=e.p||0,p=e.b||0,u=e.l,y=e.d,m=e.m,g=e.n,b=s*8;do{if(!u){f=U(r,d,1);let E=U(r,d+1,3);if(d+=3,E)if(E==1)u=br,y=mr,m=9,g=5;else if(E==2){let x=U(r,d,31)+257,O=U(r,d+10,15)+4,j=x+U(r,d+5,31)+1;d+=14;let P=new L(j),A=new L(19);for(let N=0;N<O;++N)A[hr[N]]=U(r,d+N*3,7);d+=O*3;let B=Se(A),I=(1<<B)-1,C=ee(A,B,1);for(let N=0;N<j;){let st=C[U(r,d,I)];d+=st&15;let Z=st>>4;if(Z<16)P[N++]=Z;else{let ot=0,ye=0;for(Z==16?(ye=3+U(r,d,3),d+=2,ot=P[N-1]):Z==17?(ye=3+U(r,d,7),d+=3):Z==18&&(ye=11+U(r,d,127),d+=7);ye--;)P[N++]=ot}}let $=P.subarray(0,x),nt=P.subarray(x);m=Se($),g=Se(nt),u=ee($,m,1),y=ee(nt,g,1)}else H(1);else{let x=ht(d)+4,O=r[x-4]|r[x-3]<<8,j=x+O;if(j>s){l&&H(0);break}a&&c(p+O),t.set(r.subarray(x,j),p),e.b=p+=O,e.p=d=j*8,e.f=f;continue}if(d>b){l&&H(0);break}}a&&c(p+131072);let h=(1<<m)-1,R=(1<<g)-1,w=d;for(;;w=d){let E=u[Ae(r,d)&h],x=E>>4;if(d+=E&15,d>b){l&&H(0);break}if(E||H(2),x<256)t[p++]=x;else if(x==256){w=d,u=null;break}else{let O=x-254;if(x>264){let I=x-257,C=ft[I];O=U(r,d,(1<<C)-1)+pt[I],d+=C}let j=y[Ae(r,d)&R],P=j>>4;j||H(3),d+=j&15;let A=yr[P];if(P>3){let I=lt[P];A+=Ae(r,d)&(1<<I)-1,d+=I}if(d>b){l&&H(0);break}a&&c(p+131072);let B=p+O;if(p<A){let I=o-A,C=Math.min(A,B);for(I+p<0&&H(3);p<C;++p)t[p]=n[I+p]}for(;p<B;++p)t[p]=t[p-A]}}e.l=u,e.p=w,e.b=p,e.f=f,u&&(f=1,e.m=m,e.d=y,e.n=g)}while(!f);return p!=t.length&&i?gr(t,0,p):t.subarray(0,p)},bt=r=>(((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&H(0,"invalid zlib data"),r[1]&32&&H(0,"zlib dictionaries are not supported"),2);function mt(r){let e=bt(r);return yt(r.subarray(e,-4),{i:2})}function Te(r){let e=bt(r),t={i:2},n=yt(r.subarray(e),t),s=ht(t.p);return{result:n,bytesConsumed:e+s+4}}async function Rr(){let r;if(!(typeof document<"u"))try{r=be(["node","zlib"].join(":"))}catch{try{r=await import(["node","zlib"].join(":"))}catch{}}if(r&&typeof r.deflateSync=="function"&&typeof r.inflateSync=="function"){let n=null;try{let s=r.inflateSync(r.deflateSync(Buffer.from("x")),{info:!0});s?.engine&&typeof s.engine.bytesWritten=="number"&&(n=o=>{let i=r.inflateSync(o,{info:!0});return{result:new Uint8Array(i.buffer),bytesConsumed:i.engine.bytesWritten}})}catch{}return{deflateSync:s=>new Uint8Array(r.deflateSync(s)),inflateSync:s=>new Uint8Array(r.inflateSync(s)),inflateWithConsumed:n??Te}}let t;return typeof globalThis.CompressionStream=="function"?t=async n=>{let s=new CompressionStream("deflate"),o=s.writable.getWriter();return o.write(n),o.close(),new Uint8Array(await new Response(s.readable).arrayBuffer())}:t=()=>{throw new Error("No deflate implementation available. Requires node:zlib or CompressionStream.")},{deflateSync:t,inflateSync:mt,inflateWithConsumed:Te}}var xr=null;function gt(){return xr??=Rr()}async function xe(r){return await(await gt()).deflateSync(r)}async function Ue(r,e){let t=await gt(),{result:n,bytesConsumed:s}=t.inflateWithConsumed(r);if(n.byteLength!==e)throw new Error(`Inflate size mismatch: got ${n.byteLength}, expected ${e}`);return{result:n,bytesConsumed:s}}var z=1346454347,Ee=2,wt=1,Et=2,Ot=3,Pt=4,_=6,re=7,vt={[wt]:"commit",[Et]:"tree",[Ot]:"blob",[Pt]:"tag"},kt={commit:wt,tree:Et,blob:Ot,tag:Pt};async function jt(r,e){let t=new DataView(r.buffer,r.byteOffset,r.byteLength),n=t.getUint32(0);if(n!==z)throw new Error(`Invalid pack signature: 0x${n.toString(16)} (expected 0x${z.toString(16)})`);let s=t.getUint32(4);if(s!==Ee)throw new Error(`Unsupported pack version: ${s}`);if(r.byteLength>=32){let c=Q(r,r.byteLength-20),f=G();f.update(r.subarray(0,r.byteLength-20));let d=await f.hex();if(d!==c)throw new Error(`pack checksum mismatch: expected ${c}, computed ${d}`)}let o=t.getUint32(8),i=[],a=12;for(let c=0;c<o;c++){let f=await wr(r,a);i.push(f),a=f.nextOffset}return(await Er(i,e)).map((c,f)=>({...c,offset:i[f].headerOffset,nextOffset:i[f].nextOffset}))}async function wr(r,e){let t=e,n=r[e++],s=n>>4&7,o=n&15,i=4;for(;n&128;)n=r[e++],o|=(n&127)<<i,i+=7;let a,l;if(s===_){let d=r[e++];for(a=d&127;d&128;)a+=1,d=r[e++],a=(a<<7)+(d&127);a=t-a}else s===re&&(l=Q(r,e),e+=20);let{result:c,bytesConsumed:f}=await Ue(r.subarray(e),o);return{headerOffset:t,typeNum:s,inflated:c,baseOffset:a,baseHash:l,nextOffset:e+f}}var Rt=50;async function Er(r,e){let t=new Map;for(let o=0;o<r.length;o++)t.set(r[o].headerOffset,o);let n=new Array(r.length).fill(null);async function s(o,i=0){if(i>Rt)throw new Error(`delta chain depth ${i} exceeds limit of ${Rt}`);let a=n[o];if(a)return a;let l=r[o];if(l.typeNum!==_&&l.typeNum!==re){let u=vt[l.typeNum];if(!u)throw new Error(`Unknown object type: ${l.typeNum}`);let y={type:u,content:l.inflated,hash:await q(u,l.inflated)};return n[o]=y,y}if(l.typeNum===_){let u=t.get(l.baseOffset);if(u===void 0)throw new Error(`OFS_DELTA base not found at offset ${l.baseOffset}`);let y=await s(u,i+1),m=we(y.content,l.inflated),g={type:y.type,content:m,hash:await q(y.type,m)};return n[o]=g,g}let c=await Or(r,n,l.baseHash,s),f;if(c!==void 0)f=await s(c,i+1);else if(e){let u=await e(l.baseHash);u&&(f=u)}if(!f)throw new Error(`REF_DELTA base not found for hash ${l.baseHash}`);let d=we(f.content,l.inflated),p={type:f.type,content:d,hash:await q(f.type,d)};return n[o]=p,p}for(let o=0;o<r.length;o++)await s(o);return n}async function Or(r,e,t,n){for(let s=0;s<e.length;s++)if(e[s]?.hash===t)return s;for(let s=0;s<r.length;s++){let o=r[s];if(o.typeNum!==_&&o.typeNum!==re&&(await n(s)).hash===t)return s}}var Le=class{buf=new Uint8Array(0);iter;eof=!1;_bytesRead=0;hasher;constructor(e,t=!1){this.iter=e[Symbol.asyncIterator](),this.hasher=t?G():null}get bytesRead(){return this._bytesRead}async pullMore(){if(this.eof)return!1;let{value:e,done:t}=await this.iter.next();if(t||!e)return this.eof=!0,!1;if(this.buf.byteLength===0)this.buf=new Uint8Array(e);else{let n=new Uint8Array(this.buf.byteLength+e.byteLength);n.set(this.buf),n.set(e,this.buf.byteLength),this.buf=n}return!0}async ensure(e){for(;this.buf.byteLength<e;)if(!await this.pullMore())throw new Error(`Unexpected end of pack data: needed ${e} bytes, have ${this.buf.byteLength}`)}consume(e){let t=new Uint8Array(this.buf.subarray(0,e));return this.hasher?.update(t),this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async readByte(){return await this.ensure(1),this.consume(1)[0]}async readExact(e){return await this.ensure(e),this.consume(e)}async readRaw(e){await this.ensure(e);let t=new Uint8Array(this.buf.subarray(0,e));return this.buf=this.buf.subarray(e),this._bytesRead+=e,t}async inflateNext(e){for(this.buf.byteLength===0&&!this.eof&&await this.pullMore();;)try{let{result:t,bytesConsumed:n}=await Ue(this.buf,e);return this.consume(n),t}catch{if(!this.eof&&await this.pullMore())continue;throw new Error(`Failed to inflate pack entry at byte ${this._bytesRead} (expected ${e} bytes)`)}}async hashHex(){if(!this.hasher)throw new Error("Hashing not enabled");return this.hasher.hex()}};async function*St(r,e){let t=new Le(r,!0),n=await t.readExact(12),s=new DataView(n.buffer,n.byteOffset,n.byteLength),o=s.getUint32(0);if(o!==z)throw new Error(`Invalid pack signature: 0x${o.toString(16)} (expected 0x${z.toString(16)})`);let i=s.getUint32(4);if(i!==Ee)throw new Error(`Unsupported pack version: ${i}`);let a=s.getUint32(8),l=new Map,c=new Map;for(let p=0;p<a;p++){let u=t.bytesRead,y=await t.readByte(),m=y>>4&7,g=y&15,b=4;for(;y&128;)y=await t.readByte(),g|=(y&127)<<b,b+=7;let h,R;if(m===_){let x=await t.readByte();for(h=x&127;x&128;)h+=1,x=await t.readByte(),h=(h<<7)+(x&127);h=u-h}else if(m===re){let x=await t.readExact(20);R=Q(x,0)}let w=await t.inflateNext(g),E;if(m!==_&&m!==re){let x=vt[m];if(!x)throw new Error(`Unknown object type: ${m}`);E={type:x,content:w,hash:await q(x,w)}}else if(m===_){let x=l.get(h);if(!x)throw new Error(`OFS_DELTA base not found at offset ${h}`);let O=we(x.content,w);E={type:x.type,content:O,hash:await q(x.type,O)}}else{let x=c.get(R);if(!x&&e&&(x=await e(R)??void 0),!x)throw new Error(`REF_DELTA base not found for hash ${R}`);let O=we(x.content,w);E={type:x.type,content:O,hash:await q(x.type,O)}}l.set(u,E),c.set(E.hash,E),yield E}let f=Q(await t.readRaw(20),0),d=await t.hashHex();if(d!==f)throw new Error(`pack checksum mismatch: expected ${f}, computed ${d}`)}function we(r,e){let t=0,{value:n,newPos:s}=xt(e,t);if(t=s,n!==r.byteLength)throw new Error(`Delta base size mismatch: expected ${n}, got ${r.byteLength}`);let{value:o,newPos:i}=xt(e,t);t=i;let a=new Uint8Array(o),l=0;for(;t<e.byteLength;){let c=e[t++];if(c&128){let f=0,d=0;c&1&&(f=e[t++]),c&2&&(f|=e[t++]<<8),c&4&&(f|=e[t++]<<16),c&8&&(f|=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(f,f+d),l),l+=d}else if(c>0)a.set(e.subarray(t,t+c),l),l+=c,t+=c;else throw new Error("Unexpected delta opcode 0x00 (reserved)")}if(l!==o)throw new Error(`Delta produced ${l} bytes, expected ${o}`);return a}async function Oe(r){let e=[],t=new Map,n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,z),s.setUint32(4,Ee),s.setUint32(8,r.length),e.push(n);let o=12,i=[];for(let a of r){let l=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 f=Ce(_,a.delta.byteLength),d=vr(o-c),p=await xe(a.delta);e.push(f,d,p),o+=f.byteLength+d.byteLength+p.byteLength}else{let f=kt[a.type],d=Ce(f,a.content.byteLength),p=await xe(a.content);e.push(d,p),o+=d.byteLength+p.byteLength}i.push({hash:a.hash,offset:l,nextOffset:o})}return{data:await Pr(e),entries:i}}async function*At(r,e){let t=G(),n=new Uint8Array(12),s=new DataView(n.buffer);s.setUint32(0,z),s.setUint32(4,Ee),s.setUint32(8,r),t.update(n),yield n;for await(let o of e){let i=kt[o.type],a=Ce(i,o.content.byteLength),l=await xe(o.content);t.update(a),t.update(l),yield kr(a,l)}yield ge(await t.hex())}async function Pr(r){let e=0;for(let i of r)e+=i.byteLength;e+=20;let t=new Uint8Array(e),n=0;for(let i of r)t.set(i,n),n+=i.byteLength;let s=G();s.update(t.subarray(0,n));let o=await s.hex();return t.set(ge(o),n),t}function vr(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 Ce(r,e){let t=[],n=r<<4|e&15;for(e>>=4;e>0;)t.push(n|128),n=e&127,e>>=7;return t.push(n),new Uint8Array(t)}function xt(r,e){let t=0,n=0,s;do s=r[e++],t|=(s&127)<<n,n+=7;while(s&128);return{value:t,newPos:e}}function kr(r,e){let t=new Uint8Array(r.byteLength+e.byteLength);return t.set(r,0),t.set(e,r.byteLength),t}var jr=new TextEncoder;async function q(r,e){let t=jr.encode(`${r} ${e.byteLength}\0`),n=G();return n.update(t),n.update(e),n.hex()}var Sr=new TextEncoder,Hn=new TextDecoder;function It(r,e){let t=Sr.encode(`${r} ${e.byteLength}\0`),n=new Uint8Array(t.byteLength+e.byteLength);return n.set(t),n.set(e,t.byteLength),n}function ne(r){let e=r.indexOf("<"),t=r.indexOf(">");if(e===-1||t===-1)throw new Error(`Malformed identity line: "${r}"`);let n=r.slice(0,e).trimEnd(),s=r.slice(e+1,t),o=r.slice(t+2),[i="0",a="+0000"]=o.split(" "),l=parseInt(i,10);return{name:n,email:s,timestamp:l,timezone:a}}var Bn=new TextEncoder,Ir=new TextDecoder;function se(r){let e=Ir.decode(r),t=e.indexOf(`
|
|
2
2
|
|
|
3
3
|
`),n=t===-1?e:e.slice(0,t),s=t===-1?"":e.slice(t+2),o="",i=[],a,l;for(let c of n.split(`
|
|
4
4
|
`)){let f=c.indexOf(" ");if(f===-1)continue;let d=c.slice(0,f),p=c.slice(f+1);switch(d){case"tree":o=p;break;case"parent":i.push(p);break;case"author":a=ne(p);break;case"committer":l=ne(p);break}}if(!o)throw new Error("Commit missing tree field");if(!a)throw new Error("Commit missing author field");if(!l)throw new Error("Commit missing committer field");return{type:"commit",tree:o,parents:i,author:a,committer:l,message:s}}var Wn=new TextEncoder,Tr=new TextDecoder;function W(r){let e=Tr.decode(r),t=e.indexOf(`
|
|
5
5
|
|
|
6
6
|
`),n=t===-1?e:e.slice(0,t),s=t===-1?"":e.slice(t+2),o="",i="commit",a="",l;for(let c of n.split(`
|
|
7
|
-
`)){let f=c.indexOf(" ");if(f===-1)continue;let d=c.slice(0,f),p=c.slice(f+1);switch(d){case"object":o=p;break;case"type":i=p;break;case"tag":a=p;break;case"tagger":l=ne(p);break}}if(!o)throw new Error("Tag missing object field");if(!a)throw new Error("Tag missing tag name field");if(!l)throw new Error("Tag missing tagger field");return{type:"tag",object:o,objectType:i,name:a,tagger:l,message:s}}async function oe(r,e){return r.objectStore.read(e)}async function ae(r,e){return r.objectStore.exists(e)}var qn=new TextDecoder;async function X(r,e){let t=await oe(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return se(t.content)}function Tt(r){return typeof r=="string"?{type:"direct",hash:r}:r}var He=".lock";var Ur=[1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,5,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,4,4];function Lr(r,e,t){let n=0,s=!1,o=e;for(;o<r.length;o++){let a=r.charCodeAt(o);switch(a<128?Ur[a]:0){case 1:break;case 2:if(n===46)return{len:-1,starConsumed:s};n=a;continue;case 3:if(n===64)return{len:-1,starConsumed:s};n=a;continue;case 4:return{len:-1,starConsumed:s};case 5:if(!t)return{len:-1,starConsumed:s};s=!0,n=a;continue;default:n=a;continue}break}let i=o-e;return i===0?{len:0,starConsumed:s}:r.charCodeAt(e)===46?{len:-1,starConsumed:s}:i>=He.length&&r.slice(o-He.length,o)===He?{len:-1,starConsumed:s}:{len:i,starConsumed:s}}function Ut(r,e=0){if(r==="@"||r.length===0)return!1;let t=0,n=0,s=!!(e&2);for(;t<=r.length;){let{len:o,starConsumed:i}=Lr(r,t,s);if(o<0||o===0)return!1;i&&(s=!1),n++,t+=o+1}return!(r.charCodeAt(r.length-1)===46||!(e&1)&&n<2)}var Cr=10;async function Hr(r,e){return r.refStore.readRef(e)}async function Lt(r,e){let t=e;for(let n=0;n<Cr;n++){let s=await Hr(r,t);if(!s)return null;if(s.type==="direct")return s.hash;t=s.target}throw new Error(`Symbolic ref loop detected resolving "${e}"`)}var Vn=new TextEncoder,Ct=new TextDecoder,Dr=new Set(["100644","100755","040000","120000","160000"]);function Nr(r){return r.length===4&&r.toLowerCase()===".git"}function Mr(r,e){if(r.length===0)throw new Error("invalid tree entry: empty name");if(r.includes("/"))throw new Error(`invalid tree entry: name contains slash: '${r}'`);if(r.includes("\0"))throw new Error("invalid tree entry: name contains null byte");if(r==="."||r==="..")throw new Error(`invalid tree entry: '${r}'`);if(Nr(r))throw new Error(`invalid tree entry: '${r}'`);if(!Dr.has(e))throw new Error(`invalid tree entry mode: '${e}' for '${r}'`)}function De(r){let e=[],t=0;for(;t<r.byteLength;){let n=r.indexOf(32,t);if(n===-1)break;let s=Ct.decode(r.subarray(t,n)),o=r.indexOf(0,n+1);if(o===-1)break;let i=Ct.decode(r.subarray(n+1,o)),a=r.subarray(o+1,o+21),l=be(a),c=s.padStart(6,"0");Mr(i,c),e.push({mode:c,name:i,hash:l}),t=o+21}return{type:"tree",entries:e}}async function Ne(r,e,t){if(e===t)return!0;let n=new Set,s=[t],o=0;for(;o<s.length;){let i=s[o++];if(i===e)return!0;if(n.has(i))continue;n.add(i);let a;try{a=await X(r,i)}catch{continue}for(let l of a.parents)n.has(l)||s.push(l)}return!1}var Pe=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]),Br=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]),Oe=64,$r=4,Me=4096,Ht=65536,_r=127;function Wr(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let n=t>>>2;n<16&&(n=16),n=Fr(n);let s=n-1,o=new Uint32Array(n),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])^Pe[u>>>23];if(u=u>>>0,u===a)i[i.length-1].ptr=p+16;else{a=u;let h=u&s;i.push({ptr:p+16,val:u}),o[h]++}}let l=new Map;for(let p of i){let u=p.val&s,h=l.get(u);h||(h=[],l.set(u,h)),h.push(p)}for(let[p,u]of l){if(u.length<=Oe)continue;let h=[],m=u.length/Oe;for(let R=0;R<Oe;R++)h.push(u[Math.floor(R*m)]);l.set(p,h),o[p]=Oe}let c=new Uint32Array(n+1),f=[],d=0;for(let p=0;p<n;p++){c[p]=d;let u=l.get(p);if(u){for(let h of u)f.push(h);d+=u.length}}return c[n]=d,{src:r,hashMask:s,buckets:c,entries:f}}function Gr(r,e,t){if(!r||e.byteLength===0)return null;let n=r.src.byteLength,s=e.byteLength,o=r.src,i=new Uint8Array(Math.max(s,1024)),a=0;function l(m){for(;a+m>i.length;){let R=new Uint8Array(i.length*2);R.set(i),i=R}}a=Nt(i,a,n),a=Nt(i,a,s),l(18),a++;let c=0,f=0,d=Math.min(16,s);for(let m=0;m<d;m++)i[a++]=e[m],c=(c<<8|e[m])^Pe[c>>>23],f++;c=c>>>0;let p=d,u=0,h=0;for(;p<s;){if(h<Me){c^=Br[e[p-16]],c=((c<<8|e[p])^Pe[c>>>23])>>>0;let m=c&r.hashMask,R=r.buckets[m],b=r.buckets[m+1];for(let y=R;y<b;y++){let g=r.entries[y];if(g.val!==c)continue;let w=g.ptr,E=o.byteLength-w,x=s-p;if(E>x&&(E=x),E<=h)break;let O=0;for(;O<E&&o[w+O]===e[p+O];)O++;if(O>h&&(h=O,u=w,h>=Me))break}}if(h<$r)l(2),f===0&&a++,i[a++]=e[p++],f++,f===_r&&(i[a-f-1]=f,f=0),h=0;else{if(f>0){for(;u>0&&o[u-1]===e[p-1];)if(h++,u--,p--,a--,!(--f>0)){a--,f=-1;break}f>0&&(i[a-f-1]=f),f=0}let m=h>Ht?h-Ht:0;h-=m,l(8);let R=a++,b=128;if(u&255&&(i[a++]=u&255,b|=1),u&65280&&(i[a++]=u>>>8&255,b|=2),u&16711680&&(i[a++]=u>>>16&255,b|=4),u&4278190080&&(i[a++]=u>>>24&255,b|=8),h&255&&(i[a++]=h&255,b|=16),h&65280&&(i[a++]=h>>>8&255,b|=32),i[R]=b,p+=h,u+=h,h=m,u>4294967295&&(h=0),h<Me){c=0;for(let y=-16;y<0;y++)c=(c<<8|e[p+y])^Pe[c>>>23];c=c>>>0}}if(t&&a>t)return null}return f>0&&(i[a-f-1]=f),t&&a>t?null:i.subarray(0,a)}var Dt={blob:0,tree:1,commit:2,tag:3};function Mt(r,e){let t=e?.window??10,n=e?.depth??50,s=r.slice().sort((c,f)=>{let d=Dt[c.type]??99,p=Dt[f.type]??99;return d!==p?d-p:f.content.byteLength-c.content.byteLength}),o=new Map,i=[],a=[],l=[];for(let c=0;c<s.length;c++){let f=s[c],d={hash:f.hash,type:f.type,content:f.content,depth:0},p=null,u=null,h=Math.max(0,c-t);for(let m=c-1;m>=h;m--){let R=s[m];if(R.type!==f.type||(o.get(R.hash)?.depth??0)>=n||f.content.byteLength<R.content.byteLength>>>5)continue;let g=a[m-h]??null;if(!g)continue;let w=p?p.byteLength:f.content.byteLength/2|0;if(w<16)continue;let E=Gr(g,f.content,w);E&&(!p||E.byteLength<p.byteLength)&&(p=E,u=R.hash)}if(p&&u){d.delta=p,d.deltaBase=u;let m=o.get(u);d.depth=(m?.depth??0)+1}o.set(f.hash,d),i.push(d),a.length>=t&&(a.shift(),l.shift()),a.push(Wr(f.content)),l.push(f.hash)}return i}function Fr(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 Nt(r,e,t){let n=t;do{let s=n&127;n>>>=7,n>0&&(s|=128),r[e++]=s}while(n>0);return e}var qr=2147483647;async function Bt(r,e,t,n){if(t>=qr)return{shallow:[],unshallow:[...n]};let s=new Map,o=[];for(let c of e)!s.has(c)&&await ae(r,c)&&(s.set(c,1),o.push({hash:c,level:1}));let i=new Set,a=0;for(;a<o.length;){let{hash:c,level:f}=o[a++];if(f>=t){i.add(c);continue}let d;try{d=await X(r,c)}catch{continue}for(let p of d.parents)!s.has(p)&&await ae(r,p)&&(s.set(p,f+1),o.push({hash:p,level:f+1}))}let l=[];for(let c of n){let f=s.get(c);f!==void 0&&f<t&&l.push(c)}return{shallow:[...i],unshallow:l}}async function fe(r,e,t,n,s){let o=s??n,i=new Set;for(let f of t)await ie(r,f,i,o);let a=[...e];if(s&&n)for(let f of s)try{let d=await X(r,f);for(let p of d.parents)i.has(p)||a.push(p)}catch{}let l=[],c=new Set;for(let f of a)await ce(r,f,i,c,l,n);return{count:l.length,objects:zr(l)}}async function $t(r,e,t,n,s){let{count:o,objects:i}=await fe(r,e,t,n,s);return{count:o,objects:Xr(r,i)}}async function*zr(r){for(let e of r)yield e}async function*Xr(r,e){for await(let t of e){let n=await oe(r,t.hash);yield{hash:t.hash,type:t.type,content:n.content}}}async function _t(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function ie(r,e,t,n){if(t.has(e)||(t.add(e),!await ae(r,e)))return;let s=await oe(r,e);switch(s.type){case"commit":{let o=se(s.content);if(await ie(r,o.tree,t,n),!n?.has(e))for(let i of o.parents)await ie(r,i,t,n);break}case"tree":{let o=De(s.content);for(let i of o.entries)await ie(r,i.hash,t,n);break}case"tag":{let o=W(s.content);await ie(r,o.object,t,n);break}case"blob":break}}async function ce(r,e,t,n,s,o){if(n.has(e)||t.has(e))return;n.add(e);let i=await oe(r,e);switch(s.push({hash:e,type:i.type}),i.type){case"commit":{let a=se(i.content);if(await ce(r,a.tree,t,n,s,o),!o?.has(e))for(let l of a.parents)await ce(r,l,t,n,s,o);break}case"tree":{let a=De(i.content);for(let l of a.entries)await ce(r,l.hash,t,n,s,o);break}case"tag":{let a=W(i.content);await ce(r,a.object,t,n,s,o);break}case"blob":break}}var Kr=new TextEncoder,Gt=new TextDecoder,Wt=65520,Yr=new Uint8Array([48,48,48,48]);function v(r){let e=typeof r=="string"?Kr.encode(r):r,t=4+e.byteLength;if(t>Wt)throw new Error(`pkt-line too long: ${t} bytes (max ${Wt})`);let n=t.toString(16).padStart(4,"0"),s=new Uint8Array(t);return s[0]=n.charCodeAt(0),s[1]=n.charCodeAt(1),s[2]=n.charCodeAt(2),s[3]=n.charCodeAt(3),s.set(e,4),s}function D(){return Yr.slice()}function M(...r){let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}function Ft(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let n=Gt.decode(r.subarray(t,t+4)),s=parseInt(n,16);if(Number.isNaN(s))throw new Error(`Invalid pkt-line length: ${n}`);if(s===0){e.push({type:"flush"}),t+=4;continue}if(s<4)throw new Error(`Invalid pkt-line length: ${s}`);if(t+s>r.byteLength)throw new Error(`Truncated pkt-line: need ${s} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+s)}),t+=s}return e}function qt(r){if(r.type==="flush")return"";let e=Gt.decode(r.data);return e.endsWith(`
|
|
8
|
-
`)?e.slice(0,-1):e}var zt=65515;function
|
|
7
|
+
`)){let f=c.indexOf(" ");if(f===-1)continue;let d=c.slice(0,f),p=c.slice(f+1);switch(d){case"object":o=p;break;case"type":i=p;break;case"tag":a=p;break;case"tagger":l=ne(p);break}}if(!o)throw new Error("Tag missing object field");if(!a)throw new Error("Tag missing tag name field");if(!l)throw new Error("Tag missing tagger field");return{type:"tag",object:o,objectType:i,name:a,tagger:l,message:s}}async function oe(r,e){return r.objectStore.read(e)}async function ae(r,e){return r.objectStore.exists(e)}var qn=new TextDecoder;async function X(r,e){let t=await oe(r,e);if(t.type!=="commit")throw new Error(`Expected commit object for ${e}, got ${t.type}`);return se(t.content)}function Tt(r){return typeof r=="string"?{type:"direct",hash:r}:r}var He=".lock";var Ur=[1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,5,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,4,4];function Lr(r,e,t){let n=0,s=!1,o=e;for(;o<r.length;o++){let a=r.charCodeAt(o);switch(a<128?Ur[a]:0){case 1:break;case 2:if(n===46)return{len:-1,starConsumed:s};n=a;continue;case 3:if(n===64)return{len:-1,starConsumed:s};n=a;continue;case 4:return{len:-1,starConsumed:s};case 5:if(!t)return{len:-1,starConsumed:s};s=!0,n=a;continue;default:n=a;continue}break}let i=o-e;return i===0?{len:0,starConsumed:s}:r.charCodeAt(e)===46?{len:-1,starConsumed:s}:i>=He.length&&r.slice(o-He.length,o)===He?{len:-1,starConsumed:s}:{len:i,starConsumed:s}}function Ut(r,e=0){if(r==="@"||r.length===0)return!1;let t=0,n=0,s=!!(e&2);for(;t<=r.length;){let{len:o,starConsumed:i}=Lr(r,t,s);if(o<0||o===0)return!1;i&&(s=!1),n++,t+=o+1}return!(r.charCodeAt(r.length-1)===46||!(e&1)&&n<2)}var Cr=10;async function Hr(r,e){return r.refStore.readRef(e)}async function Lt(r,e){let t=e;for(let n=0;n<Cr;n++){let s=await Hr(r,t);if(!s)return null;if(s.type==="direct")return s.hash;t=s.target}throw new Error(`Symbolic ref loop detected resolving "${e}"`)}var Vn=new TextEncoder,Ct=new TextDecoder,Dr=new Set(["100644","100755","040000","120000","160000"]);function Nr(r){return r.length===4&&r.toLowerCase()===".git"}function Mr(r,e){if(r.length===0)throw new Error("invalid tree entry: empty name");if(r.includes("/"))throw new Error(`invalid tree entry: name contains slash: '${r}'`);if(r.includes("\0"))throw new Error("invalid tree entry: name contains null byte");if(r==="."||r==="..")throw new Error(`invalid tree entry: '${r}'`);if(Nr(r))throw new Error(`invalid tree entry: '${r}'`);if(!Dr.has(e))throw new Error(`invalid tree entry mode: '${e}' for '${r}'`)}function De(r){let e=[],t=0;for(;t<r.byteLength;){let n=r.indexOf(32,t);if(n===-1)break;let s=Ct.decode(r.subarray(t,n)),o=r.indexOf(0,n+1);if(o===-1)break;let i=Ct.decode(r.subarray(n+1,o)),a=r.subarray(o+1,o+21),l=me(a),c=s.padStart(6,"0");Mr(i,c),e.push({mode:c,name:i,hash:l}),t=o+21}return{type:"tree",entries:e}}async function Ne(r,e,t){if(e===t)return!0;let n=new Set,s=[t],o=0;for(;o<s.length;){let i=s[o++];if(i===e)return!0;if(n.has(i))continue;n.add(i);let a;try{a=await X(r,i)}catch{continue}for(let l of a.parents)n.has(l)||s.push(l)}return!1}var ve=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]),Br=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]),Pe=64,$r=4,Me=4096,Ht=65536,_r=127;function Wr(r){let e=r.byteLength;if(e===0)return null;let t=(e-1)/16|0;if(t===0)return null;let n=t>>>2;n<16&&(n=16),n=Fr(n);let s=n-1,o=new Uint32Array(n),i=[],a=-1>>>0;for(let p=t*16-16;p>=0;p-=16){let u=0;for(let y=1;y<=16;y++)u=(u<<8|r[p+y])^ve[u>>>23];if(u=u>>>0,u===a)i[i.length-1].ptr=p+16;else{a=u;let y=u&s;i.push({ptr:p+16,val:u}),o[y]++}}let l=new Map;for(let p of i){let u=p.val&s,y=l.get(u);y||(y=[],l.set(u,y)),y.push(p)}for(let[p,u]of l){if(u.length<=Pe)continue;let y=[],m=u.length/Pe;for(let g=0;g<Pe;g++)y.push(u[Math.floor(g*m)]);l.set(p,y),o[p]=Pe}let c=new Uint32Array(n+1),f=[],d=0;for(let p=0;p<n;p++){c[p]=d;let u=l.get(p);if(u){for(let y of u)f.push(y);d+=u.length}}return c[n]=d,{src:r,hashMask:s,buckets:c,entries:f}}function Gr(r,e,t){if(!r||e.byteLength===0)return null;let n=r.src.byteLength,s=e.byteLength,o=r.src,i=new Uint8Array(Math.max(s,1024)),a=0;function l(m){for(;a+m>i.length;){let g=new Uint8Array(i.length*2);g.set(i),i=g}}a=Nt(i,a,n),a=Nt(i,a,s),l(18),a++;let c=0,f=0,d=Math.min(16,s);for(let m=0;m<d;m++)i[a++]=e[m],c=(c<<8|e[m])^ve[c>>>23],f++;c=c>>>0;let p=d,u=0,y=0;for(;p<s;){if(y<Me){c^=Br[e[p-16]],c=((c<<8|e[p])^ve[c>>>23])>>>0;let m=c&r.hashMask,g=r.buckets[m],b=r.buckets[m+1];for(let h=g;h<b;h++){let R=r.entries[h];if(R.val!==c)continue;let w=R.ptr,E=o.byteLength-w,x=s-p;if(E>x&&(E=x),E<=y)break;let O=0;for(;O<E&&o[w+O]===e[p+O];)O++;if(O>y&&(y=O,u=w,y>=Me))break}}if(y<$r)l(2),f===0&&a++,i[a++]=e[p++],f++,f===_r&&(i[a-f-1]=f,f=0),y=0;else{if(f>0){for(;u>0&&o[u-1]===e[p-1];)if(y++,u--,p--,a--,!(--f>0)){a--,f=-1;break}f>0&&(i[a-f-1]=f),f=0}let m=y>Ht?y-Ht:0;y-=m,l(8);let g=a++,b=128;if(u&255&&(i[a++]=u&255,b|=1),u&65280&&(i[a++]=u>>>8&255,b|=2),u&16711680&&(i[a++]=u>>>16&255,b|=4),u&4278190080&&(i[a++]=u>>>24&255,b|=8),y&255&&(i[a++]=y&255,b|=16),y&65280&&(i[a++]=y>>>8&255,b|=32),i[g]=b,p+=y,u+=y,y=m,u>4294967295&&(y=0),y<Me){c=0;for(let h=-16;h<0;h++)c=(c<<8|e[p+h])^ve[c>>>23];c=c>>>0}}if(t&&a>t)return null}return f>0&&(i[a-f-1]=f),t&&a>t?null:i.subarray(0,a)}var Dt={blob:0,tree:1,commit:2,tag:3};function Mt(r,e){let t=e?.window??10,n=e?.depth??50,s=r.slice().sort((c,f)=>{let d=Dt[c.type]??99,p=Dt[f.type]??99;return d!==p?d-p:f.content.byteLength-c.content.byteLength}),o=new Map,i=[],a=[],l=[];for(let c=0;c<s.length;c++){let f=s[c],d={hash:f.hash,type:f.type,content:f.content,depth:0},p=null,u=null,y=Math.max(0,c-t);for(let m=c-1;m>=y;m--){let g=s[m];if(g.type!==f.type||(o.get(g.hash)?.depth??0)>=n||f.content.byteLength<g.content.byteLength>>>5)continue;let R=a[m-y]??null;if(!R)continue;let w=p?p.byteLength:f.content.byteLength/2|0;if(w<16)continue;let E=Gr(R,f.content,w);E&&(!p||E.byteLength<p.byteLength)&&(p=E,u=g.hash)}if(p&&u){d.delta=p,d.deltaBase=u;let m=o.get(u);d.depth=(m?.depth??0)+1}o.set(f.hash,d),i.push(d),a.length>=t&&(a.shift(),l.shift()),a.push(Wr(f.content)),l.push(f.hash)}return i}function Fr(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 Nt(r,e,t){let n=t;do{let s=n&127;n>>>=7,n>0&&(s|=128),r[e++]=s}while(n>0);return e}var qr=2147483647;async function Bt(r,e,t,n){if(t>=qr)return{shallow:[],unshallow:[...n]};let s=new Map,o=[];for(let c of e)!s.has(c)&&await ae(r,c)&&(s.set(c,1),o.push({hash:c,level:1}));let i=new Set,a=0;for(;a<o.length;){let{hash:c,level:f}=o[a++];if(f>=t){i.add(c);continue}let d;try{d=await X(r,c)}catch{continue}for(let p of d.parents)!s.has(p)&&await ae(r,p)&&(s.set(p,f+1),o.push({hash:p,level:f+1}))}let l=[];for(let c of n){let f=s.get(c);f!==void 0&&f<t&&l.push(c)}return{shallow:[...i],unshallow:l}}async function fe(r,e,t,n,s){let o=s??n,i=new Set;for(let f of t)await ie(r,f,i,o);let a=[...e];if(s&&n)for(let f of s)try{let d=await X(r,f);for(let p of d.parents)i.has(p)||a.push(p)}catch{}let l=[],c=new Set;for(let f of a)await ce(r,f,i,c,l,n);return{count:l.length,objects:zr(l)}}async function $t(r,e,t,n,s){let{count:o,objects:i}=await fe(r,e,t,n,s);return{count:o,objects:Xr(r,i)}}async function*zr(r){for(let e of r)yield e}async function*Xr(r,e){for await(let t of e){let n=await oe(r,t.hash);yield{hash:t.hash,type:t.type,content:n.content}}}async function _t(r){let e=[];for await(let t of r.objects)e.push(t);return e}async function ie(r,e,t,n){if(t.has(e)||(t.add(e),!await ae(r,e)))return;let s=await oe(r,e);switch(s.type){case"commit":{let o=se(s.content);if(await ie(r,o.tree,t,n),!n?.has(e))for(let i of o.parents)await ie(r,i,t,n);break}case"tree":{let o=De(s.content);for(let i of o.entries)await ie(r,i.hash,t,n);break}case"tag":{let o=W(s.content);await ie(r,o.object,t,n);break}case"blob":break}}async function ce(r,e,t,n,s,o){if(n.has(e)||t.has(e))return;n.add(e);let i=await oe(r,e);switch(s.push({hash:e,type:i.type}),i.type){case"commit":{let a=se(i.content);if(await ce(r,a.tree,t,n,s,o),!o?.has(e))for(let l of a.parents)await ce(r,l,t,n,s,o);break}case"tree":{let a=De(i.content);for(let l of a.entries)await ce(r,l.hash,t,n,s,o);break}case"tag":{let a=W(i.content);await ce(r,a.object,t,n,s,o);break}case"blob":break}}var Kr=new TextEncoder,Gt=new TextDecoder,Wt=65520,Yr=new Uint8Array([48,48,48,48]);function v(r){let e=typeof r=="string"?Kr.encode(r):r,t=4+e.byteLength;if(t>Wt)throw new Error(`pkt-line too long: ${t} bytes (max ${Wt})`);let n=t.toString(16).padStart(4,"0"),s=new Uint8Array(t);return s[0]=n.charCodeAt(0),s[1]=n.charCodeAt(1),s[2]=n.charCodeAt(2),s[3]=n.charCodeAt(3),s.set(e,4),s}function D(){return Yr.slice()}function M(...r){let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}function Ft(r){let e=[],t=0;for(;t<r.byteLength;){if(t+4>r.byteLength)throw new Error("Truncated pkt-line header");let n=Gt.decode(r.subarray(t,t+4)),s=parseInt(n,16);if(Number.isNaN(s))throw new Error(`Invalid pkt-line length: ${n}`);if(s===0){e.push({type:"flush"}),t+=4;continue}if(s<4)throw new Error(`Invalid pkt-line length: ${s}`);if(t+s>r.byteLength)throw new Error(`Truncated pkt-line: need ${s} bytes at offset ${t}, have ${r.byteLength-t}`);e.push({type:"data",data:r.subarray(t+4,t+s)}),t+=s}return e}function qt(r){if(r.type==="flush")return"";let e=Gt.decode(r.data);return e.endsWith(`
|
|
8
|
+
`)?e.slice(0,-1):e}var zt=65515;function ke(r,e,t){let n=[],s=[...e];t&&s.push(`symref=HEAD:${t}`),s.push("agent=just-git/1.0");let o=s.join(" ");if(r.length===0)n.push(v(`0000000000000000000000000000000000000000 capabilities^{}\0${o}
|
|
9
9
|
`));else for(let i=0;i<r.length;i++){let a=r[i];i===0?n.push(v(`${a.hash} ${a.name}\0${o}
|
|
10
10
|
`)):n.push(v(`${a.hash} ${a.name}
|
|
11
11
|
`))}return n.push(D()),M(...n)}function Xt(r,e,t,n){let s=M(v(`# service=${e}
|
|
12
|
-
`),D()),o=
|
|
12
|
+
`),D()),o=ke(r,t,n),i=new Uint8Array(s.byteLength+o.byteLength);return i.set(s,0),i.set(o,s.byteLength),i}function Kt(r){let e=Ft(r),t=[],n=[],s=[],o=[],i,a=!1;for(let l of e){if(l.type==="flush")continue;let c=qt(l);if(c.startsWith("want ")){let f=c.slice(5);if(t.length===0){let d=f.indexOf(" ");d!==-1?(t.push(f.slice(0,d)),o=f.slice(d+1).split(" ").filter(Boolean)):t.push(f)}else t.push(f)}else c.startsWith("have ")?n.push(c.slice(5)):c.startsWith("shallow ")?s.push(c.slice(8)):c.startsWith("deepen ")?(i=parseInt(c.slice(7),10),Number.isNaN(i)&&(i=void 0)):c==="done"&&(a=!0)}return{wants:t,haves:n,capabilities:o,clientShallows:s,depth:i,done:a}}function K(r,e,t,n){let s=[];if(n){for(let o of n.shallow)s.push(v(`shallow ${o}
|
|
13
13
|
`));for(let o of n.unshallow)s.push(v(`unshallow ${o}
|
|
14
14
|
`));s.push(D())}if(t&&t.length>0){for(let i of t)s.push(v(`ACK ${i} common
|
|
15
15
|
`));let o=t[t.length-1];s.push(v(`ACK ${o} ready
|
|
@@ -28,14 +28,15 @@ var ye=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(
|
|
|
28
28
|
`:`unpack error
|
|
29
29
|
`));for(let o of e)o.ok?n.push(v(`ok ${o.name}
|
|
30
30
|
`)):n.push(v(`ng ${o.name} ${o.error??"failed"}
|
|
31
|
-
`));n.push(D());let s=M(...n);if(t){let o=[];return o.push(Be(1,s)),o.push(D()),M(...o)}return s}function Be(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),v(t)}var le=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,n){if(n.length>0)return null;let s=t.slice().sort();return`${e}\0${s.join(",")}`}get(e){let t=this.entries.get(e);return t?this.hits++:this.misses++,t}set(e,t){if(this.entries.has(e))return;let n=t.packData.byteLength;if(!(n>this.maxBytes)){for(;this.currentBytes+n>this.maxBytes&&this.entries.size>0;){let s=this.entries.keys().next().value;this.currentBytes-=this.entries.get(s).packData.byteLength,this.entries.delete(s)}this.entries.set(e,t),this.currentBytes+=n}}clear(){this.entries.clear(),this.currentBytes=0}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},Jt=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","allow-reachable-sha1-in-want","shallow"],Qt=["report-status","side-band-64k","ofs-delta","delete-refs"];async function er(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),n=[],s=null,o;if(t)if(t.type==="symbolic"){o=t.target;let a=await r.refStore.readRef(t.target);a?.type==="direct"&&(s=a.hash)}else s=t.hash;let i=e.slice().sort((a,l)=>a.name<l.name?-1:a.name>l.name?1:0);if(!s&&i.length>0){let a=Zr(i);a&&(s=a.hash,o=a.name)}s&&n.push({name:"HEAD",hash:s});for(let a of i)if(n.push({name:a.name,hash:a.hash}),a.name.startsWith("refs/tags/"))try{let l=await r.objectStore.read(a.hash);if(l.type==="tag"){let c=W(l.content);n.push({name:`${a.name}^{}`,hash:c.object})}}catch{}return{refs:n,headTarget:o}}var Vr=["refs/heads/main","refs/heads/master"];function Zr(r){for(let t of Vr){let n=r.find(s=>s.name===t);if(n)return n}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function $e(r,e,t){return Xt(r,e,e==="git-upload-pack"?Jt:Qt,t)}function _e(r,e,t){return
|
|
32
|
-
`),128;
|
|
33
|
-
`),128;let{
|
|
34
|
-
`),128;
|
|
35
|
-
`),128
|
|
36
|
-
`)
|
|
37
|
-
`)),
|
|
38
|
-
`)),128;
|
|
31
|
+
`));n.push(D());let s=M(...n);if(t){let o=[];return o.push(Be(1,s)),o.push(D()),M(...o)}return s}function Be(r,e){let t=new Uint8Array(1+e.byteLength);return t[0]=r,t.set(e,1),v(t)}var le=class{entries=new Map;currentBytes=0;maxBytes;hits=0;misses=0;constructor(e=256*1024*1024){this.maxBytes=e}static key(e,t,n){if(n.length>0)return null;let s=t.slice().sort();return`${e}\0${s.join(",")}`}get(e){let t=this.entries.get(e);return t?this.hits++:this.misses++,t}set(e,t){if(this.entries.has(e))return;let n=t.packData.byteLength;if(!(n>this.maxBytes)){for(;this.currentBytes+n>this.maxBytes&&this.entries.size>0;){let s=this.entries.keys().next().value;this.currentBytes-=this.entries.get(s).packData.byteLength,this.entries.delete(s)}this.entries.set(e,t),this.currentBytes+=n}}clear(){this.entries.clear(),this.currentBytes=0}get stats(){return{entries:this.entries.size,bytes:this.currentBytes,hits:this.hits,misses:this.misses}}},Jt=["multi_ack_detailed","no-done","side-band-64k","ofs-delta","include-tag","allow-reachable-sha1-in-want","shallow"],Qt=["report-status","side-band-64k","ofs-delta","delete-refs"];async function er(r){let e=await r.refStore.listRefs("refs"),t=await r.refStore.readRef("HEAD"),n=[],s=null,o;if(t)if(t.type==="symbolic"){o=t.target;let a=await r.refStore.readRef(t.target);a?.type==="direct"&&(s=a.hash)}else s=t.hash;let i=e.slice().sort((a,l)=>a.name<l.name?-1:a.name>l.name?1:0);if(!s&&i.length>0){let a=Zr(i);a&&(s=a.hash,o=a.name)}s&&n.push({name:"HEAD",hash:s});for(let a of i)if(n.push({name:a.name,hash:a.hash}),a.name.startsWith("refs/tags/"))try{let l=await r.objectStore.read(a.hash);if(l.type==="tag"){let c=W(l.content);n.push({name:`${a.name}^{}`,hash:c.object})}}catch{}return{refs:n,headTarget:o}}var Vr=["refs/heads/main","refs/heads/master"];function Zr(r){for(let t of Vr){let n=r.find(s=>s.name===t);if(n)return n}return r.find(t=>t.name.startsWith("refs/heads/"))??null}function $e(r,e,t){return Xt(r,e,e==="git-upload-pack"?Jt:Qt,t)}function _e(r,e,t){return ke(r,e==="git-upload-pack"?Jt:Qt,t)}async function de(r,e,t,n,s){let{refs:o,headTarget:i}=await er(r),a=o;if(n?.advertiseRefs){let l=await n.advertiseRefs({repo:r,repoId:e,refs:o,service:t,session:s});if(T(l))return l;l&&(a=l)}return{refs:a,headTarget:i}}async function pe(r,e,t){let{wants:n,haves:s,capabilities:o,clientShallows:i,depth:a,done:l}=Kt(e);if(n.length===0)return K(new Uint8Array(0),!1);let c=o.includes("multi_ack_detailed"),f=o.includes("side-band-64k"),d,p,u;if(i.length>0&&(u=new Set(i)),a!==void 0){let g=await Bt(r,n,a,u??new Set);d=g,p=new Set(g.shallow)}if(d&&!l)return Yt(d);let y;if(c&&s.length>0){y=[];for(let g of s)await r.objectStore.exists(g)&&y.push(g);y.length===0&&(y=void 0)}let m=!p&&t?.cache&&t.cacheKey?le.key(t.cacheKey,n,s):null;if(m&&t?.cache){let g=t.cache.get(m);if(g)return K(g.packData,f,y)}return t?.noDelta?Jr(r,n,s,o,f,y,d,p,u):Qr(r,n,s,o,f,y,t,m,d,p,u)}async function Jr(r,e,t,n,s,o,i,a,l){let{count:c,objects:f}=await fe(r,e,t,a,l);if(c===0){let{data:h}=await Oe([]),R=K(h,s,o,i);return new ReadableStream({start(w){w.enqueue(R),w.close()}})}let d=[];for await(let h of f)d.push(h);let p=new Set(d.map(h=>h.hash)),u=[];if(n.includes("include-tag")){let h=await r.refStore.listRefs("refs/tags");for(let R of h)if(!p.has(R.hash))try{let w=await r.objectStore.read(R.hash);if(w.type==="tag"){let E=W(w.content);p.has(E.object)&&u.push({hash:R.hash,type:"tag",content:w.content})}}catch{}}let y=d.length+u.length;async function*m(){for(let h of d){let R=await r.objectStore.read(h.hash);yield{type:R.type,content:R.content}}for(let h of u)yield{type:h.type,content:h.content}}let g=At(y,m()),b=Vt(g,s,o,i);return new ReadableStream({async pull(h){let{value:R,done:w}=await b.next();w?h.close():h.enqueue(R)}})}async function Qr(r,e,t,n,s,o,i,a,l,c,f){let d=await $t(r,e,t,c,f);if(d.count===0){let{data:h}=await Oe([]);return K(h,s,o,l)}let p=await _t(d),u=new Set(p.map(h=>h.hash));if(n.includes("include-tag")){let h=await r.refStore.listRefs("refs/tags");for(let R of h)if(!u.has(R.hash))try{let w=await r.objectStore.read(R.hash);if(w.type==="tag"){let E=W(w.content);u.has(E.object)&&(p.push({hash:R.hash,type:"tag",content:w.content}),u.add(R.hash))}}catch{}}let y=i?.deltaWindow?{window:i.deltaWindow}:void 0,m=Mt(p,y),g=m.map(h=>({hash:h.hash,type:h.type,content:h.content,delta:h.delta,deltaBaseHash:h.deltaBase})),{data:b}=await Oe(g);if(a&&i?.cache){let h=m.filter(R=>R.delta).length;i.cache.set(a,{packData:b,objectCount:p.length,deltaCount:h})}return K(b,s,o,l)}async function We(r,e){let{commands:t,packData:n,capabilities:s,sawFlush:o}=Zt(e),i=!0;if(n.byteLength>0)try{await r.objectStore.ingestPack(n)}catch{i=!1}return{updates:await tr(r,t,i),unpackOk:i,capabilities:s,sawFlush:o}}async function Ge(r,e,t,n,s=!0){let o=!0;if(e.some(l=>l.newHash!==J))try{let c=St(n,async f=>{try{return await r.objectStore.read(f)}catch{return null}});await r.objectStore.ingestPackStream(c)}catch{o=!1}return{updates:await tr(r,e,o),unpackOk:o,capabilities:t,sawFlush:s}}async function tr(r,e,t){let n=[];for(let s of e){let o=s.oldHash===J,i=s.newHash===J,a=!1;if(!o&&!i&&t)try{a=await Ne(r,s.oldHash,s.newHash)}catch{}n.push({ref:s.refName,oldHash:o?null:s.oldHash,newHash:s.newHash,isFF:a,isCreate:o,isDelete:i})}return n}async function V(r){let{repo:e,repoId:t,ingestResult:n,hooks:s,session:o}=r,{updates:i}=n;if(s?.preReceive){let c=await s.preReceive({repo:e,repoId:t,updates:i,session:o});if(T(c)){let f=c.message??"pre-receive hook declined";return{refResults:i.map(d=>({ref:d.ref,ok:!1,error:f})),applied:[]}}}let a=[],l=[];for(let c of i){if(c.ref==="HEAD"){a.push({ref:c.ref,ok:!1,error:"HEAD cannot be updated via push"});continue}if(!c.isDelete&&!Ut(c.ref)){a.push({ref:c.ref,ok:!1,error:"invalid refname"});continue}if(s?.update){let f=await s.update({repo:e,repoId:t,update:c,session:o});if(T(f)){a.push({ref:c.ref,ok:!1,error:f.message??"update hook declined"});continue}}if(!c.isDelete&&!await e.objectStore.exists(c.newHash)){a.push({ref:c.ref,ok:!1,error:"missing objects"});continue}try{let f=c.isCreate?null:c.oldHash,d=c.isDelete?null:{type:"direct",hash:c.newHash};if(!await e.refStore.compareAndSwapRef(c.ref,f,d)){a.push({ref:c.ref,ok:!1,error:"failed to lock"});continue}a.push({ref:c.ref,ok:!0}),l.push(c)}catch(f){a.push({ref:c.ref,ok:!1,error:f instanceof Error?f.message:String(f)})}}if(s?.postReceive&&l.length>0)try{await s.postReceive({repo:e,repoId:t,updates:l,session:o})}catch{}return{refResults:a,applied:l}}async function Fe(r,e){let t=[];for(let n of e){let s;n.oldHash!==void 0?s=n.oldHash:s=await Lt(r,n.ref);let o=s===null,i=n.newHash===null,a=n.newHash??J,l=!1;if(!o&&!i)try{l=await Ne(r,s,a)}catch{}t.push({ref:n.ref,oldHash:s,newHash:a,isFF:l,isCreate:o,isDelete:i})}return t}function en(r){let e=/--protocol=version=2/.test(r),n=r.replace(/\s*--protocol=version=\d+/g,"").match(/^git[\s-](upload-pack|receive-pack)\s+'?([^']+?)'?\s*$/);if(!n)return null;let s=`git-${n[1]}`,o=n[2];return o.startsWith("/")&&(o=o.slice(1)),e?{service:s,repoPath:o,protocolV2:e}:{service:s,repoPath:o}}var tn=new TextEncoder;async function nr(r,e,t){let{resolveRepo:n,hooks:s,packCache:o,packOptions:i,session:a}=t,l=e.writable.getWriter();try{let c=en(r);if(!c)return ue(e,`fatal: unrecognized command '${r}'
|
|
32
|
+
`),128;if(c.protocolV2)return ue(e,`fatal: protocol version 2 is not supported over SSH; set GIT_PROTOCOL_VERSION=1
|
|
33
|
+
`),128;let{service:f,repoPath:d}=c,p=await n(d);if(!p)return ue(e,`fatal: '${d}' does not appear to be a git repository
|
|
34
|
+
`),128;let{repo:u,repoId:y}=p,m=await de(u,y,f,s,a);if(T(m))return ue(e,`fatal: ${m.message??"access denied"}
|
|
35
|
+
`),128;await l.write(_e(m.refs,f,m.headTarget));let g=new qe(e.readable);try{if(f==="git-upload-pack"){let b=await nn(g),h=await pe(u,b,{cache:o,cacheKey:y,noDelta:i?.noDelta,deltaWindow:i?.deltaWindow});await an(l,h)}else{let{commands:b,capabilities:h}=await sn(g),R=g.streamRemaining();await rn({writer:l,repo:u,repoId:y,commands:b,capabilities:h,packStream:R,hooks:s,session:a})}}finally{g.release()}return 0}catch(c){return t.onError?.(c),ue(e,`fatal: internal error
|
|
36
|
+
`),128}finally{try{await l.close()}catch{}}}async function rn(r){let{writer:e,repo:t,repoId:n,commands:s,capabilities:o,packStream:i,hooks:a,session:l}=r,c=await Ge(t,s,o,i);if(c.updates.length===0)return;let f=c.capabilities.includes("side-band-64k"),d=c.capabilities.includes("report-status");if(!c.unpackOk){if(d){let u=c.updates.map(y=>({name:y.ref,ok:!1,error:"unpack failed"}));await e.write(Y(!1,u,f))}return}let{refResults:p}=await V({repo:t,repoId:n,ingestResult:c,hooks:a,session:l});if(d){let u=p.map(y=>({name:y.ref,ok:y.ok,error:y.error}));await e.write(Y(!0,u,f))}}function ue(r,e){r.writeStderr?.(tn.encode(e))}var rr=new TextDecoder,qe=class{buf=new Uint8Array(0);byteReader;eof=!1;constructor(e){this.byteReader=e.getReader()}async fill(e){for(;this.buf.byteLength<e&&!this.eof;){let t=await this.byteReader.read();if(t.done||!t.value){this.eof=!0;break}let n=t.value,s=new Uint8Array(this.buf.byteLength+n.byteLength);s.set(this.buf),s.set(n,this.buf.byteLength),this.buf=s}return this.buf.byteLength>=e}consume(e){let t=this.buf.subarray(0,e);return this.buf=this.buf.subarray(e),t}async readPktLine(){if(!await this.fill(4))return null;let e=rr.decode(this.buf.subarray(0,4)),t=parseInt(e,16);if(t===0)return{type:"flush",raw:this.consume(4)};if(t<4||!await this.fill(t))return null;let n=new Uint8Array(this.consume(t));return{type:"data",raw:n,text:rr.decode(n.subarray(4))}}async*streamRemaining(){for(this.buf.byteLength>0&&(yield this.consume(this.buf.byteLength));!this.eof;){let e=await this.byteReader.read();if(e.done||!e.value){this.eof=!0;break}yield e.value}}release(){this.byteReader.releaseLock()}};async function nn(r){let e=[];for(;;){let t=await r.readPktLine();if(!t||(e.push(t.raw),t.type==="data"&&t.text.trimEnd()==="done"))break}return on(e)}async function sn(r){let e=[],t=[],n=!0;for(;;){let s=await r.readPktLine();if(!s||s.type==="flush")break;let o=s.text;if(o.endsWith(`
|
|
37
|
+
`)&&(o=o.slice(0,-1)),n){let a=o.indexOf("\0");a!==-1&&(t=o.slice(a+1).split(" ").filter(Boolean),o=o.slice(0,a)),n=!1}let i=o.split(" ");i.length>=3&&e.push({oldHash:i[0],newHash:i[1],refName:i[2]})}return{commands:e,capabilities:t}}function on(r){if(r.length===0)return new Uint8Array(0);if(r.length===1)return r[0];let e=0;for(let s of r)e+=s.byteLength;let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.byteLength;return t}async function an(r,e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{value:n,done:s}=await t.read();if(s)break;await r.write(n)}}finally{t.releaseLock()}}else await r.write(e)}async function or(r,e,t,n){let s=n?.dryRun??!1,o=await sr(r),i=cn(o);if(i.length===0)return{deleted:0,retained:0};let a=await fe(r,i,[]),l=new Set;for await(let u of a.objects)l.add(u.hash);let c=await e.listObjectHashes(t),f=[];for(let u of c)l.has(u)||f.push(u);let d=await sr(r);return fn(o,d)?s||f.length===0?{deleted:f.length,retained:l.size}:{deleted:await e.deleteObjects(t,f),retained:l.size}:{deleted:0,retained:l.size,aborted:!0}}async function sr(r){return r.refStore.listRefs()}function cn(r){let e=new Set;for(let t of r)e.add(t.hash);return Array.from(e)}function fn(r,e){if(r.length!==e.length)return!1;let t=new Map;for(let n of r)t.set(n.name,n.hash);for(let n of e)if(t.get(n.name)!==n.hash)return!1;return!0}function ar(r){function e(t){return{objectStore:new ze(r,t),refStore:new Xe(r,t)}}return{async createRepo(t,n){if(await r.hasRepo(t))throw new Error(`repo '${t}' already exists`);let o=n?.defaultBranch??"main";return await r.insertRepo(t),await r.putRef(t,"HEAD",{type:"symbolic",target:`refs/heads/${o}`}),e(t)},async repo(t){return await r.hasRepo(t)?e(t):null},async deleteRepo(t){await r.deleteRepo(t)}}}var ze=class{constructor(e,t){this.driver=e;this.repoId=t}cache=new Re;async write(e,t){let n=It(e,t),s=await ct(n);return await this.driver.putObject(this.repoId,s,e,t),s}async read(e){let t=this.cache.get(e);if(t)return t;let n=await this.driver.getObject(this.repoId,e);if(!n)throw new Error(`object ${e} not found`);return this.cache.set(e,n),n}async exists(e){return!!await this.driver.hasObject(this.repoId,e)}async ingestPack(e){if(e.byteLength<32)return 0;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0);if(n!==1346454347)throw new Error(`invalid pack signature: 0x${n.toString(16)} (expected 0x5041434b)`);let s=t.getUint32(4);if(s!==2)throw new Error(`unsupported pack version: ${s}`);if(t.getUint32(8)===0)return 0;let i=this.driver,a=this.repoId,l=await jt(e,async c=>{let f=await i.getObject(a,c);return f?{type:f.type,content:new Uint8Array(f.content)}:null});return await i.putObjects(a,l.map(c=>({hash:c.hash,type:c.type,content:c.content}))),l.length}async ingestPackStream(e){let t=[];for await(let n of e)t.push({hash:n.hash,type:n.type,content:n.content});return t.length===0?0:(await this.driver.putObjects(this.repoId,t),t.length)}async findByPrefix(e){return e.length<4?[]:Array.from(await this.driver.findObjectsByPrefix(this.repoId,e))}},Xe=class{constructor(e,t){this.driver=e;this.repoId=t}async readRef(e){return await this.driver.getRef(this.repoId,e)??null}async writeRef(e,t){await this.driver.putRef(this.repoId,e,Tt(t))}async deleteRef(e){await this.driver.removeRef(this.repoId,e)}async listRefs(e){let t=await this.driver.listRefs(this.repoId,e),n=[];for(let s of t)if(s.ref.type==="direct")n.push({name:s.name,hash:s.ref.hash});else if(s.ref.type==="symbolic"){let o=await Ke(i=>this.driver.getRef(this.repoId,i),s.ref.target);o&&n.push({name:s.name,hash:o})}return n}async compareAndSwapRef(e,t,n){return!!await this.driver.atomicRefUpdate(this.repoId,s=>he(s.getRef(e),o=>{let i=o?o.type==="direct"?o.hash:Ke(a=>s.getRef(a),o.target):null;return he(i,a=>{if(t===null){if(o!==null)return!1}else if(a!==t)return!1;return n===null?he(s.removeRef(e),()=>!0):he(s.putRef(e,n),()=>!0)})}))}};function he(r,e){return r instanceof Promise?r.then(e):e(r)}function Ke(r,e,t=0){return t>10?null:he(r(e),n=>n?n.type==="direct"?n.hash:n.type==="symbolic"?Ke(r,n.target,t+1):null:null)}var ln={http:r=>({transport:"http",request:r}),ssh:r=>({transport:"ssh",username:r.username})};function ir(r){if(r.length===0)return!1;for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n===0||n<32||n===127||n===92)return!1}let e=r.split("/");for(let t of e)if(t.length===0||t.charCodeAt(0)===46)return!1;return!0}function dn(r){if(!r||!r.storage)throw new TypeError("createServer: config.storage is required. Example: createServer({ storage: new MemoryStorage() })");let e=ar(r.storage),t=r.resolve??(b=>b),n=r.autoCreate,{basePath:s}=r;async function o(b){if(!ir(b))return null;let h=await t(b);if(h==null||h!==b&&!ir(h))return null;let R=await e.repo(h);if(R)return{repo:R,repoId:h};if(!n)return null;let w=typeof n=="object"?{defaultBranch:n.defaultBranch}:void 0;return{repo:await e.createRepo(h,w),repoId:h}}let i=hn(r.policy,r.hooks),a=r.session??ln,l=r.packCache===!1?void 0:new le(r.packCache?.maxBytes),c=r.onError===!1?void 0:r.onError??(b=>{let h=b instanceof Error?b.message:String(b);console.error(`[server] Internal error: ${h}`)}),f=!1,d=0,p=null,u=null;function y(){return f?!1:(d++,!0)}function m(){d--,f&&d===0&&p?.()}let g={async fetch(b){if(!y())return new Response("Service Unavailable",{status:503});let h;try{if(!a.http)return new Response("HTTP session builder not configured",{status:501});let R=await a.http(b);if(R instanceof Response)return R;h=R;let w=new URL(b.url),E=decodeURIComponent(w.pathname);if(s){let x=s.replace(/\/+$/,"");if(!E.startsWith(x))return new Response("Not Found",{status:404});E=E.slice(x.length)}if(E.startsWith("/")||(E=`/${E}`),E.endsWith("/info/refs")&&b.method==="GET"){let x=w.searchParams.get("service");if(x!=="git-upload-pack"&&x!=="git-receive-pack")return new Response("Unsupported service",{status:403});let O=Ye(E,"/info/refs"),j=await o(O);if(!j)return new Response("Not Found",{status:404});let P=await de(j.repo,j.repoId,x,i,h);if(T(P))return new Response(P.message??"Forbidden",{status:403});let A=$e(P.refs,x,P.headTarget);return new Response(A,{headers:{"Content-Type":`application/x-${x}-advertisement`,"Cache-Control":"no-cache"}})}if(E.endsWith("/git-upload-pack")&&b.method==="POST"){let x=Ye(E,"/git-upload-pack"),O=await o(x);if(!O)return new Response("Not Found",{status:404});let j=await cr(b),P=await pe(O.repo,j,{cache:l,cacheKey:O.repoId,noDelta:r.packOptions?.noDelta,deltaWindow:r.packOptions?.deltaWindow});return new Response(P,{headers:{"Content-Type":"application/x-git-upload-pack-result"}})}if(E.endsWith("/git-receive-pack")&&b.method==="POST"){let x=Ye(E,"/git-receive-pack"),O=await o(x);if(!O)return new Response("Not Found",{status:404});let j=await cr(b),P=await We(O.repo,j);if(!P.sawFlush&&P.updates.length===0)return new Response("Bad Request",{status:400});let A=P.capabilities.includes("side-band-64k"),B=P.capabilities.includes("report-status");if(!P.unpackOk){if(B){let C=P.updates.map($=>({name:$.ref,ok:!1,error:"unpack failed"}));return new Response(Y(!1,C,A),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}return new Response(new Uint8Array(0),{headers:{"Content-Type":"application/x-git-receive-pack-result"}})}let{refResults:I}=await V({repo:O.repo,repoId:O.repoId,ingestResult:P,hooks:i,session:h});if(B){let C=I.map($=>({name:$.ref,ok:$.ok,error:$.error}));return new Response(Y(!0,C,A),{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(R){return c?.(R,h),new Response("Internal Server Error",{status:500})}finally{m()}},async handleSession(b,h,R){if(!y())return h.writeStderr?.(new TextEncoder().encode(`fatal: server shutting down
|
|
38
|
+
`)),128;try{if(!a.ssh)return h.writeStderr?.(new TextEncoder().encode(`fatal: SSH session builder not configured
|
|
39
|
+
`)),128;let w=await a.ssh(R??{});return await nr(b,h,{resolveRepo:o,hooks:i,packCache:l,packOptions:r.packOptions,session:w,onError:c?E=>c(E,w):void 0})}finally{m()}},async updateRefs(b,h,R){if(!y())throw new Error("Server is shutting down");try{let w=await g.requireRepo(b),E=await Fe(w,h);return V({repo:w,repoId:b,ingestResult:{updates:E,unpackOk:!0,capabilities:[],sawFlush:!0},hooks:i,session:R})}finally{m()}},nodeHandler(b,h){let R=[];b.on("data",w=>R.push(new Uint8Array(w))),b.on("error",()=>{h.writeHead(500),h.end("Internal Server Error")}),b.on("end",()=>{pn(g,b,R,h).catch(()=>{try{h.writeHead(500),h.end("Internal Server Error")}catch{}})})},createRepo:(b,h)=>e.createRepo(b,h),repo:b=>e.repo(b),async requireRepo(b){let h=await e.repo(b);if(!h)throw new Error(`Repository "${b}" not found`);return h},deleteRepo:b=>e.deleteRepo(b),async gc(b,h){if(!y())throw new Error("Server is shutting down");try{let R=await g.requireRepo(b);return or(R,r.storage,b,h)}finally{m()}},get closed(){return f},asNetwork(b="http://git"){return{allowed:[b.endsWith("/")?b:`${b}/`],fetch:(R,w)=>g.fetch(new Request(R,w))}},async close(b){if(f)return u??Promise.resolve();if(f=!0,l?.clear(),d!==0){if(u=new Promise(h=>{p=h}),b?.signal){if(b.signal.aborted){p();return}let h=()=>p?.();b.signal.addEventListener("abort",h,{once:!0}),u.then(()=>b.signal.removeEventListener("abort",h))}return u}}};return g}function Ye(r,e){let t=r.slice(0,-e.length);return t.startsWith("/")&&(t=t.slice(1)),t}async function cr(r){let e=new Uint8Array(await r.arrayBuffer()),t=r.headers.get("content-encoding");if(t==="gzip"||t==="x-gzip"){let n=new DecompressionStream("gzip"),s=n.writable.getWriter();return s.write(e),s.close(),new Uint8Array(await new Response(n.readable).arrayBuffer())}return e}async function pn(r,e,t,n){let s=typeof e.headers.host=="string"?e.headers.host:"localhost",o=new URL(e.url??"/",`http://${s}`),i=new Headers;for(let[u,y]of Object.entries(e.headers))if(y!==void 0)if(Array.isArray(y))for(let m of y)i.append(u,m);else i.set(u,y);let a=e.method??"GET",l;if(a!=="GET"&&a!=="HEAD"){let u=0;for(let g of t)u+=g.byteLength;let y=new Uint8Array(u),m=0;for(let g of t)y.set(g,m),m+=g.byteLength;l=y}let c=new Request(o.href,{method:a,headers:i,body:l}),f=await r.fetch(c),d={};f.headers.forEach((u,y)=>{d[y]=u}),n.writeHead(f.status,d);let p=new Uint8Array(await f.arrayBuffer());p.byteLength>0&&n.write(p),n.end()}function un(r){let{protectedBranches:e=[],denyNonFastForward:t=!1,denyDeletes:n=!1,immutableTags:s=!1}=r,o=new Set(e.map(a=>a.startsWith("refs/")?a:`refs/heads/${a}`)),i={};return o.size>0&&(i.preReceive=async a=>{for(let l of a.updates)if(o.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||n||s)&&(i.update=async a=>{if(n&&a.update.isDelete)return{reject:!0,message:"ref deletion denied"};if(s&&a.update.ref.startsWith("refs/tags/")){if(a.update.isDelete)return{reject:!0,message:"tag deletion denied"};if(!a.update.isCreate)return{reject:!0,message:"tag overwrite denied"}}if(t&&!a.update.isCreate&&!a.update.isDelete&&!a.update.isFF)return{reject:!0,message:"non-fast-forward"}}),i}function hn(r,e){let t=r?un(r):void 0;return t&&e?fr(t,e):t??e}function fr(...r){let e=r.filter(a=>a!=null);if(e.length===0)return{};if(e.length===1)return e[0];let t={},n=e.filter(a=>a.preReceive).map(a=>a.preReceive);n.length>0&&(t.preReceive=async a=>{for(let l of n){let c=await l(a);if(T(c))return c}});let s=e.filter(a=>a.update).map(a=>a.update);s.length>0&&(t.update=async a=>{for(let l of s){let c=await l(a);if(T(c))return c}});let o=e.filter(a=>a.postReceive).map(a=>a.postReceive);o.length>0&&(t.postReceive=async a=>{for(let l of o)try{await l(a)}catch{}});let i=e.filter(a=>a.advertiseRefs).map(a=>a.advertiseRefs);return i.length>0&&(t.advertiseRefs=async a=>{let l=a.refs;for(let c of i){let f=await c({...a,refs:l});if(T(f))return f;f&&(l=f)}return l}),t}var Ve=class{repos=new Set;objects=new Map;refs=new Map;hasRepo(e){return this.repos.has(e)}insertRepo(e){this.repos.add(e)}deleteRepo(e){this.repos.delete(e),this.objects.get(e)?.clear(),this.objects.delete(e),this.refs.get(e)?.clear(),this.refs.delete(e)}getObject(e,t){let n=this.getObjMap(e).get(t);return n?{type:n.type,content:new Uint8Array(n.content)}:null}putObject(e,t,n,s){let o=this.getObjMap(e);o.has(t)||o.set(t,{type:n,content:new Uint8Array(s)})}putObjects(e,t){let n=this.getObjMap(e);for(let s of t)n.has(s.hash)||n.set(s.hash,{type:s.type,content:new Uint8Array(s.content)})}hasObject(e,t){return this.getObjMap(e).has(t)}findObjectsByPrefix(e,t){let n=[];for(let s of this.getObjMap(e).keys())s.startsWith(t)&&n.push(s);return n}listObjectHashes(e){return Array.from(this.getObjMap(e).keys())}deleteObjects(e,t){let n=this.getObjMap(e),s=0;for(let o of t)n.delete(o)&&s++;return s}getRef(e,t){return this.getRefMap(e).get(t)??null}putRef(e,t,n){this.getRefMap(e).set(t,n)}removeRef(e,t){this.getRefMap(e).delete(t)}listRefs(e,t){let n=[];for(let[s,o]of this.getRefMap(e))t&&!s.startsWith(t)||n.push({name:s,ref:o});return n}atomicRefUpdate(e,t){let n=this.getRefMap(e);return t({getRef:s=>n.get(s)??null,putRef:(s,o)=>{n.set(s,o)},removeRef:s=>{n.delete(s)}})}repoIds(){return Array.from(this.repos)}getObjMap(e){let t=this.objects.get(e);return t||(t=new Map,this.objects.set(e,t)),t}getRefMap(e){let t=this.refs.get(e);return t||(t=new Map,this.refs.set(e,t)),t}};var yn=`
|
|
39
40
|
CREATE TABLE IF NOT EXISTS repos (
|
|
40
41
|
id TEXT PRIMARY KEY
|
|
41
42
|
);
|
|
@@ -99,4 +100,4 @@ CREATE TABLE IF NOT EXISTS git_refs (
|
|
|
99
100
|
PRIMARY KEY (repo_id, name)
|
|
100
101
|
);
|
|
101
102
|
`,k={repoInsert:"INSERT INTO repos (id) VALUES ($1)",repoExists:"SELECT 1 FROM repos WHERE id = $1 LIMIT 1",repoDelete:"DELETE FROM repos WHERE id = $1",objInsert:"INSERT INTO git_objects (repo_id, hash, type, content) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING",objRead:"SELECT type, content FROM git_objects WHERE repo_id = $1 AND hash = $2",objExists:"SELECT 1 FROM git_objects WHERE repo_id = $1 AND hash = $2 LIMIT 1",objPrefix:"SELECT hash FROM git_objects WHERE repo_id = $1 AND hash LIKE $2",objDeleteAll:"DELETE FROM git_objects WHERE repo_id = $1",objListHashes:"SELECT hash FROM git_objects WHERE repo_id = $1",refRead:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2",refReadForUpdate:"SELECT type, hash, target FROM git_refs WHERE repo_id = $1 AND name = $2 FOR UPDATE",refWrite:`INSERT INTO git_refs (repo_id, name, type, hash, target) VALUES ($1, $2, $3, $4, $5)
|
|
102
|
-
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"},rt=class r{constructor(e){this.pool=e}static async create(e){return await e.query(Rn),new r(e)}async transaction(e){let t=await this.pool.connect();try{await t.query("BEGIN");let n=await e((s,o)=>t.query(s,o));return await t.query("COMMIT"),n}catch(n){throw await t.query("ROLLBACK"),n}finally{t.release()}}async hasRepo(e){let{rows:t}=await this.pool.query(k.repoExists,[e]);return t.length>0}async insertRepo(e){await this.pool.query(k.repoInsert,[e])}async deleteRepo(e){await this.pool.query(k.repoDelete,[e]),await this.pool.query(k.objDeleteAll,[e]),await this.pool.query(k.refDeleteAll,[e])}async getObject(e,t){let{rows:n}=await this.pool.query(k.objRead,[e,t]),s=n[0];return s?{type:s.type,content:new Uint8Array(s.content)}:null}async putObject(e,t,n,s){await this.pool.query(k.objInsert,[e,t,n,s])}async putObjects(e,t){await this.transaction(async n=>{for(let s of t)await n(k.objInsert,[e,s.hash,s.type,s.content])})}async hasObject(e,t){let{rows:n}=await this.pool.query(k.objExists,[e,t]);return n.length>0}async findObjectsByPrefix(e,t){let{rows:n}=await this.pool.query(k.objPrefix,[e,`${t}%`]);return n.map(s=>s.hash)}async listObjectHashes(e){let{rows:t}=await this.pool.query(k.objListHashes,[e]);return t.map(n=>n.hash)}async deleteObjects(e,t){if(t.length===0)return 0;let{rows:n}=await this.pool.query("DELETE FROM git_objects WHERE repo_id = $1 AND hash = ANY($2::text[]) RETURNING hash",[e,Array.from(t)]);return n.length}async getRef(e,t){let{rows:n}=await this.pool.query(k.refRead,[e,t]);return tt(n[0]??null)}async putRef(e,t,n){n.type==="symbolic"?await this.pool.query(k.refWrite,[e,t,"symbolic",null,n.target]):await this.pool.query(k.refWrite,[e,t,"direct",n.hash,null])}async removeRef(e,t){await this.pool.query(k.refDelete,[e,t])}async listRefs(e,t){let n;return t?{rows:n}=await this.pool.query(k.refList,[e,`${t}%`]):{rows:n}=await this.pool.query(k.refListAll,[e]),n.flatMap(s=>{let o=tt(s);return o?[{name:s.name,ref:o}]:[]})}async atomicRefUpdate(e,t){return this.transaction(async n=>t({getRef:async s=>{let{rows:o}=await n(k.refReadForUpdate,[e,s]);return tt(o[0]??null)},putRef:async(s,o)=>{o.type==="symbolic"?await n(k.refWrite,[e,s,"symbolic",null,o.target]):await n(k.refWrite,[e,s,"direct",o.hash,null])},removeRef:async s=>{await n(k.refDelete,[e,s])}}))}};function tt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}export{et as BetterSqlite3Storage,Je as BunSqliteStorage,Ve as MemoryStorage,rt as PgStorage,de as advertiseRefsWithHooks,V as applyReceivePack,$e as buildRefAdvertisementBytes,_e as buildRefListBytes,
|
|
103
|
+
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"},rt=class r{constructor(e){this.pool=e}static async create(e){return await e.query(Rn),new r(e)}async transaction(e){let t=await this.pool.connect();try{await t.query("BEGIN");let n=await e((s,o)=>t.query(s,o));return await t.query("COMMIT"),n}catch(n){throw await t.query("ROLLBACK"),n}finally{t.release()}}async hasRepo(e){let{rows:t}=await this.pool.query(k.repoExists,[e]);return t.length>0}async insertRepo(e){await this.pool.query(k.repoInsert,[e])}async deleteRepo(e){await this.pool.query(k.repoDelete,[e]),await this.pool.query(k.objDeleteAll,[e]),await this.pool.query(k.refDeleteAll,[e])}async getObject(e,t){let{rows:n}=await this.pool.query(k.objRead,[e,t]),s=n[0];return s?{type:s.type,content:new Uint8Array(s.content)}:null}async putObject(e,t,n,s){await this.pool.query(k.objInsert,[e,t,n,s])}async putObjects(e,t){await this.transaction(async n=>{for(let s of t)await n(k.objInsert,[e,s.hash,s.type,s.content])})}async hasObject(e,t){let{rows:n}=await this.pool.query(k.objExists,[e,t]);return n.length>0}async findObjectsByPrefix(e,t){let{rows:n}=await this.pool.query(k.objPrefix,[e,`${t}%`]);return n.map(s=>s.hash)}async listObjectHashes(e){let{rows:t}=await this.pool.query(k.objListHashes,[e]);return t.map(n=>n.hash)}async deleteObjects(e,t){if(t.length===0)return 0;let{rows:n}=await this.pool.query("DELETE FROM git_objects WHERE repo_id = $1 AND hash = ANY($2::text[]) RETURNING hash",[e,Array.from(t)]);return n.length}async getRef(e,t){let{rows:n}=await this.pool.query(k.refRead,[e,t]);return tt(n[0]??null)}async putRef(e,t,n){n.type==="symbolic"?await this.pool.query(k.refWrite,[e,t,"symbolic",null,n.target]):await this.pool.query(k.refWrite,[e,t,"direct",n.hash,null])}async removeRef(e,t){await this.pool.query(k.refDelete,[e,t])}async listRefs(e,t){let n;return t?{rows:n}=await this.pool.query(k.refList,[e,`${t}%`]):{rows:n}=await this.pool.query(k.refListAll,[e]),n.flatMap(s=>{let o=tt(s);return o?[{name:s.name,ref:o}]:[]})}async atomicRefUpdate(e,t){return this.transaction(async n=>t({getRef:async s=>{let{rows:o}=await n(k.refReadForUpdate,[e,s]);return tt(o[0]??null)},putRef:async(s,o)=>{o.type==="symbolic"?await n(k.refWrite,[e,s,"symbolic",null,o.target]):await n(k.refWrite,[e,s,"direct",o.hash,null])},removeRef:async s=>{await n(k.refDelete,[e,s])}}))}};function tt(r){return r?r.type==="symbolic"&&r.target?{type:"symbolic",target:r.target}:r.type==="direct"&&r.hash?{type:"direct",hash:r.hash}:null:null}export{et as BetterSqlite3Storage,Je as BunSqliteStorage,Ve as MemoryStorage,rt as PgStorage,de as advertiseRefsWithHooks,V as applyReceivePack,$e as buildRefAdvertisementBytes,_e as buildRefListBytes,ke as buildRefListPktLines,er as collectRefs,fr as composeHooks,dn as createServer,pe as handleUploadPack,We as ingestReceivePack,Ge as ingestReceivePackFromStream,Fe as resolveRefUpdates};
|