"use strict"; var gulp = require("gulp"), gutil = require("gulp-util"), plumber = require("gulp-plumber"), bower = require("gulp-bower"), peg = require("gulp-peg"), deploy = require("gulp-gh-pages"), babel = require("gulp-babel"), rename = require("gulp-rename"), uglify = require("gulp-uglify"), minifyCss = require("gulp-minify-css"), minifyHtml = require("gulp-minify-html"), concat = require("gulp-concat"), useref = require("gulp-useref"), gulpif = require("gulp-if"), ngAnnotate = require("gulp-ng-annotate"), ngHtml2Js = require("gulp-ng-html2js"), errLogger = gutil.log.bind(gutil, gutil.colors.red("Error: ")), opts = { buildDir: "build", }; gulp .task("pre", function() { gulp.src(["src/web/**/*.html", "!src/web/index.html", "!src/web/bower_components/**/*"]) .pipe(plumber(errLogger)) .pipe(minifyHtml()) .pipe(ngHtml2Js({ moduleName: function(file) { var pathParts = file.path.split("/"); var prefix = pathParts[pathParts.length - 3]; var moduleName = pathParts[pathParts.length - 2]; return "modellang-ide." + (prefix === "pages" ? "" : prefix + ".") + moduleName; } })) .pipe(concat("templates.min.js")) .pipe(gulp.dest(opts.buildDir + "/web")); return gulp.src("src/web/assets/**/*") .pipe(plumber(errLogger)) .pipe(babel()) .pipe(uglify()) .pipe(gulp.dest(opts.buildDir + "/web/assets")); }) .task("bower", function() { return bower(); }) .task("concat", ["pre", "bower"], function() { var assets = useref.assets(); return gulp.src("src/web/index.html") .pipe(plumber(errLogger)) .pipe(assets) .pipe(gulpif("index.min.js", babel({blacklist: ["useStrict"]}))) .pipe(gulpif("*.css", minifyCss())) .pipe(assets.restore()) .pipe(useref()) .pipe(gulp.dest(opts.buildDir + "/web")); }) .task("parser", function() { return gulp.src("src/lib/parser/modellang.pegjs") .pipe(plumber(errLogger)) .pipe(peg({ exportVar: "modellangParser" })) .pipe(babel({modules: "umd", blacklist: ["useStrict"]})) .pipe(gulp.dest(opts.buildDir + "/lib/parser")) .pipe(rename("modellang-parser.js")) .pipe(uglify()) .pipe(gulp.dest(opts.buildDir + "/web/assets/scripts")); }) .task("generator", function() { return gulp.src("src/lib/generator/modellang.es6") .pipe(plumber(errLogger)) .pipe(babel()) .pipe(gulp.dest(opts.buildDir + "/lib/generator")) .pipe(rename("modellang-gen.js")) .pipe(uglify()) .pipe(gulp.dest(opts.buildDir + "/web/assets/scripts")); }) .task("default", ["parser", "generator"], function() { return; }) .task("build", ["concat", "parser", "generator"], function() { return gulp.src(opts.buildDir + "/web/{index,templates}.min.js") .pipe(plumber(errLogger)) .pipe(concat("index.min.js")) .pipe(ngAnnotate()) .pipe(uglify()) .pipe(gulp.dest(opts.buildDir + "/web")); }) .task("deploy", ["build"], function() { return gulp.src(opts.buildDir + "/web/**/*") .pipe(deploy({ push: gutil.env.nopush ? false : true, })); }) ;