Plato on Github
Report Home
scripts.js
Maintainability
66.57
Lines of code
203
Difficulty
22.75
Estimated Errors
1.82
Function weight
By Complexity
By SLOC
'use strict'; var gulp = require('gulp'); var runSequence = require('run-sequence'); var plato = require('plato'); var del = require('del'); var _ = require('lodash'); var fs = require('fs'); var path = require('path'); var $ = require('gulp-load-plugins')({ config: path.normalize(__dirname + '/../package.json') }); var config = { name: 'project', srcs: [ './src/modules/**/*.module.js', './src/modules/**/*.js', ], tests: { shared: [ './lib/angular/angular.js', './lib/angular-mocks/angular-mocks.js' ], libs: [], files: [ './test/**/*.spec.js', './src/modules/**/*.spec.js' ] }, bundle: [], reports: './reports/quality', dest: { tmp: './tmp', js: './build/js' } }; function scripts(options) { var settings = _.extend(config, options); var tasks = [{ name: 'scripts', desc: 'Optimize and minify scripts to build folder', callback: runner },{ name: 'scripts:jshint', callback: jshint },{ name: 'scripts:analysis', callback: analysis },{ name: 'scripts:tmp', callback: tmp },{ name: 'scripts:directives', callback: directives },{ name: 'scripts:test-dev', callback: testDev },{ name: 'scripts:build', callback: build },{ name: 'scripts:test-build', callback: testBuild },{ name: 'scripts:bundle', callback: bundle },{ name: 'scripts:clean-tmp', callback: del.bind(null, [settings.dest.tmp]) }]; //////////////// function runner(done) { runSequence( 'scripts:jshint', 'scripts:analysis', 'scripts:tmp', 'scripts:directives', 'scripts:test-dev', 'scripts:build', 'scripts:test-build', 'scripts:bundle', 'scripts:clean-tmp', done ); } // Lint JavaScript function jshint(done) { return gulp.src(settings.srcs) .pipe($.jshint()) .pipe($.jshint.reporter('jshint-stylish')) .pipe($.size({title: 'scripts:jshint'})); } // Analysis Report function analysis(done) { var options = {}; var jshint = (fs.existsSync('./.jshintrc')) ? fs.readFileSync('./.jshintrc', 'utf8') : false; if (jshint) { options.jshint = JSON.parse(jshint); } var callback = function (report) { done(); }; plato.inspect(settings.srcs, settings.reports, options, callback); } // Copy to tmp function tmp(done) { return gulp.src(settings.srcs) .pipe(gulp.dest(settings.dest.tmp)) .pipe($.size({title: 'scripts:tmp'})); } // Directives template change function directives(done) { return gulp.src('./tmp/**/directives/*.js') .pipe($.directiveReplace({root: 'src'})) .pipe(gulp.dest(settings.dest.tmp)) .pipe($.size({title: 'scripts:directives'})); } // Test dev function testDev(done) { var testFiles = settings.tests.shared; testFiles = testFiles.concat(settings.tests.libs); testFiles = testFiles.concat(settings.tests.files); testFiles = testFiles.concat(settings.srcs); return gulp.src(testFiles) .pipe($.karma({ configFile: './test/dev.karma.conf.js', action: 'run' })) .pipe($.size({title: 'scripts:test-dev'})); } // Optimize code function build(done) { return gulp.src([ './tmp/**/*.module.js', './tmp/**/*.js' ]) .pipe($.concat(settings.name+'.js')) .pipe(gulp.dest(settings.dest.js)) .pipe($.uglify({preserveComments:'some'}).on('error', console.error)) .pipe($.rename({ suffix: ".min" })) .pipe(gulp.dest(settings.dest.js)) .pipe($.size({title: 'scripts:build'})); } // Test build function testBuild(done) { var testFiles = settings.tests.shared; testFiles = testFiles.concat(settings.tests.libs); testFiles = testFiles.concat(settings.tests.files); testFiles = testFiles.concat(settings.dest.js + '/' + settings.name+'.min.js'); return gulp.src(testFiles) .pipe($.karma({ configFile: './test/build.karma.conf.js', action: 'run' })) .pipe($.size({title: 'scripts:test-dev'})); } // Bundle function bundle(done) { if (!bundle.length) { return gulp.src('./') .pipe($.size({title: 'scripts:bundle'})); } settings.bundle.push(settings.dest.js+'/'+settings.name+'.js'); return gulp.src(settings.bundle) .pipe($.concat(settings.name+'.bundle.js')) .pipe($.uglify({preserveComments:'some'})) .pipe(gulp.dest(settings.dest.js)) .pipe($.size({title: 'scripts:bundle'})); } //////////////// return tasks; } module.exports = scripts;