-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.js
159 lines (131 loc) · 4.74 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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
var gulp = require('gulp');
var clean = require('gulp-clean');
var es = require('event-stream');
var fs = require('fs');
var rseq = require('gulp-run-sequence');
var zip = require('gulp-zip');
var shell = require('gulp-shell');
var chrome = require('./src/browser/chrome/manifest');
var firefox = require('./src/browser/firefox/manifest');
var browserify = require('browserify');
var gutil = require('gulp-util');
var tsify = require('tsify');
var factor = require('factor-bundle');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var merge = require('multistream-merge');
var uglify = require('gulp-uglify');
function pipe(src, transforms, dest) {
if (typeof transforms === 'string') {
dest = transforms;
transforms = null;
}
var stream = gulp.src(src);
transforms &&
transforms.forEach(function(transform) {
stream = stream.pipe(transform);
});
if (dest) {
stream = stream.pipe(gulp.dest(dest));
}
return stream;
}
function bundle(debugMode) {
var TS_SOURCE_DIR = './src/ts/';
var BUILD_DEST_DIR = './build/artifacts/';
var srcFileNames = fs.readdirSync(TS_SOURCE_DIR).filter(e => /\.ts$/.test(e));
var srcFilePaths = srcFileNames.map(fname => TS_SOURCE_DIR + fname);
var destFileNames = srcFileNames.map(fname => fname.replace(/\.ts$/, '.js'));
var destStreams = destFileNames.map(f => source(f));
var b = browserify({
entries: srcFilePaths,
debug: debugMode,
// Any packages that don't use require() can be added here for a speed boost
noParse: ['jquery', 'lodash'].map(p => require.resolve(p)),
cache: {},
packageCache: {}
});
var commonStream = b
.plugin(tsify)
.plugin('factor-bundle', { o: destStreams })
.bundle()
.pipe(source('lib.js'))
.on('error', gutil.log.bind(gutil, 'Browserify Error'))
.on('log', gutil.log.bind(gutil, 'Browserify Log'));
var stream = merge.obj(destStreams.concat(commonStream)).pipe(buffer());
if (!debugMode) {
stream = stream.pipe(uglify());
}
return stream.pipe(gulp.dest(BUILD_DEST_DIR));
}
gulp.task('clean', function() {
return pipe('./build', [clean()]);
});
gulp.task('bundle', function() {
return bundle(true);
});
gulp.task('bundle-release', function() {
return bundle(false);
});
gulp.task('chrome', ['bundle'], function() {
return es.merge(
pipe('./build/artifacts/*.js', './build/chrome/js'),
pipe('./src/img/**/*', './build/chrome/img'),
pipe('./src/css/**/*', './build/chrome/css'),
pipe('./src/html/**/*', './build/chrome/html'),
pipe('./vendor/**/*', './build/chrome/vendor'),
pipe('./src/browser/chrome/manifest.json', './build/chrome/')
);
});
gulp.task('firefox', ['bundle'], function() {
return es.merge(
pipe('./build/artifacts/*.js', './build/firefox/js'),
pipe('./src/img/**/*', './build/firefox/img'),
pipe('./src/css/**/*', './build/firefox/css'),
pipe('./src/html/**/*', './build/firefox/html'),
pipe('./vendor/**/*', './build/firefox/vendor'),
pipe('./src/browser/firefox/manifest.json', './build/firefox/')
);
});
gulp.task('safari', function() {
return es.merge(
pipe('./build/artifacts/*.js', './build/safari/willsave.safariextension/js'),
pipe('./src/img/**/*', './build/safari/willsave.safariextension/img'),
pipe('./src/css/**/*', './build/safari/willsave.safariextension/css'),
pipe('./src/html/**/*', './build/safari/willsave.safariextension/html'),
pipe('./src/browser/safari/Info.plist', './build/safari/willsave.safariextension'),
pipe('./src/browser/safari/Settings.plist', './build/safari/willsave.safariextension')
);
});
gulp.task('chrome-dist', function() {
gulp
.src('./build/chrome/**/*')
.pipe(zip('chrome-extension-' + chrome.version + '.zip'))
.pipe(gulp.dest('./dist/chrome'));
});
gulp.task('firefox-dist', function() {
gulp
.src('./build/firefox/**/*')
.pipe(zip('firefox-extension-' + firefox.version + '.zip'))
.pipe(gulp.dest('./dist/chrome'));
});
gulp.task('safari-dist', function() {
pipe('./src/browser/safari/Update.plist', './dist/safari');
});
gulp.task('firefox-run', shell.task(['cd ./build/firefox && ../../tools/addon-sdk-1.16/bin/cfx run']));
gulp.task('dist', function(cb) {
return rseq('clean', ['chrome', 'firefox', 'safari'], ['chrome-dist', 'firefox-dist', 'safari-dist'], cb);
});
gulp.task('watch-firefox', ['clean', 'firefox'], function() {
gulp.watch(['./src/**/*'], ['firefox']);
});
gulp.task('watch-chrome', ['clean', 'chrome'], function() {
gulp.watch(['./src/**/*'], ['chrome']);
});
gulp.task('run', function(cb) {
return rseq('firefox', 'firefox-run', cb);
});
gulp.task('addons', shell.task(['cp -R ./dist ../addons']));
gulp.task('default', function(cb) {
return rseq('clean', ['chrome', 'firefox', 'safari'], cb);
});