text: 'use strict';
  
  exports.name = 'addAttributesToSVGElement';
  exports.type = 'visitor';
  exports.active = false;
  exports.description = 'adds attributes to an outer <svg> element';
  
  var ENOCLS = `Error in plugin "addAttributesToSVGElement": absent parameters.
  It should have a list of "attributes" or one "attribute".
  Config example:
  
  plugins: [
    {
      name: 'addAttributesToSVGElement',
      params: {
        attribute: "mySvg"
      }
    }
  ]
  
  plugins: [
    {
      name: 'addAttributesToSVGElement',
      params: {
        attributes: ["mySvg", "size-big"]
      }
    }
  ]
  
  plugins: [
    {
      name: 'addAttributesToSVGElement',
      params: {
        attributes: [
          {
            focusable: false
          },
          {
            'data-image': icon
          }
        ]
      }
    }
  ]
  `;
  
  /**
   * Add attributes to an outer <svg> element. Example config:
   *
   * @author April Arcus
   *
   * @type {import('../lib/types').Plugin<{
   *   attribute?: string | Record<string, null | string>,
   *   attributes?: Array<string | Record<string, null | string>>
   * }>}
   */
  exports.fn = (root, params) => {
    if (!Array.isArray(params.attributes) && !params.attribute) {
      console.error(ENOCLS);
      return null;
    }
    const attributes = params.attributes || [params.attribute];
    return {
      element: {
        enter: (node, parentNode) => {
          if (node.name === 'svg' && parentNode.type === 'root') {
            for (const attribute of attributes) {
              if (typeof attribute === 'string') {
                if (node.attributes[attribute] == null) {
                  // @ts-ignore disallow explicit nullable attribute value
                  node.attributes[attribute] = undefined;
                }
              }
              if (typeof attribute === 'object') {
                for (const key of Object.keys(attribute)) {
                  if (node.attributes[key] == null) {
                    // @ts-ignore disallow explicit nullable attribute value
                    node.attributes[key] = attribute[key];
                  }
                }
              }
            }
          }
        },
      },
    };
  };
  