eslint-plugin-sonarjs
Version:
SonarJS rules for ESLint
47 lines (46 loc) • 2.03 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Supertest = void 0;
const index_js_1 = require("./index.js");
const typescript_1 = __importDefault(require("typescript"));
var Supertest;
(function (Supertest) {
function isImported(context) {
return ((0, index_js_1.getRequireCalls)(context).some(r => r.arguments[0].type === 'Literal' && r.arguments[0].value === 'supertest') || (0, index_js_1.getImportDeclarations)(context).some(i => i.source.value === 'supertest'));
}
Supertest.isImported = isImported;
function isAssertion(context, node) {
const fqn = extractFQNForCallExpression(context, node);
return isFQNAssertion(fqn);
}
Supertest.isAssertion = isAssertion;
function isTSAssertion(services, node) {
if (node.kind !== typescript_1.default.SyntaxKind.CallExpression) {
return false;
}
const fqn = (0, index_js_1.getFullyQualifiedNameTS)(services, node);
return isFQNAssertion(fqn);
}
Supertest.isTSAssertion = isTSAssertion;
function isFQNAssertion(fqn) {
if (!fqn) {
return false;
}
const names = fqn.split('.');
/**
* supertest assertions look like `[supertest instance](...).[HTTP verb](...).expect(...)`, typically:
* `supertest(application).get('/foo').expect(200)`
* hence only the first and third values matter, the second one being an HTTP verb irrelevant for assertion detection
*/
return names.length >= 3 && names[0] === 'supertest' && names[2] === 'expect';
}
function extractFQNForCallExpression(context, node) {
if (node.type !== 'CallExpression') {
return undefined;
}
return (0, index_js_1.getFullyQualifiedName)(context, node);
}
})(Supertest || (exports.Supertest = Supertest = {}));
;