Skip to content

Instantly share code, notes, and snippets.

@zaach
Forked from tlrobinson/Jakefile.js
Created April 22, 2010 19:20
Show Gist options
  • Save zaach/375683 to your computer and use it in GitHub Desktop.
Save zaach/375683 to your computer and use it in GitHub Desktop.
exports.bundle = function(modules) {
var moduleDefs = [];
for (var i = 0; i < modules.length; i++) {
var baseID = modules[i].id;
var path = modules[i].path;
var requires = [];
var text = FILE.read(path).replace(/require\s*\(\s*["']([\/\.\w-]+)["']\s*\)/g, function(match, requireID) {
if (/^\./.test(requireID)) {
var newID = FILE.resolve(baseID, requireID)
print("replacing " + requireID + " in " + baseID + " with " + newID);
requireID = newID;
}
requires.push(requireID);
return "require("+JSON.stringify(requireID)+")";
});
moduleDefs.push("require.def("+JSON.stringify(baseID)+",{factory:function(require,exports,module){" + text + "\n//*/\n},requires:"+JSON.stringify(requires)+"})");
}
return "var require = (" + req + ")()\n" + moduleDefs.join(";\n") + ";";
}
var req = function() {
var modules = {};
var factories = {};
var r = function(id) {
if (!modules[id]) {
modules[id] = {};
factories[id](r, modules[id], { id : id });
}
return modules[id];
};
r.def = function(id, params) {
factories[id] = params.factory;
};
return r;
}
var JAKE = require("jake");
var FILE = require("file");
var narcissusPath = FILE.path(require("packages").catalog.narcissus.directory);
JAKE.task("default", function() {
var script = exports.bundle([
{ id : "narcissus/defs", path : narcissusPath.join("lib", "narcissus", "defs.js") },
{ id : "narcissus/parse", path : narcissusPath.join("lib", "narcissus", "parse.js") },
{ id : "narcissus/format", path : narcissusPath.join("lib", "narcissus", "format.js") }
]);
FILE.write("narcissus.js", "xrequire = (function() {\n" + script + ";\nreturn require;\n})();");
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment