npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

jupe

v1.0.0

Published

A lightweight framework to wrap functions with code

Downloads

1

Readme

❤️ 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 required()'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