gulp-chef
Version:
Cascading configurable recipes for gulp 4.0. An elegant, intuitive way to reuse gulp tasks.
83 lines (67 loc) • 1.74 kB
JavaScript
/* eslint no-process-env: 0 */
;
var regulate = require('json-regulator');
var cli = require('gulp-util').env;
var env = process.env.NODE_ENV;
var MODES = {
production: ['production', 'prod'],
development: ['development', 'dev'],
staging: ['staging'],
default: 'production'
};
var SOURCES = [
function _cli(key) {
if (key in cli) {
return true;
}
},
function _env(key) {
return env === key;
}
];
function ConfigurationRegulator(optionalModes, optionalProvider) {
var keys, mode, modes, provider;
this.modes = modes = optionalModes || MODES;
provider = optionalProvider || this.mode.bind(this);
keys = Object.keys(modes);
mode = provider(modes);
this.promotions = modes[mode];
this.eliminations = keys.reduce(function (result, key) {
if (key === mode || key === 'default') {
return result;
}
return result.concat(modes[key]);
}, []);
}
ConfigurationRegulator.prototype.regulate = function (configurations) {
return regulate(configurations, this.promotions, this.eliminations);
};
ConfigurationRegulator.prototype.mode = function () {
return ConfigurationRegulator.mode(SOURCES, this.modes) || this.modes.default || Object.keys(this.modes)[0];
};
ConfigurationRegulator.mode = function (sources, modes) {
var names;
names = Object.keys(modes);
return any(sources, match);
function match(source) {
return any(names, function (name) {
var keys;
keys = modes[name];
return any(keys, function (key) {
if (source(key)) {
return name;
}
});
});
}
};
function any(values, fn) {
var value, i, n;
for (i = 0, n = values.length; i < n; ++i) {
value = fn(values[i]);
if (value) {
return value;
}
}
}
module.exports = ConfigurationRegulator;