UNPKG

1.14 kBJavaScriptView Raw
1'use strict';
2
3var detective = require('detective');
4
5function simpleRequire(n) {
6 // var proxy = require('proxyquireify')
7 return n.parent
8 && n.parent.id
9 && n.parent.id.name;
10}
11
12function requireWithImmediateCall(n) {
13 // var proxy = require('proxyquireify')(require)
14 var p = n.parent;
15 return p.parent
16 && p.parent.id
17 && p.parent.id.name;
18}
19
20function findProxyquireVars(src) {
21 return detective
22 .find(src, { nodes: true }).nodes
23 .map(function (n) {
24 var arg = n.arguments[0];
25 return arg
26 && arg.value === 'proxyquireify'
27 && arg.type === 'Literal'
28 && ( simpleRequire(n) || requireWithImmediateCall(n) );
29 })
30 .filter(function (n) { return n; })
31 ;
32}
33
34module.exports = function(src) {
35 if (!/require\(.+proxyquireify.+\)/.test(src)) return [];
36
37 // use hash to get unique values
38 var hash = findProxyquireVars(src)
39 .map(function (name) {
40 return detective(src, { word: name });
41 })
42 .reduce(function (acc, arr) {
43 arr.forEach(function (x) { acc[x] = true;});
44 return acc;
45 }, {});
46
47 return Object.keys(hash);
48};