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

p-chores

v0.1.3

Published

String together your potentially promise-returning functions into a chain of responsibility. (The fallback pattern trying all strategies one after the other until one of them solves the task.)

Downloads

10

Readme

p-chores

String together your potentially promise-returning functions into a chain of responsibility. (The fallback pattern trying all strategies one after the other until one of them solves the task.)

I rolled my own because I was too impatient waiting for promisefallback to merge my pull requests.

Usage

see test/usage.mjs

API

This module exports one function:

promiseChainOfResponsibility([strategies[, opt]])

Returns a function. Let's call that one cor.

opt is an optional options object which supports these keys:

  • accept: A function that synchronously decides whether its first argument is a valid solution. Its return values is considered boolean. Defaults to the internal nonEmpty function which accepts anything except null and undefined.
  • unsolved: Which value to use as the (non-)solution when none of the strategies gave an acceptable solution. The value for unsolved won't be checked for its acceptability.

When you run cor, it returns a promise for the solution. The solution is determined by strategies, which should be array-like. Each strategy can be a function, a Promise, or any other value. Strategies are probed one after the other until one succeeds, i.e. yields an acceptable result, determined by these steps (conceptually):

  1. Let pot (potential solution) be the strategy itself.
    • If there is no strategy left, solve with opt.unsolved.
  2. If your now current pot is a function, invoke it with the same context and arguments as cor was invoked, and use its result as your new pot.
  3. If your now current pot is a then-able, defer until it's resolved, then use the resolution value as your new pot.
  4. Call opt.accept with your current pot as the first argument.
    • In case of a true-y result, solve with pot.
    • Otherwise, try the next strategy.

Known issues

  • Needs more/better tests and docs.

 

License

ISC