
Security News
Risky Biz Podcast: Making Reachability Analysis Work in Real-World Codebases
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
[/ʒyp/]
)
❤️ 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
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.
Jupe is really easy to use and once installed behaves just as you would think. No unnecessary hoops to jump through.
➔ npm
npm install jupe
➔ yarn
yarn add jupe
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.
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.
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]);
// ...
Jupe is a pure ESM package. It can not be required()
'd from CommonJS. If you need help migrating to ESM or implementing Jupe because of ESM, refer to this post.
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.
➔ Skirt icon created by Freepik - Flaticon
© Copyright 2023 - @choozn
FAQs
A lightweight framework to wrap functions with code
The npm package jupe receives a total of 0 weekly downloads. As such, jupe popularity was classified as not popular.
We found that jupe demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
Security News
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.