Files
meteor/packages/less/package.js
David Glasser 78eb2a32d6 Watch '.lessimport' files for changes (but don't parse them).
'.lessimport' is now meaningful rather than just a suggestion in the docs.
2013-02-12 14:36:04 -08:00

53 lines
1.6 KiB
JavaScript

Package.describe({
summary: "The dynamic stylesheet language."
});
var less = require('less');
var fs = require('fs');
var path = require('path');
Package.register_extension(
"less", function (bundle, source_path, serve_path, where) {
serve_path = serve_path + '.css';
var contents = fs.readFileSync(source_path, 'utf8');
try {
less.render(contents.toString('utf8'), {
// Use fs.readFileSync to process @imports. This is the bundler, so
// that's not going to cause concurrency issues, and it means that (a)
// we don't have to use Futures and (b) errors thrown by bugs in less
// actually get caught.
syncImport: true,
paths: [path.resolve(source_path, '..')] // for @import
}, function (err, css) {
if (err) {
bundle.error(source_path + ": Less compiler error: " + err.message);
return;
}
bundle.add_resource({
type: "css",
path: serve_path,
data: new Buffer(css),
where: where
});
});
} catch (e) {
// less.render() is supposed to report any errors via its
// callback. But sometimes, it throws them instead. This is
// probably a bug in less. Be prepared for either behavior.
bundle.error(source_path + ": Less compiler error: " + e.message);
}
}
);
// Register lessimport files with the dependency watcher, without actually
// processing them.
Package.register_extension("lessimport", function () {});
Package.on_test(function (api) {
api.use('test-helpers');
api.add_files(['less_tests.less', 'less_tests.js'], 'client');
});