diff --git a/lib/stitch.js b/lib/stitch.js index 0c35ca6..c24a6e3 100644 --- a/lib/stitch.js +++ b/lib/stitch.js @@ -1,11 +1,11 @@ (function() { - var CoffeeScript, Package, async, defaultCompilers, extname, fs, join, normalize, _, _ref; + var CoffeeScript, Package, async, compilers, eco, extname, fs, join, normalize, _, _ref; var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; _ = require('underscore'); async = require('async'); fs = require('fs'); _ref = require('path'), extname = _ref.extname, join = _ref.join, normalize = _ref.normalize; - defaultCompilers = { + exports.compilers = compilers = { js: function(module, filename) { var content; content = fs.readFileSync(filename, 'utf8'); @@ -14,20 +14,30 @@ }; try { CoffeeScript = require('coffee-script'); - defaultCompilers.coffee = function(module, filename) { + compilers.coffee = function(module, filename) { var content; content = CoffeeScript.compile(fs.readFileSync(filename, 'utf8')); return module._compile(content, filename); }; } catch (err) { + } + try { + eco = require('eco'); + compilers.eco = function(module, filename) { + var content; + content = eco.compile(fs.readFileSync(filename, 'utf8')); + return module._compile(content, filename); + }; + } catch (err) { + } exports.Package = Package = (function() { function Package(config) { var _ref, _ref2, _ref3; this.identifier = (_ref = config.identifier) != null ? _ref : 'require'; this.paths = (_ref2 = config.paths) != null ? _ref2 : ['lib']; - this.compilers = _.extend({}, defaultCompilers, config.compilers); + this.compilers = _.extend({}, compilers, config.compilers); this.cache = (_ref3 = config.cache) != null ? _ref3 : true; this.mtimeCache = {}; this.compileCache = {}; diff --git a/src/stitch.coffee b/src/stitch.coffee index 2b6e571..9a8b7a4 100644 --- a/src/stitch.coffee +++ b/src/stitch.coffee @@ -4,24 +4,31 @@ fs = require 'fs' {extname, join, normalize} = require 'path' -defaultCompilers = +exports.compilers = compilers = js: (module, filename) -> content = fs.readFileSync filename, 'utf8' module._compile content, filename try CoffeeScript = require 'coffee-script' - defaultCompilers.coffee = (module, filename) -> + compilers.coffee = (module, filename) -> content = CoffeeScript.compile fs.readFileSync filename, 'utf8' module._compile content, filename catch err +try + eco = require 'eco' + compilers.eco = (module, filename) -> + content = eco.compile fs.readFileSync filename, 'utf8' + module._compile content, filename +catch err + exports.Package = class Package constructor: (config) -> @identifier = config.identifier ? 'require' @paths = config.paths ? ['lib'] - @compilers = _.extend {}, defaultCompilers, config.compilers + @compilers = _.extend {}, compilers, config.compilers @cache = config.cache ? true @mtimeCache = {} diff --git a/test/fixtures/eco/hello.html.eco b/test/fixtures/eco/hello.html.eco new file mode 100644 index 0000000..77d1e28 --- /dev/null +++ b/test/fixtures/eco/hello.html.eco @@ -0,0 +1,4 @@ + + + +hello <%= @name %>! diff --git a/test/test_stitch.coffee b/test/test_stitch.coffee index 585d2c6..1e7a0eb 100644 --- a/test/test_stitch.coffee +++ b/test/test_stitch.coffee @@ -6,25 +6,28 @@ fixtureRoot = __dirname + "/fixtures" fixtures = fixtureRoot + "/default" altFixtures = fixtureRoot + "/alternate" addlFixtures = fixtureRoot + "/additional" +ecoFixtures = fixtureRoot + "/eco" fixtureCount = 11 defaultOptions = identifier: "testRequire" paths: [fixtures] - defaultPackage = stitch.createPackage defaultOptions additionalOptions = identifier: "testRequire" paths: [addlFixtures] - additionalPackage = stitch.createPackage additionalOptions alternateOptions = paths: [altFixtures] - alternatePackage = stitch.createPackage alternateOptions +ecoOptions = + paths: [ecoFixtures] +ecoPackage = stitch.createPackage ecoOptions + + module.exports = "walk tree": (test) -> test.expect fixtureCount @@ -226,3 +229,15 @@ module.exports = test.same "biz", relative.baz test.same "BUZ", relative.buz test.done() + +if stitch.compilers.eco + module.exports["eco compiler"] = (test) -> + test.expect 2 + ecoPackage.compile (err, sources) -> + test.ok !err + eval sources + + html = @require("hello.html")(name: "Sam").trim() + test.same "hello Sam!", html.split("\n").pop() + test.done() +