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 🙏

© 2026 – Pkg Stats / Ryan Hefner

reflekt

v0.4.1

Published

Angular style function call reflection hotness.

Readme

reflekt

view on npm view on npm Dependency Status Build Status Coverage Status Code Climate

Overview

reflekt can call functions and construct new object, injecting any arguments required. This is achieved by converting the function to a string and using regex to parse out the arguments. Each argument is then resolved using a defined resolver, which can either be an object containing key/value pairs of names and values to pass, or a function which takes the name of the argument as a parameter and returns the argument to pass.

Installation

Install using NPM:

npm install reflekt --save

Examples / Quickstart

This covers the basic usage of reflekt, for more detailed information consult the API section below.

NOTE: for brevity's sake, all examples should be assumed to begin with:

var reflekt = require('reflekt');

function myFunc(foo, bar) {
    console.log('foo', foo);
    console.log('bar', bar);
}

function myOtherFunc(foo, bar) {
    console.log('foo', foo);
    console.log('bar', bar);
}

function MyClass(foo, bar) {
    console.log('foo', foo);
    console.log('bar', bar);
}

MyClass.prototype = {
    something: function(name) {
        console.log('name', name || 'stan');
    }
};

function MyOtherClass(foo, bar) {
    console.log('foo', foo);
    console.log('bar', bar);
}

MyOtherClass.prototype = {
    something: function(name) {
        console.log('name', name || 'smith');
    }
};

Calling a Function

code:

reflekt.call(myFunc, { foo: 'duck', bar: 'sauce' });

output:

foo duck
bar sauce

Calling a Function Using the Resolver

code:

reflekt.call('myFunc', { myFunc: myFunc, foo: 'duck', bar: 'sauce' });

output:

foo duck
bar sauce

Calling a Function and Overriding Argument Names

code:

reflekt.call([ 'bar', 'bar', myFunc ], { bar: 'ducks' });

output:

foo ducks
bar ducks

Calling Multiple Functions Using the Same Resolver

code:

var myCaller = reflekt.caller({ foo: 'duck', bar: 'sauce' });
myCaller(myFunc);
myCaller(myOtherFunc);

output:

foo duck
bar sauce
foo duck
bar sauce

Constructing an Object

code:

var myInstance = reflekt.construct(MyClass, { foo: 'duck', bar: 'sauce' });
console.log(myInstance instanceof MyClass);
myInstance.something();

output:

foo duck
bar sauce
true
name stan

Constructing an Object Using the Resolver

code:

var myInstance = reflekt.construct('MyClass', { MyClass: MyClass, foo: 'duck', bar: 'sauce' });

output:

foo duck
bar sauce

Constructing Multiple Objects with the Same Resolver

code:

var myConstructor = reflekt.constructor({ foo: 'duck', bar: 'sauce' });
var myInstance = myConstructor(MyClass);
var myOtherInstance = myConstructor(MyOtherClass);

output:

foo duck
bar sauce
foo duck
bar sauce

Constructing the Same Object Multiple Times Using the Resolver

code:

var myConstructor = reflekt.constructor({ MyClass: MyClass, foo: 'duck', bar: 'sauce' });
var myInstance = myConstructor('MyClass');
var myOtherInstance = myConstructor('MyClass');

output:

foo duck
bar sauce
foo duck
bar sauce

API Reference

reflekt

reflekt.ObjectResolver() ⇒ function

creates a new ObjectResolver

Kind: static method of reflekt
Returns: function - the created ObjectResolver. see ObjectResolver~resolve.
Params: Object [items] - the items to initially store when creating the ObjectResolver

ObjectResolver~resolve(name) ⇒ Object | undefined

attempts to resolve an item with the given name.

 NOTE: the ObjectResolver is callable directly, which is an alias to this function.

Kind: inner method of ObjectResolver
Returns: Object | undefined - the resolved item, or undefined if it was not found

| Param | Type | Description | | --- | --- | --- | | name | String | the name of the item to add |

ObjectResolver~add(name, [value], [lifetime])

adds an item using the given name, value and lifetime

Kind: inner method of ObjectResolver

| Param | Type | Description | | --- | --- | --- | | name | String | Object | the name of the item to add. if an object is passed all items will be added | | [value] | Object | the value of the item to store | | [lifetime] | Integer | how many times the item can be resolved before being removed automatically |

ObjectResolver~get(name) ⇒ Object | undefined

attempts to resolve an item with the given name.

 NOTE: the ObjectResolver is callable directly, which is an alias to this function.

Kind: inner method of ObjectResolver
Returns: Object | undefined - the resolved item, or undefined if it was not found

| Param | Type | Description | | --- | --- | --- | | name | String | the name of the item to add |

ObjectResolver~has(name) ⇒ Boolean

checks if the item exists in the resolver

Kind: inner method of ObjectResolver
Returns: Boolean - true if the ObjectResolver has the item, false otherwise

| Param | Type | Description | | --- | --- | --- | | name | String | the name of the item to check |

ObjectResolver~remove(name)

removes an item with the given name from the ObjectResolver

Kind: inner method of ObjectResolver

| Param | Type | Description | | --- | --- | --- | | name | String | Array | the name(s) of the item to remove |

ObjectResolver~set(name, [value], [lifetime])

adds an item using the given name, value and lifetime

Kind: inner method of ObjectResolver

| Param | Type | Description | | --- | --- | --- | | name | String | Object | the name of the item to add. if an object is passed all items will be added | | [value] | Object | the value of the item to store | | [lifetime] | Integer | how many times the item can be resolved before being removed automatically |

reflekt.any(items, callback) ⇒ Boolean

calls the callback on each item in the array, stopping when the first callback returns true

Kind: static method of reflekt
Returns: Boolean - true if any calls return true, or false otherwise

| Param | Type | Description | | --- | --- | --- | | items | Array | the items to call the callback with | | callback | function | the function to call with each item |

reflekt.call(fn, [resolver], [context]) ⇒ Object

calls the function using the given resolver and context

Kind: static method of reflekt
Returns: Object - the result of the function call

| Param | Type | Description | | --- | --- | --- | | fn | function | String | Array | the function to call | | [resolver] | function | Object | the resolver to use to resolve the function's arguments | | [context] | Object | the context to call the function in |

reflekt.caller([resolver]) ⇒ function

creates a function that takes a function/string and a context, calling the function in the given context using the given resolver

Kind: static method of reflekt
Returns: function - the function that calls other functions

| Param | Type | Description | | --- | --- | --- | | [resolver] | function | Object | Array | the resolver to use to resolve the function's arguments |

reflekt.construct(klass, [resolver], [context]) ⇒ Object

constructs a new copy of the given klass using the given resolver and context

Kind: static method of reflekt
Returns: Object - the result of the call to the class constructor

| Param | Type | Description | | --- | --- | --- | | klass | function | String | the object to construct a new copy of | | [resolver] | function | Object | Array | the resolver to use to resolve the class constructor's arguments | | [context] | Object | the context to call the class constructor in |

reflekt.constructor([resolver]) ⇒ function

creates a function that takes a class and context, creating a new copy of the class in the given context using the given resolver

Kind: static method of reflekt
Returns: function - the function that constructs other objects

| Param | Type | Description | | --- | --- | --- | | [resolver] | function | Object | Array | the resolver to use to resolve the class constructor's arguments |

reflekt.decorate(fn, [resolver], [context]) ⇒ Object

creates a function that calls the given function using the given resolver in the given context

Kind: static method of reflekt
Returns: Object - a function that takes no arguments and returns the result of calling the given function

| Param | Type | Description | | --- | --- | --- | | fn | function | String | the function to resolve the arguments for | | [resolver] | function | Object | Array | the resolver to use to resolve the function's arguments | | [context] | Object | the context to call the function in |

reflekt.every(items, callback) ⇒ Boolean

calls the callback on each item in the array

Kind: static method of reflekt
Returns: Boolean - true if all calls return true, or false otherwise

| Param | Type | Description | | --- | --- | --- | | items | Array | the items to call the callback with | | callback | function | the function to call with each item |

reflekt.has(fn, args, [allOrNone]) ⇒ Boolean

checks if the given function has the given argument(s)

Kind: static method of reflekt
Returns: Boolean - true if the argument(s) are found in the function signature, false otherwise

| Param | Type | Description | | --- | --- | --- | | fn | function | the function to check | | args | String | Array | the args to check | | [allOrNone] | Boolean | if true, all args given must be present. if false, any of the args may be present. the default is true. |

reflekt.injections(fn, [resolver]) ⇒ Array

resolves the function's arguments using the given resolver

Kind: static method of reflekt
Returns: Array - the functions resolved arguments, in order of appearance in the function's signature

| Param | Type | Description | | --- | --- | --- | | fn | function | String | Array | the function to resolve the arguments for | | [resolver] | function | Object | Array | the resolver(s) to use to resolve the function's arguments |

reflekt.isKind(item, kind) ⇒ Boolean

checks if the given item is of the given type by calling Object.toString on the item and doing an comparison between the result and the given kind

Kind: static method of reflekt
Returns: Boolean - true if the item is of the same type, false otherwise

| Param | Type | Description | | --- | --- | --- | | item | Object | the item to check the type of | | kind | String | the type expected, in the form of '[object Object]' |

reflekt.isArray(item) ⇒ Boolean

checks if the given item is an array

Kind: static method of reflekt
Returns: Boolean - true if the item is an array, false otherwise

| Param | Type | Description | | --- | --- | --- | | item | Object | the item to check the type of |

reflekt.isBoolean(item) ⇒ Boolean

checks if the given item is a boolean

Kind: static method of reflekt
Returns: Boolean - true if the item is a boolean, false otherwise

| Param | Type | Description | | --- | --- | --- | | item | Object | the item to check the type of |

reflekt.isObject(item) ⇒ Boolean

checks if the given item is an object

Kind: static method of reflekt
Returns: Boolean - true if the item is an object, false otherwise

| Param | Type | Description | | --- | --- | --- | | item | Object | the item to check the type of |

reflekt.isString(item) ⇒ Boolean

checks if the given item is a string

Kind: static method of reflekt
Returns: Boolean - true if the item is a string, false otherwise

| Param | Type | Description | | --- | --- | --- | | item | Object | the item to check the type of |

reflekt.parse(fn) ⇒ Array

parses the function's arguments, returning an array of the arguments found

Kind: static method of reflekt
Returns: Array - the functions arguments, in order of appearance in the function's signature

| Param | Type | Description | | --- | --- | --- | | fn | function | String | the function to parse the arguments for |

Analytics