AZaviruha/react-form-generator

View on GitHub
gulpfile.js

Summary

Maintainability
C
7 hrs
Test Coverage
var gulp       = require( 'gulp' )
  , react      = require( 'gulp-react' )
  , uglify     = require( 'gulp-uglify' )
  , concat     = require( 'gulp-concat' )
  , replace    = require( 'gulp-replace' )
  , insert     = require( 'gulp-insert' )
  , browserify = require( 'gulp-browserify' )
  , shell      = require( 'gulp-shell' )
  , path       = require( 'path' )
  , karma      = require( 'karma' ).server;


// ===========================================================//
// ======================== React ============================//
// ===========================================================//
/**
 * Compiles all jsx primitives' renderers.
 */
gulp.task( 'compile-primitives', function () {
    return gulp
        .src( 'src/components/primitives/*.jsx' ) 
        .pipe( react() ) 
        .pipe( gulp.dest( 'src/components/compiled/primitives/' ) );
});


/**
 * Compiles all jsx layouts' renderers
 */
gulp.task( 'compile-layouts', function () {
    return gulp
        .src( 'src/components/layouts/*.jsx' ) 
        .pipe( react() ) 
        .pipe( gulp.dest( 'src/components/compiled/layouts/' ) );
});


/**
 * Compiles all jsx components. 
 */
gulp.task( 'compile-components', 
           [ 'compile-primitives', 'compile-layouts' ], function () 
{
    return gulp
        .src( 'src/components/*.jsx' ) 
        .pipe( react() ) 
        .pipe( gulp.dest( 'src/components/compiled/' ) );
});


// ===========================================================//
// ======================== <script/> ========================//
// ===========================================================//

/**
 * Builds version for "<script/>"
 */
gulp.task( 'build-min-global', [ 'compile-components' ], function () {
    return gulp
        .src( 'src/components/compiled/generated-form.js' ) 
        .pipe( replace("require( 'react' )", 
                       'window.React'))
        .pipe( browserify() )
        .pipe( replace( 'module.exports = formGenerator', 
                        'window.FormGenerator = formGenerator'))
        .pipe( uglify() )
        .pipe( concat( 'react-form-generator.global.min.js' ) )
        .pipe( gulp.dest( 'dist/' ) );
});


// ===========================================================//
// ======================== Demo =============================//
// ===========================================================//

/**
 * To build "browserify" demo, execute
 * `gulp build-demo`
 */
gulp.task( 'build-demo', [ 'compile-components' ], function () {
    return gulp.src( 'demo/client/js/main.js' )
               .pipe( react() )
               .pipe( browserify() )
               .pipe( concat( 'bundle.js' ) )
               .pipe( gulp.dest( 'demo/client/js/' ) );
});


/**
 * To build "global script" demo, execute
 * `gulp build-demo2`
 */
gulp.task( 'copy-global-fg', [ 'build-min-global' ], function () {
    return gulp.src( 'dist/*.js' )
               .pipe( gulp.dest( 'demo/client/js/' ) );
});
gulp.task( 'copy-global-react', function () {
    return gulp.src( 'node_modules/react/dist/react.js' )
               .pipe( gulp.dest( 'demo/client/js/' ) );
});
gulp.task( 'build-demo2', 
           [ 'copy-global-react', 'copy-global-fg', 
             'compile-components' ], function () {
    return gulp.src( 'demo/client/js/main2.js' )
               .pipe( react() )
               .pipe( browserify() )
               .pipe( concat( 'bundle2.js' ) )
               .pipe( gulp.dest( 'demo/client/js/' ) );
});


/**
 * To run demo, execute
 * `gulp demo`
 */
gulp.task( 'demo' , [ 'build-demo' ], shell.task([
    'node ' + path.normalize( './app.js' )
], { cwd: './demo/' }));


// ===========================================================//
// ======================== Tests ============================//
// ===========================================================//

/**
 * Builds test specs.
 */
gulp.task( 'compile-components-tests', [ 'compile-components' ], function () {
    return gulp.src( 'spec/components/primitives/*.jsx' )
               .pipe( react() )
               .pipe( gulp.dest( 'spec/compiled/tmp/' ) );
});

gulp.task( 'build-component-tests', [ 'compile-components-tests' ], function () {
    return gulp.src( 'spec/compiled/tmp/*.js' )
               .pipe( browserify() )
               .pipe( gulp.dest( 'spec/compiled/primitives/' ) );
});


gulp.task( 'build-tools-tests', function () {
    return gulp.src( 'spec/tools/*.js' )
               .pipe( browserify() )
               .pipe( gulp.dest( 'spec/compiled/tools/' ) );
});


gulp.task( 'build-validation-tests', function () {
    return gulp.src( 'spec/validation/*.js' )
               .pipe( browserify() )
               .pipe( gulp.dest( 'spec/compiled/validation/' ) );
});


var testDeps = [ 'build-component-tests'
               , 'build-tools-tests'
               , 'build-validation-tests'
               ];
/**
 * Runs unit-tests.
 */
gulp.task( 'test', testDeps, function ( done ) {
    karma.start({
        configFile: __dirname + '/karma.conf.js'
    }, done );
});


// ===========================================================//
// ======================== Watchers =========================//
// ===========================================================//

gulp.task( 'watch', [ 'build-demo' ], function() {
    gulp.watch( './src/components/primitives/*.jsx', [ 'build-demo' ] );
    gulp.watch( './src/components/layouts/*.jsx', [ 'build-demo' ] );
    gulp.watch( './src/components/*.jsx', [ 'build-demo' ] );
    gulp.watch( './src/validation/*.js', [ 'build-demo' ] );
    gulp.watch( './src/tools/*.js', [ 'build-demo' ] );

    // tests
    gulp.watch( './spec/components/**/*.jsx', [ 'test' ] );
    gulp.watch( './spec/tools/*.js', [ 'test' ] );
    gulp.watch( './spec/validation/*.js', [ 'test' ] );
});