-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathgulpfile.js
82 lines (70 loc) · 2.27 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
'use strict';
var fs = require('fs');
var del = require('del'),
concat = require('gulp-concat'),
gulp = require('gulp'),
jshint = require('gulp-jshint'),
jshintStylish = require('jshint-stylish'),
mocha = require('gulp-mocha'),
// overrideAction = require('pegjs-override-action'),
PEG = require('pegjs'),
runSequence = require('run-sequence'),
uglifyjs = require('gulp-uglify'),
browserify = require('gulp-browserify'),
rename = require('gulp-rename');
function packageJs(code) {
return '(function () { var parser = ' + code + ';\nmodule.exports = parser;\n}());';
}
gulp.task('clean', function (cb) {
del(['build/**/**', 'src/**/*.peg.js'], cb);
});
gulp.task('browserify', function () {
return gulp.src('src/global.js')
.pipe(browserify())
.pipe(rename('pixiv-novel-parser.js'))
.pipe(gulp.dest('./build'));
});
gulp.task('jshint', function () {
return gulp.src(['*.js', 'src/**/*.js', '!src/**/*.peg.js']).
pipe(jshint()).
pipe(jshint.reporter(jshintStylish));
});
gulp.task('mocha', function () {
return gulp.src(['test/**/*.js']).
pipe(mocha({ reporter: 'spec' }));
});
gulp.task('pegjs-basic', function (done) {
var regex = /^\s*\/\/\s*{{{\s*!Extended[\s\S]*?^\s*\/\/\s*}}}\s*!Extended.*$/igm;
fs.readFile('src/parser.pegjs', { encoding: 'utf8' }, function (err, data) {
var code = '';
if (err) { return done(err); }
data = data.replace(regex, '');
code = PEG.buildParser(data)._source;
code = packageJs(code);
fs.writeFile('src/parser.peg.js', code, function (err) {
done(err);
});
});
});
gulp.task('pegjs', ['pegjs-basic']);
gulp.task('uglifyjs', ['browserify'], function () {
return gulp.src(['build/pixiv-novel-parser.js']).
pipe(concat('pixiv-novel-parser.min.js')).
pipe(uglifyjs({
outSourceMap: true,
output: {},
compress: { unsafe: true }
})).
pipe(gulp.dest('build'));
});
gulp.task('copy', function () {
return gulp.src('build/*').pipe(gulp.dest('dist'));
});
gulp.task('build', ['pegjs', 'browserify', 'uglifyjs']);
gulp.task('test', ['jshint', 'mocha']);
gulp.task('dist', function () {
return runSequence('clean', 'build', 'test', 'copy');
});
gulp.task('default', function () {
return runSequence('clean', 'build', 'test');
});