Nomenclature Predictably Misunderstood

    diff-json-structure

    1.0.8 • Public • Published

    diff-json-structure

    NPM version Downloads Build Status Dependency status Dev Dependency status

    Get the structural diff of two JSON objects, using diff's internally which is a module used by several test frameworks.

    It is considered a structural difference whenever:

    • items are added or removed to objects and arrays
    • the type of the item changes

    Installation

    $ npm install diff-json-structure

    Usage

    diff(oldObj, newObj, [options])

    Calculates the structural diff between oldObj and newObj, returning an array of parts.

    Available options:

    • typeMapper - A function that lets you override types for specific paths
    • .. and any option that diff's .diffJson() method supports

    Examples

    Simple usage:

    var diff = require('diff-json-structure');
    var chalk = require('chalk');
     
    // Utility function to visually print the diff
    // Tweak it at your own taste
    function printDiff(parts) {
        parts.forEach(function (part) {
            part.value
            .split('\n')
            .filter(function (line) { return !!line; })
            .forEach(function (line) {
                if (part.added) {
                    process.stdout.write(chalk.green('+  ' + line) + '\n');
                } else if (part.removed) {
                    process.stdout.write(chalk.red('-  ' + line) + '\n');
                } else {
                    process.stdout.write(chalk.dim('   ' + line) + '\n');
                }
            });
        });
     
        process.stdout.write('\n');
    }
     
    var oldObject = {
        environment: 'dev',
        googleAppId: 'UA-3234432-22',
        socialProviders: ['facebook'],
        libraries: {
            jquery: './node_modules/jquery',
        },
    };
     
    var newObj = {
        environment: 'prod',
        dbHost: '127.0.0.1:9000',
        socialProviders: ['facebook', 'twitter'],
        libraries: {
            jquery: './node_modules/jquery/jquery',
            moment: './node_modules/moment/moment',
        },
    };
     
    printDiff(diff(oldObj, newObj));

    Usage with options.typeMapper to ignore differences of socialProvider items of the previous example:

    printDiff(diff(oldObj, newObj, {
        typeMapper: function (path, value, prop, subject) {
            // path is a string that contains the full path to this value
            // e.g.: 'libraries.jquery' and 'socialProviders[0]'
     
            // You may return custom types here.. if nothing is returned, the normal
            // flow of identifying the structure recursively will continue
            if (path === 'socialProviders') {
                return 'array';
            }
        },
    }));

    Tests

    $ npm test

    License

    Released under the MIT License.

    Install

    npm i diff-json-structure

    DownloadsWeekly Downloads

    4,989

    Version

    1.0.8

    License

    MIT

    Last publish

    Collaborators

    • satazor