awayjs-display
Version:
AwayJS displaylist classes
204 lines (172 loc) • 5.85 kB
JavaScript
var gulp = require('gulp');
var glob = require('glob');
var path = require('path');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var transform = require('vinyl-transform');
var exorcist = require('exorcist');
var sourcemaps = require('gulp-sourcemaps');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var watchify = require('watchify');
var livereload = require('gulp-livereload');
var typescript = require('gulp-typescript');
var Builder = require('systemjs-builder');
var shell = require('gulp-shell');
var git = require('gulp-git');
var watch;
gulp.task('package', function(callback){
watch = false;
browserifyShare(callback);
});
gulp.task('package-min', ['package'], function(callback){
return gulp.src('./build/awayjs-display.js')
.pipe(sourcemaps.init({loadMaps:true}))
.pipe(uglify({compress:false}))
.pipe(rename(function (path) {
path.basename += '.min';
}))
.pipe(sourcemaps.write({sourceRoot: '../'}))
.pipe(transform(function() {
return exorcist('./build/awayjs-display.min.js.map');
}))
.pipe(gulp.dest('./build'));
});
gulp.task('package-watch', function(callback){
watch = true;
browserifyShare(callback);
});
gulp.task('watch', ['package-watch'], function(){
//Start live reload server
livereload.listen();
});
gulp.task('tests', function () {
var tsProject = typescript.createProject({
target: 'ES5',
module: 'commonjs',
moduleResolution: 'classic'
});
var tsResult = gulp.src(['./tests/**/*.ts'])
.pipe(sourcemaps.init())
.pipe(typescript(tsProject));
return tsResult.js
.pipe(sourcemaps.write({sourceRoot: './tests'}))
.pipe(gulp.dest('./tests'));
});
function browserifyShare(callback) {
var b = browserify({
debug: true,
entries: './index.ts',
paths: ['../'],
cache: {},
packageCache: {},
fullPaths: false
});
b.plugin('tsify', {target:'ES5', sourceRoot:'../', noExternalResolve: true});
glob('./node_modules/awayjs-**/lib/**/*.ts', {}, function (error, files) {
files.forEach(function (file) {
b.external(file);
});
});
glob('./lib/**/*.ts', {}, function (error, files) {
files.forEach(function (file) {
b.require(file, {expose:unixStylePath(path.relative('../', file.slice(0,-3)))});
});
if (watch) {
b = watchify(b);
b.on('update', function(){
return b.bundle()
.pipe(source('awayjs-display.js'))
.pipe(gulp.dest('./build'))
.pipe(livereload());
});
}
b.bundle()
.pipe(exorcist('./build/awayjs-display.js.map'))
.pipe(source('awayjs-display.js'))
.pipe(gulp.dest('./build'))
.on('end', callback);
});
}
function unixStylePath(filePath) {
return filePath.split(path.sep).join('/');
}
gulp.task('commit', ['package-min'], function(callback){
git.status({args:'--porcelain'}, function(err, stdout) {
var buildModified = false;
var packageModified = false;
if (err)
throw err;
stdout = stdout.split('\n');
stdout.forEach(function (line) {
if (line.indexOf('build/') != -1)
buildModified = true;
else if (line.indexOf(' M ') != -1)
packageModified = true;
});
if (packageModified) {
console.log('un-commited changes detected in package');
console.log('Please git commit all changes outside of build before continuing');
} else {
if (buildModified) {
gulp.src('./build/*')
.pipe(git.commit('update build files'))
.on('error', function(err) {
throw err;
})
.on('end', callback);
} else {
callback();
}
}
});
});
gulp.task('version', ['commit'], function(callback){
gulp.src('')
.pipe(shell([
'npm version patch'
])).on('error', function(err) {
throw err;
}).on('end', callback);
});
gulp.task('push', ['version'], function(callback){
gulp.src('')
.pipe(shell([
'git push origin dev --tags'
])).on('error', function(err) {
throw err;
}).on('end', callback);
});
gulp.task('publish', ['push'], function(callback){
gulp.src('')
.pipe(shell([
'npm publish'
])).on('error', function(err) {
throw err;
}).on('end', callback);
});
gulp.task('compile', function() {
var tsProject = typescript.createProject({
declarationFiles: true,
noExternalResolve: true,
target: 'ES5',
module: 'commonjs',
sourceRoot: './awayjs-display/lib/',
moduleResolution: 'classic'
});
var tsResult = gulp.src([
'./lib/**/*.ts',
'./node_modules/awayjs-**/build/*.d.ts'
])
//.pipe(sourcemaps.init())
.pipe(typescript(tsProject));
return tsResult.js
//.pipe(sourcemaps.write({sourceRoot: '../'}))
.pipe(gulp.dest('./lib'));
});
gulp.task('bundle', function(callback) {
var builder = new Builder('./', './system.config.js');
builder.buildStatic('./index.ts', './dist/awayjs-display.js').then(function() {
callback();
})
});