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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@reincarnatedjesus/f-chain

v1.1.7

Published

TypeScript function chain lib

Readme

Installation:

yarn add @reincarnatedjesus/f-chain npm i @reincarnatedjesus/f-chain

Usage:

Example

import {createChainedFunction, Context} from "@reincarnatedjesus/f-chain"

const rootFn = (myNum: number) => {
    return myNum
}

const chain = {
    add: (ctx: Context, numToAdd: number) => {
        const root = ctx.getRoot<number>() //get the return of rootFn
        ctx.setResult(root + numToAdd) //if nothing is returned from a chain function, then the chain will be returned automatically
    },
    subtract: (ctx: Context, numToSub: number) => {
        //get the return of the last chain function executed (if there wasn't any then this method is the same as ctx.getRoot) 
        const last = ctx.getLast<number>() 
        ctx.setResult(last - numToSub)
    },
    getLast: (ctx: Context) => ctx.getLast<number>(),
    getSub: (ctx: Context) => ctx.get<number>("subtract"), //will return the result of chain.subtract() (if it was called before)
    getAdd: (ctx: Context) => ctx.get<number>("add") //will return the result of chain.add() (if it was called before)
}

const chainedFunction = createChainedFunction(rootFn, chain)
const chainRes = chainedFunction(11)
const subRes = chainRes.subtract(10).getSub() //context param is omitted by the type system, only the arguments after are shown
chainRes.add(10)
chainRes.subtract(5)
console.log(subRes, chainRes.getAdd(), chainRes.getSub()) //1, 21, 16

Creating chained functions

Every chained function has to be created with the createChainedFunction function.

Usage:

createChainedFunction(executor: Function, chain: Record<string, (ctx: Context, ...args: any) => any>)

About the chain

Even though every chain function accepts the context argument, when calling the function the type system will omit that parameter. For example, if you have a chain function like this: (ctx: Context, arg1: string, arg2: number) => ..., when calling it this will appear in your IDE's intellisense: (arg1: string, arg2: number) => ... A function declaration like this: Function declaration Will be shown as: Function call

Context object

Methods:

getLast: Returns the last value in the chain or the return of the root function get: Returns a specific function's return in the chain (ctx.get("myChainFunction")) getRoot: Returns the result of the root function setResult: Sets a function's result, (used to avoid returning a value so the chain is automatically returned again) setValue: Sets a value in the context that can be resolved with context.get(key)