
Security News
OpenClaw Skill Marketplace Emerges as Active Malware Vector
Security researchers report widespread abuse of OpenClaw skills to deliver info-stealing malware, exposing a new supply chain risk as agent ecosystems scale.
sorted-intersect-stream
Advanced tools
Get the intersection of two sorted streams.
npm install sorted-intersect-stream
It is easy to use
const Intersect = require('sorted-intersect-stream')
const { Readable } = require('streamx')
const sorted1 = Readable.from([0, 10, 24, 42, 43, 50, 55])
const sorted2 = Readable.from([10, 42, 53, 55, 60])
// combine the two streams into a single intersected stream
const intersection = new Intersect(sorted1, sorted2)
intersection.on('data', function(data) {
console.log('intersected at ' + data)
})
intersection.on('end', function() {
console.log('no more intersections')
})
Running the above example will print
intersected at 10
intersected at 42
intersected at 55
no more intersections
When the intersection ends the two input streams will be destroyed. Setintersection.autoDestroy = false to disable this.
If you are streaming objects sorting is based on the compare function you can pass as the 3rd argument.
const sorted1 = Readable.from([{ foo:'a' }, { foo:'b' }, { foo:'c' }])
const sorted2 = Readable.from([{ foo:'b' }, { foo:'d' }])
const i = new Intersect(sorted1, sorted2, function(a, b) {
return a.foo < b.foo ? -1 : a.foo > b.foo ? 1 : 0
})
i.on('data', function(data) {
console.log(data)
})
A good use-case for this kind of module is implementing something like full-text search where you want to intersect multiple index hits.
Since levelup streams are sorted in relation to their keys it is easy to intersect them using sorted-intersect-stream.
If we wanted to intersect two namespaces foo and bar we could do it like so
const db = levelup('mydatabase', {valueEncoding:'json'})
const foo = db.createReadStream({
start: 'foo:',
end: 'foo;'
})
const bar = db.createReadStream({
start: 'bar:',
end: 'bar;'
})
const intersection = new Intersect(foo, bar, function (a, b) {
const aKey = toKey(a)
const bKey = toKey(b)
return aKey < bKey ? -1 : aKey > bKey ? 1 : 0
})
function toKey (data) {
// remove the namespace from the keys so they are comparable
return data.key.split(':').slice(1).join(':')
}
MIT
FAQs
Intersect two streams that emit sorted data
We found that sorted-intersect-stream 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
Security researchers report widespread abuse of OpenClaw skills to deliver info-stealing malware, exposing a new supply chain risk as agent ecosystems scale.

Security News
Claude Opus 4.6 has uncovered more than 500 open source vulnerabilities, raising new considerations for disclosure, triage, and patching at scale.

Research
/Security News
Malicious dYdX client packages were published to npm and PyPI after a maintainer compromise, enabling wallet credential theft and remote code execution.