text: 'use strict';
  
  Object.defineProperty(exports, '__esModule', {
    value: true
  });
  exports.test = exports.serialize = exports.default = void 0;
  
  var _markup = require('./lib/markup');
  
  /**
   * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   */
  const ELEMENT_NODE = 1;
  const TEXT_NODE = 3;
  const COMMENT_NODE = 8;
  const FRAGMENT_NODE = 11;
  const ELEMENT_REGEXP = /^((HTML|SVG)\w*)?Element$/;
  
  const testHasAttribute = val => {
    try {
      return typeof val.hasAttribute === 'function' && val.hasAttribute('is');
    } catch {
      return false;
    }
  };
  
  const testNode = val => {
    const constructorName = val.constructor.name;
    const {nodeType, tagName} = val;
    const isCustomElement =
      (typeof tagName === 'string' && tagName.includes('-')) ||
      testHasAttribute(val);
    return (
      (nodeType === ELEMENT_NODE &&
        (ELEMENT_REGEXP.test(constructorName) || isCustomElement)) ||
      (nodeType === TEXT_NODE && constructorName === 'Text') ||
      (nodeType === COMMENT_NODE && constructorName === 'Comment') ||
      (nodeType === FRAGMENT_NODE && constructorName === 'DocumentFragment')
    );
  };
  
  const test = val => {
    var _val$constructor;
  
    return (
      (val === null || val === void 0
        ? void 0
        : (_val$constructor = val.constructor) === null ||
          _val$constructor === void 0
        ? void 0
        : _val$constructor.name) && testNode(val)
    );
  };
  
  exports.test = test;
  
  function nodeIsText(node) {
    return node.nodeType === TEXT_NODE;
  }
  
  function nodeIsComment(node) {
    return node.nodeType === COMMENT_NODE;
  }
  
  function nodeIsFragment(node) {
    return node.nodeType === FRAGMENT_NODE;
  }
  
  const serialize = (node, config, indentation, depth, refs, printer) => {
    if (nodeIsText(node)) {
      return (0, _markup.printText)(node.data, config);
    }
  
    if (nodeIsComment(node)) {
      return (0, _markup.printComment)(node.data, config);
    }
  
    const type = nodeIsFragment(node)
      ? `DocumentFragment`
      : node.tagName.toLowerCase();
  
    if (++depth > config.maxDepth) {
      return (0, _markup.printElementAsLeaf)(type, config);
    }
  
    return (0, _markup.printElement)(
      type,
      (0, _markup.printProps)(
        nodeIsFragment(node)
          ? []
          : Array.from(node.attributes)
              .map(attr => attr.name)
              .sort(),
        nodeIsFragment(node)
          ? {}
          : Array.from(node.attributes).reduce((props, attribute) => {
              props[attribute.name] = attribute.value;
              return props;
            }, {}),
        config,
        indentation + config.indent,
        depth,
        refs,
        printer
      ),
      (0, _markup.printChildren)(
        Array.prototype.slice.call(node.childNodes || node.children),
        config,
        indentation + config.indent,
        depth,
        refs,
        printer
      ),
      config,
      indentation
    );
  };
  
  exports.serialize = serialize;
  const plugin = {
    serialize,
    test
  };
  var _default = plugin;
  exports.default = _default;
  