| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | 
							- 'use strict';
 
- const fill = require('fill-range');
 
- const utils = require('./utils');
 
- 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);
 
- };
 
- module.exports = compile;
 
 
  |