1
|
|
|
/* global jake, complete, fail */ |
2
|
|
|
var Path = require('path') |
3
|
|
|
|
4
|
|
|
var Workspace = require('../Workspace') |
5
|
|
|
|
6
|
|
|
var Support = { |
7
|
|
|
exec: function (args) { |
8
|
|
|
return new Promise(function (resolve, reject) { |
9
|
|
|
var options = {printStdout: true, printStderr: true, breakOnError: false} |
10
|
|
|
var exec = jake.exec(args.join(' '), options, resolve) |
11
|
|
|
exec.addListener('error', reject) |
12
|
|
|
}) |
13
|
|
|
}, |
14
|
|
|
supersede: function (args) { |
15
|
|
|
Support.promise(Support.exec(args)) |
16
|
|
|
}, |
17
|
|
|
chain: function (tasks, suppressErrors, callback) { |
18
|
|
|
var errors = [] |
19
|
|
|
callback = callback || function (error, value) { |
20
|
|
|
error ? fail(error) : complete(value) |
21
|
|
|
} |
22
|
|
|
tasks = tasks.map(function (task) { |
23
|
|
|
if (typeof task === 'string' || task instanceof String) { |
24
|
|
|
return jake.Task[task] |
25
|
|
|
} |
26
|
|
|
return task |
27
|
|
|
}) |
28
|
|
|
var first = tasks.shift() |
29
|
|
|
var last = tasks.reduce(function (carrier, task) { |
30
|
|
|
carrier.addListener('complete', task.invoke.bind(task)) |
31
|
|
|
carrier.addListener('fail', function (error) { |
32
|
|
|
if (!suppressErrors) { |
33
|
|
|
return fail(error) |
34
|
|
|
} |
35
|
|
|
errors.push(error) |
36
|
|
|
task.invoke() |
37
|
|
|
}) |
38
|
|
|
return task |
39
|
|
|
}, first) |
40
|
|
|
last.addListener('complete', function (value) { |
41
|
|
|
callback(errors.pop(), value) |
42
|
|
|
}) |
43
|
|
|
last.addListener('fail', callback) |
44
|
|
|
first.invoke() |
45
|
|
|
}, |
46
|
|
|
promise: function (promise) { |
47
|
|
|
promise.then(complete, setTimeout.bind(global, fail, 0)) |
48
|
|
|
}, |
49
|
|
|
executable: function (name) { |
50
|
|
|
return Path.join(Workspace.modules, '.bin', name) |
51
|
|
|
} |
52
|
|
|
} |
53
|
|
|
|
54
|
|
|
module.exports = Support |
55
|
|
|
|