forked from ColemanGariety/gulp-nodemon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
83 lines (68 loc) · 2.26 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
'use strict'
var nodemon = require('nodemon')
, colors = require('colors')
, gulp = require('gulp')
, cp = require('child_process')
, bus = require('nodemon/lib/utils/bus')
module.exports = function (options) {
options = options || {};
// Our script
var script = nodemon(options)
, originalOn = script.on
, originalListeners = bus.listeners('restart')
// Allow for injection of tasks on file change
if (options.tasks) {
// Remove all 'restart' listeners
bus.removeAllListeners('restart');
// Place our listener in first position
bus.on('restart', function (files) {
if (!options.quiet) nodemonLog("running tasks...")
if (typeof options.tasks === 'function') run(options.tasks(files))
else run(options.tasks)
})
// Re-add all other listeners
for (var i = 0; i < originalListeners.length; i++) {
bus.on('restart', originalListeners[i])
}
}
// Capture ^C
process.on('exit', script.emit.bind(script, 'exit'))
// Forward log messages and stdin
script.on('log', function (log) {
nodemonLog(log.message)
})
// Shim 'on' for use with gulp tasks
script.on = function (event, tasks) {
var tasks = Array.prototype.slice.call(arguments)
, event = tasks.shift()
if (event === 'change') script.changeTasks = tasks
else {
for (var i = 0; i < tasks.length; i++) {
void function (tasks) {
if (tasks instanceof Function) originalOn(event, tasks)
else {
originalOn(event, function () {
if (Array.isArray(tasks)) {
tasks.forEach(function (task) {
run(task)
})
} else run(tasks)
})
}
}(tasks[i])
}
}
return script
}
return script
// Synchronous alternative to gulp.run()
function run(tasks) {
if (typeof tasks === 'string') tasks = [tasks]
if (tasks.length === 0) return
if (!(tasks instanceof Array)) throw new Error('Expected task name or array but found: ' + tasks)
cp.spawnSync(process.platform === 'win32' ? 'gulp.cmd' : 'gulp', tasks, { stdio: [0, 1, 2] })
}
}
function nodemonLog(message) {
console.log('[' + new Date().toString().split(' ')[4].gray + '] ' + ('[nodemon] ' + message).yellow)
}