function o() {
  this.__rules__ = [], this.__cache__ = null;
}
o.prototype.__find__ = function(_) {
  for (let e = 0; e < this.__rules__.length; e++)
    if (this.__rules__[e].name === _)
      return e;
  return -1;
};
o.prototype.__compile__ = function() {
  const _ = this, e = [""];
  _.__rules__.forEach(function(n) {
    n.enabled && n.alt.forEach(function(t) {
      e.indexOf(t) < 0 && e.push(t);
    });
  }), _.__cache__ = {}, e.forEach(function(n) {
    _.__cache__[n] = [], _.__rules__.forEach(function(t) {
      t.enabled && (n && t.alt.indexOf(n) < 0 || _.__cache__[n].push(t.fn));
    });
  });
};
o.prototype.at = function(_, e, n) {
  const t = this.__find__(_), r = n || {};
  if (t === -1)
    throw new Error("Parser rule not found: " + _);
  this.__rules__[t].fn = e, this.__rules__[t].alt = r.alt || [], this.__cache__ = null;
};
o.prototype.before = function(_, e, n, t) {
  const r = this.__find__(_), i = t || {};
  if (r === -1)
    throw new Error("Parser rule not found: " + _);
  this.__rules__.splice(r, 0, {
    name: e,
    enabled: !0,
    fn: n,
    alt: i.alt || []
  }), this.__cache__ = null;
};
o.prototype.after = function(_, e, n, t) {
  const r = this.__find__(_), i = t || {};
  if (r === -1)
    throw new Error("Parser rule not found: " + _);
  this.__rules__.splice(r + 1, 0, {
    name: e,
    enabled: !0,
    fn: n,
    alt: i.alt || []
  }), this.__cache__ = null;
};
o.prototype.push = function(_, e, n) {
  const t = n || {};
  this.__rules__.push({
    name: _,
    enabled: !0,
    fn: e,
    alt: t.alt || []
  }), this.__cache__ = null;
};
o.prototype.enable = function(_, e) {
  Array.isArray(_) || (_ = [_]);
  const n = [];
  return _.forEach(function(t) {
    const r = this.__find__(t);
    if (r < 0) {
      if (e)
        return;
      throw new Error("Rules manager: invalid rule name " + t);
    }
    this.__rules__[r].enabled = !0, n.push(t);
  }, this), this.__cache__ = null, n;
};
o.prototype.enableOnly = function(_, e) {
  Array.isArray(_) || (_ = [_]), this.__rules__.forEach(function(n) {
    n.enabled = !1;
  }), this.enable(_, e);
};
o.prototype.disable = function(_, e) {
  Array.isArray(_) || (_ = [_]);
  const n = [];
  return _.forEach(function(t) {
    const r = this.__find__(t);
    if (r < 0) {
      if (e)
        return;
      throw new Error("Rules manager: invalid rule name " + t);
    }
    this.__rules__[r].enabled = !1, n.push(t);
  }, this), this.__cache__ = null, n;
};
o.prototype.getRules = function(_) {
  return this.__cache__ === null && this.__compile__(), this.__cache__[_] || [];
};
export {
  o as default
};
