-
Notifications
You must be signed in to change notification settings - Fork 13
/
amd.js
80 lines (62 loc) · 1.99 KB
/
amd.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
var fs = require('fs'),
path = require('path'),
amdresolve = require('amd-resolve'),
amdDeps = require('../runner/amd/deps.js'),
List = require('minitask').list,
Cache = require('minitask').Cache,
log = require('minilog')('parse');
function DetectiveList(opts) {
List.apply(this, Array.prototype.slice.call(arguments));
this._resolveErrors = [];
var cache = Cache.instance({
method: opts['cache-method'],
path: opts['cache-path']
});
// replace the find function to use node-detective
this.find(function(filepath, stat, onDone) {
var self = this;
// only .js files
if(path.extname(filepath) != '.js') {
return onDone(null, []);
}
// log.info('Parsing:', filepath);
var deps = amdDeps(cache, filepath, function(err) {
console.log('parse error: ', filepath, err);
});
// console.log(deps);
if(!deps || deps.length === 0) {
return onDone(null, []);
}
var queue = [],
expected = deps.length,
complete = 0;
deps.filter(function(dep) {
return !amdresolve.isSpecial(dep);
}).forEach(function(dep) {
var normalized,
currOpts = opts.amdresolve || {};
// override relDir for each file
currOpts.relDir = path.dirname(filepath);
try {
normalized = amdresolve.sync(dep, currOpts);
} catch(err) {
// console.log('resolve error: ', err, dep, filepath);
self._resolveErrors.push({ err: err, dep: dep, filepath: filepath });
return;
}
// console.log('RESOLVE', dep, normalized);
queue.push(path.normalize(normalized));
});
return onDone(null, queue);
});
};
DetectiveList.prototype = new List();
DetectiveList.prototype.resolveErrors = function() {
return this._resolveErrors;
};
var oldExec = DetectiveList.prototype.exec;
DetectiveList.prototype.exec = function() {
this._resolveErrors = [];
oldExec.apply(this, Array.prototype.slice.apply(arguments));
};
module.exports = DetectiveList;