MCPcopy Create free account
hub / github.com/nodejs/node / consume

Method consume

deps/undici/src/lib/web/websocket/receiver.js:312–353  ·  view source on GitHub ↗

* Take n bytes from the buffered Buffers * @param {number} n * @returns {Buffer}

(n)

Source from the content-addressed store, hash-verified

310 * @returns {Buffer}
311 */
312 consume (n) {
313 if (n > this.#byteOffset) {
314 throw new Error('Called consume() before buffers satiated.')
315 } else if (n === 0) {
316 return emptyBuffer
317 }
318
319 this.#byteOffset -= n
320
321 const first = this.#buffers[0]
322
323 if (first.length > n) {
324 // replace with remaining buffer
325 this.#buffers[0] = first.subarray(n, first.length)
326 return first.subarray(0, n)
327 } else if (first.length === n) {
328 // prefect match
329 return this.#buffers.shift()
330 } else {
331 let offset = 0
332 // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.
333 const buffer = Buffer.allocUnsafeSlow(n)
334 while (offset !== n) {
335 const next = this.#buffers[0]
336 const length = next.length
337
338 if (length + offset === n) {
339 buffer.set(this.#buffers.shift(), offset)
340 break
341 } else if (length + offset > n) {
342 buffer.set(next.subarray(0, n - offset), offset)
343 this.#buffers[0] = next.subarray(n - offset)
344 break
345 } else {
346 buffer.set(this.#buffers.shift(), offset)
347 offset += length
348 }
349 }
350
351 return buffer
352 }
353 }
354
355 writeFragments (fragment) {
356 if (

Callers 1

runMethod · 0.95

Calls 2

shiftMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected