New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

method-inject

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

method-inject

A simple system for injecting and transforming methods

latest
Source
npmnpm
Version
0.0.1
Version published
Maintainers
1
Created
Source

method-inject

A simple system for injecting and transforming methods

Installation

yarn add method-inject
npm install --save method-inject

Usage

To use method-inject, it's as simple as calling it on a method:

const inject = require('method-inject');

// Transform the first argument and prepend '[INFO] ' to it
const log = inject(console.log).transform(0, text => '[INFO] ' + text);

log('Hello, there!');
// => [INFO] Hello, there!

There are several methods, the rest of which are shown below:

const inject = require('method-inject');
const someObject = {
    buggedMethod(someArg) {
        console.log(someArg + 1);
    }
};

// Hmm, we've been getting `NaN` in the console from someObject.buggedMethod, let's check it out:
someObject.buggedMethod = inject(someObject.buggedMethod, someObject).before(args => console.log('buggedMethod called with the following args:', args));
// Note that we passed someObject as the second parameter to inject, indicating that the method should be bound to that object.

// Problem code:
someObject.buggedMethod('ERRORS');
// => buggedMethod called with the following args: [ 'ERRORS' ]
// => NaN
const inject = require('method-inject');

const db = {
    internal: {
        life: 42
    },
    get(key, default) {
        return this.internal[key] || default;
    }
};

if (process.env.DB_VERBOSE) {
    db.get = inject(db.get, db).after((returnValue, args) => {
        console.log(`DB::GET(key=${args[0]},default=${args[1] || 'none'}) -> ${returnValue}`);
    });
}

// Assuming DB_VERBOSE=true:
console.log(`The meaning of life is ${db.get('life', -1)}`);
// => DB::GET(key=life,default=-1) -> 42
// => The meaning of life is 42
const inject = require('method-inject');

const multiply = (a, b) => {
    return a * b;
};

const multiplyAndSquare = inject(multiply).transformOutput(output => output * output);

// (2 * 3) * (2 * 3) = 6 * 6 = 36
console.log(multiplyAndSquare(2, 3));
// => 36

Methods can also be chained indefinitely:

const inject = require('method-inject');

const multiply = (a, b) => a * b;
const addOne = x => x + 1;
const square = x => x * x;

const verboseComplexMath = inject(multiply)
    .after(output => console.log(`COMPLEX_CALC -> ${output}`))
    .transformOutput(addOne)
    .transformOutput(square);

console.log(verboseComplexMath(4, 5));
// => COMPLEX_CALC -> 441
// => 441

Join Me

Discord Badge

FAQs

Package last updated on 18 Jan 2018

Did you know?

Socket

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.

Install

Related posts