11'use strict' ;
22
33import { visit } from 'estree-util-visit' ;
4- import { CONSTRUCTOR_EXPRESSION } from '../constants.mjs' ;
4+ import { handleExportedPropertyExpression } from './handleExportedPropertyExpression.mjs' ;
5+ import { handleExportedObjectExpression } from './handleExportedObjectExpression.mjs' ;
56
67/**
78 * @see https://github.com/estree/estree/blob/master/es5.md#assignmentexpression
@@ -18,8 +19,7 @@ function handleExpression(node, basename, nameToLineNumberMap) {
1819 return ;
1920 }
2021
21- // `a=b`, lhs=`a` and rhs=`b`
22- let { left : lhs , right : rhs , loc } = expression ;
22+ let { left : lhs } = expression ;
2323
2424 if ( lhs . type !== 'MemberExpression' ) {
2525 return undefined ;
@@ -41,105 +41,16 @@ function handleExpression(node, basename, nameToLineNumberMap) {
4141 if ( lhs . object . name === 'exports' ) {
4242 // This is an assignment to a property in `module.exports` or `exports`
4343 // (i.e. `module.exports.asd = ...`)
44-
45- switch ( rhs . type ) {
46- /** @see https://github.com/estree/estree/blob/master/es5.md#functionexpression */
47- case 'FunctionExpression' : {
48- // module.exports.something = () => {}
49- nameToLineNumberMap [ `${ basename } .${ lhs . property . name } ` ] =
50- loc . start . line ;
51-
52- break ;
53- }
54- /** @see https://github.com/estree/estree/blob/master/es5.md#identifier */
55- case 'Identifier' : {
56- // Save this for later in case it's referenced
57- // module.exports.asd = something
58- if ( rhs . name === lhs . property . name ) {
59- exports . indirects [ lhs . property . name ] =
60- `${ basename } .${ lhs . property . name } ` ;
61- }
62-
63- break ;
64- }
65- default : {
66- if ( lhs . property . name !== undefined ) {
67- // Something else, let's save it for when we're searching for
68- // declarations
69- exports . identifiers . push ( lhs . property . name ) ;
70- }
71-
72- break ;
73- }
74- }
44+ handleExportedPropertyExpression (
45+ exports ,
46+ expression ,
47+ basename ,
48+ nameToLineNumberMap
49+ ) ;
7550 } else if ( lhs . object . name === 'module' && lhs . property . name === 'exports' ) {
7651 // This is an assignment to `module.exports` as a whole
7752 // (i.e. `module.exports = {}`)
78-
79- // We need to move right until we find the value of the assignment.
80- // (if `a=b`, we want `b`)
81- while ( rhs . type === 'AssignmentExpression' ) {
82- rhs = rhs . right ;
83- }
84-
85- switch ( rhs . type ) {
86- /** @see https://github.com/estree/estree/blob/master/es5.md#newexpression */
87- case 'NewExpression' : {
88- // module.exports = new Asd()
89- exports . ctors . push ( rhs . callee . name ) ;
90- break ;
91- }
92- /** @see https://github.com/estree/estree/blob/master/es5.md#objectexpression */
93- case 'ObjectExpression' : {
94- // module.exports = {}
95- // we need to go through all of the properties and register them
96- rhs . properties . forEach ( ( { value } ) => {
97- switch ( value . type ) {
98- case 'Identifier' : {
99- exports . identifiers . push ( value . name ) ;
100-
101- if ( CONSTRUCTOR_EXPRESSION . test ( value . name [ 0 ] ) ) {
102- exports . ctors . push ( value . name ) ;
103- }
104-
105- break ;
106- }
107- case 'CallExpression' : {
108- if ( value . callee . name !== 'deprecate' ) {
109- break ;
110- }
111-
112- // Handle exports wrapped in the `deprecate` function
113- // Ex/ https://github.com/nodejs/node/blob/e96072ad57348ce423a8dd7639dcc3d1c34e847d/lib/buffer.js#L1334
114-
115- exports . identifiers . push ( value . arguments [ 0 ] . name ) ;
116-
117- break ;
118- }
119- default : {
120- // Not relevant
121- }
122- }
123- } ) ;
124-
125- break ;
126- }
127- /** @see https://github.com/estree/estree/blob/master/es5.md#identifier */
128- case 'Identifier' : {
129- // Something else, let's save it for when we're searching for
130- // declarations
131-
132- if ( rhs . name !== undefined ) {
133- exports . identifiers . push ( rhs . name ) ;
134- }
135-
136- break ;
137- }
138- default : {
139- // Not relevant
140- break ;
141- }
142- }
53+ handleExportedObjectExpression ( exports , expression ) ;
14354 }
14455
14556 return exports ;
0 commit comments