UNPKG

@xtrek/ts-migrate-plugins

Version:

Set of codemods, which are doing transformation of js/jsx to ts/tsx

72 lines 2.8 kB
"use strict"; 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