(sourceFile, checker, changes, toConvert, allowSyntheticDefaultImports)
| 159390 | } |
| 159391 | } |
| 159392 | function doChangeNamespaceToNamed(sourceFile, checker, changes, toConvert, allowSyntheticDefaultImports) { |
| 159393 | var usedAsNamespaceOrDefault = false; |
| 159394 | var nodesToReplace = []; |
| 159395 | var conflictingNames = new ts.Map(); |
| 159396 | ts.FindAllReferences.Core.eachSymbolReferenceInFile(toConvert.name, checker, sourceFile, function (id) { |
| 159397 | if (!ts.isPropertyAccessOrQualifiedName(id.parent)) { |
| 159398 | usedAsNamespaceOrDefault = true; |
| 159399 | } |
| 159400 | else { |
| 159401 | var exportName = getRightOfPropertyAccessOrQualifiedName(id.parent).text; |
| 159402 | if (checker.resolveName(exportName, id, 67108863 /* SymbolFlags.All */, /*excludeGlobals*/ true)) { |
| 159403 | conflictingNames.set(exportName, true); |
| 159404 | } |
| 159405 | ts.Debug.assert(getLeftOfPropertyAccessOrQualifiedName(id.parent) === id, "Parent expression should match id"); |
| 159406 | nodesToReplace.push(id.parent); |
| 159407 | } |
| 159408 | }); |
| 159409 | // We may need to change `mod.x` to `_x` to avoid a name conflict. |
| 159410 | var exportNameToImportName = new ts.Map(); |
| 159411 | for (var _i = 0, nodesToReplace_1 = nodesToReplace; _i < nodesToReplace_1.length; _i++) { |
| 159412 | var propertyAccessOrQualifiedName = nodesToReplace_1[_i]; |
| 159413 | var exportName = getRightOfPropertyAccessOrQualifiedName(propertyAccessOrQualifiedName).text; |
| 159414 | var importName = exportNameToImportName.get(exportName); |
| 159415 | if (importName === undefined) { |
| 159416 | exportNameToImportName.set(exportName, importName = conflictingNames.has(exportName) ? ts.getUniqueName(exportName, sourceFile) : exportName); |
| 159417 | } |
| 159418 | changes.replaceNode(sourceFile, propertyAccessOrQualifiedName, ts.factory.createIdentifier(importName)); |
| 159419 | } |
| 159420 | var importSpecifiers = []; |
| 159421 | exportNameToImportName.forEach(function (name, propertyName) { |
| 159422 | importSpecifiers.push(ts.factory.createImportSpecifier(/*isTypeOnly*/ false, name === propertyName ? undefined : ts.factory.createIdentifier(propertyName), ts.factory.createIdentifier(name))); |
| 159423 | }); |
| 159424 | var importDecl = toConvert.parent.parent; |
| 159425 | if (usedAsNamespaceOrDefault && !allowSyntheticDefaultImports) { |
| 159426 | // Need to leave the namespace import alone |
| 159427 | changes.insertNodeAfter(sourceFile, importDecl, updateImport(importDecl, /*defaultImportName*/ undefined, importSpecifiers)); |
| 159428 | } |
| 159429 | else { |
| 159430 | changes.replaceNode(sourceFile, importDecl, updateImport(importDecl, usedAsNamespaceOrDefault ? ts.factory.createIdentifier(toConvert.name.text) : undefined, importSpecifiers)); |
| 159431 | } |
| 159432 | } |
| 159433 | function getRightOfPropertyAccessOrQualifiedName(propertyAccessOrQualifiedName) { |
| 159434 | return ts.isPropertyAccessExpression(propertyAccessOrQualifiedName) ? propertyAccessOrQualifiedName.name : propertyAccessOrQualifiedName.right; |
| 159435 | } |
no test coverage detected