var gulp = require('gulp'); var rename = require('gulp-rename'); var uglify = require('gulp-uglify'); var concat = require('gulp-concat'); var replace = require('gulp-replace'); // var mochaPhantomJS = require('gulp-mocha-phantomjs'); var jsdoc = require('gulp-jsdoc3'); var connect = require('gulp-connect'); var jscpd = require('gulp-jscpd'); var eslint = require('gulp-eslint'); var gutil = require('gulp-util'); var ts = require('gulp-typescript'); var fs = require('fs'); var NodeParams = fs .readFileSync('./resources/doc-includes/NodeParams.txt') .toString(); var ContainerParams = fs .readFileSync('./resources/doc-includes/ContainerParams.txt') .toString(); var ShapeParams = fs .readFileSync('./resources/doc-includes/ShapeParams.txt') .toString(); var conf = require('./package.json'); var sourceFiles = [ // core 'src/Global.js', 'src/Util.js', 'src/Canvas.js', 'src/Context.js', 'src/Factory.js', 'src/Node.js', // filters 'src/filters/Grayscale.js', 'src/filters/Brighten.js', 'src/filters/Invert.js', 'src/filters/Blur.js', 'src/filters/Mask.js', 'src/filters/RGB.js', 'src/filters/RGBA.js', 'src/filters/HSV.js', 'src/filters/HSL.js', 'src/filters/Emboss.js', 'src/filters/Enhance.js', 'src/filters/Posterize.js', 'src/filters/Noise.js', 'src/filters/Pixelate.js', 'src/filters/Threshold.js', 'src/filters/Sepia.js', 'src/filters/Solarize.js', 'src/filters/Kaleidoscope.js', 'src/filters/Contrast.js', // core 'src/Container.js', 'src/Shape.js', 'src/Stage.js', 'src/BaseLayer.js', 'src/Layer.js', 'src/FastLayer.js', 'src/Group.js', 'src/Animation.js', 'src/Tween.js', 'src/DragAndDrop.js', // shapes 'src/shapes/Rect.js', 'src/shapes/Circle.js', 'src/shapes/Ellipse.js', 'src/shapes/Ring.js', 'src/shapes/Wedge.js', 'src/shapes/Arc.js', 'src/shapes/Image.js', 'src/shapes/Text.js', 'src/shapes/Line.js', 'src/shapes/Sprite.js', 'src/shapes/Path.js', 'src/shapes/TextPath.js', 'src/shapes/RegularPolygon.js', 'src/shapes/Star.js', 'src/shapes/Label.js', 'src/shapes/Arrow.js', 'src/shapes/Transformer.js' ]; var tsProject = ts.createProject('tsconfig.json'); function build() { return gulp .src(['./dist/konva.js']) .pipe(replace('@@shapeParams', ShapeParams)) .pipe(replace('@@nodeParams', NodeParams)) .pipe(replace('@@containerParams', ContainerParams)) .pipe(replace('@@version', conf.version)) .pipe(replace('@@date', new Date().toDateString())); } // create development build gulp.task('dev-build', function() { return build().pipe(gulp.dest('./dist/')); }); // create usual build konva.js and konva.min.js gulp.task('build', function() { return build() .pipe(rename('konva.js')) .pipe(gulp.dest('./')) .pipe(uglify({ output: { comments: /^!|@preserve|@license|@cc_on/i } })) .on('error', function(err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) .pipe(rename('konva.min.js')) .pipe(gulp.dest('./')); }); // local server for better development gulp.task('server', function() { connect.server(); }); // lint files gulp.task('lint', function() { return ( gulp .src('./src/**/*.js') .pipe( eslint({ configFile: './.eslintrc' }) ) // eslint.format() outputs the lint results to the console. // Alternatively use eslint.formatEach() (see Docs). .pipe(eslint.format()) // To have the process exit with an error code (1) on // lint error, return the stream and pipe to failOnError last. .pipe(eslint.failOnError()) ); }); // check code for duplication gulp.task('inspect', function() { return gulp.src('./src/**/*.js').pipe( jscpd({ 'min-lines': 10, verbose: true }) ); }); // // generate documentation gulp.task('api', function() { return gulp.src('./konva.js').pipe( jsdoc({ opts: { destination: './api' } }) ); }); gulp.task('watch', function() { gulp.watch(['src/**/*.js'], ['dev-build']); }); gulp.task('default', ['dev-build', 'watch', 'server']);