Skip to content

Instantly share code, notes, and snippets.

@iissnan
Last active September 23, 2016 11:34
Show Gist options
  • Save iissnan/8535138c4caf7045795f31fc7535b409 to your computer and use it in GitHub Desktop.
Save iissnan/8535138c4caf7045795f31fc7535b409 to your computer and use it in GitHub Desktop.
SW Sass Processor
var fs = require('fs'),
os = require('os'),
path = require('path'),
Hapi = require('hapi'),
Promise = require('promise'),
lib = require('./lib.js'),
sassProcessor = require('./sass_processor.js'),
pseudoProcessor = require('./pseudo_processor') ;
require('./configurator.js')('./weblauncher.user.json', './weblauncher.json')
.catch(function(err){
console.log('SOMETHING WRONG WITH CONFIGURATION'.red);
return Promise.reject(err);
})
.then(function(args){
run(args);
})
.catch(function (err) {
console.log('ERROR OCCURRED'.red);
console.log(err.stack || err);
});
function run(cfg) {
console.log('\nbackend:\n'.green, cfg.backend.host);
console.log('config:\n'.green, cfg, '\n');
pseudoProcessor.run(cfg);
sassProcessor.run(cfg);
var pack = new Hapi.Pack();
var server = pack.server(cfg.port, {
files: {
relativeTo: cfg.dirs.src
}
});
var serverStatic = pack.server(cfg.sport, {
files: {
relativeTo: cfg.dirs.build
}
});
require('./routes/proxy.js')([server, serverStatic], cfg);
// Devportal
require('./routes/desktop/dyn/devportal.js')([server, serverStatic], cfg);
// ServiceWeb
require('./routes/desktop/static/static.js')([serverStatic], cfg);
require('./routes/desktop/dyn/rclibx.js')([server], cfg);
require('./routes/desktop/dyn/desktop.js')([server], cfg);
require('./routes/desktop/dyn/assets.js')([server], cfg);
require('./routes/desktop/dyn/boot.js')([server], cfg);
require('./routes/desktop/common.js')([server, serverStatic], cfg);
// MobileWeb
require('./routes/mobile/dyn/boot.js')([server], cfg);
require('./routes/mobile/dyn/images.js')([server], cfg);
require('./routes/mobile/dyn/assets.js')([server], cfg);
pack.start();
}
var path = require('path'),
exec = require('child_process').exec,
colors = require('colors'),
fs = require('fs'),
os = require('os'),
_ = require('lodash');
var MODE_COMPILE = 'compile',
MODE_WATCH = 'watch';
function _progress(msg) {
var i = 0;
return function tick() {
i = (i + 1) % 4;
var dots = new Array(i + 1).join('.');
var stdout = process.stdout;
stdout.clearLine && stdout.clearLine(); //for running under IntelliJ IDEA
stdout.cursorTo && stdout.cursorTo(0);
stdout.write && stdout.write(msg + dots);
};
}
function _getCmd(mode, builderDir, srcDir, force, lang) {
var cfgPath = path.join(builderDir, 'compass-config.rb');
// Support old SASS configs
if (!fs.existsSync(cfgPath)) {
cfgPath = path.join(builderDir, 'sass_cfg', 'config-' + lang + '.rb');
}
return _.template('compass <%= command %> -c <%= config %> --sass-dir=<%= sassDir %> --css-dir=<%= cssDir %> <%= force %>')({
command: mode,
config: cfgPath,
sassDir: srcDir,
cssDir: srcDir,
force: force ? '--force' : ''
});
}
function run(cfg) {
var mode = cfg.sassOnce ? MODE_COMPILE : MODE_WATCH;
var cmd = _getCmd(mode, cfg.dirs.builder, cfg.dirs.src, cfg.sassForce, cfg.language);
exec('compass clean', { cwd: __dirname }, function() { // todo: check it
console.log('EXECUTING SASS COMMAND:', cmd);
var child = exec(cmd, {
cwd: __dirname ,
env: _.assign({SASS_LOCALE: cfg.language}, process.env)
});
var msg = _.template('sass-processor (<%= mode %>) for language=<%= lang %> ')({
lang: cfg.language,
mode: mode
}),
progressTick = _progress(msg);
child.stdout.on('data', function (data) {
progressTick();
});
child.on('exit', function (data) {
console.log(os.EOL + 'DONE: sass compile');
});
child.stderr.on('data', function (data) { // error or warning
console.log(os.EOL + data);
console.error('SOMETHING OCCURRED DURING SASS-COMPILE'.red);
});
});
}
exports.run = run;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment