@xtrek/ts-migrate-plugins
Version:
Set of codemods, which are doing transformation of js/jsx to ts/tsx
72 lines • 2.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.findKnownVariables = exports.findKnownImports = exports.collectIdentifiers = exports.collectIdentifierNodes = void 0;
const typescript_1 = __importDefault(require("typescript"));
/**
* Recursively finds all identifier nodes within/including a given node
* Note: this requires parent nodes to be set because it relies on generic parent - child relationships.
* @param root
*/
function collectIdentifierNodes(root) {
const identifiers = [];
const visitor = (node) => {
if (typescript_1.default.isIdentifier(node)) {
identifiers.push(node);
}
typescript_1.default.forEachChild(node, visitor);
};
visitor(root);
return identifiers;
}
exports.collectIdentifierNodes = collectIdentifierNodes;
/**
* Returns a set of all the identifier names within the given source file
* @param sourceFile
*/
function collectIdentifiers(sourceFile) {
const identifiers = collectIdentifierNodes(sourceFile);
return identifiers.reduce((identifierStrings, identifierNode) => {
identifierStrings.add(identifierNode.text);
return identifierStrings;
}, new Set());
}
exports.collectIdentifiers = collectIdentifiers;
/**
* Finds known imports
* @param sourceFile
*/
function findKnownImports(sourceFile) {
const importDeclarations = sourceFile.statements.filter(typescript_1.default.isImportDeclaration);
const knownImports = {};
importDeclarations.forEach((importDeclaration) => {
const { importClause } = importDeclaration;
if (!importClause) {
return;
}
const identifiers = collectIdentifierNodes(importClause);
identifiers.forEach((identifier) => {
knownImports[identifier.text] = { pos: identifier.pos, end: importClause.end };
});
});
return knownImports;
}
exports.findKnownImports = findKnownImports;
function findKnownVariables(sourceFile) {
const variableStatements = sourceFile.statements.filter(typescript_1.default.isVariableStatement);
const knownVariables = {};
variableStatements.forEach((statement) => {
const { declarations } = statement.declarationList;
declarations.forEach((declaration) => {
const identifiers = collectIdentifierNodes(declaration.name);
identifiers.forEach((identifier) => {
knownVariables[identifier.text] = { pos: identifier.pos, end: declaration.end };
});
});
});
return knownVariables;
}
exports.findKnownVariables = findKnownVariables;
//# sourceMappingURL=identifiers.js.map