New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

eslint-plugin-delegated-events

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eslint-plugin-delegated-events - npm Package Compare versions

Comparing version 0.0.1 to 0.1.0

2

package.json
{
"name": "eslint-plugin-delegated-events",
"version": "0.0.1",
"version": "0.1.0",
"description": "Disallow delegating high-frequency events.",

@@ -5,0 +5,0 @@ "repository": "dgraham/eslint-plugin-delegated-events",

'use strict';
module.exports = function(context) {
const bindings = []
return {
ImportDeclaration: function(node) {
if (node.source.value !== 'delegated-events') return
for (let spec of node.specifiers) {
switch (spec.type) {
case 'ImportSpecifier':
if (spec.imported.name === 'on') {
bindings.push(callee => {
return callee.type === 'Identifier' &&
callee.name === spec.local.name
})
}
break
case 'ImportNamespaceSpecifier':
bindings.push(callee => {
return callee.type === 'MemberExpression' &&
callee.object.name === spec.local.name &&
callee.property.name === 'on'
})
break
}
}
},
CallExpression: function(node) {
if (node.callee.name !== 'on') return
if (!bindings.some(fn => fn(node.callee))) return
if (!node.arguments[0]) return
var name = node.arguments[0].value
switch (name) {
switch (node.arguments[0].value) {
case 'input':

@@ -11,0 +36,0 @@ case 'keydown':

'use strict';
var rule = require('../rules/no-high-freq')
var RuleTester = require('eslint').RuleTester
const rule = require('../rules/no-high-freq')
const RuleTester = require('eslint').RuleTester
var error = 'High-frequency delegated events are not allowed'
const error = 'High-frequency delegated events are not allowed'
var ruleTester = new RuleTester()
const ruleTester = new RuleTester()
ruleTester.run('no-high-freq', rule, {
valid: [
'on("click", "button", function(){})',
'on("change", "button", function(){})',
'on("drop", "button", function(){})'
{
code: 'on("click", "div", function(){})',
parserOptions: {sourceType: 'script'}
},
{
code: 'on("input", "div", function(){})',
parserOptions: {sourceType: 'script'}
},
{
code: 'on("input", "div", function(){})',
parserOptions: {sourceType: 'module'}
},
{
code: 'import {on} from "delegated-events"; on("click", "div", function(){})',
parserOptions: {sourceType: 'module'}
},
{
code: 'import {on as alias} from "delegated-events"; alias("click", "div", function(){})',
parserOptions: {sourceType: 'module'}
},
{
code: 'import * as events from "delegated-events"; events.on("click", "div", function(){})',
parserOptions: {sourceType: 'module'}
},
{
code: 'import {on} from "not-delegated-events"; on("input", "div", function(){})',
parserOptions: {sourceType: 'module'}
}
],
invalid: [
{
code: 'on("input", "div", function(event){})',
code: 'import {on as alias} from "delegated-events"; alias("input", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'on("keydown", "div", function(event){})',
code: 'import * as events from "delegated-events"; events.on("input", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'on("keypress", "div", function(event){})',
code: 'import {on} from "delegated-events"; on("input", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'on("keyup", "div", function(event){})',
code: 'import {on} from "delegated-events"; on("keydown", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'on("mouseout", "div", function(event){})',
code: 'import {on} from "delegated-events"; on("keypress", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'on("mouseover", "div", function(event){})',
code: 'import {on} from "delegated-events"; on("keyup", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'on("mousemove", "div", function(event){})',
code: 'import {on} from "delegated-events"; on("mouseout", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'on("scroll", "div", function(event){})',
code: 'import {on} from "delegated-events"; on("mouseover", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'import {on} from "delegated-events"; on("mousemove", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
},
{
code: 'import {on} from "delegated-events"; on("scroll", "div", function(event){})',
parserOptions: {sourceType: 'module'},
errors: [{message: error, type: 'CallExpression'}]
}
]
})
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc