Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80742 views
1
var callsite = require('callsite');
2
var resolve = require('resolve');
3
var dirname = require('path').dirname;
4
var read = require('fs').readFileSync;
5
6
exports = module.exports = req;
7
exports.resolve = res;
8
9
function req(pkg, options) {
10
options = options || {};
11
var path = res(pkg, options);
12
return options.binary ? read(path) : fixup(read(path));
13
}
14
15
function res(pkg, options) {
16
options = options || {};
17
options.basedir = options.basedir || directory(options.exclude);
18
options.extensions = options.extensions || ['.js', '.json'];
19
return resolve.sync(pkg, options);
20
}
21
22
function directory(exclude) {
23
var stack = callsite();
24
for (var i = 0; i < stack.length; i++) {
25
var filename = stack[i].getFileName();
26
if (filename !== __filename && (!exclude || (exclude.indexOf(filename) === -1)))
27
return dirname(filename);
28
}
29
throw new Error('Could not resolve directory');
30
}
31
32
function fixup(str) {
33
return stripBOM(str.toString()).replace(/\r/g, '');
34
}
35
function stripBOM(str){
36
return 0xFEFF == str.charCodeAt(0)
37
? str.substring(1)
38
: str;
39
}
40