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,68 @@
1
+ /**
2
+ * Git packfile delta encoding/decoding
3
+ *
4
+ * Git uses delta compression in packfiles to store objects efficiently.
5
+ * A delta is a set of instructions to transform a base object into a target object.
6
+ *
7
+ * Delta format:
8
+ * - Source (base) size: variable-length integer
9
+ * - Target size: variable-length integer
10
+ * - Instructions: sequence of copy or insert commands
11
+ *
12
+ * Instruction types:
13
+ * - Copy (MSB=1): Copy bytes from source object
14
+ * Bits 0-3: which offset bytes are present
15
+ * Bits 4-6: which size bytes are present
16
+ * - Insert (MSB=0): Insert literal bytes
17
+ * Bits 0-6: number of bytes to insert (1-127)
18
+ */
19
+ /** Copy instruction type marker (MSB set) */
20
+ export declare const COPY_INSTRUCTION = 128;
21
+ /** Insert instruction type marker (MSB clear) */
22
+ export declare const INSERT_INSTRUCTION = 0;
23
+ /** Result of parsing a delta header */
24
+ export interface DeltaHeaderResult {
25
+ size: number;
26
+ bytesRead: number;
27
+ }
28
+ /** Delta instruction representation */
29
+ export interface DeltaInstruction {
30
+ type: 'copy' | 'insert';
31
+ offset?: number;
32
+ size: number;
33
+ data?: Uint8Array;
34
+ }
35
+ /**
36
+ * Parse a variable-length size from delta header
37
+ *
38
+ * Git uses a variable-length encoding where each byte's MSB indicates
39
+ * if more bytes follow. The lower 7 bits of each byte contribute to the value.
40
+ *
41
+ * @param data The delta data buffer
42
+ * @param offset Starting offset in the buffer
43
+ * @returns The parsed size and number of bytes consumed
44
+ */
45
+ export declare function parseDeltaHeader(data: Uint8Array, offset: number): DeltaHeaderResult;
46
+ /**
47
+ * Apply a delta to a base object to produce the target object
48
+ *
49
+ * @param base The source/base object
50
+ * @param delta The delta data
51
+ * @returns The reconstructed target object
52
+ * @throws Error if delta is invalid or sizes don't match
53
+ */
54
+ export declare function applyDelta(base: Uint8Array, delta: Uint8Array): Uint8Array;
55
+ /**
56
+ * Create a delta between two objects
57
+ *
58
+ * This uses a simple but effective algorithm:
59
+ * 1. Build a hash table of 4-byte sequences in the base
60
+ * 2. Scan the target looking for matches
61
+ * 3. Emit copy instructions for matches, insert for non-matches
62
+ *
63
+ * @param base The source/base object
64
+ * @param target The target object to encode
65
+ * @returns The delta data
66
+ */
67
+ export declare function createDelta(base: Uint8Array, target: Uint8Array): Uint8Array;
68
+ //# sourceMappingURL=delta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/pack/delta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,MAAO,CAAA;AAEpC,iDAAiD;AACjD,eAAO,MAAM,kBAAkB,IAAO,CAAA;AAEtC,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CA8BpF;AAuBD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAgF1E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,CA0F5E"}
@@ -0,0 +1,343 @@
1
+ /**
2
+ * Git packfile delta encoding/decoding
3
+ *
4
+ * Git uses delta compression in packfiles to store objects efficiently.
5
+ * A delta is a set of instructions to transform a base object into a target object.
6
+ *
7
+ * Delta format:
8
+ * - Source (base) size: variable-length integer
9
+ * - Target size: variable-length integer
10
+ * - Instructions: sequence of copy or insert commands
11
+ *
12
+ * Instruction types:
13
+ * - Copy (MSB=1): Copy bytes from source object
14
+ * Bits 0-3: which offset bytes are present
15
+ * Bits 4-6: which size bytes are present
16
+ * - Insert (MSB=0): Insert literal bytes
17
+ * Bits 0-6: number of bytes to insert (1-127)
18
+ */
19
+ /** Copy instruction type marker (MSB set) */
20
+ export const COPY_INSTRUCTION = 0x80;
21
+ /** Insert instruction type marker (MSB clear) */
22
+ export const INSERT_INSTRUCTION = 0x00;
23
+ /**
24
+ * Parse a variable-length size from delta header
25
+ *
26
+ * Git uses a variable-length encoding where each byte's MSB indicates
27
+ * if more bytes follow. The lower 7 bits of each byte contribute to the value.
28
+ *
29
+ * @param data The delta data buffer
30
+ * @param offset Starting offset in the buffer
31
+ * @returns The parsed size and number of bytes consumed
32
+ */
33
+ export function parseDeltaHeader(data, offset) {
34
+ let size = 0;
35
+ let shift = 0;
36
+ let bytesRead = 0;
37
+ // Maximum bytes for a varint to prevent infinite loops
38
+ const MAX_VARINT_BYTES = 10;
39
+ while (true) {
40
+ if (offset + bytesRead >= data.length) {
41
+ throw new Error(`Delta header parsing failed: unexpected end of data at offset ${offset + bytesRead}`);
42
+ }
43
+ if (bytesRead >= MAX_VARINT_BYTES) {
44
+ throw new Error(`Delta header parsing failed: exceeded maximum length of ${MAX_VARINT_BYTES} bytes (possible infinite loop or corrupted data)`);
45
+ }
46
+ const byte = data[offset + bytesRead];
47
+ bytesRead++;
48
+ // Add the lower 7 bits to the result
49
+ size |= (byte & 0x7f) << shift;
50
+ shift += 7;
51
+ // If MSB is not set, we're done
52
+ if ((byte & 0x80) === 0) {
53
+ break;
54
+ }
55
+ }
56
+ return { size, bytesRead };
57
+ }
58
+ /**
59
+ * Encode a size as a variable-length integer
60
+ *
61
+ * @param size The size to encode
62
+ * @returns The encoded bytes
63
+ */
64
+ function encodeDeltaSize(size) {
65
+ const bytes = [];
66
+ do {
67
+ let byte = size & 0x7f;
68
+ size >>>= 7;
69
+ if (size > 0) {
70
+ byte |= 0x80; // Set continuation bit
71
+ }
72
+ bytes.push(byte);
73
+ } while (size > 0);
74
+ return new Uint8Array(bytes);
75
+ }
76
+ /**
77
+ * Apply a delta to a base object to produce the target object
78
+ *
79
+ * @param base The source/base object
80
+ * @param delta The delta data
81
+ * @returns The reconstructed target object
82
+ * @throws Error if delta is invalid or sizes don't match
83
+ */
84
+ export function applyDelta(base, delta) {
85
+ let offset = 0;
86
+ // Parse source size
87
+ const sourceHeader = parseDeltaHeader(delta, offset);
88
+ offset += sourceHeader.bytesRead;
89
+ if (sourceHeader.size !== base.length) {
90
+ throw new Error(`Delta source size mismatch: expected ${sourceHeader.size}, got ${base.length}`);
91
+ }
92
+ // Parse target size
93
+ const targetHeader = parseDeltaHeader(delta, offset);
94
+ offset += targetHeader.bytesRead;
95
+ // Allocate result buffer
96
+ const result = new Uint8Array(targetHeader.size);
97
+ let resultOffset = 0;
98
+ // Process instructions
99
+ while (offset < delta.length) {
100
+ const cmd = delta[offset++];
101
+ if (cmd & COPY_INSTRUCTION) {
102
+ // Copy instruction
103
+ let copyOffset = 0;
104
+ let copySize = 0;
105
+ // Read offset bytes (bits 0-3 indicate which bytes are present)
106
+ if (cmd & 0x01)
107
+ copyOffset |= delta[offset++];
108
+ if (cmd & 0x02)
109
+ copyOffset |= delta[offset++] << 8;
110
+ if (cmd & 0x04)
111
+ copyOffset |= delta[offset++] << 16;
112
+ if (cmd & 0x08)
113
+ copyOffset |= delta[offset++] << 24;
114
+ // Read size bytes (bits 4-6 indicate which bytes are present)
115
+ if (cmd & 0x10)
116
+ copySize |= delta[offset++];
117
+ if (cmd & 0x20)
118
+ copySize |= delta[offset++] << 8;
119
+ if (cmd & 0x40)
120
+ copySize |= delta[offset++] << 16;
121
+ // Size of 0 means 0x10000 (65536)
122
+ if (copySize === 0) {
123
+ copySize = 0x10000;
124
+ }
125
+ // Bounds checking to prevent buffer overflows
126
+ if (copyOffset < 0 || copySize < 0) {
127
+ throw new Error(`Invalid copy instruction: offset=${copyOffset}, size=${copySize}`);
128
+ }
129
+ if (copyOffset + copySize > base.length) {
130
+ throw new Error(`Copy instruction out of bounds: offset=${copyOffset}, size=${copySize}, base length=${base.length}`);
131
+ }
132
+ if (resultOffset + copySize > result.length) {
133
+ throw new Error(`Copy would overflow result buffer: resultOffset=${resultOffset}, size=${copySize}, result length=${result.length}`);
134
+ }
135
+ // Copy from base to result
136
+ result.set(base.subarray(copyOffset, copyOffset + copySize), resultOffset);
137
+ resultOffset += copySize;
138
+ }
139
+ else if (cmd !== 0) {
140
+ // Insert instruction: cmd is the number of bytes to insert
141
+ const insertSize = cmd;
142
+ result.set(delta.subarray(offset, offset + insertSize), resultOffset);
143
+ offset += insertSize;
144
+ resultOffset += insertSize;
145
+ }
146
+ else {
147
+ // cmd === 0 is reserved/invalid
148
+ throw new Error('Invalid delta instruction: 0x00');
149
+ }
150
+ }
151
+ // Verify we produced the expected size
152
+ if (resultOffset !== targetHeader.size) {
153
+ throw new Error(`Delta result size mismatch: expected ${targetHeader.size}, got ${resultOffset}`);
154
+ }
155
+ return result;
156
+ }
157
+ /**
158
+ * Create a delta between two objects
159
+ *
160
+ * This uses a simple but effective algorithm:
161
+ * 1. Build a hash table of 4-byte sequences in the base
162
+ * 2. Scan the target looking for matches
163
+ * 3. Emit copy instructions for matches, insert for non-matches
164
+ *
165
+ * @param base The source/base object
166
+ * @param target The target object to encode
167
+ * @returns The delta data
168
+ */
169
+ export function createDelta(base, target) {
170
+ const instructions = [];
171
+ // Add source and target size headers
172
+ instructions.push(encodeDeltaSize(base.length));
173
+ instructions.push(encodeDeltaSize(target.length));
174
+ if (target.length === 0) {
175
+ // Empty target, just return headers
176
+ return concatArrays(instructions);
177
+ }
178
+ if (base.length === 0) {
179
+ // No base to copy from, insert everything
180
+ emitInserts(instructions, target, 0, target.length);
181
+ return concatArrays(instructions);
182
+ }
183
+ // Build hash table for base object
184
+ // Key: 4-byte hash, Value: array of offsets
185
+ const WINDOW_SIZE = 4;
186
+ const hashTable = new Map();
187
+ if (base.length >= WINDOW_SIZE) {
188
+ for (let i = 0; i <= base.length - WINDOW_SIZE; i++) {
189
+ const hash = hashBytes(base, i, WINDOW_SIZE);
190
+ const offsets = hashTable.get(hash);
191
+ if (offsets) {
192
+ offsets.push(i);
193
+ }
194
+ else {
195
+ hashTable.set(hash, [i]);
196
+ }
197
+ }
198
+ }
199
+ // Scan target and find matches
200
+ let targetOffset = 0;
201
+ let insertStart = 0;
202
+ while (targetOffset < target.length) {
203
+ let bestMatchOffset = -1;
204
+ let bestMatchLength = 0;
205
+ // Look for a match if we have enough bytes
206
+ if (targetOffset <= target.length - WINDOW_SIZE) {
207
+ const hash = hashBytes(target, targetOffset, WINDOW_SIZE);
208
+ const candidates = hashTable.get(hash);
209
+ if (candidates) {
210
+ for (const baseOffset of candidates) {
211
+ // Verify the match and extend it
212
+ const matchLength = getMatchLength(base, baseOffset, target, targetOffset, Math.min(base.length - baseOffset, target.length - targetOffset));
213
+ if (matchLength >= WINDOW_SIZE && matchLength > bestMatchLength) {
214
+ bestMatchOffset = baseOffset;
215
+ bestMatchLength = matchLength;
216
+ }
217
+ }
218
+ }
219
+ }
220
+ // Minimum match length to be worth a copy instruction
221
+ const MIN_COPY_SIZE = 4;
222
+ if (bestMatchLength >= MIN_COPY_SIZE) {
223
+ // Emit pending inserts
224
+ if (targetOffset > insertStart) {
225
+ emitInserts(instructions, target, insertStart, targetOffset);
226
+ }
227
+ // Emit copy instruction
228
+ emitCopy(instructions, bestMatchOffset, bestMatchLength);
229
+ targetOffset += bestMatchLength;
230
+ insertStart = targetOffset;
231
+ }
232
+ else {
233
+ targetOffset++;
234
+ }
235
+ }
236
+ // Emit any remaining inserts
237
+ if (target.length > insertStart) {
238
+ emitInserts(instructions, target, insertStart, target.length);
239
+ }
240
+ return concatArrays(instructions);
241
+ }
242
+ /**
243
+ * Simple hash function for a sequence of bytes
244
+ */
245
+ function hashBytes(data, offset, length) {
246
+ let hash = 0;
247
+ for (let i = 0; i < length; i++) {
248
+ hash = ((hash << 5) - hash + data[offset + i]) | 0;
249
+ }
250
+ return hash;
251
+ }
252
+ /**
253
+ * Get the length of matching bytes between two arrays
254
+ */
255
+ function getMatchLength(a, aOffset, b, bOffset, maxLength) {
256
+ let length = 0;
257
+ while (length < maxLength && a[aOffset + length] === b[bOffset + length]) {
258
+ length++;
259
+ }
260
+ return length;
261
+ }
262
+ /**
263
+ * Emit insert instructions for a range of bytes
264
+ * Insert commands can only handle 1-127 bytes, so we may need multiple
265
+ */
266
+ function emitInserts(instructions, data, start, end) {
267
+ const MAX_INSERT = 127;
268
+ let offset = start;
269
+ while (offset < end) {
270
+ const size = Math.min(MAX_INSERT, end - offset);
271
+ const instruction = new Uint8Array(1 + size);
272
+ instruction[0] = size; // Insert command: size in lower 7 bits
273
+ instruction.set(data.subarray(offset, offset + size), 1);
274
+ instructions.push(instruction);
275
+ offset += size;
276
+ }
277
+ }
278
+ /**
279
+ * Emit a copy instruction
280
+ */
281
+ function emitCopy(instructions, offset, size) {
282
+ const bytes = [];
283
+ let cmd = COPY_INSTRUCTION;
284
+ // Encode offset bytes (little-endian)
285
+ if (offset & 0xff) {
286
+ cmd |= 0x01;
287
+ bytes.push(offset & 0xff);
288
+ }
289
+ if (offset & 0xff00) {
290
+ cmd |= 0x02;
291
+ bytes.push((offset >> 8) & 0xff);
292
+ }
293
+ if (offset & 0xff0000) {
294
+ cmd |= 0x04;
295
+ bytes.push((offset >> 16) & 0xff);
296
+ }
297
+ if (offset & 0xff000000) {
298
+ cmd |= 0x08;
299
+ bytes.push((offset >> 24) & 0xff);
300
+ }
301
+ // Special case: if offset is 0, we don't emit any offset bytes
302
+ // The cmd byte already indicates no offset bytes are present
303
+ // Encode size bytes (little-endian)
304
+ // Note: size of 0x10000 is encoded as no size bytes (all zero)
305
+ if (size !== 0x10000) {
306
+ if (size & 0xff) {
307
+ cmd |= 0x10;
308
+ bytes.push(size & 0xff);
309
+ }
310
+ if (size & 0xff00) {
311
+ cmd |= 0x20;
312
+ bytes.push((size >> 8) & 0xff);
313
+ }
314
+ if (size & 0xff0000) {
315
+ cmd |= 0x40;
316
+ bytes.push((size >> 16) & 0xff);
317
+ }
318
+ }
319
+ // If size is 0x10000, we don't set any size bits, which encodes as size=0x10000
320
+ const instruction = new Uint8Array(1 + bytes.length);
321
+ instruction[0] = cmd;
322
+ for (let i = 0; i < bytes.length; i++) {
323
+ instruction[1 + i] = bytes[i];
324
+ }
325
+ instructions.push(instruction);
326
+ }
327
+ /**
328
+ * Concatenate multiple Uint8Arrays into one
329
+ */
330
+ function concatArrays(arrays) {
331
+ let totalLength = 0;
332
+ for (const arr of arrays) {
333
+ totalLength += arr.length;
334
+ }
335
+ const result = new Uint8Array(totalLength);
336
+ let offset = 0;
337
+ for (const arr of arrays) {
338
+ result.set(arr, offset);
339
+ offset += arr.length;
340
+ }
341
+ return result;
342
+ }
343
+ //# sourceMappingURL=delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/pack/delta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Git Packfile Format Implementation
3
+ *
4
+ * The packfile format is used by git for efficient storage and transfer of objects.
5
+ * Format:
6
+ * - 4 bytes: "PACK" signature
7
+ * - 4 bytes: version number (network byte order, big-endian)
8
+ * - 4 bytes: number of objects (network byte order)
9
+ * - N objects: each object has header + compressed data
10
+ * - 20 bytes: SHA-1 checksum of all preceding content
11
+ *
12
+ * Object header encoding:
13
+ * - First byte: (MSB) continuation bit | 3-bit type | 4-bit size LSB
14
+ * - Subsequent bytes: (MSB) continuation bit | 7-bit size
15
+ *
16
+ * Object types:
17
+ * - 1: commit
18
+ * - 2: tree
19
+ * - 3: blob
20
+ * - 4: tag
21
+ * - 6: ofs_delta (offset delta)
22
+ * - 7: ref_delta (reference delta)
23
+ */
24
+ export declare const PACK_SIGNATURE = "PACK";
25
+ export declare const PACK_VERSION = 2;
26
+ export declare enum PackObjectType {
27
+ OBJ_COMMIT = 1,
28
+ OBJ_TREE = 2,
29
+ OBJ_BLOB = 3,
30
+ OBJ_TAG = 4,
31
+ OBJ_OFS_DELTA = 6,
32
+ OBJ_REF_DELTA = 7
33
+ }
34
+ export declare function packObjectTypeToString(type: PackObjectType): string;
35
+ export declare function stringToPackObjectType(str: string): PackObjectType;
36
+ export declare function encodeVarint(value: number): Uint8Array;
37
+ export declare function decodeVarint(data: Uint8Array, offset: number): {
38
+ value: number;
39
+ bytesRead: number;
40
+ };
41
+ /**
42
+ * Encode object type and size into pack object header format
43
+ *
44
+ * First byte: MSB continuation bit | 3-bit type | 4-bit size LSB
45
+ * Subsequent bytes: MSB continuation bit | 7-bit size continuation
46
+ */
47
+ export declare function encodeTypeAndSize(type: PackObjectType, size: number): Uint8Array;
48
+ export declare function decodeTypeAndSize(data: Uint8Array, offset: number): {
49
+ type: PackObjectType;
50
+ size: number;
51
+ bytesRead: number;
52
+ };
53
+ export interface PackHeader {
54
+ signature: string;
55
+ version: number;
56
+ objectCount: number;
57
+ }
58
+ /**
59
+ * Parse pack file header
60
+ * @param data - The packfile data
61
+ * @returns Parsed header information
62
+ */
63
+ export declare function parsePackHeader(data: Uint8Array): PackHeader;
64
+ export interface ParsedPackObject {
65
+ type: PackObjectType;
66
+ size: number;
67
+ headerSize: number;
68
+ }
69
+ /**
70
+ * Parse individual pack object header
71
+ * Note: This only parses the header, not the compressed data
72
+ */
73
+ export declare function parsePackObject(data: Uint8Array, offset: number): ParsedPackObject;
74
+ export interface PackableObject {
75
+ type: 'blob' | 'tree' | 'commit' | 'tag';
76
+ data: Uint8Array;
77
+ }
78
+ /**
79
+ * Create a packfile from a list of objects
80
+ * @param objects - Array of objects to pack
81
+ * @returns Complete packfile as Uint8Array
82
+ */
83
+ export declare function createPackfile(objects: PackableObject[]): Uint8Array;
84
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/pack/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,eAAO,MAAM,cAAc,SAAS,CAAA;AACpC,eAAO,MAAM,YAAY,IAAI,CAAA;AAG7B,oBAAY,cAAc;IACxB,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,aAAa,IAAI;IACjB,aAAa,IAAI;CAClB;AAGD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAiBnE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAalE;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CActD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA2BnG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAuBhF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG;IACnE,IAAI,EAAE,cAAc,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,CAyCA;AAGD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAqB5D;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAQlF;AAGD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;IACxC,IAAI,EAAE,UAAU,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,UAAU,CA2DpE"}