import BrowserReload = require("./tasks/browserReload"); import Bump = require("./tasks/bump"); import CopyFiles = require("./tasks/copyFiles"); import CleanNode = require("./tasks/cleanNode"); import CleanJavaScript = require("./tasks/cleanJavaScript"); import CleanCss = require("./tasks/cleanCss"); import CleanHtml = require("./tasks/cleanHtml"); import CompileTestHtml = require("./tasks/compileTestHtml"); import CompileTestJavaScript = require("./tasks/compileTestJavaScript"); import CompileCss = require("./tasks/compileCss"); import CompileHtml = require("./tasks/compileHtml"); import CompileJavaScript = require("./tasks/compileJavaScript"); import CompileJst = require("./tasks/compileJst"); import CompileAngular = require("./tasks/compileAngular"); import CompileExpress = require("./tasks/compileExpress"); import CoveragePlato = require("./tasks/coveragePlato"); import Watcher = require("./tasks/watcher"); import KarmaRunner = require("./tasks/karmaRunner"); import MochaRunner = require("./tasks/mochaRunner"); declare function require(name:string); var _ = require("lodash"); var gulp = require("gulp"); var gutil = require('gulp-util'); var taskListing = require('gulp-task-listing'); var argv = require('yargs').argv; var ChangeEvent = require('./tasks/helpers/changeEvent'); module GulpBuildAutomation { var configuration = {}; function merge(orginal, options) { return _.assign(orginal, options); }; export var changeEvent = ChangeEvent; export var registedModules = { browserReload: BrowserReload, bump: Bump, cleanNode: CleanNode, cleanJavaScript: CleanJavaScript, cleanCss: CleanCss, cleanHtml: CleanHtml, compileTestHtml: CompileTestHtml, compileTestJavaScript: CompileTestJavaScript, compileJavaScript: CompileJavaScript, compileCss: CompileCss, compileHtml: CompileHtml, copyFiles: CopyFiles, compileJst: CompileJst, coveragePlato: CoveragePlato, watcher: Watcher, karmaRunner: KarmaRunner, mochaRunner: MochaRunner, compileAngular: CompileAngular, compileExpress: CompileExpress }; function registerGulpTask(userOptions, config, task, tasks) { if(!task || !task.taskName) { throw new Error('missing task name'); } var deps = []; if(task.dependency && Array.isArray(task.dependency)) { deps = deps.concat(task.dependency); } if(!task.isActive) { gutil.log('gulp task not active', gutil.colors.magenta(task.name)); return; } if(task.async) { gulp.task(task.taskName, deps, function(){ return task.gulp(userOptions, config, task, tasks); }); } else { gulp.task(task.taskName, deps, function(done){ return task.gulp(userOptions, config, task, tasks, done); }); } }; export function config(options: any) { configuration = merge(configuration, options); } export function set(name: any, target) { if(!registedModules[name] || !registedModules[name]) { throw new Error('no task found named: ' + name); } merge(registedModules[name], target); return this; } export function taskListing() { var registerTask = registedModules, tmpTask; for (var taskKey in registerTask) { if(registerTask.hasOwnProperty(taskKey)) { tmpTask = registerTask[taskKey]; gutil.log('gulp task', gutil.colors.magenta(tmpTask.taskName)); } } } export function activate(name: any, isActive) { if(!registedModules[name] || !registedModules[name]) { throw new Error('no task found named: ' + name); } registedModules[name].isActive = isActive; return this; } export function start(userOptions:any) { //check module setting is not empty if(!userOptions || !userOptions.npm) { throw new Error('please provide the correct configuration'); } userOptions.modules = _.assign( userOptions.npm.devDependencies || {}, userOptions.npm.dependencies || {} ); var registerTask = registedModules; var tmpTask = null; var config = null; var tasks = {}; userOptions = merge(configuration, userOptions); for (var taskKey in registerTask) { if(registerTask.hasOwnProperty(taskKey)) { tmpTask = registerTask[taskKey]; config = tmpTask.config(tmpTask, registerTask, userOptions); if(userOptions.tasks && userOptions.tasks[tmpTask.taskName]) { config = _.merge(config, userOptions.tasks[tmpTask.taskName] || {}); } else { config = _.merge(config, tmpTask.templatedConfig || {}); } if(tmpTask.watch) { if(config && config.files) { Watcher.storage[taskKey] = { files: config.files, dependencies: [tmpTask.taskName] }; } } registerGulpTask(userOptions, config, tmpTask, registerTask); } } tmpTask = null; config = null; registerTask = null; gulp.task('help', taskListing); } } export = GulpBuildAutomation;