MCPcopy Create free account
hub / github.com/nodejs/node / doChangeNamespaceToNamed

Function doChangeNamespaceToNamed

test/fixtures/snapshot/typescript.js:159392–159432  ·  view source on GitHub ↗
(sourceFile, checker, changes, toConvert, allowSyntheticDefaultImports)

Source from the content-addressed store, hash-verified

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 }

Callers 1

doChangeFunction · 0.85

Calls 9

updateImportFunction · 0.85
assertMethod · 0.80
getMethod · 0.65
hasMethod · 0.65
forEachMethod · 0.65
setMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected