"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.range = exports.balanced = void 0; const balanced = (a, b, str) => { const ma = a instanceof RegExp ? maybeMatch(a, str) : a; const mb = b instanceof RegExp ? maybeMatch(b, str) : b; const r = ma !== null && mb != null && (0, exports.range)(ma, mb, str); return (r && { start: r[0], end: r[1], pre: str.slice(0, r[0]), body: str.slice(r[0] + ma.length, r[1]), post: str.slice(r[1] + mb.length), }); }; exports.balanced = balanced; const maybeMatch = (reg, str) => { const m = str.match(reg); return m ? m[0] : null; }; const range = (a, b, str) => { let begs, beg, left, right = undefined, result; let ai = str.indexOf(a); let bi = str.indexOf(b, ai + 1); let i = ai; if (ai >= 0 && bi > 0) { if (a === b) { return [ai, bi]; } begs = []; left = str.length; while (i >= 0 && !result) { if (i === ai) { begs.push(i); ai = str.indexOf(a, i + 1); } else if (begs.length === 1) { const r = begs.pop(); if (r !== undefined) result = [r, bi]; } else { beg = begs.pop(); if (beg !== undefined && beg < left) { left = beg; right = bi; } bi = str.indexOf(b, i + 1); } i = ai < bi && ai >= 0 ? ai : bi; } if (begs.length && right !== undefined) { result = [left, right]; } } return result; }; exports.range = range; //# sourceMappingURL=index.js.map