123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- 'use strict';
- var gulp = require('gulp');
- var eslint = require('gulp-eslint');
- var file = require('gulp-file');
- var rename = require('gulp-rename');
- var replace = require('gulp-replace');
- var streamify = require('gulp-streamify');
- var uglify = require('gulp-uglify');
- var gutil = require('gulp-util');
- var zip = require('gulp-zip');
- var karma = require('karma');
- var merge = require('merge2');
- var path = require('path');
- var rollup = require('rollup-stream');
- var source = require('vinyl-source-stream');
- var {exec} = require('mz/child_process');
- var pkg = require('./package.json');
- var argv = require('yargs')
- .option('output', {alias: 'o', default: 'dist'})
- .option('samples-dir', {default: 'samples'})
- .option('docs-dir', {default: 'docs'})
- .option('www-dir', {default: 'www'})
- .argv;
- function watch(glob, task, done) {
- gutil.log('Waiting for changes...');
- return gulp.watch(glob, task)
- .on('end', done)
- .on('change', function(e) {
- gutil.log('Changes detected for', path.relative('.', e.path), '(' + e.type + ')');
- });
- }
- gulp.task('default', ['build']);
- gulp.task('build', function(done) {
- var out = argv.output;
- var task = function() {
- return rollup('rollup.config.js')
- .pipe(source(pkg.name + '.js'))
- .pipe(gulp.dest(out))
- .pipe(rename(pkg.name + '.min.js'))
- .pipe(streamify(uglify({output: {comments: 'some'}})))
- .pipe(gulp.dest(out));
- };
- return argv.watch
- ? [task(), watch('src/**/*.js', task, done)]
- : task();
- });
- gulp.task('test', function(done) {
- new karma.Server({
- configFile: path.join(__dirname, 'karma.config.js'),
- singleRun: !argv.watch,
- args: {
- coverage: !!argv.coverage,
- inputs: argv.inputs
- ? argv.inputs.split(';')
- : ['test/specs/**/*.js']
- }
- },
- function(error) {
- // https://github.com/karma-runner/gulp-karma/issues/18
- error = error ? new Error('Karma returned with the error code: ' + error) : undefined;
- done(error);
- }).start();
- });
- gulp.task('lint', function() {
- var files = [
- 'samples/**/*.js',
- 'src/**/*.js',
- 'test/**/*.js',
- '*.js'
- ];
- return gulp.src(files)
- .pipe(eslint())
- .pipe(eslint.format())
- .pipe(eslint.failAfterError());
- });
- gulp.task('docs', function(done) {
- var script = require.resolve('gitbook-cli/bin/gitbook.js');
- var out = path.join(argv.output, argv.docsDir);
- var cmd = process.execPath;
- exec([cmd, script, 'install', './'].join(' ')).then(() => {
- return exec([cmd, script, argv.watch ? 'serve' : 'build', './', out].join(' '));
- }).then(() => {
- done();
- }).catch((err) => {
- done(new Error(err.stdout || err));
- });
- });
- gulp.task('samples', function() {
- // since we moved the dist files one folder up (package root), we need to rewrite
- // samples src="../dist/ to src="../ and then copy them in the /samples directory.
- var out = path.join(argv.output, argv.samplesDir);
- return gulp.src('samples/**/*', {base: 'samples'})
- .pipe(streamify(replace(/src="((?:\.\.\/)+)dist\//g, 'src="$1', {skipBinary: true})))
- .pipe(gulp.dest(out));
- });
- gulp.task('package', ['build', 'samples'], function() {
- var out = argv.output;
- var streams = merge(
- gulp.src(path.join(out, argv.samplesDir, '**/*'), {base: out}),
- gulp.src([path.join(out, '*.js'), 'LICENSE.md'])
- );
- return streams
- .pipe(zip(pkg.name + '.zip'))
- .pipe(gulp.dest(out));
- });
- gulp.task('netlify', ['build', 'docs', 'samples'], function() {
- var root = argv.output;
- var out = path.join(root, argv.wwwDir);
- var streams = merge(
- gulp.src(path.join(root, argv.docsDir, '**/*'), {base: path.join(root, argv.docsDir)}),
- gulp.src(path.join(root, argv.samplesDir, '**/*'), {base: root}),
- gulp.src(path.join(root, '*.js'))
- );
- return streams
- .pipe(streamify(replace(/https?:\/\/chartjs-plugin-datalabels\.netlify\.com\/?/g, '/', {skipBinary: true})))
- .pipe(gulp.dest(out));
- });
- gulp.task('bower', function() {
- var json = JSON.stringify({
- name: pkg.name,
- description: pkg.description,
- homepage: pkg.homepage,
- license: pkg.license,
- version: pkg.version,
- main: argv.output + '/' + pkg.name + '.js'
- }, null, 2);
- return file('bower.json', json, {src: true})
- .pipe(gulp.dest('./'));
- });
- // Workaround: Gulp process does not end because of karma/node process hanging
- // https://github.com/sindresorhus/gulp-mocha/issues/1#issuecomment-55710159
- // https://github.com/karma-runner/karma/issues/2867
- gulp.doneCallback = function(err) {
- // eslint-disable-next-line no-process-exit
- process.exit(err ? 1 : 0);
- };
|