UNPKG

@nx.js/http

Version:
62 lines 1.84 kB
export const encoder = new TextEncoder(); export const decoder = new TextDecoder(); export function indexOfEol(arr, offset = 0) { for (let i = offset; i < arr.length - 1; i++) { if (arr[i] === 13 && arr[i + 1] === 10) { return i; } } return -1; } export function concat(a, b) { const c = new Uint8Array(a.length + b.length); c.set(a, 0); c.set(b, a.length); return c; } export async function readUntilEol(reader, unshiftable) { let buffered = new Uint8Array(0); while (true) { unshiftable.resume(); const { done, value } = await reader.read(); unshiftable.pause(); if (done) break; buffered = concat(buffered, value); const i = indexOfEol(buffered); if (i !== -1) { if (buffered.length > i + 2) { unshiftable.unshift(buffered.slice(i + 2)); buffered = buffered.slice(0, i); } break; } } return decoder.decode(buffered); } export async function flushBytes(controller, numBytes, reader, unshiftable) { let numFlushed = 0; while (true) { unshiftable.resume(); const { done, value } = await reader.read(); unshiftable.pause(); if (done) break; const numRemaining = numBytes - numFlushed; if (value.length > numRemaining) { unshiftable.unshift(value.slice(numRemaining)); const chunk = value.slice(0, numRemaining); numFlushed += chunk.length; controller.enqueue(chunk); break; } else { numFlushed += value.length; controller.enqueue(value); } } if (numFlushed !== numBytes) { // TODO: throw error? } } //# sourceMappingURL=util.js.map