@nx.js/http
Version:
HTTP server for nx.js
62 lines • 1.84 kB
JavaScript
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