UNPKG

mason

Version:

simple, fun, static-file builder for jade, stylus, and javascript

79 lines (65 loc) 1.79 kB
var path = require('path'); var fs = require('fs'); var util = require('./lib/util'); var renderer = require('./lib/renderer'); module.exports = function createMason(options) { return new Mason(options); }; function Mason(options) { this.options = (typeof options === 'object') ? options : { file: options }; var data = fs.readFileSync(this.options.file, 'utf-8'); this.assets = JSON.parse(data); this.renderer = renderer(this.assets, this.options); } Mason.prototype.build = function() { var self = this; util.log('building', this.options.file); var targets = this.options.only || Object.keys(this.assets); return targets.forEach(function(target) { self.buildTarget(target); }); }; Mason.prototype.buildTarget = function(target) { var bundle = this.bundleTarget(target); var builder, asset = bundle.asset; // Check requirements if (!asset) { return util.log('no such target:', target); } try { builder = asset && require('./lib/builders/' + asset.type); } catch (e) { return util.log('no builder for target type:', asset.type); } // Run build return builder(bundle); }; Mason.prototype.bundleTarget = function(target) { return { dir: path.dirname(this.options.file), file: this.options.file, asset: this.assets[target], assets: this.assets, target: target, locals: this.locals() }; }; // Writes script tags / css includes into jade files, // pointing at build targets Mason.prototype.render = function(asset) { return this.renderer.render(asset); }; // Returns a locals object to used in express Mason.prototype.locals = function() { var self = this; return { mason: function(asset) { return self.render(asset); } }; }; Mason.prototype.watch = function() { };