async-readable

Async read for NodeJS.ReadableStream

Usage no npm install needed!

<script type="module">
  import asyncReadable from 'https://cdn.skypack.dev/async-readable';
</script>

README

async-readable

npm version actions codecov

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* process ({ 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(process);

async function run () {

    for await (const frame of unpack(socket)) {
        // ...
    }

}

or

const { toReadableStream } = require('async-readable');

const unpack = toReadableStream(process);

function run () {

    const stream = unpack(socket);

    stream.on('data', frame => {
        // ...
    });

}

License

the MIT