@@ -2046,7 +2046,7 @@ namespace ts {
2046
2046
}
2047
2047
2048
2048
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 ;
2050
2050
}
2051
2051
2052
2052
export function isInternalModuleImportEqualsDeclaration ( node : Node ) : node is ImportEqualsDeclaration {
@@ -2113,17 +2113,30 @@ namespace ts {
2113
2113
* Returns true if the node is a VariableDeclaration initialized to a require call (see `isRequireCall`).
2114
2114
* This function does not test if the node is in a JavaScript file or not.
2115
2115
*/
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 ) {
2117
2128
if ( node . kind === SyntaxKind . BindingElement ) {
2118
2129
node = node . parent . parent ;
2119
2130
}
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 ) ;
2121
2134
}
2122
2135
2123
2136
export function isRequireVariableStatement ( node : Node ) : node is RequireVariableStatement {
2124
2137
return isVariableStatement ( node )
2125
2138
&& node . declarationList . declarations . length > 0
2126
- && every ( node . declarationList . declarations , decl => isRequireVariableDeclaration ( decl ) ) ;
2139
+ && every ( node . declarationList . declarations , decl => isVariableDeclarationInitializedToRequire ( decl ) ) ;
2127
2140
}
2128
2141
2129
2142
export function isSingleOrDoubleQuote ( charCode : number ) {
0 commit comments