npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

streams2-splice

v1.0.0

Published

Splice or replace portions of a stream with static data or another stream

Downloads

5

Readme

Streams2-splice

A streams2 package for splicing streams into other streams. It's a stream-stream stack?!

Usage

var SpliceStream = require('streams2-splice');
var outStream = new SpliceStream('foo', 'bar');
outStream.pipe(process.stdout);
outStream.end('a man walked into a foo...\n');

Outputs: a man walked into a bar...

More interestingly, though...

var SpliceStream = require('streams2-splice'),
    PassThrough = require('stream').PassThrough;

var replacements = {
    man: 'woman',
    foo: 'bar'
};
var outStream = new SpliceStream('[', ']', function (stream) {
    var pt = new PassThrough();
    stream.on('data', function (chunk) {
        var str = chunk.toString();
        if (str in replacements) { pt.write(replacements[str]); }
    });
    stream.on('end', pt.end.bind(pt));
    return pt;
});
outStream.pipe(process.stdout);
outStream.end('a [man] walked into a [foo]...\n');

Outputs: a woman walked into a bar...

Constructor

new SpliceStream(startDelim[, endDelim][, replacer])

If no replacer is specified, matches are excluded from the output stream. If a string or buffer is given, that value is used as a replacement. If a function is given, the return value of the function is used as a replacement (more below).

If startDelim is specified, but no endDelim is specified, matches are made against the startDelim string. If both startDelim and endDelim are specified, matches are made against any data between the two delimiters. The delimiters themselves are excluded from the output.

Replacer function

If you supply a function as a replacer, it is passed in a stream which will produce the matched contents and then end. If using a single-delimiter replacement, no data is emitted, just an end event. If using start and end delimiters, the data between them will be emitted from the passed stream.

If you return a string or buffer from the replacer function, that value is substituted into the original stream. If you return a stream, its contents are replaced into the original stream and processing will be paused until your returned stream ends.

Implementation notes

This package uses the Boyer-Moore-Horspool algorithm for string searching, with the exception of determining whether a chunk might contain a partial match; in the latter case, it uses a naive iteration method. It is assumed that the delimiters provided are not likely to be extremely large.