Skip to content

Commit 4cbda4d

Browse files
sttkphated
authored andcommitted
Update: Restrict config properties (closes #92) (#94)
1 parent 1c839d0 commit 4cbda4d

File tree

24 files changed

+518
-33
lines changed

24 files changed

+518
-33
lines changed

.eslintrc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
{
2-
"extends": "gulp"
2+
"extends": "gulp",
3+
"rules": {
4+
"max-statements": [1, 40]
5+
}
36
}

index.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ var Liftoff = require('liftoff');
99
var tildify = require('tildify');
1010
var interpret = require('interpret');
1111
var v8flags = require('v8flags');
12-
var merge = require('lodash.merge');
13-
var isString = require('lodash.isstring');
1412
var findRange = require('semver-greatest-satisfied-range');
1513
var exit = require('./lib/shared/exit');
1614
var cliOptions = require('./lib/shared/cliOptions');
@@ -20,6 +18,10 @@ var cliVersion = require('./package.json').version;
2018
var getBlacklist = require('./lib/shared/getBlacklist');
2119
var toConsole = require('./lib/shared/log/toConsole');
2220

21+
var loadConfigFiles = require('./lib/shared/config/load-files');
22+
var mergeConfigToCliFlags = require('./lib/shared/config/cli-flags');
23+
var mergeConfigToEnvFlags = require('./lib/shared/config/env-flags');
24+
2325
// Logging functions
2426
var logVerify = require('./lib/shared/log/verify');
2527
var logBlacklistError = require('./lib/shared/log/blacklistError');
@@ -65,7 +67,7 @@ if (opts.continue) {
6567
process.env.UNDERTAKER_SETTLE = 'true';
6668
}
6769

68-
// Set up event listeners for logging.
70+
// Set up event listeners for logging temporarily.
6971
toConsole(log, opts);
7072

7173
cli.on('require', function(name) {
@@ -96,14 +98,13 @@ module.exports = run;
9698

9799
// The actual logic
98100
function handleArguments(env) {
101+
var cfgLoadOrder = ['home', 'cwd'];
102+
var cfg = loadConfigFiles(env.configFiles['.gulp'], cfgLoadOrder);
103+
opts = mergeConfigToCliFlags(opts, cfg);
104+
env = mergeConfigToEnvFlags(env, cfg);
99105

100-
// Map an array of keys to preserve order
101-
var configFilePaths = ['home', 'cwd'].map(function(key) {
102-
return env.configFiles['.gulp'][key];
103-
});
104-
configFilePaths.filter(isString).forEach(function(filePath) {
105-
merge(opts, require(filePath));
106-
});
106+
// Set up event listeners for logging again after configuring.
107+
toConsole(log, opts);
107108

108109
if (opts.help) {
109110
console.log(parser.help());
@@ -169,5 +170,5 @@ function handleArguments(env) {
169170
}
170171

171172
// Load and execute the CLI version
172-
require(path.join(__dirname, '/lib/versioned/', range, '/'))(opts, env);
173+
require(path.join(__dirname, '/lib/versioned/', range, '/'))(opts, env, cfg);
173174
}

lib/shared/config/cli-flags.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
'use strict';
2+
3+
var copyProps = require('copy-props');
4+
5+
var fromTo = {
6+
'flags.silent': 'silent',
7+
};
8+
9+
function mergeConfigToCliFlags(opt, config) {
10+
return copyProps(config, opt, fromTo);
11+
}
12+
13+
module.exports = mergeConfigToCliFlags;

lib/shared/config/env-flags.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
'use strict';
2+
3+
var path = require('path');
4+
var copyProps = require('copy-props');
5+
6+
var toFrom = {
7+
configPath: 'flags.gulpfile',
8+
configBase: 'flags.gulpfile',
9+
};
10+
11+
function mergeConfigToEnvFlags(env, config) {
12+
return copyProps(env, config, toFrom, convert, true);
13+
}
14+
15+
function convert(value, configKey, envKey) {
16+
if (envKey === 'configBase') {
17+
return path.dirname(value);
18+
}
19+
return value;
20+
}
21+
22+
module.exports = mergeConfigToEnvFlags;

lib/shared/config/load-files.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use strict';
2+
3+
var copyProps = require('copy-props');
4+
var path = require('path');
5+
6+
function loadConfigFiles(configFiles, configFileOrder) {
7+
var config = {};
8+
9+
configFileOrder.forEach(loadFile);
10+
11+
function loadFile(key) {
12+
var filePath = configFiles[key];
13+
if (!filePath) {
14+
return;
15+
}
16+
17+
copyProps(require(filePath), config, convert);
18+
19+
function convert(value, name) {
20+
if (name === 'flags.gulpfile') {
21+
return path.resolve(path.dirname(filePath), value);
22+
}
23+
return value;
24+
}
25+
}
26+
27+
return config;
28+
}
29+
30+
module.exports = loadConfigFiles;

lib/shared/log/toConsole.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,23 @@ var levels = [
1313
'debug', // -LLLL: Logs all log levels.
1414
];
1515

16+
function cleanup(log) {
17+
levels.forEach(removeListeners);
18+
19+
function removeListeners(level) {
20+
if (level === 'error') {
21+
log.removeListener(level, noop);
22+
log.removeListener(level, fancyLog.error);
23+
} else {
24+
log.removeListener(level, fancyLog);
25+
}
26+
}
27+
}
28+
1629
function toConsole(log, opts) {
30+
// Remove previous listeners to enable to call this twice.
31+
cleanup(log);
32+
1733
// Return immediately if logging is
1834
// not desired.
1935
if (opts.tasksSimple || opts.silent) {

lib/versioned/^3.7.0/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var logEvents = require('./log/events');
1212
var logTasksSimple = require('./log/tasksSimple');
1313
var registerExports = require('../../shared/registerExports');
1414

15-
function execute(opts, env) {
15+
function execute(opts, env, config) {
1616
var tasks = opts._;
1717
var toRun = tasks.length ? tasks : ['default'];
1818

@@ -39,8 +39,8 @@ function execute(opts, env) {
3939
}
4040
if (opts.tasks) {
4141
var tree = taskTree(gulpInst.tasks);
42-
if (opts.description && isString(opts.description)) {
43-
tree.label = opts.description;
42+
if (config.description && isString(config.description)) {
43+
tree.label = config.description;
4444
} else {
4545
tree.label = 'Tasks for ' + chalk.magenta(tildify(env.configPath));
4646
}

lib/versioned/^4.0.0-alpha.1/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var logSyncTask = require('../^4.0.0/log/syncTask');
1616
var logTasksSimple = require('../^4.0.0/log/tasksSimple');
1717
var registerExports = require('../../shared/registerExports');
1818

19-
function execute(opts, env) {
19+
function execute(opts, env, config) {
2020

2121
var tasks = opts._;
2222
var toRun = tasks.length ? tasks : ['default'];
@@ -44,8 +44,8 @@ function execute(opts, env) {
4444
}
4545
if (opts.tasks) {
4646
var tree = {};
47-
if (opts.description && isString(opts.description)) {
48-
tree.label = opts.description;
47+
if (config.description && isString(config.description)) {
48+
tree.label = config.description;
4949
} else {
5050
tree.label = 'Tasks for ' + chalk.magenta(tildify(env.configPath));
5151
}

lib/versioned/^4.0.0-alpha.2/index.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ var registerExports = require('../../shared/registerExports');
1818

1919
var getTask = require('../^4.0.0/log/getTask');
2020

21-
function execute(opts, env) {
21+
function execute(opts, env, config) {
2222

2323
var tasks = opts._;
2424
var toRun = tasks.length ? tasks : ['default'];
@@ -49,8 +49,8 @@ function execute(opts, env) {
4949
}
5050
if (opts.tasks) {
5151
tree = gulpInst.tree({ deep: true });
52-
if (opts.description && isString(opts.description)) {
53-
tree.label = opts.description;
52+
if (config.description && isString(config.description)) {
53+
tree.label = config.description;
5454
} else {
5555
tree.label = 'Tasks for ' + chalk.magenta(tildify(env.configPath));
5656
}
@@ -59,8 +59,8 @@ function execute(opts, env) {
5959
}
6060
if (opts.tasksJson) {
6161
tree = gulpInst.tree({ deep: true });
62-
if (opts.description && isString(opts.description)) {
63-
tree.label = opts.description;
62+
if (config.description && isString(config.description)) {
63+
tree.label = config.description;
6464
} else {
6565
tree.label = 'Tasks for ' + tildify(env.configPath);
6666
}

lib/versioned/^4.0.0/index.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ var registerExports = require('../../shared/registerExports');
1818

1919
var getTask = require('./log/getTask');
2020

21-
function execute(opts, env) {
21+
function execute(opts, env, config) {
2222

2323
var tasks = opts._;
2424
var toRun = tasks.length ? tasks : ['default'];
@@ -49,8 +49,8 @@ function execute(opts, env) {
4949
}
5050
if (opts.tasks) {
5151
tree = gulpInst.tree({ deep: true });
52-
if (opts.description && isString(opts.description)) {
53-
tree.label = opts.description;
52+
if (config.description && isString(config.description)) {
53+
tree.label = config.description;
5454
} else {
5555
tree.label = 'Tasks for ' + chalk.magenta(tildify(env.configPath));
5656
}
@@ -59,8 +59,8 @@ function execute(opts, env) {
5959
}
6060
if (opts.tasksJson) {
6161
tree = gulpInst.tree({ deep: true });
62-
if (opts.description && isString(opts.description)) {
63-
tree.label = opts.description;
62+
if (config.description && isString(config.description)) {
63+
tree.label = config.description;
6464
} else {
6565
tree.label = 'Tasks for ' + tildify(env.configPath);
6666
}

0 commit comments

Comments
 (0)