1
- var fs = require ( 'fs' ) ;
2
- var path = require ( 'path' ) ;
3
- var mdeps = require ( '@cljs-oss/module-deps' ) ;
4
- var nodeResolve = require ( 'resolve' ) ;
5
- var konan = require ( 'konan' ) ;
6
- var enhancedResolve = require ( 'enhanced-resolve' ) ;
7
-
8
- var target = 'CLJS_TARGET' ;
9
- var filename = fs . realpathSync ( path . resolve ( __dirname , 'JS_FILE' ) ) ;
10
- var mainFields =
11
- target === 'nodejs' ? [ 'module' , 'main' ] : [ 'module' , 'browser' , 'main' ] ;
12
-
13
- var resolver = enhancedResolve . create ( {
1
+ let fs = require ( 'fs' ) ;
2
+ let path = require ( 'path' ) ;
3
+ let mdeps = require ( '@cljs-oss/module-deps' ) ;
4
+ let nodeResolve = require ( 'resolve' ) ;
5
+ let babylon = require ( 'babylon' ) ;
6
+ let traverse = require ( 'babel-traverse' ) . default ;
7
+ let enhancedResolve = require ( 'enhanced-resolve' ) ;
8
+
9
+ let target = 'CLJS_TARGET' ;
10
+ let filename = fs . realpathSync ( path . resolve ( __dirname , 'JS_FILE' ) ) ;
11
+ let mainFields =
12
+ target === 'nodejs' ? [ 'module' , 'main' ] : [ 'module' , 'browser' , 'main' ] ;
13
+
14
+ // https://github.com/egoist/konan
15
+ let getDeps = function ( src , { dynamicImport = true , parse = { sourceType : 'module' , plugins : '*' } } = { } ) {
16
+ const modules = { strings : [ ] , expressions : [ ] } ;
17
+
18
+ let ast ;
19
+
20
+ if ( typeof src === 'string' ) {
21
+ const moduleRe = / \b ( r e q u i r e | i m p o r t ) \b / ;
22
+
23
+ if ( ! moduleRe . test ( src ) ) {
24
+ return modules ;
25
+ }
26
+
27
+ ast = babylon . parse ( src , parse ) ;
28
+ } else {
29
+ ast = src ;
30
+ }
31
+
32
+ traverse ( ast , {
33
+ enter ( path ) {
34
+ if ( path . node . type === 'CallExpression' ) {
35
+ const callee = path . get ( 'callee' ) ;
36
+ const isDynamicImport = dynamicImport && callee . isImport ( ) ;
37
+ if ( callee . isIdentifier ( { name : 'require' } ) || isDynamicImport ) {
38
+ const arg = path . node . arguments [ 0 ] ;
39
+ if ( arg . type === 'StringLiteral' ) {
40
+ modules . strings . push ( arg . value ) ;
41
+ } else {
42
+ modules . expressions . push ( src . slice ( arg . start , arg . end ) ) ;
43
+ }
44
+ }
45
+ } else if ( path . node . type === 'ImportDeclaration' ) {
46
+ modules . strings . push ( path . node . source . value ) ;
47
+ } else if ( path . node . type === 'ExportNamedDeclaration' && path . node . source ) {
48
+ // this branch handles `export ... from` - David
49
+ modules . strings . push ( path . node . source . value ) ;
50
+ }
51
+ }
52
+ } ) ;
53
+
54
+ return modules ;
55
+ } ;
56
+
57
+ let resolver = enhancedResolve . create ( {
14
58
fileSystem : new enhancedResolve . CachedInputFileSystem (
15
59
new enhancedResolve . NodeJsInputFileSystem ( ) ,
16
60
4000
@@ -20,7 +64,7 @@ var resolver = enhancedResolve.create({
20
64
moduleExtensions : [ '.js' , '.json' ] ,
21
65
} ) ;
22
66
23
- var md = mdeps ( {
67
+ let md = mdeps ( {
24
68
resolve : function ( id , parentOpts , cb ) {
25
69
// set the basedir properly so we don't try to resolve requires in the Closure
26
70
// Compiler processed `node_modules` folder.
@@ -35,15 +79,15 @@ var md = mdeps({
35
79
return ! ( target === 'nodejs' && nodeResolve . isCore ( id ) ) ;
36
80
} ,
37
81
detect : function ( src ) {
38
- var deps = konan ( src ) ;
82
+ let deps = getDeps ( src ) ;
39
83
40
84
return deps . strings ;
41
- } ,
85
+ }
42
86
} ) ;
43
87
44
88
function getPackageJsonMainEntry ( pkgJson ) {
45
- for ( var i = 0 ; i < mainFields . length ; i ++ ) {
46
- var entry = mainFields [ i ] ;
89
+ for ( let i = 0 ; i < mainFields . length ; i ++ ) {
90
+ let entry = mainFields [ i ] ;
47
91
48
92
if ( pkgJson [ entry ] != null ) {
49
93
return pkgJson [ entry ] ;
@@ -52,21 +96,21 @@ function getPackageJsonMainEntry(pkgJson) {
52
96
return null ;
53
97
}
54
98
55
- var pkgJsons = [ ] ;
56
- var deps_files = { } ;
99
+ let pkgJsons = [ ] ;
100
+ let deps_files = { } ;
57
101
58
102
md . on ( 'package' , function ( pkg ) {
59
103
// we don't want to include the package.json for users' projects
60
104
if ( / n o d e _ m o d u l e s / . test ( pkg . __dirname ) ) {
61
- var pkgJson = {
105
+ let pkgJson = {
62
106
file : path . join ( pkg . __dirname , 'package.json' ) ,
63
107
} ;
64
108
65
109
if ( pkg . name != null ) {
66
110
pkgJson . provides = [ pkg . name ] ;
67
111
}
68
112
69
- var pkgJsonMainEntry = getPackageJsonMainEntry ( pkg ) ;
113
+ let pkgJsonMainEntry = getPackageJsonMainEntry ( pkg ) ;
70
114
if ( pkgJsonMainEntry != null ) {
71
115
pkgJson . mainEntry = path . join ( pkg . __dirname , pkgJsonMainEntry ) ;
72
116
}
@@ -75,62 +119,62 @@ md.on('package', function(pkg) {
75
119
}
76
120
} ) ;
77
121
78
- md . on ( 'file' , function ( file ) {
79
- deps_files [ file ] = { file : file } ;
122
+ md . on ( 'file' , function ( file ) {
123
+ deps_files [ file ] = { file : file } ;
80
124
} ) ;
81
125
82
- md . on ( 'end' , function ( ) {
83
- for ( var i = 0 ; i < pkgJsons . length ; i ++ ) {
84
- var pkgJson = pkgJsons [ i ] ;
126
+ md . on ( 'end' , function ( ) {
127
+ for ( let i = 0 ; i < pkgJsons . length ; i ++ ) {
128
+ let pkgJson = pkgJsons [ i ] ;
85
129
86
- if ( deps_files [ pkgJson . mainEntry ] != null && pkgJson . provides != null ) {
87
- deps_files [ pkgJson . mainEntry ] . provides = pkgJson . provides ;
88
- }
130
+ if ( deps_files [ pkgJson . mainEntry ] != null && pkgJson . provides != null ) {
131
+ deps_files [ pkgJson . mainEntry ] . provides = pkgJson . provides ;
132
+ }
89
133
90
- deps_files [ pkgJson . file ] = { file : pkgJson . file } ;
91
- }
134
+ deps_files [ pkgJson . file ] = { file : pkgJson . file } ;
135
+ }
92
136
93
- var values = [ ] ;
94
- for ( var key in deps_files ) {
95
- var dep = deps_files [ key ] ;
96
-
97
- // add provides to files that are not `package.json`s
98
- if (
99
- ! / n o d e _ m o d u l e s [ / \\ ] ( @ [ ^ / \\ ] + ?[ / \\ ] ) ? [ ^ / \\ ] + ?[ / \\ ] p a c k a g e \. j s o n $ / . test (
100
- dep . file
101
- )
102
- ) {
103
- if ( dep . file . indexOf ( 'node_modules' ) !== - 1 ) {
104
- var providedModule = dep . file
105
- . substring ( dep . file . lastIndexOf ( 'node_modules' ) )
106
- . replace ( / \\ / g, '/' )
107
- . replace ( 'node_modules/' , '' ) ;
108
-
109
- dep . provides = dep . provides || [ ] ;
110
- dep . provides . push (
111
- providedModule ,
112
- providedModule . replace ( / \. j s ( o n ) ? $ / , '' )
113
- ) ;
114
-
115
- var indexReplaced = providedModule . replace ( / \/ i n d e x \. j s ( o n ) ? $ / , '' ) ;
137
+ let values = [ ] ;
138
+ for ( let key in deps_files ) {
139
+ let dep = deps_files [ key ] ;
116
140
141
+ // add provides to files that are not `package.json`s
117
142
if (
118
- / \/ i n d e x \. j s ( o n ) ? $ / . test ( providedModule ) &&
119
- dep . provides . indexOf ( indexReplaced ) === - 1
143
+ ! / n o d e _ m o d u l e s [ / \\ ] ( @ [ ^ / \\ ] + ?[ / \\ ] ) ? [ ^ / \\ ] + ?[ / \\ ] p a c k a g e \. j s o n $ / . test (
144
+ dep . file
145
+ )
120
146
) {
121
- dep . provides . push ( indexReplaced ) ;
147
+ if ( dep . file . indexOf ( 'node_modules' ) !== - 1 ) {
148
+ let providedModule = dep . file
149
+ . substring ( dep . file . lastIndexOf ( 'node_modules' ) )
150
+ . replace ( / \\ / g, '/' )
151
+ . replace ( 'node_modules/' , '' ) ;
152
+
153
+ dep . provides = dep . provides || [ ] ;
154
+ dep . provides . push (
155
+ providedModule ,
156
+ providedModule . replace ( / \. j s ( o n ) ? $ / , '' )
157
+ ) ;
158
+
159
+ let indexReplaced = providedModule . replace ( / \/ i n d e x \. j s ( o n ) ? $ / , '' ) ;
160
+
161
+ if (
162
+ / \/ i n d e x \. j s ( o n ) ? $ / . test ( providedModule ) &&
163
+ dep . provides . indexOf ( indexReplaced ) === - 1
164
+ ) {
165
+ dep . provides . push ( indexReplaced ) ;
166
+ }
167
+ }
122
168
}
123
- }
124
- }
125
169
126
- values . push ( dep ) ;
127
- }
170
+ values . push ( dep ) ;
171
+ }
128
172
129
- process . stdout . write ( JSON . stringify ( values ) ) ;
173
+ process . stdout . write ( JSON . stringify ( values ) ) ;
130
174
} ) ;
131
175
132
176
md . end ( {
133
- file : filename ,
177
+ file : filename
134
178
} ) ;
135
179
136
180
md . resume ( ) ;
0 commit comments