var fs = require('fs'),
path = require('path'),
gulp = require('gulp'),
gutil = require('gulp-util'),
mirror = require('gulp-mirror'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
header = require('gulp-header'),
source = require('vinyl-source-stream'),
sourcemaps = require('gulp-sourcemaps'),
buffer = require('vinyl-buffer'),
browserify = require('browserify'),
watchify = require('watchify'),
handleErrors = require('../util/handleErrors'),
headerText = fs.readFileSync(path.join(__dirname, '..', 'header.txt'), 'utf8'),
licenseText = fs.readFileSync(path.join(__dirname, '..', '..', 'LICENSE'), 'utf8'),
date = new Date();
// TODO - Concat license header to dev/prod build files.
function rebundle(devBundle) {
if (devBundle) {
gutil.log('Starting dev rebundle...');
}
var debug, min;
debug = sourcemaps.init({loadMaps: true});
debug.pipe(sourcemaps.write('./', {sourceRoot: './'}))
.pipe(gulp.dest(paths.out));
min = rename({ suffix: '.min' });
min.pipe(sourcemaps.init({loadMaps: true}))
.pipe(uglify())
.pipe(sourcemaps.write('./', {sourceRoot: './', addComment: true}))
.pipe(gulp.dest(paths.out));
var stream = this.bundle()
.on('error', handleErrors.handler)
.pipe(handleErrors())
.pipe(source('pixi.js'))
.pipe(buffer())
.pipe(header(
headerText,
{
licenseText: licenseText,
date: new Date().toISOString(),
pkg: require('../../package.json')
}
));
if (devBundle) {
return stream.pipe(debug).once('end', function () {
gutil.log('Dev rebundle complete.');
});
}
else {
return stream.pipe(mirror(debug, min));
}
}
function createBundler(args) {
args = args || {};
args.debug = true;
args.standalone = 'PIXI';
var bundle = browserify(paths.jsEntry, args),
argv = require('minimist')(process.argv.slice(2)),
exclude = (argv.exclude || []).concat(argv.e || []);
if (!Array.isArray(exclude)) {
exclude = [exclude]
}
for (var i = 0; i < exclude.length; ++i) {
bundle.ignore(require.resolve('../../src/' + exclude[i]));
}
return bundle;
}
function watch(onUpdate) {
var bundler = watchify(createBundler(watchify.args));
bundler.on('update', function () {
var bundle = rebundle.call(this, true);
if (onUpdate) {
bundle.on('end', onUpdate);
}
});
return rebundle.call(bundler);
}
module.exports = function bundle() {
return rebundle.call(createBundler());
};
module.exports.watch = watch;
module.exports.rebundle = rebundle;
module.exports.createBundler = createBundler;