json-regulator

    0.1.16 • Public • Published

    json-regulator

    Manages conditional configurations by promoting and/or eliminating specific keys of a JSON value object.

    MIT npm version David Dependency Badge

    NPM NPM

    Install

    npm install json-regulator

    API

    regulate(values, promotions, eliminations, immutables, options)

    For given JSON value object values, returns a new JSON value object, that promotes keys in promotions array one level up, and eliminats keys in both promotions and eliminations arrays.

    Context

    Don't care.

    Parameters

    values

    The JSON value object needs to regulate.

    promotions

    Key or array of keys to promote.

    eliminations

    Optional. Key or array of keys to eliminate.

    immutables

    Optional. Key or array of keys that should never mutate.

    options
    options.overwrite

    Optional. Overwrite existing values or not. Default is true.

    Returns

    A new regulated JSON value object.

    Example

    var regulate = require('json-regulator');
     
    var production = ['production', 'prod'];
    var development = ['development', 'dev'];
    var config = {
        development: {
            description: 'development build',
            release: false,
            src: 'src/',
            dest: 'build/'
        },
        production: {
            description: 'production build',
            release: true,
            src: 'src/',
            dest: 'dist/',
            sourcemaps: {
                dest: 'maps/'
            }
        },
        scripts: {
            src: '**/*.js',
            prod: {
                bundle: 'bundle.js'
            },
            options: {
                debug: false,
                dev: {
                    debug: true
                }
            }
        },
        deploy: {
            development: {
                settings: {
                    'log-level': 'info'
                }
            },
            dev: {
                settings: {
                    overwrite: 'force'
                }
            },
            production: {
                settings: {
                    'log-level': 'warning'
                }
            },
            prod: {
                settings: {
                    overwrite: 'auto'
                }
            }
        }
    };

    With the call:

    config = regulate(config, production, development);

    Generates:

    {
        description: 'production build',
        release: true,
        src: 'src/',
        dest: 'dist/',
        sourcemaps: {
            dest: 'maps/'
        },
        scripts: {
            src: '**/*.js',
            bundle: 'bundle.js',
            options: {
                debug: false
            }
        },
        deploy: {
            settings: {
                'log-level': 'warning',
                overwrite: 'auto'
            }
        }
    }

    And with the call:

    config = regulate(config, development, production);

    Generates:

    {
        description: 'development build',
        release: false
        src: 'src/',
        dest: 'build/',
        scripts: {
            src: '**/*.js',
            options: {
                debug: true
            }
        },
        deploy: {
            settings: {
                'log-level': 'info',
                overwrite: 'force'
            }
        }}

    Sample Usage

    If you are using gulp, you can enable conditional build with conditional configurations.

    var gulp = require('gulp'),
        concat = require('gulp-concat'),
        doif = require('gulp-if'),
        sourcemaps = require('gulp-sourcemaps'),
        uglify = require('gulp-uglify'),
        util = require('gulp-util');
     
    var production = ['production', 'prod'],
        development = ['development', 'dev'],
        config = {
            // ...
        };
     
    if (util.env.dev) {
        config = regulate(config, development, production);
    } else {
        config = regulate(config, production, development);
    }
     
    gulp.task('scripts', function () {
        return gulp.src(config.src + config.scripts.src)
            .pipe(doif(config.sourcemaps, sourcemaps.init()))
            .pipe(doif(config.release, uglify()))
            .pipe(doif(config.release, concat(config.scripts.bundle)))
            .pipe(doif(config.sourcemaps, sourcemaps.write(config.dest + config.sourcemaps.dest)))
            .pipe(gulp.dest(config.dest));
    });

    Run gulp:

    $ gulp --dev scripts

    Test

    $ npm test

    Related

    License

    MIT

    Author

    Amobiz

    Install

    npm i json-regulator

    DownloadsWeekly Downloads

    56

    Version

    0.1.16

    License

    MIT

    Last publish

    Collaborators

    • amobiz