/** * @fileoverview Utility functions for JSX */ 'use strict'; const elementType = require('jsx-ast-utils/elementType'); const COMPAT_TAG_REGEX = /^[a-z]|-/; /** * Checks if a node represents a DOM element. * @param {object} node - JSXOpeningElement to check. * @returns {boolean} Whether or not the node corresponds to a DOM element. */ function isDOMComponent(node) { let name = elementType(node); // Get namespace if the type is JSXNamespacedName or JSXMemberExpression if (name.indexOf(':') > -1) { name = name.slice(0, name.indexOf(':')); } else if (name.indexOf('.') > -1) { name = name.slice(0, name.indexOf('.')); } return COMPAT_TAG_REGEX.test(name); } /** * Checks if a node represents a JSX element or fragment. * @param {object} node - node to check. * @returns {boolean} Whether or not the node if a JSX element or fragment. */ function isJSX(node) { return node && ['JSXElement', 'JSXFragment'].indexOf(node.type) >= 0; } module.exports = { isDOMComponent, isJSX };