gitx.do 0.0.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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +156 -0
  3. package/dist/durable-object/object-store.d.ts +113 -0
  4. package/dist/durable-object/object-store.d.ts.map +1 -0
  5. package/dist/durable-object/object-store.js +387 -0
  6. package/dist/durable-object/object-store.js.map +1 -0
  7. package/dist/durable-object/schema.d.ts +17 -0
  8. package/dist/durable-object/schema.d.ts.map +1 -0
  9. package/dist/durable-object/schema.js +43 -0
  10. package/dist/durable-object/schema.js.map +1 -0
  11. package/dist/durable-object/wal.d.ts +111 -0
  12. package/dist/durable-object/wal.d.ts.map +1 -0
  13. package/dist/durable-object/wal.js +200 -0
  14. package/dist/durable-object/wal.js.map +1 -0
  15. package/dist/index.d.ts +24 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +101 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/mcp/adapter.d.ts +231 -0
  20. package/dist/mcp/adapter.d.ts.map +1 -0
  21. package/dist/mcp/adapter.js +502 -0
  22. package/dist/mcp/adapter.js.map +1 -0
  23. package/dist/mcp/sandbox.d.ts +261 -0
  24. package/dist/mcp/sandbox.d.ts.map +1 -0
  25. package/dist/mcp/sandbox.js +983 -0
  26. package/dist/mcp/sandbox.js.map +1 -0
  27. package/dist/mcp/sdk-adapter.d.ts +413 -0
  28. package/dist/mcp/sdk-adapter.d.ts.map +1 -0
  29. package/dist/mcp/sdk-adapter.js +672 -0
  30. package/dist/mcp/sdk-adapter.js.map +1 -0
  31. package/dist/mcp/tools.d.ts +133 -0
  32. package/dist/mcp/tools.d.ts.map +1 -0
  33. package/dist/mcp/tools.js +1604 -0
  34. package/dist/mcp/tools.js.map +1 -0
  35. package/dist/ops/blame.d.ts +148 -0
  36. package/dist/ops/blame.d.ts.map +1 -0
  37. package/dist/ops/blame.js +754 -0
  38. package/dist/ops/blame.js.map +1 -0
  39. package/dist/ops/branch.d.ts +215 -0
  40. package/dist/ops/branch.d.ts.map +1 -0
  41. package/dist/ops/branch.js +608 -0
  42. package/dist/ops/branch.js.map +1 -0
  43. package/dist/ops/commit-traversal.d.ts +209 -0
  44. package/dist/ops/commit-traversal.d.ts.map +1 -0
  45. package/dist/ops/commit-traversal.js +755 -0
  46. package/dist/ops/commit-traversal.js.map +1 -0
  47. package/dist/ops/commit.d.ts +221 -0
  48. package/dist/ops/commit.d.ts.map +1 -0
  49. package/dist/ops/commit.js +606 -0
  50. package/dist/ops/commit.js.map +1 -0
  51. package/dist/ops/merge-base.d.ts +223 -0
  52. package/dist/ops/merge-base.d.ts.map +1 -0
  53. package/dist/ops/merge-base.js +581 -0
  54. package/dist/ops/merge-base.js.map +1 -0
  55. package/dist/ops/merge.d.ts +385 -0
  56. package/dist/ops/merge.d.ts.map +1 -0
  57. package/dist/ops/merge.js +1203 -0
  58. package/dist/ops/merge.js.map +1 -0
  59. package/dist/ops/tag.d.ts +182 -0
  60. package/dist/ops/tag.d.ts.map +1 -0
  61. package/dist/ops/tag.js +608 -0
  62. package/dist/ops/tag.js.map +1 -0
  63. package/dist/ops/tree-builder.d.ts +82 -0
  64. package/dist/ops/tree-builder.d.ts.map +1 -0
  65. package/dist/ops/tree-builder.js +246 -0
  66. package/dist/ops/tree-builder.js.map +1 -0
  67. package/dist/ops/tree-diff.d.ts +243 -0
  68. package/dist/ops/tree-diff.d.ts.map +1 -0
  69. package/dist/ops/tree-diff.js +657 -0
  70. package/dist/ops/tree-diff.js.map +1 -0
  71. package/dist/pack/delta.d.ts +68 -0
  72. package/dist/pack/delta.d.ts.map +1 -0
  73. package/dist/pack/delta.js +343 -0
  74. package/dist/pack/delta.js.map +1 -0
  75. package/dist/pack/format.d.ts +84 -0
  76. package/dist/pack/format.d.ts.map +1 -0
  77. package/dist/pack/format.js +261 -0
  78. package/dist/pack/format.js.map +1 -0
  79. package/dist/pack/full-generation.d.ts +327 -0
  80. package/dist/pack/full-generation.d.ts.map +1 -0
  81. package/dist/pack/full-generation.js +1159 -0
  82. package/dist/pack/full-generation.js.map +1 -0
  83. package/dist/pack/generation.d.ts +118 -0
  84. package/dist/pack/generation.d.ts.map +1 -0
  85. package/dist/pack/generation.js +459 -0
  86. package/dist/pack/generation.js.map +1 -0
  87. package/dist/pack/index.d.ts +181 -0
  88. package/dist/pack/index.d.ts.map +1 -0
  89. package/dist/pack/index.js +552 -0
  90. package/dist/pack/index.js.map +1 -0
  91. package/dist/refs/branch.d.ts +224 -0
  92. package/dist/refs/branch.d.ts.map +1 -0
  93. package/dist/refs/branch.js +170 -0
  94. package/dist/refs/branch.js.map +1 -0
  95. package/dist/refs/storage.d.ts +208 -0
  96. package/dist/refs/storage.d.ts.map +1 -0
  97. package/dist/refs/storage.js +421 -0
  98. package/dist/refs/storage.js.map +1 -0
  99. package/dist/refs/tag.d.ts +230 -0
  100. package/dist/refs/tag.d.ts.map +1 -0
  101. package/dist/refs/tag.js +188 -0
  102. package/dist/refs/tag.js.map +1 -0
  103. package/dist/storage/lru-cache.d.ts +188 -0
  104. package/dist/storage/lru-cache.d.ts.map +1 -0
  105. package/dist/storage/lru-cache.js +410 -0
  106. package/dist/storage/lru-cache.js.map +1 -0
  107. package/dist/storage/object-index.d.ts +140 -0
  108. package/dist/storage/object-index.d.ts.map +1 -0
  109. package/dist/storage/object-index.js +166 -0
  110. package/dist/storage/object-index.js.map +1 -0
  111. package/dist/storage/r2-pack.d.ts +394 -0
  112. package/dist/storage/r2-pack.d.ts.map +1 -0
  113. package/dist/storage/r2-pack.js +1062 -0
  114. package/dist/storage/r2-pack.js.map +1 -0
  115. package/dist/tiered/cdc-pipeline.d.ts +316 -0
  116. package/dist/tiered/cdc-pipeline.d.ts.map +1 -0
  117. package/dist/tiered/cdc-pipeline.js +771 -0
  118. package/dist/tiered/cdc-pipeline.js.map +1 -0
  119. package/dist/tiered/migration.d.ts +242 -0
  120. package/dist/tiered/migration.d.ts.map +1 -0
  121. package/dist/tiered/migration.js +592 -0
  122. package/dist/tiered/migration.js.map +1 -0
  123. package/dist/tiered/parquet-writer.d.ts +248 -0
  124. package/dist/tiered/parquet-writer.d.ts.map +1 -0
  125. package/dist/tiered/parquet-writer.js +555 -0
  126. package/dist/tiered/parquet-writer.js.map +1 -0
  127. package/dist/tiered/read-path.d.ts +141 -0
  128. package/dist/tiered/read-path.d.ts.map +1 -0
  129. package/dist/tiered/read-path.js +204 -0
  130. package/dist/tiered/read-path.js.map +1 -0
  131. package/dist/types/objects.d.ts +53 -0
  132. package/dist/types/objects.d.ts.map +1 -0
  133. package/dist/types/objects.js +291 -0
  134. package/dist/types/objects.js.map +1 -0
  135. package/dist/types/storage.d.ts +117 -0
  136. package/dist/types/storage.d.ts.map +1 -0
  137. package/dist/types/storage.js +8 -0
  138. package/dist/types/storage.js.map +1 -0
  139. package/dist/utils/hash.d.ts +31 -0
  140. package/dist/utils/hash.d.ts.map +1 -0
  141. package/dist/utils/hash.js +60 -0
  142. package/dist/utils/hash.js.map +1 -0
  143. package/dist/utils/sha1.d.ts +26 -0
  144. package/dist/utils/sha1.d.ts.map +1 -0
  145. package/dist/utils/sha1.js +127 -0
  146. package/dist/utils/sha1.js.map +1 -0
  147. package/dist/wire/capabilities.d.ts +236 -0
  148. package/dist/wire/capabilities.d.ts.map +1 -0
  149. package/dist/wire/capabilities.js +437 -0
  150. package/dist/wire/capabilities.js.map +1 -0
  151. package/dist/wire/pkt-line.d.ts +67 -0
  152. package/dist/wire/pkt-line.d.ts.map +1 -0
  153. package/dist/wire/pkt-line.js +145 -0
  154. package/dist/wire/pkt-line.js.map +1 -0
  155. package/dist/wire/receive-pack.d.ts +302 -0
  156. package/dist/wire/receive-pack.d.ts.map +1 -0
  157. package/dist/wire/receive-pack.js +885 -0
  158. package/dist/wire/receive-pack.js.map +1 -0
  159. package/dist/wire/smart-http.d.ts +321 -0
  160. package/dist/wire/smart-http.d.ts.map +1 -0
  161. package/dist/wire/smart-http.js +654 -0
  162. package/dist/wire/smart-http.js.map +1 -0
  163. package/dist/wire/upload-pack.d.ts +333 -0
  164. package/dist/wire/upload-pack.d.ts.map +1 -0
  165. package/dist/wire/upload-pack.js +850 -0
  166. package/dist/wire/upload-pack.js.map +1 -0
  167. package/package.json +61 -0
@@ -0,0 +1,410 @@
1
+ /**
2
+ * LRU Cache implementation for hot objects in gitdo
3
+ * gitdo-165: LRU cache for hot objects
4
+ */
5
+ /**
6
+ * LRU Cache class for storing hot objects with size and count limits
7
+ */
8
+ export class LRUCache {
9
+ cache = new Map();
10
+ head = null; // Most recently used
11
+ tail = null; // Least recently used
12
+ _bytes = 0;
13
+ _hits = 0;
14
+ _misses = 0;
15
+ _evictions = 0;
16
+ maxCount;
17
+ maxBytes;
18
+ defaultTTL;
19
+ sizeCalculator;
20
+ onEvict;
21
+ /**
22
+ * Create a new LRU cache
23
+ * @param options Configuration options
24
+ */
25
+ constructor(options) {
26
+ this.maxCount = options?.maxCount ?? Infinity;
27
+ this.maxBytes = options?.maxBytes ?? Infinity;
28
+ this.defaultTTL = options?.defaultTTL;
29
+ this.sizeCalculator = options?.sizeCalculator ?? defaultSizeCalculator;
30
+ this.onEvict = options?.onEvict;
31
+ }
32
+ /**
33
+ * Check if an entry is expired
34
+ */
35
+ isExpired(entry) {
36
+ if (entry.expiresAt === null)
37
+ return false;
38
+ return Date.now() > entry.expiresAt;
39
+ }
40
+ /**
41
+ * Move a node to the head (most recently used)
42
+ */
43
+ moveToHead(node) {
44
+ if (node === this.head)
45
+ return;
46
+ // Remove from current position
47
+ this.removeNode(node);
48
+ // Add to head
49
+ node.prev = null;
50
+ node.next = this.head;
51
+ if (this.head) {
52
+ this.head.prev = node;
53
+ }
54
+ this.head = node;
55
+ if (!this.tail) {
56
+ this.tail = node;
57
+ }
58
+ }
59
+ /**
60
+ * Remove a node from the linked list
61
+ */
62
+ removeNode(node) {
63
+ if (node.prev) {
64
+ node.prev.next = node.next;
65
+ }
66
+ else {
67
+ this.head = node.next;
68
+ }
69
+ if (node.next) {
70
+ node.next.prev = node.prev;
71
+ }
72
+ else {
73
+ this.tail = node.prev;
74
+ }
75
+ }
76
+ /**
77
+ * Add a node to the head of the list
78
+ */
79
+ addToHead(node) {
80
+ node.prev = null;
81
+ node.next = this.head;
82
+ if (this.head) {
83
+ this.head.prev = node;
84
+ }
85
+ this.head = node;
86
+ if (!this.tail) {
87
+ this.tail = node;
88
+ }
89
+ }
90
+ /**
91
+ * Evict items until we're under limits
92
+ */
93
+ evictToFit(requiredSize) {
94
+ // Evict until we have room for the new item
95
+ while (this.tail && ((this.maxCount !== Infinity && this.cache.size >= this.maxCount) ||
96
+ (this.maxBytes !== Infinity && this._bytes + requiredSize > this.maxBytes))) {
97
+ const lru = this.tail;
98
+ this.removeNode(lru);
99
+ this.cache.delete(lru.key);
100
+ this._bytes -= lru.entry.size;
101
+ this._evictions++;
102
+ if (this.onEvict) {
103
+ this.onEvict(lru.key, lru.entry.value, 'lru');
104
+ }
105
+ }
106
+ }
107
+ /**
108
+ * Get a value from the cache
109
+ * @param key The cache key
110
+ * @returns The cached value or undefined if not found/expired
111
+ */
112
+ get(key) {
113
+ const node = this.cache.get(key);
114
+ if (!node) {
115
+ this._misses++;
116
+ return undefined;
117
+ }
118
+ if (this.isExpired(node.entry)) {
119
+ // Remove expired entry
120
+ this.removeNode(node);
121
+ this.cache.delete(key);
122
+ this._bytes -= node.entry.size;
123
+ this._misses++;
124
+ if (this.onEvict) {
125
+ this.onEvict(key, node.entry.value, 'ttl');
126
+ }
127
+ return undefined;
128
+ }
129
+ // Update access time and move to head
130
+ node.entry.lastAccessed = Date.now();
131
+ this.moveToHead(node);
132
+ this._hits++;
133
+ return node.entry.value;
134
+ }
135
+ /**
136
+ * Set a value in the cache
137
+ * @param key The cache key
138
+ * @param value The value to cache
139
+ * @param options Optional settings for this entry
140
+ * @returns true if successfully set, false otherwise
141
+ */
142
+ set(key, value, options) {
143
+ const size = options?.size ?? this.sizeCalculator(value);
144
+ // Reject items larger than maxBytes
145
+ if (this.maxBytes !== Infinity && size > this.maxBytes) {
146
+ return false;
147
+ }
148
+ const now = Date.now();
149
+ const ttl = options?.ttl ?? this.defaultTTL;
150
+ const expiresAt = ttl !== undefined ? now + ttl : null;
151
+ // Check if key already exists
152
+ const existingNode = this.cache.get(key);
153
+ if (existingNode) {
154
+ // Update existing entry
155
+ this._bytes -= existingNode.entry.size;
156
+ existingNode.entry = {
157
+ value,
158
+ size,
159
+ createdAt: now,
160
+ expiresAt,
161
+ lastAccessed: now
162
+ };
163
+ this._bytes += size;
164
+ this.moveToHead(existingNode);
165
+ return true;
166
+ }
167
+ // Evict items to make room
168
+ this.evictToFit(size);
169
+ // Create new entry
170
+ const entry = {
171
+ value,
172
+ size,
173
+ createdAt: now,
174
+ expiresAt,
175
+ lastAccessed: now
176
+ };
177
+ const node = {
178
+ key,
179
+ entry,
180
+ prev: null,
181
+ next: null
182
+ };
183
+ this.cache.set(key, node);
184
+ this.addToHead(node);
185
+ this._bytes += size;
186
+ return true;
187
+ }
188
+ /**
189
+ * Check if a key exists in the cache (without updating LRU order)
190
+ * @param key The cache key
191
+ * @returns true if the key exists and is not expired
192
+ */
193
+ has(key) {
194
+ const node = this.cache.get(key);
195
+ if (!node)
196
+ return false;
197
+ if (this.isExpired(node.entry))
198
+ return false;
199
+ return true;
200
+ }
201
+ /**
202
+ * Delete a key from the cache
203
+ * @param key The cache key
204
+ * @returns true if the key was deleted, false if it didn't exist
205
+ */
206
+ delete(key) {
207
+ const node = this.cache.get(key);
208
+ if (!node)
209
+ return false;
210
+ this.removeNode(node);
211
+ this.cache.delete(key);
212
+ this._bytes -= node.entry.size;
213
+ if (this.onEvict) {
214
+ this.onEvict(key, node.entry.value, 'manual');
215
+ }
216
+ return true;
217
+ }
218
+ /**
219
+ * Clear all entries from the cache
220
+ */
221
+ clear() {
222
+ if (this.onEvict) {
223
+ // Call onEvict for each entry
224
+ for (const [key, node] of this.cache) {
225
+ this.onEvict(key, node.entry.value, 'clear');
226
+ }
227
+ }
228
+ this.cache.clear();
229
+ this.head = null;
230
+ this.tail = null;
231
+ this._bytes = 0;
232
+ }
233
+ /**
234
+ * Get cache statistics
235
+ * @returns Current cache statistics
236
+ */
237
+ getStats() {
238
+ const total = this._hits + this._misses;
239
+ const hitRate = total === 0 ? 0 : Math.round((this._hits / total) * 100);
240
+ return {
241
+ hits: this._hits,
242
+ misses: this._misses,
243
+ count: this.cache.size,
244
+ bytes: this._bytes,
245
+ evictions: this._evictions,
246
+ hitRate
247
+ };
248
+ }
249
+ /**
250
+ * Reset cache statistics (keeps cached data)
251
+ */
252
+ resetStats() {
253
+ this._hits = 0;
254
+ this._misses = 0;
255
+ this._evictions = 0;
256
+ }
257
+ /**
258
+ * Get the number of items currently in the cache
259
+ */
260
+ get size() {
261
+ return this.cache.size;
262
+ }
263
+ /**
264
+ * Get the current byte size of the cache
265
+ */
266
+ get bytes() {
267
+ return this._bytes;
268
+ }
269
+ /**
270
+ * Get all keys in the cache (in LRU order, most recent first)
271
+ */
272
+ keys() {
273
+ const keys = [];
274
+ let node = this.head;
275
+ while (node) {
276
+ keys.push(node.key);
277
+ node = node.next;
278
+ }
279
+ return keys;
280
+ }
281
+ /**
282
+ * Get all values in the cache (in LRU order, most recent first)
283
+ */
284
+ values() {
285
+ const values = [];
286
+ let node = this.head;
287
+ while (node) {
288
+ values.push(node.entry.value);
289
+ node = node.next;
290
+ }
291
+ return values;
292
+ }
293
+ /**
294
+ * Get all entries in the cache (in LRU order, most recent first)
295
+ */
296
+ entries() {
297
+ const entries = [];
298
+ let node = this.head;
299
+ while (node) {
300
+ entries.push([node.key, node.entry.value]);
301
+ node = node.next;
302
+ }
303
+ return entries;
304
+ }
305
+ /**
306
+ * Peek at a value without updating LRU order
307
+ * @param key The cache key
308
+ * @returns The cached value or undefined if not found/expired
309
+ */
310
+ peek(key) {
311
+ const node = this.cache.get(key);
312
+ if (!node)
313
+ return undefined;
314
+ if (this.isExpired(node.entry))
315
+ return undefined;
316
+ return node.entry.value;
317
+ }
318
+ /**
319
+ * Evict expired entries from the cache
320
+ * @returns Number of entries evicted
321
+ */
322
+ prune() {
323
+ let pruned = 0;
324
+ const now = Date.now();
325
+ for (const [key, node] of this.cache) {
326
+ if (node.entry.expiresAt !== null && now > node.entry.expiresAt) {
327
+ this.removeNode(node);
328
+ this.cache.delete(key);
329
+ this._bytes -= node.entry.size;
330
+ pruned++;
331
+ if (this.onEvict) {
332
+ this.onEvict(key, node.entry.value, 'ttl');
333
+ }
334
+ }
335
+ }
336
+ return pruned;
337
+ }
338
+ /**
339
+ * Resize the cache to new limits
340
+ * @param options New size limits
341
+ */
342
+ resize(options) {
343
+ if (options.maxCount !== undefined) {
344
+ this.maxCount = options.maxCount;
345
+ }
346
+ if (options.maxBytes !== undefined) {
347
+ this.maxBytes = options.maxBytes;
348
+ }
349
+ // Evict items until we're under the new limits
350
+ while (this.tail && ((this.maxCount !== Infinity && this.cache.size > this.maxCount) ||
351
+ (this.maxBytes !== Infinity && this._bytes > this.maxBytes))) {
352
+ const lru = this.tail;
353
+ this.removeNode(lru);
354
+ this.cache.delete(lru.key);
355
+ this._bytes -= lru.entry.size;
356
+ this._evictions++;
357
+ if (this.onEvict) {
358
+ this.onEvict(lru.key, lru.entry.value, 'lru');
359
+ }
360
+ }
361
+ }
362
+ }
363
+ /**
364
+ * Create a key serializer for complex key types
365
+ */
366
+ export function createKeySerializer(serialize, deserialize) {
367
+ return { serialize, deserialize };
368
+ }
369
+ /**
370
+ * Default size calculator for common value types
371
+ */
372
+ export function defaultSizeCalculator(value) {
373
+ if (value === null || value === undefined) {
374
+ return 0;
375
+ }
376
+ if (typeof value === 'string') {
377
+ // Approximate size: 2 bytes per character (UTF-16)
378
+ return value.length * 2;
379
+ }
380
+ if (typeof value === 'number') {
381
+ // Numbers are 8 bytes in JavaScript
382
+ return 8;
383
+ }
384
+ if (typeof value === 'boolean') {
385
+ return 4;
386
+ }
387
+ if (value instanceof Uint8Array) {
388
+ return value.byteLength;
389
+ }
390
+ if (value instanceof ArrayBuffer) {
391
+ return value.byteLength;
392
+ }
393
+ if (ArrayBuffer.isView(value)) {
394
+ return value.byteLength;
395
+ }
396
+ if (typeof value === 'object') {
397
+ // For objects, serialize to JSON and count characters
398
+ try {
399
+ const json = JSON.stringify(value);
400
+ return json.length * 2;
401
+ }
402
+ catch {
403
+ // If serialization fails, return a default size
404
+ return 64;
405
+ }
406
+ }
407
+ // Default size for unknown types
408
+ return 8;
409
+ }
410
+ //# sourceMappingURL=lru-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru-cache.js","sourceRoot":"","sources":["../../src/storage/lru-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Object Location Index
3
+ *
4
+ * Tracks the storage location of Git objects across multiple tiers:
5
+ * - Hot: SQLite (local Durable Object storage for frequently accessed objects)
6
+ * - R2: Packed in R2 object storage (for larger objects or archives)
7
+ * - Parquet: Columnar format for cold storage analytics
8
+ *
9
+ * The index enables efficient object lookup regardless of which tier
10
+ * contains the actual data.
11
+ */
12
+ import { DurableObjectStorage } from '../durable-object/schema';
13
+ /**
14
+ * Storage tiers for object location
15
+ */
16
+ export type StorageTier = 'hot' | 'r2' | 'parquet';
17
+ /**
18
+ * Represents the location of a git object in the tiered storage system
19
+ */
20
+ export interface ObjectLocation {
21
+ /** The storage tier where the object is located */
22
+ tier: StorageTier;
23
+ /** Pack file ID (for R2 or Parquet tiers, null for hot tier) */
24
+ packId: string | null;
25
+ /** Byte offset within the pack file (for R2 or Parquet tiers) */
26
+ offset: number | null;
27
+ /** Size of the object in bytes */
28
+ size: number;
29
+ /** The object's SHA-1 hash */
30
+ sha: string;
31
+ /** Object type (blob, tree, commit, tag) */
32
+ type?: string;
33
+ /** Timestamp when location was last updated */
34
+ updatedAt?: number;
35
+ }
36
+ /**
37
+ * Statistics about objects in each storage tier
38
+ */
39
+ export interface ObjectIndexStats {
40
+ /** Total number of indexed objects */
41
+ totalObjects: number;
42
+ /** Number of objects in hot tier */
43
+ hotCount: number;
44
+ /** Number of objects in R2 tier */
45
+ r2Count: number;
46
+ /** Number of objects in Parquet tier */
47
+ parquetCount: number;
48
+ /** Total size of objects in hot tier (bytes) */
49
+ hotSize: number;
50
+ /** Total size of objects in R2 tier (bytes) */
51
+ r2Size: number;
52
+ /** Total size of objects in Parquet tier (bytes) */
53
+ parquetSize: number;
54
+ }
55
+ /**
56
+ * Result of a batch lookup operation
57
+ */
58
+ export interface BatchLookupResult {
59
+ /** Map of SHA to location for found objects */
60
+ found: Map<string, ObjectLocation>;
61
+ /** Array of SHAs that were not found */
62
+ missing: string[];
63
+ }
64
+ /**
65
+ * Options for recording an object location
66
+ */
67
+ export interface RecordLocationOptions {
68
+ /** The object's SHA-1 hash */
69
+ sha: string;
70
+ /** Storage tier */
71
+ tier: StorageTier;
72
+ /** Pack ID (required for r2/parquet tiers) */
73
+ packId?: string;
74
+ /** Offset in pack file */
75
+ offset?: number;
76
+ /** Size in bytes */
77
+ size: number;
78
+ /** Object type */
79
+ type?: string;
80
+ }
81
+ /**
82
+ * Object Index class for managing object locations across storage tiers
83
+ */
84
+ export declare class ObjectIndex {
85
+ private _storage;
86
+ constructor(storage: DurableObjectStorage);
87
+ /**
88
+ * Record the location of an object
89
+ */
90
+ recordLocation(options: RecordLocationOptions): Promise<void>;
91
+ /**
92
+ * Look up the location of an object by SHA
93
+ */
94
+ lookupLocation(sha: string): Promise<ObjectLocation | null>;
95
+ /**
96
+ * Perform batch lookup of multiple objects
97
+ */
98
+ batchLookup(shas: string[]): Promise<BatchLookupResult>;
99
+ /**
100
+ * Update the location of an object (e.g., when moving between tiers)
101
+ */
102
+ updateLocation(sha: string, newTier: StorageTier, packId?: string, offset?: number): Promise<void>;
103
+ /**
104
+ * Get statistics about object distribution across tiers
105
+ */
106
+ getStats(): Promise<ObjectIndexStats>;
107
+ /**
108
+ * Check if an object exists in the index
109
+ */
110
+ exists(sha: string): Promise<boolean>;
111
+ /**
112
+ * Delete an object from the index
113
+ */
114
+ deleteLocation(sha: string): Promise<boolean>;
115
+ /**
116
+ * Get all objects in a specific tier
117
+ */
118
+ getObjectsByTier(tier: StorageTier): Promise<ObjectLocation[]>;
119
+ /**
120
+ * Get all objects in a specific pack
121
+ */
122
+ getObjectsByPack(packId: string): Promise<ObjectLocation[]>;
123
+ }
124
+ /**
125
+ * Record the location of an object (standalone function)
126
+ */
127
+ export declare function recordLocation(storage: DurableObjectStorage, options: RecordLocationOptions): Promise<void>;
128
+ /**
129
+ * Look up the location of an object by SHA (standalone function)
130
+ */
131
+ export declare function lookupLocation(storage: DurableObjectStorage, sha: string): Promise<ObjectLocation | null>;
132
+ /**
133
+ * Perform batch lookup of multiple objects (standalone function)
134
+ */
135
+ export declare function batchLookup(storage: DurableObjectStorage, shas: string[]): Promise<BatchLookupResult>;
136
+ /**
137
+ * Get statistics about object distribution (standalone function)
138
+ */
139
+ export declare function getStats(storage: DurableObjectStorage): Promise<ObjectIndexStats>;
140
+ //# sourceMappingURL=object-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-index.d.ts","sourceRoot":"","sources":["../../src/storage/object-index.ts"],"names":[],"mappings":"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"}