isCustomComponent(node, ignoreElementNamespaces = false) {
    if (
      hasAttribute(node, 'is') ||
      hasDirective(node, 'bind', 'is') ||
      hasDirective(node, 'is')
    ) {
      return true
    }

    const isHtmlName = this.isHtmlWellKnownElementName(node.rawName)
    const isSvgName = this.isSvgWellKnownElementName(node.rawName)
    const isMathName = this.isMathWellKnownElementName(node.rawName)

    if (ignoreElementNamespaces) {
      return !isHtmlName && !isSvgName && !isMathName
    }

    return (
      (this.isHtmlElementNode(node) && !isHtmlName) ||
      (this.isSvgElementNode(node) && !isSvgName) ||
      (this.isMathElementNode(node) && !isMathName)
    )
  }
Check whether the given node is a custom component or not.
@param {VElement} node The start tag node to check.
@param {boolean} [ignoreElementNamespaces=false] If `true`, ignore element namespaces.
@returns {boolean} `true` if the node is a custom component.