-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
67 lines (56 loc) · 1.82 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
'use strict';
var fs = require('fs');
var path = require('path');
var async = {
map: require('async/map')
};
var streams = require('memory-streams');
var makeUp = module.exports = {};
var INTEGRATIONS_DIR = path.join(__dirname, 'lib/integrations');
makeUp.path = function(item) {
return path.join(__dirname, 'configs', item);
};
makeUp._getEnabledIntegrationNames = function(integrationNames) {
if (integrationNames) {
return integrationNames.split(',');
}
return fs.readdirSync(INTEGRATIONS_DIR);
};
makeUp._getIntegrationModule = function(integrationName) {
try {
return require(path.join(INTEGRATIONS_DIR, integrationName));
} catch (e) {
return null;
}
};
makeUp._getEnabledIntegrations = function(enabledIntegrationNames) {
return enabledIntegrationNames
.map(makeUp._getIntegrationModule)
.filter(function(integration) {
return Boolean(integration);
});
};
makeUp.check = function(options, callback) {
var enabledIntegrationNames = makeUp._getEnabledIntegrationNames(options.integrations);
var enabledIntegrations = makeUp._getEnabledIntegrations(enabledIntegrationNames);
if (!enabledIntegrations.length) {
return callback({
message: 'no valid integrations can be enabled from: ' + enabledIntegrationNames.join(', ')
});
}
return async.map(
enabledIntegrations,
makeUp._runIntegration.bind(undefined, options),
function(error, allStreams) {
var result = allStreams.reduce(function(previous, stream) {
return previous + stream.toString();
}, '');
return callback(error, result);
}
);
};
makeUp._runIntegration = function(options, item, callback) {
var integrationOutput = new streams.WritableStream();
integrationOutput.write('\n' + item.label + '\n==============\n');
item.run(options, integrationOutput, callback);
};