UNPKG

tarifa

Version:

Your friendly toolchain for mobile app development on top of Apache Cordova

116 lines (88 loc) 3.23 kB
/* * build.js */ var browserify = require('browserify'), watchify = require('watchify'), Q = require('q'), path = require('path'), fs = require('fs'), chokidar = require('chokidar'), w, // watchify instance watcher, // chokidar watcher instance src = path.join(__dirname, '../src/app.js'), settingsJSON = path.join(__dirname, 'settings.json'), out = path.join(__dirname, '../www/main.js'), www = path.join(__dirname, '../www'); function log(o) { if(o) console.log('- browserify - ' + o); } function rejectOnError(d) { return function (err) { log(err); if(err) d.reject(err); }; } function bundle(conf) { var defer = Q.defer(), b = browserify(watchify.args); if(fs.existsSync(settingsJSON)) fs.unlinkSync(settingsJSON); if(fs.existsSync(out)) fs.unlinkSync(out); fs.writeFileSync(settingsJSON, JSON.stringify(conf), null, 2); var ws = fs.createWriteStream(out); b.add(src) .exclude('settings') .require(settingsJSON, { expose: 'settings' }) .bundle() .pipe(ws); b.on('error', rejectOnError(defer)); ws.on('finish', function() { ws.end(); defer.resolve(b); }); return defer.promise; } function run(conf, f){ return bundle(conf).then(function (b) { w = watchify(b); b.bundle(function () { w.on('log', log); }); w.on('update', function () { var ws = fs.createWriteStream(out); w.bundle().pipe(ws); ws.on('finish', function() { ws.end(); f(out); }); }); return w; }); } module.exports.build = function build(platform, localSettings, config) { return bundle(localSettings.configurations[platform][config]); }; module.exports.watch = function watch(f, localSettings, platform, config, confEmitter) { run(localSettings.configurations[platform][config], f).then(function () { watcher = chokidar.watch(www, { ignored: /main\.js/, persistent: true }); setTimeout(function () { watcher.on('all', function (evt, p) { f(p); }); }, 4000); confEmitter.on('change', function (conf) { fs.writeFileSync(settingsJSON, JSON.stringify(conf), null, 2); }); }); }; module.exports.close = function () { if(w) w.close(); if(watcher) watcher.close(); }; module.exports.test = function (platform, settings, config, caps, appium) { var Mocha = require('mocha'), mocha = new Mocha(), defer = Q.defer(), settingsPath = path.resolve(__dirname, '../test/settings.json'), testSettings = { caps: caps, appium: appium, platform: platform, localSettings: settings, configuration: config }; fs.writeFileSync(settingsPath, JSON.stringify(testSettings), null, 2); fs.readdirSync(path.resolve(__dirname, '../test')).filter(function(file){ return file.substr(-3) === '.js'; }).forEach(function(file){ mocha.addFile(path.join(__dirname, '../test', file)); }); mocha.run(function(failures) { return failures ? defer.reject(failures + ' failures!') : defer.resolve(); }); return defer.promise; };