123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- "use strict";
- var __spreadArray = (this && this.__spreadArray) || function (to, from) {
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
- to[j] = from[i];
- return to;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.RULE_NAME = void 0;
- var experimental_utils_1 = require("@typescript-eslint/experimental-utils");
- var utils_1 = require("../utils");
- var node_utils_1 = require("../node-utils");
- exports.RULE_NAME = 'prefer-wait-for';
- var DEPRECATED_METHODS = ['wait', 'waitForElement', 'waitForDomChange'];
- exports.default = experimental_utils_1.ESLintUtils.RuleCreator(utils_1.getDocsUrl)({
- name: exports.RULE_NAME,
- meta: {
- type: 'suggestion',
- docs: {
- description: 'Use `waitFor` instead of deprecated wait methods',
- category: 'Best Practices',
- recommended: false,
- },
- messages: {
- preferWaitForMethod: '`{{ methodName }}` is deprecated in favour of `waitFor`',
- preferWaitForImport: 'import `waitFor` instead of deprecated async utils',
- },
- fixable: 'code',
- schema: [],
- },
- defaultOptions: [],
- create: function (context) {
- var reportImport = function (node) {
- context.report({
- node: node,
- messageId: 'preferWaitForImport',
- fix: function (fixer) {
- var excludedImports = __spreadArray(__spreadArray([], DEPRECATED_METHODS), ['waitFor']);
- var newImports = node.specifiers
- .filter(function (specifier) {
- return node_utils_1.isImportSpecifier(specifier) &&
- !excludedImports.includes(specifier.imported.name);
- })
- .map(function (specifier) { return specifier.imported.name; });
- newImports.push('waitFor');
- var newNode = "import { " + newImports.join(',') + " } from '" + node.source.value + "';";
- return fixer.replaceText(node, newNode);
- },
- });
- };
- var reportWait = function (node) {
- context.report({
- node: node,
- messageId: 'preferWaitForMethod',
- data: {
- methodName: node.name,
- },
- fix: function (fixer) {
- var callExpressionNode = node_utils_1.findClosestCallExpressionNode(node);
- var arg = callExpressionNode.arguments[0];
- var fixers = [];
- if (arg) {
- fixers.push(fixer.replaceText(node, 'waitFor'));
- if (node.name === 'waitForDomChange') {
- fixers.push(fixer.insertTextBefore(arg, '() => {}, '));
- }
- }
- else {
- var methodReplacement = 'waitFor(() => {})';
- if (node_utils_1.isMemberExpression(node.parent) &&
- node_utils_1.isIdentifier(node.parent.object)) {
- methodReplacement = node.parent.object.name + "." + methodReplacement;
- }
- var newText = methodReplacement;
- fixers.push(fixer.replaceText(callExpressionNode, newText));
- }
- return fixers;
- },
- });
- };
- return {
- 'ImportDeclaration[source.value=/testing-library/]': function (node) {
- var deprecatedImportSpecifiers = node.specifiers.filter(function (specifier) {
- return node_utils_1.isImportSpecifier(specifier) &&
- specifier.imported &&
- DEPRECATED_METHODS.includes(specifier.imported.name);
- });
- deprecatedImportSpecifiers.forEach(function (importSpecifier, i) {
- if (i === 0) {
- reportImport(node);
- }
- context
- .getDeclaredVariables(importSpecifier)
- .forEach(function (variable) {
- return variable.references.forEach(function (reference) {
- return reportWait(reference.identifier);
- });
- });
- });
- },
- 'ImportDeclaration[source.value=/testing-library/] > ImportNamespaceSpecifier': function (node) {
- context.getDeclaredVariables(node).forEach(function (variable) {
- return variable.references.forEach(function (reference) {
- if (node_utils_1.isMemberExpression(reference.identifier.parent) &&
- node_utils_1.isIdentifier(reference.identifier.parent.property) &&
- DEPRECATED_METHODS.includes(reference.identifier.parent.property.name)) {
- reportWait(reference.identifier.parent.property);
- }
- });
- });
- },
- };
- },
- });
|