cssjs
Version:
incubating
120 lines (102 loc) • 3.43 kB
JavaScript
// Generated by CoffeeScript 1.8.0
(function() {
var basename, cssjs, dirname, exists, files, fs, join, mkdirp, monocle, path, processFile, program, resolve;
fs = require('fs');
path = require('path');
basename = path.basename;
dirname = path.dirname;
resolve = path.resolve;
exists = fs.existsSync || path.existsSync;
join = path.join;
program = require('commander');
monocle = require('monocle')();
mkdirp = require('mkdirp');
cssjs = require('..');
program.version(require('../package.json').version).usage('[options] [dir|file ...]').option('-o, --out <dir>', 'output the processed files to <dir>').option('-w, --watch', 'watch files for changes and automatically re-render');
program.parse(process.argv);
processFile = function(path) {
return fs.lstat(path, function(err, stat) {
if (err) {
throw err;
}
if (stat.isFile() && /\.css$/.test(path) && !(/\.css\.css$/.test(path) || /\.css\.js$/.test(path))) {
return fs.readFile(path, "utf8", function(err, str) {
var cssOutPath, dir, jsOutPath, outPath, processed;
if (err) {
throw err;
}
console.log(" \u001b[90mprocessing \u001b[36m%s\u001b[0m", path);
processed = cssjs(str);
outPath = program.out ? join(program.out, basename(path)) : path;
cssOutPath = outPath + ".css";
jsOutPath = outPath + ".js";
dir = resolve(dirname(outPath));
return mkdirp(dir, 0x1ed, function(err) {
var e;
if (err) {
throw err;
}
try {
if (processed.css) {
fs.writeFile(cssOutPath, processed.css, function(err) {
if (err) {
throw err;
}
return console.log(" \u001b[90mrendered \u001b[36m%s\u001b[0m", cssOutPath);
});
}
if (processed.js) {
return fs.writeFile(jsOutPath, processed.js, function(err) {
if (err) {
throw err;
}
return console.log(" \u001b[90mrendered \u001b[36m%s\u001b[0m", jsOutPath);
});
}
} catch (_error) {
e = _error;
if (options.watch) {
return console.error(e.stack || e.message || e);
} else {
throw e;
}
}
});
});
} else if (stat.isDirectory()) {
return fs.readdir(path, function(err, files) {
if (err) {
throw err;
}
return files.map(function(filename) {
return path + "/" + filename;
}).forEach(processFile);
});
}
});
};
files = program.args;
if (files.length) {
console.log();
if (program.watch) {
process.on("uncaughtException", function(err) {
return console.error(err);
});
files.forEach(processFile);
monocle.watchFiles({
files: files,
listener: function(file) {
console.log("changed", file);
return processFile(file.absolutePath);
}
});
} else {
files.forEach(processFile);
}
process.on("exit", function() {
return console.log();
});
} else {
processFile(".");
}
}).call(this);