Research
Security News
Threat Actor Exposes Playbook for Exploiting npm to Build Blockchain-Powered Botnets
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Yet another tiny async control flow library, implements parallelLimit, with the ability to share the concurrency-limited queue.
miniq is yet another tiny async control flow library. It implements parallelLimit, with the ability to share the concurrency-limited queue.
parallelLimit
series
= parallel(1, tasks, onDone)
parallel
without a concurrency limit = parallel(Infinity, tasks, onDone)
parallel
with a concurrency = default behaviorchain
vs. map
). I'd rather just use JavaScript's scope rules to handle all those variants rather than have specialized functions for each thing.miniq has one advanced feature, which is the ability to share the concurrency-limited queue among multiple different tasks. In other words, many different sets of operations can share the same queue and run limit. Each set of tasks can have it's own onDone
function, but they share the same concurrency limit.
For example, if you are writing something that does a recursive directory traversal and does various (file system) operations, you can push all the operations into the same queue. This will allow you to limit (file system) concurrency across multiple operations.
npm install --save miniq
parallel(limit, tasks, [onDone])
:
limit
is a number which controls the maximum number of concurrent tasks. Set limit = 1
for serial execution and limit = Infinity
for unlimited parallelism.onDone
is a callback function(err) { ... }
; it is called when the tasks it is associated with have runtasks
are callbacks function(done) { ... }
which should call done()
when they are complete.The return value is an object with a function .exec(tasks, onDone)
. Calling this function appends the new set of tasks and queues the onDone
function once all of those tasks have completed.
0.1.x
)miniq
uses setImmediate
when available to break call stacks. The purpose of this is to prevent stack overflows from occurring when executing in a tight loop.
However, note that this has a performance impact which can be substantial and is unnecessary if your payloads are already asynchronous - for example, with a test tree of 40k file read tasks using file-dedupe
(which uses miniq
internally), the runtime went from 50s to 30s simply by disabling the stack breaking.
Because of the potential performance impact, I've added the .maxStack
property on the queue; this is set to 50
by default, which seems to retain a good balance between call stack size and avoiding scheduling overhead. To set the maxStack
, set it on the return value. For example:
var queue = parallel(10, [ ... ], onDone);
queue.maxStack = Infinity;
parallelLimit
var parallel = require('miniq');
parallel(10, [
function(done) {
fs.readFile(function(err, result) {
if(err) {
return done(err); // done takes one argument: the error
}
}
},
], function(err) {
// err is sent if any of the tasks returned an error
});
parallel
var parallel = require('miniq');
parallel(Infinity, [
function(done) { ... },
], function(err) {
// err is sent if any of the tasks returned an error
});
series
var parallel = require('miniq');
parallel(1, [
function(done) { ... },
], function(err) {
// err is sent if any of the tasks returned an error
});
var parallel = require('miniq');
function Foo() {
this.queue = parallel(12);
}
Foo.prototype.bar = function() {
this.queue.exec(tasks, function(err) { ... });
};
Foo.prototype.all = function() {
// when the queue is empty
this.queue.once('empty', function() {
console.log('All done!');
});
this.queue.exec(tasks);
};
FAQs
Yet another tiny async control flow library, implements parallelLimit, with the ability to share the concurrency-limited queue.
The npm package miniq receives a total of 5,650 weekly downloads. As such, miniq popularity was classified as popular.
We found that miniq 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
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.