gitx.do 0.0.3 → 0.1.1

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 (231) hide show
  1. package/README.md +319 -92
  2. package/dist/cli/commands/add.d.ts +176 -0
  3. package/dist/cli/commands/add.d.ts.map +1 -0
  4. package/dist/cli/commands/add.js +979 -0
  5. package/dist/cli/commands/add.js.map +1 -0
  6. package/dist/cli/commands/blame.d.ts +1 -1
  7. package/dist/cli/commands/blame.d.ts.map +1 -1
  8. package/dist/cli/commands/blame.js +1 -1
  9. package/dist/cli/commands/blame.js.map +1 -1
  10. package/dist/cli/commands/branch.d.ts +1 -1
  11. package/dist/cli/commands/branch.d.ts.map +1 -1
  12. package/dist/cli/commands/branch.js +2 -2
  13. package/dist/cli/commands/branch.js.map +1 -1
  14. package/dist/cli/commands/checkout.d.ts +73 -0
  15. package/dist/cli/commands/checkout.d.ts.map +1 -0
  16. package/dist/cli/commands/checkout.js +725 -0
  17. package/dist/cli/commands/checkout.js.map +1 -0
  18. package/dist/cli/commands/commit.d.ts.map +1 -1
  19. package/dist/cli/commands/commit.js +22 -2
  20. package/dist/cli/commands/commit.js.map +1 -1
  21. package/dist/cli/commands/diff.d.ts +4 -4
  22. package/dist/cli/commands/diff.d.ts.map +1 -1
  23. package/dist/cli/commands/diff.js +9 -8
  24. package/dist/cli/commands/diff.js.map +1 -1
  25. package/dist/cli/commands/log.d.ts +1 -1
  26. package/dist/cli/commands/log.d.ts.map +1 -1
  27. package/dist/cli/commands/log.js +1 -1
  28. package/dist/cli/commands/log.js.map +1 -1
  29. package/dist/cli/commands/merge.d.ts +106 -0
  30. package/dist/cli/commands/merge.d.ts.map +1 -0
  31. package/dist/cli/commands/merge.js +852 -0
  32. package/dist/cli/commands/merge.js.map +1 -0
  33. package/dist/cli/commands/review.d.ts +1 -1
  34. package/dist/cli/commands/review.d.ts.map +1 -1
  35. package/dist/cli/commands/review.js +26 -1
  36. package/dist/cli/commands/review.js.map +1 -1
  37. package/dist/cli/commands/stash.d.ts +157 -0
  38. package/dist/cli/commands/stash.d.ts.map +1 -0
  39. package/dist/cli/commands/stash.js +655 -0
  40. package/dist/cli/commands/stash.js.map +1 -0
  41. package/dist/cli/commands/status.d.ts.map +1 -1
  42. package/dist/cli/commands/status.js +1 -2
  43. package/dist/cli/commands/status.js.map +1 -1
  44. package/dist/cli/commands/web.d.ts.map +1 -1
  45. package/dist/cli/commands/web.js +3 -2
  46. package/dist/cli/commands/web.js.map +1 -1
  47. package/dist/cli/fs-adapter.d.ts.map +1 -1
  48. package/dist/cli/fs-adapter.js +3 -5
  49. package/dist/cli/fs-adapter.js.map +1 -1
  50. package/dist/cli/fsx-cli-adapter.d.ts +359 -0
  51. package/dist/cli/fsx-cli-adapter.d.ts.map +1 -0
  52. package/dist/cli/fsx-cli-adapter.js +619 -0
  53. package/dist/cli/fsx-cli-adapter.js.map +1 -0
  54. package/dist/cli/index.d.ts.map +1 -1
  55. package/dist/cli/index.js +68 -12
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/cli/ui/components/DiffView.d.ts +7 -2
  58. package/dist/cli/ui/components/DiffView.d.ts.map +1 -1
  59. package/dist/cli/ui/components/DiffView.js.map +1 -1
  60. package/dist/cli/ui/components/ErrorDisplay.d.ts +6 -2
  61. package/dist/cli/ui/components/ErrorDisplay.d.ts.map +1 -1
  62. package/dist/cli/ui/components/ErrorDisplay.js.map +1 -1
  63. package/dist/cli/ui/components/FuzzySearch.d.ts +8 -2
  64. package/dist/cli/ui/components/FuzzySearch.d.ts.map +1 -1
  65. package/dist/cli/ui/components/FuzzySearch.js.map +1 -1
  66. package/dist/cli/ui/components/LoadingSpinner.d.ts +6 -2
  67. package/dist/cli/ui/components/LoadingSpinner.d.ts.map +1 -1
  68. package/dist/cli/ui/components/LoadingSpinner.js.map +1 -1
  69. package/dist/cli/ui/components/NavigationList.d.ts +7 -2
  70. package/dist/cli/ui/components/NavigationList.d.ts.map +1 -1
  71. package/dist/cli/ui/components/NavigationList.js.map +1 -1
  72. package/dist/cli/ui/components/ScrollableContent.d.ts +7 -2
  73. package/dist/cli/ui/components/ScrollableContent.d.ts.map +1 -1
  74. package/dist/cli/ui/components/ScrollableContent.js.map +1 -1
  75. package/dist/cli/ui/terminal-ui.d.ts +42 -9
  76. package/dist/cli/ui/terminal-ui.d.ts.map +1 -1
  77. package/dist/cli/ui/terminal-ui.js.map +1 -1
  78. package/dist/do/BashModule.d.ts +871 -0
  79. package/dist/do/BashModule.d.ts.map +1 -0
  80. package/dist/do/BashModule.js +1143 -0
  81. package/dist/do/BashModule.js.map +1 -0
  82. package/dist/do/FsModule.d.ts +612 -0
  83. package/dist/do/FsModule.d.ts.map +1 -0
  84. package/dist/do/FsModule.js +1120 -0
  85. package/dist/do/FsModule.js.map +1 -0
  86. package/dist/do/GitModule.d.ts +635 -0
  87. package/dist/do/GitModule.d.ts.map +1 -0
  88. package/dist/do/GitModule.js +784 -0
  89. package/dist/do/GitModule.js.map +1 -0
  90. package/dist/do/GitRepoDO.d.ts +281 -0
  91. package/dist/do/GitRepoDO.d.ts.map +1 -0
  92. package/dist/do/GitRepoDO.js +479 -0
  93. package/dist/do/GitRepoDO.js.map +1 -0
  94. package/dist/do/bash-ast.d.ts +246 -0
  95. package/dist/do/bash-ast.d.ts.map +1 -0
  96. package/dist/do/bash-ast.js +888 -0
  97. package/dist/do/bash-ast.js.map +1 -0
  98. package/dist/do/container-executor.d.ts +491 -0
  99. package/dist/do/container-executor.d.ts.map +1 -0
  100. package/dist/do/container-executor.js +731 -0
  101. package/dist/do/container-executor.js.map +1 -0
  102. package/dist/do/index.d.ts +53 -0
  103. package/dist/do/index.d.ts.map +1 -0
  104. package/dist/do/index.js +91 -0
  105. package/dist/do/index.js.map +1 -0
  106. package/dist/do/tiered-storage.d.ts +403 -0
  107. package/dist/do/tiered-storage.d.ts.map +1 -0
  108. package/dist/do/tiered-storage.js +689 -0
  109. package/dist/do/tiered-storage.js.map +1 -0
  110. package/dist/do/withBash.d.ts +231 -0
  111. package/dist/do/withBash.d.ts.map +1 -0
  112. package/dist/do/withBash.js +244 -0
  113. package/dist/do/withBash.js.map +1 -0
  114. package/dist/do/withFs.d.ts +237 -0
  115. package/dist/do/withFs.d.ts.map +1 -0
  116. package/dist/do/withFs.js +387 -0
  117. package/dist/do/withFs.js.map +1 -0
  118. package/dist/do/withGit.d.ts +180 -0
  119. package/dist/do/withGit.d.ts.map +1 -0
  120. package/dist/do/withGit.js +271 -0
  121. package/dist/do/withGit.js.map +1 -0
  122. package/dist/durable-object/object-store.d.ts +157 -15
  123. package/dist/durable-object/object-store.d.ts.map +1 -1
  124. package/dist/durable-object/object-store.js +435 -47
  125. package/dist/durable-object/object-store.js.map +1 -1
  126. package/dist/durable-object/schema.d.ts +12 -1
  127. package/dist/durable-object/schema.d.ts.map +1 -1
  128. package/dist/durable-object/schema.js +87 -2
  129. package/dist/durable-object/schema.js.map +1 -1
  130. package/dist/index.d.ts +84 -1
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +34 -0
  133. package/dist/index.js.map +1 -1
  134. package/dist/mcp/sandbox/miniflare-evaluator.d.ts +22 -0
  135. package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +1 -0
  136. package/dist/mcp/sandbox/miniflare-evaluator.js +140 -0
  137. package/dist/mcp/sandbox/miniflare-evaluator.js.map +1 -0
  138. package/dist/mcp/sandbox/object-store-proxy.d.ts +32 -0
  139. package/dist/mcp/sandbox/object-store-proxy.d.ts.map +1 -0
  140. package/dist/mcp/sandbox/object-store-proxy.js +30 -0
  141. package/dist/mcp/sandbox/object-store-proxy.js.map +1 -0
  142. package/dist/mcp/sandbox/template.d.ts +17 -0
  143. package/dist/mcp/sandbox/template.d.ts.map +1 -0
  144. package/dist/mcp/sandbox/template.js +71 -0
  145. package/dist/mcp/sandbox/template.js.map +1 -0
  146. package/dist/mcp/sandbox.d.ts.map +1 -1
  147. package/dist/mcp/sandbox.js +16 -4
  148. package/dist/mcp/sandbox.js.map +1 -1
  149. package/dist/mcp/tools/do.d.ts +32 -0
  150. package/dist/mcp/tools/do.d.ts.map +1 -0
  151. package/dist/mcp/tools/do.js +117 -0
  152. package/dist/mcp/tools/do.js.map +1 -0
  153. package/dist/mcp/tools.d.ts.map +1 -1
  154. package/dist/mcp/tools.js +1258 -22
  155. package/dist/mcp/tools.js.map +1 -1
  156. package/dist/pack/delta.d.ts +8 -0
  157. package/dist/pack/delta.d.ts.map +1 -1
  158. package/dist/pack/delta.js +241 -30
  159. package/dist/pack/delta.js.map +1 -1
  160. package/dist/refs/branch.d.ts +38 -25
  161. package/dist/refs/branch.d.ts.map +1 -1
  162. package/dist/refs/branch.js +421 -94
  163. package/dist/refs/branch.js.map +1 -1
  164. package/dist/refs/storage.d.ts +77 -5
  165. package/dist/refs/storage.d.ts.map +1 -1
  166. package/dist/refs/storage.js +193 -43
  167. package/dist/refs/storage.js.map +1 -1
  168. package/dist/refs/tag.d.ts +44 -24
  169. package/dist/refs/tag.d.ts.map +1 -1
  170. package/dist/refs/tag.js +411 -70
  171. package/dist/refs/tag.js.map +1 -1
  172. package/dist/storage/backend.d.ts +425 -0
  173. package/dist/storage/backend.d.ts.map +1 -0
  174. package/dist/storage/backend.js +41 -0
  175. package/dist/storage/backend.js.map +1 -0
  176. package/dist/storage/fsx-adapter.d.ts +204 -0
  177. package/dist/storage/fsx-adapter.d.ts.map +1 -0
  178. package/dist/storage/fsx-adapter.js +518 -0
  179. package/dist/storage/fsx-adapter.js.map +1 -0
  180. package/dist/storage/r2-pack.d.ts.map +1 -1
  181. package/dist/storage/r2-pack.js +4 -1
  182. package/dist/storage/r2-pack.js.map +1 -1
  183. package/dist/tiered/cdc-pipeline.js +3 -3
  184. package/dist/tiered/cdc-pipeline.js.map +1 -1
  185. package/dist/tiered/migration.d.ts.map +1 -1
  186. package/dist/tiered/migration.js +4 -1
  187. package/dist/tiered/migration.js.map +1 -1
  188. package/dist/types/capability.d.ts +1385 -0
  189. package/dist/types/capability.d.ts.map +1 -0
  190. package/dist/types/capability.js +36 -0
  191. package/dist/types/capability.js.map +1 -0
  192. package/dist/types/index.d.ts +13 -0
  193. package/dist/types/index.d.ts.map +1 -0
  194. package/dist/types/index.js +18 -0
  195. package/dist/types/index.js.map +1 -0
  196. package/dist/types/interfaces.d.ts +673 -0
  197. package/dist/types/interfaces.d.ts.map +1 -0
  198. package/dist/types/interfaces.js +26 -0
  199. package/dist/types/interfaces.js.map +1 -0
  200. package/dist/types/objects.d.ts +182 -0
  201. package/dist/types/objects.d.ts.map +1 -1
  202. package/dist/types/objects.js +249 -4
  203. package/dist/types/objects.js.map +1 -1
  204. package/dist/types/storage.d.ts +114 -0
  205. package/dist/types/storage.d.ts.map +1 -1
  206. package/dist/types/storage.js +160 -1
  207. package/dist/types/storage.js.map +1 -1
  208. package/dist/types/worker-loader.d.ts +60 -0
  209. package/dist/types/worker-loader.d.ts.map +1 -0
  210. package/dist/types/worker-loader.js +62 -0
  211. package/dist/types/worker-loader.js.map +1 -0
  212. package/dist/utils/hash.d.ts +126 -80
  213. package/dist/utils/hash.d.ts.map +1 -1
  214. package/dist/utils/hash.js +191 -100
  215. package/dist/utils/hash.js.map +1 -1
  216. package/dist/utils/sha1.d.ts +206 -0
  217. package/dist/utils/sha1.d.ts.map +1 -1
  218. package/dist/utils/sha1.js +405 -0
  219. package/dist/utils/sha1.js.map +1 -1
  220. package/dist/wire/path-security.d.ts +157 -0
  221. package/dist/wire/path-security.d.ts.map +1 -0
  222. package/dist/wire/path-security.js +307 -0
  223. package/dist/wire/path-security.js.map +1 -0
  224. package/dist/wire/receive-pack.d.ts +7 -0
  225. package/dist/wire/receive-pack.d.ts.map +1 -1
  226. package/dist/wire/receive-pack.js +29 -1
  227. package/dist/wire/receive-pack.js.map +1 -1
  228. package/dist/wire/upload-pack.d.ts.map +1 -1
  229. package/dist/wire/upload-pack.js +4 -1
  230. package/dist/wire/upload-pack.js.map +1 -1
  231. package/package.json +10 -1
@@ -1 +1 @@
1
- {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/refs/branch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/refs/branch.ts"],"names":[],"mappings":"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"}
@@ -11,15 +11,22 @@
11
11
  * - **Loose refs**: Individual ref files in .git/refs/
12
12
  * - **Packed refs**: Consolidated refs in .git/packed-refs for efficiency
13
13
  *
14
+ * **Backend Support**:
15
+ * - `RefStorageBackend`: Full-featured backend with locking and packed refs
16
+ * - `StorageBackend`: Simpler backend interface (optional, from storage/backend.ts)
17
+ *
14
18
  * @module refs/storage
15
19
  *
16
20
  * @example
17
21
  * ```typescript
18
22
  * import { RefStorage, isValidRefName, isValidSha } from './refs/storage'
19
23
  *
20
- * // Create storage with backend
24
+ * // Create storage with RefStorageBackend (full features)
21
25
  * const storage = new RefStorage(backend)
22
26
  *
27
+ * // Or create with StorageBackend (simpler, optional)
28
+ * const storage = new RefStorage({ storageBackend: myStorageBackend })
29
+ *
23
30
  * // Resolve HEAD to get current commit
24
31
  * const resolved = await storage.resolveRef('HEAD')
25
32
  * console.log(`Current commit: ${resolved.sha}`)
@@ -31,6 +38,7 @@
31
38
  * const branches = await storage.listBranches()
32
39
  * ```
33
40
  */
41
+ import type { StorageBackend } from '../storage/backend';
34
42
  /**
35
43
  * Type discriminator for reference types.
36
44
  *
@@ -265,6 +273,26 @@ export interface RefStorageBackend {
265
273
  */
266
274
  writePackedRefs(refs: Map<string, string>): Promise<void>;
267
275
  }
276
+ /**
277
+ * Options for creating a RefStorage instance.
278
+ *
279
+ * @description
280
+ * Supports two modes of operation:
281
+ * 1. Pass a RefStorageBackend directly for full features (locking, packed refs)
282
+ * 2. Pass options object with storageBackend for simpler StorageBackend integration
283
+ *
284
+ * When using StorageBackend:
285
+ * - Locking operations become no-ops (always succeed)
286
+ * - Packed refs operations are not available
287
+ * - Basic ref operations delegate to StorageBackend methods
288
+ */
289
+ export interface RefStorageOptions {
290
+ /**
291
+ * Optional StorageBackend for simpler ref operations.
292
+ * When provided, ref operations delegate to this backend.
293
+ */
294
+ storageBackend?: StorageBackend;
295
+ }
268
296
  /**
269
297
  * Validate a ref name according to Git rules.
270
298
  *
@@ -408,10 +436,18 @@ export declare function serializePackedRefs(refs: Map<string, string>): string;
408
436
  * Provides a high-level API for managing Git references. Handles ref
409
437
  * resolution, updates with locking, symbolic refs, and packed refs.
410
438
  *
439
+ * Supports two backend modes:
440
+ * 1. RefStorageBackend - Full features including locking and packed refs
441
+ * 2. StorageBackend - Simpler interface with basic ref operations
442
+ *
411
443
  * @example
412
444
  * ```typescript
445
+ * // With RefStorageBackend (full features)
413
446
  * const storage = new RefStorage(myBackend)
414
447
  *
448
+ * // With StorageBackend (simpler)
449
+ * const storage = new RefStorage({ storageBackend: myStorageBackend })
450
+ *
415
451
  * // Get current branch
416
452
  * const head = await storage.getHead()
417
453
  * if (head.type === 'symbolic') {
@@ -427,13 +463,43 @@ export declare function serializePackedRefs(refs: Map<string, string>): string;
427
463
  * ```
428
464
  */
429
465
  export declare class RefStorage {
430
- private backend;
466
+ private backend?;
467
+ private storageBackend?;
431
468
  /**
432
469
  * Create a new RefStorage instance.
433
470
  *
434
- * @param backend - Storage backend for persistence
471
+ * @param backendOrOptions - Either a RefStorageBackend directly, or options with storageBackend
472
+ *
473
+ * @example
474
+ * ```typescript
475
+ * // Direct backend
476
+ * const storage = new RefStorage(myRefStorageBackend)
477
+ *
478
+ * // Options with StorageBackend
479
+ * const storage = new RefStorage({ storageBackend: myStorageBackend })
480
+ * ```
435
481
  */
436
- constructor(backend: RefStorageBackend);
482
+ constructor(backendOrOptions: RefStorageBackend | RefStorageOptions);
483
+ /**
484
+ * Internal helper to get a lock (or no-op lock for StorageBackend).
485
+ *
486
+ * @description
487
+ * When using StorageBackend, returns a no-op lock since StorageBackend
488
+ * doesn't support locking. Callers should still use try/finally to release.
489
+ */
490
+ private getLock;
491
+ /**
492
+ * Internal helper to write a ref.
493
+ */
494
+ private writeRef;
495
+ /**
496
+ * Internal helper to delete a ref.
497
+ */
498
+ private removeRef;
499
+ /**
500
+ * Internal helper to list refs.
501
+ */
502
+ private getAllRefs;
437
503
  /**
438
504
  * Get a ref by name.
439
505
  *
@@ -443,7 +509,7 @@ export declare class RefStorage {
443
509
  *
444
510
  * @param name - Full ref name
445
511
  * @returns The ref or null if not found
446
- * @throws Error if backend doesn't support readRef
512
+ * @throws Error if no backend is configured
447
513
  *
448
514
  * @example
449
515
  * ```typescript
@@ -515,6 +581,7 @@ export declare class RefStorage {
515
581
  *
516
582
  * @description
517
583
  * Removes a ref from storage. HEAD cannot be deleted.
584
+ * Uses locking for atomic compare-and-swap operations when oldValue is specified.
518
585
  *
519
586
  * @param name - Full ref name to delete
520
587
  * @param options - Delete options (oldValue for CAS)
@@ -614,6 +681,7 @@ export declare class RefStorage {
614
681
  *
615
682
  * @description
616
683
  * Sets HEAD to point to a branch (symbolic) or commit (detached).
684
+ * Uses locking to ensure atomic updates to HEAD.
617
685
  *
618
686
  * @param target - Branch ref name (symbolic) or SHA (detached)
619
687
  * @param symbolic - If true, create symbolic ref; if false, direct ref
@@ -652,6 +720,7 @@ export declare class RefStorage {
652
720
  * @description
653
721
  * Creates a ref that points to another ref name (not a SHA).
654
722
  * Used primarily for HEAD pointing to a branch.
723
+ * Uses locking to ensure atomic creation.
655
724
  *
656
725
  * @param name - Name for the new symbolic ref
657
726
  * @param target - Target ref name (not SHA)
@@ -697,6 +766,9 @@ export declare class RefStorage {
697
766
  * This improves performance for repositories with many refs.
698
767
  * HEAD and symbolic refs are not packed.
699
768
  *
769
+ * Uses a transactional approach by acquiring locks on all refs being packed
770
+ * to ensure consistency during the packing operation.
771
+ *
700
772
  * @example
701
773
  * ```typescript
702
774
  * // After creating many branches/tags
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/refs/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/refs/storage.ts"],"names":[],"mappings":"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"}
@@ -11,15 +11,22 @@
11
11
  * - **Loose refs**: Individual ref files in .git/refs/
12
12
  * - **Packed refs**: Consolidated refs in .git/packed-refs for efficiency
13
13
  *
14
+ * **Backend Support**:
15
+ * - `RefStorageBackend`: Full-featured backend with locking and packed refs
16
+ * - `StorageBackend`: Simpler backend interface (optional, from storage/backend.ts)
17
+ *
14
18
  * @module refs/storage
15
19
  *
16
20
  * @example
17
21
  * ```typescript
18
22
  * import { RefStorage, isValidRefName, isValidSha } from './refs/storage'
19
23
  *
20
- * // Create storage with backend
24
+ * // Create storage with RefStorageBackend (full features)
21
25
  * const storage = new RefStorage(backend)
22
26
  *
27
+ * // Or create with StorageBackend (simpler, optional)
28
+ * const storage = new RefStorage({ storageBackend: myStorageBackend })
29
+ *
23
30
  * // Resolve HEAD to get current commit
24
31
  * const resolved = await storage.resolveRef('HEAD')
25
32
  * console.log(`Current commit: ${resolved.sha}`)
@@ -328,10 +335,18 @@ export function serializePackedRefs(refs) {
328
335
  * Provides a high-level API for managing Git references. Handles ref
329
336
  * resolution, updates with locking, symbolic refs, and packed refs.
330
337
  *
338
+ * Supports two backend modes:
339
+ * 1. RefStorageBackend - Full features including locking and packed refs
340
+ * 2. StorageBackend - Simpler interface with basic ref operations
341
+ *
331
342
  * @example
332
343
  * ```typescript
344
+ * // With RefStorageBackend (full features)
333
345
  * const storage = new RefStorage(myBackend)
334
346
  *
347
+ * // With StorageBackend (simpler)
348
+ * const storage = new RefStorage({ storageBackend: myStorageBackend })
349
+ *
335
350
  * // Get current branch
336
351
  * const head = await storage.getHead()
337
352
  * if (head.type === 'symbolic') {
@@ -348,13 +363,90 @@ export function serializePackedRefs(refs) {
348
363
  */
349
364
  export class RefStorage {
350
365
  backend;
366
+ storageBackend;
351
367
  /**
352
368
  * Create a new RefStorage instance.
353
369
  *
354
- * @param backend - Storage backend for persistence
370
+ * @param backendOrOptions - Either a RefStorageBackend directly, or options with storageBackend
371
+ *
372
+ * @example
373
+ * ```typescript
374
+ * // Direct backend
375
+ * const storage = new RefStorage(myRefStorageBackend)
376
+ *
377
+ * // Options with StorageBackend
378
+ * const storage = new RefStorage({ storageBackend: myStorageBackend })
379
+ * ```
355
380
  */
356
- constructor(backend) {
357
- this.backend = backend;
381
+ constructor(backendOrOptions) {
382
+ // Type guard: RefStorageOptions has storageBackend, RefStorageBackend has readRef
383
+ if ('storageBackend' in backendOrOptions && !('readRef' in backendOrOptions)) {
384
+ // Options object with StorageBackend
385
+ this.storageBackend = backendOrOptions.storageBackend;
386
+ }
387
+ else {
388
+ // Direct RefStorageBackend
389
+ this.backend = backendOrOptions;
390
+ }
391
+ }
392
+ /**
393
+ * Internal helper to get a lock (or no-op lock for StorageBackend).
394
+ *
395
+ * @description
396
+ * When using StorageBackend, returns a no-op lock since StorageBackend
397
+ * doesn't support locking. Callers should still use try/finally to release.
398
+ */
399
+ async getLock(name, _timeout) {
400
+ if (this.storageBackend) {
401
+ // No-op lock for StorageBackend
402
+ return {
403
+ refName: name,
404
+ release: async () => { },
405
+ isHeld: () => true
406
+ };
407
+ }
408
+ if (!this.backend) {
409
+ throw new Error('No backend configured');
410
+ }
411
+ return this.backend.acquireLock(name, _timeout);
412
+ }
413
+ /**
414
+ * Internal helper to write a ref.
415
+ */
416
+ async writeRef(ref) {
417
+ if (this.storageBackend) {
418
+ await this.storageBackend.setRef(ref.name, ref);
419
+ return;
420
+ }
421
+ if (!this.backend) {
422
+ throw new Error('No backend configured');
423
+ }
424
+ await this.backend.writeRef(ref);
425
+ }
426
+ /**
427
+ * Internal helper to delete a ref.
428
+ */
429
+ async removeRef(name) {
430
+ if (this.storageBackend) {
431
+ await this.storageBackend.deleteRef(name);
432
+ return true;
433
+ }
434
+ if (!this.backend) {
435
+ throw new Error('No backend configured');
436
+ }
437
+ return this.backend.deleteRef(name);
438
+ }
439
+ /**
440
+ * Internal helper to list refs.
441
+ */
442
+ async getAllRefs(pattern) {
443
+ if (this.storageBackend) {
444
+ return this.storageBackend.listRefs(pattern);
445
+ }
446
+ if (!this.backend) {
447
+ throw new Error('No backend configured');
448
+ }
449
+ return this.backend.listRefs(pattern);
358
450
  }
359
451
  /**
360
452
  * Get a ref by name.
@@ -365,7 +457,7 @@ export class RefStorage {
365
457
  *
366
458
  * @param name - Full ref name
367
459
  * @returns The ref or null if not found
368
- * @throws Error if backend doesn't support readRef
460
+ * @throws Error if no backend is configured
369
461
  *
370
462
  * @example
371
463
  * ```typescript
@@ -376,8 +468,13 @@ export class RefStorage {
376
468
  * ```
377
469
  */
378
470
  async getRef(name) {
379
- if (!this.backend.readRef) {
380
- throw new Error('Backend does not support readRef');
471
+ // Use StorageBackend if available
472
+ if (this.storageBackend) {
473
+ return this.storageBackend.getRef(name);
474
+ }
475
+ // Fall back to RefStorageBackend
476
+ if (!this.backend?.readRef) {
477
+ throw new Error('No backend configured or backend does not support readRef');
381
478
  }
382
479
  return this.backend.readRef(name);
383
480
  }
@@ -477,7 +574,7 @@ export class RefStorage {
477
574
  }
478
575
  // Use provided lock or acquire a new one
479
576
  const externalLock = options?.lock;
480
- const lock = externalLock ?? await this.backend.acquireLock(name);
577
+ const lock = externalLock ?? await this.getLock(name);
481
578
  try {
482
579
  const existingRef = await this.getRef(name);
483
580
  // Handle oldValue check (CAS - compare and swap)
@@ -504,7 +601,7 @@ export class RefStorage {
504
601
  target,
505
602
  type: 'direct'
506
603
  };
507
- await this.backend.writeRef(ref);
604
+ await this.writeRef(ref);
508
605
  return ref;
509
606
  }
510
607
  finally {
@@ -519,6 +616,7 @@ export class RefStorage {
519
616
  *
520
617
  * @description
521
618
  * Removes a ref from storage. HEAD cannot be deleted.
619
+ * Uses locking for atomic compare-and-swap operations when oldValue is specified.
522
620
  *
523
621
  * @param name - Full ref name to delete
524
622
  * @param options - Delete options (oldValue for CAS)
@@ -544,17 +642,24 @@ export class RefStorage {
544
642
  if (!isValidRefName(name)) {
545
643
  throw new RefError(`Invalid ref name: ${name}`, 'INVALID_NAME', name);
546
644
  }
547
- const existingRef = await this.getRef(name);
548
- // Check oldValue if provided
549
- if (options?.oldValue !== undefined && options.oldValue !== null) {
550
- if (!existingRef || existingRef.target !== options.oldValue) {
551
- throw new RefError(`Ref value mismatch: ${name}`, 'CONFLICT', name);
645
+ // Acquire lock for atomic operation
646
+ const lock = await this.getLock(name);
647
+ try {
648
+ const existingRef = await this.getRef(name);
649
+ // Check oldValue if provided (compare-and-swap pattern)
650
+ if (options?.oldValue !== undefined && options.oldValue !== null) {
651
+ if (!existingRef || existingRef.target !== options.oldValue) {
652
+ throw new RefError(`Ref value mismatch: ${name}`, 'CONFLICT', name);
653
+ }
654
+ }
655
+ if (!existingRef) {
656
+ return false;
552
657
  }
658
+ return this.removeRef(name);
553
659
  }
554
- if (!existingRef) {
555
- return false;
660
+ finally {
661
+ await lock.release();
556
662
  }
557
- return this.backend.deleteRef(name);
558
663
  }
559
664
  /**
560
665
  * List refs matching a pattern.
@@ -579,7 +684,7 @@ export class RefStorage {
579
684
  * ```
580
685
  */
581
686
  async listRefs(options) {
582
- let refs = await this.backend.listRefs(options?.pattern);
687
+ let refs = await this.getAllRefs(options?.pattern);
583
688
  // Filter out HEAD unless explicitly requested
584
689
  if (!options?.includeHead) {
585
690
  refs = refs.filter(r => r.name !== 'HEAD');
@@ -670,6 +775,7 @@ export class RefStorage {
670
775
  *
671
776
  * @description
672
777
  * Sets HEAD to point to a branch (symbolic) or commit (detached).
778
+ * Uses locking to ensure atomic updates to HEAD.
673
779
  *
674
780
  * @param target - Branch ref name (symbolic) or SHA (detached)
675
781
  * @param symbolic - If true, create symbolic ref; if false, direct ref
@@ -685,13 +791,20 @@ export class RefStorage {
685
791
  * ```
686
792
  */
687
793
  async updateHead(target, symbolic) {
688
- const ref = {
689
- name: 'HEAD',
690
- target,
691
- type: symbolic ? 'symbolic' : 'direct'
692
- };
693
- await this.backend.writeRef(ref);
694
- return ref;
794
+ // Acquire lock for atomic HEAD update
795
+ const lock = await this.getLock('HEAD');
796
+ try {
797
+ const ref = {
798
+ name: 'HEAD',
799
+ target,
800
+ type: symbolic ? 'symbolic' : 'direct'
801
+ };
802
+ await this.writeRef(ref);
803
+ return ref;
804
+ }
805
+ finally {
806
+ await lock.release();
807
+ }
695
808
  }
696
809
  /**
697
810
  * Check if HEAD is detached.
@@ -719,6 +832,7 @@ export class RefStorage {
719
832
  * @description
720
833
  * Creates a ref that points to another ref name (not a SHA).
721
834
  * Used primarily for HEAD pointing to a branch.
835
+ * Uses locking to ensure atomic creation.
722
836
  *
723
837
  * @param name - Name for the new symbolic ref
724
838
  * @param target - Target ref name (not SHA)
@@ -741,13 +855,20 @@ export class RefStorage {
741
855
  if (name === target) {
742
856
  throw new RefError(`Symbolic ref cannot point to itself: ${name}`, 'CIRCULAR_REF', name);
743
857
  }
744
- const ref = {
745
- name,
746
- target,
747
- type: 'symbolic'
748
- };
749
- await this.backend.writeRef(ref);
750
- return ref;
858
+ // Acquire lock for atomic symbolic ref creation
859
+ const lock = await this.getLock(name);
860
+ try {
861
+ const ref = {
862
+ name,
863
+ target,
864
+ type: 'symbolic'
865
+ };
866
+ await this.writeRef(ref);
867
+ return ref;
868
+ }
869
+ finally {
870
+ await lock.release();
871
+ }
751
872
  }
752
873
  /**
753
874
  * Acquire a lock for updating a ref.
@@ -772,7 +893,7 @@ export class RefStorage {
772
893
  * ```
773
894
  */
774
895
  async acquireLock(name, timeout) {
775
- return this.backend.acquireLock(name, timeout);
896
+ return this.getLock(name, timeout);
776
897
  }
777
898
  /**
778
899
  * Pack loose refs into packed-refs file.
@@ -782,6 +903,9 @@ export class RefStorage {
782
903
  * This improves performance for repositories with many refs.
783
904
  * HEAD and symbolic refs are not packed.
784
905
  *
906
+ * Uses a transactional approach by acquiring locks on all refs being packed
907
+ * to ensure consistency during the packing operation.
908
+ *
785
909
  * @example
786
910
  * ```typescript
787
911
  * // After creating many branches/tags
@@ -789,20 +913,46 @@ export class RefStorage {
789
913
  * ```
790
914
  */
791
915
  async packRefs() {
792
- const allRefs = await this.backend.listRefs();
916
+ // StorageBackend doesn't support packed refs - no-op
917
+ if (this.storageBackend) {
918
+ return;
919
+ }
920
+ if (!this.backend) {
921
+ throw new Error('No backend configured');
922
+ }
923
+ const allRefs = await this.getAllRefs();
793
924
  const packed = new Map();
794
- for (const ref of allRefs) {
795
- // Don't pack HEAD
796
- if (ref.name === 'HEAD') {
797
- continue;
925
+ const locks = [];
926
+ // Filter refs that can be packed (not HEAD, not symbolic)
927
+ const packableRefs = allRefs.filter(ref => {
928
+ if (ref.name === 'HEAD')
929
+ return false;
930
+ if (ref.type === 'symbolic')
931
+ return false;
932
+ return true;
933
+ });
934
+ // Acquire locks on all refs being packed for transactional consistency
935
+ try {
936
+ for (const ref of packableRefs) {
937
+ const lock = await this.getLock(ref.name);
938
+ locks.push(lock);
798
939
  }
799
- // Don't pack symbolic refs
800
- if (ref.type === 'symbolic') {
801
- continue;
940
+ // Re-read refs while holding locks to ensure consistency
941
+ for (const ref of packableRefs) {
942
+ const currentRef = await this.getRef(ref.name);
943
+ if (currentRef && currentRef.type === 'direct') {
944
+ packed.set(currentRef.name, currentRef.target);
945
+ }
946
+ }
947
+ // Write packed refs atomically
948
+ await this.backend.writePackedRefs(packed);
949
+ }
950
+ finally {
951
+ // Release all locks
952
+ for (const lock of locks) {
953
+ await lock.release();
802
954
  }
803
- packed.set(ref.name, ref.target);
804
955
  }
805
- await this.backend.writePackedRefs(packed);
806
956
  }
807
957
  }
808
958
  // ============================================================================