MCPcopy Index your code
hub / github.com/nodejs/node / getTypeFromImportTypeNode

Function getTypeFromImportTypeNode

test/fixtures/snapshot/typescript.js:62756–62815  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

62754 }
62755 }
62756 function getTypeFromImportTypeNode(node) {
62757 var links = getNodeLinks(node);
62758 if (!links.resolvedType) {
62759 if (node.isTypeOf && node.typeArguments) { // Only the non-typeof form can make use of type arguments
62760 error(node, ts.Diagnostics.Type_arguments_cannot_be_used_here);
62761 links.resolvedSymbol = unknownSymbol;
62762 return links.resolvedType = errorType;
62763 }
62764 if (!ts.isLiteralImportTypeNode(node)) {
62765 error(node.argument, ts.Diagnostics.String_literal_expected);
62766 links.resolvedSymbol = unknownSymbol;
62767 return links.resolvedType = errorType;
62768 }
62769 var targetMeaning = node.isTypeOf ? 111551 /* SymbolFlags.Value */ : node.flags & 8388608 /* NodeFlags.JSDoc */ ? 111551 /* SymbolFlags.Value */ | 788968 /* SymbolFlags.Type */ : 788968 /* SymbolFlags.Type */;
62770 // TODO: Future work: support unions/generics/whatever via a deferred import-type
62771 var innerModuleSymbol = resolveExternalModuleName(node, node.argument.literal);
62772 if (!innerModuleSymbol) {
62773 links.resolvedSymbol = unknownSymbol;
62774 return links.resolvedType = errorType;
62775 }
62776 var moduleSymbol = resolveExternalModuleSymbol(innerModuleSymbol, /*dontResolveAlias*/ false);
62777 if (!ts.nodeIsMissing(node.qualifier)) {
62778 var nameStack = getIdentifierChain(node.qualifier);
62779 var currentNamespace = moduleSymbol;
62780 var current = void 0;
62781 while (current = nameStack.shift()) {
62782 var meaning = nameStack.length ? 1920 /* SymbolFlags.Namespace */ : targetMeaning;
62783 // typeof a.b.c is normally resolved using `checkExpression` which in turn defers to `checkQualifiedName`
62784 // That, in turn, ultimately uses `getPropertyOfType` on the type of the symbol, which differs slightly from
62785 // the `exports` lookup process that only looks up namespace members which is used for most type references
62786 var mergedResolvedSymbol = getMergedSymbol(resolveSymbol(currentNamespace));
62787 var next = node.isTypeOf
62788 ? getPropertyOfType(getTypeOfSymbol(mergedResolvedSymbol), current.escapedText)
62789 : getSymbol(getExportsOfSymbol(mergedResolvedSymbol), current.escapedText, meaning);
62790 if (!next) {
62791 error(current, ts.Diagnostics.Namespace_0_has_no_exported_member_1, getFullyQualifiedName(currentNamespace), ts.declarationNameToString(current));
62792 return links.resolvedType = errorType;
62793 }
62794 getNodeLinks(current).resolvedSymbol = next;
62795 getNodeLinks(current.parent).resolvedSymbol = next;
62796 currentNamespace = next;
62797 }
62798 links.resolvedType = resolveImportSymbolType(node, links, currentNamespace, targetMeaning);
62799 }
62800 else {
62801 if (moduleSymbol.flags & targetMeaning) {
62802 links.resolvedType = resolveImportSymbolType(node, links, moduleSymbol, targetMeaning);
62803 }
62804 else {
62805 var errorMessage = targetMeaning === 111551 /* SymbolFlags.Value */
62806 ? ts.Diagnostics.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here
62807 : ts.Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0;
62808 error(node, errorMessage, node.argument.literal.text);
62809 links.resolvedSymbol = unknownSymbol;
62810 links.resolvedType = errorType;
62811 }
62812 }
62813 }

Callers 1

Calls 14

getNodeLinksFunction · 0.85
getIdentifierChainFunction · 0.85
getMergedSymbolFunction · 0.85
resolveSymbolFunction · 0.85
getPropertyOfTypeFunction · 0.85
getTypeOfSymbolFunction · 0.85
getSymbolFunction · 0.85
getExportsOfSymbolFunction · 0.85
getFullyQualifiedNameFunction · 0.85
resolveImportSymbolTypeFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…