/** * The MIT License (MIT) * Copyright (c) 2017-present Dmitry Soshnikov */ 'use strict'; /** * A regexp-tree plugin to replace different range-based quantifiers * with their symbol equivalents. * * a{0,} -> a* * a{1,} -> a+ * a{1} -> a * * NOTE: the following is automatically handled in the generator: * * a{3,3} -> a{3} */ module.exports = { Quantifier: function Quantifier(path) { var node = path.node; if (node.kind !== 'Range') { return; } // a{0,} -> a* rewriteOpenZero(path); // a{1,} -> a+ rewriteOpenOne(path); // a{1} -> a rewriteExactOne(path); } }; function rewriteOpenZero(path) { var node = path.node; if (node.from !== 0 || node.to) { return; } node.kind = '*'; delete node.from; } function rewriteOpenOne(path) { var node = path.node; if (node.from !== 1 || node.to) { return; } node.kind = '+'; delete node.from; } function rewriteExactOne(path) { var node = path.node; if (node.from !== 1 || node.to !== 1) { return; } path.parentPath.replace(path.parentPath.node.expression); }