| /*jshint node: true */ |
| var inserted, |
| Module = require('module'), |
| fs = require('fs'), |
| existingExtFn = Module._extensions['.js'], |
| amdefineRegExp = /amdefine\.js/; |
| |
| inserted = "if (typeof define !== 'function') {var define = require('amdefine')(module)}"; |
| |
| //From the node/lib/module.js source: |
| 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; |
| } |
| |
| //Also adapted from the node/lib/module.js source: |
| function intercept(module, filename) { |
| var content = stripBOM(fs.readFileSync(filename, 'utf8')); |
| |
| if (!amdefineRegExp.test(module.id)) { |
| content = inserted + content; |
| } |
| |
| module._compile(content, filename); |
| } |
| |
| intercept._id = 'amdefine/intercept'; |
| |
| if (!existingExtFn._id || existingExtFn._id !== intercept._id) { |
| Module._extensions['.js'] = intercept; |
| } |