UNPKG

@incdevco/framework

Version:
342 lines (215 loc) 8.6 kB
var path = require('path'); var concat = require('gulp-concat'); var del = require('del'); var es = require('event-stream'); var gulp = require('gulp'); var gulpif = require('gulp-if'); var gutil = require('gulp-util'); var angularTemplateInjection = require('../angular-template-injection'); var order = require('gulp-order'); var Promise = require('bluebird'); var StreamPromise = require('../../stream-promise'); var uglify = require('gulp-uglify'); var Utilities = require('../../utilities'); module.exports = function (config) { 'use strict'; var promise = Promise.resolve(true); config = config || {}; config.base = config.base || ''; config.concat = config.concat || {}; config.dest = config.dest || 'dist/clients'; config.templatesModuleName = config.templatesModuleName || 'main'; config.uglify = config.uglify || false; config.version = config.version || ''; return es.map(function(client, done) { var name = client.path.split('/').reverse()[1]; var src = client.path.replace('/index.html', ''); var dest = config.dest + '/' + name; var base = config.base + '/' + name; var replace; var sw; //console.log('build-angular-client-package'); if (config.replace) { replace = Utilities.copy(config.replace); } if (config.packages && config.packages[name]) { if (config.packages[name].replace) { if (!replace) { replace = {}; } Object.keys(config.packages[name].replace).forEach(function(key) { replace[key] = config.packages[name].replace[key]; }); } if (config.packages[name].sw) { sw = config.packages[name].sw; } } promise = promise.then(function () { return del(dest) .then(function() { //console.log('del'); return Promise.stream(gulp.src(src + '/modules/*') .pipe(es.map(function (module, done) { var name = module.path.split('/').reverse()[0]; es.merge([ gulp.src([ module.path + '/*.js', '!' + module.path + '/*spec*.js' ]), gulp.src(module.path + '/templates/**/*.html') .pipe(angularTemplateInjection(name, 'templates.js', base + '/modules/')) ]) .pipe(order([ 'bootstrap.js' ])) .pipe(concat(name + '.js')) .pipe(es.through(function (file) { done(null, file); })); })) .pipe(concat('modules.js')) .pipe(gulp.dest(dest))); }) .then(function () { //console.log('modules'); return Promise.stream(gulp.src(src + '/templates/**/*.html') .pipe(angularTemplateInjection(config.templatesModuleName, 'templates.js', base + '/')) .pipe(gulp.dest(dest))); }) .then(function () { //console.log('concat'); var files = []; files = files.concat(config.concat.before || []); files.push(dest + '/modules.js'); files.push(src + '/*.js'); if (sw) { files.push('!' + src + '/sw.js'); } files.push('!' + src + '/*spec*.js'); files.push(dest + '/templates.js'); files = files.concat(config.concat.after || []); return Promise.stream(gulp.src(files) .pipe(es.through(function (file) { if (replace) { var contents = file.contents.toString('utf8'); Object.keys(replace).forEach(function (key) { contents = contents.replace(new RegExp(key, 'g'), replace[key]); }); var cloned = new gutil.File({ base: file.base, contents: new Buffer(contents, 'utf8'), path: file.path }); this.emit('data', cloned); } else { this.emit('data', file); } })) .pipe(concat('application.js')) .pipe(es.through(function(file) { var contents = file.contents.toString('utf8'); contents = '(function () {\n\n' + contents + '\n\n})();'; var cloned = new gutil.File({ base: file.base, contents: new Buffer(contents, 'utf8'), path: file.path }); this.emit('data', cloned); })) .pipe(gulpif(config.uglify, uglify())) .pipe(gulp.dest(dest + '/' + config.version))); }) .then(function () { return del([ dest + '/modules.js', dest + '/templates.js' ]); }) .then(function () { return Promise.stream(gulp.src([ src + '/css/**/*' ]) .pipe(gulp.dest(dest + '/' + config.version + '/css'))); }) .then(function () { return Promise.stream(gulp.src([ src + '/images/**/*' ]) .pipe(gulp.dest(dest + '/' + config.version + '/images'))); }) .then(function () { //console.log('copy'); return Promise.stream(gulp.src([ src + '/**/*', '!' + src + '/**/*.js', '!' + src + '/modules/**/*', '!' + src + '/css/**/*', '!' + src + '/images/*', '!' + src + '/templates/**/*' ]) .pipe(es.through(function(file) { var ext = path.extname(file.path); //console.log('ext', ext); if (file.contents && ext === '.html' && replace) { var contents = file.contents.toString('utf8'); Object.keys(replace).forEach(function (key) { contents = contents.replace(new RegExp(key, 'g'), replace[key]); }); var cloned = new gutil.File({ base: file.base, contents: new Buffer(contents, 'utf8'), path: file.path }); this.emit('data', cloned); } else { this.emit('data', file); } })) .pipe(gulp.dest(dest))); }) .then(function () { var promises = []; if (config.include) { Object.keys(config.include).forEach(function(key) { promises.push(Promise.stream(gulp.src(key) .pipe(gulp.dest(dest + '/' + config.version + config.include[key])))); }); } return Promise.all(promises); }) .then(function () { if (sw) { //console.log('sw'); return Promise.stream(gulp.src(src + '/' + sw) .pipe(es.through(function(file) { //console.log('file.path', file.path); if (file.contents && replace) { var contents = file.contents.toString('utf8'); Object.keys(replace).forEach(function (key) { //console.log('file.path', file.path, key); contents = contents.replace(new RegExp(key, 'g'), replace[key]); }); var cloned = new gutil.File({ base: file.base, contents: new Buffer(contents, 'utf8'), path: file.path }); this.emit('data', cloned); } else { this.emit('data', file); } })) .pipe(gulp.dest(dest))); } return true; }) .then(function () { done(); }) .catch(done); }); }); };