Skip to content
/ jupe Public

🟒 A lightweight framework to wrap functions with code

Notifications You must be signed in to change notification settings

choozn/jupe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Jupe.js

(French word for "skirt", pronounced [/Κ’yp/])

Vite logo


❀️ A lightweight framework to wrap functions with code

πŸ’š Clean code for reoccurring code-wraps

πŸ’™ Extensible plugin system with full type-safety

πŸš€ Ready to use and provided with types



When and Why?

Need to scrape an API or move files from A to B? Don't clutter your production code with secondary tasks! Instead of repeatedly calling the same stack of functions before and after the execution of the main tasks, wrap them with Jupe and let Jupe do the repeated work for you. All with an API, that feels like butter to use.


How to use Jupe?

Jupe is really easy to use and once installed behaves just as you would think. No unnecessary hoops to jump through.

πŸ“₯ Installation

βž” npm

npm install jupe

βž” yarn

yarn add jupe

🌱 Initialization

First you need to import the Jupe constructor from the package:

import Jupe from "jupe";

Then you can initialize Jupe by providing the construction function with a plugin array. In this example the array plugins represents an array of Jupe-Plugins with the Jupe-Type Plugin.

const { $ } = Jupe([...plugins]);

The return value of the construction function is an object with one item at the key $. You can directly destruct the object (as shown in the example) for easier usage.

$ is an async function that can now be used to wrap any function you want to apply the plugins to.


🎁 Wrapping

Lets imagine a function someTask():

async function someTask(someArgument: string) {
  // Do something
}

To wrap the function with the plugins, which were previously specified in the plugin array, you have to use the wrapper function $.

const result = await $(someTask, argsForPlugins)(someArgument);

The argument argsForPlugins in the example is of the datatype object and is dependent on the arguments required by the plugins. Therefore there can be cases where it is not necessary to provide the argument. Intelligent code completion is your best friend here as Jupe is completely type-safe.


πŸ“¦ Plugins

You can declare plugins as shown in the example below.

πŸ“examplePlugin.ts

import { Plugin } from "jupe";

type PluginParams = {
  exampleParameter: string;
};

const main: Plugin<PluginParams> = async (task, params) => {
  // Do something before execution
  const result = await task();
  // Do something after execution
  return result;
};

export default main;

And then use them as shown below.

πŸ“exampleUsage.ts

import Jupe from "jupe";
import examplePlugin from "./examplePlugin";
const { $ } = Jupe([examplePlugin]);

// ...

ESM

Jupe is a pure ESM package. It can not be require()'d from CommonJS. If you need help migrating to ESM or implementing Jupe because of ESM, refer to this post.


About the name

When using Jupe, you are basically dressing functions: You are throwing over dress after dress, without changing the functions character at the core. Thats why it is called Jupe, or "skirt" in english.



Licenses

βž” Skirt icon created by Freepik - Flaticon



πŸš€ https://github.com/choozn

Β© Copyright 2023 - @choozn

About

🟒 A lightweight framework to wrap functions with code

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published