Sha256: 7b80e0942bf37b8345290e219eb6b636dc782ede533dfea51729401d00080ebb
Contents?: true
Size: 1.8 KB
Versions: 43
Compression:
Stored size: 1.8 KB
Contents
/** * @fileoverview Prevent usage of dangerous JSX props * @author Scott Andrews */ 'use strict'; const docsUrl = require('../util/docsUrl'); const jsxUtil = require('../util/jsx'); // ------------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------------ const DANGEROUS_MESSAGE = 'Dangerous property \'{{name}}\' found'; const DANGEROUS_PROPERTY_NAMES = [ 'dangerouslySetInnerHTML' ]; const DANGEROUS_PROPERTIES = DANGEROUS_PROPERTY_NAMES.reduce((props, prop) => { props[prop] = prop; return props; }, Object.create(null)); // ------------------------------------------------------------------------------ // Helpers // ------------------------------------------------------------------------------ /** * Checks if a JSX attribute is dangerous. * @param {String} name - Name of the attribute to check. * @returns {boolean} Whether or not the attribute is dnagerous. */ function isDangerous(name) { return name in DANGEROUS_PROPERTIES; } // ------------------------------------------------------------------------------ // Rule Definition // ------------------------------------------------------------------------------ module.exports = { meta: { docs: { description: 'Prevent usage of dangerous JSX props', category: 'Best Practices', recommended: false, url: docsUrl('no-danger') }, schema: [] }, create: function(context) { return { JSXAttribute: function(node) { if (jsxUtil.isDOMComponent(node.parent) && isDangerous(node.name.name)) { context.report({ node: node, message: DANGEROUS_MESSAGE, data: { name: node.name.name } }); } } }; } };
Version data entries
43 entries across 43 versions & 1 rubygems