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

livepatch

v1.1.2

Published

Patch JSON streams on the fly

Downloads

9,480

Readme

livepatch

Build Status Coverage Status

Patch JSON streams on the fly.

Example

var fs = require('fs');
var livepatch = require('livepatch');

fs.createReadStream('test.json')
	.pipe(livepatch(function() {
		/* Transformations goes here */

		this.rename('$.name_*', 'name'); // Renames all keys in the root starting with 'name_' to 'name'

		this.remove('$._*'); // Removes all fields in the root starting with an underscore

		// Advanced usage
		this.rewrite('$.author', function(match) {
			return {
				rename: 'author_name',
				value: match.value.toUpperCase()
			};
		});
	}))
	.pipe(fs.createWriteStream('output.json'));

Documentation

rename(path, name)

Renames all fields matched by path to name.

remove(path)

Remove all fields matched by path.

rewrite(path, rewriteFn)

Rewrite all fields matched by path using rewriteFn.

The passed function receives an argument with the following information:

key: current key name

path: current path(as an array)

value: current key value(if available)

It should return a JSON object with atleast one of the following actions:

rename: Renames the fields with the given value

remove: If true, removes the key

value: Changes the key value

path

All paths used in transformations are based on the JSONPath spec.

$ denotes the root of the object . denotes the end of a key name * denotes any range of characters

Examples

$.name Matches the name field.

$.books[*].author Matches all books authors.

$.books[*].*_name Matches all fields in a book that ends with _name.

How it works

LivePatch works by reading a JSON stream with clarinet and doing live modifications based on the current path in the stream. After patching, it immediatly serializes to the next stream the resulting JSON.

It's very useful when dealing with very large objects which came from a stream(e.g.: ElasticSearch results) that need to be modified and streamed to another place(e.g.: network). As it doesn't hold the entire data on memory you don't need to worry about loading large files.

License

Check here.