Repository URL to install this package:
|
Version:
1.8.0-17108 ▾
|
"use strict";
var Module = require("module"),
fs = require("fs");
// caching original wrapper
var moduleWrapper0 = Module.wrapper[0],
moduleWrapper1 = Module.wrapper[1],
originalExtensions = {},
nodeRequire,
currentModule;
function load(targetModule) {
nodeRequire = targetModule.require;
targetModule.require = requireProxy;
currentModule = targetModule;
registerExtensions();
targetModule.load(targetModule.id);
// This is only necessary if nothing has been required within the module
reset();
}
function reset() {
Module.wrapper[0] = moduleWrapper0;
Module.wrapper[1] = moduleWrapper1;
restoreExtensions();
}
function inject(prelude, appendix) {
Module.wrapper[0] = moduleWrapper0 + prelude;
Module.wrapper[1] = appendix + moduleWrapper1;
}
/**
* Proxies the first require call in order to draw back all changes to the Module.wrapper.
* Thus our changes don't influence other modules
*
* @param {!String} path
*/
function requireProxy(path) {
reset();
currentModule.require = nodeRequire;
return nodeRequire.call(currentModule, path); // node's require only works when "this" points to the module
}
function registerExtensions() {
originalExtensions.coffee = require.extensions[".coffee"];
require.extensions[".coffee"] = coffeeExtension;
}
function restoreExtensions() {
require.extensions[".coffee"] = originalExtensions.coffee;
}
function coffeeExtension(module, filename) {
var coffee = require("coffee-script"),
content = stripBOM(fs.readFileSync(filename, "utf8"));
content = coffee.compile(content, {
filename: filename,
bare: true
});
module._compile(content, filename);
}
/**
* @see https://github.com/joyent/node/blob/master/lib/module.js
*/
function stripBOM(content) {
// Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
// because the buffer-to-string conversion in `fs.readFileSync()`
// translates it to FEFF, the UTF-16 BOM.
if (content.charCodeAt(0) === 0xFEFF) {
content = content.slice(1);
}
return content;
}
exports.load = load;
exports.inject = inject;