UNPKG

@masknet/eslint-plugin

Version:
62 lines 2.41 kB
import { isIdentifierName, isLiteralValue, isMemberExpression } from '../node.js'; import { createRule } from '../rule.js'; export default createRule({ name: 'prefer-fetch', meta: { type: 'problem', docs: { description: 'Enforce fetch', recommended: 'stylistic', }, schema: [], messages: { callee: "Should use 'fetch' instead", }, }, create(context) { return { ImportDeclaration(node) { const packageName = node.source.value; const disallow = packageName === 'axios' || packageName === 'request'; if (!disallow) return; context.report({ node, messageId: 'callee' }); }, NewExpression(node) { const disallow = isXMLHttpRequest(node) || isActiveXObject(node); if (!disallow) return; context.report({ node, messageId: 'callee' }); }, CallExpression(node) { const disallow = is$HTTP(node) || isJQuery(node) || isRequire(node, 'axios') || isRequire(node, 'request'); if (!disallow) return; context.report({ node, messageId: 'callee' }); }, }; }, }); function isXMLHttpRequest({ callee }) { return isIdentifierName(callee, 'XMLHttpRequest'); } function isActiveXObject(expr) { // cspell:ignore XMLHTTP return isIdentifierName(expr.callee, 'ActiveXObject') && isLiteralValue(expr.arguments[0], /xmlhttp/i); } function isRequire(node, value) { return isIdentifierName(node.callee, 'require') && isLiteralValue(node.arguments[0], value); } function is$HTTP({ callee }) { const SYMBOL = '$http'; return isIdentifierName(callee, SYMBOL) || (isMemberExpression(callee) && isIdentifierName(callee.object, SYMBOL)); } function isJQuery({ callee, parent }) { const SYMBOLS = ['$', 'jQuery']; const methods = ['ajax', 'get', 'post', 'getJSON', 'getScript']; return ((isIdentifierName(callee, SYMBOLS) && isMemberExpression(parent) && isIdentifierName(parent.property, 'load')) || (isMemberExpression(callee) && isIdentifierName(callee.object, SYMBOLS) && isIdentifierName(callee.property, methods))); } //# sourceMappingURL=prefer-fetch.js.map