import { __require as requireFillRange } from '../../../../fill-range@7.0.1/node_modules/fill-range/index.mjs';
import { __require as requireUtils } from './utils.mjs';

var compile_1;
var hasRequiredCompile;
function requireCompile() {
  if (hasRequiredCompile) return compile_1;
  hasRequiredCompile = 1;
  const fill = requireFillRange();
  const utils = requireUtils();
  const compile = (ast, options = {}) => {
    let walk = (node, parent = {}) => {
      let invalidBlock = utils.isInvalidBrace(parent);
      let invalidNode = node.invalid === true && options.escapeInvalid === true;
      let invalid = invalidBlock === true || invalidNode === true;
      let prefix = options.escapeInvalid === true ? '\\' : '';
      let output = '';
      if (node.isOpen === true) {
        return prefix + node.value;
      }
      if (node.isClose === true) {
        return prefix + node.value;
      }
      if (node.type === 'open') {
        return invalid ? prefix + node.value : '(';
      }
      if (node.type === 'close') {
        return invalid ? prefix + node.value : ')';
      }
      if (node.type === 'comma') {
        return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';
      }
      if (node.value) {
        return node.value;
      }
      if (node.nodes && node.ranges > 0) {
        let args = utils.reduce(node.nodes);
        let range = fill(...args, {
          ...options,
          wrap: false,
          toRegex: true
        });
        if (range.length !== 0) {
          return args.length > 1 && range.length > 1 ? `(${range})` : range;
        }
      }
      if (node.nodes) {
        for (let child of node.nodes) {
          output += walk(child, node);
        }
      }
      return output;
    };
    return walk(ast);
  };
  compile_1 = compile;
  return compile_1;
}

export { requireCompile as __require };
