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

bluebeard

v1.0.0

Published

Promise based action and filter hooks for NodeJS.

Downloads

4

Readme

#bluebeard

Bluebeard is a simple action and filter hooks module for NodeJS. It should work with any Promise library however I like using Bluebird so I've paired it with that. It borrows heavily from the Wordpress implementation of action and filter hooks in that Actions are meant to do something whereas Filters are meant to change values.

Installation

npm install --save bluebeard

Use Case

If you are building out a large project that uses promises and you want to give users the ability to inject functionality throughout the codebase without having them actually touch the core then bluebeard is maybe for you.

Using an Action Hook you can wrap any existing promise with a "WithHooks" version to inject functionality before and after the promise runs. This is awesome if you want to be able to instrument how long the promise took to resolve, change the flow of the application, run some side processes or whatever. You can technically do any kind of promise based asynchronous logic here.

Using a Filter Hook you can alter the value of a variable anywhere in the codebase. You could technically do any kind of synchronous logic here too but it's primarily for altering a variable value.

Initialization

You can initialize bluebeard with optional hook names and filter names objects. They should contain constants for the string representations of the action and filter hooks. This is really useful if you're thinking that you might change the name of some hooks over time and want to be able to map old labels to new functionality.

Usage

There are a few examples in the examples folder but here is one of them with a basic usage. It's unlikely that you'd use it quite like this as the idea is to be injecting the functionality into a different project but it at least shows a working example.

'use strict';

var Promise = require('bluebird');
var bluebeard = require('../index')();

// lets start with a string
var str = 'I eat turkey';

// we'll set up some actions that can be called
bluebeard.addAction('beforeTurkey', function(str) {
	return new Promise(function(resolve, reject) {
		// we'll add a step here
		console.log('I pour gravy on my turkey');

		// then we'll modify the inputs
		var better_str = str.replace('turkey', 'all the turkey');

		resolve(better_str);
	});
});

bluebeard.addAction('afterTurkey', function(str) {
	return new Promise(function(resolve, reject) {
		// we'll add another step here
		console.log('I eat a whole apple pie');

		resolve(str);
	});
});

// here we'll set up our core promise that we want to run
var eatTurkey = function(str) {
	return new Promise(function(resolve, reject) {
		console.log(str);
		resolve(str);
	});
}

// here we'll add some actions to make things yummier...
var eatTurkeyWithHooks = function(str) {
	return bluebeard.doAction('beforeTurkey', str)
        .then(function(str) {
            return eatTurkey(str);
        })
        .then(function(str) {
            return bluebeard.doAction('afterTurkey', str);
        });
}

// why not eat some turkey....
eatTurkey(str);

console.log('And now with hooks....');

// but why not eat turkey with hooks.... so much yummier...
eatTurkeyWithHooks(str);