You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
var callsite = require('callsite');
|
|
var resolve = require('resolve');
|
|
var dirname = require('path').dirname;
|
|
var read = require('fs').readFileSync;
|
|
|
|
exports = module.exports = req;
|
|
exports.resolve = res;
|
|
|
|
function req(pkg, options) {
|
|
options = options || {};
|
|
var path = res(pkg, options);
|
|
return options.binary ? read(path) : fixup(read(path));
|
|
}
|
|
|
|
function res(pkg, options) {
|
|
options = options || {};
|
|
options.basedir = options.basedir || directory(options.exclude);
|
|
options.extensions = options.extensions || ['.js', '.json'];
|
|
return resolve.sync(pkg, options);
|
|
}
|
|
|
|
function directory(exclude) {
|
|
var stack = callsite();
|
|
for (var i = 0; i < stack.length; i++) {
|
|
var filename = stack[i].getFileName();
|
|
if (filename !== __filename && (!exclude || (exclude.indexOf(filename) === -1)))
|
|
return dirname(filename);
|
|
}
|
|
throw new Error('Could not resolve directory');
|
|
}
|
|
|
|
function fixup(str) {
|
|
return stripBOM(str.toString()).replace(/\r/g, '');
|
|
}
|
|
function stripBOM(str){
|
|
return 0xFEFF == str.charCodeAt(0)
|
|
? str.substring(1)
|
|
: str;
|
|
} |