UNPKG

bardjs

Version:

Spec helpers for testing angular v.1.x apps with Mocha, Jasmine or QUnit

187 lines (169 loc) 5.08 kB
var gulp = require('gulp'); var args = require('yargs').argv; var config = require('./gulp.config')().getConfig(); var del = require('del'); var glob = require('glob'); var _ = require('lodash'); var path = require('path'); var $ = require('gulp-load-plugins')({lazy: true}); var colors = $.util.colors; var env = $.util.env; /** * List the available gulp tasks */ gulp.task('help', $.taskListing); gulp.task('default', ['help']); /** * Lint the code, create coverage report, and a visualizer * @return {Stream} */ gulp.task('vet', function() { log('Analyzing source with JSHint and JSCS'); return gulp .src(config.js) .pipe($.if(env.verbose, $.print())) .pipe($.jshint.reporter('jshint-stylish')) .pipe($.jscs()); }); /** * Bump the version * --type=pre will bump the prerelease version *.*.*-x * --type=patch or no flag will bump the patch version *.*.x * --type=minor will bump the minor version *.x.* * --type=major will bump the major version x.*.* * --version=1.2.3 will bump to a specific version and ignore other flags */ gulp.task('bump', function() { var msg = 'Bumping versions'; var type = args.type; var version = args.ver; var options = {}; if (version) { options.version = version; msg += ' to ' + version; } else { options.type = type; msg += ' for a ' + type; } log(msg); return gulp .src(config.packages) .pipe($.print()) .pipe($.bump(options)) .pipe(gulp.dest(config.root)); }); /** * Build everything */ gulp.task('build', ['clean'], function(done) { log('Optimizing the js, css, and html'); var stream = gulp .src(config.js) .pipe(getHeader()) .pipe(gulp.dest(config.build)) .pipe($.uglify()) .pipe(getHeader()) .pipe($.rename('bard.min.js')) .pipe(gulp.dest(config.build)) .on('end', success) .on('error', error); function error(err) { log(err); done(err); } function success() { var msg = { title: 'gulp build', message: 'Deployed to the dist folder' }; log(msg); notify(msg); done(); } }); /** * Remove all files from the build, temp, and reports folders * @param {Function} done - callback when complete */ gulp.task('clean', function(done) { var delconfig = [].concat(config.build, config.report); log('Cleaning: ' + $.util.colors.blue(delconfig)); del(delconfig, done); }); /** * Delete all files in a given path * @param {Array} path - array of paths to delete * @param {Function} done - callback when complete */ function clean(path, done) { log('Cleaning: ' + $.util.colors.blue(path)); del(path, done); } /** * Formatter for bytediff to display the size changes after processing * @param {Object} data - byte data * @return {String} Difference in bytes, formatted */ function bytediffFormatter(data) { var difference = (data.savings > 0) ? ' smaller.' : ' larger.'; return data.fileName + ' went from ' + (data.startSize / 1000).toFixed(2) + ' kB to ' + (data.endSize / 1000).toFixed(2) + ' kB and is ' + formatPercent(1 - data.percent, 2) + '%' + difference; } /** * Format a number as a percentage * @param {Number} num Number to format as a percent * @param {Number} precision Precision of the decimal * @return {String} Formatted perentage */ function formatPercent(num, precision) { return (num * 100).toFixed(precision); } /** * Format and return the header for files * @return {String} Formatted file header */ function getHeader() { var pkg = require('./package.json'); var template = ['/**', ' * <%= pkg.name %> - <%= pkg.description %>', ' * @authors <%= pkg.authors %>', ' * @version v<%= pkg.version %>', ' * @link <%= pkg.homepage %>', ' * @license <%= pkg.license %>', ' */', '' ].join('\n'); return $.header(template, { pkg: pkg }); } /** * Log a message or series of messages using chalk's blue color. * Can pass in a string, object or array. */ function log(msg) { if (typeof(msg) === 'object') { for (var item in msg) { if (msg.hasOwnProperty(item)) { $.util.log($.util.colors.blue(msg[item])); } } } else { $.util.log($.util.colors.blue(msg)); } } /** * Show OS level notification using node-notifier */ function notify(options) { var notifier = require('node-notifier'); var notifyOptions = { sound: 'Bottle', contentImage: path.join(__dirname, 'gulp.png'), icon: path.join(__dirname, 'gulp.png') }; _.assign(notifyOptions, options); notifier.notify(notifyOptions); }