/**
 * @file gulpfile.js
 *
 * Defines tasks that can be run on gulp.
 *
 * Summary:
 * <ul>
 *   <li> `test` - an alias for `test:mocha`
 *   <li> `test:mocha` - runs all the tests on node (mocha)
 *   <li> `test:karma` - runs all the tests in the browser (karma)
 *   <li> `build` - generate files needed for browser (browserify)
 *   <li> `build:tests` - generate files needed for testing in the browser
 *   <li> `lint` - run `jshint`
 *   <li> `coveralls` - updates coveralls info
 * </ul>
 */

'use strict';

const gulp = require('gulp');
const shell = require('gulp-shell');
const npmPackage = require('./package.json');

gulp.task(
  'build',
  shell.task([[
    'npx browserify index.js --s bitcoinCash -t [ babelify --presets [ env ] ]', '|',
    `npx uglifyjs --comments -c -o dist/bitcoincashjs.${npmPackage.version}.min.js`,
  ].join(' ')])
);

gulp.task(
  'build:tests',
  shell.task([
    'find test/ -type f -name "*.js" | xargs npx browserify -t brfs -o build/tests.js'
  ])
);

gulp.task(
  'test',
  ['test:mocha']
);

gulp.task(
  'test:mocha',
  shell.task([
    'npx nyc --reporter=html --reporter=text npx mocha',
  ])
);

gulp.task(
  'test:karma',
  ['build:tests'],
  shell.task([
    'npx karma start',
  ])
);

gulp.task(
  'lint',
  shell.task([
    'find index.js gulpfile.js src/ test/ -type f -name "*.js" | xargs npx jshint',
  ])
);

gulp.task(
  'coveralls',
  shell.task([
    'npx nyc report --reporter=text-lcov | npx coveralls',
  ])
);