@@ -2046,7 +2046,7 @@ namespace ts {
20462046 }
20472047
20482048 export function getExternalModuleRequireArgument ( node : Node ) {
2049- return isRequireVariableDeclaration ( node ) && ( getLeftmostAccessExpression ( node . initializer ) as CallExpression ) . arguments [ 0 ] as StringLiteral ;
2049+ return isVariableDeclarationInitializedToBareOrAccessedRequire ( node ) && ( getLeftmostAccessExpression ( node . initializer ) as CallExpression ) . arguments [ 0 ] as StringLiteral ;
20502050 }
20512051
20522052 export function isInternalModuleImportEqualsDeclaration ( node : Node ) : node is ImportEqualsDeclaration {
@@ -2113,17 +2113,30 @@ namespace ts {
21132113 * Returns true if the node is a VariableDeclaration initialized to a require call (see `isRequireCall`).
21142114 * This function does not test if the node is in a JavaScript file or not.
21152115 */
2116- export function isRequireVariableDeclaration ( node : Node ) : node is RequireVariableDeclaration {
2116+ export function isVariableDeclarationInitializedToRequire ( node : Node ) : node is VariableDeclarationInitializedTo < RequireOrImportCall > {
2117+ return isVariableDeclarationInitializedWithRequireHelper ( node , /*allowAccessedRequire*/ false ) ;
2118+ }
2119+
2120+ /**
2121+ * Like {@link isVariableDeclarationInitializedToRequire} but allows things like `require("...").foo.bar` or `require("...")["baz"]`.
2122+ */
2123+ export function isVariableDeclarationInitializedToBareOrAccessedRequire ( node : Node ) : node is VariableDeclarationInitializedTo < RequireOrImportCall | AccessExpression > {
2124+ return isVariableDeclarationInitializedWithRequireHelper ( node , /*allowAccessedRequire*/ true ) ;
2125+ }
2126+
2127+ function isVariableDeclarationInitializedWithRequireHelper ( node : Node , allowAccessedRequire : boolean ) {
21172128 if ( node . kind === SyntaxKind . BindingElement ) {
21182129 node = node . parent . parent ;
21192130 }
2120- return isVariableDeclaration ( node ) && ! ! node . initializer && isRequireCall ( getLeftmostAccessExpression ( node . initializer ) , /*requireStringLiteralLikeArgument*/ true ) ;
2131+ return isVariableDeclaration ( node ) &&
2132+ ! ! node . initializer &&
2133+ isRequireCall ( allowAccessedRequire ? getLeftmostAccessExpression ( node . initializer ) : node . initializer , /*requireStringLiteralLikeArgument*/ true ) ;
21212134 }
21222135
21232136 export function isRequireVariableStatement ( node : Node ) : node is RequireVariableStatement {
21242137 return isVariableStatement ( node )
21252138 && node . declarationList . declarations . length > 0
2126- && every ( node . declarationList . declarations , decl => isRequireVariableDeclaration ( decl ) ) ;
2139+ && every ( node . declarationList . declarations , decl => isVariableDeclarationInitializedToRequire ( decl ) ) ;
21272140 }
21282141
21292142 export function isSingleOrDoubleQuote ( charCode : number ) {
0 commit comments