New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

pudge

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pudge - npm Package Compare versions

Comparing version 1.2.1 to 1.3.0

store.js

149

index.js
"use strict";
var Promise = require('bluebird');
var hooks = {};
var beforeHooks = {};
var afterHooks = {};
var store = require('./store');
var extend = require('extend');
var NORMAL = 1;
var BEFORE = 2;
var AFTER = 3;
function register(hookName, fn) {
if (Array.isArray(hookName)) {
hookName.forEach(function(hook) {
register(hook, fn);
function addHook(type, name, key, fn) {
if (Array.isArray(name)) {
name.forEach(function(n) {
addHook(type, n, key, fn);
});
return;
}
if (!hooks[hookName]) {
hooks[hookName] = [];
if (typeof key === "function") {
fn = key;
key = undefined;
}
hooks[hookName].push(fn);
store.add(type, name, {
fn: fn,
key: key
});
}
module.exports.register = register;
exports.register = addHook.bind(this, NORMAL);
function runHook(fns, args) {
exports.before = addHook.bind(this, BEFORE);
exports.after = addHook.bind(this, AFTER);
function runHook(hooks, args) {
var current = Promise.resolve();
if (!fns) {
fns = [];
if (!hooks) {
hooks = [];
}
return Promise.all(fns.map(function(fn){
var results = {};
return Promise.all(hooks.map(function(hook){
var fn = hook.fn;
current = current.then(function() {
return fn.apply(this, args);
});
return current;
}));
return current.then(function(result) {
if (hook.key) {
results[hook.key] = result;
}
return result;
});
})).then(function() {
return results;
});
}
function runHookParallel(fns, args) {
if (!fns) {
fns = [];
function runHookParallel(hooks, args) {
if (!hooks) {
hooks = [];
}
return Promise.all(fns.map(function(fn){
return Promise.all(hooks.map(function(hook){
var fn = hook.fn;
return fn.apply(this, args);
}));
})).then(function(results) {
var props = {};
results.forEach(function(result, index) {
var key = hooks[index].key;
if (key) {
props[key] = result;
}
});
return props;
});
}
module.exports.run = function(hook) {
exports.run = function(name) {
var result = {};
var args = Array.prototype.slice.call(arguments);

@@ -52,11 +81,16 @@

return runHook(beforeHooks[hook], args).then(function() {
return runHook(hooks[hook], args);
}).then(function() {
return runHook(afterHooks[hook], args);
return runHook(store.get(BEFORE, name), args).then(function(beforeResult) {
result = extend(result, beforeResult);
return runHook(store.get(NORMAL, name), args);
}).then(function(normalResult) {
result = extend(result, normalResult);
return runHook(store.get(AFTER, name), args);
}).then(function(afterResult) {
result = extend(result, afterResult);
return result;
});
};
module.exports.parallel = function(hook) {
exports.parallel = function(name) {
var result = {};
var args = Array.prototype.slice.call(arguments);

@@ -67,6 +101,11 @@

return runHookParallel(beforeHooks[hook], args).then(function() {
return runHookParallel(hooks[hook], args);
}).then(function() {
return runHookParallel(afterHooks[hook], args);
return runHookParallel(store.get(BEFORE, name), args).then(function(beforeResult) {
result = extend(result, beforeResult);
return runHookParallel(store.get(NORMAL, name), args);
}).then(function(normalResult) {
result = extend(result, normalResult);
return runHookParallel(store.get(AFTER, name), args);
}).then(function(afterResult) {
result = extend(result, afterResult);
return result;
});

@@ -76,43 +115,5 @@ };

module.exports.___clearHooks = function(hookName) {
if (typeof hookName !== "undefined") {
hooks[hookName] = [];
beforeHooks[hookName] = [];
afterHooks[hookName] = [];
return true;
}
hooks = {};
beforeHooks = {};
afterHooks = {};
exports.___clearHooks = function(name) {
store.clear(name);
};
function before(hookName, fn) {
if (Array.isArray(hookName)) {
hookName.forEach(function(hook) {
before(hook, fn);
});
return;
}
if (!beforeHooks[hookName]) {
beforeHooks[hookName] = [];
}
beforeHooks[hookName].push(fn);
}
module.exports.before = before;
function after(hookName, fn) {
if (Array.isArray(hookName)) {
hookName.forEach(function(hook) {
after(hook, fn);
});
return;
}
if (!afterHooks[hookName]) {
afterHooks[hookName] = [];
}
afterHooks[hookName].push(fn);
}
module.exports.after = after;
{
"name": "pudge",
"version": "1.2.1",
"version": "1.3.0",
"description": "simple node.js hook utility",

@@ -25,3 +25,4 @@ "main": "index.js",

"dependencies": {
"bluebird": "2.10.2"
"bluebird": "2.10.2",
"extend": "^3.0.0"
},

@@ -28,0 +29,0 @@ "devDependencies": {

@@ -7,2 +7,3 @@ "use strict";

var assert = require('assert');
var store = require('./store');

@@ -78,2 +79,24 @@ describe('Pudge', function() {

it('should map the results', function() {
it('should map the results', function(done) {
pudge.register('ROOT', 'head', function() {
return Promise.delay(10).then(function() {
return "I_AM_HEAD";
});
});
pudge.register('ROOT', 'leg', function() {
return Promise.delay(10).then(function() {
return "I_AM_LEG";
});
});
pudge.run('ROOT').then(function(results) {
assert(results.leg === "I_AM_LEG");
assert(results.head === "I_AM_HEAD");
done();
}).catch(done);
});
});
describe('parallel', function() {

@@ -104,3 +127,35 @@ it('should run tasks in parallel', function(done) {

});
it('should map the results', function(done) {
pudge.register('ROOT', 'head', function() {
return Promise.delay(10).then(function() {
return "I_AM_HEAD";
});
});
pudge.register('ROOT', 'leg', function() {
return Promise.delay(10).then(function() {
return "I_AM_LEG";
});
});
pudge.parallel('ROOT').then(function(results) {
assert(results.leg === "I_AM_LEG");
assert(results.head === "I_AM_HEAD");
done();
}).catch(done);
});
});
describe('store', function() {
beforeEach(function() {
store.clear();
});
it('should add and get from store', function() {
store.add('normal', 'FRESH_MEAT', 'something');
var result = store.get('normal', 'FRESH_MEAT');
assert(result[0] === 'something');
});
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc