|  | /*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; | 
|  | } |