Manages conditional configurations by promoting and/or eliminating specific keys of a JSON value object.
npm install json-regulator
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.
Don't care.
The JSON value object needs to regulate.
Key or array of keys to promote.
Optional. Key or array of keys to eliminate.
Optional. Key or array of keys that should never mutate.
Optional. Overwrite existing values or not. Default is true.
A new regulated JSON value object.
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'
}
}}
If you are using webpack, you can enable conditional build with conditional configurations.
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
$ npm test