(chain, index, stopper)
| 53675 | return ts.factory.createTypeReferenceNode(entityName, lastTypeArgs); |
| 53676 | } |
| 53677 | function createAccessFromSymbolChain(chain, index, stopper) { |
| 53678 | var typeParameterNodes = index === (chain.length - 1) ? overrideTypeArguments : lookupTypeParameterNodes(chain, index, context); |
| 53679 | var symbol = chain[index]; |
| 53680 | var parent = chain[index - 1]; |
| 53681 | var symbolName; |
| 53682 | if (index === 0) { |
| 53683 | context.flags |= 16777216 /* NodeBuilderFlags.InInitialEntityName */; |
| 53684 | symbolName = getNameOfSymbolAsWritten(symbol, context); |
| 53685 | context.approximateLength += (symbolName ? symbolName.length : 0) + 1; |
| 53686 | context.flags ^= 16777216 /* NodeBuilderFlags.InInitialEntityName */; |
| 53687 | } |
| 53688 | else { |
| 53689 | if (parent && getExportsOfSymbol(parent)) { |
| 53690 | var exports_2 = getExportsOfSymbol(parent); |
| 53691 | ts.forEachEntry(exports_2, function (ex, name) { |
| 53692 | if (getSymbolIfSameReference(ex, symbol) && !isLateBoundName(name) && name !== "export=" /* InternalSymbolName.ExportEquals */) { |
| 53693 | symbolName = ts.unescapeLeadingUnderscores(name); |
| 53694 | return true; |
| 53695 | } |
| 53696 | }); |
| 53697 | } |
| 53698 | } |
| 53699 | if (symbolName === undefined) { |
| 53700 | var name = ts.firstDefined(symbol.declarations, ts.getNameOfDeclaration); |
| 53701 | if (name && ts.isComputedPropertyName(name) && ts.isEntityName(name.expression)) { |
| 53702 | var LHS = createAccessFromSymbolChain(chain, index - 1, stopper); |
| 53703 | if (ts.isEntityName(LHS)) { |
| 53704 | return ts.factory.createIndexedAccessTypeNode(ts.factory.createParenthesizedType(ts.factory.createTypeQueryNode(LHS)), ts.factory.createTypeQueryNode(name.expression)); |
| 53705 | } |
| 53706 | return LHS; |
| 53707 | } |
| 53708 | symbolName = getNameOfSymbolAsWritten(symbol, context); |
| 53709 | } |
| 53710 | context.approximateLength += symbolName.length + 1; |
| 53711 | if (!(context.flags & 16 /* NodeBuilderFlags.ForbidIndexedAccessSymbolReferences */) && parent && |
| 53712 | getMembersOfSymbol(parent) && getMembersOfSymbol(parent).get(symbol.escapedName) && |
| 53713 | getSymbolIfSameReference(getMembersOfSymbol(parent).get(symbol.escapedName), symbol)) { |
| 53714 | // Should use an indexed access |
| 53715 | var LHS = createAccessFromSymbolChain(chain, index - 1, stopper); |
| 53716 | if (ts.isIndexedAccessTypeNode(LHS)) { |
| 53717 | return ts.factory.createIndexedAccessTypeNode(LHS, ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(symbolName))); |
| 53718 | } |
| 53719 | else { |
| 53720 | return ts.factory.createIndexedAccessTypeNode(ts.factory.createTypeReferenceNode(LHS, typeParameterNodes), ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(symbolName))); |
| 53721 | } |
| 53722 | } |
| 53723 | var identifier = ts.setEmitFlags(ts.factory.createIdentifier(symbolName, typeParameterNodes), 16777216 /* EmitFlags.NoAsciiEscaping */); |
| 53724 | identifier.symbol = symbol; |
| 53725 | if (index > stopper) { |
| 53726 | var LHS = createAccessFromSymbolChain(chain, index - 1, stopper); |
| 53727 | if (!ts.isEntityName(LHS)) { |
| 53728 | return ts.Debug.fail("Impossible construct - an export of an indexed access cannot be reachable"); |
| 53729 | } |
| 53730 | return ts.factory.createQualifiedName(LHS, identifier); |
| 53731 | } |
| 53732 | return identifier; |
| 53733 | } |
| 53734 | } |
no test coverage detected
searching dependent graphs…