Plato on Github
Report Home
scripts.js
Maintainability
65.44
Lines of code
192
Difficulty
20.82
Estimated Errors
1.83
Function weight
By Complexity
By SLOC
'use strict'; var gulp = require('gulp'); 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', ], minify: { root: 'src' }, 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 task = { desc: 'Optimize and minify scripts to build folder', subtasks: [{ name: 'jshint', callback: jshint },{ name: 'analysis', callback: analysis, desc: 'Generate a code quality report', forceBundle: false },{ name: 'tmp', callback: tmp, forceRun: true },{ name: 'directives', callback: directives },{ name: 'test-dev', callback: testDev },{ name: 'build', callback: build },{ name: 'test-build', callback: testBuild },{ name: 'bundle', callback: bundle },{ name: 'clean-tmp', callback: del.bind(null, [settings.dest.tmp]), forceRun: true }] }; //////////////// // Lint JavaScript function jshint() { return gulp.src(settings.srcs) .pipe($.jshint()) .pipe($.jshint.reporter('jshint-stylish')) .pipe($.jshint.reporter('fail')) .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 () { done(); }; plato.inspect(settings.srcs, settings.reports, options, callback); } // Copy to tmp function tmp() { return gulp.src(settings.srcs) .pipe(gulp.dest(settings.dest.tmp)) .pipe($.size({title: 'scripts:tmp'})); } // Directives template change function directives() { return gulp.src('./tmp/**/directives/*.js') .pipe($.directiveReplace(settings.minify)) .pipe(gulp.dest(settings.dest.tmp)) .pipe($.size({title: 'scripts:directives'})); } // Test dev function testDev() { 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() { 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() { 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() { if (!settings.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 task; } module.exports = scripts;