Files
scrypted/common/src/read-length.ts
Koushik Dutta a46b2811ed initial commit
2021-08-24 21:22:41 -07:00

38 lines
882 B
TypeScript

import { Readable } from "stream";
export async function readLength(readable: Readable, length: number): Promise<Buffer> {
if (!length) {
return Buffer.alloc(0);
}
{
const ret = readable.read(length);
if (ret) {
return ret;
}
}
return new Promise((resolve, reject) => {
const r = () => {
const ret = readable.read(length);
if (ret) {
cleanup();
resolve(ret);
}
};
const e = () => {
cleanup();
reject(new Error(`stream ended during read for minimum ${length} bytes`))
};
const cleanup = () => {
readable.removeListener('readable', r);
readable.removeListener('end', e);
}
readable.on('readable', r);
readable.on('end', e);
});
}