1 | "use strict";
|
2 |
|
3 |
|
4 | delete require.cache[require.resolve(__filename)];
|
5 |
|
6 |
|
7 | var path = require('path'),
|
8 | _ = require('underscore'),
|
9 | isString = require('./helpers/isString'),
|
10 | scan = require('./helpers/scan');
|
11 | var extensions = ['.js','.json','.coffee'];
|
12 | var baseDir = path.normalize( __dirname + "/../../../");
|
13 | var scanResults = scan(baseDir,extensions);
|
14 | var filesInProject = scanResults.filesInProject;
|
15 | var ambiguousFileNames = scanResults.ambiguousFileNames;
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | module.exports = rekuire;
|
21 |
|
22 | function rekuire(requirement){
|
23 | if (isString(requirement)){
|
24 | return getModule(requirement).module
|
25 | }else{
|
26 | return {
|
27 | path: getPath
|
28 | }
|
29 | }
|
30 | }
|
31 |
|
32 | rekuire.path = function(requirement){
|
33 | return getPath(requirement);
|
34 | }
|
35 |
|
36 | function getPath(requirement){
|
37 | var location = getModule(requirement).path;
|
38 | if (location === undefined){
|
39 | throw "Could not locate a local for a module named ["+requirement+"]";
|
40 | }
|
41 | return location;
|
42 | }
|
43 |
|
44 |
|
45 | function getModule(requirement){
|
46 | var calleePath = path.dirname(module.parent.filename);
|
47 | var parentReq = module.parent.require.bind(module);
|
48 | var retModule = null;
|
49 | var modulePath = null;
|
50 | var error = "";
|
51 |
|
52 | if (ambiguousFileNames[requirement] !== undefined){
|
53 | throw new Error('Ambiguity Error: There are more then one files that is named '+requirement);
|
54 | }
|
55 |
|
56 | if ( filesInProject[requirement] !== undefined){
|
57 |
|
58 | retModule = parentReq(filesInProject[requirement]);
|
59 | modulePath = filesInProject[requirement];
|
60 | }else{
|
61 |
|
62 | modulePath = path.normalize(calleePath+"/"+requirement);
|
63 | try{
|
64 | retModule = parentReq(modulePath);
|
65 | }catch(e){
|
66 |
|
67 | error += e +"\n";
|
68 | }
|
69 |
|
70 |
|
71 | if (retModule == null){
|
72 | modulePath = requirement;
|
73 | try{
|
74 | retModule = parentReq(requirement);
|
75 | }catch(e){
|
76 | error += e +"\n";
|
77 | }
|
78 | }
|
79 | }
|
80 | if(!retModule){
|
81 | throw new Error("Can not find a module by the name of ["+requirement+"] or it has returned empty. nested: "+error);
|
82 | }
|
83 | return { module: retModule, path: modulePath};
|
84 | }
|