@@ -4,48 +4,43 @@ import { stripQuotes } from '../../ast-helpers.js';
4
4
import { isJS } from '../helpers.js' ;
5
5
import { exportVisitor as visit } from '../index.js' ;
6
6
7
+ const isModuleExportsAccess = ( node : ts . PropertyAccessExpression ) =>
8
+ ts . isIdentifier ( node . expression ) && node . expression . escapedText === 'module' && node . name . escapedText === 'exports' ;
9
+
7
10
export default visit ( isJS , node => {
8
11
if ( ts . isExpressionStatement ( node ) ) {
9
12
if ( ts . isBinaryExpression ( node . expression ) ) {
10
- if (
11
- ts . isPropertyAccessExpression ( node . expression . left ) &&
12
- ts . isPropertyAccessExpression ( node . expression . left . expression ) &&
13
- ts . isIdentifier ( node . expression . left . expression . expression ) &&
14
- node . expression . left . expression . expression . escapedText === 'module' &&
15
- node . expression . left . expression . name . escapedText === 'exports'
16
- ) {
17
- // Pattern: module.exports.NAME
18
- const identifier = node . expression . left . name . getText ( ) ;
19
- const pos = node . expression . left . name . pos ;
20
- return { node, identifier, type : SymbolType . UNKNOWN , pos } ;
13
+ if ( ts . isPropertyAccessExpression ( node . expression . left ) ) {
14
+ if (
15
+ ts . isPropertyAccessExpression ( node . expression . left . expression ) &&
16
+ isModuleExportsAccess ( node . expression . left . expression )
17
+ ) {
18
+ // Pattern: module.exports.NAME
19
+ const identifier = node . expression . left . name . getText ( ) ;
20
+ const pos = node . expression . left . name . pos ;
21
+ return { node, identifier, type : SymbolType . UNKNOWN , pos } ;
22
+ } else if ( isModuleExportsAccess ( node . expression . left ) ) {
23
+ const expr = node . expression . right ;
24
+ if ( ts . isObjectLiteralExpression ( expr ) && expr . properties . every ( ts . isShorthandPropertyAssignment ) ) {
25
+ // Pattern: module.exports = { identifier, identifier2 }
26
+ return expr . properties . map ( node => {
27
+ return { node, identifier : node . getText ( ) , type : SymbolType . UNKNOWN , pos : node . pos } ;
28
+ } ) ;
29
+ } else {
30
+ // Pattern: module.exports = any
31
+ return { node, identifier : 'default' , type : SymbolType . UNKNOWN , pos : expr . pos } ;
32
+ }
33
+ }
21
34
} else if (
22
35
ts . isElementAccessExpression ( node . expression . left ) &&
23
36
ts . isPropertyAccessExpression ( node . expression . left . expression ) &&
24
37
ts . isIdentifier ( node . expression . left . expression . name ) &&
25
- ts . isIdentifier ( node . expression . left . expression . expression ) &&
26
- node . expression . left . expression . expression . escapedText === 'module' &&
27
- node . expression . left . expression . name . escapedText === 'exports'
38
+ isModuleExportsAccess ( node . expression . left . expression )
28
39
) {
29
40
// Pattern: module.exports['NAME']
30
41
const identifier = stripQuotes ( node . expression . left . argumentExpression . getText ( ) ) ;
31
42
const pos = node . expression . left . argumentExpression . pos ;
32
43
return { node, identifier, type : SymbolType . UNKNOWN , pos } ;
33
- } else if (
34
- ts . isPropertyAccessExpression ( node . expression . left ) &&
35
- ts . isIdentifier ( node . expression . left . expression ) &&
36
- node . expression . left . expression . escapedText === 'module' &&
37
- node . expression . left . name . escapedText === 'exports'
38
- ) {
39
- const expr = node . expression . right ;
40
- if ( ts . isObjectLiteralExpression ( expr ) && expr . properties . every ( ts . isShorthandPropertyAssignment ) ) {
41
- // Pattern: module.exports = { identifier, identifier2 }
42
- return expr . properties . map ( node => {
43
- return { node, identifier : node . getText ( ) , type : SymbolType . UNKNOWN , pos : node . pos } ;
44
- } ) ;
45
- } else {
46
- // Pattern: module.exports = any
47
- return { node, identifier : 'default' , type : SymbolType . UNKNOWN , pos : expr . pos } ;
48
- }
49
44
}
50
45
}
51
46
}
0 commit comments