eslint-plugin-listeners
Version:
ESLint plugin for preventing memory leaks around event listeners
49 lines (48 loc) • 2.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDescription = exports.parseMemberExpression = exports.isArgumentIdentifier = exports.isArgumentLiteral = exports.isNodeArrowFunctionExpression = exports.isNodeFunctionExpression = exports.isNodeThisExpression = exports.isNodeMemberExpression = exports.isNodeIdentifier = exports.RuleType = void 0;
var RuleType;
(function (RuleType) {
RuleType["MissingRemoveEventListener"] = "no-missing-remove-event-listener";
RuleType["MatchingRemoveEventListener"] = "matching-remove-event-listener";
RuleType["InlineFunctionEventListener"] = "no-inline-function-event-listener";
})(RuleType || (exports.RuleType = RuleType = {}));
const isNodeIdentifier = (node) => (node === null || node === void 0 ? void 0 : node.type) === 'Identifier';
exports.isNodeIdentifier = isNodeIdentifier;
const isNodeMemberExpression = (node) => (node === null || node === void 0 ? void 0 : node.type) === 'MemberExpression';
exports.isNodeMemberExpression = isNodeMemberExpression;
const isNodeThisExpression = (node) => (node === null || node === void 0 ? void 0 : node.type) === 'ThisExpression';
exports.isNodeThisExpression = isNodeThisExpression;
const isNodeFunctionExpression = (node) => (node === null || node === void 0 ? void 0 : node.type) === 'FunctionExpression';
exports.isNodeFunctionExpression = isNodeFunctionExpression;
const isNodeArrowFunctionExpression = (node) => (node === null || node === void 0 ? void 0 : node.type) === 'ArrowFunctionExpression';
exports.isNodeArrowFunctionExpression = isNodeArrowFunctionExpression;
const isArgumentLiteral = (arg) => (arg === null || arg === void 0 ? void 0 : arg.type) === 'Literal';
exports.isArgumentLiteral = isArgumentLiteral;
const isArgumentIdentifier = (arg) => (arg === null || arg === void 0 ? void 0 : arg.type) === 'Identifier';
exports.isArgumentIdentifier = isArgumentIdentifier;
const parseMemberExpression = (node) => {
let value;
if ((0, exports.isNodeIdentifier)(node.object)) {
value = node.object.name;
}
if ((0, exports.isNodeMemberExpression)(node.object)) {
value = (0, exports.parseMemberExpression)(node.object);
}
if ((0, exports.isNodeThisExpression)(node.object)) {
value = `this.${node.property.name}`;
}
return value;
};
exports.parseMemberExpression = parseMemberExpression;
const getDescription = (ruleName) => {
switch (ruleName) {
case RuleType.MissingRemoveEventListener:
return 'No missing removeEventListener if addEventListener exists';
case RuleType.MatchingRemoveEventListener:
return 'Handler for removeEventListener should match addEventListener';
case RuleType.InlineFunctionEventListener:
return 'Handler for event listener should not be an inline function';
}
};
exports.getDescription = getDescription;