var gulp = require('gulp-param')(require('gulp'), process.argv), mocha = require("gulp-mocha"), eslint = require('gulp-eslint'), istanbul = require('gulp-istanbul'), bench = require('gulp-bench'), uglify = require('gulp-uglify'), rimraf = require('gulp-rimraf'), bump = require('gulp-bump'), replace = require('gulp-replace'), rename = require('gulp-rename'), browserify = require('gulp-browserify'), header = require('gulp-header'), SRC = 'index.js', DEST = 'dist', SRC_COMPILED = 'underscore.string.js', MIN_FILE = 'underscore.string.min.js', VERSION_FILES = ['./package.json', './component.json', './bower.json'], VERSION_FILES_JS = [SRC, 'package.js'], package = require('./package.json'), headerText = '/* ' + package.name + ' ' + package.version + ' | ' + package.license + ' licensed | ' + package.homepage + ' */\n\n'; gulp.task('test', ['lint', 'browserify'], function(cov) { var reporters = ['html']; if (cov) { reporters.push('text'); } else { reporters.push('text-summary'); } return gulp.src(['*.js', 'helper/*.js']) .pipe(istanbul()) .pipe(istanbul.hookRequire()) .on('finish', function () { return gulp.src(['tests/*.js']) .pipe(mocha({ ui: 'qunit', reporter: 'dot' })) .pipe(istanbul.writeReports({ reporters: reporters })); }); }); gulp.task('lint', function() { var toLint = [ '**/*.js', '!gulpfile.js', '!meteor-*.js', '!package.js', '!dist/**', '!coverage/**', '!node_modules/**' ]; return gulp.src(toLint) .pipe(eslint({ fix: true })) .pipe(eslint.format()) .pipe(eslint.failAfterError()); }); gulp.task('bench', ['browserify'], function(func) { func = func || '*'; return gulp.src('bench/'+ func + '.js') .pipe(bench()); }); gulp.task('browserify', function() { return gulp.src(SRC) .pipe(browserify({ detectGlobals: true, standalone: 's' })) .pipe(header(headerText)) .pipe(rename('underscore.string.js')) .pipe(gulp.dest(DEST)); }); gulp.task('clean', function() { return gulp.src(DEST) .pipe(rimraf()); }); gulp.task('bump-in-js', function(semver) { return gulp.src(VERSION_FILES_JS) .pipe(replace(/(version?\s?=?\:?\s\')([\d\.]*)\'/gi, '$1' + semver + "'")) .pipe(gulp.dest('./')); }); // usage: gulp bump -s <% Version %> // usage: gulp bump --semver <% Version %> gulp.task('bump', ['bump-in-js'], function(semver) { if (typeof semver !== 'string' || semver.length <= 0) { console.error('pass a new version `gulp bump --semver 2.4.1`'); process.exit(1); } return gulp.src(VERSION_FILES) .pipe(bump({ version: semver })) .pipe(gulp.dest('./')); }); gulp.task('build', ['test', 'clean'], function() { gulp.src(DEST + '/' + SRC_COMPILED) .pipe(uglify()) .pipe(header(headerText)) .pipe(rename(MIN_FILE)) .pipe(gulp.dest(DEST)); });