-
Notifications
You must be signed in to change notification settings - Fork 1
/
gulpfile.js
145 lines (125 loc) · 3.94 KB
/
gulpfile.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
'use strict';
let gulp = require('gulp');
let browserify = require('browserify');
let buffer = require('vinyl-buffer');
let gutil = require('gulp-util');
let jest = require('jest-cli');
let less = require('gulp-less');
let notify = require('gulp-notify');
let plumber = require('gulp-plumber');
let source = require('vinyl-source-stream');
let watchify = require('watchify');
let webserver = require('gulp-webserver');
/**
* Configurations
*/
const CONFIG = {
browserify: {
entries: 'js/dice3d.js',
debug: true,
transform: 'babelify',
standalone: 'dice3d',
},
};
/**
* Default task
*/
gulp.task('default', ['test', 'dist']);
/**
* Utilities
*/
var _bundle = function(b) {
return b.bundle()
.on('error', function(e) {
notify.onError.call(this, '[Browserify] <%= error.message %>');
gutil.log('Browserify Error', e);
})
.pipe(source('dice3d.js'))
.pipe(buffer())
.pipe(gulp.dest('dist'))
.pipe(notify('[Browserify] Generated <%= file.relative %>'));
};
/**
* Build for distribute
*/
gulp.task('dist:script', function() {
let b = browserify(CONFIG.browserify);
return _bundle(b);
});
gulp.task('dist:style', function() {
return gulp.src('./less/dice3d.less')
.pipe(plumber({
errorHandler: notify.onError('[LESS] <%= error.message %>'),
}))
.pipe(less())
.pipe(gulp.dest('dist'))
.pipe(notify('[LESS] Generated <%= file.relative %>'));
});
gulp.task('dist', ['dist:script', 'dist:style']);
/**
* Test using Jest
*/
gulp.task('test', function(callback) {
var _write = process.stdout.write;
var output = '';
process.stdout.write = function(str) {
if (str && str.match(/^{.*}$/)) {
output += str;
} else {
_write.apply(this, arguments);
}
};
jest.runCLI({ json: true, }, __dirname, function(success) {
process.stdout.write = _write;
var data;
try {
data = JSON.parse(output);
} catch (e) {
notify.onError('<%= error.message %>').call(new Buffer(''), e);
return callback();
}
var endTime = data.testResults.length ? data.testResults
.map(r => r.endTime)
.reduce(Math.max.bind(Math)) : Date.now();
var time = (endTime - data.startTime) / 1000;
var result = `${data.numPassedTests} test passed (${data.numTotalTests} total in ${data.numTotalTestSuites}, run time ${time}s)`;
if (data.numFailedTests) result = `${data.numFailedTests} test failed, ${result}`;
result = `[TEST] ${result}`;
var logLevel = notify.logLevel();
notify.logLevel(0);
if (success) {
notify('<%= file.message %>', { onLast: false})
._transform({ message: result }, null, () => callback);
} else {
data.testResults
.filter(r => !r.success)
.map(r => r.message)
.forEach(function (message) {
var _message = message.replace(/\u001b\[[0-9]*m/g, '').substr(0, 1000);
notify.onError('<%= error.message %>', function() {}).call(new Buffer(''), new Error(_message));
});
notify.onError('<%= error.message %>', function() {}).call(new Buffer(''), new Error(result));
}
notify.logLevel(logLevel);
return callback();
});
});
/**
* Watch
*/
let b = browserify(Object.assign({}, CONFIG.browserify, {
plugin: 'watchify',
}));
let bundle = function() {
return _bundle(b);
};
b.on('update', bundle);
b.on('log', gutil.log);
gulp.task('watch:script', bundle);
gulp.task('watch:style', function() {
return gulp.watch(['less/**/*'], ['dist:style']);
});
gulp.task('watch:test', function() {
return gulp.watch(['__mocks__/**/*', '__tests__/**/*', 'js/**/*'], ['test']);
});
gulp.task('watch', ['watch:script', 'watch:style', 'watch:test']);