Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
demethodize
Advanced tools
npm install demethodize
Demethodizing allows you to use methods as generics. You can just use call and apply to do this, like so:
Array.prototype.map.call('abcdef', function (letter) {
return letter.toUpperCase();
}); // ['A', 'B', 'C', 'D', 'E', 'F']
This is kind of verbose if you're using it a lot. Array.prototype.map
can be simply substituted with [].map
. This gets even easier still with demethodize, which produces reusable functions.
var map = demethodize([].map);
map('abcdef', function (letter) {
return letter.toUpperCase();
}); // ['A', 'B', 'C', 'D', 'E', 'F']
map('123456', function (n) {
return Number(n) + 1;
}); // [2, 3, 4, 5, 6, 7]
There's an added method, demethodize.functional
. This takes all the arguments that would be supplied to the method, then returns another function. Pass the context into that function. See below for an example. This is great for partial application and functional programming in general.
var slice = demethodize.functional([].slice);
// pass args here
var dropFirstAndLastTwo = slice(2, -2);
// then pass the context (an array) here
dropFirstAndLastTwo('abcdefgh'); // ['c', 'd', 'e', 'f']
dropFirstAndLastTwo('ijklm'); // ['k']
I've benchmarked a number of equivalent implementations for speed, and am using an implementation with .apply()
as it is fastest.
Example benchmark output (see bench.js for implementations)
Hang tight, running benchmarks...
........
apply 2 is fastest.
apply 2 x 1,373,646 ops/sec ±1.48% (91 runs sampled)
apply 1 is 3.98% slower than fastest.
apply 1 x 1,318,984 ops/sec ±2.58% (89 runs sampled)
call spread is 16.82% slower than fastest.
call spread x 1,142,603 ops/sec ±5.11% (75 runs sampled)
call bind 2 is 18.85% slower than fastest.
call bind 2 x 1,114,747 ops/sec ±1.47% (89 runs sampled)
call bind 1 is 20.31% slower than fastest.
call bind 1 x 1,094,665 ops/sec ±1.92% (91 runs sampled)
double bind is 21.23% slower than fastest.
double bind x 1,082,039 ops/sec ±2.07% (89 runs sampled)
call bind 3 is 23.46% slower than fastest.
call bind 3 x 1,051,395 ops/sec ±1.76% (89 runs sampled)
apply 3 is 54.54% slower than fastest.
apply 3 x 624,405 ops/sec ±4.53% (84 runs sampled)
FAQs
Decontextualize your methods
The npm package demethodize receives a total of 3 weekly downloads. As such, demethodize popularity was classified as not popular.
We found that demethodize 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.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.