| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | /** * The MIT License (MIT) * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com> */'use strict';/** * A regexp-tree plugin to remove unnecessary groups. * * /(?:a)/ -> /a/ */function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }module.exports = {  Group: function Group(path) {    var node = path.node,        parent = path.parent;    var childPath = path.getChild();    if (node.capturing || !childPath) {      return;    }    // Don't optimize /a(?:b|c)/ to /ab|c/    // but /(?:b|c)/ to /b|c/ is ok    if (childPath.node.type === 'Disjunction' && parent.type !== 'RegExp') {      return;    }    // Don't optimize /(?:ab)+/ to /ab+/    // but /(?:a)+/ to /a+/ is ok    // and /(?:[a-d])+/ to /[a-d]+/ is ok too    if (parent.type === 'Repetition' && childPath.node.type !== 'Char' && childPath.node.type !== 'CharacterClass') {      return;    }    if (childPath.node.type === 'Alternative') {      var parentPath = path.getParent();      if (parentPath.node.type === 'Alternative') {        // /abc(?:def)ghi/ When (?:def) is ungrouped its content must be merged with parent alternative        parentPath.replace({          type: 'Alternative',          expressions: [].concat(_toConsumableArray(parent.expressions.slice(0, path.index)), _toConsumableArray(childPath.node.expressions), _toConsumableArray(parent.expressions.slice(path.index + 1)))        });      }    } else {      path.replace(childPath.node);    }  }};
 |