
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
method-inject
Advanced tools
A simple system for injecting and transforming methods
yarn add method-inject
npm install --save method-inject
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
FAQs
A simple system for injecting and transforming methods
We found that method-inject 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
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.