gitx.do 0.0.1 → 0.0.3

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 (237) hide show
  1. package/dist/cli/commands/blame.d.ts +259 -0
  2. package/dist/cli/commands/blame.d.ts.map +1 -0
  3. package/dist/cli/commands/blame.js +609 -0
  4. package/dist/cli/commands/blame.js.map +1 -0
  5. package/dist/cli/commands/branch.d.ts +249 -0
  6. package/dist/cli/commands/branch.d.ts.map +1 -0
  7. package/dist/cli/commands/branch.js +693 -0
  8. package/dist/cli/commands/branch.js.map +1 -0
  9. package/dist/cli/commands/commit.d.ts +182 -0
  10. package/dist/cli/commands/commit.d.ts.map +1 -0
  11. package/dist/cli/commands/commit.js +437 -0
  12. package/dist/cli/commands/commit.js.map +1 -0
  13. package/dist/cli/commands/diff.d.ts +464 -0
  14. package/dist/cli/commands/diff.d.ts.map +1 -0
  15. package/dist/cli/commands/diff.js +958 -0
  16. package/dist/cli/commands/diff.js.map +1 -0
  17. package/dist/cli/commands/log.d.ts +239 -0
  18. package/dist/cli/commands/log.d.ts.map +1 -0
  19. package/dist/cli/commands/log.js +535 -0
  20. package/dist/cli/commands/log.js.map +1 -0
  21. package/dist/cli/commands/review.d.ts +457 -0
  22. package/dist/cli/commands/review.d.ts.map +1 -0
  23. package/dist/cli/commands/review.js +533 -0
  24. package/dist/cli/commands/review.js.map +1 -0
  25. package/dist/cli/commands/status.d.ts +269 -0
  26. package/dist/cli/commands/status.d.ts.map +1 -0
  27. package/dist/cli/commands/status.js +493 -0
  28. package/dist/cli/commands/status.js.map +1 -0
  29. package/dist/cli/commands/web.d.ts +199 -0
  30. package/dist/cli/commands/web.d.ts.map +1 -0
  31. package/dist/cli/commands/web.js +696 -0
  32. package/dist/cli/commands/web.js.map +1 -0
  33. package/dist/cli/fs-adapter.d.ts +656 -0
  34. package/dist/cli/fs-adapter.d.ts.map +1 -0
  35. package/dist/cli/fs-adapter.js +1179 -0
  36. package/dist/cli/fs-adapter.js.map +1 -0
  37. package/dist/cli/index.d.ts +387 -0
  38. package/dist/cli/index.d.ts.map +1 -0
  39. package/dist/cli/index.js +523 -0
  40. package/dist/cli/index.js.map +1 -0
  41. package/dist/cli/ui/components/DiffView.d.ts +7 -0
  42. package/dist/cli/ui/components/DiffView.d.ts.map +1 -0
  43. package/dist/cli/ui/components/DiffView.js +11 -0
  44. package/dist/cli/ui/components/DiffView.js.map +1 -0
  45. package/dist/cli/ui/components/ErrorDisplay.d.ts +6 -0
  46. package/dist/cli/ui/components/ErrorDisplay.d.ts.map +1 -0
  47. package/dist/cli/ui/components/ErrorDisplay.js +11 -0
  48. package/dist/cli/ui/components/ErrorDisplay.js.map +1 -0
  49. package/dist/cli/ui/components/FuzzySearch.d.ts +9 -0
  50. package/dist/cli/ui/components/FuzzySearch.d.ts.map +1 -0
  51. package/dist/cli/ui/components/FuzzySearch.js +12 -0
  52. package/dist/cli/ui/components/FuzzySearch.js.map +1 -0
  53. package/dist/cli/ui/components/LoadingSpinner.d.ts +6 -0
  54. package/dist/cli/ui/components/LoadingSpinner.d.ts.map +1 -0
  55. package/dist/cli/ui/components/LoadingSpinner.js +10 -0
  56. package/dist/cli/ui/components/LoadingSpinner.js.map +1 -0
  57. package/dist/cli/ui/components/NavigationList.d.ts +9 -0
  58. package/dist/cli/ui/components/NavigationList.d.ts.map +1 -0
  59. package/dist/cli/ui/components/NavigationList.js +11 -0
  60. package/dist/cli/ui/components/NavigationList.js.map +1 -0
  61. package/dist/cli/ui/components/ScrollableContent.d.ts +8 -0
  62. package/dist/cli/ui/components/ScrollableContent.d.ts.map +1 -0
  63. package/dist/cli/ui/components/ScrollableContent.js +11 -0
  64. package/dist/cli/ui/components/ScrollableContent.js.map +1 -0
  65. package/dist/cli/ui/components/index.d.ts +7 -0
  66. package/dist/cli/ui/components/index.d.ts.map +1 -0
  67. package/dist/cli/ui/components/index.js +9 -0
  68. package/dist/cli/ui/components/index.js.map +1 -0
  69. package/dist/cli/ui/terminal-ui.d.ts +52 -0
  70. package/dist/cli/ui/terminal-ui.d.ts.map +1 -0
  71. package/dist/cli/ui/terminal-ui.js +121 -0
  72. package/dist/cli/ui/terminal-ui.js.map +1 -0
  73. package/dist/durable-object/object-store.d.ts +401 -23
  74. package/dist/durable-object/object-store.d.ts.map +1 -1
  75. package/dist/durable-object/object-store.js +414 -25
  76. package/dist/durable-object/object-store.js.map +1 -1
  77. package/dist/durable-object/schema.d.ts +188 -0
  78. package/dist/durable-object/schema.d.ts.map +1 -1
  79. package/dist/durable-object/schema.js +160 -0
  80. package/dist/durable-object/schema.js.map +1 -1
  81. package/dist/durable-object/wal.d.ts +336 -31
  82. package/dist/durable-object/wal.d.ts.map +1 -1
  83. package/dist/durable-object/wal.js +272 -27
  84. package/dist/durable-object/wal.js.map +1 -1
  85. package/dist/index.d.ts +379 -3
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +379 -7
  88. package/dist/index.js.map +1 -1
  89. package/dist/mcp/adapter.d.ts +579 -38
  90. package/dist/mcp/adapter.d.ts.map +1 -1
  91. package/dist/mcp/adapter.js +426 -33
  92. package/dist/mcp/adapter.js.map +1 -1
  93. package/dist/mcp/sandbox.d.ts +532 -29
  94. package/dist/mcp/sandbox.d.ts.map +1 -1
  95. package/dist/mcp/sandbox.js +389 -22
  96. package/dist/mcp/sandbox.js.map +1 -1
  97. package/dist/mcp/sdk-adapter.d.ts +478 -56
  98. package/dist/mcp/sdk-adapter.d.ts.map +1 -1
  99. package/dist/mcp/sdk-adapter.js +346 -44
  100. package/dist/mcp/sdk-adapter.js.map +1 -1
  101. package/dist/mcp/tools.d.ts +445 -30
  102. package/dist/mcp/tools.d.ts.map +1 -1
  103. package/dist/mcp/tools.js +363 -33
  104. package/dist/mcp/tools.js.map +1 -1
  105. package/dist/ops/blame.d.ts +424 -21
  106. package/dist/ops/blame.d.ts.map +1 -1
  107. package/dist/ops/blame.js +303 -20
  108. package/dist/ops/blame.js.map +1 -1
  109. package/dist/ops/branch.d.ts +583 -32
  110. package/dist/ops/branch.d.ts.map +1 -1
  111. package/dist/ops/branch.js +365 -23
  112. package/dist/ops/branch.js.map +1 -1
  113. package/dist/ops/commit-traversal.d.ts +164 -24
  114. package/dist/ops/commit-traversal.d.ts.map +1 -1
  115. package/dist/ops/commit-traversal.js +68 -2
  116. package/dist/ops/commit-traversal.js.map +1 -1
  117. package/dist/ops/commit.d.ts +387 -53
  118. package/dist/ops/commit.d.ts.map +1 -1
  119. package/dist/ops/commit.js +249 -29
  120. package/dist/ops/commit.js.map +1 -1
  121. package/dist/ops/merge-base.d.ts +195 -21
  122. package/dist/ops/merge-base.d.ts.map +1 -1
  123. package/dist/ops/merge-base.js +122 -12
  124. package/dist/ops/merge-base.js.map +1 -1
  125. package/dist/ops/merge.d.ts +600 -130
  126. package/dist/ops/merge.d.ts.map +1 -1
  127. package/dist/ops/merge.js +408 -60
  128. package/dist/ops/merge.js.map +1 -1
  129. package/dist/ops/tag.d.ts +67 -2
  130. package/dist/ops/tag.d.ts.map +1 -1
  131. package/dist/ops/tag.js +42 -1
  132. package/dist/ops/tag.js.map +1 -1
  133. package/dist/ops/tree-builder.d.ts +102 -6
  134. package/dist/ops/tree-builder.d.ts.map +1 -1
  135. package/dist/ops/tree-builder.js +30 -5
  136. package/dist/ops/tree-builder.js.map +1 -1
  137. package/dist/ops/tree-diff.d.ts +50 -2
  138. package/dist/ops/tree-diff.d.ts.map +1 -1
  139. package/dist/ops/tree-diff.js +50 -2
  140. package/dist/ops/tree-diff.js.map +1 -1
  141. package/dist/pack/delta.d.ts +211 -39
  142. package/dist/pack/delta.d.ts.map +1 -1
  143. package/dist/pack/delta.js +232 -46
  144. package/dist/pack/delta.js.map +1 -1
  145. package/dist/pack/format.d.ts +390 -28
  146. package/dist/pack/format.d.ts.map +1 -1
  147. package/dist/pack/format.js +344 -33
  148. package/dist/pack/format.js.map +1 -1
  149. package/dist/pack/full-generation.d.ts +313 -28
  150. package/dist/pack/full-generation.d.ts.map +1 -1
  151. package/dist/pack/full-generation.js +238 -19
  152. package/dist/pack/full-generation.js.map +1 -1
  153. package/dist/pack/generation.d.ts +346 -23
  154. package/dist/pack/generation.d.ts.map +1 -1
  155. package/dist/pack/generation.js +269 -21
  156. package/dist/pack/generation.js.map +1 -1
  157. package/dist/pack/index.d.ts +407 -86
  158. package/dist/pack/index.d.ts.map +1 -1
  159. package/dist/pack/index.js +351 -70
  160. package/dist/pack/index.js.map +1 -1
  161. package/dist/refs/branch.d.ts +517 -71
  162. package/dist/refs/branch.d.ts.map +1 -1
  163. package/dist/refs/branch.js +410 -26
  164. package/dist/refs/branch.js.map +1 -1
  165. package/dist/refs/storage.d.ts +610 -57
  166. package/dist/refs/storage.d.ts.map +1 -1
  167. package/dist/refs/storage.js +481 -29
  168. package/dist/refs/storage.js.map +1 -1
  169. package/dist/refs/tag.d.ts +677 -67
  170. package/dist/refs/tag.d.ts.map +1 -1
  171. package/dist/refs/tag.js +497 -30
  172. package/dist/refs/tag.js.map +1 -1
  173. package/dist/storage/lru-cache.d.ts +556 -53
  174. package/dist/storage/lru-cache.d.ts.map +1 -1
  175. package/dist/storage/lru-cache.js +439 -36
  176. package/dist/storage/lru-cache.js.map +1 -1
  177. package/dist/storage/object-index.d.ts +483 -38
  178. package/dist/storage/object-index.d.ts.map +1 -1
  179. package/dist/storage/object-index.js +388 -22
  180. package/dist/storage/object-index.js.map +1 -1
  181. package/dist/storage/r2-pack.d.ts +957 -94
  182. package/dist/storage/r2-pack.d.ts.map +1 -1
  183. package/dist/storage/r2-pack.js +756 -48
  184. package/dist/storage/r2-pack.js.map +1 -1
  185. package/dist/tiered/cdc-pipeline.d.ts +1610 -38
  186. package/dist/tiered/cdc-pipeline.d.ts.map +1 -1
  187. package/dist/tiered/cdc-pipeline.js +1131 -22
  188. package/dist/tiered/cdc-pipeline.js.map +1 -1
  189. package/dist/tiered/migration.d.ts +903 -41
  190. package/dist/tiered/migration.d.ts.map +1 -1
  191. package/dist/tiered/migration.js +646 -24
  192. package/dist/tiered/migration.js.map +1 -1
  193. package/dist/tiered/parquet-writer.d.ts +944 -47
  194. package/dist/tiered/parquet-writer.d.ts.map +1 -1
  195. package/dist/tiered/parquet-writer.js +667 -39
  196. package/dist/tiered/parquet-writer.js.map +1 -1
  197. package/dist/tiered/read-path.d.ts +728 -34
  198. package/dist/tiered/read-path.d.ts.map +1 -1
  199. package/dist/tiered/read-path.js +310 -27
  200. package/dist/tiered/read-path.js.map +1 -1
  201. package/dist/types/objects.d.ts +457 -0
  202. package/dist/types/objects.d.ts.map +1 -1
  203. package/dist/types/objects.js +305 -4
  204. package/dist/types/objects.js.map +1 -1
  205. package/dist/types/storage.d.ts +407 -35
  206. package/dist/types/storage.d.ts.map +1 -1
  207. package/dist/types/storage.js +27 -3
  208. package/dist/types/storage.js.map +1 -1
  209. package/dist/utils/hash.d.ts +133 -12
  210. package/dist/utils/hash.d.ts.map +1 -1
  211. package/dist/utils/hash.js +133 -12
  212. package/dist/utils/hash.js.map +1 -1
  213. package/dist/utils/sha1.d.ts +102 -9
  214. package/dist/utils/sha1.d.ts.map +1 -1
  215. package/dist/utils/sha1.js +114 -11
  216. package/dist/utils/sha1.js.map +1 -1
  217. package/dist/wire/capabilities.d.ts +896 -88
  218. package/dist/wire/capabilities.d.ts.map +1 -1
  219. package/dist/wire/capabilities.js +566 -62
  220. package/dist/wire/capabilities.js.map +1 -1
  221. package/dist/wire/pkt-line.d.ts +293 -15
  222. package/dist/wire/pkt-line.d.ts.map +1 -1
  223. package/dist/wire/pkt-line.js +251 -15
  224. package/dist/wire/pkt-line.js.map +1 -1
  225. package/dist/wire/receive-pack.d.ts +814 -64
  226. package/dist/wire/receive-pack.d.ts.map +1 -1
  227. package/dist/wire/receive-pack.js +542 -41
  228. package/dist/wire/receive-pack.js.map +1 -1
  229. package/dist/wire/smart-http.d.ts +575 -97
  230. package/dist/wire/smart-http.d.ts.map +1 -1
  231. package/dist/wire/smart-http.js +337 -46
  232. package/dist/wire/smart-http.js.map +1 -1
  233. package/dist/wire/upload-pack.d.ts +492 -98
  234. package/dist/wire/upload-pack.d.ts.map +1 -1
  235. package/dist/wire/upload-pack.js +347 -59
  236. package/dist/wire/upload-pack.js.map +1 -1
  237. package/package.json +10 -2
@@ -1,28 +1,144 @@
1
1
  /**
2
- * Git pkt-line protocol implementation
2
+ * @fileoverview Git pkt-line Protocol Implementation
3
3
  *
4
- * The pkt-line format is used in Git's wire protocol for communication.
5
- * Each packet starts with a 4-byte hex length prefix (including the 4 bytes itself).
4
+ * This module implements the pkt-line format used in Git's wire protocol for
5
+ * client-server communication. The pkt-line format provides a simple framing
6
+ * mechanism for variable-length data.
6
7
  *
7
- * Special packets:
8
- * - flush-pkt (0000): Indicates end of a message section
9
- * - delim-pkt (0001): Delimiter used in protocol v2
8
+ * @module wire/pkt-line
10
9
  *
11
- * Reference: https://git-scm.com/docs/protocol-common#_pkt_line_format
10
+ * ## Format Overview
11
+ *
12
+ * Each packet consists of a 4-byte hex length prefix followed by the data:
13
+ * - Length includes the 4-byte prefix itself
14
+ * - Maximum packet size is 65520 bytes (65516 data + 4 prefix)
15
+ *
16
+ * ## Special Packets
17
+ *
18
+ * - **flush-pkt** (`0000`): Indicates end of a message section
19
+ * - **delim-pkt** (`0001`): Delimiter used in protocol v2
20
+ *
21
+ * @see {@link https://git-scm.com/docs/protocol-common#_pkt_line_format} Git pkt-line Format
22
+ *
23
+ * @example Basic encoding and decoding
24
+ * ```typescript
25
+ * import { encodePktLine, decodePktLine, FLUSH_PKT } from './wire/pkt-line'
26
+ *
27
+ * // Encode a message
28
+ * const encoded = encodePktLine('hello\n')
29
+ * // Result: '000ahello\n'
30
+ *
31
+ * // Decode a message
32
+ * const decoded = decodePktLine('000ahello\n')
33
+ * // Result: { data: 'hello\n', bytesRead: 10 }
34
+ *
35
+ * // Use flush packet to end a section
36
+ * const message = encodePktLine('line1\n') + encodePktLine('line2\n') + FLUSH_PKT
37
+ * ```
38
+ *
39
+ * @example Streaming multiple packets
40
+ * ```typescript
41
+ * import { pktLineStream } from './wire/pkt-line'
42
+ *
43
+ * const stream = '0009line1\n0009line2\n0000'
44
+ * const { packets, remaining } = pktLineStream(stream)
45
+ *
46
+ * for (const packet of packets) {
47
+ * if (packet.type === 'flush') {
48
+ * console.log('End of section')
49
+ * } else {
50
+ * console.log('Data:', packet.data)
51
+ * }
52
+ * }
53
+ * ```
54
+ */
55
+ /**
56
+ * Flush packet - indicates end of a message section.
57
+ *
58
+ * @description
59
+ * The flush packet is a special 4-byte sequence `0000` that signals
60
+ * the end of a logical section in the protocol. It's used to:
61
+ * - End ref advertisements
62
+ * - Separate negotiation phases
63
+ * - Signal end of packfile transmission
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * // Build a complete ref advertisement
68
+ * let response = encodePktLine('# service=git-upload-pack\n')
69
+ * response += FLUSH_PKT // End service announcement
70
+ * response += encodePktLine('abc123 refs/heads/main\n')
71
+ * response += FLUSH_PKT // End ref list
72
+ * ```
12
73
  */
13
- /** Flush packet - indicates end of section */
14
74
  export const FLUSH_PKT = '0000';
15
- /** Delimiter packet - used in protocol v2 */
75
+ /**
76
+ * Delimiter packet - used in protocol v2.
77
+ *
78
+ * @description
79
+ * The delimiter packet `0001` is used in Git protocol v2 to separate
80
+ * sections within a single message, such as between command parameters
81
+ * and command arguments.
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * // Protocol v2 command format
86
+ * let request = encodePktLine('command=fetch')
87
+ * request += encodePktLine('agent=git/2.30.0')
88
+ * request += DELIM_PKT // Separate metadata from arguments
89
+ * request += encodePktLine('want abc123...')
90
+ * request += FLUSH_PKT // End of request
91
+ * ```
92
+ */
16
93
  export const DELIM_PKT = '0001';
17
- /** Maximum pkt-line data size (65516 bytes = 65520 - 4 for length prefix) */
94
+ /**
95
+ * Maximum pkt-line data size in bytes.
96
+ *
97
+ * @description
98
+ * The maximum data that can be included in a single pkt-line is 65516 bytes.
99
+ * This is calculated as: 65520 (max packet) - 4 (length prefix) = 65516.
100
+ *
101
+ * Attempting to encode data larger than this will result in an error
102
+ * or require splitting into multiple packets.
103
+ */
18
104
  export const MAX_PKT_LINE_DATA = 65516;
19
105
  /**
20
106
  * Encode data into pkt-line format.
21
107
  *
22
- * The format is: 4 hex chars (total length including prefix) + data
108
+ * @description
109
+ * Encodes the given data with a 4-character hex length prefix. The length
110
+ * includes the 4-byte prefix itself, so a 6-byte payload results in a
111
+ * 10-byte packet with prefix "000a".
112
+ *
113
+ * For binary data containing non-printable characters, returns a Uint8Array.
114
+ * For text data, returns a string for easier concatenation.
23
115
  *
24
116
  * @param data - The data to encode (string or Uint8Array)
25
- * @returns Encoded pkt-line as string (for text) or Uint8Array (for binary with non-printable chars)
117
+ * @returns Encoded pkt-line as string (for text) or Uint8Array (for binary)
118
+ *
119
+ * @throws {Error} If data exceeds MAX_PKT_LINE_DATA bytes
120
+ *
121
+ * @example Encoding text data
122
+ * ```typescript
123
+ * const line = encodePktLine('hello\n')
124
+ * // Result: '000ahello\n'
125
+ * // Length: 4 (prefix) + 6 (data) = 10 = 0x000a
126
+ * ```
127
+ *
128
+ * @example Encoding binary data
129
+ * ```typescript
130
+ * const binaryData = new Uint8Array([0x01, 0x02, 0x03])
131
+ * const encoded = encodePktLine(binaryData)
132
+ * // Result: Uint8Array with hex prefix + data
133
+ * ```
134
+ *
135
+ * @example Building a multi-line message
136
+ * ```typescript
137
+ * let message = ''
138
+ * message += encodePktLine('want abc123...\n') as string
139
+ * message += encodePktLine('have def456...\n') as string
140
+ * message += FLUSH_PKT
141
+ * ```
26
142
  */
27
143
  export function encodePktLine(data) {
28
144
  if (typeof data === 'string') {
@@ -50,8 +166,42 @@ export function encodePktLine(data) {
50
166
  /**
51
167
  * Decode a pkt-line format message.
52
168
  *
169
+ * @description
170
+ * Parses a single pkt-line from the input and returns the decoded data
171
+ * along with metadata about the packet. Handles special packets (flush,
172
+ * delim) and incomplete data gracefully.
173
+ *
174
+ * The function validates packet size to prevent denial-of-service attacks
175
+ * from maliciously large length values.
176
+ *
53
177
  * @param input - The input to decode (string or Uint8Array)
54
178
  * @returns Object with decoded data, packet type (if special), and bytes consumed
179
+ *
180
+ * @throws {Error} If packet size exceeds MAX_PKT_LINE_DATA + 4
181
+ *
182
+ * @example Decoding a data packet
183
+ * ```typescript
184
+ * const result = decodePktLine('000ahello\n')
185
+ * // result.data === 'hello\n'
186
+ * // result.bytesRead === 10
187
+ * // result.type === undefined (data packet)
188
+ * ```
189
+ *
190
+ * @example Decoding a flush packet
191
+ * ```typescript
192
+ * const result = decodePktLine('0000remaining...')
193
+ * // result.data === null
194
+ * // result.type === 'flush'
195
+ * // result.bytesRead === 4
196
+ * ```
197
+ *
198
+ * @example Handling incomplete data
199
+ * ```typescript
200
+ * const result = decodePktLine('00') // Not enough for length prefix
201
+ * // result.data === null
202
+ * // result.type === 'incomplete'
203
+ * // result.bytesRead === 0
204
+ * ```
55
205
  */
56
206
  export function decodePktLine(input) {
57
207
  // Convert to string for easier parsing
@@ -93,14 +243,45 @@ export function decodePktLine(input) {
93
243
  }
94
244
  /**
95
245
  * Create a flush-pkt (0000).
96
- * Used to indicate end of a message section.
246
+ *
247
+ * @description
248
+ * Returns the flush packet constant. Primarily useful for explicit intent
249
+ * in code, as you can also use FLUSH_PKT directly.
250
+ *
251
+ * The flush packet signals the end of a logical section in the protocol.
252
+ *
253
+ * @returns The flush packet string '0000'
254
+ *
255
+ * @example
256
+ * ```typescript
257
+ * // These are equivalent:
258
+ * const flush1 = encodeFlushPkt()
259
+ * const flush2 = FLUSH_PKT
260
+ *
261
+ * // Using in a message
262
+ * const message = encodePktLine('data\n') + encodeFlushPkt()
263
+ * ```
97
264
  */
98
265
  export function encodeFlushPkt() {
99
266
  return FLUSH_PKT;
100
267
  }
101
268
  /**
102
269
  * Create a delim-pkt (0001).
103
- * Used as a delimiter in protocol v2.
270
+ *
271
+ * @description
272
+ * Returns the delimiter packet constant. The delimiter packet is used
273
+ * in Git protocol v2 to separate sections within a command.
274
+ *
275
+ * @returns The delimiter packet string '0001'
276
+ *
277
+ * @example
278
+ * ```typescript
279
+ * // Protocol v2 ls-refs command
280
+ * let request = encodePktLine('command=ls-refs')
281
+ * request += encodeDelimPkt() // Separator
282
+ * request += encodePktLine('ref-prefix refs/heads/')
283
+ * request += encodeFlushPkt() // End
284
+ * ```
104
285
  */
105
286
  export function encodeDelimPkt() {
106
287
  return DELIM_PKT;
@@ -108,8 +289,63 @@ export function encodeDelimPkt() {
108
289
  /**
109
290
  * Parse a stream of pkt-lines.
110
291
  *
111
- * @param input - The input stream to parse
292
+ * @description
293
+ * Parses multiple pkt-lines from an input stream, returning all complete
294
+ * packets and any remaining unparsed data. This is useful for:
295
+ * - Processing multi-packet messages
296
+ * - Handling streaming data that arrives in chunks
297
+ * - Parsing complete protocol exchanges
298
+ *
299
+ * The function continues parsing until it encounters incomplete data
300
+ * or reaches the end of input.
301
+ *
302
+ * @param input - The input stream to parse (string or Uint8Array)
112
303
  * @returns Object with parsed packets and any remaining unparsed data
304
+ *
305
+ * @example Parsing a complete message
306
+ * ```typescript
307
+ * const stream = '0009line1\n0009line2\n0000'
308
+ * const { packets, remaining } = pktLineStream(stream)
309
+ *
310
+ * // packets = [
311
+ * // { data: 'line1\n', type: 'data' },
312
+ * // { data: 'line2\n', type: 'data' },
313
+ * // { data: null, type: 'flush' }
314
+ * // ]
315
+ * // remaining = ''
316
+ * ```
317
+ *
318
+ * @example Handling chunked data
319
+ * ```typescript
320
+ * // First chunk arrives
321
+ * let buffer = '0009line1\n00' // Incomplete second packet
322
+ * let result = pktLineStream(buffer)
323
+ * // result.packets = [{ data: 'line1\n', type: 'data' }]
324
+ * // result.remaining = '00'
325
+ *
326
+ * // Second chunk arrives
327
+ * buffer = result.remaining + '09line2\n0000'
328
+ * result = pktLineStream(buffer)
329
+ * // result.packets = [
330
+ * // { data: 'line2\n', type: 'data' },
331
+ * // { data: null, type: 'flush' }
332
+ * // ]
333
+ * ```
334
+ *
335
+ * @example Processing ref advertisement
336
+ * ```typescript
337
+ * const refAdvert = '001e# service=git-upload-pack\n0000' +
338
+ * '003fabc123... refs/heads/main\x00side-band-64k\n0000'
339
+ *
340
+ * const { packets } = pktLineStream(refAdvert)
341
+ * for (const pkt of packets) {
342
+ * if (pkt.type === 'flush') {
343
+ * console.log('--- Section end ---')
344
+ * } else if (pkt.data) {
345
+ * console.log('Line:', pkt.data.trim())
346
+ * }
347
+ * }
348
+ * ```
113
349
  */
114
350
  export function pktLineStream(input) {
115
351
  const packets = [];
@@ -1 +1 @@
1
- {"version":3,"file":"pkt-line.js","sourceRoot":"","sources":["../../src/wire/pkt-line.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pkt-line.js","sourceRoot":"","sources":["../../src/wire/pkt-line.ts"],"names":[],"mappings":"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"}