You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.0 KiB
36 lines
1.0 KiB
/*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; |
|
}
|
|
|