Skip to content

kethan/umid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Universal Middleware

Fast, lightweight middleware framework.

Features

  • Lightweight - Badge size

  • Browser and Node - Use in browser and node

  • Async Await and Promise support - Support both async await and promise functions

  • No Dependency - No Bloating. No external dependencies

  • Express.js style middlware - Express.js like design

Version Badge size Badge size

yarn: yarn add umid

npm: npm i umid

cdn: https://unpkg.com/umid

module: https://unpkg.com/umid?module

Installation

To use this utility, simply import it into your project:

import { run } from "umid";

Usage

The run function accepts a mode and returns a function that accepts an array of functions to be executed asynchronously. The execution behavior depends on the mode specified.

Parameters

  • mode (optional): Specifies the execution mode. Default is 0.
  • ...fns: An array of functions to be executed.
  • ...args: Parameters to be passed to the functions.

Modes

  1. Mode 0: (Default) Without next
  2. Mode 1: With next

Examples

Mode 0: Without next

In this mode, the functions are called sequentially without a next callback.

const runWithoutNext = run(0);

const fn1 = async (param1, param2) => {
	console.log("fn1", param1, param2);
};

const fn2 = async (param1, param2) => {
	console.log("fn2", param1, param2);
	return "result2";
};

runWithoutNext(fn1, fn2)("hello", "world")
	.then((result) => console.log("Final result:", result))
	.catch((err) => console.error("Error:", err));

Mode 1: With next

In this mode, the functions are called sequentially with a next callback, which must be called to proceed to the next function.

const runWithNext = run(1);

const fn1 = async (param1, param2, next) => {
	console.log("fn1", param1, param2);
	next();
};

const fn2 = async (param1, param2, next) => {
	console.log("fn2", param1, param2);
	next();
	// next('not authorized'); // not authorized error
};

runWithNext(fn1, fn2)("hello", "world")
	.then(() => console.log("All functions executed"))
	.catch((err) => console.error("Error:", err));

Creating a express middleware utility

const expressMiddleware = run(1);

const fn1 = async (req) => {
	console.log('fn1');
};

const fn2 = async (req) => {
	console.log('fn2');
};

const expressMiddleware = (req, res, next) => {
	console.log('ex middleware', req, res, next);
	setTimeout(() => {
		next();
	}, 1000)
}
const fn3 = async (req) => "over";
const req = {};
const res = {};

run()(fn1, expressMiddleware(expressMiddleware), fn2, fn3)(req, res).then(console.log).catch(console.log);

API

run(mode) => (...fns) => async (...args) => Promise

Parameters:

  • mode: Number (optional) - Execution mode (0, 1). Default is 0.
  • ...fns: Array - Functions to be executed.
  • ...args: Array - Parameters to be passed to the functions.

Returns:

  • Promise: Resolves when all functions are executed or when a function returns a result (in mode 0).

License

This project is licensed under the MIT License. See the LICENSE file for details.

About

Fast, lightweight middleware framework.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published