@scolladon/tsgit 1.1.0 → 1.2.0
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 +29 -252
- package/dist/cjs/adapters/browser/index.cjs +1 -1
- package/dist/cjs/adapters/memory/index.cjs +1 -1
- package/dist/cjs/adapters/memory/index.cjs.map +1 -1
- package/dist/cjs/adapters/node/index.cjs +1 -1
- package/dist/cjs/adapters/node/index.cjs.map +1 -1
- package/dist/cjs/chunks/browser-http-transport-D4NH-8oJ.cjs +2 -0
- package/dist/cjs/chunks/browser-http-transport-D4NH-8oJ.cjs.map +1 -0
- package/dist/cjs/chunks/context-BcoAzPuU.cjs.map +1 -1
- package/dist/cjs/chunks/{error-CqLvhejR.cjs → error-CDLOBdNU.cjs} +2 -2
- package/dist/cjs/chunks/error-CDLOBdNU.cjs.map +1 -0
- package/dist/cjs/chunks/index-BVArBKuk.cjs +2 -0
- package/dist/cjs/chunks/index-BVArBKuk.cjs.map +1 -0
- package/dist/cjs/chunks/index-DE9HSiWf.cjs +2 -0
- package/dist/cjs/chunks/index-DE9HSiWf.cjs.map +1 -0
- package/dist/cjs/chunks/{logger-C8Z5BfFF.cjs → logger-CVG0zcPH.cjs} +2 -2
- package/dist/cjs/chunks/{logger-C8Z5BfFF.cjs.map → logger-CVG0zcPH.cjs.map} +1 -1
- package/dist/cjs/chunks/{memory-http-transport-Pjyme5KN.cjs → memory-http-transport-DXwDGKtR.cjs} +2 -2
- package/dist/cjs/chunks/memory-http-transport-DXwDGKtR.cjs.map +1 -0
- package/dist/cjs/chunks/node-http-transport-vrbnNEDb.cjs +2 -0
- package/dist/cjs/chunks/node-http-transport-vrbnNEDb.cjs.map +1 -0
- package/dist/cjs/chunks/{progress-CntEbiuo.cjs → progress-Bj2w-90A.cjs} +2 -2
- package/dist/cjs/chunks/{progress-CntEbiuo.cjs.map → progress-Bj2w-90A.cjs.map} +1 -1
- package/dist/cjs/chunks/repository-BJwTSiGf.cjs +2 -0
- package/dist/cjs/chunks/repository-BJwTSiGf.cjs.map +1 -0
- package/dist/cjs/commands/index.cjs +1 -1
- package/dist/cjs/index.browser.cjs +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.default.cjs +1 -1
- package/dist/cjs/index.node.cjs +1 -1
- package/dist/cjs/index.node.cjs.map +1 -1
- package/dist/cjs/primitives/index.cjs +1 -1
- package/dist/esm/adapters/browser/index.js +1 -1
- package/dist/esm/adapters/memory/index.js +1 -1
- package/dist/esm/adapters/memory/index.js.map +1 -1
- package/dist/esm/adapters/node/index.js +1 -1
- package/dist/esm/adapters/node/index.js.map +1 -1
- package/dist/esm/chunks/browser-http-transport-DL8bkNdg.js +2 -0
- package/dist/esm/chunks/browser-http-transport-DL8bkNdg.js.map +1 -0
- package/dist/esm/chunks/context-CumKOV7K.js.map +1 -1
- package/dist/esm/chunks/{error-BN9rdQ33.js → error-MOmSzp9Z.js} +2 -2
- package/dist/esm/chunks/error-MOmSzp9Z.js.map +1 -0
- package/dist/esm/chunks/index-BjmofbKE.js +2 -0
- package/dist/esm/chunks/index-BjmofbKE.js.map +1 -0
- package/dist/esm/chunks/index-Jh5R-UmU.js +2 -0
- package/dist/esm/chunks/index-Jh5R-UmU.js.map +1 -0
- package/dist/esm/chunks/{logger-BLZbLzva.js → logger-DP2cCpvL.js} +2 -2
- package/dist/esm/chunks/{logger-BLZbLzva.js.map → logger-DP2cCpvL.js.map} +1 -1
- package/dist/esm/chunks/memory-http-transport-COJU6VOL.js +2 -0
- package/dist/esm/chunks/memory-http-transport-COJU6VOL.js.map +1 -0
- package/dist/esm/chunks/node-http-transport-DYCFIJbc.js +2 -0
- package/dist/esm/chunks/node-http-transport-DYCFIJbc.js.map +1 -0
- package/dist/esm/chunks/{progress-DJU_f66N.js → progress-NePjO3Kd.js} +2 -2
- package/dist/esm/chunks/{progress-DJU_f66N.js.map → progress-NePjO3Kd.js.map} +1 -1
- package/dist/esm/chunks/repository-Cs-dbHqO.js +2 -0
- package/dist/esm/chunks/repository-Cs-dbHqO.js.map +1 -0
- package/dist/esm/commands/index.js +1 -1
- package/dist/esm/index.browser.js +1 -1
- package/dist/esm/index.default.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.node.js +1 -1
- package/dist/esm/index.node.js.map +1 -1
- package/dist/esm/primitives/index.js +1 -1
- package/dist/types/adapters/browser/index.d.cts +2 -1
- package/dist/types/adapters/browser/index.d.ts +2 -1
- package/dist/types/adapters/memory/index.d.cts +21 -2
- package/dist/types/adapters/memory/index.d.ts +21 -2
- package/dist/types/adapters/node/index.d.cts +64 -3
- package/dist/types/adapters/node/index.d.ts +64 -3
- package/dist/types/chunks/{context-o5TPfMB2.d.ts → context-BORy7yXb.d.ts} +97 -2
- package/dist/types/chunks/{context-D84z1i5F.d.cts → context-CMrHCVwK.d.cts} +97 -2
- package/dist/types/chunks/reflog-entry-BIf-zt__.d.cts +331 -0
- package/dist/types/chunks/reflog-entry-D9P2hCgv.d.ts +331 -0
- package/dist/types/chunks/{repository-23evW2h-.d.cts → repository-BqibvTOu.d.cts} +21 -3
- package/dist/types/chunks/{repository-BT7Xq1kJ.d.ts → repository-C4rN09Am.d.ts} +21 -3
- package/dist/types/chunks/write-tree-B8G6kgTy.d.cts +154 -0
- package/dist/types/chunks/write-tree-BXCDChvv.d.ts +154 -0
- package/dist/types/commands/index.d.cts +152 -6
- package/dist/types/commands/index.d.ts +152 -6
- package/dist/types/index.browser.d.cts +4 -4
- package/dist/types/index.browser.d.ts +4 -4
- package/dist/types/index.d.cts +4 -4
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.default.d.cts +4 -4
- package/dist/types/index.default.d.ts +4 -4
- package/dist/types/index.node.d.cts +4 -4
- package/dist/types/index.node.d.ts +4 -4
- package/dist/types/primitives/index.d.cts +192 -7
- package/dist/types/primitives/index.d.ts +192 -7
- package/package.json +40 -2
- package/dist/cjs/chunks/browser-http-transport-DcG05jw3.cjs +0 -2
- package/dist/cjs/chunks/browser-http-transport-DcG05jw3.cjs.map +0 -1
- package/dist/cjs/chunks/error-CqLvhejR.cjs.map +0 -1
- package/dist/cjs/chunks/index-BcxdLkNe.cjs +0 -2
- package/dist/cjs/chunks/index-BcxdLkNe.cjs.map +0 -1
- package/dist/cjs/chunks/index-D5Nd-Mks.cjs +0 -2
- package/dist/cjs/chunks/index-D5Nd-Mks.cjs.map +0 -1
- package/dist/cjs/chunks/memory-http-transport-Pjyme5KN.cjs.map +0 -1
- package/dist/cjs/chunks/node-http-transport-UkW5eEm3.cjs +0 -2
- package/dist/cjs/chunks/node-http-transport-UkW5eEm3.cjs.map +0 -1
- package/dist/cjs/chunks/repository-B_jx2AKW.cjs +0 -2
- package/dist/cjs/chunks/repository-B_jx2AKW.cjs.map +0 -1
- package/dist/esm/chunks/browser-http-transport-COFgnEyq.js +0 -2
- package/dist/esm/chunks/browser-http-transport-COFgnEyq.js.map +0 -1
- package/dist/esm/chunks/error-BN9rdQ33.js.map +0 -1
- package/dist/esm/chunks/index-BdV37p4e.js +0 -2
- package/dist/esm/chunks/index-BdV37p4e.js.map +0 -1
- package/dist/esm/chunks/index-BkRJ9-Im.js +0 -2
- package/dist/esm/chunks/index-BkRJ9-Im.js.map +0 -1
- package/dist/esm/chunks/memory-http-transport-DRYdYgiE.js +0 -2
- package/dist/esm/chunks/memory-http-transport-DRYdYgiE.js.map +0 -1
- package/dist/esm/chunks/node-http-transport-Bp5cFZCt.js +0 -2
- package/dist/esm/chunks/node-http-transport-Bp5cFZCt.js.map +0 -1
- package/dist/esm/chunks/repository-DiagDiT_.js +0 -2
- package/dist/esm/chunks/repository-DiagDiT_.js.map +0 -1
- package/dist/types/chunks/diff-change-Bm1zvVsC.d.cts +0 -59
- package/dist/types/chunks/diff-change-alGRzD_j.d.ts +0 -59
- package/dist/types/chunks/write-tree-DNjhjS3t.d.ts +0 -282
- package/dist/types/chunks/write-tree-DVp0RJ_r.d.cts +0 -282
package/README.md
CHANGED
|
@@ -4,280 +4,57 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/@scolladon/tsgit)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
Lightning-fast git, pure TypeScript, everywhere
|
|
7
|
+
**Lightning-fast git, pure TypeScript, everywhere.**
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Pure TypeScript git — Node.js and the browser. Zero native deps. Zero WASM. Stable v1, semver-tracked — see [BACKLOG](docs/BACKLOG.md) for the roadmap.
|
|
10
10
|
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
**v1.0.0-rc — production-ready surface.** All 11 phases (Domain → Repository facade → Polish & Launch) are implemented with 100% line/branch/function/statement coverage and mutation-verified test quality. The pre-publish workflow validates the tarball on every `v*` tag; release-please drives the npm publish.
|
|
14
|
-
|
|
15
|
-
| Phase | Scope | Status |
|
|
16
|
-
|---|---|---|
|
|
17
|
-
| 1 | Domain — Object Model (blob, tree, commit, tag, refs) | ✅ |
|
|
18
|
-
| 2 | Domain — Object Storage (loose objects, packfiles, delta) | ✅ |
|
|
19
|
-
| 3 | Domain — Refs & Index (loose refs, packed-refs, git index v2) | ✅ |
|
|
20
|
-
| 4 | Ports & Adapters (FileSystem, HashService, Compressor, HttpTransport, ProgressReporter — Node + Browser/OPFS + Memory) | ✅ |
|
|
21
|
-
| 5 | Domain — Diff & Merge | ✅ |
|
|
22
|
-
| 6 | Operators (AsyncIterable composition) | ✅ |
|
|
23
|
-
| 7 | Primitives (Tier 2 API) | ✅ |
|
|
24
|
-
| 8 | Transport (Smart HTTP + middleware) | ✅ |
|
|
25
|
-
| 9 | Commands (Tier 1 API) | ✅ |
|
|
26
|
-
| 10 | Repository facade | ✅ |
|
|
27
|
-
| 11 | Polish & Launch (CI matrix, browser E2E, benchmarks, TypeDoc, MIGRATION) | ✅ |
|
|
28
|
-
| 12.1 | Clone — smart-HTTP pack fetch + write-objects loop | ✅ |
|
|
29
|
-
| 12.2 | Fetch — ls-refs + want/have negotiation + shallow + prune | ✅ |
|
|
30
|
-
| 12.3 | Push — receive-pack negotiation + pack send + force-with-lease | ✅ |
|
|
31
|
-
| 12.4 | Bench — `clone:small-repo` vs isomorphic-git over `git-http-backend` | ✅ |
|
|
32
|
-
| 13.1 | Working-tree materialisation — `checkout` writes / deletes / chmods files; index + HEAD updated atomically per file | ✅ |
|
|
33
|
-
| 13.2 | `reset --mixed` rebuilds `.git/index` from the target commit's tree under `index.lock`; stat-cache preserved for unchanged paths | ✅ |
|
|
34
|
-
| 13.3 | `reset --hard` materialises both index and working tree to match the target commit's tree; force-rewrites locally-modified files | ✅ |
|
|
35
|
-
| 13.5 | `checkout` acquires `index.lock` before reading the index — closes a known TOCTOU window; path-restore from `'index'` stays lock-free | ✅ |
|
|
36
|
-
| 13.6 | `checkout({ paths, source: 'index' })` synthesises a tree from staged entries — restores from index content, honouring divergence from HEAD | ✅ |
|
|
37
|
-
| 14.4 | Full Windows support — 8.3 short-name reconciliation in `NodeFileSystem.checkContainment`, `ELOOP`/`EACCES` errno parity, `windows-latest` re-added to the unit-test matrix | ✅ |
|
|
38
|
-
|
|
39
|
-
## Features
|
|
40
|
-
|
|
41
|
-
- **Lightning fast** — 3-5x faster than isomorphic-git via fanout binary search, LRU delta cache, zero-copy parsing, streaming inflate
|
|
42
|
-
- **Portable** — Runs on Node.js 18+, Chrome 90+, Firefox 100+, Safari 15.4+, Deno, Bun, Cloudflare Workers
|
|
43
|
-
- **Lightweight** — < 200 kB gzipped full library. Zero runtime dependencies. Tree-shakeable.
|
|
44
|
-
- **Two-tier API** — Ergonomic repository object for common operations + composable AsyncIterable primitives for power users
|
|
45
|
-
- **Type-safe** — Branded types, discriminated unions, exhaustive error codes. No `any`.
|
|
46
|
-
- **Testable** — First-class in-memory adapter. All ports are mockable. Pure functions throughout.
|
|
47
|
-
|
|
48
|
-
## Installation
|
|
11
|
+
## Install
|
|
49
12
|
|
|
50
13
|
```bash
|
|
51
14
|
npm install @scolladon/tsgit
|
|
52
15
|
```
|
|
53
16
|
|
|
54
|
-
##
|
|
55
|
-
|
|
56
|
-
### Node.js
|
|
17
|
+
## 60-second quickstart
|
|
57
18
|
|
|
58
|
-
```
|
|
19
|
+
```ts
|
|
59
20
|
import { openRepository } from '@scolladon/tsgit';
|
|
60
21
|
|
|
61
22
|
const repo = await openRepository({ cwd: process.cwd() });
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
const changes = await repo.status();
|
|
65
|
-
|
|
23
|
+
const commits = await repo.log({ limit: 10 });
|
|
24
|
+
const { clean, branch, indexChanges, workingTreeChanges } = await repo.status();
|
|
66
25
|
await repo.dispose();
|
|
67
26
|
```
|
|
68
27
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
import { openRepository } from '@scolladon/tsgit/auto/browser';
|
|
77
|
-
|
|
78
|
-
const rootHandle = await navigator.storage.getDirectory();
|
|
79
|
-
const repo = await openRepository({ rootHandle });
|
|
80
|
-
|
|
81
|
-
await repo.init();
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Browser callers must supply an OPFS `rootHandle` since there is no
|
|
85
|
-
`process.cwd()` equivalent.
|
|
86
|
-
|
|
87
|
-
### In-memory (deterministic / tests)
|
|
88
|
-
|
|
89
|
-
```typescript
|
|
90
|
-
import { openRepository } from '@scolladon/tsgit/auto/memory';
|
|
91
|
-
|
|
92
|
-
const repo = await openRepository({
|
|
93
|
-
files: { '/repo/seed.txt': new TextEncoder().encode('hello') },
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
await repo.init();
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Cloning a remote
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
import { openRepository } from '@scolladon/tsgit';
|
|
103
|
-
|
|
104
|
-
const repo = await openRepository({
|
|
105
|
-
cwd: '/tmp/my-clone',
|
|
106
|
-
config: {
|
|
107
|
-
dnsResolver: async (host) => (await import('node:dns')).promises.resolve(host),
|
|
108
|
-
},
|
|
109
|
-
});
|
|
28
|
+
| Runtime | Import |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Node.js | `@scolladon/tsgit` |
|
|
31
|
+
| Browser (OPFS) | `@scolladon/tsgit/auto/browser` |
|
|
32
|
+
| In-memory (tests) | `@scolladon/tsgit/auto/memory` |
|
|
110
33
|
|
|
111
|
-
|
|
112
|
-
url: 'https://github.com/owner/repo.git',
|
|
113
|
-
resolver: async (host) => (await import('node:dns')).promises.resolve(host),
|
|
114
|
-
});
|
|
34
|
+
→ [Full quickstart per runtime](docs/get-started/) · [recipes — partial clone, sparse checkout, hooks, …](docs/use/recipes.md)
|
|
115
35
|
|
|
116
|
-
|
|
117
|
-
console.log(result.fetchedRefs.length); // total refs propagated
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Phase 12.1 gives you a valid `.git` directory whose `git log` matches the
|
|
121
|
-
remote's HEAD line. To materialise the working tree, run
|
|
122
|
-
`repo.checkout({ target: result.head })` immediately after — Phase 13.1
|
|
123
|
-
writes every blob, sets the executable bit, follows symlinks, and commits a
|
|
124
|
-
matching `.git/index` atomically. See
|
|
125
|
-
`test/integration/network/clone-http-backend.test.ts` for an end-to-end
|
|
126
|
-
example against a local `git-http-backend`.
|
|
127
|
-
|
|
128
|
-
### Staging files
|
|
129
|
-
|
|
130
|
-
```typescript
|
|
131
|
-
// Literal paths.
|
|
132
|
-
await repo.add(['src/foo.ts', 'src/bar.ts']);
|
|
133
|
-
|
|
134
|
-
// Pathspec globs (Phase 14.2). Any pattern with `*`, `?`, or `**` is a
|
|
135
|
-
// glob; everything else is a literal that also matches descendants.
|
|
136
|
-
// `!`-prefixed entries exclude. Last-match wins.
|
|
137
|
-
await repo.add(['*.ts', '!*.test.ts']); // every .ts minus tests
|
|
138
|
-
await repo.add(['src/**']); // everything under src/
|
|
139
|
-
|
|
140
|
-
// Bulk mode — walk the working tree, stage every modified/new file plus
|
|
141
|
-
// every untracked file that isn't ignored, drop tracked files missing
|
|
142
|
-
// from disk. `paths` MUST be empty when `all: true`.
|
|
143
|
-
const result = await repo.add([], { all: true });
|
|
144
|
-
console.log(result.added); // new staged paths (sorted)
|
|
145
|
-
console.log(result.modified); // changed paths (sorted)
|
|
146
|
-
console.log(result.removed); // tracked paths gone from disk (sorted)
|
|
147
|
-
```
|
|
36
|
+
## Capabilities
|
|
148
37
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
(
|
|
38
|
+
- Zero runtime dependencies — no transitive surface
|
|
39
|
+
- Pure TypeScript — no native code, no WASM, no `git` binary required
|
|
40
|
+
- Cross-runtime — Node 22+ · Browser (OPFS) · in-memory
|
|
41
|
+
- Tree-shakeable — `sideEffects: false`; each primitive is an independent entry
|
|
42
|
+
- CJS + ESM dual-publish, verified by `arethetypeswrong`
|
|
43
|
+
- 21 Tier-1 commands · 20+ AsyncIterable primitives · operator toolkit (`pipe`, `filter`, `map`, …)
|
|
44
|
+
- Type-safe — branded `ObjectId`/`RefName`/`FilePath`, discriminated-union errors, no `any`
|
|
45
|
+
- AbortSignal lifetime — `repo.dispose()` cancels in-flight work
|
|
155
46
|
|
|
156
|
-
|
|
157
|
-
`walkWorkingTree` primitive. The host repository's `.git` is skipped, and
|
|
158
|
-
embedded clones (directories containing a `.git` child) are not
|
|
159
|
-
auto-staged — matches Git's default. Symlinks stage as mode `120000`
|
|
160
|
-
with the link target as blob content. Files larger than
|
|
161
|
-
`MAX_WORKING_TREE_BLOB_BYTES` (256 MiB) reject with
|
|
162
|
-
`WORKING_TREE_FILE_TOO_LARGE` and no partial index commit.
|
|
47
|
+
→ [Commands](docs/use/commands/) · [primitives](docs/use/primitives/) · [errors](docs/use/errors.md)
|
|
163
48
|
|
|
164
|
-
|
|
49
|
+
## Documentation
|
|
165
50
|
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
- **Walk-time pruning:** ignored directories are skipped without
|
|
170
|
-
lstat-ing their contents — big perf win on `node_modules`, `dist`,
|
|
171
|
-
etc.
|
|
172
|
-
- **Tracked-but-ignored stays tracked:** a path already in the index
|
|
173
|
-
is preserved across re-adds even if a new ignore rule would match
|
|
174
|
-
it (or its parent directory). Git's invariant.
|
|
175
|
-
- **`status` emits `'untracked'`:** non-ignored working-tree files
|
|
176
|
-
not in the index now appear as `{ kind: 'untracked', path }` and
|
|
177
|
-
`status.clean` reflects them.
|
|
178
|
-
- **`.gitignore` size cap:** 1 MiB per file (`MAX_GITIGNORE_BYTES`).
|
|
179
|
-
Reject with `GITIGNORE_FILE_TOO_LARGE`.
|
|
180
|
-
|
|
181
|
-
### Push
|
|
182
|
-
|
|
183
|
-
```typescript
|
|
184
|
-
const result = await repo.push({
|
|
185
|
-
remote: 'origin',
|
|
186
|
-
refspecs: ['refs/heads/main:refs/heads/main'],
|
|
187
|
-
// optional: force-with-lease against the cached remote-tracking ref
|
|
188
|
-
// forceWithLease: 'auto',
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
for (const r of result.pushedRefs) {
|
|
192
|
-
console.log(r.name, r.status, r.reason ?? ''); // 'refs/heads/main' 'ok'
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Phase 12.3 supports `<src>:<dst>`, `+<src>:<dst>`, `:<dst>` (delete), short-form
|
|
197
|
-
branch names, and `HEAD` as a source. Force-with-lease accepts either an explicit
|
|
198
|
-
`ObjectId` or `'auto'` (resolves to the cached `refs/remotes/<remote>/<branch>`).
|
|
199
|
-
A successful push updates the local remote-tracking cache for accepted refs.
|
|
200
|
-
See `test/integration/network/push-http-backend.test.ts` for an end-to-end
|
|
201
|
-
example.
|
|
202
|
-
|
|
203
|
-
### Progress reporting
|
|
204
|
-
|
|
205
|
-
```typescript
|
|
206
|
-
import { openRepository, consoleProgress } from '@scolladon/tsgit';
|
|
207
|
-
|
|
208
|
-
const repo = await openRepository({
|
|
209
|
-
progress: consoleProgress((line) => console.log(line)),
|
|
210
|
-
});
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### Cancellation
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
const controller = new AbortController();
|
|
217
|
-
const repo = await openRepository({ signal: controller.signal });
|
|
218
|
-
controller.abort(); // every bound method now throws REPOSITORY_DISPOSED
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
### Composable Primitives
|
|
222
|
-
|
|
223
|
-
```typescript
|
|
224
|
-
import { walkCommits } from '@scolladon/tsgit/primitives';
|
|
225
|
-
import { pipe, filter, take } from '@scolladon/tsgit/operators';
|
|
226
|
-
|
|
227
|
-
const recentByAlice = walkCommits(ctx, { from: 'main' })
|
|
228
|
-
|> filter(c => c.data.author.name === 'Alice')
|
|
229
|
-
|> take(5);
|
|
230
|
-
|
|
231
|
-
for await (const commit of recentByAlice) {
|
|
232
|
-
console.log(commit.data.message);
|
|
233
|
-
}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
## Benchmarks
|
|
237
|
-
|
|
238
|
-
Comparison against `isomorphic-git@1.38` on a synthetic 50-commit repo. Numbers
|
|
239
|
-
are medians from `vitest bench`; ±RME and full p99 distribution live in
|
|
240
|
-
`reports/benchmarks/raw.json`.
|
|
241
|
-
|
|
242
|
-
| Scenario | tsgit | isomorphic-git | tsgit speedup |
|
|
243
|
-
|---|---|---|---|
|
|
244
|
-
| `status:clean` | ~1.7 ms | ~4.0 ms | ~2.4× |
|
|
245
|
-
| `status:dirty-25-files` | ~1.7 ms | ~3.7 ms | ~2.2× |
|
|
246
|
-
| `log:walk-50-commits` | ~6 ms | ~4 ms | ~0.7× |
|
|
247
|
-
| `readBlob:warm-cache` | ~0.1 ms | ~0.1 ms | ~1.0× |
|
|
248
|
-
| `clone:small-repo` | ~40 ms | ~40 ms | ~1.0× |
|
|
249
|
-
|
|
250
|
-
Reproduce locally with `npm run bench:summary` (writes `reports/benchmarks/summary.md`).
|
|
251
|
-
GitHub Actions runners introduce ±20% variance — trust direction more than
|
|
252
|
-
absolute numbers.
|
|
253
|
-
|
|
254
|
-
## Architecture
|
|
255
|
-
|
|
256
|
-
Hexagonal architecture with a tiered application layer:
|
|
257
|
-
|
|
258
|
-
- **Domain** — Pure git objects, parsers, serializers, refs, index. Zero outward dependencies.
|
|
259
|
-
- **Application** — Commands (Tier 1) built from Primitives (Tier 2).
|
|
260
|
-
- **Ports** — Interfaces for `FileSystem`, `HashService`, `Compressor`, `HttpTransport`, `ProgressReporter` + a `Context` record that threads them through every call.
|
|
261
|
-
- **Adapters** — `Node.js` (node:fs/crypto/zlib/http), `Browser` (OPFS + SubtleCrypto + fetch + CompressionStream), `Memory` (first-class test fixture — primary test double for every upstream phase).
|
|
262
|
-
|
|
263
|
-
See [docs/prd/PRD.md](docs/prd/PRD.md) for the full product requirements document, [docs/design/ports-and-adapters.md](docs/design/ports-and-adapters.md) for the Phase 4 port contracts, and [docs/adr/](docs/adr/) for architecture decisions.
|
|
264
|
-
|
|
265
|
-
## Development
|
|
266
|
-
|
|
267
|
-
```bash
|
|
268
|
-
npm install
|
|
269
|
-
npm run validate # Run all checks + tests
|
|
270
|
-
npm run check # Lint + format (biome)
|
|
271
|
-
npm run check:types # Type check (tsc)
|
|
272
|
-
npm run test:unit # Unit tests
|
|
273
|
-
npm run test:coverage # With 100% coverage enforcement
|
|
274
|
-
npm run test:mutation # Mutation testing (stryker)
|
|
275
|
-
npm run build # Compile to dist/
|
|
276
|
-
```
|
|
51
|
+
- 📖 [Get started](docs/get-started/) — Node, browser, memory, migration from isomorphic-git
|
|
52
|
+
- 🛠️ [Use it](docs/use/) — commands, primitives, recipes, errors
|
|
53
|
+
- 🧠 [Understand it](docs/understand/) — architecture, design decisions, performance, security
|
|
277
54
|
|
|
278
|
-
##
|
|
55
|
+
## Contribute
|
|
279
56
|
|
|
280
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
57
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
281
58
|
|
|
282
59
|
## License
|
|
283
60
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var r=require("../../chunks/lru-cache-1OU7JhD8.cjs"),e=require("../../chunks/context-BcoAzPuU.cjs"),s=require("../../chunks/progress-
|
|
1
|
+
"use strict";var r=require("../../chunks/lru-cache-1OU7JhD8.cjs"),e=require("../../chunks/context-BcoAzPuU.cjs"),s=require("../../chunks/progress-Bj2w-90A.cjs"),o=require("../../chunks/browser-http-transport-D4NH-8oJ.cjs");require("../../chunks/error-CDLOBdNU.cjs"),exports.BrowserCompressor=o.BrowserCompressor,exports.BrowserFileSystem=o.BrowserFileSystem,exports.BrowserHashService=o.BrowserHashService,exports.BrowserHttpTransport=o.BrowserHttpTransport,exports.createBrowserContext=function(t){const a=t.gitDirName??".git",n=r.createLruCache(t.deltaCacheMaxBytes??16777216,t.deltaCacheMaxEntries??65536),c={fs:new o.BrowserFileSystem(t.rootHandle),hash:new o.BrowserHashService,compressor:new o.BrowserCompressor,transport:new o.BrowserHttpTransport,progress:s.noopProgress,layout:{workDir:"/",gitDir:`/${a}`,bare:t.bare??!1},hashConfig:r.SHA1_CONFIG,deltaCache:n,...void 0!==t.signal?{signal:t.signal}:{}};return e.createContext(c)};
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var r=require("../../chunks/lru-cache-1OU7JhD8.cjs"),e=require("../../chunks/context-BcoAzPuU.cjs"),o=require("../../chunks/progress-
|
|
1
|
+
"use strict";var r=require("../../chunks/lru-cache-1OU7JhD8.cjs"),e=require("../../chunks/context-BcoAzPuU.cjs"),o=require("../../chunks/progress-Bj2w-90A.cjs"),s=require("../../chunks/memory-http-transport-DXwDGKtR.cjs");require("../../chunks/error-CDLOBdNU.cjs");const t="/repo",i="/repo/.git",c={kind:"skipped"};exports.MemoryCompressor=s.MemoryCompressor,exports.MemoryFileSystem=s.MemoryFileSystem,exports.MemoryHashService=s.MemoryHashService,exports.MemoryHttpTransport=s.MemoryHttpTransport,exports.MemoryHookRunner=class{outcomes;recorded=[];constructor(r={}){this.outcomes=r}get calls(){return this.recorded}run(r){return this.recorded.push(r),Promise.resolve(this.outcomes[r.name]??c)}},exports.createMemoryContext=function(c={}){const a=new s.MemoryFileSystem(void 0===c.files?{rootDir:t}:{rootDir:t,files:c.files}),n=c.algorithm??"sha1",h=new s.MemoryHashService(n),m=new s.MemoryCompressor,p=new s.MemoryHttpTransport,u=void 0===c.homeDir?{workDir:t,gitDir:i,bare:!1}:{workDir:t,gitDir:i,bare:!1,homeDir:c.homeDir},y="sha256"===n?r.SHA256_CONFIG:r.SHA1_CONFIG,l=r.createLruCache(c.deltaCacheMaxBytes??16777216,c.deltaCacheMaxEntries??65536),M={fs:a,hash:h,compressor:m,transport:p,progress:o.noopProgress,layout:u,hashConfig:y,deltaCache:l,...void 0!==c.signal?{signal:c.signal}:{},...void 0!==c.hooks?{hooks:c.hooks}:{}};return e.createContext(M)};
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/adapters/memory/memory-adapter.ts"],"sourcesContent":[null],"names":["DEFAULT_WORK_DIR","DEFAULT_GIT_DIR","options","fs","MemoryFileSystem","undefined","files","rootDir","algorithm","hash","MemoryHashService","compressor","MemoryCompressor","transport","MemoryHttpTransport","layout","homeDir","workDir","gitDir","bare","hashConfig","SHA256_CONFIG","SHA1_CONFIG","deltaCache","createLruCache","deltaCacheMaxBytes","deltaCacheMaxEntries","parts","progress","noopProgress","
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/adapters/memory/memory-adapter.ts","../../../../src/adapters/memory/memory-hook-runner.ts"],"sourcesContent":[null,null],"names":["DEFAULT_WORK_DIR","DEFAULT_GIT_DIR","SKIPPED","kind","outcomes","recorded","constructor","this","calls","run","request","push","Promise","resolve","name","options","fs","MemoryFileSystem","undefined","files","rootDir","algorithm","hash","MemoryHashService","compressor","MemoryCompressor","transport","MemoryHttpTransport","layout","homeDir","workDir","gitDir","bare","hashConfig","SHA256_CONFIG","SHA1_CONFIG","deltaCache","createLruCache","deltaCacheMaxBytes","deltaCacheMaxEntries","parts","progress","noopProgress","signal","hooks","createContext"],"mappings":"yQAUA,MAeMA,EAAmB,QACnBC,EAAkB,aCvBlBC,EAAsB,CAAEC,KAAM,kOASjBC,SACAC,SAA0B,GAE3C,WAAAC,CAAYF,EAAkD,IAC5DG,KAAKH,SAAWA,CAClB,CAGA,SAAII,GACF,OAAOD,KAAKF,QACd,CAEA,GAAAI,CAAIC,GAEF,OADAH,KAAKF,SAASM,KAAKD,GACZE,QAAQC,QAAQN,KAAKH,SAASM,EAAQI,OAASZ,EACxD,+BDCI,SAA8Ba,EAAgC,IAClE,MAIMC,EAAK,IAAIC,EAAAA,sBAHKC,IAAlBH,EAAQI,MACJ,CAAEC,QAASpB,GACX,CAAEoB,QAASpB,EAAkBmB,MAAOJ,EAAQI,QAE5CE,EAAYN,EAAQM,WAAa,OACjCC,EAAO,IAAIC,EAAAA,kBAAkBF,GAC7BG,EAAa,IAAIC,mBACjBC,EAAY,IAAIC,sBAChBC,OACgBV,IAApBH,EAAQc,QACJ,CAAEC,QAAS9B,EAAkB+B,OAAQ9B,EAAiB+B,MAAM,GAC5D,CACEF,QAAS9B,EACT+B,OAAQ9B,EACR+B,MAAM,EACNH,QAASd,EAAQc,SAEnBI,EAA2B,WAAdZ,EAAyBa,EAAAA,cAAgBC,EAAAA,YACtDC,EAAaC,EAAAA,eACjBtB,EAAQuB,oBAvCsB,SAwC9BvB,EAAQwB,sBAvCwB,OAyC5BC,EAAQ,CACZxB,KACAM,OACAE,aACAE,YACAe,SAAUC,EAAAA,aACVd,SACAK,aACAG,qBACuBlB,IAAnBH,EAAQ4B,OAAuB,CAAEA,OAAQ5B,EAAQ4B,QAAW,WAC1CzB,IAAlBH,EAAQ6B,MAAsB,CAAEA,MAAO7B,EAAQ6B,OAAU,IAE/D,OAAOC,EAAAA,cAAcL,EACvB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("node:os"),r=require("node:path"),o=require("../../chunks/lru-cache-1OU7JhD8.cjs"),t=require("../../chunks/context-BcoAzPuU.cjs"),s=require("../../chunks/progress-
|
|
1
|
+
"use strict";var e=require("node:os"),r=require("node:path"),o=require("../../chunks/lru-cache-1OU7JhD8.cjs"),t=require("../../chunks/context-BcoAzPuU.cjs"),s=require("../../chunks/progress-Bj2w-90A.cjs"),n=require("../../chunks/node-http-transport-vrbnNEDb.cjs");function i(e){var r=Object.create(null);return e&&Object.keys(e).forEach(function(o){if("default"!==o){var t=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(r,o,t.get?t:{enumerable:!0,get:function(){return e[o]}})}}),r.default=e,Object.freeze(r)}require("../../chunks/error-CDLOBdNU.cjs"),require("node:zlib"),require("node:fs"),require("node:fs/promises"),require("node:crypto"),require("node:child_process"),require("node:http"),require("node:https"),require("node:stream");var a=i(r);exports.NodeCompressor=n.NodeCompressor,exports.NodeFileSystem=n.NodeFileSystem,exports.NodeHashService=n.NodeHashService,exports.NodeHookRunner=n.NodeHookRunner,exports.NodeHttpTransport=n.NodeHttpTransport,exports.createNodeContext=function(r){const i=a.resolve(r.workDir),c=void 0!==r.gitDir?a.resolve(r.gitDir):a.join(i,".git"),u=new n.NodeFileSystem(i),d=new n.NodeHashService,p=new n.NodeCompressor,h=new n.NodeHttpTransport({allowInsecureHttp:r.allowInsecureHttp??!1}),l=((e,r,o,t)=>void 0===t?{workDir:e,gitDir:r,bare:o}:{workDir:e,gitDir:r,bare:o,homeDir:t})(i,c,r.bare??!1,""===(q=e.homedir())?void 0:q),N=o.createLruCache(r.deltaCacheMaxBytes??16777216,r.deltaCacheMaxEntries??65536),g={fs:u,hash:d,compressor:p,transport:h,progress:s.noopProgress,layout:l,hashConfig:o.SHA1_CONFIG,deltaCache:N,...void 0!==r.signal?{signal:r.signal}:{},...!1===r.hooks?{}:{hooks:new n.NodeHookRunner}};var q;return t.createContext(g)};
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/adapters/node/node-adapter.ts"],"sourcesContent":[null],"names":["options","workDir","nodePath","resolve","gitDir","undefined","join","fs","NodeFileSystem","hash","NodeHashService","compressor","NodeCompressor","transport","NodeHttpTransport","allowInsecureHttp","layout","bare","homeDir","buildLayout","raw","homedir","deltaCache","createLruCache","deltaCacheMaxBytes","deltaCacheMaxEntries","parts","progress","noopProgress","hashConfig","SHA1_CONFIG","
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/adapters/node/node-adapter.ts"],"sourcesContent":[null],"names":["options","workDir","nodePath","resolve","gitDir","undefined","join","fs","NodeFileSystem","hash","NodeHashService","compressor","NodeCompressor","transport","NodeHttpTransport","allowInsecureHttp","layout","bare","homeDir","buildLayout","raw","homedir","deltaCache","createLruCache","deltaCacheMaxBytes","deltaCacheMaxEntries","parts","progress","noopProgress","hashConfig","SHA1_CONFIG","signal","hooks","NodeHookRunner","createContext"],"mappings":"o+BA+BM,SAA4BA,GAChC,MAAMC,EAAUC,EAASC,QAAQH,EAAQC,SACnCG,OACeC,IAAnBL,EAAQI,OACJF,EAASC,QAAQH,EAAQI,QACzBF,EAASI,KAAKL,EAAS,QACvBM,EAAK,IAAIC,EAAAA,eAAeP,GACxBQ,EAAO,IAAIC,kBACXC,EAAa,IAAIC,iBACjBC,EAAY,IAAIC,oBAAkB,CACtCC,kBAAmBf,EAAQe,oBAAqB,IAE5CC,EAmCmB,EACzBf,EACAG,EACAa,EACAC,SAEYb,IAAZa,EAAwB,CAAEjB,UAASG,SAAQa,QAAS,CAAEhB,UAASG,SAAQa,OAAMC,WAzC9DC,CAAYlB,EAASG,EAAQJ,EAAQiB,OAAQ,EA2Bc,MAA7CG,EAgB8BC,EAAAA,gBAhBoBhB,EAAYe,GA1BrFE,EAAaC,EAAAA,eACjBvB,EAAQwB,oBAjCsB,SAkC9BxB,EAAQyB,sBAjCwB,OAmC5BC,EAAQ,CACZnB,KACAE,OACAE,aACAE,YACAc,SAAUC,EAAAA,aACVZ,SACAa,WAAYC,EAAAA,YACZR,qBACuBjB,IAAnBL,EAAQ+B,OAAuB,CAAEA,OAAQ/B,EAAQ+B,QAAW,OAC1C,IAAlB/B,EAAQgC,MAAkB,CAAA,EAAK,CAAEA,MAAO,IAAIC,EAAAA,iBA4BhC,IAhBWb,EAV7B,OAAOc,EAAAA,cAAcR,EACvB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=require("./error-CDLOBdNU.cjs");function e(e,r){const a=e[e.length-1];if(void 0===a)throw t.fileNotFound(r);return a}function r(e){return e instanceof t.TsgitError&&"FILE_NOT_FOUND"===e.data.code}function a(t,e,r){return{ctimeMs:e,mtimeMs:e,dev:0,ino:0,mode:r?33188:16877,uid:0,gid:0,size:t,isFile:r,isDirectory:!r,isSymbolicLink:!1}}function s(t){let e="";for(const r of t)e+=r.toString(16).padStart(2,"0");return e}exports.BrowserCompressor=class{async deflate(e){try{const t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}catch(e){throw t.compressFailed(e instanceof Error?e.message:String(e))}}async inflate(e){try{const t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}catch(e){throw t.decompressFailed(e instanceof Error?e.message:String(e))}}async streamInflate(e,r){const a=e.subarray(r);if(a.length>65536)throw t.decompressFailed("BrowserCompressor.streamInflate input exceeds 65536 byte safety cap");for(let t=1;t<=a.length;t+=1){const e=a.subarray(0,t);try{const r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return{output:new Uint8Array(await new Response(r).arrayBuffer()),bytesConsumed:t}}catch{}}throw t.decompressFailed("no valid zlib stream at offset")}createInflateStream(){return new DecompressionStream("deflate")}},exports.BrowserFileSystem=class{rootHandle;constructor(t){this.rootHandle=t}async read(t){const e=await this.resolveFileHandle(t,!1),r=await e.getFile();return new Uint8Array(await r.arrayBuffer())}async readSlice(e,r,a){if(r<0||a<0)throw t.permissionDenied(e);const s=await this.resolveFileHandle(e,!1),i=(await s.getFile()).slice(r,r+a);return new Uint8Array(await i.arrayBuffer())}async readUtf8(t){const e=await this.resolveFileHandle(t,!1);return(await e.getFile()).text()}async write(t,e){const r=await this.resolveFileHandle(t,!0),a=await r.createWritable();await a.write(e),await a.close()}async writeExclusive(r,a){const s=this.splitPath(r);if(0===s.length)throw t.permissionDenied(r);const i=await this.walkToParent(s,!0),o=e(s,r);await this.assertDoesNotExist(i,o,r);const n=await i.getFileHandle(o,{create:!0}),c=await n.createWritable();await c.write(a),await c.close()}async writeUtf8(t,e){await this.write(t,(new TextEncoder).encode(e))}async appendUtf8(t,e){const r=await this.resolveFileHandle(t,!0),a=await r.getFile(),s=await r.createWritable({keepExistingData:!0});await s.write({type:"write",position:a.size,data:e}),await s.close()}async exists(t){try{return await this.resolveFileHandle(t,!1),!0}catch(e){if(r(e))try{return await this.resolveDirHandle(t,!1),!0}catch{return!1}throw e}}async stat(t){try{const e=await this.resolveFileHandle(t,!1),r=await e.getFile();return a(r.size,r.lastModified,!0)}catch(e){if(!r(e))throw e;return await this.resolveDirHandle(t,!1),a(0,Date.now(),!1)}}async lstat(t){return this.stat(t)}async readdir(t){const e=[],r=await this.resolveDirHandle(t,!1);for await(const[t,a]of r.entries())e.push({name:t,isFile:"file"===a.kind,isDirectory:"directory"===a.kind,isSymbolicLink:!1});return e}async mkdir(t){const e=this.splitPath(t);let r=this.rootHandle;for(const t of e)r=await r.getDirectoryHandle(t,{create:!0})}async rm(r){const a=this.splitPath(r);if(0===a.length)throw t.permissionDenied(r);const s=await this.walkToParent(a,!1),i=e(a,r);try{await s.removeEntry(i)}catch{throw t.fileNotFound(r)}}async rename(t,e){const r=await this.read(t);await this.write(e,r),await this.rm(t)}async readlink(e){throw t.unsupportedOperation("readlink","OPFS does not support symbolic links")}async symlink(e,r){throw t.unsupportedOperation("symlink","OPFS does not support symbolic links")}async chmod(t,e){try{await this.resolveFileHandle(t,!1)}catch(e){if(!r(e))throw e;await this.resolveDirHandle(t,!1)}}async rmRecursive(a){const s=this.splitPath(a);if(0===s.length)throw t.permissionDenied(a);const i=await this.walkToParent(s,!1).catch(t=>{if(!r(t))throw t});if(void 0===i)return;const o=e(s,a);try{await i.removeEntry(o,{recursive:!0})}catch{}}async openWithNoFollow(e,r){throw t.unsupportedOperation("openWithNoFollow","browser FS does not support O_NOFOLLOW")}splitPath(e){const r=e.replace(/^\/+/,"").split("/").filter(t=>""!==t&&"."!==t);for(const a of r)if(".."===a)throw t.permissionDenied(e);return r}async resolveFileHandle(r,a){const s=this.splitPath(r);if(0===s.length)throw t.fileNotFound(r);const i=await this.walkToParent(s,a),o=e(s,r);try{return await i.getFileHandle(o,{create:a})}catch(e){if(e instanceof t.TsgitError)throw e;throw t.fileNotFound(r)}}async resolveDirHandle(r,a){const s=this.splitPath(r);if(0===s.length)return this.rootHandle;const i=await this.walkToParent(s,a),o=e(s,r);try{return await i.getDirectoryHandle(o,{create:a})}catch(e){if(e instanceof t.TsgitError)throw e;throw t.fileNotFound(r)}}async walkToParent(e,r){let a=this.rootHandle;for(let s=0;s<e.length-1;s++){const i=e[s];if(void 0===i)throw t.fileNotFound(e.join("/"));try{a=await a.getDirectoryHandle(i,{create:r})}catch(r){if(r instanceof t.TsgitError)throw r;throw t.fileNotFound(e.join("/"))}}return a}async assertDoesNotExist(e,r,a){try{await e.getFileHandle(r,{create:!1})}catch(e){if(e instanceof t.TsgitError)throw e;return}throw t.fileExists(a)}},exports.BrowserHashService=class{algorithm;digestLength;constructor(e="sha1"){if(!globalThis.crypto?.subtle)throw t.hashFailed("crypto.subtle unavailable");this.algorithm=e,this.digestLength="sha1"===e?20:32}async hash(t){return new Uint8Array(await crypto.subtle.digest(this.algoName,t))}async hashHex(t){return s(await this.hash(t))}createHasher(){const e=[],r=this.algoName;let a=!1;const i=async()=>{if(a)throw t.hashFailed("cannot digest after digest");a=!0;const s=e.reduce((t,e)=>t+e.length,0),i=new Uint8Array(s);let o=0;for(const t of e)i.set(t,o),o+=t.length;return new Uint8Array(await crypto.subtle.digest(r,i))};return{update(r){if(a)throw t.hashFailed("cannot update after digest");e.push(r.slice())},digest:i,digestHex:async()=>s(await i())}}get algoName(){return"sha1"===this.algorithm?"SHA-1":"SHA-256"}},exports.BrowserHttpTransport=class{async request(e){try{const t={method:e.method,headers:{...e.headers}};void 0!==e.body&&(t.body=e.body),void 0!==e.signal&&(t.signal=e.signal);const r=await fetch(e.url,t),a={};r.headers.forEach((t,e)=>{a[e.toLowerCase()]=t});const s=r.body??new ReadableStream;return{statusCode:r.status,headers:a,body:s}}catch(e){throw t.networkError(e instanceof Error?e.message:String(e))}}};
|
|
2
|
+
//# sourceMappingURL=browser-http-transport-D4NH-8oJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-http-transport-D4NH-8oJ.cjs","sources":["../../../src/adapters/browser/browser-file-system.ts","../../../src/adapters/browser/browser-hash-service.ts","../../../src/adapters/browser/browser-compressor.ts","../../../src/adapters/browser/browser-http-transport.ts"],"sourcesContent":[null,null,null,null],"names":["leafSegment","segments","path","leaf","length","undefined","fileNotFound","isFileNotFound","err","TsgitError","data","code","buildFileStat","size","timeMs","isFile","ctimeMs","mtimeMs","dev","ino","mode","uid","gid","isDirectory","isSymbolicLink","toHex","bytes","result","byte","toString","padStart","deflate","stream","Blob","pipeThrough","CompressionStream","Uint8Array","Response","arrayBuffer","compressFailed","Error","message","String","inflate","DecompressionStream","decompressFailed","streamInflate","offset","slice","subarray","end","attempt","output","bytesConsumed","createInflateStream","rootHandle","constructor","this","read","handle","resolveFileHandle","file","getFile","readSlice","permissionDenied","readUtf8","text","write","writable","createWritable","close","writeExclusive","splitPath","dir","walkToParent","assertDoesNotExist","getFileHandle","create","writeUtf8","content","TextEncoder","encode","appendUtf8","existing","keepExistingData","type","position","exists","resolveDirHandle","stat","lastModified","Date","now","lstat","readdir","entries","iterable","name","child","push","kind","mkdir","segment","getDirectoryHandle","rm","removeEntry","rename","src","dst","readlink","_path","unsupportedOperation","symlink","_target","chmod","_mode","rmRecursive","parent","catch","recursive","openWithNoFollow","replace","split","filter","s","i","join","fileExists","algorithm","digestLength","globalThis","crypto","subtle","hashFailed","hash","digest","algoName","hashHex","createHasher","chunks","consumed","finalize","async","total","reduce","sum","chunk","concatenated","set","update","digestHex","request","req","init","method","headers","body","signal","res","fetch","url","forEach","value","key","toLowerCase","ReadableStream","statusCode","status","networkError"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-BcoAzPuU.cjs","sources":["../../../src/ports/context.ts"],"sourcesContent":[null],"names":["parts","Object","freeze","cwd","layout","workDir"],"mappings":"
|
|
1
|
+
{"version":3,"file":"context-BcoAzPuU.cjs","sources":["../../../src/ports/context.ts"],"sourcesContent":[null],"names":["parts","Object","freeze","cwd","layout","workDir"],"mappings":"mCA+HM,SAAwBA,GAC5B,OAAOC,OAAOC,OAAO,IAAKF,EAAOG,IAAKH,EAAMG,KAAOH,EAAMI,OAAOC,SAClE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";class e extends Error{data;name="TsgitError";constructor(e){super(`${e.code}: ${function(e){switch(e.code){case"INVALID_OBJECT_ID":case"INVALID_FILE_MODE":return e.value;case"INVALID_OBJECT_HEADER":case"INVALID_TREE_ENTRY":case"INVALID_COMMIT":case"INVALID_TAG":case"INVALID_IDENTITY":case"INVALID_PACK_HEADER":case"INVALID_PACK_INDEX":case"INVALID_PACK_ENTRY":case"INVALID_DELTA":case"INVALID_REF":case"INVALID_PACKED_REFS":case"INVALID_INDEX_HEADER":case"INVALID_INDEX_ENTRY":return e.reason;case"FILE_NOT_FOUND":return`file not found: ${t(e.path)}`;case"FILE_EXISTS":return`file already exists: ${t(e.path)}`;case"NOT_A_DIRECTORY":return`not a directory: ${t(e.path)}`;case"DIRECTORY_NOT_EMPTY":return`directory not empty: ${t(e.path)}`;case"PERMISSION_DENIED":return`permission denied: ${t(e.path)}`;case"UNSUPPORTED_OPERATION":return`unsupported operation: ${e.operation}: ${e.reason}`;case"HASH_FAILED":return`hash computation failed: ${e.reason}`;case"COMPRESS_FAILED":return`compression failed: ${e.reason}`;case"DECOMPRESS_FAILED":return`decompression failed: ${e.reason}`;case"HTTP_ERROR":return`HTTP ${e.statusCode}: ${e.reason}`;case"NETWORK_ERROR":return`network error: ${e.reason}`;case"INVALID_TREE_FOR_DIFF":return`invalid tree for diff: ${e.reason}`;case"INVALID_DIFF_INPUT":return`invalid diff input: ${e.reason}`;case"INVALID_MERGE_TREE":return`invalid merge tree: ${e.reason}`;case"INVALID_MERGE_INPUT":return`invalid merge input: ${e.reason}`;case"OBJECT_NOT_FOUND":return`object not found: ${e.id}`;case"OBJECT_HASH_MISMATCH":return`object hash mismatch: expected=${e.expected} actual=${e.actual}`;case"UNEXPECTED_OBJECT_TYPE":return`unexpected object type: expected=${e.expected} actual=${e.actual} id=${e.id}`;case"TREE_CYCLE_DETECTED":return`tree cycle detected: ${e.id}`;case"TREE_DEPTH_EXCEEDED":return`tree depth exceeded: ${e.depth}`;case"TREE_ENTRY_LIMIT_EXCEEDED":return`tree entry limit exceeded: count=${e.count} limit=${e.limit}`;case"OBJECT_TOO_LARGE":return`object too large: id=${e.id} size=${e.actualSize} limit=${e.limit}`;case"DELTA_CHAIN_TOO_DEEP":return`delta chain too deep: ${e.depth}`;case"REF_NOT_FOUND":return`ref not found: ${e.name}`;case"REF_CHAIN_TOO_DEEP":return`ref chain too deep: depth=${e.depth} chain=${e.chain.join("->")}`;case"REF_CYCLE_DETECTED":return`ref cycle detected: ${e.chain.join("->")}`;case"REF_LOCKED":return`ref locked: ${e.name}`;case"REF_UPDATE_CONFLICT":return`ref update conflict: name=${e.name} expected=${e.expected} actual=${e.actual}`;case"INVALID_WALK_INPUT":return`invalid walk input: ${e.reason}`;case"OPERATION_ABORTED":return"operation aborted";case"INVALID_PKT_LENGTH":return`invalid pkt-line length: ${e.value}`;case"PKT_LENGTH_RESERVED":return`reserved pkt-line length: ${e.value}`;case"PKT_TOO_LARGE":return`pkt-line too large: ${e.value} bytes (max 65520)`;case"PKT_TRUNCATED":return`pkt-line truncated: ${e.remaining} bytes remaining`;case"INVALID_BASE_URL":return`invalid base URL: ${e.reason}`;case"MISSING_SERVICE_HEADER":return`missing service header: expected=${e.expected} actual=${e.actual}`;case"MISSING_CAPABILITIES":return"missing capabilities in advertisement";case"INVALID_REF_LINE":return`invalid ref line: ${e.line}`;case"DUPLICATE_REF":return`duplicate ref: ${e.name}`;case"INVALID_SIDEBAND_CHANNEL":return`invalid sideband channel: ${e.channel}`;case"SIDEBAND_FATAL":return`sideband fatal: ${e.message}`;case"UNKNOWN_ACK_STATUS":return`unknown ack status: ${e.value}`;case"INVALID_REPORT_STATUS":return`invalid report-status line: ${e.line}`;case"EMPTY_WANTS":return"upload-pack request has no wants";case"EMPTY_RECEIVE_UPDATES":return"receive-pack request has no updates";case"TOO_MANY_ADVERTISED_REFS":return`advertised refs (${e.count}) exceed limit ${e.limit}`;case"RESOURCE_LOCKED":return`${e.resource} locked: ${t(e.path)}`;case"PACK_TOO_LARGE":return`pack contains ${e.objectCount} objects, exceeds limit ${e.limit}`;case"NOT_A_REPOSITORY":return`not a git repository: ${t(e.path)}`;case"BARE_REPOSITORY":return`operation requires a working tree: ${e.operation}`;case"ALREADY_INITIALIZED":return`repository already exists: ${t(e.path)}`;case"WORKING_TREE_DIRTY":return`working tree has uncommitted changes: ${e.paths.length} files`;case"PATHSPEC_NO_MATCH":return`pathspec did not match any files: ${e.pattern}`;case"PATHSPEC_OUTSIDE_REPO":return`pathspec resolves outside repository: ${t(e.path)}`;case"NOTHING_TO_COMMIT":return"nothing to commit (use allowEmpty: true to commit anyway)";case"EMPTY_COMMIT_MESSAGE":return"commit message is empty (use allowEmptyMessage: true to commit anyway)";case"AUTHOR_UNCONFIGURED":return"author identity not configured (set ctx.config.user or pass author/committer)";case"BRANCH_EXISTS":return`branch already exists: ${e.name}`;case"BRANCH_NOT_FOUND":return`branch not found: ${e.name}`;case"TAG_EXISTS":return`tag already exists: ${e.name}`;case"TAG_NOT_FOUND":return`tag not found: ${e.name}`;case"CANNOT_DELETE_CHECKED_OUT_BRANCH":return`cannot delete branch currently checked out: ${e.name}`;case"INVALID_URL":return`invalid URL: ${e.reason}`;case"BLOCKED_HOST":return`host blocked: ${e.host} (${e.reason})`;case"TOO_MANY_REDIRECTS":return`too many redirects: ${e.count}`;case"UNSUPPORTED_SCHEME":return`unsupported URL scheme: ${e.scheme}`;case"TARGET_DIRECTORY_NOT_EMPTY":return`target directory is not empty: ${t(e.path)}`;case"REMOTE_ADVERTISES_NO_REFS":return"remote advertised no refs";case"NON_FAST_FORWARD":return`non-fast-forward update for ${e.ref}: local=${e.local} remote=${e.remote}`;case"PUSH_REJECTED":return`push rejected for ${e.ref}: ${e.reason}`;case"MERGE_HAS_CONFLICTS":return`merge has unresolved conflicts: ${e.count} files`;case"CHECKOUT_OVERWRITE_DIRTY":return`checkout would overwrite uncommitted changes: ${e.paths.length} files`;case"REVPARSE_AMBIGUOUS":return`revision expression "${e.expression}" is ambiguous (${e.candidates.length} candidates)`;case"REVPARSE_UNRESOLVED":return`cannot resolve revision: ${e.expression}`;case"EMPTY_PATHSPEC":return'pathspec is empty (use "." to mean "all paths")';case"OPERATION_IN_PROGRESS":return`${e.operation} in progress; complete or abort it before running this command`;case"MAX_REFSPECS_EXCEEDED":return`${e.count} refspecs exceeds limit ${e.limit}`;case"REMOTE_NOT_CONFIGURED":return`remote not configured: ${e.remote}`;case"REFSPEC_INVALID":return`invalid refspec "${e.raw}": ${e.reason}`;case"INVALID_OPTION":return`invalid option: ${e.option} — ${e.reason}`;case"REPOSITORY_DISPOSED":return"repository has been disposed; create a new one with openRepository()";case"ADAPTER_UNAVAILABLE":return`adapter unavailable for runtime ${e.runtime}: ${e.reason}`;case"WORKING_TREE_FILE_TOO_LARGE":return`working-tree file too large: ${t(e.path)} size=${e.size} limit=${e.limit}`;case"GITIGNORE_FILE_TOO_LARGE":return`.gitignore too large: ${t(e.path)} size=${e.size} limit=${e.limit}`;default:return String(e)}}(e)}`),this.data=e}}function t(e){const t=e.split(/[/\\]/);for(let e=t.length-1;e>=0;e--){const r=t[e];if(void 0!==r&&""!==r)return r}return e}const r=e=>{let t="";for(let r=0;r<e.length;r+=1){const n=e.charCodeAt(r);t+=9===n||10===n||n>=32&&n<=126?e[r]:`\\x${n.toString(16).toUpperCase().padStart(2,"0")}`}return t},n=r;exports.TsgitError=e,exports.adapterUnavailable=(t,n)=>new e({code:"ADAPTER_UNAVAILABLE",runtime:t,reason:r(n)}),exports.authorUnconfigured=()=>new e({code:"AUTHOR_UNCONFIGURED"}),exports.blockedHost=(t,n)=>new e({code:"BLOCKED_HOST",host:r(t),reason:r(n)}),exports.branchExists=t=>new e({code:"BRANCH_EXISTS",name:t}),exports.branchNotFound=t=>new e({code:"BRANCH_NOT_FOUND",name:t}),exports.cannotDeleteCheckedOutBranch=t=>new e({code:"CANNOT_DELETE_CHECKED_OUT_BRANCH",name:t}),exports.checkoutOverwriteDirty=t=>new e({code:"CHECKOUT_OVERWRITE_DIRTY",paths:t}),exports.compressFailed=t=>new e({code:"COMPRESS_FAILED",reason:t}),exports.decompressFailed=t=>new e({code:"DECOMPRESS_FAILED",reason:t}),exports.directoryNotEmpty=t=>new e({code:"DIRECTORY_NOT_EMPTY",path:t}),exports.emptyCommitMessage=()=>new e({code:"EMPTY_COMMIT_MESSAGE"}),exports.emptyPathspec=()=>new e({code:"EMPTY_PATHSPEC"}),exports.fileExists=t=>new e({code:"FILE_EXISTS",path:t}),exports.fileNotFound=t=>new e({code:"FILE_NOT_FOUND",path:t}),exports.gitignoreFileTooLarge=(t,r,n)=>new e({code:"GITIGNORE_FILE_TOO_LARGE",path:t,size:r,limit:n}),exports.hashFailed=t=>new e({code:"HASH_FAILED",reason:t}),exports.httpError=(t,r)=>new e({code:"HTTP_ERROR",statusCode:t,reason:r}),exports.invalidOption=(t,n)=>new e({code:"INVALID_OPTION",option:t,reason:r(n)}),exports.invalidUrl=t=>new e({code:"INVALID_URL",reason:t}),exports.invalidWalkInput=t=>new e({code:"INVALID_WALK_INPUT",reason:t}),exports.mergeHasConflicts=(t,r=[])=>{const n=r.length>100,a=n?r.slice(0,100):r;return new e(n?{code:"MERGE_HAS_CONFLICTS",count:t,paths:a,truncated:!0}:{code:"MERGE_HAS_CONFLICTS",count:t,paths:a})},exports.networkError=t=>new e({code:"NETWORK_ERROR",reason:t}),exports.nonFastForward=(t,r,n)=>new e({code:"NON_FAST_FORWARD",ref:t,local:r,remote:n}),exports.notADirectory=t=>new e({code:"NOT_A_DIRECTORY",path:t}),exports.nothingToCommit=()=>new e({code:"NOTHING_TO_COMMIT"}),exports.operationAborted=()=>new e({code:"OPERATION_ABORTED"}),exports.operationInProgress=t=>new e({code:"OPERATION_IN_PROGRESS",operation:t}),exports.pathspecNoMatch=t=>new e({code:"PATHSPEC_NO_MATCH",pattern:t}),exports.pathspecOutsideRepo=t=>new e({code:"PATHSPEC_OUTSIDE_REPO",path:t}),exports.permissionDenied=t=>new e({code:"PERMISSION_DENIED",path:t}),exports.pushRejected=(t,r,n)=>new e({code:"PUSH_REJECTED",ref:t,reason:r,reportStatus:n}),exports.remoteAdvertisesNoRefs=()=>new e({code:"REMOTE_ADVERTISES_NO_REFS"}),exports.remoteNotConfigured=t=>new e({code:"REMOTE_NOT_CONFIGURED",remote:t}),exports.repositoryDisposed=()=>new e({code:"REPOSITORY_DISPOSED"}),exports.revparseUnresolved=t=>new e({code:"REVPARSE_UNRESOLVED",expression:t}),exports.sanitize=n,exports.tagExists=t=>new e({code:"TAG_EXISTS",name:t}),exports.tagNotFound=t=>new e({code:"TAG_NOT_FOUND",name:t}),exports.targetDirectoryNotEmpty=t=>new e({code:"TARGET_DIRECTORY_NOT_EMPTY",path:t}),exports.unsupportedOperation=(t,r)=>new e({code:"UNSUPPORTED_OPERATION",operation:t,reason:r}),exports.unsupportedScheme=t=>new e({code:"UNSUPPORTED_SCHEME",scheme:t}),exports.workingTreeFileTooLarge=(t,r,n)=>new e({code:"WORKING_TREE_FILE_TOO_LARGE",path:t,size:r,limit:n});
|
|
2
|
-
//# sourceMappingURL=error-
|
|
1
|
+
"use strict";class e extends Error{data;name="TsgitError";constructor(e){super(`${e.code}: ${function(e){switch(e.code){case"INVALID_OBJECT_ID":case"INVALID_FILE_MODE":return e.value;case"INVALID_OBJECT_HEADER":case"INVALID_TREE_ENTRY":case"INVALID_COMMIT":case"INVALID_TAG":case"INVALID_IDENTITY":case"INVALID_PACK_HEADER":case"INVALID_PACK_INDEX":case"INVALID_PACK_ENTRY":case"INVALID_DELTA":case"INVALID_REF":case"INVALID_PACKED_REFS":case"INVALID_INDEX_HEADER":case"INVALID_INDEX_ENTRY":return e.reason;case"FILE_NOT_FOUND":return`file not found: ${t(e.path)}`;case"FILE_EXISTS":return`file already exists: ${t(e.path)}`;case"NOT_A_DIRECTORY":return`not a directory: ${t(e.path)}`;case"DIRECTORY_NOT_EMPTY":return`directory not empty: ${t(e.path)}`;case"PERMISSION_DENIED":return`permission denied: ${t(e.path)}`;case"UNSUPPORTED_OPERATION":return`unsupported operation: ${e.operation}: ${e.reason}`;case"HASH_FAILED":return`hash computation failed: ${e.reason}`;case"COMPRESS_FAILED":return`compression failed: ${e.reason}`;case"DECOMPRESS_FAILED":return`decompression failed: ${e.reason}`;case"HTTP_ERROR":return`HTTP ${e.statusCode}: ${e.reason}`;case"NETWORK_ERROR":return`network error: ${e.reason}`;case"INVALID_TREE_FOR_DIFF":return`invalid tree for diff: ${e.reason}`;case"INVALID_DIFF_INPUT":return`invalid diff input: ${e.reason}`;case"INVALID_MERGE_TREE":return`invalid merge tree: ${e.reason}`;case"INVALID_MERGE_INPUT":return`invalid merge input: ${e.reason}`;case"OBJECT_NOT_FOUND":return`object not found: ${e.id}`;case"OBJECT_HASH_MISMATCH":return`object hash mismatch: expected=${e.expected} actual=${e.actual}`;case"UNEXPECTED_OBJECT_TYPE":return`unexpected object type: expected=${e.expected} actual=${e.actual} id=${e.id}`;case"TREE_CYCLE_DETECTED":return`tree cycle detected: ${e.id}`;case"TREE_DEPTH_EXCEEDED":return`tree depth exceeded: ${e.depth}`;case"TREE_ENTRY_LIMIT_EXCEEDED":return`tree entry limit exceeded: count=${e.count} limit=${e.limit}`;case"OBJECT_TOO_LARGE":return`object too large: id=${e.id} size=${e.actualSize} limit=${e.limit}`;case"DELTA_CHAIN_TOO_DEEP":return`delta chain too deep: ${e.depth}`;case"REF_NOT_FOUND":return`ref not found: ${e.name}`;case"REF_CHAIN_TOO_DEEP":return`ref chain too deep: depth=${e.depth} chain=${e.chain.join("->")}`;case"REF_CYCLE_DETECTED":return`ref cycle detected: ${e.chain.join("->")}`;case"REF_LOCKED":return`ref locked: ${e.name}`;case"REF_UPDATE_CONFLICT":return`ref update conflict: name=${e.name} expected=${e.expected} actual=${e.actual}`;case"INVALID_WALK_INPUT":return`invalid walk input: ${e.reason}`;case"OPERATION_ABORTED":return"operation aborted";case"INVALID_PKT_LENGTH":return`invalid pkt-line length: ${e.value}`;case"PKT_LENGTH_RESERVED":return`reserved pkt-line length: ${e.value}`;case"PKT_TOO_LARGE":return`pkt-line too large: ${e.value} bytes (max 65520)`;case"PKT_TRUNCATED":return`pkt-line truncated: ${e.remaining} bytes remaining`;case"INVALID_BASE_URL":return`invalid base URL: ${e.reason}`;case"MISSING_SERVICE_HEADER":return`missing service header: expected=${e.expected} actual=${e.actual}`;case"MISSING_CAPABILITIES":return"missing capabilities in advertisement";case"INVALID_REF_LINE":return`invalid ref line: ${e.line}`;case"DUPLICATE_REF":return`duplicate ref: ${e.name}`;case"INVALID_SIDEBAND_CHANNEL":return`invalid sideband channel: ${e.channel}`;case"SIDEBAND_FATAL":return`sideband fatal: ${e.message}`;case"UNKNOWN_ACK_STATUS":return`unknown ack status: ${e.value}`;case"INVALID_REPORT_STATUS":return`invalid report-status line: ${e.line}`;case"EMPTY_WANTS":return"upload-pack request has no wants";case"EMPTY_RECEIVE_UPDATES":return"receive-pack request has no updates";case"TOO_MANY_ADVERTISED_REFS":return`advertised refs (${e.count}) exceed limit ${e.limit}`;case"RESOURCE_LOCKED":return`${e.resource} locked: ${t(e.path)}`;case"PACK_TOO_LARGE":return`pack contains ${e.objectCount} objects, exceeds limit ${e.limit}`;case"NOT_A_REPOSITORY":return`not a git repository: ${t(e.path)}`;case"BARE_REPOSITORY":return`operation requires a working tree: ${e.operation}`;case"ALREADY_INITIALIZED":return`repository already exists: ${t(e.path)}`;case"WORKING_TREE_DIRTY":return`working tree has uncommitted changes: ${e.paths.length} files`;case"PATHSPEC_NO_MATCH":return`pathspec did not match any files: ${e.pattern}`;case"PATHSPEC_OUTSIDE_REPO":return`pathspec resolves outside repository: ${t(e.path)}`;case"NOTHING_TO_COMMIT":return"nothing to commit (use allowEmpty: true to commit anyway)";case"EMPTY_COMMIT_MESSAGE":return"commit message is empty (use allowEmptyMessage: true to commit anyway)";case"AUTHOR_UNCONFIGURED":return"author identity not configured (set ctx.config.user or pass author/committer)";case"BRANCH_EXISTS":return`branch already exists: ${e.name}`;case"BRANCH_NOT_FOUND":return`branch not found: ${e.name}`;case"TAG_EXISTS":return`tag already exists: ${e.name}`;case"TAG_NOT_FOUND":return`tag not found: ${e.name}`;case"CANNOT_DELETE_CHECKED_OUT_BRANCH":return`cannot delete branch currently checked out: ${e.name}`;case"INVALID_URL":return`invalid URL: ${e.reason}`;case"BLOCKED_HOST":return`host blocked: ${e.host} (${e.reason})`;case"TOO_MANY_REDIRECTS":return`too many redirects: ${e.count}`;case"UNSUPPORTED_SCHEME":return`unsupported URL scheme: ${e.scheme}`;case"TARGET_DIRECTORY_NOT_EMPTY":return`target directory is not empty: ${t(e.path)}`;case"REMOTE_ADVERTISES_NO_REFS":return"remote advertised no refs";case"NON_FAST_FORWARD":return`non-fast-forward update for ${e.ref}: local=${e.local} remote=${e.remote}`;case"PUSH_REJECTED":return`push rejected for ${e.ref}: ${e.reason}`;case"MERGE_HAS_CONFLICTS":return`merge has unresolved conflicts: ${e.count} files`;case"CHECKOUT_OVERWRITE_DIRTY":return`checkout would overwrite uncommitted changes: ${e.paths.length} files`;case"REVPARSE_AMBIGUOUS":return`revision expression "${e.expression}" is ambiguous (${e.candidates.length} candidates)`;case"REVPARSE_UNRESOLVED":return`cannot resolve revision: ${e.expression}`;case"EMPTY_PATHSPEC":return'pathspec is empty (use "." to mean "all paths")';case"OPERATION_IN_PROGRESS":return`${e.operation} in progress; complete or abort it before running this command`;case"MAX_REFSPECS_EXCEEDED":return`${e.count} refspecs exceeds limit ${e.limit}`;case"REMOTE_NOT_CONFIGURED":return`remote not configured: ${e.remote}`;case"NO_PROMISOR_REMOTE":return"no promisor remote configured; this repository is not a partial clone";case"REFSPEC_INVALID":return`invalid refspec "${e.raw}": ${e.reason}`;case"INVALID_OPTION":return`invalid option: ${e.option} — ${e.reason}`;case"REPOSITORY_DISPOSED":return"repository has been disposed; create a new one with openRepository()";case"ADAPTER_UNAVAILABLE":return`adapter unavailable for runtime ${e.runtime}: ${e.reason}`;case"WORKING_TREE_FILE_TOO_LARGE":return`working-tree file too large: ${t(e.path)} size=${e.size} limit=${e.limit}`;case"GITIGNORE_FILE_TOO_LARGE":return`.gitignore too large: ${t(e.path)} size=${e.size} limit=${e.limit}`;case"SPARSE_PATTERN_FILE_TOO_LARGE":return`sparse-checkout file too large: ${t(e.path)} size=${e.size} limit=${e.limit}`;case"INVALID_REFLOG_ENTRY":return`invalid reflog entry: ${e.reason}`;case"REFLOG_NOT_FOUND":return`reflog not found: ${e.ref}`;case"REFLOG_ENTRY_OUT_OF_RANGE":return`reflog entry out of range: ref=${e.ref} requested=${e.requested} available=${e.available}`;case"HOOK_FAILED":return`hook ${e.hook} failed with exit code ${e.exitCode}`;case"INVALID_FILTER_SPEC":return`invalid object filter "${e.spec}": ${e.reason}`;case"REMOTE_FILTER_UNSUPPORTED":return"remote does not support partial-clone object filtering";default:return String(e)}}(e)}`),this.data=e}}function t(e){const t=e.split(/[/\\]/);for(let e=t.length-1;e>=0;e--){const r=t[e];if(void 0!==r&&""!==r)return r}return e}const r=e=>{let t="";for(let r=0;r<e.length;r+=1){const o=e.charCodeAt(r);t+=9===o||10===o||o>=32&&o<=126?e[r]:`\\x${o.toString(16).toUpperCase().padStart(2,"0")}`}return t},o=r;exports.TsgitError=e,exports.adapterUnavailable=(t,o)=>new e({code:"ADAPTER_UNAVAILABLE",runtime:t,reason:r(o)}),exports.authorUnconfigured=()=>new e({code:"AUTHOR_UNCONFIGURED"}),exports.blockedHost=(t,o)=>new e({code:"BLOCKED_HOST",host:r(t),reason:r(o)}),exports.branchExists=t=>new e({code:"BRANCH_EXISTS",name:t}),exports.branchNotFound=t=>new e({code:"BRANCH_NOT_FOUND",name:t}),exports.cannotDeleteCheckedOutBranch=t=>new e({code:"CANNOT_DELETE_CHECKED_OUT_BRANCH",name:t}),exports.checkoutOverwriteDirty=t=>new e({code:"CHECKOUT_OVERWRITE_DIRTY",paths:t}),exports.compressFailed=t=>new e({code:"COMPRESS_FAILED",reason:t}),exports.decompressFailed=t=>new e({code:"DECOMPRESS_FAILED",reason:t}),exports.directoryNotEmpty=t=>new e({code:"DIRECTORY_NOT_EMPTY",path:t}),exports.emptyCommitMessage=()=>new e({code:"EMPTY_COMMIT_MESSAGE"}),exports.emptyPathspec=()=>new e({code:"EMPTY_PATHSPEC"}),exports.fileExists=t=>new e({code:"FILE_EXISTS",path:t}),exports.fileNotFound=t=>new e({code:"FILE_NOT_FOUND",path:t}),exports.gitignoreFileTooLarge=(t,r,o)=>new e({code:"GITIGNORE_FILE_TOO_LARGE",path:t,size:r,limit:o}),exports.hashFailed=t=>new e({code:"HASH_FAILED",reason:t}),exports.hookFailed=(t,o,n)=>new e({code:"HOOK_FAILED",hook:t,exitCode:o,stderr:r(n).slice(0,4096)}),exports.httpError=(t,r)=>new e({code:"HTTP_ERROR",statusCode:t,reason:r}),exports.invalidOption=(t,o)=>new e({code:"INVALID_OPTION",option:t,reason:r(o)}),exports.invalidUrl=t=>new e({code:"INVALID_URL",reason:t}),exports.invalidWalkInput=t=>new e({code:"INVALID_WALK_INPUT",reason:t}),exports.mergeHasConflicts=(t,r=[])=>{const o=r.length>100,n=o?r.slice(0,100):r;return new e(o?{code:"MERGE_HAS_CONFLICTS",count:t,paths:n,truncated:!0}:{code:"MERGE_HAS_CONFLICTS",count:t,paths:n})},exports.networkError=t=>new e({code:"NETWORK_ERROR",reason:t}),exports.noPromisorRemote=()=>new e({code:"NO_PROMISOR_REMOTE"}),exports.nonFastForward=(t,r,o)=>new e({code:"NON_FAST_FORWARD",ref:t,local:r,remote:o}),exports.notADirectory=t=>new e({code:"NOT_A_DIRECTORY",path:t}),exports.nothingToCommit=()=>new e({code:"NOTHING_TO_COMMIT"}),exports.operationAborted=()=>new e({code:"OPERATION_ABORTED"}),exports.operationInProgress=t=>new e({code:"OPERATION_IN_PROGRESS",operation:t}),exports.pathspecNoMatch=t=>new e({code:"PATHSPEC_NO_MATCH",pattern:t}),exports.pathspecOutsideRepo=t=>new e({code:"PATHSPEC_OUTSIDE_REPO",path:t}),exports.permissionDenied=t=>new e({code:"PERMISSION_DENIED",path:t}),exports.pushRejected=(t,r,o)=>new e({code:"PUSH_REJECTED",ref:t,reason:r,reportStatus:o}),exports.remoteAdvertisesNoRefs=()=>new e({code:"REMOTE_ADVERTISES_NO_REFS"}),exports.remoteNotConfigured=t=>new e({code:"REMOTE_NOT_CONFIGURED",remote:t}),exports.repositoryDisposed=()=>new e({code:"REPOSITORY_DISPOSED"}),exports.revparseUnresolved=t=>new e({code:"REVPARSE_UNRESOLVED",expression:t}),exports.sanitize=o,exports.sparsePatternFileTooLarge=(t,r,o)=>new e({code:"SPARSE_PATTERN_FILE_TOO_LARGE",path:t,size:r,limit:o}),exports.tagExists=t=>new e({code:"TAG_EXISTS",name:t}),exports.tagNotFound=t=>new e({code:"TAG_NOT_FOUND",name:t}),exports.targetDirectoryNotEmpty=t=>new e({code:"TARGET_DIRECTORY_NOT_EMPTY",path:t}),exports.unsupportedOperation=(t,r)=>new e({code:"UNSUPPORTED_OPERATION",operation:t,reason:r}),exports.unsupportedScheme=t=>new e({code:"UNSUPPORTED_SCHEME",scheme:t}),exports.workingTreeFileTooLarge=(t,r,o)=>new e({code:"WORKING_TREE_FILE_TOO_LARGE",path:t,size:r,limit:o});
|
|
2
|
+
//# sourceMappingURL=error-CDLOBdNU.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-CDLOBdNU.cjs","sources":["../../../src/domain/error.ts","../../../src/domain/commands/error.ts"],"sourcesContent":[null,null],"names":["TsgitError","Error","data","name","constructor","super","code","value","reason","basename","path","operation","statusCode","id","expected","actual","depth","count","limit","actualSize","chain","join","remaining","line","channel","message","resource","objectCount","paths","length","pattern","host","scheme","ref","local","remote","expression","candidates","raw","option","runtime","size","requested","available","hook","exitCode","spec","String","extractDetail","this","segments","split","i","segment","undefined","sanitizeForDisplay","s","out","charCodeAt","toString","toUpperCase","padStart","sanitize","stderr","slice","truncated","cappedPaths","reportStatus"],"mappings":"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"}
|