1 // Generated by CoffeeScript 1.8.0
3 var Module, coffee, endsWith, fs, hook, istanbul, originalJSLoader, originalLoader, transformFn;
7 Module = require('module');
9 istanbul = require('istanbul');
11 coffee = require('coffee-script');
15 originalLoader = require.extensions['.coffee'];
17 originalJSLoader = null;
19 hook = Object.create(istanbul.hook);
21 transformFn = function(matcher, transformer, verbose) {
22 return function(code, filename) {
23 var changed, ex, shouldHook, transformed;
24 shouldHook = matcher(filename);
28 console.error("Module load hook: transform [" + filename + "]");
31 transformed = transformer(code, filename);
35 console.error('Transformation error; return original code');
36 console.error(ex.stack);
50 hook.hookRequire = function(matcher, transformer, options) {
52 if (options == null) {
55 fn = transformFn(matcher, transformer, options.verbose);
57 if (options.postLoadHook && typeof options.postLoadHook === 'function') {
58 postLoadHook = options.postLoadHook;
60 require.extensions['.coffee'] = function(module, filename) {
62 ret = fn(fs.readFileSync(filename, 'utf8'), filename);
64 module._compile(ret.code, filename);
66 originalLoader(module, filename);
69 return postLoadHook(filename);
72 istanbul.hook.hookRequire(matcher, transformer, options);
73 originalJSLoader = require.extensions['.js'];
74 return require.extensions['.js'] = function(module, filename) {
75 if (!endsWith(filename, 'coffee-script.js')) {
76 originalJSLoader(module, filename);
81 hook.unhookRequire = function() {
82 if (originalJSLoader) {
83 require.extensions['.js'] = originalJSLoader;
84 originalJSLoader = null;
86 istanbul.hook.unhookRequire();
87 return require.extensions['.coffee'] = originalLoader;
90 endsWith = function(string, endString) {
91 if (string.length < endString.length) {
94 return string.substr(string.length - endString.length) === endString;
97 module.exports = hook;