diff options
Diffstat (limited to 'src/third_party/wiredtiger/tools/wtstats/template/gulpfile.js')
-rw-r--r-- | src/third_party/wiredtiger/tools/wtstats/template/gulpfile.js | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/tools/wtstats/template/gulpfile.js b/src/third_party/wiredtiger/tools/wtstats/template/gulpfile.js new file mode 100644 index 00000000000..d2da47ec388 --- /dev/null +++ b/src/third_party/wiredtiger/tools/wtstats/template/gulpfile.js @@ -0,0 +1,162 @@ +var gulp = require('gulp'), + jade = require('gulp-jade'), + less = require('gulp-less'), + uglify = require('gulp-uglify'), + uglifycss = require('gulp-uglifycss'), + watchify = require('watchify'), + livereload = require('gulp-livereload'), + buffer = require('vinyl-buffer'), + notifier = require('node-notifier'), + browserify = require('browserify'), + packify = require('packify'), + source = require('vinyl-source-stream'), + jadeify = require('jadeify'), + prettyTime = require('pretty-hrtime'), + gutil = require('gulp-util'), + fs = require('fs'); + +var DEBUG = false; +var BUILD = './build'; + +/** + * Helper for catching error events on vinyl-source-stream's and showing + * a nice native notification and printing a cleaner error message to + * the console. + */ +function createErrorNotifier(titlePrefix) { + return function(err) { + var title = titlePrefix + ' error', + message = err.message; + + if (err.fileName) { + var filename = err.fileName.replace(__dirname + '/', ''); + title = titlePrefix + ' error' + filename; + } + + if (err.lineNumber) { + message = err.lineNumber + ': ' + err.message.split(' in file ')[0].replace(/`/g, '"'); + } + + notifier.notify({ + title: title, + message: message + }); + console.log(err); + gutil.log(gutil.colors.red.bold(title), message); + }; +} + +gulp.task('default', ['static', 'templates', 'styles', 'fonts', 'js']); + +gulp.task('js', function() { + var b = browserify({ + entries: ['./app/index.js'], + debug: DEBUG + }) + .transform(jadeify) + .bundle() + .pipe(source('index.js')); + + // Uglify for compression if not in DEBUG. + if (!DEBUG) { + return b.pipe(buffer()) + .pipe(uglify({mangle: { except: ["data"] }})) + .pipe(gulp.dest(BUILD)); + } else { + return b.pipe(gulp.dest(BUILD)); + } +}); + +gulp.task('watch', function() { + livereload.listen(); + + gulp.watch(['app/less/{*,**/*}.less'], ['styles']); + gulp.watch(['app/index.jade'], ['templates']); + + gulp.watch([BUILD + '/index.js', BUILD + '/css/index.css']) + .on('change', livereload.changed); + + /** + * Gulp's [fast browserify builds recipe](http://git.io/iiCk-A) + */ + var bundler = watchify(browserify('./app/index.js', { + cache: {}, + packageCache: {}, + fullPaths: true, + debug: DEBUG + + })) + .transform('jadeify') + .on('update', rebundle); + + function rebundle() { + var start = process.hrtime(); + gutil.log('Starting', '\'' + gutil.colors.cyan('rebundle') + '\'...'); + return bundler.bundle() + .on('error', createErrorNotifier('js')) + .pipe(source('index.js')) + .pipe(gulp.dest(BUILD)) + .on('end', function() { + var time = prettyTime(process.hrtime(start)); + gutil.log('Finished', '\'' + gutil.colors.cyan('rebundle') + '\'', + 'after', gutil.colors.magenta(time)); + }); + } + + return rebundle(); +}); + +gulp.task('templates', function() { + gulp.src('./app/index.jade') + .pipe(jade()) + .pipe(gulp.dest(BUILD)); +}); + +gulp.task('fonts', function() { + return gulp.src('node_modules/font-awesome/fonts/fontawesome-webfont*') + .pipe(gulp.dest(BUILD + '/fonts')); +}); + +gulp.task('styles', function() { + var opts = { + compress: true, + paths: [ + 'less', + 'node_modules', + 'node_modules/font-awesome/less', + 'node_modules/bootstrap/less' + ] + }; + return gulp.src('./app/less/index.less') + .pipe(less(opts)) + .pipe(uglifycss()) + .pipe(gulp.dest(BUILD + '/css')); +}); + +/** + * 'gulp pack' will build all targets, then run packify to bundle everything into + * a single .html file, and save this template in the templates directory. + */ +gulp.task('pack', ['default'], function() { + process.chdir('./' + BUILD) + var opts = { + html: fs.readFileSync('index.html', 'utf8') + } + packify(opts, function (err, packed) { + if (err) return console.error(err); + fs.writeFileSync('../wtstats.html.template', packed); + }); +}); + + +/** + * Copies all static asset files into `BUILD`. + */ +gulp.task('static', [ + 'copy images' +]); + +gulp.task('copy images', function() { + return gulp.src('./assets/img/*') + .pipe(gulp.dest(BUILD + '/img')); +}); |