Utils for reading streams asynchronously in paused mode (pull stream).
const { createReadStream } = require('fs');
const { asyncReadable } = require('async-readable');
async function parse_GIF_size (path) {
const { read } = asyncReadable(createReadStream(path));
const [ G, I, F ] = await read(3);
const [ EIGHT, SEVEN_OR_NINE, A ] = await read(3);
const width = (await read(2)).readUInt16LE(0);
const height = (await read(2)).readUInt16LE(0);
return { width, height };
}
parse_GIF_size('./sample.gif').then(console.log, console.error);
assuming to have
const { connect } = require('net');
const socket = connect({ host: 'localhost', port: 8080 });
async function* looping ({ read }) {
while (true) {
const head = await read(2);
const size = head.readUInt16LE(0);
yield read(size);
}
}
hence
const { toAsyncIterable } = require('async-readable');
const unpack = toAsyncIterable(looping);
async function run () {
for await (const frame of unpack(socket)) {
// ...
}
}
or
const { toReadableStream } = require('async-readable');
const unpack = toReadableStream(looping);
function run () {
const stream = unpack(socket);
stream.on('data', frame => {
// ...
});
}
the MIT