2
2
3
3
const Parser = require ( '@typescript-eslint/typescript-estree' ) ;
4
4
const Walker = require ( 'node-source-walk' ) ;
5
+ const types = require ( 'ast-module-types' ) ;
5
6
6
7
/**
7
8
* Extracts the dependencies of the supplied TypeScript module
@@ -19,6 +20,9 @@ module.exports = function(src, options = {}) {
19
20
// Remove skipTypeImports option, as this option may not be recognized by the walker/parser
20
21
delete walkerOptions . skipTypeImports ;
21
22
23
+ const mixedImports = Boolean ( options . mixedImports ) ;
24
+ delete walkerOptions . mixedImports ;
25
+
22
26
const walker = new Walker ( walkerOptions ) ;
23
27
24
28
const dependencies = [ ] ;
@@ -58,6 +62,23 @@ module.exports = function(src, options = {}) {
58
62
if ( ! skipTypeImports && node . parameter . type === 'TSLiteralType' ) {
59
63
dependencies . push ( node . parameter . literal . value ) ;
60
64
}
65
+ break ;
66
+ case 'CallExpression' :
67
+ if ( ! mixedImports || ! types . isRequire ( node ) ||
68
+ ! node . arguments ||
69
+ ! node . arguments . length ) {
70
+ break ;
71
+ }
72
+
73
+ if ( types . isPlainRequire ( node ) ) {
74
+ const result = extractDependencyFromRequire ( node ) ;
75
+ if ( result ) {
76
+ dependencies . push ( result ) ;
77
+ }
78
+ } else if ( types . isMainScopedRequire ( node ) ) {
79
+ dependencies . push ( extractDependencyFromMainRequire ( node ) ) ;
80
+ }
81
+
61
82
break ;
62
83
default :
63
84
return ;
@@ -67,6 +88,18 @@ module.exports = function(src, options = {}) {
67
88
return dependencies ;
68
89
} ;
69
90
70
- module . exports . tsx = function ( src , options = { jsx : true } ) {
71
- return module . exports ( src , options ) ;
91
+ module . exports . tsx = function ( src , options ) {
92
+ return module . exports ( src , Object . assign ( { } , options , { jsx : true } ) ) ;
72
93
} ;
94
+
95
+ function extractDependencyFromRequire ( node ) {
96
+ if ( node . arguments [ 0 ] . type === 'Literal' || node . arguments [ 0 ] . type === 'StringLiteral' ) {
97
+ return node . arguments [ 0 ] . value ;
98
+ } else if ( node . arguments [ 0 ] . type === 'TemplateLiteral' ) {
99
+ return node . arguments [ 0 ] . quasis [ 0 ] . value . raw ;
100
+ }
101
+ }
102
+
103
+ function extractDependencyFromMainRequire ( node ) {
104
+ return node . arguments [ 0 ] . value ;
105
+ }
0 commit comments