@@ -2074,7 +2074,7 @@ namespace ts {
20742074 }
20752075
20762076 export function getExternalModuleRequireArgument ( node : Node ) {
2077- return isRequireVariableDeclaration ( node ) && ( getLeftmostAccessExpression ( node . initializer ) as CallExpression ) . arguments [ 0 ] as StringLiteral ;
2077+ return isVariableDeclarationInitializedToBareOrAccessedRequire ( node ) && ( getLeftmostAccessExpression ( node . initializer ) as CallExpression ) . arguments [ 0 ] as StringLiteral ;
20782078 }
20792079
20802080 export function isInternalModuleImportEqualsDeclaration ( node : Node ) : node is ImportEqualsDeclaration {
@@ -2141,17 +2141,30 @@ namespace ts {
21412141 * Returns true if the node is a VariableDeclaration initialized to a require call (see `isRequireCall`).
21422142 * This function does not test if the node is in a JavaScript file or not.
21432143 */
2144- export function isRequireVariableDeclaration ( node : Node ) : node is RequireVariableDeclaration {
2144+ export function isVariableDeclarationInitializedToRequire ( node : Node ) : node is VariableDeclarationInitializedTo < RequireOrImportCall > {
2145+ return isVariableDeclarationInitializedWithRequireHelper ( node , /*allowAccessedRequire*/ false ) ;
2146+ }
2147+
2148+ /**
2149+ * Like {@link isVariableDeclarationInitializedToRequire} but allows things like `require("...").foo.bar` or `require("...")["baz"]`.
2150+ */
2151+ export function isVariableDeclarationInitializedToBareOrAccessedRequire ( node : Node ) : node is VariableDeclarationInitializedTo < RequireOrImportCall | AccessExpression > {
2152+ return isVariableDeclarationInitializedWithRequireHelper ( node , /*allowAccessedRequire*/ true ) ;
2153+ }
2154+
2155+ function isVariableDeclarationInitializedWithRequireHelper ( node : Node , allowAccessedRequire : boolean ) {
21452156 if ( node . kind === SyntaxKind . BindingElement ) {
21462157 node = node . parent . parent ;
21472158 }
2148- return isVariableDeclaration ( node ) && ! ! node . initializer && isRequireCall ( getLeftmostAccessExpression ( node . initializer ) , /*requireStringLiteralLikeArgument*/ true ) ;
2159+ return isVariableDeclaration ( node ) &&
2160+ ! ! node . initializer &&
2161+ isRequireCall ( allowAccessedRequire ? getLeftmostAccessExpression ( node . initializer ) : node . initializer , /*requireStringLiteralLikeArgument*/ true ) ;
21492162 }
21502163
21512164 export function isRequireVariableStatement ( node : Node ) : node is RequireVariableStatement {
21522165 return isVariableStatement ( node )
21532166 && node . declarationList . declarations . length > 0
2154- && every ( node . declarationList . declarations , decl => isRequireVariableDeclaration ( decl ) ) ;
2167+ && every ( node . declarationList . declarations , decl => isVariableDeclarationInitializedToRequire ( decl ) ) ;
21552168 }
21562169
21572170 export function isSingleOrDoubleQuote ( charCode : number ) {
0 commit comments