middleware-decorator
v1.1.0
Published
Decorates functions with middleware super-powers
Maintainers
Readme
middleware-decorator
Decorates functions with middleware super-powers.
Table of contents
- Features
- Installation
- Sample usage
- API
- Contributing
Features
- Synchronous, asynchronous and promised middleware support
- Zero dependencies
- UMD Module
- Tiny(5KB)
Installation
npm
npm install middleware-decoratorbower
bower install middleware-decoratorSample usage
Prerequisites
The module has been imported with your favorite loader as middlewareDecorator and the following function is available
function getPrice(){
return 10;
}Decorate with a synchronous middleware runner
getPrice = middlewareDecorator(getPrice);
function halfPriceMiddleware(price){
return price / 2;
}
getPrice.use(halfPriceMiddleware);
console.log(getPrice()); // 5
Decorate with an asynchronous middleware runner
getPrice = middlewareDecorator.async(getPrice);
function halfPriceMiddleware(price, done){
setTimeout(()=>{
done(price / 2);
}, 2000);
}
getPrice.use(halfPriceMiddleware);
getPrice().cb((price)=>{
console.log(price()); // 5
});
Decorate with a promised middleware runner
getPrice = middlewareDecorator.promised(getPrice);
// Can return any value, if it's a promise, next middleware won't get executed till resolved
function halfPriceMiddleware(price){
return hasHalfPriceDiscount().then((hasHalfPriceDiscount)=>{
return hasHalfPriceDiscount ? price / 2 : price;
});
}
getPrice.use(halfPriceMiddleware);
getPrice().then((price)=>{
console.log(price()); // 5
});
API
Module
(anyFunction) : SynchronousMiddlewareRunner
Takes a function as argument and returns a synchronous middleware runner
synchronousMiddlewareRunner = middlewareDecorator(anyFunction);promised(anyFunction) : PromisedMiddlewareRunner
Takes a function as argument and returns a promised middleware runner
promisedMiddlewareRunner = middlewareDecorator(anyFunction);async(anyFunction) : AsynchronousMiddlewareRunner
Takes a function as argument and returns an asynchronous middleware runner
asynchronousMiddlewareRunner = middlewareDecorator(anyFunction);SynchronousMiddlewareRunner
synchronousMiddlewareRunner.use(synchronousMiddleware: Function)
Adds a synchronous middleware
synchronousMiddlewareRunner.use((middlewareOutput) => {
return middlewareOutput;
});synchronousMiddlewareRunner.has(synchronousMiddleware: Function):boolean
Checks if has the given middleware
synchronousMiddlewareRunner.has(aMiddleware); // true || falsesynchronousMiddlewareRunner(...args);
Calls the original function with the given arguments and runs it's output through the registered synchronous middleware
synchronousMiddlewareRunner(arg1, arg2);AsynchronousMiddlewareRunner
asynchronousMiddlewareRunner.use(asynchronousMiddleware: Function)
Adds an asynchronous middleware
asynchronousMiddlewareRunner.use((middlewareOutput, done) => {
done(middlewareOutput);
});asynchronousMiddlewareRunner.has(asynchronousMiddleware: Function):boolean
Checks if has the given middleware
asynchronousMiddlewareRunner.has(aMiddleware); // true || falseasynchronousMiddlewareRunner(...args).cb(callback: Function);
Calls the original function with the given arguments and runs it's output through the registered middleware, when done, calls the provided callback
asynchronousMiddlewareRunner(arg1, arg2).cb((middlewareOutput)=>{
console.log(`Done with ${middlewareOutput}`);
});PromisedMiddlewareRunner
promisedMiddlewareRunner.use(promisedMiddleware: Function)
Adds a promised middleware
promisedMiddlewareRunner.use((middlewareOutput) => {
return new Promise((resolve, reject) => {
resolve(middlewareOutput);
});
});promisedMiddlewareRunner.has(promisedMiddleware: Function):boolean
Checks if has the given middleware
promisedMiddlewareRunner.has(aMiddleware); // true || falsepromisedMiddlewareRunner(...args).then(promiseHandler: Function);
Calls the original function with the given arguments and runs it's output through the registered middleware, when done, calls the provided callback
promisedMiddlewareRunner(arg1, arg2).then((middlewareOutput)=>{
console.log(`Done with ${middlewareOutput}`);
});Contributing
Clone the repository
git clone [email protected]:thefabulousdev/middleware-decorator.gitInstall dependencies
npm installUse npm scripts
npm test- Lint the library and tests, then run the unit testsnpm run lint- Lint the source and unit testsnpm run watch- Continuously run the unit tests as you make changes to the source and test files themselvesnpm run test-browser- Build the library for use with the browser spec runner. Changes to the source will cause the runner to automatically refresh.npm run build- Lint then build the librarynpm run coverage- Generate a coverage report
