@@ -12825,16 +12825,41 @@ namespace ts {
1282512825 }
1282612826
1282712827 // In JavaScript files, calls to any identifier 'require' are treated as external module imports
12828- if (isInJavaScriptFile(node) &&
12829- isRequireCall(node, /*checkArgumentIsStringLiteral*/true) &&
12830- // Make sure require is not a local function
12831- !resolveName(node.expression, (<Identifier>node.expression).text, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined)) {
12828+ if (isInJavaScriptFile(node) && isCommonJsRequire(node)) {
1283212829 return resolveExternalModuleTypeByLiteral(<StringLiteral>node.arguments[0]);
1283312830 }
1283412831
1283512832 return getReturnTypeOfSignature(signature);
1283612833 }
1283712834
12835+ function isCommonJsRequire(node: Node) {
12836+ if (!isRequireCall(node, /*checkArgumentIsStringLiteral*/true)) {
12837+ return false;
12838+ }
12839+ // Make sure require is not a local function
12840+ const resolvedRequire = resolveName(node.expression, (<Identifier>node.expression).text, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined);
12841+ if (!resolvedRequire) {
12842+ // project does not contain symbol named 'require' - assume commonjs require
12843+ return true;
12844+ }
12845+ // project includes symbol named 'require' - make sure that it it ambient and local non-alias
12846+ if (resolvedRequire.flags & SymbolFlags.Alias) {
12847+ return false;
12848+ }
12849+
12850+ const targetDeclarationKind = resolvedRequire.flags & SymbolFlags.Function
12851+ ? SyntaxKind.FunctionDeclaration
12852+ : resolvedRequire.flags & SymbolFlags.Variable
12853+ ? SyntaxKind.VariableDeclaration
12854+ : SyntaxKind.Unknown;
12855+ if (targetDeclarationKind !== SyntaxKind.Unknown) {
12856+ const decl = getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
12857+ // function/variable declaration should be ambient
12858+ return isInAmbientContext(decl);
12859+ }
12860+ return false;
12861+ }
12862+
1283812863 function checkTaggedTemplateExpression(node: TaggedTemplateExpression): Type {
1283912864 return getReturnTypeOfSignature(getResolvedSignature(node));
1284012865 }
0 commit comments