gitx.do 0.1.0 → 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 (344) 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 +15 -415
  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 -174
  20. package/dist/cli/commands/add.d.ts.map +0 -1
  21. package/dist/cli/commands/add.js +0 -131
  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/commit.d.ts +0 -182
  32. package/dist/cli/commands/commit.d.ts.map +0 -1
  33. package/dist/cli/commands/commit.js +0 -437
  34. package/dist/cli/commands/commit.js.map +0 -1
  35. package/dist/cli/commands/diff.d.ts +0 -464
  36. package/dist/cli/commands/diff.d.ts.map +0 -1
  37. package/dist/cli/commands/diff.js +0 -958
  38. package/dist/cli/commands/diff.js.map +0 -1
  39. package/dist/cli/commands/log.d.ts +0 -239
  40. package/dist/cli/commands/log.d.ts.map +0 -1
  41. package/dist/cli/commands/log.js +0 -535
  42. package/dist/cli/commands/log.js.map +0 -1
  43. package/dist/cli/commands/merge.d.ts +0 -106
  44. package/dist/cli/commands/merge.d.ts.map +0 -1
  45. package/dist/cli/commands/merge.js +0 -55
  46. package/dist/cli/commands/merge.js.map +0 -1
  47. package/dist/cli/commands/review.d.ts +0 -457
  48. package/dist/cli/commands/review.d.ts.map +0 -1
  49. package/dist/cli/commands/review.js +0 -533
  50. package/dist/cli/commands/review.js.map +0 -1
  51. package/dist/cli/commands/status.d.ts +0 -269
  52. package/dist/cli/commands/status.d.ts.map +0 -1
  53. package/dist/cli/commands/status.js +0 -493
  54. package/dist/cli/commands/status.js.map +0 -1
  55. package/dist/cli/commands/web.d.ts +0 -199
  56. package/dist/cli/commands/web.d.ts.map +0 -1
  57. package/dist/cli/commands/web.js +0 -696
  58. package/dist/cli/commands/web.js.map +0 -1
  59. package/dist/cli/fs-adapter.d.ts +0 -656
  60. package/dist/cli/fs-adapter.d.ts.map +0 -1
  61. package/dist/cli/fs-adapter.js +0 -1179
  62. package/dist/cli/fs-adapter.js.map +0 -1
  63. package/dist/cli/fsx-cli-adapter.d.ts +0 -359
  64. package/dist/cli/fsx-cli-adapter.d.ts.map +0 -1
  65. package/dist/cli/fsx-cli-adapter.js +0 -619
  66. package/dist/cli/fsx-cli-adapter.js.map +0 -1
  67. package/dist/cli/index.d.ts +0 -387
  68. package/dist/cli/index.d.ts.map +0 -1
  69. package/dist/cli/index.js +0 -523
  70. package/dist/cli/index.js.map +0 -1
  71. package/dist/cli/ui/components/DiffView.d.ts +0 -7
  72. package/dist/cli/ui/components/DiffView.d.ts.map +0 -1
  73. package/dist/cli/ui/components/DiffView.js +0 -11
  74. package/dist/cli/ui/components/DiffView.js.map +0 -1
  75. package/dist/cli/ui/components/ErrorDisplay.d.ts +0 -6
  76. package/dist/cli/ui/components/ErrorDisplay.d.ts.map +0 -1
  77. package/dist/cli/ui/components/ErrorDisplay.js +0 -11
  78. package/dist/cli/ui/components/ErrorDisplay.js.map +0 -1
  79. package/dist/cli/ui/components/FuzzySearch.d.ts +0 -9
  80. package/dist/cli/ui/components/FuzzySearch.d.ts.map +0 -1
  81. package/dist/cli/ui/components/FuzzySearch.js +0 -12
  82. package/dist/cli/ui/components/FuzzySearch.js.map +0 -1
  83. package/dist/cli/ui/components/LoadingSpinner.d.ts +0 -6
  84. package/dist/cli/ui/components/LoadingSpinner.d.ts.map +0 -1
  85. package/dist/cli/ui/components/LoadingSpinner.js +0 -10
  86. package/dist/cli/ui/components/LoadingSpinner.js.map +0 -1
  87. package/dist/cli/ui/components/NavigationList.d.ts +0 -9
  88. package/dist/cli/ui/components/NavigationList.d.ts.map +0 -1
  89. package/dist/cli/ui/components/NavigationList.js +0 -11
  90. package/dist/cli/ui/components/NavigationList.js.map +0 -1
  91. package/dist/cli/ui/components/ScrollableContent.d.ts +0 -8
  92. package/dist/cli/ui/components/ScrollableContent.d.ts.map +0 -1
  93. package/dist/cli/ui/components/ScrollableContent.js +0 -11
  94. package/dist/cli/ui/components/ScrollableContent.js.map +0 -1
  95. package/dist/cli/ui/components/index.d.ts +0 -7
  96. package/dist/cli/ui/components/index.d.ts.map +0 -1
  97. package/dist/cli/ui/components/index.js +0 -9
  98. package/dist/cli/ui/components/index.js.map +0 -1
  99. package/dist/cli/ui/terminal-ui.d.ts +0 -52
  100. package/dist/cli/ui/terminal-ui.d.ts.map +0 -1
  101. package/dist/cli/ui/terminal-ui.js +0 -121
  102. package/dist/cli/ui/terminal-ui.js.map +0 -1
  103. package/dist/do/BashModule.d.ts +0 -871
  104. package/dist/do/BashModule.d.ts.map +0 -1
  105. package/dist/do/BashModule.js +0 -1143
  106. package/dist/do/BashModule.js.map +0 -1
  107. package/dist/do/FsModule.d.ts +0 -601
  108. package/dist/do/FsModule.d.ts.map +0 -1
  109. package/dist/do/FsModule.js +0 -1120
  110. package/dist/do/FsModule.js.map +0 -1
  111. package/dist/do/GitModule.d.ts +0 -635
  112. package/dist/do/GitModule.d.ts.map +0 -1
  113. package/dist/do/GitModule.js +0 -781
  114. package/dist/do/GitModule.js.map +0 -1
  115. package/dist/do/GitRepoDO.d.ts +0 -281
  116. package/dist/do/GitRepoDO.d.ts.map +0 -1
  117. package/dist/do/GitRepoDO.js +0 -479
  118. package/dist/do/GitRepoDO.js.map +0 -1
  119. package/dist/do/bash-ast.d.ts +0 -246
  120. package/dist/do/bash-ast.d.ts.map +0 -1
  121. package/dist/do/bash-ast.js +0 -888
  122. package/dist/do/bash-ast.js.map +0 -1
  123. package/dist/do/container-executor.d.ts +0 -491
  124. package/dist/do/container-executor.d.ts.map +0 -1
  125. package/dist/do/container-executor.js +0 -730
  126. package/dist/do/container-executor.js.map +0 -1
  127. package/dist/do/index.d.ts +0 -53
  128. package/dist/do/index.d.ts.map +0 -1
  129. package/dist/do/index.js +0 -91
  130. package/dist/do/index.js.map +0 -1
  131. package/dist/do/tiered-storage.d.ts +0 -403
  132. package/dist/do/tiered-storage.d.ts.map +0 -1
  133. package/dist/do/tiered-storage.js +0 -689
  134. package/dist/do/tiered-storage.js.map +0 -1
  135. package/dist/do/withBash.d.ts +0 -231
  136. package/dist/do/withBash.d.ts.map +0 -1
  137. package/dist/do/withBash.js +0 -244
  138. package/dist/do/withBash.js.map +0 -1
  139. package/dist/do/withFs.d.ts +0 -237
  140. package/dist/do/withFs.d.ts.map +0 -1
  141. package/dist/do/withFs.js +0 -387
  142. package/dist/do/withFs.js.map +0 -1
  143. package/dist/do/withGit.d.ts +0 -180
  144. package/dist/do/withGit.d.ts.map +0 -1
  145. package/dist/do/withGit.js +0 -271
  146. package/dist/do/withGit.js.map +0 -1
  147. package/dist/durable-object/object-store.d.ts +0 -633
  148. package/dist/durable-object/object-store.d.ts.map +0 -1
  149. package/dist/durable-object/object-store.js +0 -1161
  150. package/dist/durable-object/object-store.js.map +0 -1
  151. package/dist/durable-object/schema.d.ts.map +0 -1
  152. package/dist/durable-object/schema.js.map +0 -1
  153. package/dist/durable-object/wal.d.ts +0 -416
  154. package/dist/durable-object/wal.d.ts.map +0 -1
  155. package/dist/durable-object/wal.js +0 -445
  156. package/dist/durable-object/wal.js.map +0 -1
  157. package/dist/mcp/adapter.d.ts +0 -772
  158. package/dist/mcp/adapter.d.ts.map +0 -1
  159. package/dist/mcp/adapter.js +0 -895
  160. package/dist/mcp/adapter.js.map +0 -1
  161. package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -22
  162. package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
  163. package/dist/mcp/sandbox/miniflare-evaluator.js +0 -140
  164. package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
  165. package/dist/mcp/sandbox/object-store-proxy.d.ts +0 -32
  166. package/dist/mcp/sandbox/object-store-proxy.d.ts.map +0 -1
  167. package/dist/mcp/sandbox/object-store-proxy.js +0 -30
  168. package/dist/mcp/sandbox/object-store-proxy.js.map +0 -1
  169. package/dist/mcp/sandbox/template.d.ts +0 -17
  170. package/dist/mcp/sandbox/template.d.ts.map +0 -1
  171. package/dist/mcp/sandbox/template.js +0 -71
  172. package/dist/mcp/sandbox/template.js.map +0 -1
  173. package/dist/mcp/sandbox.d.ts +0 -764
  174. package/dist/mcp/sandbox.d.ts.map +0 -1
  175. package/dist/mcp/sandbox.js +0 -1362
  176. package/dist/mcp/sandbox.js.map +0 -1
  177. package/dist/mcp/sdk-adapter.d.ts +0 -835
  178. package/dist/mcp/sdk-adapter.d.ts.map +0 -1
  179. package/dist/mcp/sdk-adapter.js +0 -974
  180. package/dist/mcp/sdk-adapter.js.map +0 -1
  181. package/dist/mcp/tools/do.d.ts +0 -32
  182. package/dist/mcp/tools/do.d.ts.map +0 -1
  183. package/dist/mcp/tools/do.js +0 -115
  184. package/dist/mcp/tools/do.js.map +0 -1
  185. package/dist/mcp/tools.d.ts +0 -548
  186. package/dist/mcp/tools.d.ts.map +0 -1
  187. package/dist/mcp/tools.js +0 -1934
  188. package/dist/mcp/tools.js.map +0 -1
  189. package/dist/ops/blame.d.ts +0 -551
  190. package/dist/ops/blame.d.ts.map +0 -1
  191. package/dist/ops/blame.js +0 -1037
  192. package/dist/ops/blame.js.map +0 -1
  193. package/dist/ops/branch.d.ts +0 -766
  194. package/dist/ops/branch.d.ts.map +0 -1
  195. package/dist/ops/branch.js +0 -950
  196. package/dist/ops/branch.js.map +0 -1
  197. package/dist/ops/commit-traversal.d.ts +0 -349
  198. package/dist/ops/commit-traversal.d.ts.map +0 -1
  199. package/dist/ops/commit-traversal.js +0 -821
  200. package/dist/ops/commit-traversal.js.map +0 -1
  201. package/dist/ops/commit.d.ts +0 -555
  202. package/dist/ops/commit.d.ts.map +0 -1
  203. package/dist/ops/commit.js +0 -826
  204. package/dist/ops/commit.js.map +0 -1
  205. package/dist/ops/merge-base.d.ts +0 -397
  206. package/dist/ops/merge-base.d.ts.map +0 -1
  207. package/dist/ops/merge-base.js +0 -691
  208. package/dist/ops/merge-base.js.map +0 -1
  209. package/dist/ops/merge.d.ts +0 -855
  210. package/dist/ops/merge.d.ts.map +0 -1
  211. package/dist/ops/merge.js +0 -1551
  212. package/dist/ops/merge.js.map +0 -1
  213. package/dist/ops/tag.d.ts +0 -247
  214. package/dist/ops/tag.d.ts.map +0 -1
  215. package/dist/ops/tag.js +0 -649
  216. package/dist/ops/tag.js.map +0 -1
  217. package/dist/ops/tree-builder.d.ts +0 -178
  218. package/dist/ops/tree-builder.d.ts.map +0 -1
  219. package/dist/ops/tree-builder.js +0 -271
  220. package/dist/ops/tree-builder.js.map +0 -1
  221. package/dist/ops/tree-diff.d.ts +0 -291
  222. package/dist/ops/tree-diff.d.ts.map +0 -1
  223. package/dist/ops/tree-diff.js +0 -705
  224. package/dist/ops/tree-diff.js.map +0 -1
  225. package/dist/pack/delta.d.ts +0 -248
  226. package/dist/pack/delta.d.ts.map +0 -1
  227. package/dist/pack/delta.js +0 -736
  228. package/dist/pack/delta.js.map +0 -1
  229. package/dist/pack/format.d.ts +0 -446
  230. package/dist/pack/format.d.ts.map +0 -1
  231. package/dist/pack/format.js +0 -572
  232. package/dist/pack/format.js.map +0 -1
  233. package/dist/pack/full-generation.d.ts +0 -612
  234. package/dist/pack/full-generation.d.ts.map +0 -1
  235. package/dist/pack/full-generation.js +0 -1378
  236. package/dist/pack/full-generation.js.map +0 -1
  237. package/dist/pack/generation.d.ts +0 -441
  238. package/dist/pack/generation.d.ts.map +0 -1
  239. package/dist/pack/generation.js +0 -707
  240. package/dist/pack/generation.js.map +0 -1
  241. package/dist/pack/index.d.ts +0 -502
  242. package/dist/pack/index.d.ts.map +0 -1
  243. package/dist/pack/index.js +0 -833
  244. package/dist/pack/index.js.map +0 -1
  245. package/dist/refs/branch.d.ts +0 -668
  246. package/dist/refs/branch.d.ts.map +0 -1
  247. package/dist/refs/branch.js +0 -897
  248. package/dist/refs/branch.js.map +0 -1
  249. package/dist/refs/storage.d.ts +0 -833
  250. package/dist/refs/storage.d.ts.map +0 -1
  251. package/dist/refs/storage.js +0 -1023
  252. package/dist/refs/storage.js.map +0 -1
  253. package/dist/refs/tag.d.ts +0 -860
  254. package/dist/refs/tag.d.ts.map +0 -1
  255. package/dist/refs/tag.js +0 -996
  256. package/dist/refs/tag.js.map +0 -1
  257. package/dist/storage/backend.d.ts +0 -425
  258. package/dist/storage/backend.d.ts.map +0 -1
  259. package/dist/storage/backend.js +0 -41
  260. package/dist/storage/backend.js.map +0 -1
  261. package/dist/storage/fsx-adapter.d.ts +0 -204
  262. package/dist/storage/fsx-adapter.d.ts.map +0 -1
  263. package/dist/storage/fsx-adapter.js +0 -470
  264. package/dist/storage/fsx-adapter.js.map +0 -1
  265. package/dist/storage/lru-cache.d.ts +0 -691
  266. package/dist/storage/lru-cache.d.ts.map +0 -1
  267. package/dist/storage/lru-cache.js +0 -813
  268. package/dist/storage/lru-cache.js.map +0 -1
  269. package/dist/storage/object-index.d.ts +0 -585
  270. package/dist/storage/object-index.d.ts.map +0 -1
  271. package/dist/storage/object-index.js +0 -532
  272. package/dist/storage/object-index.js.map +0 -1
  273. package/dist/storage/r2-pack.d.ts +0 -1257
  274. package/dist/storage/r2-pack.d.ts.map +0 -1
  275. package/dist/storage/r2-pack.js +0 -1770
  276. package/dist/storage/r2-pack.js.map +0 -1
  277. package/dist/tiered/cdc-pipeline.d.ts +0 -1888
  278. package/dist/tiered/cdc-pipeline.d.ts.map +0 -1
  279. package/dist/tiered/cdc-pipeline.js +0 -1880
  280. package/dist/tiered/cdc-pipeline.js.map +0 -1
  281. package/dist/tiered/migration.d.ts +0 -1104
  282. package/dist/tiered/migration.d.ts.map +0 -1
  283. package/dist/tiered/migration.js +0 -1214
  284. package/dist/tiered/migration.js.map +0 -1
  285. package/dist/tiered/parquet-writer.d.ts +0 -1145
  286. package/dist/tiered/parquet-writer.d.ts.map +0 -1
  287. package/dist/tiered/parquet-writer.js +0 -1183
  288. package/dist/tiered/parquet-writer.js.map +0 -1
  289. package/dist/tiered/read-path.d.ts +0 -835
  290. package/dist/tiered/read-path.d.ts.map +0 -1
  291. package/dist/tiered/read-path.js +0 -487
  292. package/dist/tiered/read-path.js.map +0 -1
  293. package/dist/types/capability.d.ts +0 -1385
  294. package/dist/types/capability.d.ts.map +0 -1
  295. package/dist/types/capability.js +0 -36
  296. package/dist/types/capability.js.map +0 -1
  297. package/dist/types/index.d.ts +0 -13
  298. package/dist/types/index.d.ts.map +0 -1
  299. package/dist/types/index.js +0 -18
  300. package/dist/types/index.js.map +0 -1
  301. package/dist/types/objects.d.ts +0 -692
  302. package/dist/types/objects.d.ts.map +0 -1
  303. package/dist/types/objects.js +0 -837
  304. package/dist/types/objects.js.map +0 -1
  305. package/dist/types/storage.d.ts +0 -603
  306. package/dist/types/storage.d.ts.map +0 -1
  307. package/dist/types/storage.js +0 -191
  308. package/dist/types/storage.js.map +0 -1
  309. package/dist/types/worker-loader.d.ts +0 -60
  310. package/dist/types/worker-loader.d.ts.map +0 -1
  311. package/dist/types/worker-loader.js +0 -62
  312. package/dist/types/worker-loader.js.map +0 -1
  313. package/dist/utils/hash.d.ts +0 -197
  314. package/dist/utils/hash.d.ts.map +0 -1
  315. package/dist/utils/hash.js +0 -268
  316. package/dist/utils/hash.js.map +0 -1
  317. package/dist/utils/sha1.d.ts +0 -290
  318. package/dist/utils/sha1.d.ts.map +0 -1
  319. package/dist/utils/sha1.js +0 -582
  320. package/dist/utils/sha1.js.map +0 -1
  321. package/dist/wire/capabilities.d.ts +0 -1044
  322. package/dist/wire/capabilities.d.ts.map +0 -1
  323. package/dist/wire/capabilities.js +0 -941
  324. package/dist/wire/capabilities.js.map +0 -1
  325. package/dist/wire/path-security.d.ts +0 -157
  326. package/dist/wire/path-security.d.ts.map +0 -1
  327. package/dist/wire/path-security.js +0 -307
  328. package/dist/wire/path-security.js.map +0 -1
  329. package/dist/wire/pkt-line.d.ts +0 -345
  330. package/dist/wire/pkt-line.d.ts.map +0 -1
  331. package/dist/wire/pkt-line.js +0 -381
  332. package/dist/wire/pkt-line.js.map +0 -1
  333. package/dist/wire/receive-pack.d.ts +0 -1059
  334. package/dist/wire/receive-pack.d.ts.map +0 -1
  335. package/dist/wire/receive-pack.js +0 -1414
  336. package/dist/wire/receive-pack.js.map +0 -1
  337. package/dist/wire/smart-http.d.ts +0 -799
  338. package/dist/wire/smart-http.d.ts.map +0 -1
  339. package/dist/wire/smart-http.js +0 -945
  340. package/dist/wire/smart-http.js.map +0 -1
  341. package/dist/wire/upload-pack.d.ts +0 -727
  342. package/dist/wire/upload-pack.d.ts.map +0 -1
  343. package/dist/wire/upload-pack.js +0 -1138
  344. package/dist/wire/upload-pack.js.map +0 -1
@@ -1,633 +0,0 @@
1
- /**
2
- * @fileoverview Git Object Store for Durable Objects
3
- *
4
- * This module provides a Git object storage implementation backed by SQLite
5
- * within Cloudflare Durable Objects. It handles CRUD operations for all four
6
- * Git object types (blob, tree, commit, tag) with proper SHA-1 hash computation.
7
- *
8
- * **Key Features**:
9
- * - Content-addressable storage using SHA-1 hashes
10
- * - Write-ahead logging (WAL) for durability
11
- * - Object index for tiered storage support
12
- * - Batch operations for efficiency with transaction support
13
- * - LRU caching for hot tier objects
14
- * - Metrics and logging infrastructure
15
- * - Typed accessors for each Git object type
16
- *
17
- * @module durable-object/object-store
18
- *
19
- * @example
20
- * ```typescript
21
- * import { ObjectStore } from './durable-object/object-store'
22
- *
23
- * const store = new ObjectStore(durableObjectStorage, {
24
- * cacheMaxCount: 1000,
25
- * cacheMaxBytes: 50 * 1024 * 1024, // 50MB
26
- * enableMetrics: true
27
- * })
28
- *
29
- * // Store a blob
30
- * const content = new TextEncoder().encode('Hello, World!')
31
- * const sha = await store.putObject('blob', content)
32
- *
33
- * // Retrieve it (cached on second access)
34
- * const obj = await store.getObject(sha)
35
- * console.log(obj?.type, obj?.size)
36
- *
37
- * // Get typed object
38
- * const blob = await store.getBlobObject(sha)
39
- *
40
- * // Get metrics
41
- * const metrics = store.getMetrics()
42
- * console.log(`Cache hit rate: ${metrics.cacheHitRate}%`)
43
- * ```
44
- */
45
- import { DurableObjectStorage } from './schema';
46
- import { CacheStats } from '../storage/lru-cache';
47
- import { ObjectType, BlobObject, TreeObject, CommitObject, TagObject, TreeEntry, Author } from '../types/objects';
48
- import type { StorageBackend } from '../storage/backend';
49
- /**
50
- * Stored object record as persisted in SQLite.
51
- *
52
- * @description
53
- * Represents a Git object with metadata as stored in the database.
54
- * The `data` field contains the object content WITHOUT the Git header.
55
- *
56
- * @example
57
- * ```typescript
58
- * const obj: StoredObject = {
59
- * sha: 'abc123...',
60
- * type: 'blob',
61
- * size: 13,
62
- * data: new Uint8Array([...]),
63
- * createdAt: 1704067200000
64
- * }
65
- * ```
66
- */
67
- export interface StoredObject {
68
- /** 40-character SHA-1 hash (primary key) */
69
- sha: string;
70
- /** Object type: 'blob', 'tree', 'commit', or 'tag' */
71
- type: ObjectType;
72
- /** Size of the data in bytes */
73
- size: number;
74
- /** Raw object content (without Git header) */
75
- data: Uint8Array;
76
- /** Unix timestamp (milliseconds) when object was created */
77
- createdAt: number;
78
- }
79
- /**
80
- * Configuration options for ObjectStore.
81
- *
82
- * @description
83
- * Controls caching behavior, metrics collection, and logging.
84
- *
85
- * @example
86
- * ```typescript
87
- * const options: ObjectStoreOptions = {
88
- * cacheMaxCount: 1000,
89
- * cacheMaxBytes: 50 * 1024 * 1024,
90
- * cacheTTL: 3600000,
91
- * enableMetrics: true,
92
- * logger: console
93
- * }
94
- * ```
95
- */
96
- export interface ObjectStoreOptions {
97
- /**
98
- * Maximum number of objects to cache in memory.
99
- * @default 500
100
- */
101
- cacheMaxCount?: number;
102
- /**
103
- * Maximum cache size in bytes.
104
- * @default 25MB
105
- */
106
- cacheMaxBytes?: number;
107
- /**
108
- * Time-to-live for cached objects in milliseconds.
109
- * @default undefined (no expiration)
110
- */
111
- cacheTTL?: number;
112
- /**
113
- * Enable metrics collection.
114
- * @default false
115
- */
116
- enableMetrics?: boolean;
117
- /**
118
- * Logger interface for operation logging.
119
- * @default undefined (no logging)
120
- */
121
- logger?: ObjectStoreLogger;
122
- /**
123
- * Optional storage backend abstraction.
124
- * If provided, delegates CAS operations to this backend instead of SQLite.
125
- * This enables gradual migration to different storage implementations.
126
- * @default undefined (uses SQLite directly)
127
- */
128
- backend?: StorageBackend;
129
- }
130
- /**
131
- * Logger interface for ObjectStore operations.
132
- */
133
- export interface ObjectStoreLogger {
134
- debug?(message: string, ...args: unknown[]): void;
135
- info?(message: string, ...args: unknown[]): void;
136
- warn?(message: string, ...args: unknown[]): void;
137
- error?(message: string, ...args: unknown[]): void;
138
- }
139
- /**
140
- * Metrics collected by ObjectStore operations.
141
- */
142
- export interface ObjectStoreMetrics {
143
- /** Total number of read operations */
144
- reads: number;
145
- /** Total number of write operations */
146
- writes: number;
147
- /** Total number of delete operations */
148
- deletes: number;
149
- /** Cache statistics */
150
- cache: CacheStats;
151
- /** Cache hit rate percentage */
152
- cacheHitRate: number;
153
- /** Total bytes written */
154
- bytesWritten: number;
155
- /** Total bytes read */
156
- bytesRead: number;
157
- /** Average write latency in ms */
158
- avgWriteLatencyMs: number;
159
- /** Average read latency in ms */
160
- avgReadLatencyMs: number;
161
- /** Number of batch operations */
162
- batchOperations: number;
163
- /** Total objects in batch operations */
164
- batchObjectsTotal: number;
165
- }
166
- /**
167
- * ObjectStore class for managing Git objects in SQLite storage.
168
- *
169
- * @description
170
- * Provides a complete implementation of Git object storage operations.
171
- * All objects are stored in the `objects` table and indexed in `object_index`
172
- * for tiered storage support. Write operations are logged to WAL for durability.
173
- *
174
- * @example
175
- * ```typescript
176
- * const store = new ObjectStore(durableObjectStorage)
177
- *
178
- * // Create a commit
179
- * const commitSha = await store.putCommitObject({
180
- * tree: treeSha,
181
- * parents: [parentSha],
182
- * author: { name: 'Alice', email: 'alice@example.com', timestamp: 1704067200, timezone: '+0000' },
183
- * committer: { name: 'Alice', email: 'alice@example.com', timestamp: 1704067200, timezone: '+0000' },
184
- * message: 'Initial commit'
185
- * })
186
- *
187
- * // Read it back
188
- * const commit = await store.getCommitObject(commitSha)
189
- * console.log(commit?.message)
190
- * ```
191
- */
192
- export declare class ObjectStore {
193
- private storage;
194
- private cache;
195
- private options;
196
- private logger?;
197
- private backend;
198
- private _reads;
199
- private _writes;
200
- private _deletes;
201
- private _bytesWritten;
202
- private _bytesRead;
203
- private _totalWriteLatency;
204
- private _totalReadLatency;
205
- private _batchOperations;
206
- private _batchObjectsTotal;
207
- /**
208
- * Create a new ObjectStore.
209
- *
210
- * @param storage - Durable Object storage interface with SQL support
211
- * @param options - Configuration options for caching, metrics, logging, and backend
212
- *
213
- * @example
214
- * ```typescript
215
- * // Basic usage (SQLite backend)
216
- * const store = new ObjectStore(storage)
217
- *
218
- * // With caching and metrics
219
- * const store = new ObjectStore(storage, {
220
- * cacheMaxCount: 1000,
221
- * cacheMaxBytes: 50 * 1024 * 1024,
222
- * enableMetrics: true,
223
- * logger: console
224
- * })
225
- *
226
- * // With StorageBackend abstraction
227
- * const store = new ObjectStore(storage, {
228
- * backend: fsBackend
229
- * })
230
- * ```
231
- */
232
- constructor(storage: DurableObjectStorage, options?: ObjectStoreOptions);
233
- /**
234
- * Log a message if logger is configured.
235
- * @internal
236
- */
237
- private log;
238
- /**
239
- * Store a raw object and return its SHA.
240
- *
241
- * @description
242
- * Computes the SHA-1 hash of the object in Git format (type + size + content),
243
- * logs the operation to WAL, stores the object, and updates the object index.
244
- * If an object with the same SHA already exists, it is replaced (idempotent).
245
- * The object is also added to the LRU cache for fast subsequent reads.
246
- *
247
- * @param type - Object type ('blob', 'tree', 'commit', 'tag')
248
- * @param data - Raw object content (without Git header)
249
- * @returns 40-character SHA-1 hash of the stored object
250
- *
251
- * @example
252
- * ```typescript
253
- * const content = new TextEncoder().encode('file content')
254
- * const sha = await store.putObject('blob', content)
255
- * console.log(`Stored blob: ${sha}`)
256
- * ```
257
- */
258
- putObject(type: ObjectType, data: Uint8Array): Promise<string>;
259
- /**
260
- * Store a tree object with entries.
261
- *
262
- * @description
263
- * Creates a Git tree object from an array of entries. Entries are sorted
264
- * by name (with directories treated as having trailing slashes for sorting).
265
- * Each entry is serialized as: "{mode} {name}\0{20-byte-sha}"
266
- *
267
- * @param entries - Array of tree entries (files and subdirectories)
268
- * @returns 40-character SHA-1 hash of the stored tree
269
- *
270
- * @example
271
- * ```typescript
272
- * const treeSha = await store.putTreeObject([
273
- * { mode: '100644', name: 'README.md', sha: blobSha },
274
- * { mode: '040000', name: 'src', sha: subdirSha }
275
- * ])
276
- * ```
277
- */
278
- putTreeObject(entries: TreeEntry[]): Promise<string>;
279
- /**
280
- * Store a commit object.
281
- *
282
- * @description
283
- * Creates a Git commit object with the specified tree, parents, author,
284
- * committer, and message. The commit content is formatted according to
285
- * the Git commit format specification.
286
- *
287
- * @param commit - Commit data
288
- * @param commit.tree - SHA of the root tree object
289
- * @param commit.parents - Array of parent commit SHAs (empty for root commit)
290
- * @param commit.author - Author information
291
- * @param commit.committer - Committer information
292
- * @param commit.message - Commit message
293
- * @returns 40-character SHA-1 hash of the stored commit
294
- *
295
- * @example
296
- * ```typescript
297
- * const now = Math.floor(Date.now() / 1000)
298
- * const author = { name: 'Alice', email: 'alice@example.com', timestamp: now, timezone: '+0000' }
299
- *
300
- * const sha = await store.putCommitObject({
301
- * tree: treeSha,
302
- * parents: [],
303
- * author,
304
- * committer: author,
305
- * message: 'Initial commit\n\nThis is the first commit.'
306
- * })
307
- * ```
308
- */
309
- putCommitObject(commit: {
310
- tree: string;
311
- parents: string[];
312
- author: Author;
313
- committer: Author;
314
- message: string;
315
- }): Promise<string>;
316
- /**
317
- * Store a tag object (annotated tag).
318
- *
319
- * @description
320
- * Creates a Git tag object pointing to another object with tagger
321
- * information and a message. The tag content is formatted according
322
- * to the Git tag format specification.
323
- *
324
- * @param tag - Tag data
325
- * @param tag.object - SHA of the object being tagged
326
- * @param tag.objectType - Type of the object being tagged
327
- * @param tag.tagger - Tagger information
328
- * @param tag.message - Tag message
329
- * @param tag.name - Tag name
330
- * @returns 40-character SHA-1 hash of the stored tag object
331
- *
332
- * @example
333
- * ```typescript
334
- * const now = Math.floor(Date.now() / 1000)
335
- * const tagger = { name: 'Bob', email: 'bob@example.com', timestamp: now, timezone: '+0000' }
336
- *
337
- * const sha = await store.putTagObject({
338
- * object: commitSha,
339
- * objectType: 'commit',
340
- * tagger,
341
- * message: 'Release v1.0.0',
342
- * name: 'v1.0.0'
343
- * })
344
- * ```
345
- */
346
- putTagObject(tag: {
347
- object: string;
348
- objectType: ObjectType;
349
- tagger?: Author;
350
- message: string;
351
- name: string;
352
- }): Promise<string>;
353
- /**
354
- * Retrieve an object by SHA.
355
- *
356
- * @description
357
- * Fetches an object from the LRU cache first, falling back to the database
358
- * if not cached. Returns null if the object doesn't exist or if the SHA is invalid.
359
- *
360
- * @param sha - 40-character SHA-1 hash
361
- * @returns The stored object or null if not found
362
- *
363
- * @example
364
- * ```typescript
365
- * const obj = await store.getObject(sha)
366
- * if (obj) {
367
- * console.log(`Found ${obj.type} of ${obj.size} bytes`)
368
- * }
369
- * ```
370
- */
371
- getObject(sha: string): Promise<StoredObject | null>;
372
- /**
373
- * Delete an object by SHA.
374
- *
375
- * @description
376
- * Removes an object from the cache, objects table, and the object index.
377
- * The operation is logged to WAL. Returns false if the object doesn't exist.
378
- *
379
- * **Warning**: Deleting objects that are still referenced by other objects
380
- * (e.g., blobs referenced by trees) will corrupt the repository.
381
- *
382
- * @param sha - 40-character SHA-1 hash
383
- * @returns True if the object was deleted, false if it didn't exist
384
- *
385
- * @example
386
- * ```typescript
387
- * const deleted = await store.deleteObject(sha)
388
- * if (deleted) {
389
- * console.log('Object removed')
390
- * }
391
- * ```
392
- */
393
- deleteObject(sha: string): Promise<boolean>;
394
- /**
395
- * Check if an object exists.
396
- *
397
- * @description
398
- * Efficiently checks for object existence without fetching the full content.
399
- *
400
- * @param sha - 40-character SHA-1 hash
401
- * @returns True if the object exists, false otherwise
402
- *
403
- * @example
404
- * ```typescript
405
- * if (await store.hasObject(sha)) {
406
- * console.log('Object exists')
407
- * }
408
- * ```
409
- */
410
- hasObject(sha: string): Promise<boolean>;
411
- /**
412
- * Verify an object's integrity by recomputing its hash.
413
- *
414
- * @description
415
- * Computes the SHA-1 hash of the stored object and compares it
416
- * to the stored SHA. Returns false if the object is corrupted
417
- * or doesn't exist.
418
- *
419
- * @param sha - 40-character SHA-1 hash to verify
420
- * @returns True if the computed hash matches, false otherwise
421
- *
422
- * @example
423
- * ```typescript
424
- * if (await store.verifyObject(sha)) {
425
- * console.log('Object integrity verified')
426
- * } else {
427
- * console.log('Object is corrupted or missing')
428
- * }
429
- * ```
430
- */
431
- verifyObject(sha: string): Promise<boolean>;
432
- /**
433
- * Get object type by SHA.
434
- *
435
- * @description
436
- * Returns just the type of an object without fetching its content.
437
- *
438
- * @param sha - 40-character SHA-1 hash
439
- * @returns Object type or null if not found
440
- *
441
- * @example
442
- * ```typescript
443
- * const type = await store.getObjectType(sha)
444
- * if (type === 'commit') {
445
- * // Handle commit
446
- * }
447
- * ```
448
- */
449
- getObjectType(sha: string): Promise<ObjectType | null>;
450
- /**
451
- * Get object size by SHA.
452
- *
453
- * @description
454
- * Returns just the size of an object without fetching its content.
455
- *
456
- * @param sha - 40-character SHA-1 hash
457
- * @returns Object size in bytes or null if not found
458
- *
459
- * @example
460
- * ```typescript
461
- * const size = await store.getObjectSize(sha)
462
- * console.log(`Object is ${size} bytes`)
463
- * ```
464
- */
465
- getObjectSize(sha: string): Promise<number | null>;
466
- /**
467
- * Store multiple objects in a batch using a single transaction.
468
- *
469
- * @description
470
- * Stores multiple objects atomically within a single SQLite transaction.
471
- * This is more efficient than individual puts for bulk operations as it:
472
- * - Reduces the number of disk flushes
473
- * - Ensures atomic writes (all-or-nothing)
474
- * - Batches WAL entries for better performance
475
- *
476
- * @param objects - Array of objects to store
477
- * @returns Array of SHA-1 hashes in the same order as input
478
- *
479
- * @example
480
- * ```typescript
481
- * const shas = await store.putObjects([
482
- * { type: 'blob', data: content1 },
483
- * { type: 'blob', data: content2 }
484
- * ])
485
- * ```
486
- */
487
- putObjects(objects: {
488
- type: ObjectType;
489
- data: Uint8Array;
490
- }[]): Promise<string[]>;
491
- /**
492
- * Retrieve multiple objects by SHA using optimized batch queries.
493
- *
494
- * @description
495
- * Fetches multiple objects efficiently by:
496
- * 1. First checking the LRU cache for each SHA
497
- * 2. Batching uncached SHAs into a single SQL query with IN clause
498
- * 3. Returning results in the original order with null for missing objects
499
- *
500
- * @param shas - Array of 40-character SHA-1 hashes
501
- * @returns Array of objects (or null for missing) in the same order
502
- *
503
- * @example
504
- * ```typescript
505
- * const objects = await store.getObjects([sha1, sha2, sha3])
506
- * objects.forEach((obj, i) => {
507
- * if (obj) {
508
- * console.log(`${i}: ${obj.type}`)
509
- * }
510
- * })
511
- * ```
512
- */
513
- getObjects(shas: string[]): Promise<(StoredObject | null)[]>;
514
- /**
515
- * Get a blob object with typed result.
516
- *
517
- * @description
518
- * Fetches an object and returns it as a BlobObject if it's a blob.
519
- * Returns null if the object doesn't exist or isn't a blob.
520
- *
521
- * @param sha - 40-character SHA-1 hash
522
- * @returns Typed BlobObject or null
523
- *
524
- * @example
525
- * ```typescript
526
- * const blob = await store.getBlobObject(sha)
527
- * if (blob) {
528
- * const content = new TextDecoder().decode(blob.data)
529
- * console.log(content)
530
- * }
531
- * ```
532
- */
533
- getBlobObject(sha: string): Promise<BlobObject | null>;
534
- /**
535
- * Get a tree object with parsed entries.
536
- *
537
- * @description
538
- * Fetches and parses a tree object, extracting all entries
539
- * with their modes, names, and SHA references.
540
- *
541
- * @param sha - 40-character SHA-1 hash
542
- * @returns Parsed TreeObject with entries or null
543
- *
544
- * @example
545
- * ```typescript
546
- * const tree = await store.getTreeObject(sha)
547
- * if (tree) {
548
- * for (const entry of tree.entries) {
549
- * console.log(`${entry.mode} ${entry.name} ${entry.sha}`)
550
- * }
551
- * }
552
- * ```
553
- */
554
- getTreeObject(sha: string): Promise<TreeObject | null>;
555
- /**
556
- * Get a commit object with parsed fields.
557
- *
558
- * @description
559
- * Fetches and parses a commit object, extracting tree SHA,
560
- * parent SHAs, author, committer, and message.
561
- *
562
- * @param sha - 40-character SHA-1 hash
563
- * @returns Parsed CommitObject or null
564
- *
565
- * @example
566
- * ```typescript
567
- * const commit = await store.getCommitObject(sha)
568
- * if (commit) {
569
- * console.log(`Author: ${commit.author.name}`)
570
- * console.log(`Message: ${commit.message}`)
571
- * console.log(`Parents: ${commit.parents.length}`)
572
- * }
573
- * ```
574
- */
575
- getCommitObject(sha: string): Promise<CommitObject | null>;
576
- /**
577
- * Get a tag object with parsed fields.
578
- *
579
- * @description
580
- * Fetches and parses an annotated tag object, extracting
581
- * the tagged object SHA, object type, tag name, tagger, and message.
582
- *
583
- * @param sha - 40-character SHA-1 hash
584
- * @returns Parsed TagObject or null
585
- *
586
- * @example
587
- * ```typescript
588
- * const tag = await store.getTagObject(sha)
589
- * if (tag) {
590
- * console.log(`Tag: ${tag.name}`)
591
- * console.log(`Points to: ${tag.object} (${tag.objectType})`)
592
- * console.log(`Tagger: ${tag.tagger?.name}`)
593
- * }
594
- * ```
595
- */
596
- getTagObject(sha: string): Promise<TagObject | null>;
597
- /**
598
- * Get raw serialized object with Git header.
599
- *
600
- * @description
601
- * Returns the complete Git object format including header:
602
- * "{type} {size}\0{content}"
603
- *
604
- * This is the format used for hashing and storage in pack files.
605
- *
606
- * @param sha - 40-character SHA-1 hash
607
- * @returns Complete object with Git header or null
608
- *
609
- * @example
610
- * ```typescript
611
- * const raw = await store.getRawObject(sha)
612
- * if (raw) {
613
- * // Can be written directly to a pack file or loose object
614
- * }
615
- * ```
616
- */
617
- getRawObject(sha: string): Promise<Uint8Array | null>;
618
- /**
619
- * Log operation to WAL.
620
- *
621
- * @description
622
- * Writes an operation entry to the write-ahead log for durability.
623
- * The WAL ensures operations can be recovered after crashes.
624
- *
625
- * @param operation - Operation type ('PUT', 'DELETE', etc.)
626
- * @param sha - Object SHA being operated on
627
- * @param type - Object type
628
- * @param _data - Object data (not stored in WAL, just for signature compatibility)
629
- * @internal
630
- */
631
- private logToWAL;
632
- }
633
- //# sourceMappingURL=object-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"object-store.d.ts","sourceRoot":"","sources":["../../src/durable-object/object-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAY,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,SAAS,EACT,MAAM,EAIP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAMxD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAA;IACX,sDAAsD;IACtD,IAAI,EAAE,UAAU,CAAA;IAChB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,IAAI,EAAE,UAAU,CAAA;IAChB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAE1B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IACjD,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAChD,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAChD,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,uBAAuB;IACvB,KAAK,EAAE,UAAU,CAAA;IACjB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,kCAAkC;IAClC,iBAAiB,EAAE,MAAM,CAAA;IACzB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAA;IACxB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAA;IACvB,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,WAAW;IA2CpB,OAAO,CAAC,OAAO;IA1CjB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,MAAM,CAAC,CAAmB;IAClC,OAAO,CAAC,OAAO,CAAuB;IAGtC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,kBAAkB,CAAI;IAE9B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;gBAEO,OAAO,EAAE,oBAAoB,EACrC,OAAO,CAAC,EAAE,kBAAkB;IAkB9B;;;OAGG;IACH,OAAO,CAAC,GAAG;IAQX;;;;;;;;;;;;;;;;;;;OAmBG;IACG,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAgFpE;;;;;;;;;;;;;;;;;;OAkBG;IACG,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA+D1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,eAAe,CAAC,MAAM,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,EAAE,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,YAAY,CAAC,GAAG,EAAE;QACtB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,UAAU,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE,MAAM,CAAA;KACb,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnB;;;;;;;;;;;;;;;;;OAiBG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAkF1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqDjD;;;;;;;;;;;;;;;OAeG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB9C;;;;;;;;;;;;;;;;;;;OAmBG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBjD;;;;;;;;;;;;;;;;OAgBG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK5D;;;;;;;;;;;;;;OAcG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKxD;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,UAAU,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsGtF;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;IAoElE;;;;;;;;;;;;;;;;;;OAkBG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAY5D;;;;;;;;;;;;;;;;;;;OAmBG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA8D5D;;;;;;;;;;;;;;;;;;;OAmBG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAkDhE;;;;;;;;;;;;;;;;;;;OAmBG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAyD1D;;;;;;;;;;;;;;;;;;;OAmBG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAc3D;;;;;;;;;;;;OAYG;YACW,QAAQ;CAoBvB"}