Skip to content

imcotton/async-readable

Repository files navigation

async-readable

npm version actions codecov

Utils for reading streams asynchronously in paused mode (pull stream).

How to Use

Basic

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);

Advanced

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 => {
        // ...
    });

}

License

the MIT