Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / resolve / lib / sync.js
1 var core = require('./core');
2 var fs = require('fs');
3 var path = require('path');
4 var caller = require('./caller.js');
5 var nodeModulesPaths = require('./node-modules-paths.js');
6
7 module.exports = function (x, opts) {
8     if (!opts) opts = {};
9     var isFile = opts.isFile || function (file) {
10         try { var stat = fs.statSync(file) }
11         catch (err) { if (err && err.code === 'ENOENT') return false }
12         return stat.isFile() || stat.isFIFO();
13     };
14     var readFileSync = opts.readFileSync || fs.readFileSync;
15     
16     var extensions = opts.extensions || [ '.js' ];
17     var y = opts.basedir || path.dirname(caller());
18
19     opts.paths = opts.paths || [];
20
21     if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[\\\/])/.test(x)) {
22         var res = path.resolve(y, x);
23         if (x === '..') res += '/';
24         var m = loadAsFileSync(res) || loadAsDirectorySync(res);
25         if (m) return m;
26     } else {
27         var n = loadNodeModulesSync(x, y);
28         if (n) return n;
29     }
30     
31     if (core[x]) return x;
32     
33     throw new Error("Cannot find module '" + x + "' from '" + y + "'");
34     
35     function loadAsFileSync (x) {
36         if (isFile(x)) {
37             return x;
38         }
39         
40         for (var i = 0; i < extensions.length; i++) {
41             var file = x + extensions[i];
42             if (isFile(file)) {
43                 return file;
44             }
45         }
46     }
47     
48     function loadAsDirectorySync (x) {
49         var pkgfile = path.join(x, '/package.json');
50         if (isFile(pkgfile)) {
51             var body = readFileSync(pkgfile, 'utf8');
52             try {
53                 var pkg = JSON.parse(body);
54                 if (opts.packageFilter) {
55                     pkg = opts.packageFilter(pkg, x);
56                 }
57                 
58                 if (pkg.main) {
59                     var m = loadAsFileSync(path.resolve(x, pkg.main));
60                     if (m) return m;
61                     var n = loadAsDirectorySync(path.resolve(x, pkg.main));
62                     if (n) return n;
63                 }
64             }
65             catch (err) {}
66         }
67         
68         return loadAsFileSync(path.join( x, '/index'));
69     }
70     
71     function loadNodeModulesSync (x, start) {
72         var dirs = nodeModulesPaths(start, opts);
73         for (var i = 0; i < dirs.length; i++) {
74             var dir = dirs[i];
75             var m = loadAsFileSync(path.join( dir, '/', x));
76             if (m) return m;
77             var n = loadAsDirectorySync(path.join( dir, '/', x ));
78             if (n) return n;
79         }
80     }
81 };