UNPKG

jest-codemods

Version:

Codemods for migrating test files to Jest

51 lines (50 loc) 2.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var consts_1 = require("../utils/consts"); var imports_1 = require("../utils/imports"); var jestGlobalsImport = function (fileInfo, api) { var j = api.jscodeshift; var ast = j(fileInfo.source); var jestGlobalsUsed = new Set(); var isImplicitlyInScope = function (expression, globalName) { return Boolean(expression.scope.lookup(globalName) && ast.find(j.ImportSpecifier, { imported: { name: globalName } }).size() === 0); }; consts_1.JEST_GLOBALS.forEach(function (globalName) { if (ast .find(j.CallExpression, { callee: { name: globalName } }) .filter(function (callExpression) { return !isImplicitlyInScope(callExpression, globalName); }) .size() > 0 || ast .find(j.MemberExpression, { object: { name: globalName } }) .filter(function (memberExpression) { return !isImplicitlyInScope(memberExpression, globalName); }) .size() > 0) { jestGlobalsUsed.add(globalName); } }); var jestGlobalsImports = (0, imports_1.findImports)(j, ast, '@jest/globals'); var hasJestGlobalsImport = jestGlobalsImports.length > 0; var needsJestGlobalsImport = jestGlobalsUsed.size > 0; if (!needsJestGlobalsImport) { if (!hasJestGlobalsImport) return null; (0, imports_1.removeRequireAndImport)(j, ast, '@jest/globals'); } else { var jestGlobalsImport_1 = hasJestGlobalsImport ? jestGlobalsImports.get().value : j.importDeclaration([], j.stringLiteral('@jest/globals')); var specifiers_1 = jestGlobalsImport_1.specifiers; var existingNames_1 = new Set(specifiers_1.map(function (s) { return s.imported.name; })); jestGlobalsUsed.forEach(function (jestGlobal) { if (!existingNames_1.has(jestGlobal)) { specifiers_1.push(j.importSpecifier(j.identifier(jestGlobal))); } }); if (!hasJestGlobalsImport) { ast.find(j.Program).get('body', 0).insertBefore(jestGlobalsImport_1); } } return ast.toSource({ quote: 'single' }); }; exports.default = jestGlobalsImport;