This repository has been archived by the owner on Nov 21, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathglobal-require.js
88 lines (71 loc) · 1.97 KB
/
global-require.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
81
82
83
84
85
86
87
88
var fs = require('fs')
var path = require('path')
var generateGlobalMap = require('./src/generateGlobalMap.js')
module.exports = function(babel) {
var t = babel.types
var globalMap = {}
return {
visitor: {
Program(_path, state) {
var opts = state.opts
if (opts.exclude && opts.exclude != '') {
opts.exclude = new RegExp(opts.exclude)
}
var node_modules
= opts.node_modules ? path.resolve(opts.node_modules) : null
if (opts.root) {
globalMap = generateGlobalMap(
path.resolve(opts.root),
node_modules,
opts.exclude
)
}
},
ImportDeclaration(path, parent) {
var what = path.get('source').node.value
if (globalMap[what]) {
path.get('source').node.value = globalMap[what].path
}
},
CallExpression(path, state) {
var callee = path.get('callee')
var isRequire = t.isIdentifier(callee.node, {
name: 'require'
})
if (! isRequire) {
return
}
var args = path.get('arguments')
if (args && args.length === 0) {
return
}
if (t.isStringLiteral(args[0])) {
var what = args[0].node.value
if (! globalMap[what]) {
return
}
path.replaceWith(
t.callExpression(callee.node, [
t.stringLiteral(globalMap[what].path)
])
)
return
}
if (! t.isArrayExpression(args[0]) && t.isFunctionExpression(args[1])) {
return
}
if (! args[0].node.elements) {
return
}
// TODO: path.replaceWith(...)
path.node.arguments[0] = t.arrayExpression(
args[0].node.elements.map(node => {
return t.stringLiteral(
globalMap[node.value] ? globalMap[node.value].path : what
)
})
)
}
}
}
}