npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

fibby

v0.1.2

Published

Use fibers with functions that take callbacks.

Downloads

5

Readme

fibby

A tiny ES6 (harmony) library for node 0.11.2 and up that helps you use fibers with node style callbacks, similar to suspend

usage examples

Spawn a fiber task. From within your task, call your async functions with yield and pass them a resume function instead of a callback:

fibby.run(function* (fib) {
    console.log("Hello");
    fib.yield(setInterval(fib.resume(), 1000))
    console.log("World");
});

Handle errors with try/catch, or as return results via resume.nothrow

fibby.run(function* (fib) {
    // Throwing resume
    try { fib.yield(fs.readFile("test.js", fib.resume())); } 
    catch (e) { /* handle the error */ }
    // Non-throwing resume always results with an array
    var err_res = fib.yield(fs.readFile("test.js", fib.resume.nothrow()));
    if (err_res[0]) { /* handle error */ }
});

Dont like nested parens? Want to keep things brief? Use resume.t instead of resume() and resume.nt instead of resume.nothrow()

Want to catch all uncaught exceptions? You can pass a callback argument to fibby.run:

fibby.run(function* (fib) {
    var data = fib.yield(fs.readFile("test.js", fib.resume.t));
}, function(err) {
    // thrown error propagates here automagically 
    // because it was not caught.
});

You can also use fibby instead to create a function which can accept multiple arguments and a callback. The arguments will be passed to your fiber right after the first resume argument

var getLine = fibby.fn(function* (fib, file, number) {
    var data = fib.yield(fs.readFile(file, fib.resume.t));
    return data.toString().split('\n')[number];
});

getLine('test.js', 2, function(err, lineContent) {
    // thrown error propagates here automagically 
    // because it was not caught.
    // If the file actually exists, lineContent
    // will contain the second line
});

note: make sure that you pass the callback last.

Notice how if you return a value at the end of your fiber, it will be passed as a result to the callback. If you return undefined, the callback will not be called.

Your async functions call the callback with more than 2 arguments? Not a problem - the yield call from within your task will return an array instead.

function returnsmore(callback) {
    callback(null, 'arg1', 'arg2');
}

fibby.run(function* (fib) {
    var res = fib.yield(returnsmore(fib.resume.t));
    var arg1 = res[0];
    var arg2 = res[1];
    var nothrowres = fib.yield(returnsmore(fib.resume.nt);
    var err = res[0];
    var arg1 = res[1];
    var arg2 = res[2];
});

Look in test/index.js for more examples and tests.

thanks

jmar777 for his awesome suspend library which served as the base for fibby

license

MIT