2016-06-21 09:04:08 +12:00
|
|
|
|
|
|
|
// gulp and utilities
|
|
|
|
import gulp from 'gulp'
|
|
|
|
import gutil from 'gulp-util'
|
|
|
|
import del from 'del'
|
|
|
|
import Sequence from 'run-sequence'
|
|
|
|
import watch from 'gulp-watch'
|
|
|
|
import lazypipe from 'lazypipe'
|
2016-06-21 19:14:57 +12:00
|
|
|
import filter from 'gulp-filter'
|
2016-06-21 09:04:08 +12:00
|
|
|
|
2016-06-22 01:19:36 +12:00
|
|
|
import jsonedit from 'gulp-json-editor'
|
|
|
|
import zip from 'gulp-zip'
|
|
|
|
|
2016-06-23 01:43:25 +12:00
|
|
|
import { execFile, exec } from 'child_process'
|
2016-06-22 01:19:36 +12:00
|
|
|
|
2016-06-21 09:04:08 +12:00
|
|
|
// script
|
2016-06-21 18:39:26 +12:00
|
|
|
import standard from 'gulp-standard'
|
2016-06-21 09:04:08 +12:00
|
|
|
import webpack from 'webpack'
|
|
|
|
import webpackConfig from './webpack.config.babel.js'
|
|
|
|
|
|
|
|
const sequence = Sequence.use(gulp)
|
|
|
|
|
2016-08-15 08:42:57 +12:00
|
|
|
const inProduction = process.env.NODE_ENV === 'production' || process.argv.indexOf('-p') !== -1
|
2016-06-21 09:04:08 +12:00
|
|
|
|
|
|
|
let watchOpts = {
|
2016-06-21 18:39:26 +12:00
|
|
|
readDelay: 500,
|
|
|
|
verbose: true
|
2016-06-21 09:04:08 +12:00
|
|
|
}
|
|
|
|
|
2016-08-15 08:42:57 +12:00
|
|
|
webpackConfig.forEach((c) => {
|
|
|
|
if (inProduction) {
|
|
|
|
c.plugins.push(new webpack.LoaderOptionsPlugin({
|
|
|
|
minimize: true,
|
|
|
|
debug: false
|
|
|
|
}))
|
2016-11-22 01:57:05 +13:00
|
|
|
/*
|
|
|
|
c.plugins.push(new webpack.optimize.UglifyJsPlugin({
|
|
|
|
compress: {
|
|
|
|
warnings: false,
|
|
|
|
screw_ie8: true
|
|
|
|
},
|
|
|
|
comments: false,
|
|
|
|
mangle: {
|
|
|
|
screw_ie8: true
|
|
|
|
},
|
|
|
|
screw_ie8: true,
|
|
|
|
sourceMap: !!c.devtool
|
|
|
|
}))
|
|
|
|
*/
|
2016-08-15 08:42:57 +12:00
|
|
|
}
|
2016-08-19 21:24:20 +12:00
|
|
|
c.plugins.push(new webpack.DefinePlugin({
|
|
|
|
FIMFIC2EPUB_VERSION: JSON.stringify(require('./package.json').version)
|
|
|
|
}))
|
2016-08-15 08:42:57 +12:00
|
|
|
})
|
2016-06-21 09:04:08 +12:00
|
|
|
|
2016-08-15 08:42:57 +12:00
|
|
|
const wpCompiler = webpack(webpackConfig)
|
2016-06-21 09:04:08 +12:00
|
|
|
|
2016-06-21 18:39:26 +12:00
|
|
|
function webpackTask (callback) {
|
|
|
|
// run webpack
|
|
|
|
wpCompiler.run(function (err, stats) {
|
|
|
|
if (err) throw new gutil.PluginError('webpack', err)
|
|
|
|
gutil.log('[webpack]', stats.toString({
|
|
|
|
colors: true,
|
|
|
|
hash: false,
|
|
|
|
version: false,
|
|
|
|
chunks: false,
|
|
|
|
chunkModules: false
|
|
|
|
}))
|
2016-06-23 18:57:49 +12:00
|
|
|
sequence('pack', callback)
|
2016-06-21 18:39:26 +12:00
|
|
|
})
|
2016-06-21 09:04:08 +12:00
|
|
|
}
|
|
|
|
|
2016-06-21 18:39:26 +12:00
|
|
|
let lintPipe = lazypipe()
|
2016-06-23 00:48:51 +12:00
|
|
|
.pipe(filter, ['**/*', '!src/lib/**/*'])
|
2016-06-21 18:39:26 +12:00
|
|
|
.pipe(standard)
|
2016-06-21 19:14:57 +12:00
|
|
|
.pipe(standard.reporter, 'default', { breakOnError: false })
|
2016-06-21 09:04:08 +12:00
|
|
|
|
2016-06-21 18:39:26 +12:00
|
|
|
// Cleanup task
|
2016-08-15 21:11:20 +12:00
|
|
|
gulp.task('clean', () => del([
|
|
|
|
'extension/fimfic2epub.js',
|
|
|
|
'extension/eventPage.js',
|
|
|
|
'extension/*.js.map',
|
|
|
|
'fimfic2epub.js',
|
|
|
|
'fimfic2epub.js.map',
|
|
|
|
'extension.zip',
|
|
|
|
'extension.xpi',
|
|
|
|
'extension.crx',
|
|
|
|
'fimfic2epub.safariextension/'
|
|
|
|
]))
|
2016-06-21 09:04:08 +12:00
|
|
|
|
|
|
|
// Main tasks
|
|
|
|
gulp.task('webpack', webpackTask)
|
2016-06-21 21:32:49 +12:00
|
|
|
gulp.task('watch:webpack', () => {
|
|
|
|
return watch(['src/**/*.js', 'src/**/*.styl'], watchOpts, function () {
|
|
|
|
return sequence('webpack')
|
2016-06-21 18:39:26 +12:00
|
|
|
})
|
2016-06-21 09:04:08 +12:00
|
|
|
})
|
|
|
|
|
|
|
|
gulp.task('lint', () => {
|
2016-08-15 21:11:20 +12:00
|
|
|
return gulp.src(['gulpfile.babel.js', 'webpack.config.babel.js', 'src/**/*.js', 'bin/fimfic2epub']).pipe(lintPipe())
|
2016-06-21 09:04:08 +12:00
|
|
|
})
|
|
|
|
gulp.task('watch:lint', () => {
|
2016-11-29 01:59:04 +13:00
|
|
|
return watch(['src/**/*.js', 'gulpfile.babel.js', 'webpack.config.babel.js', 'bin/fimfic2epub'], watchOpts, function (file) {
|
2016-06-21 18:39:26 +12:00
|
|
|
gulp.src(file.path).pipe(lintPipe())
|
|
|
|
})
|
2016-06-21 09:04:08 +12:00
|
|
|
})
|
|
|
|
|
|
|
|
// Default task
|
|
|
|
gulp.task('default', (done) => {
|
2016-06-21 21:32:49 +12:00
|
|
|
sequence('clean', ['webpack', 'lint'], done)
|
2016-06-21 09:04:08 +12:00
|
|
|
})
|
|
|
|
|
|
|
|
// Watch task
|
|
|
|
gulp.task('watch', (done) => {
|
2016-06-21 21:32:49 +12:00
|
|
|
sequence('default', ['watch:lint', 'watch:webpack'], done)
|
2016-06-21 18:39:26 +12:00
|
|
|
})
|
2016-06-22 01:19:36 +12:00
|
|
|
|
|
|
|
// creates extensions for chrome and firefox
|
|
|
|
gulp.task('pack', (done) => {
|
2016-06-23 18:57:49 +12:00
|
|
|
sequence(['pack:firefox', 'pack:chrome', 'pack:safari'], done)
|
2016-06-22 01:19:36 +12:00
|
|
|
})
|
|
|
|
|
|
|
|
gulp.task('pack:firefox', () => {
|
|
|
|
let manifest = filter('extension/manifest.json', {restore: true})
|
|
|
|
|
|
|
|
return gulp.src('extension/**/*')
|
|
|
|
.pipe(manifest)
|
|
|
|
.pipe(jsonedit(function (json) {
|
|
|
|
if (json.content_scripts) {
|
2016-06-23 01:43:25 +12:00
|
|
|
// tweak the manifest so Firefox can read it
|
2016-06-22 01:19:36 +12:00
|
|
|
json.applications = {
|
|
|
|
gecko: {
|
|
|
|
id: 'fimfic2epub@mozilla.org'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
delete json.background.persistent
|
|
|
|
}
|
|
|
|
return json
|
|
|
|
}))
|
|
|
|
.pipe(manifest.restore)
|
|
|
|
.pipe(zip('extension.xpi'))
|
|
|
|
.pipe(gulp.dest('./'))
|
|
|
|
})
|
|
|
|
|
|
|
|
gulp.task('pack:chrome', (done) => {
|
|
|
|
execFile('./packchrome.sh', [], (error, stdout, stderr) => {
|
|
|
|
// gutil.log('[pack:chrome]', stdout)
|
2017-05-26 20:56:16 +12:00
|
|
|
if (error) {
|
2016-06-22 01:19:36 +12:00
|
|
|
done(new gutil.PluginError('pack:chrome', stderr, {showStack: false}))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
done()
|
|
|
|
})
|
|
|
|
})
|
2016-06-23 01:43:25 +12:00
|
|
|
|
|
|
|
gulp.task('pack:safari', (done) => {
|
2016-08-15 21:11:20 +12:00
|
|
|
exec('rm -rf fimfic2epub.safariextension/; cp -r extension/ fimfic2epub.safariextension', [], (error, stdout, stderr) => {
|
2016-06-23 01:43:25 +12:00
|
|
|
// gutil.log('[pack:chrome]', stdout)
|
|
|
|
if (error || stderr) {
|
|
|
|
done(new gutil.PluginError('pack:safari', stderr, {showStack: false}))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
done()
|
|
|
|
})
|
|
|
|
})
|