gitx.do 0.1.1 → 0.1.2

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 (356) hide show
  1. package/README.md +40 -353
  2. package/dist/do/logger.d.ts +50 -0
  3. package/dist/do/logger.d.ts.map +1 -0
  4. package/dist/do/logger.js +122 -0
  5. package/dist/do/logger.js.map +1 -0
  6. package/dist/{durable-object → do}/schema.d.ts +3 -3
  7. package/dist/do/schema.d.ts.map +1 -0
  8. package/dist/{durable-object → do}/schema.js +4 -3
  9. package/dist/do/schema.js.map +1 -0
  10. package/dist/do/types.d.ts +267 -0
  11. package/dist/do/types.d.ts.map +1 -0
  12. package/dist/do/types.js +62 -0
  13. package/dist/do/types.js.map +1 -0
  14. package/dist/index.d.ts +14 -469
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +31 -483
  17. package/dist/index.js.map +1 -1
  18. package/package.json +13 -21
  19. package/dist/cli/commands/add.d.ts +0 -176
  20. package/dist/cli/commands/add.d.ts.map +0 -1
  21. package/dist/cli/commands/add.js +0 -979
  22. package/dist/cli/commands/add.js.map +0 -1
  23. package/dist/cli/commands/blame.d.ts +0 -259
  24. package/dist/cli/commands/blame.d.ts.map +0 -1
  25. package/dist/cli/commands/blame.js +0 -609
  26. package/dist/cli/commands/blame.js.map +0 -1
  27. package/dist/cli/commands/branch.d.ts +0 -249
  28. package/dist/cli/commands/branch.d.ts.map +0 -1
  29. package/dist/cli/commands/branch.js +0 -693
  30. package/dist/cli/commands/branch.js.map +0 -1
  31. package/dist/cli/commands/checkout.d.ts +0 -73
  32. package/dist/cli/commands/checkout.d.ts.map +0 -1
  33. package/dist/cli/commands/checkout.js +0 -725
  34. package/dist/cli/commands/checkout.js.map +0 -1
  35. package/dist/cli/commands/commit.d.ts +0 -182
  36. package/dist/cli/commands/commit.d.ts.map +0 -1
  37. package/dist/cli/commands/commit.js +0 -457
  38. package/dist/cli/commands/commit.js.map +0 -1
  39. package/dist/cli/commands/diff.d.ts +0 -464
  40. package/dist/cli/commands/diff.d.ts.map +0 -1
  41. package/dist/cli/commands/diff.js +0 -959
  42. package/dist/cli/commands/diff.js.map +0 -1
  43. package/dist/cli/commands/log.d.ts +0 -239
  44. package/dist/cli/commands/log.d.ts.map +0 -1
  45. package/dist/cli/commands/log.js +0 -535
  46. package/dist/cli/commands/log.js.map +0 -1
  47. package/dist/cli/commands/merge.d.ts +0 -106
  48. package/dist/cli/commands/merge.d.ts.map +0 -1
  49. package/dist/cli/commands/merge.js +0 -852
  50. package/dist/cli/commands/merge.js.map +0 -1
  51. package/dist/cli/commands/review.d.ts +0 -457
  52. package/dist/cli/commands/review.d.ts.map +0 -1
  53. package/dist/cli/commands/review.js +0 -558
  54. package/dist/cli/commands/review.js.map +0 -1
  55. package/dist/cli/commands/stash.d.ts +0 -157
  56. package/dist/cli/commands/stash.d.ts.map +0 -1
  57. package/dist/cli/commands/stash.js +0 -655
  58. package/dist/cli/commands/stash.js.map +0 -1
  59. package/dist/cli/commands/status.d.ts +0 -269
  60. package/dist/cli/commands/status.d.ts.map +0 -1
  61. package/dist/cli/commands/status.js +0 -492
  62. package/dist/cli/commands/status.js.map +0 -1
  63. package/dist/cli/commands/web.d.ts +0 -199
  64. package/dist/cli/commands/web.d.ts.map +0 -1
  65. package/dist/cli/commands/web.js +0 -697
  66. package/dist/cli/commands/web.js.map +0 -1
  67. package/dist/cli/fs-adapter.d.ts +0 -656
  68. package/dist/cli/fs-adapter.d.ts.map +0 -1
  69. package/dist/cli/fs-adapter.js +0 -1177
  70. package/dist/cli/fs-adapter.js.map +0 -1
  71. package/dist/cli/fsx-cli-adapter.d.ts +0 -359
  72. package/dist/cli/fsx-cli-adapter.d.ts.map +0 -1
  73. package/dist/cli/fsx-cli-adapter.js +0 -619
  74. package/dist/cli/fsx-cli-adapter.js.map +0 -1
  75. package/dist/cli/index.d.ts +0 -387
  76. package/dist/cli/index.d.ts.map +0 -1
  77. package/dist/cli/index.js +0 -579
  78. package/dist/cli/index.js.map +0 -1
  79. package/dist/cli/ui/components/DiffView.d.ts +0 -12
  80. package/dist/cli/ui/components/DiffView.d.ts.map +0 -1
  81. package/dist/cli/ui/components/DiffView.js +0 -11
  82. package/dist/cli/ui/components/DiffView.js.map +0 -1
  83. package/dist/cli/ui/components/ErrorDisplay.d.ts +0 -10
  84. package/dist/cli/ui/components/ErrorDisplay.d.ts.map +0 -1
  85. package/dist/cli/ui/components/ErrorDisplay.js +0 -11
  86. package/dist/cli/ui/components/ErrorDisplay.js.map +0 -1
  87. package/dist/cli/ui/components/FuzzySearch.d.ts +0 -15
  88. package/dist/cli/ui/components/FuzzySearch.d.ts.map +0 -1
  89. package/dist/cli/ui/components/FuzzySearch.js +0 -12
  90. package/dist/cli/ui/components/FuzzySearch.js.map +0 -1
  91. package/dist/cli/ui/components/LoadingSpinner.d.ts +0 -10
  92. package/dist/cli/ui/components/LoadingSpinner.d.ts.map +0 -1
  93. package/dist/cli/ui/components/LoadingSpinner.js +0 -10
  94. package/dist/cli/ui/components/LoadingSpinner.js.map +0 -1
  95. package/dist/cli/ui/components/NavigationList.d.ts +0 -14
  96. package/dist/cli/ui/components/NavigationList.d.ts.map +0 -1
  97. package/dist/cli/ui/components/NavigationList.js +0 -11
  98. package/dist/cli/ui/components/NavigationList.js.map +0 -1
  99. package/dist/cli/ui/components/ScrollableContent.d.ts +0 -13
  100. package/dist/cli/ui/components/ScrollableContent.d.ts.map +0 -1
  101. package/dist/cli/ui/components/ScrollableContent.js +0 -11
  102. package/dist/cli/ui/components/ScrollableContent.js.map +0 -1
  103. package/dist/cli/ui/components/index.d.ts +0 -7
  104. package/dist/cli/ui/components/index.d.ts.map +0 -1
  105. package/dist/cli/ui/components/index.js +0 -9
  106. package/dist/cli/ui/components/index.js.map +0 -1
  107. package/dist/cli/ui/terminal-ui.d.ts +0 -85
  108. package/dist/cli/ui/terminal-ui.d.ts.map +0 -1
  109. package/dist/cli/ui/terminal-ui.js +0 -121
  110. package/dist/cli/ui/terminal-ui.js.map +0 -1
  111. package/dist/do/BashModule.d.ts +0 -871
  112. package/dist/do/BashModule.d.ts.map +0 -1
  113. package/dist/do/BashModule.js +0 -1143
  114. package/dist/do/BashModule.js.map +0 -1
  115. package/dist/do/FsModule.d.ts +0 -612
  116. package/dist/do/FsModule.d.ts.map +0 -1
  117. package/dist/do/FsModule.js +0 -1120
  118. package/dist/do/FsModule.js.map +0 -1
  119. package/dist/do/GitModule.d.ts +0 -635
  120. package/dist/do/GitModule.d.ts.map +0 -1
  121. package/dist/do/GitModule.js +0 -784
  122. package/dist/do/GitModule.js.map +0 -1
  123. package/dist/do/GitRepoDO.d.ts +0 -281
  124. package/dist/do/GitRepoDO.d.ts.map +0 -1
  125. package/dist/do/GitRepoDO.js +0 -479
  126. package/dist/do/GitRepoDO.js.map +0 -1
  127. package/dist/do/bash-ast.d.ts +0 -246
  128. package/dist/do/bash-ast.d.ts.map +0 -1
  129. package/dist/do/bash-ast.js +0 -888
  130. package/dist/do/bash-ast.js.map +0 -1
  131. package/dist/do/container-executor.d.ts +0 -491
  132. package/dist/do/container-executor.d.ts.map +0 -1
  133. package/dist/do/container-executor.js +0 -731
  134. package/dist/do/container-executor.js.map +0 -1
  135. package/dist/do/index.d.ts +0 -53
  136. package/dist/do/index.d.ts.map +0 -1
  137. package/dist/do/index.js +0 -91
  138. package/dist/do/index.js.map +0 -1
  139. package/dist/do/tiered-storage.d.ts +0 -403
  140. package/dist/do/tiered-storage.d.ts.map +0 -1
  141. package/dist/do/tiered-storage.js +0 -689
  142. package/dist/do/tiered-storage.js.map +0 -1
  143. package/dist/do/withBash.d.ts +0 -231
  144. package/dist/do/withBash.d.ts.map +0 -1
  145. package/dist/do/withBash.js +0 -244
  146. package/dist/do/withBash.js.map +0 -1
  147. package/dist/do/withFs.d.ts +0 -237
  148. package/dist/do/withFs.d.ts.map +0 -1
  149. package/dist/do/withFs.js +0 -387
  150. package/dist/do/withFs.js.map +0 -1
  151. package/dist/do/withGit.d.ts +0 -180
  152. package/dist/do/withGit.d.ts.map +0 -1
  153. package/dist/do/withGit.js +0 -271
  154. package/dist/do/withGit.js.map +0 -1
  155. package/dist/durable-object/object-store.d.ts +0 -633
  156. package/dist/durable-object/object-store.d.ts.map +0 -1
  157. package/dist/durable-object/object-store.js +0 -1164
  158. package/dist/durable-object/object-store.js.map +0 -1
  159. package/dist/durable-object/schema.d.ts.map +0 -1
  160. package/dist/durable-object/schema.js.map +0 -1
  161. package/dist/durable-object/wal.d.ts +0 -416
  162. package/dist/durable-object/wal.d.ts.map +0 -1
  163. package/dist/durable-object/wal.js +0 -445
  164. package/dist/durable-object/wal.js.map +0 -1
  165. package/dist/mcp/adapter.d.ts +0 -772
  166. package/dist/mcp/adapter.d.ts.map +0 -1
  167. package/dist/mcp/adapter.js +0 -895
  168. package/dist/mcp/adapter.js.map +0 -1
  169. package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -22
  170. package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
  171. package/dist/mcp/sandbox/miniflare-evaluator.js +0 -140
  172. package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
  173. package/dist/mcp/sandbox/object-store-proxy.d.ts +0 -32
  174. package/dist/mcp/sandbox/object-store-proxy.d.ts.map +0 -1
  175. package/dist/mcp/sandbox/object-store-proxy.js +0 -30
  176. package/dist/mcp/sandbox/object-store-proxy.js.map +0 -1
  177. package/dist/mcp/sandbox/template.d.ts +0 -17
  178. package/dist/mcp/sandbox/template.d.ts.map +0 -1
  179. package/dist/mcp/sandbox/template.js +0 -71
  180. package/dist/mcp/sandbox/template.js.map +0 -1
  181. package/dist/mcp/sandbox.d.ts +0 -764
  182. package/dist/mcp/sandbox.d.ts.map +0 -1
  183. package/dist/mcp/sandbox.js +0 -1362
  184. package/dist/mcp/sandbox.js.map +0 -1
  185. package/dist/mcp/sdk-adapter.d.ts +0 -835
  186. package/dist/mcp/sdk-adapter.d.ts.map +0 -1
  187. package/dist/mcp/sdk-adapter.js +0 -974
  188. package/dist/mcp/sdk-adapter.js.map +0 -1
  189. package/dist/mcp/tools/do.d.ts +0 -32
  190. package/dist/mcp/tools/do.d.ts.map +0 -1
  191. package/dist/mcp/tools/do.js +0 -117
  192. package/dist/mcp/tools/do.js.map +0 -1
  193. package/dist/mcp/tools.d.ts +0 -548
  194. package/dist/mcp/tools.d.ts.map +0 -1
  195. package/dist/mcp/tools.js +0 -3170
  196. package/dist/mcp/tools.js.map +0 -1
  197. package/dist/ops/blame.d.ts +0 -551
  198. package/dist/ops/blame.d.ts.map +0 -1
  199. package/dist/ops/blame.js +0 -1037
  200. package/dist/ops/blame.js.map +0 -1
  201. package/dist/ops/branch.d.ts +0 -766
  202. package/dist/ops/branch.d.ts.map +0 -1
  203. package/dist/ops/branch.js +0 -950
  204. package/dist/ops/branch.js.map +0 -1
  205. package/dist/ops/commit-traversal.d.ts +0 -349
  206. package/dist/ops/commit-traversal.d.ts.map +0 -1
  207. package/dist/ops/commit-traversal.js +0 -821
  208. package/dist/ops/commit-traversal.js.map +0 -1
  209. package/dist/ops/commit.d.ts +0 -555
  210. package/dist/ops/commit.d.ts.map +0 -1
  211. package/dist/ops/commit.js +0 -826
  212. package/dist/ops/commit.js.map +0 -1
  213. package/dist/ops/merge-base.d.ts +0 -397
  214. package/dist/ops/merge-base.d.ts.map +0 -1
  215. package/dist/ops/merge-base.js +0 -691
  216. package/dist/ops/merge-base.js.map +0 -1
  217. package/dist/ops/merge.d.ts +0 -855
  218. package/dist/ops/merge.d.ts.map +0 -1
  219. package/dist/ops/merge.js +0 -1551
  220. package/dist/ops/merge.js.map +0 -1
  221. package/dist/ops/tag.d.ts +0 -247
  222. package/dist/ops/tag.d.ts.map +0 -1
  223. package/dist/ops/tag.js +0 -649
  224. package/dist/ops/tag.js.map +0 -1
  225. package/dist/ops/tree-builder.d.ts +0 -178
  226. package/dist/ops/tree-builder.d.ts.map +0 -1
  227. package/dist/ops/tree-builder.js +0 -271
  228. package/dist/ops/tree-builder.js.map +0 -1
  229. package/dist/ops/tree-diff.d.ts +0 -291
  230. package/dist/ops/tree-diff.d.ts.map +0 -1
  231. package/dist/ops/tree-diff.js +0 -705
  232. package/dist/ops/tree-diff.js.map +0 -1
  233. package/dist/pack/delta.d.ts +0 -248
  234. package/dist/pack/delta.d.ts.map +0 -1
  235. package/dist/pack/delta.js +0 -740
  236. package/dist/pack/delta.js.map +0 -1
  237. package/dist/pack/format.d.ts +0 -446
  238. package/dist/pack/format.d.ts.map +0 -1
  239. package/dist/pack/format.js +0 -572
  240. package/dist/pack/format.js.map +0 -1
  241. package/dist/pack/full-generation.d.ts +0 -612
  242. package/dist/pack/full-generation.d.ts.map +0 -1
  243. package/dist/pack/full-generation.js +0 -1378
  244. package/dist/pack/full-generation.js.map +0 -1
  245. package/dist/pack/generation.d.ts +0 -441
  246. package/dist/pack/generation.d.ts.map +0 -1
  247. package/dist/pack/generation.js +0 -707
  248. package/dist/pack/generation.js.map +0 -1
  249. package/dist/pack/index.d.ts +0 -502
  250. package/dist/pack/index.d.ts.map +0 -1
  251. package/dist/pack/index.js +0 -833
  252. package/dist/pack/index.js.map +0 -1
  253. package/dist/refs/branch.d.ts +0 -683
  254. package/dist/refs/branch.d.ts.map +0 -1
  255. package/dist/refs/branch.js +0 -881
  256. package/dist/refs/branch.js.map +0 -1
  257. package/dist/refs/storage.d.ts +0 -833
  258. package/dist/refs/storage.d.ts.map +0 -1
  259. package/dist/refs/storage.js +0 -1023
  260. package/dist/refs/storage.js.map +0 -1
  261. package/dist/refs/tag.d.ts +0 -860
  262. package/dist/refs/tag.d.ts.map +0 -1
  263. package/dist/refs/tag.js +0 -996
  264. package/dist/refs/tag.js.map +0 -1
  265. package/dist/storage/backend.d.ts +0 -425
  266. package/dist/storage/backend.d.ts.map +0 -1
  267. package/dist/storage/backend.js +0 -41
  268. package/dist/storage/backend.js.map +0 -1
  269. package/dist/storage/fsx-adapter.d.ts +0 -204
  270. package/dist/storage/fsx-adapter.d.ts.map +0 -1
  271. package/dist/storage/fsx-adapter.js +0 -518
  272. package/dist/storage/fsx-adapter.js.map +0 -1
  273. package/dist/storage/lru-cache.d.ts +0 -691
  274. package/dist/storage/lru-cache.d.ts.map +0 -1
  275. package/dist/storage/lru-cache.js +0 -813
  276. package/dist/storage/lru-cache.js.map +0 -1
  277. package/dist/storage/object-index.d.ts +0 -585
  278. package/dist/storage/object-index.d.ts.map +0 -1
  279. package/dist/storage/object-index.js +0 -532
  280. package/dist/storage/object-index.js.map +0 -1
  281. package/dist/storage/r2-pack.d.ts +0 -1257
  282. package/dist/storage/r2-pack.d.ts.map +0 -1
  283. package/dist/storage/r2-pack.js +0 -1773
  284. package/dist/storage/r2-pack.js.map +0 -1
  285. package/dist/tiered/cdc-pipeline.d.ts +0 -1888
  286. package/dist/tiered/cdc-pipeline.d.ts.map +0 -1
  287. package/dist/tiered/cdc-pipeline.js +0 -1880
  288. package/dist/tiered/cdc-pipeline.js.map +0 -1
  289. package/dist/tiered/migration.d.ts +0 -1104
  290. package/dist/tiered/migration.d.ts.map +0 -1
  291. package/dist/tiered/migration.js +0 -1217
  292. package/dist/tiered/migration.js.map +0 -1
  293. package/dist/tiered/parquet-writer.d.ts +0 -1145
  294. package/dist/tiered/parquet-writer.d.ts.map +0 -1
  295. package/dist/tiered/parquet-writer.js +0 -1183
  296. package/dist/tiered/parquet-writer.js.map +0 -1
  297. package/dist/tiered/read-path.d.ts +0 -835
  298. package/dist/tiered/read-path.d.ts.map +0 -1
  299. package/dist/tiered/read-path.js +0 -487
  300. package/dist/tiered/read-path.js.map +0 -1
  301. package/dist/types/capability.d.ts +0 -1385
  302. package/dist/types/capability.d.ts.map +0 -1
  303. package/dist/types/capability.js +0 -36
  304. package/dist/types/capability.js.map +0 -1
  305. package/dist/types/index.d.ts +0 -13
  306. package/dist/types/index.d.ts.map +0 -1
  307. package/dist/types/index.js +0 -18
  308. package/dist/types/index.js.map +0 -1
  309. package/dist/types/interfaces.d.ts +0 -673
  310. package/dist/types/interfaces.d.ts.map +0 -1
  311. package/dist/types/interfaces.js +0 -26
  312. package/dist/types/interfaces.js.map +0 -1
  313. package/dist/types/objects.d.ts +0 -692
  314. package/dist/types/objects.d.ts.map +0 -1
  315. package/dist/types/objects.js +0 -837
  316. package/dist/types/objects.js.map +0 -1
  317. package/dist/types/storage.d.ts +0 -603
  318. package/dist/types/storage.d.ts.map +0 -1
  319. package/dist/types/storage.js +0 -191
  320. package/dist/types/storage.js.map +0 -1
  321. package/dist/types/worker-loader.d.ts +0 -60
  322. package/dist/types/worker-loader.d.ts.map +0 -1
  323. package/dist/types/worker-loader.js +0 -62
  324. package/dist/types/worker-loader.js.map +0 -1
  325. package/dist/utils/hash.d.ts +0 -198
  326. package/dist/utils/hash.d.ts.map +0 -1
  327. package/dist/utils/hash.js +0 -272
  328. package/dist/utils/hash.js.map +0 -1
  329. package/dist/utils/sha1.d.ts +0 -325
  330. package/dist/utils/sha1.d.ts.map +0 -1
  331. package/dist/utils/sha1.js +0 -635
  332. package/dist/utils/sha1.js.map +0 -1
  333. package/dist/wire/capabilities.d.ts +0 -1044
  334. package/dist/wire/capabilities.d.ts.map +0 -1
  335. package/dist/wire/capabilities.js +0 -941
  336. package/dist/wire/capabilities.js.map +0 -1
  337. package/dist/wire/path-security.d.ts +0 -157
  338. package/dist/wire/path-security.d.ts.map +0 -1
  339. package/dist/wire/path-security.js +0 -307
  340. package/dist/wire/path-security.js.map +0 -1
  341. package/dist/wire/pkt-line.d.ts +0 -345
  342. package/dist/wire/pkt-line.d.ts.map +0 -1
  343. package/dist/wire/pkt-line.js +0 -381
  344. package/dist/wire/pkt-line.js.map +0 -1
  345. package/dist/wire/receive-pack.d.ts +0 -1059
  346. package/dist/wire/receive-pack.d.ts.map +0 -1
  347. package/dist/wire/receive-pack.js +0 -1414
  348. package/dist/wire/receive-pack.js.map +0 -1
  349. package/dist/wire/smart-http.d.ts +0 -799
  350. package/dist/wire/smart-http.d.ts.map +0 -1
  351. package/dist/wire/smart-http.js +0 -945
  352. package/dist/wire/smart-http.js.map +0 -1
  353. package/dist/wire/upload-pack.d.ts +0 -727
  354. package/dist/wire/upload-pack.d.ts.map +0 -1
  355. package/dist/wire/upload-pack.js +0 -1141
  356. package/dist/wire/upload-pack.js.map +0 -1
@@ -1,178 +0,0 @@
1
- /**
2
- * @fileoverview Tree Builder - builds git tree objects from index entries
3
- *
4
- * Provides functionality for creating Git tree objects from a flat list
5
- * of index entries, handling directory hierarchies, proper sorting,
6
- * and deduplication.
7
- *
8
- * ## Features
9
- *
10
- * - File modes (100644 regular, 100755 executable, 040000 directory, 120000 symlink, 160000 submodule)
11
- * - Proper tree entry format (mode + space + name + null + sha)
12
- * - Sorted entries (git requires lexicographic ordering)
13
- * - Nested tree building for directory hierarchies
14
- * - Tree SHA computation
15
- * - Tree deduplication for identical subtrees
16
- *
17
- * ## Usage Example
18
- *
19
- * ```typescript
20
- * import { buildTreeFromIndex } from './ops/tree-builder'
21
- *
22
- * // Build tree from index entries
23
- * const entries = [
24
- * { path: 'src/main.ts', sha: 'abc123...', mode: '100644', ... },
25
- * { path: 'src/utils/helper.ts', sha: 'def456...', mode: '100644', ... },
26
- * { path: 'README.md', sha: 'ghi789...', mode: '100644', ... }
27
- * ]
28
- *
29
- * const result = await buildTreeFromIndex(store, entries)
30
- * console.log('Root tree SHA:', result.sha)
31
- * console.log('Trees created:', result.treeCount)
32
- * console.log('Deduplicated:', result.deduplicatedCount)
33
- * ```
34
- *
35
- * @module ops/tree-builder
36
- */
37
- import { TreeEntry } from '../types/objects';
38
- import type { BasicObjectStore as ObjectStore } from '../types/storage';
39
- /**
40
- * Index entry from git index file.
41
- *
42
- * Represents a single file entry as stored in the Git index (staging area).
43
- *
44
- * @interface IndexEntry
45
- *
46
- * @example
47
- * ```typescript
48
- * const entry: IndexEntry = {
49
- * path: 'src/main.ts',
50
- * sha: 'abc123def456...',
51
- * mode: '100644',
52
- * flags: 0,
53
- * size: 1234,
54
- * mtime: Date.now(),
55
- * ctime: Date.now()
56
- * }
57
- * ```
58
- */
59
- export interface IndexEntry {
60
- /** File path relative to repository root */
61
- path: string;
62
- /** SHA of the blob content */
63
- sha: string;
64
- /**
65
- * File mode:
66
- * - '100644': Regular file
67
- * - '100755': Executable file
68
- * - '120000': Symbolic link
69
- * - '160000': Git submodule
70
- */
71
- mode: string;
72
- /** Index flags (for merging, assume-unchanged, etc.) */
73
- flags: number;
74
- /** File size in bytes */
75
- size: number;
76
- /** Modification time (Unix timestamp or milliseconds) */
77
- mtime: number;
78
- /** Creation/change time (Unix timestamp or milliseconds) */
79
- ctime: number;
80
- }
81
- /**
82
- * ObjectStore interface for tree builder operations.
83
- * Re-exported from storage types for convenience.
84
- */
85
- export type { ObjectStore };
86
- /**
87
- * Tree node for building hierarchy.
88
- *
89
- * Represents a node in the intermediate tree structure used
90
- * during the build process.
91
- *
92
- * @interface TreeNode
93
- * @internal
94
- */
95
- export interface TreeNode {
96
- /** Name of this node (file or directory name) */
97
- name: string;
98
- /** Full path from repository root */
99
- path: string;
100
- /** Whether this node represents a directory */
101
- isDirectory: boolean;
102
- /** Child nodes (for directories) */
103
- children: Map<string, TreeNode>;
104
- /** The index entry (only set for files, not directories) */
105
- entry?: IndexEntry;
106
- }
107
- /**
108
- * Result of building a tree.
109
- *
110
- * Contains the root tree SHA, statistics about the build,
111
- * and optionally detailed information about subtrees.
112
- *
113
- * @interface BuildTreeResult
114
- *
115
- * @example
116
- * ```typescript
117
- * const result = await buildTreeFromIndex(store, entries)
118
- *
119
- * console.log(`Root SHA: ${result.sha}`)
120
- * console.log(`Created ${result.treeCount} tree objects`)
121
- * console.log(`${result.deduplicatedCount} were deduplicated`)
122
- *
123
- * // Access subtree information if available
124
- * if (result.subtrees) {
125
- * for (const [name, subtree] of Object.entries(result.subtrees)) {
126
- * console.log(`${name}/: ${subtree.sha}`)
127
- * }
128
- * }
129
- * ```
130
- */
131
- export interface BuildTreeResult {
132
- /** SHA of the root tree object */
133
- sha: string;
134
- /** Tree entries at this level */
135
- entries: TreeEntry[];
136
- /** Total number of tree objects processed */
137
- treeCount: number;
138
- /** Number of unique tree objects created */
139
- uniqueTreeCount: number;
140
- /** Number of trees that were deduplicated (reused existing) */
141
- deduplicatedCount: number;
142
- /**
143
- * Nested subtree results.
144
- * Keys are directory names, values are their BuildTreeResult.
145
- */
146
- subtrees?: Record<string, BuildTreeResult>;
147
- }
148
- /**
149
- * Build a tree hierarchy from index entries
150
- */
151
- export declare function buildTreeHierarchy(entries: IndexEntry[]): TreeNode;
152
- /**
153
- * Sort tree entries according to git conventions
154
- * Directories are sorted as if they have a trailing slash
155
- */
156
- export declare function sortTreeEntries(entries: TreeEntry[]): TreeEntry[];
157
- /**
158
- * Create a tree object and store it
159
- */
160
- export declare function createTreeObject(store: ObjectStore, entries: TreeEntry[]): Promise<{
161
- sha: string;
162
- type: 'tree';
163
- data: Uint8Array;
164
- }>;
165
- /**
166
- * Deduplicate trees based on their content hash
167
- * Returns a map of canonical tree content to path, and mapping of paths to canonical paths
168
- */
169
- export declare function deduplicateTrees(trees: Map<string, TreeEntry[]>): {
170
- deduplicated: Map<string, TreeEntry[]>;
171
- mapping: Map<string, string>;
172
- };
173
- /**
174
- * Build tree from index entries
175
- * This is the main entry point for tree building
176
- */
177
- export declare function buildTreeFromIndex(store: ObjectStore, entries: IndexEntry[]): Promise<BuildTreeResult>;
178
- //# sourceMappingURL=tree-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree-builder.d.ts","sourceRoot":"","sources":["../../src/ops/tree-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAE,gBAAgB,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAA;AASvE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAA;IAEZ,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAA;IAEX;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAA;IAEb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAA;IAEb,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,YAAY,EAAE,WAAW,EAAE,CAAA;AAE3B;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAQ;IACvB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IAEZ,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IAEZ,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAA;IAEpB,oCAAoC;IACpC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAE/B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAA;IAEX,iCAAiC;IACjC,OAAO,EAAE,SAAS,EAAE,CAAA;IAEpB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAA;IAEjB,4CAA4C;IAC5C,eAAe,EAAE,MAAM,CAAA;IAEvB,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAC3C;AAsCD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,QAAQ,CAsClE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAUjE;AAgCD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,SAAS,EAAE,GACnB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAI1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAC9B;IAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAsB1E;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,eAAe,CAAC,CAkG1B"}
@@ -1,271 +0,0 @@
1
- /**
2
- * @fileoverview Tree Builder - builds git tree objects from index entries
3
- *
4
- * Provides functionality for creating Git tree objects from a flat list
5
- * of index entries, handling directory hierarchies, proper sorting,
6
- * and deduplication.
7
- *
8
- * ## Features
9
- *
10
- * - File modes (100644 regular, 100755 executable, 040000 directory, 120000 symlink, 160000 submodule)
11
- * - Proper tree entry format (mode + space + name + null + sha)
12
- * - Sorted entries (git requires lexicographic ordering)
13
- * - Nested tree building for directory hierarchies
14
- * - Tree SHA computation
15
- * - Tree deduplication for identical subtrees
16
- *
17
- * ## Usage Example
18
- *
19
- * ```typescript
20
- * import { buildTreeFromIndex } from './ops/tree-builder'
21
- *
22
- * // Build tree from index entries
23
- * const entries = [
24
- * { path: 'src/main.ts', sha: 'abc123...', mode: '100644', ... },
25
- * { path: 'src/utils/helper.ts', sha: 'def456...', mode: '100644', ... },
26
- * { path: 'README.md', sha: 'ghi789...', mode: '100644', ... }
27
- * ]
28
- *
29
- * const result = await buildTreeFromIndex(store, entries)
30
- * console.log('Root tree SHA:', result.sha)
31
- * console.log('Trees created:', result.treeCount)
32
- * console.log('Deduplicated:', result.deduplicatedCount)
33
- * ```
34
- *
35
- * @module ops/tree-builder
36
- */
37
- import { hexToBytes } from '../utils/hash';
38
- /** Valid file modes in git */
39
- const VALID_MODES = new Set(['100644', '100755', '040000', '120000', '160000']);
40
- /** Text encoder for creating tree data */
41
- const encoder = new TextEncoder();
42
- /**
43
- * Validate an index entry
44
- */
45
- function validateEntry(entry) {
46
- // Check mode
47
- if (!VALID_MODES.has(entry.mode)) {
48
- throw new Error(`Invalid file mode: ${entry.mode}`);
49
- }
50
- // Check SHA format (40 hex characters)
51
- if (!/^[0-9a-f]{40}$/.test(entry.sha)) {
52
- throw new Error(`Invalid SHA format: ${entry.sha}`);
53
- }
54
- // Check path
55
- if (!entry.path || entry.path.length === 0) {
56
- throw new Error('Empty path not allowed');
57
- }
58
- if (entry.path.startsWith('/')) {
59
- throw new Error('Path must not start with /');
60
- }
61
- if (entry.path.includes('//')) {
62
- throw new Error('Path must not contain double slashes');
63
- }
64
- // Check for . or .. components
65
- const parts = entry.path.split('/');
66
- for (const part of parts) {
67
- if (part === '.' || part === '..') {
68
- throw new Error(`Path must not contain . or .. components: ${entry.path}`);
69
- }
70
- }
71
- }
72
- /**
73
- * Build a tree hierarchy from index entries
74
- */
75
- export function buildTreeHierarchy(entries) {
76
- const root = {
77
- name: '',
78
- path: '',
79
- isDirectory: true,
80
- children: new Map()
81
- };
82
- for (const entry of entries) {
83
- const parts = entry.path.split('/');
84
- let current = root;
85
- for (let i = 0; i < parts.length; i++) {
86
- const part = parts[i];
87
- const isLast = i === parts.length - 1;
88
- const currentPath = parts.slice(0, i + 1).join('/');
89
- if (!current.children.has(part)) {
90
- const node = {
91
- name: part,
92
- path: currentPath,
93
- isDirectory: !isLast,
94
- children: new Map(),
95
- entry: isLast ? entry : undefined
96
- };
97
- current.children.set(part, node);
98
- }
99
- else if (isLast) {
100
- // Update entry for duplicate paths (last one wins)
101
- const existing = current.children.get(part);
102
- existing.entry = entry;
103
- existing.isDirectory = false;
104
- }
105
- current = current.children.get(part);
106
- }
107
- }
108
- return root;
109
- }
110
- /**
111
- * Sort tree entries according to git conventions
112
- * Directories are sorted as if they have a trailing slash
113
- */
114
- export function sortTreeEntries(entries) {
115
- return [...entries].sort((a, b) => {
116
- // Directories sort as if they have trailing slash
117
- const aName = a.mode === '040000' ? a.name + '/' : a.name;
118
- const bName = b.mode === '040000' ? b.name + '/' : b.name;
119
- // Use byte-wise comparison (localeCompare with raw mode)
120
- if (aName < bName)
121
- return -1;
122
- if (aName > bName)
123
- return 1;
124
- return 0;
125
- });
126
- }
127
- /**
128
- * Create tree object data from entries
129
- */
130
- function createTreeData(entries) {
131
- // Sort entries
132
- const sorted = sortTreeEntries(entries);
133
- // Build entry content
134
- const entryParts = [];
135
- for (const entry of sorted) {
136
- const modeName = encoder.encode(`${entry.mode} ${entry.name}\0`);
137
- const sha20 = hexToBytes(entry.sha);
138
- const entryData = new Uint8Array(modeName.length + 20);
139
- entryData.set(modeName);
140
- entryData.set(sha20, modeName.length);
141
- entryParts.push(entryData);
142
- }
143
- // Combine all parts
144
- const totalLength = entryParts.reduce((sum, part) => sum + part.length, 0);
145
- const content = new Uint8Array(totalLength);
146
- let offset = 0;
147
- for (const part of entryParts) {
148
- content.set(part, offset);
149
- offset += part.length;
150
- }
151
- return content;
152
- }
153
- /**
154
- * Create a tree object and store it
155
- */
156
- export async function createTreeObject(store, entries) {
157
- const data = createTreeData(entries);
158
- const sha = await store.storeObject('tree', data);
159
- return { sha, type: 'tree', data };
160
- }
161
- /**
162
- * Deduplicate trees based on their content hash
163
- * Returns a map of canonical tree content to path, and mapping of paths to canonical paths
164
- */
165
- export function deduplicateTrees(trees) {
166
- const contentToPath = new Map();
167
- const deduplicated = new Map();
168
- const mapping = new Map();
169
- for (const [path, entries] of trees) {
170
- // Create a content key from sorted entries
171
- const sorted = sortTreeEntries(entries);
172
- const key = sorted.map(e => `${e.mode}:${e.name}:${e.sha}`).join('|');
173
- if (contentToPath.has(key)) {
174
- // Duplicate - map to existing path
175
- mapping.set(path, contentToPath.get(key));
176
- }
177
- else {
178
- // New unique tree
179
- contentToPath.set(key, path);
180
- deduplicated.set(path, entries);
181
- mapping.set(path, path);
182
- }
183
- }
184
- return { deduplicated, mapping };
185
- }
186
- /**
187
- * Build tree from index entries
188
- * This is the main entry point for tree building
189
- */
190
- export async function buildTreeFromIndex(store, entries) {
191
- // Validate all entries first
192
- for (const entry of entries) {
193
- validateEntry(entry);
194
- }
195
- // Build hierarchy
196
- const hierarchy = buildTreeHierarchy(entries);
197
- // Track stats
198
- let treeCount = 0;
199
- let uniqueTreeCount = 0;
200
- const treeContentToSha = new Map();
201
- /**
202
- * Recursively build tree for a node
203
- */
204
- async function buildNode(node) {
205
- const treeEntries = [];
206
- const nodeSubtrees = {};
207
- // Process children
208
- const children = Array.from(node.children.values());
209
- for (const child of children) {
210
- if (child.isDirectory) {
211
- // Recursively build subtree
212
- const subtreeResult = await buildNode(child);
213
- nodeSubtrees[child.name] = subtreeResult;
214
- treeEntries.push({
215
- mode: '040000',
216
- name: child.name,
217
- sha: subtreeResult.sha
218
- });
219
- }
220
- else if (child.entry) {
221
- // File entry
222
- treeEntries.push({
223
- mode: child.entry.mode,
224
- name: child.name,
225
- sha: child.entry.sha
226
- });
227
- }
228
- }
229
- // Sort entries
230
- const sortedEntries = sortTreeEntries(treeEntries);
231
- treeCount++;
232
- // Check for deduplication
233
- const contentKey = sortedEntries.map(e => `${e.mode}:${e.name}:${e.sha}`).join('|');
234
- let sha;
235
- if (treeContentToSha.has(contentKey)) {
236
- // Reuse existing tree SHA
237
- sha = treeContentToSha.get(contentKey);
238
- }
239
- else {
240
- // Create new tree object
241
- const treeObj = await createTreeObject(store, sortedEntries);
242
- sha = treeObj.sha;
243
- treeContentToSha.set(contentKey, sha);
244
- uniqueTreeCount++;
245
- }
246
- return {
247
- sha,
248
- entries: sortedEntries,
249
- subtrees: nodeSubtrees
250
- };
251
- }
252
- // Build from root
253
- const result = await buildNode(hierarchy);
254
- // Convert BuildResult to BuildTreeResult format
255
- function convertToResult(br) {
256
- const subtreesConverted = {};
257
- for (const [name, sub] of Object.entries(br.subtrees)) {
258
- subtreesConverted[name] = convertToResult(sub);
259
- }
260
- return {
261
- sha: br.sha,
262
- entries: br.entries,
263
- treeCount,
264
- uniqueTreeCount,
265
- deduplicatedCount: treeCount - uniqueTreeCount,
266
- subtrees: Object.keys(subtreesConverted).length > 0 ? subtreesConverted : undefined
267
- };
268
- }
269
- return convertToResult(result);
270
- }
271
- //# sourceMappingURL=tree-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree-builder.js","sourceRoot":"","sources":["../../src/ops/tree-builder.ts"],"names":[],"mappings":"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"}