@scolladon/tsgit 1.1.0 → 1.3.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.
Files changed (119) hide show
  1. package/README.md +32 -252
  2. package/dist/cjs/adapters/browser/index.cjs +1 -1
  3. package/dist/cjs/adapters/memory/index.cjs +1 -1
  4. package/dist/cjs/adapters/memory/index.cjs.map +1 -1
  5. package/dist/cjs/adapters/node/index.cjs +1 -1
  6. package/dist/cjs/adapters/node/index.cjs.map +1 -1
  7. package/dist/cjs/chunks/browser-http-transport-D4NH-8oJ.cjs +2 -0
  8. package/dist/cjs/chunks/browser-http-transport-D4NH-8oJ.cjs.map +1 -0
  9. package/dist/cjs/chunks/context-BcoAzPuU.cjs.map +1 -1
  10. package/dist/cjs/chunks/{error-CqLvhejR.cjs → error-CDLOBdNU.cjs} +2 -2
  11. package/dist/cjs/chunks/error-CDLOBdNU.cjs.map +1 -0
  12. package/dist/cjs/chunks/index-BVArBKuk.cjs +2 -0
  13. package/dist/cjs/chunks/index-BVArBKuk.cjs.map +1 -0
  14. package/dist/cjs/chunks/index-DE9HSiWf.cjs +2 -0
  15. package/dist/cjs/chunks/index-DE9HSiWf.cjs.map +1 -0
  16. package/dist/cjs/chunks/{logger-C8Z5BfFF.cjs → logger-CVG0zcPH.cjs} +2 -2
  17. package/dist/cjs/chunks/{logger-C8Z5BfFF.cjs.map → logger-CVG0zcPH.cjs.map} +1 -1
  18. package/dist/cjs/chunks/{memory-http-transport-Pjyme5KN.cjs → memory-http-transport-DXwDGKtR.cjs} +2 -2
  19. package/dist/cjs/chunks/memory-http-transport-DXwDGKtR.cjs.map +1 -0
  20. package/dist/cjs/chunks/node-http-transport-vrbnNEDb.cjs +2 -0
  21. package/dist/cjs/chunks/node-http-transport-vrbnNEDb.cjs.map +1 -0
  22. package/dist/cjs/chunks/{progress-CntEbiuo.cjs → progress-Bj2w-90A.cjs} +2 -2
  23. package/dist/cjs/chunks/{progress-CntEbiuo.cjs.map → progress-Bj2w-90A.cjs.map} +1 -1
  24. package/dist/cjs/chunks/repository-BJwTSiGf.cjs +2 -0
  25. package/dist/cjs/chunks/repository-BJwTSiGf.cjs.map +1 -0
  26. package/dist/cjs/commands/index.cjs +1 -1
  27. package/dist/cjs/index.browser.cjs +1 -1
  28. package/dist/cjs/index.cjs +1 -1
  29. package/dist/cjs/index.default.cjs +1 -1
  30. package/dist/cjs/index.node.cjs +1 -1
  31. package/dist/cjs/index.node.cjs.map +1 -1
  32. package/dist/cjs/primitives/index.cjs +1 -1
  33. package/dist/esm/adapters/browser/index.js +1 -1
  34. package/dist/esm/adapters/memory/index.js +1 -1
  35. package/dist/esm/adapters/memory/index.js.map +1 -1
  36. package/dist/esm/adapters/node/index.js +1 -1
  37. package/dist/esm/adapters/node/index.js.map +1 -1
  38. package/dist/esm/chunks/browser-http-transport-DL8bkNdg.js +2 -0
  39. package/dist/esm/chunks/browser-http-transport-DL8bkNdg.js.map +1 -0
  40. package/dist/esm/chunks/context-CumKOV7K.js.map +1 -1
  41. package/dist/esm/chunks/{error-BN9rdQ33.js → error-MOmSzp9Z.js} +2 -2
  42. package/dist/esm/chunks/error-MOmSzp9Z.js.map +1 -0
  43. package/dist/esm/chunks/index-BjmofbKE.js +2 -0
  44. package/dist/esm/chunks/index-BjmofbKE.js.map +1 -0
  45. package/dist/esm/chunks/index-Jh5R-UmU.js +2 -0
  46. package/dist/esm/chunks/index-Jh5R-UmU.js.map +1 -0
  47. package/dist/esm/chunks/{logger-BLZbLzva.js → logger-DP2cCpvL.js} +2 -2
  48. package/dist/esm/chunks/{logger-BLZbLzva.js.map → logger-DP2cCpvL.js.map} +1 -1
  49. package/dist/esm/chunks/memory-http-transport-COJU6VOL.js +2 -0
  50. package/dist/esm/chunks/memory-http-transport-COJU6VOL.js.map +1 -0
  51. package/dist/esm/chunks/node-http-transport-DYCFIJbc.js +2 -0
  52. package/dist/esm/chunks/node-http-transport-DYCFIJbc.js.map +1 -0
  53. package/dist/esm/chunks/{progress-DJU_f66N.js → progress-NePjO3Kd.js} +2 -2
  54. package/dist/esm/chunks/{progress-DJU_f66N.js.map → progress-NePjO3Kd.js.map} +1 -1
  55. package/dist/esm/chunks/repository-Cs-dbHqO.js +2 -0
  56. package/dist/esm/chunks/repository-Cs-dbHqO.js.map +1 -0
  57. package/dist/esm/commands/index.js +1 -1
  58. package/dist/esm/index.browser.js +1 -1
  59. package/dist/esm/index.default.js +1 -1
  60. package/dist/esm/index.js +1 -1
  61. package/dist/esm/index.node.js +1 -1
  62. package/dist/esm/index.node.js.map +1 -1
  63. package/dist/esm/primitives/index.js +1 -1
  64. package/dist/types/adapters/browser/index.d.cts +2 -1
  65. package/dist/types/adapters/browser/index.d.ts +2 -1
  66. package/dist/types/adapters/memory/index.d.cts +21 -2
  67. package/dist/types/adapters/memory/index.d.ts +21 -2
  68. package/dist/types/adapters/node/index.d.cts +64 -3
  69. package/dist/types/adapters/node/index.d.ts +64 -3
  70. package/dist/types/chunks/{context-o5TPfMB2.d.ts → context-BORy7yXb.d.ts} +97 -2
  71. package/dist/types/chunks/{context-D84z1i5F.d.cts → context-CMrHCVwK.d.cts} +97 -2
  72. package/dist/types/chunks/reflog-entry-C2Hsdobk.d.ts +354 -0
  73. package/dist/types/chunks/reflog-entry-DNvSz7S5.d.cts +354 -0
  74. package/dist/types/chunks/{repository-23evW2h-.d.cts → repository-DCR_3RVt.d.cts} +21 -3
  75. package/dist/types/chunks/{repository-BT7Xq1kJ.d.ts → repository-DFxFeYi3.d.ts} +21 -3
  76. package/dist/types/chunks/write-tree-CuhpWKFo.d.cts +164 -0
  77. package/dist/types/chunks/write-tree-Dn1LtIh7.d.ts +164 -0
  78. package/dist/types/commands/index.d.cts +152 -6
  79. package/dist/types/commands/index.d.ts +152 -6
  80. package/dist/types/index.browser.d.cts +4 -4
  81. package/dist/types/index.browser.d.ts +4 -4
  82. package/dist/types/index.d.cts +4 -4
  83. package/dist/types/index.d.ts +4 -4
  84. package/dist/types/index.default.d.cts +4 -4
  85. package/dist/types/index.default.d.ts +4 -4
  86. package/dist/types/index.node.d.cts +4 -4
  87. package/dist/types/index.node.d.ts +4 -4
  88. package/dist/types/primitives/index.d.cts +197 -7
  89. package/dist/types/primitives/index.d.ts +197 -7
  90. package/package.json +207 -17
  91. package/dist/cjs/chunks/browser-http-transport-DcG05jw3.cjs +0 -2
  92. package/dist/cjs/chunks/browser-http-transport-DcG05jw3.cjs.map +0 -1
  93. package/dist/cjs/chunks/error-CqLvhejR.cjs.map +0 -1
  94. package/dist/cjs/chunks/index-BcxdLkNe.cjs +0 -2
  95. package/dist/cjs/chunks/index-BcxdLkNe.cjs.map +0 -1
  96. package/dist/cjs/chunks/index-D5Nd-Mks.cjs +0 -2
  97. package/dist/cjs/chunks/index-D5Nd-Mks.cjs.map +0 -1
  98. package/dist/cjs/chunks/memory-http-transport-Pjyme5KN.cjs.map +0 -1
  99. package/dist/cjs/chunks/node-http-transport-UkW5eEm3.cjs +0 -2
  100. package/dist/cjs/chunks/node-http-transport-UkW5eEm3.cjs.map +0 -1
  101. package/dist/cjs/chunks/repository-B_jx2AKW.cjs +0 -2
  102. package/dist/cjs/chunks/repository-B_jx2AKW.cjs.map +0 -1
  103. package/dist/esm/chunks/browser-http-transport-COFgnEyq.js +0 -2
  104. package/dist/esm/chunks/browser-http-transport-COFgnEyq.js.map +0 -1
  105. package/dist/esm/chunks/error-BN9rdQ33.js.map +0 -1
  106. package/dist/esm/chunks/index-BdV37p4e.js +0 -2
  107. package/dist/esm/chunks/index-BdV37p4e.js.map +0 -1
  108. package/dist/esm/chunks/index-BkRJ9-Im.js +0 -2
  109. package/dist/esm/chunks/index-BkRJ9-Im.js.map +0 -1
  110. package/dist/esm/chunks/memory-http-transport-DRYdYgiE.js +0 -2
  111. package/dist/esm/chunks/memory-http-transport-DRYdYgiE.js.map +0 -1
  112. package/dist/esm/chunks/node-http-transport-Bp5cFZCt.js +0 -2
  113. package/dist/esm/chunks/node-http-transport-Bp5cFZCt.js.map +0 -1
  114. package/dist/esm/chunks/repository-DiagDiT_.js +0 -2
  115. package/dist/esm/chunks/repository-DiagDiT_.js.map +0 -1
  116. package/dist/types/chunks/diff-change-Bm1zvVsC.d.cts +0 -59
  117. package/dist/types/chunks/diff-change-alGRzD_j.d.ts +0 -59
  118. package/dist/types/chunks/write-tree-DNjhjS3t.d.ts +0 -282
  119. package/dist/types/chunks/write-tree-DVp0RJ_r.d.cts +0 -282
package/README.md CHANGED
@@ -4,280 +4,60 @@
4
4
  [![npm](https://img.shields.io/npm/v/@scolladon/tsgit)](https://www.npmjs.com/package/@scolladon/tsgit)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
6
6
 
7
- Lightning-fast git, pure TypeScript, everywhere.
7
+ **Lightning-fast git, pure TypeScript, everywhere.**
8
8
 
9
- A pure TypeScript git implementation designed to be the fastest portable git library available. Runs identically on Node.js (Windows, macOS, Linux), browsers, and edge runtimes with zero native dependencies, zero WASM, and zero compromises on developer experience.
9
+ Pure TypeScript git Node.js, browser, Deno, Bun, and Cloudflare Workers. Zero native deps. Zero WASM. Stable v1, semver-tracked see [BACKLOG](docs/BACKLOG.md) for the roadmap.
10
10
 
11
- ## Status
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
- ## Quick Start
55
-
56
- ### Node.js
17
+ ## 60-second quickstart
57
18
 
58
- ```typescript
19
+ ```ts
59
20
  import { openRepository } from '@scolladon/tsgit';
60
21
 
61
22
  const repo = await openRepository({ cwd: process.cwd() });
62
-
63
- const commits = await repo.log();
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
- `openRepository` is a frozen handle exposing every command and primitive bound
70
- to a single `Context`. The Node entry point auto-detects an existing `.git`
71
- directory by walking up from `cwd`.
72
-
73
- ### Browser
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 22+ | `@scolladon/tsgit` |
31
+ | Browser (OPFS) | `@scolladon/tsgit/auto/browser` |
32
+ | In-memory (tests) | `@scolladon/tsgit/auto/memory` |
33
+ | Deno | `npm:@scolladon/tsgit` |
34
+ | Bun | `@scolladon/tsgit` |
35
+ | Cloudflare Workers | `@scolladon/tsgit/auto/memory` |
110
36
 
111
- const result = await repo.clone({
112
- url: 'https://github.com/owner/repo.git',
113
- resolver: async (host) => (await import('node:dns')).promises.resolve(host),
114
- });
37
+ [Full quickstart per runtime](docs/get-started/) · [recipes — partial clone, sparse checkout, hooks, …](docs/use/recipes.md)
115
38
 
116
- console.log(result.head); // refs/heads/main
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
- ```
39
+ ## Capabilities
148
40
 
149
- `repo.rm` and `repo.checkout({ paths })` accept the same pathspec
150
- syntax. A literal pattern that matches nothing throws
151
- `PATHSPEC_NO_MATCH`; a glob that matches nothing is a silent no-op
152
- (matches Git's behaviour). Pathspec syntax is `*`, `?`, `**`, and
153
- `!` negation; character classes (`[abc]`) and Git magic prefixes
154
- (`:(top)`, `:(literal)`) are not supported in v1.
41
+ - Zero runtime dependencies no transitive surface
42
+ - Pure TypeScript no native code, no WASM, no `git` binary required
43
+ - Cross-runtime Node 22+ · Deno · Bun · Cloudflare Workers · Browser (OPFS) · in-memory
44
+ - Tree-shakeable `sideEffects: false`; each primitive is an independent entry
45
+ - CJS + ESM dual-publish, verified by `arethetypeswrong`
46
+ - 21 Tier-1 commands · 20+ AsyncIterable primitives · operator toolkit (`pipe`, `filter`, `map`, …)
47
+ - Type-safe — branded `ObjectId`/`RefName`/`FilePath`, discriminated-union errors, no `any`
48
+ - AbortSignal lifetime — `repo.dispose()` cancels in-flight work
155
49
 
156
- Phase 14.1 ships bulk-mode `add --all` walking via the new
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.
50
+ [Commands](docs/use/commands/) · [primitives](docs/use/primitives/) · [errors](docs/use/errors.md)
163
51
 
164
- Phase 14.3 wires `.gitignore` evaluation across `add --all` AND `status`:
52
+ ## Documentation
165
53
 
166
- - **Sources (last match wins):** `core.excludesFile` (from git config,
167
- `~`-expanded against `ctx.layout.homeDir`) → `.git/info/exclude`
168
- repo-root `.gitignore` nested `.gitignore` per directory.
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
- ```
54
+ - 📖 [Get started](docs/get-started/) Node, browser, memory, migration from isomorphic-git
55
+ - 🛠️ [Use it](docs/use/) — commands, primitives, recipes, errors
56
+ - 🧠 [Understand it](docs/understand/) architecture, design decisions, performance, security
277
57
 
278
- ## Contributing
58
+ ## Contribute
279
59
 
280
- See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines, test conventions, and the PR workflow.
60
+ See [CONTRIBUTING.md](CONTRIBUTING.md).
281
61
 
282
62
  ## License
283
63
 
@@ -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-CntEbiuo.cjs"),o=require("../../chunks/browser-http-transport-DcG05jw3.cjs");require("../../chunks/error-CqLvhejR.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)};
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-CntEbiuo.cjs"),s=require("../../chunks/memory-http-transport-Pjyme5KN.cjs");require("../../chunks/error-CqLvhejR.cjs");const t="/repo",i="/repo/.git";exports.MemoryCompressor=s.MemoryCompressor,exports.MemoryFileSystem=s.MemoryFileSystem,exports.MemoryHashService=s.MemoryHashService,exports.MemoryHttpTransport=s.MemoryHttpTransport,exports.createMemoryContext=function(a={}){const c=new s.MemoryFileSystem(void 0===a.files?{rootDir:t}:{rootDir:t,files:a.files}),n=a.algorithm??"sha1",m=new s.MemoryHashService(n),h=new s.MemoryCompressor,p=new s.MemoryHttpTransport,y=void 0===a.homeDir?{workDir:t,gitDir:i,bare:!1}:{workDir:t,gitDir:i,bare:!1,homeDir:a.homeDir},u="sha256"===n?r.SHA256_CONFIG:r.SHA1_CONFIG,l=r.createLruCache(a.deltaCacheMaxBytes??16777216,a.deltaCacheMaxEntries??65536),M={fs:c,hash:m,compressor:h,transport:p,progress:o.noopProgress,layout:y,hashConfig:u,deltaCache:l};return e.createContext(void 0===a.signal?M:{...M,signal:a.signal})};
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","createContext","signal"],"mappings":"yQASA,MAaMA,EAAmB,QACnBC,EAAkB,iOAElB,SAA8BC,EAAgC,IAClE,MAIMC,EAAK,IAAIC,EAAAA,sBAHKC,IAAlBH,EAAQI,MACJ,CAAEC,QAASP,GACX,CAAEO,QAASP,EAAkBM,MAAOJ,EAAQI,QAE5CE,EAAYN,EAAQM,WAAa,OACjCC,EAAO,IAAIC,EAAAA,kBAAkBF,GAC7BG,EAAa,IAAIC,mBACjBC,EAAY,IAAIC,sBAChBC,OACgBV,IAApBH,EAAQc,QACJ,CAAEC,QAASjB,EAAkBkB,OAAQjB,EAAiBkB,MAAM,GAC5D,CACEF,QAASjB,EACTkB,OAAQjB,EACRkB,MAAM,EACNH,QAASd,EAAQc,SAEnBI,EAA2B,WAAdZ,EAAyBa,EAAAA,cAAgBC,EAAAA,YACtDC,EAAaC,EAAAA,eACjBtB,EAAQuB,oBArCsB,SAsC9BvB,EAAQwB,sBArCwB,OAuC5BC,EAAQ,CACZxB,KACAM,OACAE,aACAE,YACAe,SAAUC,EAAAA,aACVd,SACAK,aACAG,cAEF,OACIO,EAAAA,mBADsBzB,IAAnBH,EAAQ6B,OACGJ,EACA,IAAKA,EAAOI,OAAQ7B,EAAQ6B,QAChD"}
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-CntEbiuo.cjs"),i=require("../../chunks/node-http-transport-UkW5eEm3.cjs");function n(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-CqLvhejR.cjs"),require("node:zlib"),require("node:fs"),require("node:fs/promises"),require("node:crypto"),require("node:http"),require("node:https"),require("node:stream");var a=n(r);exports.NodeCompressor=i.NodeCompressor,exports.NodeFileSystem=i.NodeFileSystem,exports.NodeHashService=i.NodeHashService,exports.NodeHttpTransport=i.NodeHttpTransport,exports.createNodeContext=function(r){const n=a.resolve(r.workDir),c=void 0!==r.gitDir?a.resolve(r.gitDir):a.join(n,".git"),u=new i.NodeFileSystem(n),d=new i.NodeHashService,p=new i.NodeCompressor,h=new i.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})(n,c,r.bare??!1,""===(q=e.homedir())?void 0:q),g=o.createLruCache(r.deltaCacheMaxBytes??16777216,r.deltaCacheMaxEntries??65536),f={fs:u,hash:d,compressor:p,transport:h,progress:s.noopProgress,layout:l,hashConfig:o.SHA1_CONFIG,deltaCache:g};var q;return t.createContext(void 0!==r.signal?{...f,signal:r.signal}:f)};
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","createContext","signal"],"mappings":"85BAwBM,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,oBA3BsB,SA4B9BxB,EAAQyB,sBA3BwB,OA6B5BC,EAAQ,CACZnB,KACAE,OACAE,aACAE,YACAc,SAAUC,EAAAA,aACVZ,SACAa,WAAYC,EAAAA,YACZR,cA8BgB,IAhBWF,EAZ7B,OACIW,EAAAA,mBADsB1B,IAAnBL,EAAQgC,OACG,IAAKN,EAAOM,OAAQhC,EAAQgC,QAC5BN,EACpB"}
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":"mCAqHM,SAAwBA,GAC5B,OAAOC,OAAOC,OAAO,IAAKF,EAAOG,IAAKH,EAAMG,KAAOH,EAAMI,OAAOC,SAClE"}
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-CqLvhejR.cjs.map
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":"aA0DM,MAAOA,UAAmBC,MAGTC,KAFHC,KAAO,aAEzB,WAAAC,CAAqBF,GACnBG,MAAM,GAAGH,EAAKI,SAyDlB,SAAuBJ,GACrB,OAAQA,EAAKI,MACX,IAAK,oBACL,IAAK,oBACH,OAAOJ,EAAKK,MACd,IAAK,wBACL,IAAK,qBACL,IAAK,iBACL,IAAK,cACL,IAAK,mBACL,IAAK,sBACL,IAAK,qBACL,IAAK,qBACL,IAAK,gBACL,IAAK,cACL,IAAK,sBACL,IAAK,uBACL,IAAK,sBACH,OAAOL,EAAKM,OACd,IAAK,iBACH,MAAO,mBAAmBC,EAASP,EAAKQ,QAC1C,IAAK,cACH,MAAO,wBAAwBD,EAASP,EAAKQ,QAC/C,IAAK,kBACH,MAAO,oBAAoBD,EAASP,EAAKQ,QAC3C,IAAK,sBACH,MAAO,wBAAwBD,EAASP,EAAKQ,QAC/C,IAAK,oBACH,MAAO,sBAAsBD,EAASP,EAAKQ,QAC7C,IAAK,wBACH,MAAO,0BAA0BR,EAAKS,cAAcT,EAAKM,SAC3D,IAAK,cACH,MAAO,4BAA4BN,EAAKM,SAC1C,IAAK,kBACH,MAAO,uBAAuBN,EAAKM,SACrC,IAAK,oBACH,MAAO,yBAAyBN,EAAKM,SACvC,IAAK,aACH,MAAO,QAAQN,EAAKU,eAAeV,EAAKM,SAC1C,IAAK,gBACH,MAAO,kBAAkBN,EAAKM,SAChC,IAAK,wBACH,MAAO,0BAA0BN,EAAKM,SACxC,IAAK,qBACH,MAAO,uBAAuBN,EAAKM,SACrC,IAAK,qBACH,MAAO,uBAAuBN,EAAKM,SACrC,IAAK,sBACH,MAAO,wBAAwBN,EAAKM,SACtC,IAAK,mBACH,MAAO,qBAAqBN,EAAKW,KACnC,IAAK,uBACH,MAAO,kCAAkCX,EAAKY,mBAAmBZ,EAAKa,SACxE,IAAK,yBACH,MAAO,oCAAoCb,EAAKY,mBAAmBZ,EAAKa,aAAab,EAAKW,KAC5F,IAAK,sBACH,MAAO,wBAAwBX,EAAKW,KACtC,IAAK,sBACH,MAAO,wBAAwBX,EAAKc,QACtC,IAAK,4BACH,MAAO,oCAAoCd,EAAKe,eAAef,EAAKgB,QACtE,IAAK,mBACH,MAAO,wBAAwBhB,EAAKW,WAAWX,EAAKiB,oBAAoBjB,EAAKgB,QAC/E,IAAK,uBACH,MAAO,yBAAyBhB,EAAKc,QACvC,IAAK,gBACH,MAAO,kBAAkBd,EAAKC,OAChC,IAAK,qBACH,MAAO,6BAA6BD,EAAKc,eAAed,EAAKkB,MAAMC,KAAK,QAC1E,IAAK,qBACH,MAAO,uBAAuBnB,EAAKkB,MAAMC,KAAK,QAChD,IAAK,aACH,MAAO,eAAenB,EAAKC,OAC7B,IAAK,sBACH,MAAO,6BAA6BD,EAAKC,iBAAiBD,EAAKY,mBAAmBZ,EAAKa,SACzF,IAAK,qBACH,MAAO,uBAAuBb,EAAKM,SACrC,IAAK,oBACH,MAAO,oBACT,IAAK,qBACH,MAAO,4BAA4BN,EAAKK,QAC1C,IAAK,sBACH,MAAO,6BAA6BL,EAAKK,QAC3C,IAAK,gBACH,MAAO,uBAAuBL,EAAKK,0BACrC,IAAK,gBACH,MAAO,uBAAuBL,EAAKoB,4BACrC,IAAK,mBACH,MAAO,qBAAqBpB,EAAKM,SACnC,IAAK,yBACH,MAAO,oCAAoCN,EAAKY,mBAAmBZ,EAAKa,SAC1E,IAAK,uBACH,MAAO,wCACT,IAAK,mBACH,MAAO,qBAAqBb,EAAKqB,OACnC,IAAK,gBACH,MAAO,kBAAkBrB,EAAKC,OAChC,IAAK,2BACH,MAAO,6BAA6BD,EAAKsB,UAC3C,IAAK,iBACH,MAAO,mBAAmBtB,EAAKuB,UACjC,IAAK,qBACH,MAAO,uBAAuBvB,EAAKK,QACrC,IAAK,wBACH,MAAO,+BAA+BL,EAAKqB,OAC7C,IAAK,cACH,MAAO,mCACT,IAAK,wBACH,MAAO,sCACT,IAAK,2BACH,MAAO,oBAAoBrB,EAAKe,uBAAuBf,EAAKgB,QAC9D,IAAK,kBACH,MAAO,GAAGhB,EAAKwB,oBAAoBjB,EAASP,EAAKQ,QACnD,IAAK,iBACH,MAAO,iBAAiBR,EAAKyB,sCAAsCzB,EAAKgB,QAC1E,IAAK,mBACH,MAAO,yBAAyBT,EAASP,EAAKQ,QAChD,IAAK,kBACH,MAAO,sCAAsCR,EAAKS,YACpD,IAAK,sBACH,MAAO,8BAA8BF,EAASP,EAAKQ,QACrD,IAAK,qBACH,MAAO,yCAAyCR,EAAK0B,MAAMC,eAC7D,IAAK,oBACH,MAAO,qCAAqC3B,EAAK4B,UACnD,IAAK,wBACH,MAAO,yCAAyCrB,EAASP,EAAKQ,QAChE,IAAK,oBACH,MAAO,4DACT,IAAK,uBACH,MAAO,yEACT,IAAK,sBACH,MAAO,gFACT,IAAK,gBACH,MAAO,0BAA0BR,EAAKC,OACxC,IAAK,mBACH,MAAO,qBAAqBD,EAAKC,OACnC,IAAK,aACH,MAAO,uBAAuBD,EAAKC,OACrC,IAAK,gBACH,MAAO,kBAAkBD,EAAKC,OAChC,IAAK,mCACH,MAAO,+CAA+CD,EAAKC,OAC7D,IAAK,cACH,MAAO,gBAAgBD,EAAKM,SAC9B,IAAK,eACH,MAAO,iBAAiBN,EAAK6B,SAAS7B,EAAKM,UAC7C,IAAK,qBACH,MAAO,uBAAuBN,EAAKe,QACrC,IAAK,qBACH,MAAO,2BAA2Bf,EAAK8B,SACzC,IAAK,6BACH,MAAO,kCAAkCvB,EAASP,EAAKQ,QACzD,IAAK,4BACH,MAAO,4BACT,IAAK,mBACH,MAAO,+BAA+BR,EAAK+B,cAAc/B,EAAKgC,gBAAgBhC,EAAKiC,SACrF,IAAK,gBACH,MAAO,qBAAqBjC,EAAK+B,QAAQ/B,EAAKM,SAChD,IAAK,sBACH,MAAO,mCAAmCN,EAAKe,cACjD,IAAK,2BACH,MAAO,iDAAiDf,EAAK0B,MAAMC,eACrE,IAAK,qBACH,MAAO,wBAAwB3B,EAAKkC,6BAA6BlC,EAAKmC,WAAWR,qBACnF,IAAK,sBACH,MAAO,4BAA4B3B,EAAKkC,aAC1C,IAAK,iBACH,MAAO,kDACT,IAAK,wBACH,MAAO,GAAGlC,EAAKS,0EACjB,IAAK,wBACH,MAAO,GAAGT,EAAKe,gCAAgCf,EAAKgB,QACtD,IAAK,wBACH,MAAO,0BAA0BhB,EAAKiC,SACxC,IAAK,qBACH,MAAO,wEACT,IAAK,kBACH,MAAO,oBAAoBjC,EAAKoC,SAASpC,EAAKM,SAChD,IAAK,iBACH,MAAO,mBAAmBN,EAAKqC,YAAYrC,EAAKM,SAClD,IAAK,sBACH,MAAO,uEACT,IAAK,sBACH,MAAO,mCAAmCN,EAAKsC,YAAYtC,EAAKM,SAClE,IAAK,8BACH,MAAO,gCAAgCC,EAASP,EAAKQ,cAAcR,EAAKuC,cAAcvC,EAAKgB,QAC7F,IAAK,2BACH,MAAO,yBAAyBT,EAASP,EAAKQ,cAAcR,EAAKuC,cAAcvC,EAAKgB,QACtF,IAAK,gCACH,MAAO,mCAAmCT,EAASP,EAAKQ,cAAcR,EAAKuC,cAAcvC,EAAKgB,QAChG,IAAK,uBACH,MAAO,yBAAyBhB,EAAKM,SACvC,IAAK,mBACH,MAAO,qBAAqBN,EAAK+B,MACnC,IAAK,4BACH,MAAO,kCAAkC/B,EAAK+B,iBAAiB/B,EAAKwC,uBAAuBxC,EAAKyC,YAClG,IAAK,cACH,MAAO,QAAQzC,EAAK0C,8BAA8B1C,EAAK2C,WACzD,IAAK,sBACH,MAAO,0BAA0B3C,EAAK4C,UAAU5C,EAAKM,SACvD,IAAK,4BACH,MAAO,yDACT,QAEE,OAAOuC,OADoB7C,GAIjC,CAzQ2B8C,CAAc9C,MADlB+C,KAAA/C,KAAAA,CAErB,EAII,SAAUO,EAASC,GACvB,MAAMwC,EAAWxC,EAAKyC,MAAM,SAI5B,IAAK,IAAIC,EAAIF,EAASrB,OAAS,EAAGuB,GAAK,EAAGA,IAAK,CAC7C,MAAMC,EAAUH,EAASE,GACzB,QAAgBE,IAAZD,GAAqC,KAAZA,EAC3B,OAAOA,CAEX,CACA,OAAO3C,CACT,CCSA,MAAM6C,EAAsBC,IAC1B,IAAIC,EAAM,GACV,IAAK,IAAIL,EAAI,EAAGA,EAAII,EAAE3B,OAAQuB,GAAK,EAAG,CACpC,MAAM9C,EAAOkD,EAAEE,WAAWN,GAExBK,GADW,IAATnD,GAA0B,KAATA,GAAkBA,GAAQ,IAAQA,GAAQ,IACtDkD,EAAEJ,GAEF,MAAM9C,EAAKqD,SAAS,IAAIC,cAAcC,SAAS,EAAG,MAE7D,CACA,OAAOJ,GAGIK,EAAWP,kDAqHU,CAChCf,EACAhC,IAEA,IAAIR,EAAW,CACbM,KAAM,sBACNkC,UACAhC,OAAQ+C,EAAmB/C,gCA5GG,IAAkB,IAAIR,EAAW,CAAEM,KAAM,4CAoBhD,CAACyB,EAAcvB,IACxC,IAAIR,EAAW,CACbM,KAAM,eACNyB,KAAMwB,EAAmBxB,GACzBvB,OAAQ+C,EAAmB/C,0BAtBFL,GAC3B,IAAIH,EAAW,CAAEM,KAAM,gBAAiBH,gCAEXA,GAC7B,IAAIH,EAAW,CAAEM,KAAM,mBAAoBH,8CAQAA,GAC3C,IAAIH,EAAW,CAAEM,KAAM,mCAAoCH,wCA0DtByB,GACrC,IAAI5B,EAAW,CAAEM,KAAM,2BAA4BsB,iCDzFtBpB,GAC7B,IAAIR,EAAW,CAAEM,KAAM,kBAAmBE,oCAEXA,GAC/B,IAAIR,EAAW,CAAEM,KAAM,oBAAqBE,qCAhBZE,GAChC,IAAIV,EAAW,CAAEM,KAAM,sBAAuBI,oCCuBd,IAChC,IAAIV,EAAW,CAAEM,KAAM,+CAsFI,IAAkB,IAAIN,EAAW,CAAEM,KAAM,sCDrH3CI,GACzB,IAAIV,EAAW,CAAEM,KAAM,cAAeI,8BAJXA,GAC3B,IAAIV,EAAW,CAAEM,KAAM,iBAAkBI,uCCqJN,CAACA,EAAgB+B,EAAcvB,IAClE,IAAIlB,EAAW,CAAEM,KAAM,2BAA4BI,OAAM+B,OAAMvB,6BDrItCV,GACzB,IAAIR,EAAW,CAAEM,KAAM,cAAeE,8BCoJd,CAACoC,EAAgBC,EAAkBkB,IAC3D,IAAI/D,EAAW,CACbM,KAAM,cACNsC,OACAC,WACAkB,OAAQR,EAAmBQ,GAAQC,MAAM,EAPL,0BD1If,CAACpD,EAAoBJ,IAC5C,IAAIR,EAAW,CAAEM,KAAM,aAAcM,aAAYJ,iCCwGtB,CAAC+B,EAAgB/B,IAC5C,IAAIR,EAAW,CAAEM,KAAM,iBAAkBiC,SAAQ/B,OAAQ+C,EAAmB/C,wBAhFnDA,GACzB,IAAIR,EAAW,CAAEM,KAAM,cAAeE,oCDrBPA,GAC/B,IAAIR,EAAW,CAAEM,KAAM,qBAAsBE,qCC8Dd,CAC/BS,EACAW,EAAiC,MAEjC,MAAMqC,EAAYrC,EAAMC,OANiB,IAOnCqC,EAAcD,EAAYrC,EAAMoC,MAAM,EAPH,KAOqCpC,EAC9E,OAAO,IAAI5B,EACTiE,EACI,CAAE3D,KAAM,sBAAuBW,QAAOW,MAAOsC,EAAaD,WAAW,GACrE,CAAE3D,KAAM,sBAAuBW,QAAOW,MAAOsC,0BD3ExB1D,GAC3B,IAAIR,EAAW,CAAEM,KAAM,gBAAiBE,oCC4CV,IAAkB,IAAIR,EAAW,CAAEM,KAAM,8CAE3C,CAAC2B,EAAcC,EAAiBC,IAC5D,IAAInC,EAAW,CAAEM,KAAM,mBAAoB2B,MAAKC,QAAOC,iCDxE3BzB,GAC5B,IAAIV,EAAW,CAAEM,KAAM,kBAAmBI,iCCwBb,IAAkB,IAAIV,EAAW,CAAEM,KAAM,+CDKxC,IAAkB,IAAIN,EAAW,CAAEM,KAAM,kDCuFvEK,GACe,IAAIX,EAAW,CAAEM,KAAM,wBAAyBK,sCAnGjCmB,GAC9B,IAAI9B,EAAW,CAAEM,KAAM,oBAAqBwB,wCAEVpB,GAClC,IAAIV,EAAW,CAAEM,KAAM,wBAAyBI,kCDjBjBA,GAC/B,IAAIV,EAAW,CAAEM,KAAM,oBAAqBI,8BCmElB,CAC1BuB,EACAzB,EACA2D,IACe,IAAInE,EAAW,CAAEM,KAAM,gBAAiB2B,MAAKzB,SAAQ2D,gDAZhC,IACpC,IAAInE,EAAW,CAAEM,KAAM,0DAwDW6B,GAClC,IAAInC,EAAW,CAAEM,KAAM,wBAAyB6B,sCAKhB,IAAkB,IAAInC,EAAW,CAAEM,KAAM,mDAlBxC8B,GACjC,IAAIpC,EAAW,CAAEM,KAAM,sBAAuB8B,oEAmCP,CACvC1B,EACA+B,EACAvB,IACe,IAAIlB,EAAW,CAAEM,KAAM,gCAAiCI,OAAM+B,OAAMvB,4BAjH3Df,GACxB,IAAIH,EAAW,CAAEM,KAAM,aAAcH,6BAEXA,GAC1B,IAAIH,EAAW,CAAEM,KAAM,gBAAiBH,yCAqBFO,GACtC,IAAIV,EAAW,CAAEM,KAAM,6BAA8BI,sCDvDnB,CAACC,EAAmBH,IACtD,IAAIR,EAAW,CAAEM,KAAM,wBAAyBK,YAAWH,qCCkD3BwB,GAChC,IAAIhC,EAAW,CAAEM,KAAM,qBAAsB0B,2CAgFR,CAACtB,EAAgB+B,EAAcvB,IACpE,IAAIlB,EAAW,CAAEM,KAAM,8BAA+BI,OAAM+B,OAAMvB"}