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

@clipchamp/json-delta

v1.1.0

Published

Json object diff / patching with configurable short-circuit tolerance. Forked from: github.com/corps

Downloads

612

Readme

json-delta

Forked from corps/json-delta

Why a fork?

This for provides typings in the npm package. This fork will also be used to try and become more active for projects.

About json-delta

json-delta is an efficient, JSON oriented javascript object delta calculator and applier. It provides a configurable threshold (tolerance) after which the diff calculator will short circuit a more complex delta analysis, useful for calculating deltas on very large objects that may from time to time be fully replaced.

Unlike similar libraries, json-delta sacrifices certain features and makes certain sane assumptions that allow it to perform.

For instance, it treats undefined as null and does not preserve constructor or prototype-bound behaviors. Arrays are not diffed recursively -- any elements with property changes result in single replacement delta of that element. Objects are diffed recursively, however, so only the deepest nodes of a structure have their changes tracked.

diff(a, b, tolerance?) returns a simple array describing the changes needed to transform a to b. It will return null if a and b are deeply equal, and will return a single replacement delta if more than tolerance (number) of changes are found.

applyDiff(a, diff) returns an object that would be deeply equal to b.

applyDiff will not mutate the original a, although it may share references to container objects not changed in the patching. It uses shallow copying on any container that changes.

var jd = require("json-delta");
var diff = jd.diff([1, 2, 3], [1, 2, 3, 4]);
console.log(jd.applyDiff([1, 2, 3], diff));

Installation

npm i @clipchamp/json-delta

Using json-delta

json-delta supplies two pretty main/important functions, at least for clipchamp.

diff<T>

diff<T> takes two objects, and will return to you a Diff<T>. This diff object can only be applied to the type of object (supplied by T). For example:

const coordinates1: Coordinates = {
    x: 1,
    y: 0
};
const coordinates2: Coordinates = {
    x: 1,
    y: 1
};
// This will result in the type of Diff<Coordinates>
const diffBetweenCoordinates = diff(coordinates1, coordinates2);

The resulting diff will be something like:

const someDiff = {
    y: 0 => 1
}

applyDiff<T>

applyDiff<T> will allow you to apply a diff you previous collected, back onto the object (that follows the same generic typing of T).

const coordinates1As2 = applyDiff(coordiantes1, diffBetweenCoordinates);