Completed
Push — master ( 2c40ae...326927 )
by Fike
38s
created

tasks/Support/index.js   A

Complexity

Total Complexity 15
Complexity/F 1.36

Size

Lines of Code 53
Function Count 11

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 0
c 1
b 0
f 0
nc 1
dl 0
loc 53
rs 10
wmc 15
mnd 1
bc 13
fnc 11
bpm 1.1818
cpm 1.3636
noi 2
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