@@ -13,6 +13,7 @@ const path = require('path');
1313module . exports = function ( context ) {
1414 // trim required module names
1515 var requiredModules = context . options ;
16+ const isESM = context . parserOptions . sourceType === 'module' ;
1617
1718 const foundModules = [ ] ;
1819
@@ -39,39 +40,35 @@ module.exports = function(context) {
3940 return node . callee . type === 'Identifier' && node . callee . name === 'require' ;
4041 }
4142
43+ /**
44+ * Function to check if the path is a required module and return its name.
45+ * @param {String } str The path to check
46+ * @returns {undefined|String } required module name or undefined
47+ */
48+ function getRequiredModuleName ( str ) {
49+ var value = path . basename ( str ) ;
50+
51+ // check if value is in required modules array
52+ return requiredModules . indexOf ( value ) !== - 1 ? value : undefined ;
53+ }
54+
4255 /**
4356 * Function to check if a node has an argument that is a required module and
4457 * return its name.
4558 * @param {ASTNode } node The node to check
4659 * @returns {undefined|String } required module name or undefined
4760 */
48- function getRequiredModuleName ( node ) {
49- var moduleName ;
50-
61+ function getRequiredModuleNameFromCall ( node ) {
5162 // node has arguments and first argument is string
5263 if ( node . arguments . length && isString ( node . arguments [ 0 ] ) ) {
53- var argValue = path . basename ( node . arguments [ 0 ] . value . trim ( ) ) ;
54-
55- // check if value is in required modules array
56- if ( requiredModules . indexOf ( argValue ) !== - 1 ) {
57- moduleName = argValue ;
58- }
64+ return getRequiredModuleName ( node . arguments [ 0 ] . value . trim ( ) ) ;
5965 }
6066
61- return moduleName ;
67+ return undefined ;
6268 }
6369
64- return {
65- 'CallExpression' : function ( node ) {
66- if ( isRequireCall ( node ) ) {
67- var requiredModuleName = getRequiredModuleName ( node ) ;
68-
69- if ( requiredModuleName ) {
70- foundModules . push ( requiredModuleName ) ;
71- }
72- }
73- } ,
74- 'Program:exit' : function ( node ) {
70+ const rules = {
71+ 'Program:exit' ( node ) {
7572 if ( foundModules . length < requiredModules . length ) {
7673 var missingModules = requiredModules . filter (
7774 function ( module ) {
@@ -88,6 +85,27 @@ module.exports = function(context) {
8885 }
8986 }
9087 } ;
88+
89+ if ( isESM ) {
90+ rules . ImportDeclaration = ( node ) => {
91+ var requiredModuleName = getRequiredModuleName ( node . source . value ) ;
92+ if ( requiredModuleName ) {
93+ foundModules . push ( requiredModuleName ) ;
94+ }
95+ } ;
96+ } else {
97+ rules . CallExpression = ( node ) => {
98+ if ( isRequireCall ( node ) ) {
99+ var requiredModuleName = getRequiredModuleNameFromCall ( node ) ;
100+
101+ if ( requiredModuleName ) {
102+ foundModules . push ( requiredModuleName ) ;
103+ }
104+ }
105+ } ;
106+ }
107+
108+ return rules ;
91109} ;
92110
93111module . exports . schema = {
0 commit comments