UNPKG

epic-designer-gold

Version:

基于vue3的设计器,可视化开发页面表单

17,860 lines 612 kB
var wp = Object.defineProperty;
var bp = (t, e, n) => e in t ? wp(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
var dn = (t, e, n) => bp(t, typeof e != "symbol" ? e + "" : e, n);
import { bC as Ip, bD as _p, aS as wf, bm as $p, aW as Pp, aT as je, at as Lp, au as Kl, bc as Op, bf, bg as If, bd as xp, br as Hl, aw as Hn, ax as oe, aU as Dp, aO as Mp } from "./mermaid.core-BmO8XxbV.js";
import { k as Ur, j as Rl, g as ri, S as Fp, w as Gp, x as Up, c as _f, v as Le, y as $f, l as jp, z as zp, A as Bp, B as qp, C as Wp, a as Pf, d as j, i as tn, r as Ye, f as dt, D as Me } from "./_baseUniq-AyTrYc_s.js";
import { j as vl, m as M, d as Vp, f as yt, g as jr, h as B, i as El, l as jn, e as Kp } from "./_basePickBy-CB2_l3OQ.js";
import { c as Be } from "./clone-BpMkZAHI.js";
import { c as gt, g as Hp } from "./_commonjsHelpers-BVfed4GL.js";
var Yp = Object.prototype, Xp = Yp.hasOwnProperty, ut = Ip(function(t, e) {
  if (_p(e) || wf(e)) {
    $p(e, Ur(e), t);
    return;
  }
  for (var n in e)
    Xp.call(e, n) && Pp(t, n, e[n]);
});
function Lf(t, e, n) {
  var r = -1, i = t.length;
  e < 0 && (e = -e > i ? 0 : i + e), n = n > i ? i : n, n < 0 && (n += i), i = e > n ? 0 : n - e >>> 0, e >>>= 0;
  for (var s = Array(i); ++r < i; )
    s[r] = t[r + e];
  return s;
}
function rs(t) {
  for (var e = -1, n = t == null ? 0 : t.length, r = 0, i = []; ++e < n; ) {
    var s = t[e];
    s && (i[r++] = s);
  }
  return i;
}
function Jp(t, e, n, r) {
  for (var i = -1, s = t == null ? 0 : t.length; ++i < s; ) {
    var a = t[i];
    e(r, a, n(a), t);
  }
  return r;
}
function Qp(t, e, n, r) {
  return Rl(t, function(i, s, a) {
    e(r, i, n(i), a);
  }), r;
}
function Zp(t, e) {
  return function(n, r) {
    var i = je(n) ? Jp : Qp, s = e ? e() : {};
    return i(n, t, ri(r), s);
  };
}
var em = 200;
function tm(t, e, n, r) {
  var i = -1, s = Gp, a = !0, o = t.length, c = [], l = e.length;
  if (!o)
    return c;
  e.length >= em && (s = Up, a = !1, e = new Fp(e));
  e:
    for (; ++i < o; ) {
      var u = t[i], f = u;
      if (u = u !== 0 ? u : 0, a && f === f) {
        for (var m = l; m--; )
          if (e[m] === f)
            continue e;
        c.push(u);
      } else s(e, f, r) || c.push(u);
    }
  return c;
}
var La = Lp(function(t, e) {
  return Kl(t) ? tm(t, _f(e, 1, Kl, !0)) : [];
});
function Fe(t, e, n) {
  var r = t == null ? 0 : t.length;
  return r ? (e = e === void 0 ? 1 : vl(e), Lf(t, e < 0 ? 0 : e, r)) : [];
}
function zi(t, e, n) {
  var r = t == null ? 0 : t.length;
  return r ? (e = e === void 0 ? 1 : vl(e), e = r - e, Lf(t, 0, e < 0 ? 0 : e)) : [];
}
function nm(t, e) {
  for (var n = -1, r = t == null ? 0 : t.length; ++n < r; )
    if (!e(t[n], n, t))
      return !1;
  return !0;
}
function rm(t, e) {
  var n = !0;
  return Rl(t, function(r, i, s) {
    return n = !!e(r, i, s), n;
  }), n;
}
function Nt(t, e, n) {
  var r = je(t) ? nm : rm;
  return r(t, ri(e));
}
function bt(t) {
  return t && t.length ? t[0] : void 0;
}
function lt(t, e) {
  return _f(M(t, e));
}
var im = Object.prototype, sm = im.hasOwnProperty, am = Zp(function(t, e, n) {
  sm.call(t, n) ? t[n].push(e) : Op(t, n, [e]);
}), om = "[object String]";
function tt(t) {
  return typeof t == "string" || !je(t) && bf(t) && If(t) == om;
}
var cm = Math.max;
function Qe(t, e, n, r) {
  t = wf(t) ? t : Le(t), n = n ? vl(n) : 0;
  var i = t.length;
  return n < 0 && (n = cm(i + n, 0)), tt(t) ? n <= i && t.indexOf(e, n) > -1 : !!i && $f(t, e, n) > -1;
}
function Yl(t, e, n) {
  var r = t == null ? 0 : t.length;
  if (!r)
    return -1;
  var i = 0;
  return $f(t, e, i);
}
var lm = "[object RegExp]";
function um(t) {
  return bf(t) && If(t) == lm;
}
var Xl = Hl && Hl.isRegExp, nn = Xl ? xp(Xl) : um, dm = "Expected a function";
function fm(t) {
  if (typeof t != "function")
    throw new TypeError(dm);
  return function() {
    var e = arguments;
    switch (e.length) {
      case 0:
        return !t.call(this);
      case 1:
        return !t.call(this, e[0]);
      case 2:
        return !t.call(this, e[0], e[1]);
      case 3:
        return !t.call(this, e[0], e[1], e[2]);
    }
    return !t.apply(this, e);
  };
}
function It(t, e) {
  if (t == null)
    return {};
  var n = jp(zp(t), function(r) {
    return [r];
  });
  return e = ri(e), Vp(t, n, function(r, i) {
    return e(r, i[0]);
  });
}
function Oa(t, e) {
  var n = je(t) ? Bp : qp;
  return n(t, fm(ri(e)));
}
function hm(t, e) {
  var n;
  return Rl(t, function(r, i, s) {
    return n = e(r, i, s), !n;
  }), !!n;
}
function Of(t, e, n) {
  var r = je(t) ? Wp : hm;
  return r(t, ri(e));
}
function Al(t) {
  return t && t.length ? Pf(t) : [];
}
function pm(t, e) {
  return t && t.length ? Pf(t, ri(e)) : [];
}
function We(t) {
  return typeof t == "object" && t !== null && typeof t.$type == "string";
}
function Ct(t) {
  return typeof t == "object" && t !== null && typeof t.$refText == "string" && "ref" in t;
}
function hn(t) {
  return typeof t == "object" && t !== null && typeof t.$refText == "string" && "items" in t;
}
function mm(t) {
  return typeof t == "object" && t !== null && typeof t.name == "string" && typeof t.type == "string" && typeof t.path == "string";
}
function Ri(t) {
  return typeof t == "object" && t !== null && typeof t.info == "object" && typeof t.message == "string";
}
class xf {
  constructor() {
    this.subtypes = {}, this.allSubtypes = {};
  }
  getAllTypes() {
    return Object.keys(this.types);
  }
  getReferenceType(e) {
    var i;
    const n = this.types[e.container.$type];
    if (!n)
      throw new Error(`Type ${e.container.$type || "undefined"} not found.`);
    const r = (i = n.properties[e.property]) == null ? void 0 : i.referenceType;
    if (!r)
      throw new Error(`Property ${e.property || "undefined"} of type ${e.container.$type} is not a reference.`);
    return r;
  }
  getTypeMetaData(e) {
    const n = this.types[e];
    return n || {
      name: e,
      properties: {},
      superTypes: []
    };
  }
  isInstance(e, n) {
    return We(e) && this.isSubtype(e.$type, n);
  }
  isSubtype(e, n) {
    if (e === n)
      return !0;
    let r = this.subtypes[e];
    r || (r = this.subtypes[e] = {});
    const i = r[n];
    if (i !== void 0)
      return i;
    {
      const s = this.types[e], a = s ? s.superTypes.some((o) => this.isSubtype(o, n)) : !1;
      return r[n] = a, a;
    }
  }
  getAllSubTypes(e) {
    const n = this.allSubtypes[e];
    if (n)
      return n;
    {
      const r = this.getAllTypes(), i = [];
      for (const s of r)
        this.isSubtype(s, e) && i.push(s);
      return this.allSubtypes[e] = i, i;
    }
  }
}
function Bi(t) {
  return typeof t == "object" && t !== null && Array.isArray(t.content);
}
function Df(t) {
  return typeof t == "object" && t !== null && typeof t.tokenType == "object";
}
function Mf(t) {
  return Bi(t) && typeof t.fullText == "string";
}
class Ge {
  constructor(e, n) {
    this.startFn = e, this.nextFn = n;
  }
  iterator() {
    const e = {
      state: this.startFn(),
      next: () => this.nextFn(e.state),
      [Symbol.iterator]: () => e
    };
    return e;
  }
  [Symbol.iterator]() {
    return this.iterator();
  }
  isEmpty() {
    return !!this.iterator().next().done;
  }
  count() {
    const e = this.iterator();
    let n = 0, r = e.next();
    for (; !r.done; )
      n++, r = e.next();
    return n;
  }
  toArray() {
    const e = [], n = this.iterator();
    let r;
    do
      r = n.next(), r.value !== void 0 && e.push(r.value);
    while (!r.done);
    return e;
  }
  toSet() {
    return new Set(this);
  }
  toMap(e, n) {
    const r = this.map((i) => [
      e ? e(i) : i,
      n ? n(i) : i
    ]);
    return new Map(r);
  }
  toString() {
    return this.join();
  }
  concat(e) {
    return new Ge(() => ({ first: this.startFn(), firstDone: !1, iterator: e[Symbol.iterator]() }), (n) => {
      let r;
      if (!n.firstDone) {
        do
          if (r = this.nextFn(n.first), !r.done)
            return r;
        while (!r.done);
        n.firstDone = !0;
      }
      do
        if (r = n.iterator.next(), !r.done)
          return r;
      while (!r.done);
      return ot;
    });
  }
  join(e = ",") {
    const n = this.iterator();
    let r = "", i, s = !1;
    do
      i = n.next(), i.done || (s && (r += e), r += gm(i.value)), s = !0;
    while (!i.done);
    return r;
  }
  indexOf(e, n = 0) {
    const r = this.iterator();
    let i = 0, s = r.next();
    for (; !s.done; ) {
      if (i >= n && s.value === e)
        return i;
      s = r.next(), i++;
    }
    return -1;
  }
  every(e) {
    const n = this.iterator();
    let r = n.next();
    for (; !r.done; ) {
      if (!e(r.value))
        return !1;
      r = n.next();
    }
    return !0;
  }
  some(e) {
    const n = this.iterator();
    let r = n.next();
    for (; !r.done; ) {
      if (e(r.value))
        return !0;
      r = n.next();
    }
    return !1;
  }
  forEach(e) {
    const n = this.iterator();
    let r = 0, i = n.next();
    for (; !i.done; )
      e(i.value, r), i = n.next(), r++;
  }
  map(e) {
    return new Ge(this.startFn, (n) => {
      const { done: r, value: i } = this.nextFn(n);
      return r ? ot : { done: !1, value: e(i) };
    });
  }
  filter(e) {
    return new Ge(this.startFn, (n) => {
      let r;
      do
        if (r = this.nextFn(n), !r.done && e(r.value))
          return r;
      while (!r.done);
      return ot;
    });
  }
  nonNullable() {
    return this.filter((e) => e != null);
  }
  reduce(e, n) {
    const r = this.iterator();
    let i = n, s = r.next();
    for (; !s.done; )
      i === void 0 ? i = s.value : i = e(i, s.value), s = r.next();
    return i;
  }
  reduceRight(e, n) {
    return this.recursiveReduce(this.iterator(), e, n);
  }
  recursiveReduce(e, n, r) {
    const i = e.next();
    if (i.done)
      return r;
    const s = this.recursiveReduce(e, n, r);
    return s === void 0 ? i.value : n(s, i.value);
  }
  find(e) {
    const n = this.iterator();
    let r = n.next();
    for (; !r.done; ) {
      if (e(r.value))
        return r.value;
      r = n.next();
    }
  }
  findIndex(e) {
    const n = this.iterator();
    let r = 0, i = n.next();
    for (; !i.done; ) {
      if (e(i.value))
        return r;
      i = n.next(), r++;
    }
    return -1;
  }
  includes(e) {
    const n = this.iterator();
    let r = n.next();
    for (; !r.done; ) {
      if (r.value === e)
        return !0;
      r = n.next();
    }
    return !1;
  }
  flatMap(e) {
    return new Ge(() => ({ this: this.startFn() }), (n) => {
      do {
        if (n.iterator) {
          const s = n.iterator.next();
          if (s.done)
            n.iterator = void 0;
          else
            return s;
        }
        const { done: r, value: i } = this.nextFn(n.this);
        if (!r) {
          const s = e(i);
          if (ra(s))
            n.iterator = s[Symbol.iterator]();
          else
            return { done: !1, value: s };
        }
      } while (n.iterator);
      return ot;
    });
  }
  flat(e) {
    if (e === void 0 && (e = 1), e <= 0)
      return this;
    const n = e > 1 ? this.flat(e - 1) : this;
    return new Ge(() => ({ this: n.startFn() }), (r) => {
      do {
        if (r.iterator) {
          const a = r.iterator.next();
          if (a.done)
            r.iterator = void 0;
          else
            return a;
        }
        const { done: i, value: s } = n.nextFn(r.this);
        if (!i)
          if (ra(s))
            r.iterator = s[Symbol.iterator]();
          else
            return { done: !1, value: s };
      } while (r.iterator);
      return ot;
    });
  }
  head() {
    const n = this.iterator().next();
    if (!n.done)
      return n.value;
  }
  tail(e = 1) {
    return new Ge(() => {
      const n = this.startFn();
      for (let r = 0; r < e; r++)
        if (this.nextFn(n).done)
          return n;
      return n;
    }, this.nextFn);
  }
  limit(e) {
    return new Ge(() => ({ size: 0, state: this.startFn() }), (n) => (n.size++, n.size > e ? ot : this.nextFn(n.state)));
  }
  distinct(e) {
    return new Ge(() => ({ set: /* @__PURE__ */ new Set(), internalState: this.startFn() }), (n) => {
      let r;
      do
        if (r = this.nextFn(n.internalState), !r.done) {
          const i = e ? e(r.value) : r.value;
          if (!n.set.has(i))
            return n.set.add(i), r;
        }
      while (!r.done);
      return ot;
    });
  }
  exclude(e, n) {
    const r = /* @__PURE__ */ new Set();
    for (const i of e) {
      const s = n ? n(i) : i;
      r.add(s);
    }
    return this.filter((i) => {
      const s = n ? n(i) : i;
      return !r.has(s);
    });
  }
}
function gm(t) {
  return typeof t == "string" ? t : typeof t > "u" ? "undefined" : typeof t.toString == "function" ? t.toString() : Object.prototype.toString.call(t);
}
function ra(t) {
  return !!t && typeof t[Symbol.iterator] == "function";
}
const Ff = new Ge(() => {
}, () => ot), ot = Object.freeze({ done: !0, value: void 0 });
function pe(...t) {
  if (t.length === 1) {
    const e = t[0];
    if (e instanceof Ge)
      return e;
    if (ra(e))
      return new Ge(() => e[Symbol.iterator](), (n) => n.next());
    if (typeof e.length == "number")
      return new Ge(() => ({ index: 0 }), (n) => n.index < e.length ? { done: !1, value: e[n.index++] } : ot);
  }
  return t.length > 1 ? new Ge(() => ({ collIndex: 0, arrIndex: 0 }), (e) => {
    do {
      if (e.iterator) {
        const n = e.iterator.next();
        if (!n.done)
          return n;
        e.iterator = void 0;
      }
      if (e.array) {
        if (e.arrIndex < e.array.length)
          return { done: !1, value: e.array[e.arrIndex++] };
        e.array = void 0, e.arrIndex = 0;
      }
      if (e.collIndex < t.length) {
        const n = t[e.collIndex++];
        ra(n) ? e.iterator = n[Symbol.iterator]() : n && typeof n.length == "number" && (e.array = n);
      }
    } while (e.iterator || e.array || e.collIndex < t.length);
    return ot;
  }) : Ff;
}
class Sl extends Ge {
  constructor(e, n, r) {
    super(() => ({
      iterators: r != null && r.includeRoot ? [[e][Symbol.iterator]()] : [n(e)[Symbol.iterator]()],
      pruned: !1
    }), (i) => {
      for (i.pruned && (i.iterators.pop(), i.pruned = !1); i.iterators.length > 0; ) {
        const a = i.iterators[i.iterators.length - 1].next();
        if (a.done)
          i.iterators.pop();
        else
          return i.iterators.push(n(a.value)[Symbol.iterator]()), a;
      }
      return ot;
    });
  }
  iterator() {
    const e = {
      state: this.startFn(),
      next: () => this.nextFn(e.state),
      prune: () => {
        e.state.pruned = !0;
      },
      [Symbol.iterator]: () => e
    };
    return e;
  }
}
var _o;
(function(t) {
  function e(s) {
    return s.reduce((a, o) => a + o, 0);
  }
  t.sum = e;
  function n(s) {
    return s.reduce((a, o) => a * o, 0);
  }
  t.product = n;
  function r(s) {
    return s.reduce((a, o) => Math.min(a, o));
  }
  t.min = r;
  function i(s) {
    return s.reduce((a, o) => Math.max(a, o));
  }
  t.max = i;
})(_o || (_o = {}));
function $o(t, e = {}) {
  for (const [n, r] of Object.entries(t))
    n.startsWith("$") || (Array.isArray(r) ? r.forEach((i, s) => {
      We(i) && (i.$container = t, i.$containerProperty = n, i.$containerIndex = s, e.deep && $o(i, e));
    }) : We(r) && (r.$container = t, r.$containerProperty = n, e.deep && $o(r, e)));
}
function xa(t, e) {
  let n = t;
  for (; n; ) {
    if (e(n))
      return n;
    n = n.$container;
  }
}
function Qt(t) {
  const n = zs(t).$document;
  if (!n)
    throw new Error("AST node has no document.");
  return n;
}
function zs(t) {
  for (; t.$container; )
    t = t.$container;
  return t;
}
function Jl(t) {
  return Ct(t) ? t.ref ? [t.ref] : [] : hn(t) ? t.items.map((e) => e.ref) : [];
}
function Cl(t, e) {
  if (!t)
    throw new Error("Node must be an AstNode.");
  const n = e == null ? void 0 : e.range;
  return new Ge(() => ({
    keys: Object.keys(t),
    keyIndex: 0,
    arrayIndex: 0
  }), (r) => {
    for (; r.keyIndex < r.keys.length; ) {
      const i = r.keys[r.keyIndex];
      if (!i.startsWith("$")) {
        const s = t[i];
        if (We(s)) {
          if (r.keyIndex++, Ql(s, n))
            return { done: !1, value: s };
        } else if (Array.isArray(s)) {
          for (; r.arrayIndex < s.length; ) {
            const a = r.arrayIndex++, o = s[a];
            if (We(o) && Ql(o, n))
              return { done: !1, value: o };
          }
          r.arrayIndex = 0;
        }
      }
      r.keyIndex++;
    }
    return ot;
  });
}
function is(t, e) {
  if (!t)
    throw new Error("Root node must be an AstNode.");
  return new Sl(t, (n) => Cl(n, e));
}
function Zt(t, e) {
  if (!t)
    throw new Error("Root node must be an AstNode.");
  return new Sl(t, (n) => Cl(n, e), { includeRoot: !0 });
}
function Ql(t, e) {
  var r;
  if (!e)
    return !0;
  const n = (r = t.$cstNode) == null ? void 0 : r.range;
  return n ? Gm(n, e) : !1;
}
function ia(t) {
  return new Ge(() => ({
    keys: Object.keys(t),
    keyIndex: 0,
    arrayIndex: 0
  }), (e) => {
    for (; e.keyIndex < e.keys.length; ) {
      const n = e.keys[e.keyIndex];
      if (!n.startsWith("$")) {
        const r = t[n];
        if (Ct(r) || hn(r))
          return e.keyIndex++, { done: !1, value: { reference: r, container: t, property: n } };
        if (Array.isArray(r)) {
          for (; e.arrayIndex < r.length; ) {
            const i = e.arrayIndex++, s = r[i];
            if (Ct(s) || hn(r))
              return { done: !1, value: { reference: s, container: t, property: n, index: i } };
          }
          e.arrayIndex = 0;
        }
      }
      e.keyIndex++;
    }
    return ot;
  });
}
function ym(t, e) {
  const n = t.getTypeMetaData(e.$type), r = e;
  for (const i of Object.values(n.properties))
    i.defaultValue !== void 0 && r[i.name] === void 0 && (r[i.name] = Gf(i.defaultValue));
}
function Gf(t) {
  return Array.isArray(t) ? [...t.map(Gf)] : t;
}
const at = {
  $type: "AbstractElement",
  cardinality: "cardinality"
};
function Tm(t) {
  return Z.isInstance(t, at.$type);
}
const Bs = {
  $type: "AbstractParserRule"
};
function ss(t) {
  return Z.isInstance(t, Bs.$type);
}
const _s = {
  $type: "AbstractRule"
}, At = {
  $type: "AbstractType"
}, Ln = {
  $type: "Action",
  cardinality: "cardinality",
  feature: "feature",
  inferredType: "inferredType",
  operator: "operator",
  type: "type"
};
function Da(t) {
  return Z.isInstance(t, Ln.$type);
}
const qs = {
  $type: "Alternatives",
  cardinality: "cardinality",
  elements: "elements"
};
function Uf(t) {
  return Z.isInstance(t, qs.$type);
}
const Zl = {
  $type: "ArrayLiteral",
  elements: "elements"
}, eu = {
  $type: "ArrayType",
  elementType: "elementType"
}, On = {
  $type: "Assignment",
  cardinality: "cardinality",
  feature: "feature",
  operator: "operator",
  predicate: "predicate",
  terminal: "terminal"
};
function zn(t) {
  return Z.isInstance(t, On.$type);
}
const Po = {
  $type: "BooleanLiteral",
  true: "true"
};
function Rm(t) {
  return Z.isInstance(t, Po.$type);
}
const xn = {
  $type: "CharacterRange",
  cardinality: "cardinality",
  left: "left",
  lookahead: "lookahead",
  parenthesized: "parenthesized",
  right: "right"
};
function vm(t) {
  return Z.isInstance(t, xn.$type);
}
const tr = {
  $type: "Condition"
}, Ws = {
  $type: "Conjunction",
  left: "left",
  right: "right"
};
function Em(t) {
  return Z.isInstance(t, Ws.$type);
}
const Dn = {
  $type: "CrossReference",
  cardinality: "cardinality",
  deprecatedSyntax: "deprecatedSyntax",
  isMulti: "isMulti",
  terminal: "terminal",
  type: "type"
};
function Ma(t) {
  return Z.isInstance(t, Dn.$type);
}
const Vs = {
  $type: "Disjunction",
  left: "left",
  right: "right"
};
function Am(t) {
  return Z.isInstance(t, Vs.$type);
}
const Lo = {
  $type: "EndOfFile",
  cardinality: "cardinality"
};
function Sm(t) {
  return Z.isInstance(t, Lo.$type);
}
const _n = {
  $type: "Grammar",
  imports: "imports",
  interfaces: "interfaces",
  isDeclared: "isDeclared",
  name: "name",
  rules: "rules",
  types: "types"
}, tu = {
  $type: "GrammarImport",
  path: "path"
}, or = {
  $type: "Group",
  cardinality: "cardinality",
  elements: "elements",
  guardCondition: "guardCondition",
  predicate: "predicate"
};
function kl(t) {
  return Z.isInstance(t, or.$type);
}
const Oo = {
  $type: "InferredType",
  name: "name"
};
function jf(t) {
  return Z.isInstance(t, Oo.$type);
}
const Vt = {
  $type: "InfixRule",
  call: "call",
  dataType: "dataType",
  inferredType: "inferredType",
  name: "name",
  operators: "operators",
  parameters: "parameters",
  returnType: "returnType"
};
function sa(t) {
  return Z.isInstance(t, Vt.$type);
}
const oo = {
  $type: "InfixRuleOperatorList",
  associativity: "associativity",
  operators: "operators"
}, nu = {
  $type: "InfixRuleOperators",
  precedences: "precedences"
}, $i = {
  $type: "Interface",
  attributes: "attributes",
  name: "name",
  superTypes: "superTypes"
};
function Cm(t) {
  return Z.isInstance(t, $i.$type);
}
const Pi = {
  $type: "Keyword",
  cardinality: "cardinality",
  predicate: "predicate",
  value: "value"
};
function Bn(t) {
  return Z.isInstance(t, Pi.$type);
}
const $s = {
  $type: "NamedArgument",
  calledByName: "calledByName",
  parameter: "parameter",
  value: "value"
}, cr = {
  $type: "NegatedToken",
  cardinality: "cardinality",
  lookahead: "lookahead",
  parenthesized: "parenthesized",
  terminal: "terminal"
};
function km(t) {
  return Z.isInstance(t, cr.$type);
}
const xo = {
  $type: "Negation",
  value: "value"
};
function Nm(t) {
  return Z.isInstance(t, xo.$type);
}
const ru = {
  $type: "NumberLiteral",
  value: "value"
}, Ps = {
  $type: "Parameter",
  name: "name"
}, Do = {
  $type: "ParameterReference",
  parameter: "parameter"
};
function wm(t) {
  return Z.isInstance(t, Do.$type);
}
const Lt = {
  $type: "ParserRule",
  dataType: "dataType",
  definition: "definition",
  entry: "entry",
  fragment: "fragment",
  inferredType: "inferredType",
  name: "name",
  parameters: "parameters",
  returnType: "returnType"
};
function an(t) {
  return Z.isInstance(t, Lt.$type);
}
const co = {
  $type: "ReferenceType",
  isMulti: "isMulti",
  referenceType: "referenceType"
}, lr = {
  $type: "RegexToken",
  cardinality: "cardinality",
  lookahead: "lookahead",
  parenthesized: "parenthesized",
  regex: "regex"
};
function bm(t) {
  return Z.isInstance(t, lr.$type);
}
const Mo = {
  $type: "ReturnType",
  name: "name"
};
function Im(t) {
  return Z.isInstance(t, Mo.$type);
}
const ur = {
  $type: "RuleCall",
  arguments: "arguments",
  cardinality: "cardinality",
  predicate: "predicate",
  rule: "rule"
};
function qn(t) {
  return Z.isInstance(t, ur.$type);
}
const Li = {
  $type: "SimpleType",
  primitiveType: "primitiveType",
  stringType: "stringType",
  typeRef: "typeRef"
};
function _m(t) {
  return Z.isInstance(t, Li.$type);
}
const iu = {
  $type: "StringLiteral",
  value: "value"
}, dr = {
  $type: "TerminalAlternatives",
  cardinality: "cardinality",
  elements: "elements",
  lookahead: "lookahead",
  parenthesized: "parenthesized"
};
function $m(t) {
  return Z.isInstance(t, dr.$type);
}
const pt = {
  $type: "TerminalElement",
  cardinality: "cardinality",
  lookahead: "lookahead",
  parenthesized: "parenthesized"
}, fr = {
  $type: "TerminalGroup",
  cardinality: "cardinality",
  elements: "elements",
  lookahead: "lookahead",
  parenthesized: "parenthesized"
};
function Pm(t) {
  return Z.isInstance(t, fr.$type);
}
const fn = {
  $type: "TerminalRule",
  definition: "definition",
  fragment: "fragment",
  hidden: "hidden",
  name: "name",
  type: "type"
};
function on(t) {
  return Z.isInstance(t, fn.$type);
}
const hr = {
  $type: "TerminalRuleCall",
  cardinality: "cardinality",
  lookahead: "lookahead",
  parenthesized: "parenthesized",
  rule: "rule"
};
function Lm(t) {
  return Z.isInstance(t, hr.$type);
}
const Ks = {
  $type: "Type",
  name: "name",
  type: "type"
};
function Om(t) {
  return Z.isInstance(t, Ks.$type);
}
const vi = {
  $type: "TypeAttribute",
  defaultValue: "defaultValue",
  isOptional: "isOptional",
  name: "name",
  type: "type"
}, Ei = {
  $type: "TypeDefinition"
}, su = {
  $type: "UnionType",
  types: "types"
}, Hs = {
  $type: "UnorderedGroup",
  cardinality: "cardinality",
  elements: "elements"
};
function zf(t) {
  return Z.isInstance(t, Hs.$type);
}
const pr = {
  $type: "UntilToken",
  cardinality: "cardinality",
  lookahead: "lookahead",
  parenthesized: "parenthesized",
  terminal: "terminal"
};
function xm(t) {
  return Z.isInstance(t, pr.$type);
}
const Ai = {
  $type: "ValueLiteral"
}, Oi = {
  $type: "Wildcard",
  cardinality: "cardinality",
  lookahead: "lookahead",
  parenthesized: "parenthesized"
};
function Dm(t) {
  return Z.isInstance(t, Oi.$type);
}
class Bf extends xf {
  constructor() {
    super(...arguments), this.types = {
      AbstractElement: {
        name: at.$type,
        properties: {
          cardinality: {
            name: at.cardinality
          }
        },
        superTypes: []
      },
      AbstractParserRule: {
        name: Bs.$type,
        properties: {},
        superTypes: [_s.$type, At.$type]
      },
      AbstractRule: {
        name: _s.$type,
        properties: {},
        superTypes: []
      },
      AbstractType: {
        name: At.$type,
        properties: {},
        superTypes: []
      },
      Action: {
        name: Ln.$type,
        properties: {
          cardinality: {
            name: Ln.cardinality
          },
          feature: {
            name: Ln.feature
          },
          inferredType: {
            name: Ln.inferredType
          },
          operator: {
            name: Ln.operator
          },
          type: {
            name: Ln.type,
            referenceType: At.$type
          }
        },
        superTypes: [at.$type]
      },
      Alternatives: {
        name: qs.$type,
        properties: {
          cardinality: {
            name: qs.cardinality
          },
          elements: {
            name: qs.elements,
            defaultValue: []
          }
        },
        superTypes: [at.$type]
      },
      ArrayLiteral: {
        name: Zl.$type,
        properties: {
          elements: {
            name: Zl.elements,
            defaultValue: []
          }
        },
        superTypes: [Ai.$type]
      },
      ArrayType: {
        name: eu.$type,
        properties: {
          elementType: {
            name: eu.elementType
          }
        },
        superTypes: [Ei.$type]
      },
      Assignment: {
        name: On.$type,
        properties: {
          cardinality: {
            name: On.cardinality
          },
          feature: {
            name: On.feature
          },
          operator: {
            name: On.operator
          },
          predicate: {
            name: On.predicate
          },
          terminal: {
            name: On.terminal
          }
        },
        superTypes: [at.$type]
      },
      BooleanLiteral: {
        name: Po.$type,
        properties: {
          true: {
            name: Po.true,
            defaultValue: !1
          }
        },
        superTypes: [tr.$type, Ai.$type]
      },
      CharacterRange: {
        name: xn.$type,
        properties: {
          cardinality: {
            name: xn.cardinality
          },
          left: {
            name: xn.left
          },
          lookahead: {
            name: xn.lookahead
          },
          parenthesized: {
            name: xn.parenthesized,
            defaultValue: !1
          },
          right: {
            name: xn.right
          }
        },
        superTypes: [pt.$type]
      },
      Condition: {
        name: tr.$type,
        properties: {},
        superTypes: []
      },
      Conjunction: {
        name: Ws.$type,
        properties: {
          left: {
            name: Ws.left
          },
          right: {
            name: Ws.right
          }
        },
        superTypes: [tr.$type]
      },
      CrossReference: {
        name: Dn.$type,
        properties: {
          cardinality: {
            name: Dn.cardinality
          },
          deprecatedSyntax: {
            name: Dn.deprecatedSyntax,
            defaultValue: !1
          },
          isMulti: {
            name: Dn.isMulti,
            defaultValue: !1
          },
          terminal: {
            name: Dn.terminal
          },
          type: {
            name: Dn.type,
            referenceType: At.$type
          }
        },
        superTypes: [at.$type]
      },
      Disjunction: {
        name: Vs.$type,
        properties: {
          left: {
            name: Vs.left
          },
          right: {
            name: Vs.right
          }
        },
        superTypes: [tr.$type]
      },
      EndOfFile: {
        name: Lo.$type,
        properties: {
          cardinality: {
            name: Lo.cardinality
          }
        },
        superTypes: [at.$type]
      },
      Grammar: {
        name: _n.$type,
        properties: {
          imports: {
            name: _n.imports,
            defaultValue: []
          },
          interfaces: {
            name: _n.interfaces,
            defaultValue: []
          },
          isDeclared: {
            name: _n.isDeclared,
            defaultValue: !1
          },
          name: {
            name: _n.name
          },
          rules: {
            name: _n.rules,
            defaultValue: []
          },
          types: {
            name: _n.types,
            defaultValue: []
          }
        },
        superTypes: []
      },
      GrammarImport: {
        name: tu.$type,
        properties: {
          path: {
            name: tu.path
          }
        },
        superTypes: []
      },
      Group: {
        name: or.$type,
        properties: {
          cardinality: {
            name: or.cardinality
          },
          elements: {
            name: or.elements,
            defaultValue: []
          },
          guardCondition: {
            name: or.guardCondition
          },
          predicate: {
            name: or.predicate
          }
        },
        superTypes: [at.$type]
      },
      InferredType: {
        name: Oo.$type,
        properties: {
          name: {
            name: Oo.name
          }
        },
        superTypes: [At.$type]
      },
      InfixRule: {
        name: Vt.$type,
        properties: {
          call: {
            name: Vt.call
          },
          dataType: {
            name: Vt.dataType
          },
          inferredType: {
            name: Vt.inferredType
          },
          name: {
            name: Vt.name
          },
          operators: {
            name: Vt.operators
          },
          parameters: {
            name: Vt.parameters,
            defaultValue: []
          },
          returnType: {
            name: Vt.returnType,
            referenceType: At.$type
          }
        },
        superTypes: [Bs.$type]
      },
      InfixRuleOperatorList: {
        name: oo.$type,
        properties: {
          associativity: {
            name: oo.associativity
          },
          operators: {
            name: oo.operators,
            defaultValue: []
          }
        },
        superTypes: []
      },
      InfixRuleOperators: {
        name: nu.$type,
        properties: {
          precedences: {
            name: nu.precedences,
            defaultValue: []
          }
        },
        superTypes: []
      },
      Interface: {
        name: $i.$type,
        properties: {
          attributes: {
            name: $i.attributes,
            defaultValue: []
          },
          name: {
            name: $i.name
          },
          superTypes: {
            name: $i.superTypes,
            defaultValue: [],
            referenceType: At.$type
          }
        },
        superTypes: [At.$type]
      },
      Keyword: {
        name: Pi.$type,
        properties: {
          cardinality: {
            name: Pi.cardinality
          },
          predicate: {
            name: Pi.predicate
          },
          value: {
            name: Pi.value
          }
        },
        superTypes: [at.$type]
      },
      NamedArgument: {
        name: $s.$type,
        properties: {
          calledByName: {
            name: $s.calledByName,
            defaultValue: !1
          },
          parameter: {
            name: $s.parameter,
            referenceType: Ps.$type
          },
          value: {
            name: $s.value
          }
        },
        superTypes: []
      },
      NegatedToken: {
        name: cr.$type,
        properties: {
          cardinality: {
            name: cr.cardinality
          },
          lookahead: {
            name: cr.lookahead
          },
          parenthesized: {
            name: cr.parenthesized,
            defaultValue: !1
          },
          terminal: {
            name: cr.terminal
          }
        },
        superTypes: [pt.$type]
      },
      Negation: {
        name: xo.$type,
        properties: {
          value: {
            name: xo.value
          }
        },
        superTypes: [tr.$type]
      },
      NumberLiteral: {
        name: ru.$type,
        properties: {
          value: {
            name: ru.value
          }
        },
        superTypes: [Ai.$type]
      },
      Parameter: {
        name: Ps.$type,
        properties: {
          name: {
            name: Ps.name
          }
        },
        superTypes: []
      },
      ParameterReference: {
        name: Do.$type,
        properties: {
          parameter: {
            name: Do.parameter,
            referenceType: Ps.$type
          }
        },
        superTypes: [tr.$type]
      },
      ParserRule: {
        name: Lt.$type,
        properties: {
          dataType: {
            name: Lt.dataType
          },
          definition: {
            name: Lt.definition
          },
          entry: {
            name: Lt.entry,
            defaultValue: !1
          },
          fragment: {
            name: Lt.fragment,
            defaultValue: !1
          },
          inferredType: {
            name: Lt.inferredType
          },
          name: {
            name: Lt.name
          },
          parameters: {
            name: Lt.parameters,
            defaultValue: []
          },
          returnType: {
            name: Lt.returnType,
            referenceType: At.$type
          }
        },
        superTypes: [Bs.$type]
      },
      ReferenceType: {
        name: co.$type,
        properties: {
          isMulti: {
            name: co.isMulti,
            defaultValue: !1
          },
          referenceType: {
            name: co.referenceType
          }
        },
        superTypes: [Ei.$type]
      },
      RegexToken: {
        name: lr.$type,
        properties: {
          cardinality: {
            name: lr.cardinality
          },
          lookahead: {
            name: lr.lookahead
          },
          parenthesized: {
            name: lr.parenthesized,
            defaultValue: !1
          },
          regex: {
            name: lr.regex
          }
        },
        superTypes: [pt.$type]
      },
      ReturnType: {
        name: Mo.$type,
        properties: {
          name: {
            name: Mo.name
          }
        },
        superTypes: []
      },
      RuleCall: {
        name: ur.$type,
        properties: {
          arguments: {
            name: ur.arguments,
            defaultValue: []
          },
          cardinality: {
            name: ur.cardinality
          },
          predicate: {
            name: ur.predicate
          },
          rule: {
            name: ur.rule,
            referenceType: _s.$type
          }
        },
        superTypes: [at.$type]
      },
      SimpleType: {
        name: Li.$type,
        properties: {
          primitiveType: {
            name: Li.primitiveType
          },
          stringType: {
            name: Li.stringType
          },
          typeRef: {
            name: Li.typeRef,
            referenceType: At.$type
          }
        },
        superTypes: [Ei.$type]
      },
      StringLiteral: {
        name: iu.$type,
        properties: {
          value: {
            name: iu.value
          }
        },
        superTypes: [Ai.$type]
      },
      TerminalAlternatives: {
        name: dr.$type,
        properties: {
          cardinality: {
            name: dr.cardinality
          },
          elements: {
            name: dr.elements,
            defaultValue: []
          },
          lookahead: {
            name: dr.lookahead
          },
          parenthesized: {
            name: dr.parenthesized,
            defaultValue: !1
          }
        },
        superTypes: [pt.$type]
      },
      TerminalElement: {
        name: pt.$type,
        properties: {
          cardinality: {
            name: pt.cardinality
          },
          lookahead: {
            name: pt.lookahead
          },
          parenthesized: {
            name: pt.parenthesized,
            defaultValue: !1
          }
        },
        superTypes: [at.$type]
      },
      TerminalGroup: {
        name: fr.$type,
        properties: {
          cardinality: {
            name: fr.cardinality
          },
          elements: {
            name: fr.elements,
            defaultValue: []
          },
          lookahead: {
            name: fr.lookahead
          },
          parenthesized: {
            name: fr.parenthesized,
            defaultValue: !1
          }
        },
        superTypes: [pt.$type]
      },
      TerminalRule: {
        name: fn.$type,
        properties: {
          definition: {
            name: fn.definition
          },
          fragment: {
            name: fn.fragment,
            defaultValue: !1
          },
          hidden: {
            name: fn.hidden,
            defaultValue: !1
          },
          name: {
            name: fn.name
          },
          type: {
            name: fn.type
          }
        },
        superTypes: [_s.$type]
      },
      TerminalRuleCall: {
        name: hr.$type,
        properties: {
          cardinality: {
            name: hr.cardinality
          },
          lookahead: {
            name: hr.lookahead
          },
          parenthesized: {
            name: hr.parenthesized,
            defaultValue: !1
          },
          rule: {
            name: hr.rule,
            referenceType: fn.$type
          }
        },
        superTypes: [pt.$type]
      },
      Type: {
        name: Ks.$type,
        properties: {
          name: {
            name: Ks.name
          },
          type: {
            name: Ks.type
          }
        },
        superTypes: [At.$type]
      },
      TypeAttribute: {
        name: vi.$type,
        properties: {
          defaultValue: {
            name: vi.defaultValue
          },
          isOptional: {
            name: vi.isOptional,
            defaultValue: !1
          },
          name: {
            name: vi.name
          },
          type: {
            name: vi.type
          }
        },
        superTypes: []
      },
      TypeDefinition: {
        name: Ei.$type,
        properties: {},
        superTypes: []
      },
      UnionType: {
        name: su.$type,
        properties: {
          types: {
            name: su.types,
            defaultValue: []
          }
        },
        superTypes: [Ei.$type]
      },
      UnorderedGroup: {
        name: Hs.$type,
        properties: {
          cardinality: {
            name: Hs.cardinality
          },
          elements: {
            name: Hs.elements,
            defaultValue: []
          }
        },
        superTypes: [at.$type]
      },
      UntilToken: {
        name: pr.$type,
        properties: {
          cardinality: {
            name: pr.cardinality
          },
          lookahead: {
            name: pr.lookahead
          },
          parenthesized: {
            name: pr.parenthesized,
            defaultValue: !1
          },
          terminal: {
            name: pr.terminal
          }
        },
        superTypes: [pt.$type]
      },
      ValueLiteral: {
        name: Ai.$type,
        properties: {},
        superTypes: []
      },
      Wildcard: {
        name: Oi.$type,
        properties: {
          cardinality: {
            name: Oi.cardinality
          },
          lookahead: {
            name: Oi.lookahead
          },
          parenthesized: {
            name: Oi.parenthesized,
            defaultValue: !1
          }
        },
        superTypes: [pt.$type]
      }
    };
  }
}
const Z = new Bf();
function Fo(t) {
  return new Sl(t, (e) => Bi(e) ? e.content : [], { includeRoot: !0 });
}
function Mm(t, e) {
  for (; t.container; )
    if (t = t.container, t === e)
      return !0;
  return !1;
}
function Go(t) {
  return {
    start: {
      character: t.startColumn - 1,
      line: t.startLine - 1
    },
    end: {
      character: t.endColumn,
      // endColumn uses the correct index
      line: t.endLine - 1
    }
  };
}
function aa(t) {
  if (!t)
    return;
  const { offset: e, end: n, range: r } = t;
  return {
    range: r,
    offset: e,
    end: n,
    length: n - e
  };
}
var Xt;
(function(t) {
  t[t.Before = 0] = "Before", t[t.After = 1] = "After", t[t.OverlapFront = 2] = "OverlapFront", t[t.OverlapBack = 3] = "OverlapBack", t[t.Inside = 4] = "Inside", t[t.Outside = 5] = "Outside";
})(Xt || (Xt = {}));
function Fm(t, e) {
  if (t.end.line < e.start.line || t.end.line === e.start.line && t.end.character <= e.start.character)
    return Xt.Before;
  if (t.start.line > e.end.line || t.start.line === e.end.line && t.start.character >= e.end.character)
    return Xt.After;
  const n = t.start.line > e.start.line || t.start.line === e.start.line && t.start.character >= e.start.character, r = t.end.line < e.end.line || t.end.line === e.end.line && t.end.character <= e.end.character;
  return n && r ? Xt.Inside : n ? Xt.OverlapBack : r ? Xt.OverlapFront : Xt.Outside;
}
function Gm(t, e) {
  return Fm(t, e) > Xt.After;
}
const Um = /^[\w\p{L}]$/u;
function jm(t, e) {
  if (t) {
    const n = zm(t, !0);
    if (n && au(n, e))
      return n;
    if (Mf(t)) {
      const r = t.content.findIndex((i) => !i.hidden);
      for (let i = r - 1; i >= 0; i--) {
        const s = t.content[i];
        if (au(s, e))
          return s;
      }
    }
  }
}
function au(t, e) {
  return Df(t) && e.includes(t.tokenType.name);
}
function zm(t, e = !0) {
  for (; t.container; ) {
    const n = t.container;
    let r = n.content.indexOf(t);
    for (; r > 0; ) {
      r--;
      const i = n.content[r];
      if (e || !i.hidden)
        return i;
    }
    t = n;
  }
}
class qf extends Error {
  constructor(e, n) {
    super(e ? `${n} at ${e.range.start.line}:${e.range.start.character}` : n);
  }
}
function as(t, e = "Error: Got unexpected value.") {
  throw new Error(e);
}
function W(t) {
  return t.charCodeAt(0);
}
function lo(t, e) {
  Array.isArray(t) ? t.forEach(function(n) {
    e.push(n);
  }) : e.push(t);
}
function Si(t, e) {
  if (t[e] === !0)
    throw "duplicate flag " + e;
  t[e], t[e] = !0;
}
function nr(t) {
  if (t === void 0)
    throw Error("Internal Error - Should never get here!");
  return !0;
}
function Bm() {
  throw Error("Internal Error - Should never get here!");
}
function ou(t) {
  return t.type === "Character";
}
const oa = [];
for (let t = W("0"); t <= W("9"); t++)
  oa.push(t);
const ca = [W("_")].concat(oa);
for (let t = W("a"); t <= W("z"); t++)
  ca.push(t);
for (let t = W("A"); t <= W("Z"); t++)
  ca.push(t);
const cu = [
  W(" "),
  W("\f"),
  W(`
`),
  W("\r"),
  W("	"),
  W("\v"),
  W("	"),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W(" "),
  W("\u2028"),
  W("\u2029"),
  W(" "),
  W(" "),
  W(" "),
  W("\uFEFF")
], qm = /[0-9a-fA-F]/, Ls = /[0-9]/, Wm = /[1-9]/;
class Wf {
  constructor() {
    this.idx = 0, this.input = "", this.groupIdx = 0;
  }
  saveState() {
    return {
      idx: this.idx,
      input: this.input,
      groupIdx: this.groupIdx
    };
  }
  restoreState(e) {
    this.idx = e.idx, this.input = e.input, this.groupIdx = e.groupIdx;
  }
  pattern(e) {
    this.idx = 0, this.input = e, this.groupIdx = 0, this.consumeChar("/");
    const n = this.disjunction();
    this.consumeChar("/");
    const r = {
      type: "Flags",
      loc: { begin: this.idx, end: e.length },
      global: !1,
      ignoreCase: !1,
      multiLine: !1,
      unicode: !1,
      sticky: !1
    };
    for (; this.isRegExpFlag(); )
      switch (this.popChar()) {
        case "g":
          Si(r, "global");
          break;
        case "i":
          Si(r, "ignoreCase");
          break;
        case "m":
          Si(r, "multiLine");
          break;
        case "u":
          Si(r, "unicode");
          break;
        case "y":
          Si(r, "sticky");
          break;
      }
    if (this.idx !== this.input.length)
      throw Error("Redundant input: " + this.input.substring(this.idx));
    return {
      type: "Pattern",
      flags: r,
      value: n,
      loc: this.loc(0)
    };
  }
  disjunction() {
    const e = [], n = this.idx;
    for (e.push(this.alternative()); this.peekChar() === "|"; )
      this.consumeChar("|"), e.push(this.alternative());
    return { type: "Disjunction", value: e, loc: this.loc(n) };
  }
  alternative() {
    const e = [], n = this.idx;
    for (; this.isTerm(); )
      e.push(this.term());
    return { type: "Alternative", value: e, loc: this.loc(n) };
  }
  term() {
    return this.isAssertion() ? this.assertion() : this.atom();
  }
  assertion() {
    const e = this.idx;
    switch (this.popChar()) {
      case "^":
        return {
          type: "StartAnchor",
          loc: this.loc(e)
        };
      case "$":
        return { type: "EndAnchor", loc: this.loc(e) };
      case "\\":
        switch (this.popChar()) {
          case "b":
            return {
              type: "WordBoundary",
              loc: this.loc(e)
            };
          case "B":
            return {
              type: "NonWordBoundary",
              loc: this.loc(e)
            };
        }
        throw Error("Invalid Assertion Escape");
      case "(":
        this.consumeChar("?");
        let n;
        switch (this.popChar()) {
          case "=":
            n = "Lookahead";
            break;
          case "!":
            n = "NegativeLookahead";
            break;
          case "<": {
            switch (this.popChar()) {
              case "=":
                n = "Lookbehind";
                break;
              case "!":
                n = "NegativeLookbehind";
            }
            break;
          }
        }
        nr(n);
        const r = this.disjunction();
        return this.consumeChar(")"), {
          type: n,
          value: r,
          loc: this.loc(e)
        };
    }
    return Bm();
  }
  quantifier(e = !1) {
    let n;
    const r = this.idx;
    switch (this.popChar()) {
      case "*":
        n = {
          atLeast: 0,
          atMost: 1 / 0
        };
        break;
      case "+":
        n = {
          atLeast: 1,
          atMost: 1 / 0
        };
        break;
      case "?":
        n = {
          atLeast: 0,
          atMost: 1
        };
        break;
      case "{":
        const i = this.integerIncludingZero();
        switch (this.popChar()) {
          case "}":
            n = {
              atLeast: i,
              atMost: i
            };
            break;
          case ",":
            let s;
            this.isDigit() ? (s = this.integerIncludingZero(), n = {
              atLeast: i,
              atMost: s
            }) : n = {
              atLeast: i,
              atMost: 1 / 0
            }, this.consumeChar("}");
            break;
        }
        if (e === !0 && n === void 0)
          return;
        nr(n);
        break;
    }
    if (!(e === !0 && n === void 0) && nr(n))
      return this.peekChar(0) === "?" ? (this.consumeChar("?"), n.greedy = !1) : n.greedy = !0, n.type = "Quantifier", n.loc = this.loc(r), n;
  }
  atom() {
    let e;
    const n = this.idx;
    switch (this.peekChar()) {
      case ".":
        e = this.dotAll();
        break;
      case "\\":
        e = this.atomEscape();
        break;
      case "[":
        e = this.characterClass();
        break;
      case "(":
        e = this.group();
        break;
    }
    if (e === void 0 && this.isPatternCharacter() && (e = this.patternCharacter()), nr(e))
      return e.loc = this.loc(n), this.isQuantifier() && (e.quantifier = this.quantifier()), e;
  }
  dotAll() {
    return this.consumeChar("."), {
      type: "Set",
      complement: !0,
      value: [W(`
`), W("\r"), W("\u2028"), W("\u2029")]
    };
  }
  atomEscape() {
    switch (this.consumeChar("\\"), this.peekChar()) {
      case "1":
      case "2":
      case "3":
      case "4":
      case "5":
      case "6":
      case "7":
      case "8":
      case "9":
        return this.decimalEscapeAtom();
      case "d":
      case "D":
      case "s":
      case "S":
      case "w":
      case "W":
        return this.characterClassEscape();
      case "f":
      case "n":
      case "r":
      case "t":
      case "v":
        return this.controlEscapeAtom();
      case "c":
        return this.controlLetterEscapeAtom();
      case "0":
        return this.nulCharacterAtom();
      case "x":
        return this.hexEscapeSequenceAtom();
      case "u":
        return this.regExpUnicodeEscapeSequenceAtom();
      default:
        return this.identityEscapeAtom();
    }
  }
  decimalEscapeAtom() {
    return { type: "GroupBackReference", value: this.positiveInteger() };
  }
  characterClassEscape() {
    let e, n = !1;
    switch (this.popChar()) {
      case "d":
        e = oa;
        break;
      case "D":
        e = oa, n = !0;
        break;
      case "s":
        e = cu;
        break;
      case "S":
        e = cu, n = !0;
        break;
      case "w":
        e = ca;
        break;
      case "W":
        e = ca, n = !0;
        break;
    }
    if (nr(e))
      return { type: "Set", value: e, complement: n };
  }
  controlEscapeAtom() {
    let e;
    switch (this.popChar()) {
      case "f":
        e = W("\f");
        break;
      case "n":
        e = W(`
`);
        break;
      case "r":
        e = W("\r");
        break;
      case "t":
        e = W("	");
        break;
      case "v":
        e = W("\v");
        break;
    }
    if (nr(e))
      return { type: "Character", value: e };
  }
  controlLetterEscapeAtom() {
    this.consumeChar("c");
    const e = this.popChar();
    if (/[a-zA-Z]/.test(e) === !1)
      throw Error("Invalid ");
    return { type: "Character", value: e.toUpperCase().charCodeAt(0) - 64 };
  }
  nulCharacterAtom() {
    return this.consumeChar("0"), { type: "Character", value: W("\0") };
  }
  hexEscapeSequenceAtom() {
    return this.consumeChar("x"), this.parseHexDigits(2);
  }
  regExpUnicodeEscapeSequenceAtom() {
    return this.consumeChar("u"), this.parseHexDigits(4);
  }
  identityEscapeAtom() {
    const e = this.popChar();
    return { type: "Character", value: W(e) };
  }
  classPatternCharacterAtom() {
    switch (this.peekChar()) {
      case `
`:
      case "\r":
      case "\u2028":
      case "\u2029":
      case "\\":
      case "]":
        throw Error("TBD");
      default:
        const e = this.popChar();
        return { type: "Character", value: W(e) };
    }
  }
  characterClass() {
    const e = [];
    let n = !1;
    for (this.consumeChar("["), this.peekChar(0) === "^" && (this.consumeChar("^"), n = !0); this.isClassAtom(); ) {
      const r = this.classAtom();
      if (r.type, ou(r) && this.isRangeDash()) {
        this.consumeChar("-");
        const i = this.classAtom();
        if (i.type, ou(i)) {
          if (i.value < r.value)
            throw Error("Range out of order in character class");
          e.push({ from: r.value, to: i.value });
        } else
          lo(r.value, e), e.push(W("-")), lo(i.value, e);
      } else
        lo(r.value, e);
    }
    return this.consumeChar("]"), { type: "Set", complement: n, value: e };
  }
  classAtom() {
    switch (this.peekChar()) {
      case "]":
      case `
`:
      case "\r":
      case "\u2028":
      case "\u2029":
        throw Error("TBD");
      case "\\":
        return this.classEscape();
      default:
        return this.classPatternCharacterAtom();
    }
  }
  classEscape() {
    switch (this.consumeChar("\\"), this.peekChar()) {
      case "b":
        return this.consumeChar("b"), { type: "Character", value: W("\b") };
      case "d":
      case "D":
      case "s":
      case "S":
      case "w":
      case "W":
        return this.characterClassEscape();
      case "f":
      case "n":
      case "r":
      case "t":
      case "v":
        return this.controlEscapeAtom();
      case "c":
        return this.controlLetterEscapeAtom();
      case "0":
        return this.nulCharacterAtom();
      case "x":
        return this.hexEscapeSequenceAtom();
      case "u":
        return this.regExpUnicodeEscapeSequenceAtom();
      default:
        return this.identityEscapeAtom();
    }
  }
  group() {
    let e = !0;
    switch (this.consumeChar("("), this.peekChar(0)) {
      case "?":
        this.consumeChar("?"), this.consumeChar(":"), e = !1;
        break;
      default:
        this.groupIdx++;
        break;
    }
    const n = this.disjunction();
    this.consumeChar(")");
    const r = {
      type: "Group",
      capturing: e,
      value: n
    };
    return e && (r.idx = this.groupIdx), r;
  }
  positiveInteger() {
    let e = this.popChar();
    if (Wm.test(e) === !1)
      throw Error("Expecting a positive integer");
    for (; Ls.test(this.peekChar(0)); )
      e += this.popChar();
    return parseInt(e, 10);
  }
  integerIncludingZero() {
    let e = this.popChar();
    if (Ls.test(e) === !1)
      throw Error("Expecting an integer");
    for (; Ls.test(this.peekChar(0)); )
      e += this.popChar();
    return parseInt(e, 10);
  }
  patternCharacter() {
    const e = this.popChar();
    switch (e) {
      case `
`:
      case "\r":
      case "\u2028":
      case "\u2029":
      case "^":
      case "$":
      case "\\":
      case ".":
      case "*":
      case "+":
      case "?":
      case "(":
      case ")":
      case "[":
      case "|":
        throw Error("TBD");
      default:
        return { type: "Character", value: W(e) };
    }
  }
  isRegExpFlag() {
    switch (this.peekChar(0)) {
      case "g":
      case "i":
      case "m":
      case "u":
      case "y":
        return !0;
      default:
        return !1;
    }
  }
  isRangeDash() {
    return this.peekChar() === "-" && this.isClassAtom(1);
  }
  isDigit() {
    return Ls.test(this.peekChar(0));
  }
  isClassAtom(e = 0) {
    switch (this.peekChar(e)) {
      case "]":
      case `
`:
      case "\r":
      case "\u2028":
      case "\u2029":
        return !1;
      default:
        return !0;
    }
  }
  isTerm() {
    return this.isAtom() || this.isAssertion();
  }
  isAtom() {
    if (this.isPatternCharacter())
      return !0;
    switch (this.peekChar(0)) {
      case ".":
      case "\\":
      case "[":
      case "(":
        return !0;
      default:
        return !1;
    }
  }
  isAssertion() {
    switch (this.peekChar(0)) {
      case "^":
      case "$":
        return !0;
      case "\\":
        switch (this.peekChar(1)) {
          case "b":
          case "B":
            return !0;
          default:
            return !1;
        }
      case "(":
        return this.peekChar(1) === "?" && (this.peekChar(2) === "=" || this.peekChar(2) === "!" || this.peekChar(2) === "<" && (this.peekChar(3) === "=" || this.peekChar(3) === "!"));
      default:
        return !1;
    }
  }
  isQuantifier() {
    const e = this.saveState();
    try {
      return this.quantifier(!0) !== void 0;
    } catch {
      return !1;
    } finally {
      this.restoreState(e);
    }
  }
  isPatternCharacter() {
    switch (this.peekChar()) {
      case "^":
      case "$":
      case "\\":
      case ".":
      case "*":
      case "+":
      case "?":
      case "(":
      case ")":
      case "[":
      case "|":
      case "/":
      case `
`:
      case "\r":
      case "\u2028":
      case "\u2029":
        return !1;
      default:
        return !0;
    }
  }
  parseHexDigits(e) {
    let n = "";
    for (let i = 0; i < e; i++) {
      const s = this.popChar();
      if (qm.test(s) === !1)
        throw Error("Expecting a HexDecimal digits");
      n += s;
    }
    return { type: "Character", value: parseInt(n, 16) };
  }
  peekChar(e = 0) {
    return this.input[this.idx + e];
  }
  popChar() {
    const e = this.peekChar(0);
    return this.consumeChar(void 0), e;
  }
  consumeChar(e) {
    if (e !== void 0 && this.input[this.idx] !== e)
      throw Error("Expected: '" + e + "' but found: '" + this.input[this.idx] + "' at offset: " + this.idx);
    if (this.idx >= this.input.length)
      throw Error("Unexpected end of input");
    this.idx++;
  }
  loc(e) {
    return { begin: e, end: this.idx };
  }
}
class Fa {
  visitChildren(e) {
    for (const n in e) {
      const r = e[n];
      e.hasOwnProperty(n) && (r.type !== void 0 ? this.visit(r) : Array.isArray(r) && r.forEach((i) => {
        this.visit(i);
      }, this));
    }
  }
  visit(e) {
    switch (e.type) {
      case "Pattern":
        this.visitPattern(e);
        break;
      case "Flags":
        this.visitFlags(e);
        break;
      case "Disjunction":
        this.visitDisjunction(e);
        break;
      case "Alternative":
        this.visitAlternative(e);
        break;
      case "StartAnchor":
        this.visitStartAnchor(e);
        break;
      case "EndAnchor":
        this.visitEndAnchor(e);
        break;
      case "WordBoundary":
        this.visitWordBoundary(e);
        break;
      case "NonWordBoundary":
        this.visitNonWordBoundary(e);
        break;
      case "Lookahead":
        this.visitLookahead(e);
        break;
      case "NegativeLookahead":
        this.visitNegativeLookahead(e);
        break;
      case "Lookbehind":
        this.visitLookbehind(e);
        break;
      case "NegativeLookbehind":
        this.visitNegativeLookbehind(e);
        break;
      case "Character":
        this.visitCharacter(e);
        break;
      case "Set":
        this.visitSet(e);
        break;
      case "Group":
        this.visitGroup(e);
        break;
      case "GroupBackReference":
        this.visitGroupBackReference(e);
        break;
      case "Quantifier":
        this.visitQuantifier(e);
        break;
    }
    this.visitChildren(e);
  }
  visitPattern(e) {
  }
  visitFlags(e) {
  }
  visitDisjunction(e) {
  }
  visitAlternative(e) {
  }
  // Assertion
  visitStartAnchor(e) {
  }
  visitEndAnchor(e) {
  }
  visitWordBoundary(e) {
  }
  visitNonWordBoundary(e) {
  }
  visitLookahead(e) {
  }
  visitNegativeLookahead(e) {
  }
  visitLookbehind(e) {
  }
  visitNegativeLookbehind(e) {
  }
  // atoms
  visitCharacter(e) {
  }
  visitSet(e) {
  }
  visitGroup(e) {
  }
  visitGroupBackReference(e) {
  }
  visitQuantifier(e) {
  }
}
const Vm = /\r?\n/gm, Km = new Wf();
class Hm extends Fa {
  constructor() {
    super(...arguments), this.isStarting = !0, this.endRegexpStack = [], this.multiline = !1;
  }
  get endRegex() {
    return this.endRegexpStack.join("");
  }
  reset(e) {
    this.multiline = !1, this.regex = e, this.startRegexp = "", this.isStarting = !0, this.endRegexpStack = [];
  }
  visitGroup(e) {
    e.quantifier && (this.isStarting = !1, this.endRegexpStack = []);
  }
  visitCharacter(e) {
    const n = String.fromCharCode(e.value);
    if (!this.multiline && n === `
` && (this.multiline = !0), e.quantifier)
      this.isStarting = !1, this.endRegexpStack = [];
    else {
      const r = Ga(n);
      this.endRegexpStack.push(r), this.isStarting && (this.startRegexp += r);
    }
  }
  visitSet(e) {
    if (!this.multiline) {
      const n = this.regex.substring(e.loc.begin, e.loc.end), r = new RegExp(n);
      this.multiline = !!`
`.match(r);
    }
    if (e.quantifier)
      this.isStarting = !1, this.endRegexpStack = [];
    else {
      const n = this.regex.substring(e.loc.begin, e.loc.end);
      this.endRegexpStack.push(n), this.isStarting && (this.startRegexp += n);
    }
  }
  visitChildren(e) {
    e.type === "Group" && e.quantifier || super.visitChildren(e);
  }
}
const uo = new Hm();
function Ym(t) {
  try {
    return typeof t == "string" && (t = new RegExp(t)), t = t.toString(), uo.reset(t), uo.visit(Km.pattern(t)), uo.multiline;
  } catch {
    return !1;
  }
}
const Xm = `\f
\r	\v              \u2028\u2029   \uFEFF`.split("");
function Vf(t) {
  const e = typeof t == "string" ? new RegExp(t) : t;
  return Xm.some((n) => e.test(n));
}
function Ga(t) {
  return t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function Jm(t, e) {
  const n = Qm(t), r = e.match(n);
  return !!r && r[0].length > 0;
}
function Qm(t) {
  typeof t == "string" && (t = new RegExp(t));
  const e = t, n = t.source;
  let r = 0;
  function i() {
    let s = "", a;
    function o(l) {
      s += n.substr(r, l), r += l;
    }
    function c(l) {
      s += "(?:" + n.substr(r, l) + "|$)", r += l;
    }
    for (; r < n.length; )
      switch (n[r]) {
        case "\\":
          switch (n[r + 1]) {
            case "c":
              c(3);
              break;
            case "x":
              c(4);
              break;
            case "u":
              e.unicode ? n[r + 2] === "{" ? c(n.indexOf("}", r) - r + 1) : c(6) : c(2);
              break;
            case "p":
            case "P":
              e.unicode ? c(n.indexOf("}", r) - r + 1) : c(2);
              break;
            case "k":
              c(n.indexOf(">", r) - r + 1);
              break;
            default:
              c(2);
              break;
          }
          break;
        case "[":
          a = /\[(?:\\.|.)*?\]/g, a.lastIndex = r, a = a.exec(n) || [], c(a[0].length);
          break;
        case "|":
        case "^":
        case "$":
        case "*":
        case "+":
        case "?":
          o(1);
          break;
        case "{":
          a = /\{\d+,?\d*\}/g, a.lastIndex = r, a = a.exec(n), a ? o(a[0].length) : c(1);
          break;
        case "(":
          if (n[r + 1] === "?")
            switch (n[r + 2]) {
              case ":":
                s += "(?:", r += 3, s += i() + "|$)";
                break;
              case "=":
                s += "(?=", r += 3, s += i() + ")";
                break;
              case "!":
                a = r, r += 3, i(), s += n.substr(a, r - a);
                break;
              case "<":
                switch (n[r + 3]) {
                  case "=":
                  case "!":
                    a = r, r += 4, i(), s += n.substr(a, r - a);
                    break;
                  default:
                    o(n.indexOf(">", r) - r + 1), s += i() + "|$)";
                    break;
                }
                break;
            }
          else
            o(1), s += i() + "|$)";
          break;
        case ")":
          return ++r, s;
        default:
          c(1);
          break;
      }
    return s;
  }
  return new RegExp(i(), t.flags);
}
function Zm(t) {
  return t.rules.find((e) => an(e) && e.entry);
}
function eg(t) {
  return t.rules.filter((e) => on(e) && e.hidden);
}
function Kf(t, e) {
  const n = /* @__PURE__ */ new Set(), r = Zm(t);
  if (!r)
    return new Set(t.rules);
  const i = [r].concat(eg(t));
  for (const a of i)
    Hf(a, n, e);
  const s = /* @__PURE__ */ new Set();
  for (const a of t.rules)
    (n.has(a.name) || on(a) && a.hidden) && s.add(a);
  return s;
}
function Hf(t, e, n) {
  e.add(t.name), is(t).forEach((r) => {
    if (qn(r) || n) {
      const i = r.rule.ref;
      i && !e.has(i.name) && Hf(i, e, n);
    }
  });
}
function tg(t) {
  if (t.terminal)
    return t.terminal;
  if (t.type.ref) {
    const e = Xf(t.type.ref);
    return e == null ? void 0 : e.terminal;
  }
}
function ng(t) {
  return t.hidden && !Vf(wl(t));
}
function rg(t, e) {
  return !t || !e ? [] : Nl(t, e, t.astNode, !0);
}
function Yf(t, e, n) {
  if (!t || !e)
    return;
  const r = Nl(t, e, t.astNode, !0);
  if (r.length !== 0)
    return n !== void 0 ? n = Math.max(0, Math.min(n, r.length - 1)) : n = 0, r[n];
}
function Nl(t, e, n, r) {
  if (!r) {
    const i = xa(t.grammarSource, zn);
    if (i && i.feature === e)
      return [t];
  }
  return Bi(t) && t.astNode === n ? t.content.flatMap((i) => Nl(i, e, n, !1)) : [];
}
function ig(t, e, n) {
  if (!t)
    return;
  const r = sg(t, e, t == null ? void 0 : t.astNode);
  if (r.length !== 0)
    return n !== void 0 ? n = Math.max(0, Math.min(n, r.length - 1)) : n = 0, r[n];
}
function sg(t, e, n) {
  if (t.astNode !== n)
    return [];
  if (Bn(t.grammarSource) && t.grammarSource.value === e)
    return [t];
  const r = Fo(t).iterator();
  let i;
  const s = [];
  do
    if (i = r.next(), !i.done) {
      const a = i.value;
      a.astNode === n ? Bn(a.grammarSource) && a.grammarSource.value === e && s.push(a) : r.prune();
    }
  while (!i.done);
  return s;
}
function ag(t) {
  var n;
  const e = t.astNode;
  for (; e === ((n = t.container) == null ? void 0 : n.astNode); ) {
    const r = xa(t.grammarSource, zn);
    if (r)
      return r;
    t = t.container;
  }
}
function Xf(t) {
  let e = t;
  return jf(e) && (Da(e.$container) ? e = e.$container.$container : ss(e.$container) ? e = e.$container : as(e.$container)), Jf(t, e, /* @__PURE__ */ new Map());
}
function Jf(t, e, n) {
  var i;
  function r(s, a) {
    let o;
    return xa(s, zn) || (o = Jf(a, a, n)), n.set(t, o), o;
  }
  if (n.has(t))
    return n.get(t);
  n.set(t, void 0);
  for (const s of is(e)) {
    if (zn(s) && s.feature.toLowerCase() === "name")
      return n.set(t, s), s;
    if (qn(s) && an(s.rule.ref))
      return r(s, s.rule.ref);
    if (_m(s) && ((i = s.typeRef) != null && i.ref))
      return r(s, s.typeRef.ref);
  }
}
function Qf(t) {
  return Zf(t, /* @__PURE__ */ new Set());
}
function Zf(t, e) {
  if (e.has(t))
    return !0;
  e.add(t);
  for (const n of is(t))
    if (qn(n)) {
      if (!n.rule.ref || an(n.rule.ref) && !Zf(n.rule.ref, e) || sa(n.rule.ref))
        return !1;
    } else {
      if (zn(n))
        return !1;
      if (Da(n))
        return !1;
    }
  return !!t.definition;
}
function eh(t) {
  if (!on(t)) {
    if (t.inferredType)
      return t.inferredType.name;
    if (t.dataType)
      return t.dataType;
    if (t.returnType) {
      const e = t.returnType.ref;
      if (e)
        return e.name;
    }
  }
}
function qi(t) {
  if (ss(t))
    return an(t) && Qf(t) ? t.name : eh(t) ?? t.name;
  if (Cm(t) || Om(t) || Im(t))
    return t.name;
  if (Da(t)) {
    const e = og(t);
    if (e)
      return e;
  } else if (jf(t))
    return t.name;
  throw new Error("Cannot get name of Unknown Type");
}
function og(t) {
  var e;
  if (t.inferredType)
    return t.inferredType.name;
  if ((e = t.type) != null && e.ref)
    return qi(t.type.ref);
}
function cg(t) {
  var e;
  return on(t) ? ((e = t.type) == null ? void 0 : e.name) ?? "string" : eh(t) ?? t.name;
}
function wl(t) {
  const e = {
    s: !1,
    i: !1,
    u: !1
  }, n = ii(t.definition, e), r = Object.entries(e).filter(([, i]) => i).map(([i]) => i).join("");
  return new RegExp(n, r);
}
const bl = /[\s\S]/.source;
function ii(t, e) {
  var n;
  if ($m(t))
    return lg(t);
  if (Pm(t))
    return ug(t);
  if (vm(t))
    return hg(t);
  if (Lm(t)) {
    const r = t.rule.ref;
    if (!r)
      throw new Error("Missing rule reference.");
    return en(ii(r.definition), {
      cardinality: t.cardinality,
      lookahead: t.lookahead,
      parenthesized: t.parenthesized
    });
  } else {
    if (km(t))
      return fg(t);
    if (xm(t))
      return dg(t);
    if (bm(t)) {
      const r = t.regex.lastIndexOf("/"), i = t.regex.substring(1, r), s = t.regex.substring(r + 1);
      return e && (e.i = s.includes("i"), e.s = s.includes("s"), e.u = s.includes("u")), en(i, {
        cardinality: t.cardinality,
        lookahead: t.lookahead,
        parenthesized: t.parenthesized,
        wrap: !1
      });
    } else {
      if (Dm(t))
        return en(bl, {
          cardinality: t.cardinality,
          lookahead: t.lookahead,
          parenthesized: t.parenthesized
        });
      throw new Error(`Invalid terminal element: ${t == null ? void 0 : t.$type}, ${(n = t == null ? void 0 : t.$cstNode) == null ? void 0 : n.text}`);
    }
  }
}
function lg(t) {
  return en(t.elements.map((e) => ii(e)).join("|"), {
    cardinality: t.cardinality,
    lookahead: t.lookahead,
    parenthesized: t.parenthesized,
    wrap: !1
    // wrapping is not required for top level alternatives, and nested alternatives are already parenthesized according to the grammar
  });
}
function ug(t) {
  return en(t.elements.map((e) => ii(e)).join(""), {
    cardinality: t.cardinality,
    lookahead: t.lookahead,
    parenthesized: t.parenthesized,
    wrap: !1
    // wrapping is not required for top level group, and nested group are already parenthesized according to the grammar
  });
}
function dg(t) {
  return en(`${bl}*?${ii(t.terminal)}`, {
    cardinality: t.cardinality,
    lookahead: t.lookahead,
    parenthesized: t.parenthesized
  });
}
function fg(t) {
  return en(`(?!${ii(t.terminal)})${bl}*?`, {
    cardinality: t.cardinality,
    lookahead: t.lookahead,
    parenthesized: t.parenthesized
  });
}
function hg(t) {
  return t.right ? en(`[${fo(t.left)}-${fo(t.right)}]`, {
    cardinality: t.cardinality,
    lookahead: t.lookahead,
    parenthesized: t.parenthesized,
    wrap: !1
  }) : en(fo(t.left), {
    cardinality: t.cardinality,
    lookahead: t.lookahead,
    parenthesized: t.parenthesized,
    wrap: !1
  });
}
function fo(t) {
  return Ga(t.value);
}
function en(t, e) {
  return (e.parenthesized || e.lookahead || e.wrap !== !1) && (t = `(${e.lookahead ?? (e.parenthesized ? "" : "?:")}${t})`), e.cardinality ? `${t}${e.cardinality}` : t;
}
function pg(t) {
  const e = [], n = t.Grammar;
  for (const r of n.rules)
    on(r) && ng(r) && Ym(wl(r)) && e.push(r.name);
  return {
    multilineCommentRules: e,
    nameRegexp: Um
  };
}
function Uo(t) {
  console && console.error && console.error(`Error: ${t}`);
}
function th(t) {
  console && console.warn && console.warn(`Warning: ${t}`);
}
function nh(t) {
  const e = (/* @__PURE__ */ new Date()).getTime(), n = t();
  return { time: (/* @__PURE__ */ new Date()).getTime() - e, value: n };
}
function rh(t) {
  function e() {
  }
  e.prototype = t;
  const n = new e();
  function r() {
    return typeof n.bar;
  }
  return r(), r(), t;
}
function mg(t) {
  return gg(t) ? t.LABEL : t.name;
}
function gg(t) {
  return tt(t.LABEL) && t.LABEL !== "";
}
class Ut {
  get definition() {
    return this._definition;
  }
  set definition(e) {
    this._definition = e;
  }
  constructor(e) {
    this._definition = e;
  }
  accept(e) {
    e.visit(this), j(this.definition, (n) => {
      n.accept(e);
    });
  }
}
class Xe extends Ut {
  constructor(e) {
    super([]), this.idx = 1, ut(this, It(e, (n) => n !== void 0));
  }
  set definition(e) {
  }
  get definition() {
    return this.referencedRule !== void 0 ? this.referencedRule.definition : [];
  }
  accept(e) {
    e.visit(this);
  }
}
class si extends Ut {
  constructor(e) {
    super(e.definition), this.orgText = "", ut(this, It(e, (n) => n !== void 0));
  }
}
class nt extends Ut {
  constructor(e) {
    super(e.definition), this.ignoreAmbiguities = !1, ut(this, It(e, (n) => n !== void 0));
  }
}
let ze = class extends Ut {
  constructor(e) {
    super(e.definition), this.idx = 1, ut(this, It(e, (n) => n !== void 0));
  }
};
class ft extends Ut {
  constructor(e) {
    super(e.definition), this.idx = 1, ut(this, It(e, (n) => n !== void 0));
  }
}
class ht extends Ut {
  constructor(e) {
    super(e.definition), this.idx = 1, ut(this, It(e, (n) => n !== void 0));
  }
}
class Ae extends Ut {
  constructor(e) {
    super(e.definition), this.idx = 1, ut(this, It(e, (n) => n !== void 0));
  }
}
class rt extends Ut {
  constructor(e) {
    super(e.definition), this.idx = 1, ut(this, It(e, (n) => n !== void 0));
  }
}
class it extends Ut {
  get definition() {
    return this._definition;
  }
  set definition(e) {
    this._definition = e;
  }
  constructor(e) {
    super(e.definition), this.idx = 1, this.ignoreAmbiguities = !1, this.hasPredicates = !1, ut(this, It(e, (n) => n !== void 0));
  }
}
class ue {
  constructor(e) {
    this.idx = 1, ut(this, It(e, (n) => n !== void 0));
  }
  accept(e) {
    e.visit(this);
  }
}
function yg(t) {
  return M(t, Ys);
}
function Ys(t) {
  function e(n) {
    return M(n, Ys);
  }
  if (t instanceof Xe) {
    const n = {
      type: "NonTerminal",
      name: t.nonTerminalName,
      idx: t.idx
    };
    return tt(t.label) && (n.label = t.label), n;
  } else {
    if (t instanceof nt)
      return {
        type: "Alternative",
        definition: e(t.definition)
      };
    if (t instanceof ze)
      return {
        type: "Option",
        idx: t.idx,
        definition: e(t.definition)
      };
    if (t instanceof ft)
      return {
        type: "RepetitionMandatory",
        idx: t.idx,
        definition: e(t.definition)
      };
    if (t instanceof ht)
      return {
        type: "RepetitionMandatoryWithSeparator",
        idx: t.idx,
        separator: Ys(new ue({ terminalType: t.separator })),
        definition: e(t.definition)
      };
    if (t instanceof rt)
      return {
        type: "RepetitionWithSeparator",
        idx: t.idx,
        separator: Ys(new ue({ terminalType: t.separator })),
        definition: e(t.definition)
      };
    if (t instanceof Ae)
      return {
        type: "Repetition",
        idx: t.idx,
        definition: e(t.definition)
      };
    if (t instanceof it)
      return {
        type: "Alternation",
        idx: t.idx,
        definition: e(t.definition)
      };
    if (t instanceof ue) {
      const n = {
        type: "Terminal",
        name: t.terminalType.name,
        label: mg(t.terminalType),
        idx: t.idx
      };
      tt(t.label) && (n.terminalLabel = t.label);
      const r = t.terminalType.PATTERN;
      return t.terminalType.PATTERN && (n.pattern = nn(r) ? r.source : r), n;
    } else {
      if (t instanceof si)
        return {
          type: "Rule",
          name: t.name,
          orgText: t.orgText,
          definition: e(t.definition)
        };
      throw Error("non exhaustive match");
    }
  }
}
class ai {
  visit(e) {
    const n = e;
    switch (n.constructor) {
      case Xe:
        return this.visitNonTerminal(n);
      case nt:
        return this.visitAlternative(n);
      case ze:
        return this.visitOption(n);
      case ft:
        return this.visitRepetitionMandatory(n);
      case ht:
        return this.visitRepetitionMandatoryWithSeparator(n);
      case rt:
        return this.visitRepetitionWithSeparator(n);
      case Ae:
        return this.visitRepetition(n);
      case it:
        return this.visitAlternation(n);
      case ue:
        return this.visitTerminal(n);
      case si:
        return this.visitRule(n);
      default:
        throw Error("non exhaustive match");
    }
  }
  /* c8 ignore next */
  visitNonTerminal(e) {
  }
  /* c8 ignore next */
  visitAlternative(e) {
  }
  /* c8 ignore next */
  visitOption(e) {
  }
  /* c8 ignore next */
  visitRepetition(e) {
  }
  /* c8 ignore next */
  visitRepetitionMandatory(e) {
  }
  /* c8 ignore next 3 */
  visitRepetitionMandatoryWithSeparator(e) {
  }
  /* c8 ignore next */
  visitRepetitionWithSeparator(e) {
  }
  /* c8 ignore next */
  visitAlternation(e) {
  }
  /* c8 ignore next */
  visitTerminal(e) {
  }
  /* c8 ignore next */
  visitRule(e) {
  }
}
function Tg(t) {
  return t instanceof nt || t instanceof ze || t instanceof Ae || t instanceof ft || t instanceof ht || t instanceof rt || t instanceof ue || t instanceof si;
}
function la(t, e = []) {
  return t instanceof ze || t instanceof Ae || t instanceof rt ? !0 : t instanceof it ? Of(t.definition, (r) => la(r, e)) : t instanceof Xe && Qe(e, t) ? !1 : t instanceof Ut ? (t instanceof Xe && e.push(t), Nt(t.definition, (r) => la(r, e))) : !1;
}
function Rg(t) {
  return t instanceof it;
}
function Ot(t) {
  if (t instanceof Xe)
    return "SUBRULE";
  if (t instanceof ze)
    return "OPTION";
  if (t instanceof it)
    return "OR";
  if (t instanceof ft)
    return "AT_LEAST_ONE";
  if (t instanceof ht)
    return "AT_LEAST_ONE_SEP";
  if (t instanceof rt)
    return "MANY_SEP";
  if (t instanceof Ae)
    return "MANY";
  if (t instanceof ue)
    return "CONSUME";
  throw Error("non exhaustive match");
}
class Ua {
  walk(e, n = []) {
    j(e.definition, (r, i) => {
      const s = Fe(e.definition, i + 1);
      if (r instanceof Xe)
        this.walkProdRef(r, s, n);
      else if (r instanceof ue)
        this.walkTerminal(r, s, n);
      else if (r instanceof nt)
        this.walkFlat(r, s, n);
      else if (r instanceof ze)
        this.walkOption(r, s, n);
      else if (r instanceof ft)
        this.walkAtLeastOne(r, s, n);
      else if (r instanceof ht)
        this.walkAtLeastOneSep(r, s, n);
      else if (r instanceof rt)
        this.walkManySep(r, s, n);
      else if (r instanceof Ae)
        this.walkMany(r, s, n);
      else if (r instanceof it)
        this.walkOr(r, s, n);
      else
        throw Error("non exhaustive match");
    });
  }
  walkTerminal(e, n, r) {
  }
  walkProdRef(e, n, r) {
  }
  walkFlat(e, n, r) {
    const i = n.concat(r);
    this.walk(e, i);
  }
  walkOption(e, n, r) {
    const i = n.concat(r);
    this.walk(e, i);
  }
  walkAtLeastOne(e, n, r) {
    const i = [
      new ze({ definition: e.definition })
    ].concat(n, r);
    this.walk(e, i);
  }
  walkAtLeastOneSep(e, n, r) {
    const i = lu(e, n, r);
    this.walk(e, i);
  }
  walkMany(e, n, r) {
    const i = [
      new ze({ definition: e.definition })
    ].concat(n, r);
    this.walk(e, i);
  }
  walkManySep(e, n, r) {
    const i = lu(e, n, r);
    this.walk(e, i);
  }
  walkOr(e, n, r) {
    const i = n.concat(r);
    j(e.definition, (s) => {
      const a = new nt({ definition: [s] });
      this.walk(a, i);
    });
  }
}
function lu(t, e, n) {
  return [
    new ze({
      definition: [
        new ue({ terminalType: t.separator })
      ].concat(t.definition)
    })
  ].concat(e, n);
}
function os(t) {
  if (t instanceof Xe)
    return os(t.referencedRule);
  if (t instanceof ue)
    return Ag(t);
  if (Tg(t))
    return vg(t);
  if (Rg(t))
    return Eg(t);
  throw Error("non exhaustive match");
}
function vg(t) {
  let e = [];
  const n = t.definition;
  let r = 0, i = n.length > r, s, a = !0;
  for (; i && a; )
    s = n[r], a = la(s), e = e.concat(os(s)), r = r + 1, i = n.length > r;
  return Al(e);
}
function Eg(t) {
  const e = M(t.definition, (n) => os(n));
  return Al(yt(e));
}
function Ag(t) {
  return [t.terminalType];
}
const ih = "_~IN~_";
class Sg extends Ua {
  constructor(e) {
    super(), this.topProd = e, this.follows = {};
  }
  startWalking() {
    return this.walk(this.topProd), this.follows;
  }
  walkTerminal(e, n, r) {
  }
  walkProdRef(e, n, r) {
    const i = kg(e.referencedRule, e.idx) + this.topProd.name, s = n.concat(r), a = new nt({ definition: s }), o = os(a);
    this.follows[i] = o;
  }
}
function Cg(t) {
  const e = {};
  return j(t, (n) => {
    const r = new Sg(n).startWalking();
    ut(e, r);
  }), e;
}
function kg(t, e) {
  return t.name + e + ih;
}
let Xs = {};
const Ng = new Wf();
function ja(t) {
  const e = t.toString();
  if (Xs.hasOwnProperty(e))
    return Xs[e];
  {
    const n = Ng.pattern(e);
    return Xs[e] = n, n;
  }
}
function wg() {
  Xs = {};
}
const sh = "Complement Sets are not supported for first char optimization", ua = `Unable to use "first char" lexer optimizations:
`;
function bg(t, e = !1) {
  try {
    const n = ja(t);
    return jo(n.value, {}, n.flags.ignoreCase);
  } catch (n) {
    if (n.message === sh)
      e && th(`${ua}	Unable to optimize: < ${t.toString()} >
	Complement Sets cannot be automatically optimized.
	This will disable the lexer's first char optimizations.
	See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);
    else {
      let r = "";
      e && (r = `
	This will disable the lexer's first char optimizations.
	See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`), Uo(`${ua}
	Failed parsing: < ${t.toString()} >
	Using the @chevrotain/regexp-to-ast library
	Please open an issue at: https://github.com/chevrotain/chevrotain/issues` + r);
    }
  }
  return [];
}
function jo(t, e, n) {
  switch (t.type) {
    case "Disjunction":
      for (let i = 0; i < t.value.length; i++)
        jo(t.value[i], e, n);
      break;
    case "Alternative":
      const r = t.value;
      for (let i = 0; i < r.length; i++) {
        const s = r[i];
        switch (s.type) {
          case "EndAnchor":
          case "GroupBackReference":
          case "Lookahead":
          case "NegativeLookahead":
          case "Lookbehind":
          case "NegativeLookbehind":
          case "StartAnchor":
          case "WordBoundary":
          case "NonWordBoundary":
            continue;
        }
        const a = s;
        switch (a.type) {
          case "Character":
            Os(a.value, e, n);
            break;
          case "Set":
            if (a.complement === !0)
              throw Error(sh);
            j(a.value, (c) => {
              if (typeof c == "number")
                Os(c, e, n);
              else {
                const l = c;
                if (n === !0)
                  for (let u = l.from; u <= l.to; u++)
                    Os(u, e, n);
                else {
                  for (let u = l.from; u <= l.to && u < Di; u++)
                    Os(u, e, n);
                  if (l.to >= Di) {
                    const u = l.from >= Di ? l.from : Di, f = l.to, m = Rn(u), g = Rn(f);
                    for (let A = m; A <= g; A++)
                      e[A] = A;
                  }
                }
              }
            });
            break;
          case "Group":
            jo(a.value, e, n);
            break;
          default:
            throw Error("Non Exhaustive Match");
        }
        const o = a.quantifier !== void 0 && a.quantifier.atLeast === 0;
        if (
          // A group may be optional due to empty contents /(?:)/
          // or if everything inside it is optional /((a)?)/
          a.type === "Group" && zo(a) === !1 || // If this term is not a group it may only be optional if it has an optional quantifier
          a.type !== "Group" && o === !1
        )
          break;
      }
      break;
    default:
      throw Error("non exhaustive match!");
  }
  return Le(e);
}
function Os(t, e, n) {
  const r = Rn(t);
  e[r] = r, n === !0 && Ig(t, e);
}
function Ig(t, e) {
  const n = String.fromCharCode(t), r = n.toUpperCase();
  if (r !== n) {
    const i = Rn(r.charCodeAt(0));
    e[i] = i;
  } else {
    const i = n.toLowerCase();
    if (i !== n) {
      const s = Rn(i.charCodeAt(0));
      e[s] = s;
    }
  }
}
function uu(t, e) {
  return jr(t.value, (n) => {
    if (typeof n == "number")
      return Qe(e, n);
    {
      const r = n;
      return jr(e, (i) => r.from <= i && i <= r.to) !== void 0;
    }
  });
}
function zo(t) {
  const e = t.quantifier;
  return e && e.atLeast === 0 ? !0 : t.value ? je(t.value) ? Nt(t.value, zo) : zo(t.value) : !1;
}
class _g extends Fa {
  constructor(e) {
    super(), this.targetCharCodes = e, this.found = !1;
  }
  visitChildren(e) {
    if (this.found !== !0) {
      switch (e.type) {
        case "Lookahead":
          this.visitLookahead(e);
          return;
        case "NegativeLookahead":
          this.visitNegativeLookahead(e);
          return;
        case "Lookbehind":
          this.visitLookbehind(e);
          return;
        case "NegativeLookbehind":
          this.visitNegativeLookbehind(e);
          return;
      }
      super.visitChildren(e);
    }
  }
  visitCharacter(e) {
    Qe(this.targetCharCodes, e.value) && (this.found = !0);
  }
  visitSet(e) {
    e.complement ? uu(e, this.targetCharCodes) === void 0 && (this.found = !0) : uu(e, this.targetCharCodes) !== void 0 && (this.found = !0);
  }
}
function Il(t, e) {
  if (e instanceof RegExp) {
    const n = ja(e), r = new _g(t);
    return r.visit(n), r.found;
  } else
    return jr(e, (n) => Qe(t, n.charCodeAt(0))) !== void 0;
}
const Wn = "PATTERN", xi = "defaultMode", xs = "modes";
function $g(t, e) {
  e = El(e, {
    debug: !1,
    safeMode: !1,
    positionTracking: "full",
    lineTerminatorCharacters: ["\r", `
`],
    tracer: (O, b) => b()
  });
  const n = e.tracer;
  n("initCharCodeToOptimizedIndexMap", () => {
    ty();
  });
  let r;
  n("Reject Lexer.NA", () => {
    r = Oa(t, (O) => O[Wn] === et.NA);
  });
  let i = !1, s;
  n("Transform Patterns", () => {
    i = !1, s = M(r, (O) => {
      const b = O[Wn];
      if (nn(b)) {
        const x = b.source;
        return x.length === 1 && // only these regExp meta characters which can appear in a length one regExp
        x !== "^" && x !== "$" && x !== "." && !b.ignoreCase ? x : x.length === 2 && x[0] === "\\" && // not a meta character
        !Qe([
          "d",
          "D",
          "s",
          "S",
          "t",
          "r",
          "n",
          "t",
          "0",
          "c",
          "b",
          "B",
          "f",
          "v",
          "w",
          "W"
        ], x[1]) ? x[1] : du(b);
      } else {
        if (Hn(b))
          return i = !0, { exec: b };
        if (typeof b == "object")
          return i = !0, b;
        if (typeof b == "string") {
          if (b.length === 1)
            return b;
          {
            const x = b.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&"), X = new RegExp(x);
            return du(X);
          }
        } else
          throw Error("non exhaustive match");
      }
    });
  });
  let a, o, c, l, u;
  n("misc mapping", () => {
    a = M(r, (O) => O.tokenTypeIdx), o = M(r, (O) => {
      const b = O.GROUP;
      if (b !== et.SKIPPED) {
        if (tt(b))
          return b;
        if (tn(b))
          return !1;
        throw Error("non exhaustive match");
      }
    }), c = M(r, (O) => {
      const b = O.LONGER_ALT;
      if (b)
        return je(b) ? M(b, (X) => Yl(r, X)) : [Yl(r, b)];
    }), l = M(r, (O) => O.PUSH_MODE), u = M(r, (O) => B(O, "POP_MODE"));
  });
  let f;
  n("Line Terminator Handling", () => {
    const O = ch(e.lineTerminatorCharacters);
    f = M(r, (b) => !1), e.positionTracking !== "onlyOffset" && (f = M(r, (b) => B(b, "LINE_BREAKS") ? !!b.LINE_BREAKS : oh(b, O) === !1 && Il(O, b.PATTERN)));
  });
  let m, g, A, N;
  n("Misc Mapping #2", () => {
    m = M(r, ah), g = M(s, Qg), A = Ye(r, (O, b) => {
      const x = b.GROUP;
      return tt(x) && x !== et.SKIPPED && (O[x] = []), O;
    }, {}), N = M(s, (O, b) => ({
      pattern: s[b],
      longerAlt: c[b],
      canLineTerminator: f[b],
      isCustom: m[b],
      short: g[b],
      group: o[b],
      push: l[b],
      pop: u[b],
      tokenTypeIdx: a[b],
      tokenType: r[b]
    }));
  });
  let $ = !0, w = [];
  return e.safeMode || n("First Char Optimization", () => {
    w = Ye(r, (O, b, x) => {
      if (typeof b.PATTERN == "string") {
        const X = b.PATTERN.charCodeAt(0), te = Rn(X);
        ho(O, te, N[x]);
      } else if (je(b.START_CHARS_HINT)) {
        let X;
        j(b.START_CHARS_HINT, (te) => {
          const ne = typeof te == "string" ? te.charCodeAt(0) : te, ye = Rn(ne);
          X !== ye && (X = ye, ho(O, ye, N[x]));
        });
      } else if (nn(b.PATTERN))
        if (b.PATTERN.unicode)
          $ = !1, e.ensureOptimizations && Uo(`${ua}	Unable to analyze < ${b.PATTERN.toString()} > pattern.
	The regexp unicode flag is not currently supported by the regexp-to-ast library.
	This will disable the lexer's first char optimizations.
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);
        else {
          const X = bg(b.PATTERN, e.ensureOptimizations);
          oe(X) && ($ = !1), j(X, (te) => {
            ho(O, te, N[x]);
          });
        }
      else
        e.ensureOptimizations && Uo(`${ua}	TokenType: <${b.name}> is using a custom token pattern without providing <start_chars_hint> parameter.
	This will disable the lexer's first char optimizations.
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`), $ = !1;
      return O;
    }, []);
  }), {
    emptyGroups: A,
    patternIdxToConfig: N,
    charCodeToPatternIdxToConfig: w,
    hasCustom: i,
    canBeOptimized: $
  };
}
function Pg(t, e) {
  let n = [];
  const r = Og(t);
  n = n.concat(r.errors);
  const i = xg(r.valid), s = i.valid;
  return n = n.concat(i.errors), n = n.concat(Lg(s)), n = n.concat(Bg(s)), n = n.concat(qg(s, e)), n = n.concat(Wg(s)), n;
}
function Lg(t) {
  let e = [];
  const n = dt(t, (r) => nn(r[Wn]));
  return e = e.concat(Mg(n)), e = e.concat(Ug(n)), e = e.concat(jg(n)), e = e.concat(zg(n)), e = e.concat(Fg(n)), e;
}
function Og(t) {
  const e = dt(t, (i) => !B(i, Wn)), n = M(e, (i) => ({
    message: "Token Type: ->" + i.name + "<- missing static 'PATTERN' property",
    type: Se.MISSING_PATTERN,
    tokenTypes: [i]
  })), r = La(t, e);
  return { errors: n, valid: r };
}
function xg(t) {
  const e = dt(t, (i) => {
    const s = i[Wn];
    return !nn(s) && !Hn(s) && !B(s, "exec") && !tt(s);
  }), n = M(e, (i) => ({
    message: "Token Type: ->" + i.name + "<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",
    type: Se.INVALID_PATTERN,
    tokenTypes: [i]
  })), r = La(t, e);
  return { errors: n, valid: r };
}
const Dg = /[^\\][$]/;
function Mg(t) {
  class e extends Fa {
    constructor() {
      super(...arguments), this.found = !1;
    }
    visitEndAnchor(s) {
      this.found = !0;
    }
  }
  const n = dt(t, (i) => {
    const s = i.PATTERN;
    try {
      const a = ja(s), o = new e();
      return o.visit(a), o.found;
    } catch {
      return Dg.test(s.source);
    }
  });
  return M(n, (i) => ({
    message: `Unexpected RegExp Anchor Error:
	Token Type: ->` + i.name + `<- static 'PATTERN' cannot contain end of input anchor '$'
	See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS	for details.`,
    type: Se.EOI_ANCHOR_FOUND,
    tokenTypes: [i]
  }));
}
function Fg(t) {
  const e = dt(t, (r) => r.PATTERN.test(""));
  return M(e, (r) => ({
    message: "Token Type: ->" + r.name + "<- static 'PATTERN' must not match an empty string",
    type: Se.EMPTY_MATCH_PATTERN,
    tokenTypes: [r]
  }));
}
const Gg = /[^\\[][\^]|^\^/;
function Ug(t) {
  class e extends Fa {
    constructor() {
      super(...arguments), this.found = !1;
    }
    visitStartAnchor(s) {
      this.found = !0;
    }
  }
  const n = dt(t, (i) => {
    const s = i.PATTERN;
    try {
      const a = ja(s), o = new e();
      return o.visit(a), o.found;
    } catch {
      return Gg.test(s.source);
    }
  });
  return M(n, (i) => ({
    message: `Unexpected RegExp Anchor Error:
	Token Type: ->` + i.name + `<- static 'PATTERN' cannot contain start of input anchor '^'
	See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS	for details.`,
    type: Se.SOI_ANCHOR_FOUND,
    tokenTypes: [i]
  }));
}
function jg(t) {
  const e = dt(t, (r) => {
    const i = r[Wn];
    return i instanceof RegExp && (i.multiline || i.global);
  });
  return M(e, (r) => ({
    message: "Token Type: ->" + r.name + "<- static 'PATTERN' may NOT contain global('g') or multiline('m')",
    type: Se.UNSUPPORTED_FLAGS_FOUND,
    tokenTypes: [r]
  }));
}
function zg(t) {
  const e = [];
  let n = M(t, (s) => Ye(t, (a, o) => (s.PATTERN.source === o.PATTERN.source && !Qe(e, o) && o.PATTERN !== et.NA && (e.push(o), a.push(o)), a), []));
  n = rs(n);
  const r = dt(n, (s) => s.length > 1);
  return M(r, (s) => {
    const a = M(s, (c) => c.name);
    return {
      message: `The same RegExp pattern ->${bt(s).PATTERN}<-has been used in all of the following Token Types: ${a.join(", ")} <-`,
      type: Se.DUPLICATE_PATTERNS_FOUND,
      tokenTypes: s
    };
  });
}
function Bg(t) {
  const e = dt(t, (r) => {
    if (!B(r, "GROUP"))
      return !1;
    const i = r.GROUP;
    return i !== et.SKIPPED && i !== et.NA && !tt(i);
  });
  return M(e, (r) => ({
    message: "Token Type: ->" + r.name + "<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",
    type: Se.INVALID_GROUP_TYPE_FOUND,
    tokenTypes: [r]
  }));
}
function qg(t, e) {
  const n = dt(t, (i) => i.PUSH_MODE !== void 0 && !Qe(e, i.PUSH_MODE));
  return M(n, (i) => ({
    message: `Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,
    type: Se.PUSH_MODE_DOES_NOT_EXIST,
    tokenTypes: [i]
  }));
}
function Wg(t) {
  const e = [], n = Ye(t, (r, i, s) => {
    const a = i.PATTERN;
    return a === et.NA || (tt(a) ? r.push({ str: a, idx: s, tokenType: i }) : nn(a) && Kg(a) && r.push({ str: a.source, idx: s, tokenType: i })), r;
  }, []);
  return j(t, (r, i) => {
    j(n, ({ str: s, idx: a, tokenType: o }) => {
      if (i < a && Vg(s, r.PATTERN)) {
        const c = `Token: ->${o.name}<- can never be matched.
Because it appears AFTER the Token Type ->${r.name}<-in the lexer's definition.
See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;
        e.push({
          message: c,
          type: Se.UNREACHABLE_PATTERN,
          tokenTypes: [r, o]
        });
      }
    });
  }), e;
}
function Vg(t, e) {
  if (nn(e)) {
    if (Hg(e))
      return !1;
    const n = e.exec(t);
    return n !== null && n.index === 0;
  } else {
    if (Hn(e))
      return e(t, 0, [], {});
    if (B(e, "exec"))
      return e.exec(t, 0, [], {});
    if (typeof e == "string")
      return e === t;
    throw Error("non exhaustive match");
  }
}
function Kg(t) {
  return jr([
    ".",
    "\\",
    "[",
    "]",
    "|",
    "^",
    "$",
    "(",
    ")",
    "?",
    "*",
    "+",
    "{"
  ], (n) => t.source.indexOf(n) !== -1) === void 0;
}
function Hg(t) {
  return /(\(\?=)|(\(\?!)|(\(\?<=)|(\(\?<!)/.test(t.source);
}
function du(t) {
  const e = t.ignoreCase ? "iy" : "y";
  return new RegExp(`${t.source}`, e);
}
function Yg(t, e, n) {
  const r = [];
  return B(t, xi) || r.push({
    message: "A MultiMode Lexer cannot be initialized without a <" + xi + `> property in its definition
`,
    type: Se.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE
  }), B(t, xs) || r.push({
    message: "A MultiMode Lexer cannot be initialized without a <" + xs + `> property in its definition
`,
    type: Se.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY
  }), B(t, xs) && B(t, xi) && !B(t.modes, t.defaultMode) && r.push({
    message: `A MultiMode Lexer cannot be initialized with a ${xi}: <${t.defaultMode}>which does not exist
`,
    type: Se.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST
  }), B(t, xs) && j(t.modes, (i, s) => {
    j(i, (a, o) => {
      if (tn(a))
        r.push({
          message: `A Lexer cannot be initialized using an undefined Token Type. Mode:<${s}> at index: <${o}>
`,
          type: Se.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED
        });
      else if (B(a, "LONGER_ALT")) {
        const c = je(a.LONGER_ALT) ? a.LONGER_ALT : [a.LONGER_ALT];
        j(c, (l) => {
          !tn(l) && !Qe(i, l) && r.push({
            message: `A MultiMode Lexer cannot be initialized with a longer_alt <${l.name}> on token <${a.name}> outside of mode <${s}>
`,
            type: Se.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE
          });
        });
      }
    });
  }), r;
}
function Xg(t, e, n) {
  const r = [];
  let i = !1;
  const s = rs(yt(Le(t.modes))), a = Oa(s, (c) => c[Wn] === et.NA), o = ch(n);
  return e && j(a, (c) => {
    const l = oh(c, o);
    if (l !== !1) {
      const f = {
        message: ey(c, l),
        type: l.issue,
        tokenType: c
      };
      r.push(f);
    } else
      B(c, "LINE_BREAKS") ? c.LINE_BREAKS === !0 && (i = !0) : Il(o, c.PATTERN) && (i = !0);
  }), e && !i && r.push({
    message: `Warning: No LINE_BREAKS Found.
	This Lexer has been defined to track line and column information,
	But none of the Token Types can be identified as matching a line terminator.
	See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS 
	for details.`,
    type: Se.NO_LINE_BREAKS_FLAGS
  }), r;
}
function Jg(t) {
  const e = {}, n = Ur(t);
  return j(n, (r) => {
    const i = t[r];
    if (je(i))
      e[r] = [];
    else
      throw Error("non exhaustive match");
  }), e;
}
function ah(t) {
  const e = t.PATTERN;
  if (nn(e))
    return !1;
  if (Hn(e))
    return !0;
  if (B(e, "exec"))
    return !0;
  if (tt(e))
    return !1;
  throw Error("non exhaustive match");
}
function Qg(t) {
  return tt(t) && t.length === 1 ? t.charCodeAt(0) : !1;
}
const Zg = {
  // implements /\n|\r\n?/g.test
  test: function(t) {
    const e = t.length;
    for (let n = this.lastIndex; n < e; n++) {
      const r = t.charCodeAt(n);
      if (r === 10)
        return this.lastIndex = n + 1, !0;
      if (r === 13)
        return t.charCodeAt(n + 1) === 10 ? this.lastIndex = n + 2 : this.lastIndex = n + 1, !0;
    }
    return !1;
  },
  lastIndex: 0
};
function oh(t, e) {
  if (B(t, "LINE_BREAKS"))
    return !1;
  if (nn(t.PATTERN)) {
    try {
      Il(e, t.PATTERN);
    } catch (n) {
      return {
        issue: Se.IDENTIFY_TERMINATOR,
        errMsg: n.message
      };
    }
    return !1;
  } else {
    if (tt(t.PATTERN))
      return !1;
    if (ah(t))
      return { issue: Se.CUSTOM_LINE_BREAK };
    throw Error("non exhaustive match");
  }
}
function ey(t, e) {
  if (e.issue === Se.IDENTIFY_TERMINATOR)
    return `Warning: unable to identify line terminator usage in pattern.
	The problem is in the <${t.name}> Token Type
	 Root cause: ${e.errMsg}.
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;
  if (e.issue === Se.CUSTOM_LINE_BREAK)
    return `Warning: A Custom Token Pattern should specify the <line_breaks> option.
	The problem is in the <${t.name}> Token Type
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;
  throw Error("non exhaustive match");
}
function ch(t) {
  return M(t, (n) => tt(n) ? n.charCodeAt(0) : n);
}
function ho(t, e, n) {
  t[e] === void 0 ? t[e] = [n] : t[e].push(n);
}
const Di = 256;
let Js = [];
function Rn(t) {
  return t < Di ? t : Js[t];
}
function ty() {
  if (oe(Js)) {
    Js = new Array(65536);
    for (let t = 0; t < 65536; t++)
      Js[t] = t > 255 ? 255 + ~~(t / 255) : t;
  }
}
function cs(t, e) {
  const n = t.tokenTypeIdx;
  return n === e.tokenTypeIdx ? !0 : e.isParent === !0 && e.categoryMatchesMap[n] === !0;
}
function da(t, e) {
  return t.tokenTypeIdx === e.tokenTypeIdx;
}
let fu = 1;
const lh = {};
function ls(t) {
  const e = ny(t);
  ry(e), sy(e), iy(e), j(e, (n) => {
    n.isParent = n.categoryMatches.length > 0;
  });
}
function ny(t) {
  let e = Be(t), n = t, r = !0;
  for (; r; ) {
    n = rs(yt(M(n, (s) => s.CATEGORIES)));
    const i = La(n, e);
    e = e.concat(i), oe(i) ? r = !1 : n = i;
  }
  return e;
}
function ry(t) {
  j(t, (e) => {
    dh(e) || (lh[fu] = e, e.tokenTypeIdx = fu++), hu(e) && !je(e.CATEGORIES) && (e.CATEGORIES = [e.CATEGORIES]), hu(e) || (e.CATEGORIES = []), ay(e) || (e.categoryMatches = []), oy(e) || (e.categoryMatchesMap = {});
  });
}
function iy(t) {
  j(t, (e) => {
    e.categoryMatches = [], j(e.categoryMatchesMap, (n, r) => {
      e.categoryMatches.push(lh[r].tokenTypeIdx);
    });
  });
}
function sy(t) {
  j(t, (e) => {
    uh([], e);
  });
}
function uh(t, e) {
  j(t, (n) => {
    e.categoryMatchesMap[n.tokenTypeIdx] = !0;
  }), j(e.CATEGORIES, (n) => {
    const r = t.concat(e);
    Qe(r, n) || uh(r, n);
  });
}
function dh(t) {
  return B(t, "tokenTypeIdx");
}
function hu(t) {
  return B(t, "CATEGORIES");
}
function ay(t) {
  return B(t, "categoryMatches");
}
function oy(t) {
  return B(t, "categoryMatchesMap");
}
function cy(t) {
  return B(t, "tokenTypeIdx");
}
const Bo = {
  buildUnableToPopLexerModeMessage(t) {
    return `Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`;
  },
  buildUnexpectedCharactersMessage(t, e, n, r, i, s) {
    return `unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${n} characters.`;
  }
};
var Se;
(function(t) {
  t[t.MISSING_PATTERN = 0] = "MISSING_PATTERN", t[t.INVALID_PATTERN = 1] = "INVALID_PATTERN", t[t.EOI_ANCHOR_FOUND = 2] = "EOI_ANCHOR_FOUND", t[t.UNSUPPORTED_FLAGS_FOUND = 3] = "UNSUPPORTED_FLAGS_FOUND", t[t.DUPLICATE_PATTERNS_FOUND = 4] = "DUPLICATE_PATTERNS_FOUND", t[t.INVALID_GROUP_TYPE_FOUND = 5] = "INVALID_GROUP_TYPE_FOUND", t[t.PUSH_MODE_DOES_NOT_EXIST = 6] = "PUSH_MODE_DOES_NOT_EXIST", t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE = 7] = "MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE", t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY = 8] = "MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY", t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST = 9] = "MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST", t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED = 10] = "LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED", t[t.SOI_ANCHOR_FOUND = 11] = "SOI_ANCHOR_FOUND", t[t.EMPTY_MATCH_PATTERN = 12] = "EMPTY_MATCH_PATTERN", t[t.NO_LINE_BREAKS_FLAGS = 13] = "NO_LINE_BREAKS_FLAGS", t[t.UNREACHABLE_PATTERN = 14] = "UNREACHABLE_PATTERN", t[t.IDENTIFY_TERMINATOR = 15] = "IDENTIFY_TERMINATOR", t[t.CUSTOM_LINE_BREAK = 16] = "CUSTOM_LINE_BREAK", t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE = 17] = "MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE";
})(Se || (Se = {}));
const Mi = {
  deferDefinitionErrorsHandling: !1,
  positionTracking: "full",
  lineTerminatorsPattern: /\n|\r\n?/g,
  lineTerminatorCharacters: [`
`, "\r"],
  ensureOptimizations: !1,
  safeMode: !1,
  errorMessageProvider: Bo,
  traceInitPerf: !1,
  skipValidations: !1,
  recoveryEnabled: !0
};
Object.freeze(Mi);
class et {
  constructor(e, n = Mi) {
    if (this.lexerDefinition = e, this.lexerDefinitionErrors = [], this.lexerDefinitionWarning = [], this.patternIdxToConfig = {}, this.charCodeToPatternIdxToConfig = {}, this.modes = [], this.emptyGroups = {}, this.trackStartLines = !0, this.trackEndLines = !0, this.hasCustom = !1, this.canModeBeOptimized = {}, this.TRACE_INIT = (i, s) => {
      if (this.traceInitPerf === !0) {
        this.traceInitIndent++;
        const a = new Array(this.traceInitIndent + 1).join("	");
        this.traceInitIndent < this.traceInitMaxIdent && console.log(`${a}--> <${i}>`);
        const { time: o, value: c } = nh(s), l = o > 10 ? console.warn : console.log;
        return this.traceInitIndent < this.traceInitMaxIdent && l(`${a}<-- <${i}> time: ${o}ms`), this.traceInitIndent--, c;
      } else
        return s();
    }, typeof n == "boolean")
      throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.
a boolean 2nd argument is no longer supported`);
    this.config = ut({}, Mi, n);
    const r = this.config.traceInitPerf;
    r === !0 ? (this.traceInitMaxIdent = 1 / 0, this.traceInitPerf = !0) : typeof r == "number" && (this.traceInitMaxIdent = r, this.traceInitPerf = !0), this.traceInitIndent = -1, this.TRACE_INIT("Lexer Constructor", () => {
      let i, s = !0;
      this.TRACE_INIT("Lexer Config handling", () => {
        if (this.config.lineTerminatorsPattern === Mi.lineTerminatorsPattern)
          this.config.lineTerminatorsPattern = Zg;
        else if (this.config.lineTerminatorCharacters === Mi.lineTerminatorCharacters)
          throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);
        if (n.safeMode && n.ensureOptimizations)
          throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');
        this.trackStartLines = /full|onlyStart/i.test(this.config.positionTracking), this.trackEndLines = /full/i.test(this.config.positionTracking), je(e) ? i = {
          modes: { defaultMode: Be(e) },
          defaultMode: xi
        } : (s = !1, i = Be(e));
      }), this.config.skipValidations === !1 && (this.TRACE_INIT("performRuntimeChecks", () => {
        this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(Yg(i, this.trackStartLines, this.config.lineTerminatorCharacters));
      }), this.TRACE_INIT("performWarningRuntimeChecks", () => {
        this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(Xg(i, this.trackStartLines, this.config.lineTerminatorCharacters));
      })), i.modes = i.modes ? i.modes : {}, j(i.modes, (o, c) => {
        i.modes[c] = Oa(o, (l) => tn(l));
      });
      const a = Ur(i.modes);
      if (j(i.modes, (o, c) => {
        this.TRACE_INIT(`Mode: <${c}> processing`, () => {
          if (this.modes.push(c), this.config.skipValidations === !1 && this.TRACE_INIT("validatePatterns", () => {
            this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(Pg(o, a));
          }), oe(this.lexerDefinitionErrors)) {
            ls(o);
            let l;
            this.TRACE_INIT("analyzeTokenTypes", () => {
              l = $g(o, {
                lineTerminatorCharacters: this.config.lineTerminatorCharacters,
                positionTracking: n.positionTracking,
                ensureOptimizations: n.ensureOptimizations,
                safeMode: n.safeMode,
                tracer: this.TRACE_INIT
              });
            }), this.patternIdxToConfig[c] = l.patternIdxToConfig, this.charCodeToPatternIdxToConfig[c] = l.charCodeToPatternIdxToConfig, this.emptyGroups = ut({}, this.emptyGroups, l.emptyGroups), this.hasCustom = l.hasCustom || this.hasCustom, this.canModeBeOptimized[c] = l.canBeOptimized;
          }
        });
      }), this.defaultMode = i.defaultMode, !oe(this.lexerDefinitionErrors) && !this.config.deferDefinitionErrorsHandling) {
        const c = M(this.lexerDefinitionErrors, (l) => l.message).join(`-----------------------
`);
        throw new Error(`Errors detected in definition of Lexer:
` + c);
      }
      j(this.lexerDefinitionWarning, (o) => {
        th(o.message);
      }), this.TRACE_INIT("Choosing sub-methods implementations", () => {
        if (s && (this.handleModes = Me), this.trackStartLines === !1 && (this.computeNewColumn = Dp), this.trackEndLines === !1 && (this.updateTokenEndLineColumnLocation = Me), /full/i.test(this.config.positionTracking))
          this.createTokenInstance = this.createFullToken;
        else if (/onlyStart/i.test(this.config.positionTracking))
          this.createTokenInstance = this.createStartOnlyToken;
        else if (/onlyOffset/i.test(this.config.positionTracking))
          this.createTokenInstance = this.createOffsetOnlyToken;
        else
          throw Error(`Invalid <positionTracking> config option: "${this.config.positionTracking}"`);
        this.hasCustom ? (this.addToken = this.addTokenUsingPush, this.handlePayload = this.handlePayloadWithCustom) : (this.addToken = this.addTokenUsingMemberAccess, this.handlePayload = this.handlePayloadNoCustom);
      }), this.TRACE_INIT("Failed Optimization Warnings", () => {
        const o = Ye(this.canModeBeOptimized, (c, l, u) => (l === !1 && c.push(u), c), []);
        if (n.ensureOptimizations && !oe(o))
          throw Error(`Lexer Modes: < ${o.join(", ")} > cannot be optimized.
	 Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.
	 Or inspect the console log for details on how to resolve these issues.`);
      }), this.TRACE_INIT("clearRegExpParserCache", () => {
        wg();
      }), this.TRACE_INIT("toFastProperties", () => {
        rh(this);
      });
    });
  }
  tokenize(e, n = this.defaultMode) {
    if (!oe(this.lexerDefinitionErrors)) {
      const i = M(this.lexerDefinitionErrors, (s) => s.message).join(`-----------------------
`);
      throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:
` + i);
    }
    return this.tokenizeInternal(e, n);
  }
  // There is quite a bit of duplication between this and "tokenizeInternalLazy"
  // This is intentional due to performance considerations.
  // this method also used quite a bit of `!` none null assertions because it is too optimized
  // for `tsc` to always understand it is "safe"
  tokenizeInternal(e, n) {
    let r, i, s, a, o, c, l, u, f, m, g, A, N, $, w;
    const O = e, b = O.length;
    let x = 0, X = 0;
    const te = this.hasCustom ? 0 : Math.floor(e.length / 10), ne = new Array(te), ye = [];
    let Ce = this.trackStartLines ? 1 : void 0, de = this.trackStartLines ? 1 : void 0;
    const k = Jg(this.emptyGroups), R = this.trackStartLines, p = this.config.lineTerminatorsPattern;
    let S = 0, y = [], T = [];
    const E = [], P = [];
    Object.freeze(P);
    let D = !1;
    const L = (q) => {
      if (E.length === 1 && // if we have both a POP_MODE and a PUSH_MODE this is in-fact a "transition"
      // So no error should occur.
      q.tokenType.PUSH_MODE === void 0) {
        const re = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(q);
        ye.push({
          offset: q.startOffset,
          line: q.startLine,
          column: q.startColumn,
          length: q.image.length,
          message: re
        });
      } else {
        E.pop();
        const re = jn(E);
        y = this.patternIdxToConfig[re], T = this.charCodeToPatternIdxToConfig[re], S = y.length;
        const xe = this.canModeBeOptimized[re] && this.config.safeMode === !1;
        T && xe ? D = !0 : D = !1;
      }
    };
    function z(q) {
      E.push(q), T = this.charCodeToPatternIdxToConfig[q], y = this.patternIdxToConfig[q], S = y.length, S = y.length;
      const re = this.canModeBeOptimized[q] && this.config.safeMode === !1;
      T && re ? D = !0 : D = !1;
    }
    z.call(this, n);
    let G;
    const se = this.config.recoveryEnabled;
    for (; x < b; ) {
      c = null, f = -1;
      const q = O.charCodeAt(x);
      let re;
      if (D) {
        const Te = Rn(q), fe = T[Te];
        re = fe !== void 0 ? fe : P;
      } else
        re = y;
      const xe = re.length;
      for (r = 0; r < xe; r++) {
        G = re[r];
        const Te = G.pattern;
        l = null;
        const fe = G.short;
        if (fe !== !1 ? q === fe && (f = 1, c = Te) : G.isCustom === !0 ? (w = Te.exec(O, x, ne, k), w !== null ? (c = w[0], f = c.length, w.payload !== void 0 && (l = w.payload)) : c = null) : (Te.lastIndex = x, f = this.matchLength(Te, e, x)), f !== -1) {
          if (o = G.longerAlt, o !== void 0) {
            c = e.substring(x, x + f);
            const $e = o.length;
            for (s = 0; s < $e; s++) {
              const De = y[o[s]], be = De.pattern;
              if (u = null, De.isCustom === !0 ? (w = be.exec(O, x, ne, k), w !== null ? (a = w[0], w.payload !== void 0 && (u = w.payload)) : a = null) : (be.lastIndex = x, a = this.match(be, e, x)), a && a.length > c.length) {
                c = a, f = a.length, l = u, G = De;
                break;
              }
            }
          }
          break;
        }
      }
      if (f !== -1) {
        if (m = G.group, m !== void 0 && (c = c !== null ? c : e.substring(x, x + f), g = G.tokenTypeIdx, A = this.createTokenInstance(c, x, g, G.tokenType, Ce, de, f), this.handlePayload(A, l), m === !1 ? X = this.addToken(ne, X, A) : k[m].push(A)), R === !0 && G.canLineTerminator === !0) {
          let Te = 0, fe, $e;
          p.lastIndex = 0;
          do
            c = c !== null ? c : e.substring(x, x + f), fe = p.test(c), fe === !0 && ($e = p.lastIndex - 1, Te++);
          while (fe === !0);
          Te !== 0 ? (Ce = Ce + Te, de = f - $e, this.updateTokenEndLineColumnLocation(A, m, $e, Te, Ce, de, f)) : de = this.computeNewColumn(de, f);
        } else
          de = this.computeNewColumn(de, f);
        x = x + f, this.handleModes(G, L, z, A);
      } else {
        const Te = x, fe = Ce, $e = de;
        let De = se === !1;
        for (; De === !1 && x < b; )
          for (x++, i = 0; i < S; i++) {
            const be = y[i], Q = be.pattern, st = be.short;
            if (st !== !1 ? O.charCodeAt(x) === st && (De = !0) : be.isCustom === !0 ? De = Q.exec(O, x, ne, k) !== null : (Q.lastIndex = x, De = Q.exec(e) !== null), De === !0)
              break;
          }
        if (N = x - Te, de = this.computeNewColumn(de, N), $ = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(O, Te, N, fe, $e, jn(E)), ye.push({
          offset: Te,
          line: fe,
          column: $e,
          length: N,
          message: $
        }), se === !1)
          break;
      }
    }
    return this.hasCustom || (ne.length = X), {
      tokens: ne,
      groups: k,
      errors: ye
    };
  }
  handleModes(e, n, r, i) {
    if (e.pop === !0) {
      const s = e.push;
      n(i), s !== void 0 && r.call(this, s);
    } else e.push !== void 0 && r.call(this, e.push);
  }
  // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler
  updateTokenEndLineColumnLocation(e, n, r, i, s, a, o) {
    let c, l;
    n !== void 0 && (c = r === o - 1, l = c ? -1 : 0, i === 1 && c === !0 || (e.endLine = s + l, e.endColumn = a - 1 + -l));
  }
  computeNewColumn(e, n) {
    return e + n;
  }
  createOffsetOnlyToken(e, n, r, i) {
    return {
      image: e,
      startOffset: n,
      tokenTypeIdx: r,
      tokenType: i
    };
  }
  createStartOnlyToken(e, n, r, i, s, a) {
    return {
      image: e,
      startOffset: n,
      startLine: s,
      startColumn: a,
      tokenTypeIdx: r,
      tokenType: i
    };
  }
  createFullToken(e, n, r, i, s, a, o) {
    return {
      image: e,
      startOffset: n,
      endOffset: n + o - 1,
      startLine: s,
      endLine: s,
      startColumn: a,
      endColumn: a + o - 1,
      tokenTypeIdx: r,
      tokenType: i
    };
  }
  addTokenUsingPush(e, n, r) {
    return e.push(r), n;
  }
  addTokenUsingMemberAccess(e, n, r) {
    return e[n] = r, n++, n;
  }
  handlePayloadNoCustom(e, n) {
  }
  handlePayloadWithCustom(e, n) {
    n !== null && (e.payload = n);
  }
  match(e, n, r) {
    return e.test(n) === !0 ? n.substring(r, e.lastIndex) : null;
  }
  matchLength(e, n, r) {
    return e.test(n) === !0 ? e.lastIndex - r : -1;
  }
}
et.SKIPPED = "This marks a skipped Token pattern, this means each token identified by it will be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.";
et.NA = /NOT_APPLICABLE/;
function Ar(t) {
  return fh(t) ? t.LABEL : t.name;
}
function fh(t) {
  return tt(t.LABEL) && t.LABEL !== "";
}
const ly = "parent", pu = "categories", mu = "label", gu = "group", yu = "push_mode", Tu = "pop_mode", Ru = "longer_alt", vu = "line_breaks", Eu = "start_chars_hint";
function hh(t) {
  return uy(t);
}
function uy(t) {
  const e = t.pattern, n = {};
  if (n.name = t.name, tn(e) || (n.PATTERN = e), B(t, ly))
    throw `The parent property is no longer supported.
See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;
  return B(t, pu) && (n.CATEGORIES = t[pu]), ls([n]), B(t, mu) && (n.LABEL = t[mu]), B(t, gu) && (n.GROUP = t[gu]), B(t, Tu) && (n.POP_MODE = t[Tu]), B(t, yu) && (n.PUSH_MODE = t[yu]), B(t, Ru) && (n.LONGER_ALT = t[Ru]), B(t, vu) && (n.LINE_BREAKS = t[vu]), B(t, Eu) && (n.START_CHARS_HINT = t[Eu]), n;
}
const vn = hh({ name: "EOF", pattern: et.NA });
ls([vn]);
function _l(t, e, n, r, i, s, a, o) {
  return {
    image: e,
    startOffset: n,
    endOffset: r,
    startLine: i,
    endLine: s,
    startColumn: a,
    endColumn: o,
    tokenTypeIdx: t.tokenTypeIdx,
    tokenType: t
  };
}
function ph(t, e) {
  return cs(t, e);
}
const vr = {
  buildMismatchTokenMessage({ expected: t, actual: e, previous: n, ruleName: r }) {
    return `Expecting ${fh(t) ? `--> ${Ar(t)} <--` : `token of type --> ${t.name} <--`} but found --> '${e.image}' <--`;
  },
  buildNotAllInputParsedMessage({ firstRedundant: t, ruleName: e }) {
    return "Redundant input, expecting EOF but found: " + t.image;
  },
  buildNoViableAltMessage({ expectedPathsPerAlt: t, actual: e, previous: n, customUserDescription: r, ruleName: i }) {
    const s = "Expecting: ", o = `
but found: '` + bt(e).image + "'";
    if (r)
      return s + r + o;
    {
      const c = Ye(t, (m, g) => m.concat(g), []), l = M(c, (m) => `[${M(m, (g) => Ar(g)).join(", ")}]`), f = `one of these possible Token sequences:
${M(l, (m, g) => `  ${g + 1}. ${m}`).join(`
`)}`;
      return s + f + o;
    }
  },
  buildEarlyExitMessage({ expectedIterationPaths: t, actual: e, customUserDescription: n, ruleName: r }) {
    const i = "Expecting: ", a = `
but found: '` + bt(e).image + "'";
    if (n)
      return i + n + a;
    {
      const c = `expecting at least one iteration which starts with one of these possible Token sequences::
  <${M(t, (l) => `[${M(l, (u) => Ar(u)).join(",")}]`).join(" ,")}>`;
      return i + c + a;
    }
  }
};
Object.freeze(vr);
const dy = {
  buildRuleNotFoundError(t, e) {
    return "Invalid grammar, reference to a rule which is not defined: ->" + e.nonTerminalName + `<-
inside top level rule: ->` + t.name + "<-";
  }
}, Gn = {
  buildDuplicateFoundError(t, e) {
    function n(u) {
      return u instanceof ue ? u.terminalType.name : u instanceof Xe ? u.nonTerminalName : "";
    }
    const r = t.name, i = bt(e), s = i.idx, a = Ot(i), o = n(i), c = s > 0;
    let l = `->${a}${c ? s : ""}<- ${o ? `with argument: ->${o}<-` : ""}
                  appears more than once (${e.length} times) in the top level rule: ->${r}<-.                  
                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES 
                  `;
    return l = l.replace(/[ \t]+/g, " "), l = l.replace(/\s\s+/g, `
`), l;
  },
  buildNamespaceConflictError(t) {
    return `Namespace conflict found in grammar.
The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>.
To resolve this make sure each Terminal and Non-Terminal names are unique
This is easy to accomplish by using the convention that Terminal names start with an uppercase letter
and Non-Terminal names start with a lower case letter.`;
  },
  buildAlternationPrefixAmbiguityError(t) {
    const e = M(t.prefixPath, (i) => Ar(i)).join(", "), n = t.alternation.idx === 0 ? "" : t.alternation.idx;
    return `Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix
in <OR${n}> inside <${t.topLevelRule.name}> Rule,
<${e}> may appears as a prefix path in all these alternatives.
See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX
For Further details.`;
  },
  buildAlternationAmbiguityError(t) {
    const e = t.alternation.idx === 0 ? "" : t.alternation.idx, n = t.prefixPath.length === 0;
    let r = `Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in <OR${e}> inside <${t.topLevelRule.name}> Rule,
`;
    if (n)
      r += `These alternatives are all empty (match no tokens), making them indistinguishable.
Only the last alternative may be empty.
`;
    else {
      const i = M(t.prefixPath, (s) => Ar(s)).join(", ");
      r += `<${i}> may appears as a prefix path in all these alternatives.
`;
    }
    return r += `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
For Further details.`, r;
  },
  buildEmptyRepetitionError(t) {
    let e = Ot(t.repetition);
    return t.repetition.idx !== 0 && (e += t.repetition.idx), `The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens.
This could lead to an infinite loop.`;
  },
  // TODO: remove - `errors_public` from nyc.config.js exclude
  //       once this method is fully removed from this file
  buildTokenNameError(t) {
    return "deprecated";
  },
  buildEmptyAlternationError(t) {
    return `Ambiguous empty alternative: <${t.emptyChoiceIdx + 1}> in <OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule.
Only the last alternative may be an empty alternative.`;
  },
  buildTooManyAlternativesError(t) {
    return `An Alternation cannot have more than 256 alternatives:
<OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule.
 has ${t.alternation.definition.length + 1} alternatives.`;
  },
  buildLeftRecursionError(t) {
    const e = t.topLevelRule.name, n = M(t.leftRecursionPath, (s) => s.name), r = `${e} --> ${n.concat([e]).join(" --> ")}`;
    return `Left Recursion found in grammar.
rule: <${e}> can be invoked from itself (directly or indirectly)
without consuming any Tokens. The grammar path that causes this is: 
 ${r}
 To fix this refactor your grammar to remove the left recursion.
see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`;
  },
  // TODO: remove - `errors_public` from nyc.config.js exclude
  //       once this method is fully removed from this file
  buildInvalidRuleNameError(t) {
    return "deprecated";
  },
  buildDuplicateRuleNameError(t) {
    let e;
    return t.topLevelRule instanceof si ? e = t.topLevelRule.name : e = t.topLevelRule, `Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`;
  }
};
function fy(t, e) {
  const n = new hy(t, e);
  return n.resolveRefs(), n.errors;
}
class hy extends ai {
  constructor(e, n) {
    super(), this.nameToTopRule = e, this.errMsgProvider = n, this.errors = [];
  }
  resolveRefs() {
    j(Le(this.nameToTopRule), (e) => {
      this.currTopLevel = e, e.accept(this);
    });
  }
  visitNonTerminal(e) {
    const n = this.nameToTopRule[e.nonTerminalName];
    if (n)
      e.referencedRule = n;
    else {
      const r = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, e);
      this.errors.push({
        message: r,
        type: Je.UNRESOLVED_SUBRULE_REF,
        ruleName: this.currTopLevel.name,
        unresolvedRefName: e.nonTerminalName
      });
    }
  }
}
class py extends Ua {
  constructor(e, n) {
    super(), this.topProd = e, this.path = n, this.possibleTokTypes = [], this.nextProductionName = "", this.nextProductionOccurrence = 0, this.found = !1, this.isAtEndOfPath = !1;
  }
  startWalking() {
    if (this.found = !1, this.path.ruleStack[0] !== this.topProd.name)
      throw Error("The path does not start with the walker's top Rule!");
    return this.ruleStack = Be(this.path.ruleStack).reverse(), this.occurrenceStack = Be(this.path.occurrenceStack).reverse(), this.ruleStack.pop(), this.occurrenceStack.pop(), this.updateExpectedNext(), this.walk(this.topProd), this.possibleTokTypes;
  }
  walk(e, n = []) {
    this.found || super.walk(e, n);
  }
  walkProdRef(e, n, r) {
    if (e.referencedRule.name === this.nextProductionName && e.idx === this.nextProductionOccurrence) {
      const i = n.concat(r);
      this.updateExpectedNext(), this.walk(e.referencedRule, i);
    }
  }
  updateExpectedNext() {
    oe(this.ruleStack) ? (this.nextProductionName = "", this.nextProductionOccurrence = 0, this.isAtEndOfPath = !0) : (this.nextProductionName = this.ruleStack.pop(), this.nextProductionOccurrence = this.occurrenceStack.pop());
  }
}
class my extends py {
  constructor(e, n) {
    super(e, n), this.path = n, this.nextTerminalName = "", this.nextTerminalOccurrence = 0, this.nextTerminalName = this.path.lastTok.name, this.nextTerminalOccurrence = this.path.lastTokOccurrence;
  }
  walkTerminal(e, n, r) {
    if (this.isAtEndOfPath && e.terminalType.name === this.nextTerminalName && e.idx === this.nextTerminalOccurrence && !this.found) {
      const i = n.concat(r), s = new nt({ definition: i });
      this.possibleTokTypes = os(s), this.found = !0;
    }
  }
}
class za extends Ua {
  constructor(e, n) {
    super(), this.topRule = e, this.occurrence = n, this.result = {
      token: void 0,
      occurrence: void 0,
      isEndOfRule: void 0
    };
  }
  startWalking() {
    return this.walk(this.topRule), this.result;
  }
}
class gy extends za {
  walkMany(e, n, r) {
    if (e.idx === this.occurrence) {
      const i = bt(n.concat(r));
      this.result.isEndOfRule = i === void 0, i instanceof ue && (this.result.token = i.terminalType, this.result.occurrence = i.idx);
    } else
      super.walkMany(e, n, r);
  }
}
class Au extends za {
  walkManySep(e, n, r) {
    if (e.idx === this.occurrence) {
      const i = bt(n.concat(r));
      this.result.isEndOfRule = i === void 0, i instanceof ue && (this.result.token = i.terminalType, this.result.occurrence = i.idx);
    } else
      super.walkManySep(e, n, r);
  }
}
class yy extends za {
  walkAtLeastOne(e, n, r) {
    if (e.idx === this.occurrence) {
      const i = bt(n.concat(r));
      this.result.isEndOfRule = i === void 0, i instanceof ue && (this.result.token = i.terminalType, this.result.occurrence = i.idx);
    } else
      super.walkAtLeastOne(e, n, r);
  }
}
class Su extends za {
  walkAtLeastOneSep(e, n, r) {
    if (e.idx === this.occurrence) {
      const i = bt(n.concat(r));
      this.result.isEndOfRule = i === void 0, i instanceof ue && (this.result.token = i.terminalType, this.result.occurrence = i.idx);
    } else
      super.walkAtLeastOneSep(e, n, r);
  }
}
function qo(t, e, n = []) {
  n = Be(n);
  let r = [], i = 0;
  function s(o) {
    return o.concat(Fe(t, i + 1));
  }
  function a(o) {
    const c = qo(s(o), e, n);
    return r.concat(c);
  }
  for (; n.length < e && i < t.length; ) {
    const o = t[i];
    if (o instanceof nt)
      return a(o.definition);
    if (o instanceof Xe)
      return a(o.definition);
    if (o instanceof ze)
      r = a(o.definition);
    else if (o instanceof ft) {
      const c = o.definition.concat([
        new Ae({
          definition: o.definition
        })
      ]);
      return a(c);
    } else if (o instanceof ht) {
      const c = [
        new nt({ definition: o.definition }),
        new Ae({
          definition: [new ue({ terminalType: o.separator })].concat(o.definition)
        })
      ];
      return a(c);
    } else if (o instanceof rt) {
      const c = o.definition.concat([
        new Ae({
          definition: [new ue({ terminalType: o.separator })].concat(o.definition)
        })
      ]);
      r = a(c);
    } else if (o instanceof Ae) {
      const c = o.definition.concat([
        new Ae({
          definition: o.definition
        })
      ]);
      r = a(c);
    } else {
      if (o instanceof it)
        return j(o.definition, (c) => {
          oe(c.definition) === !1 && (r = a(c.definition));
        }), r;
      if (o instanceof ue)
        n.push(o.terminalType);
      else
        throw Error("non exhaustive match");
    }
    i++;
  }
  return r.push({
    partialPath: n,
    suffixDef: Fe(t, i)
  }), r;
}
function mh(t, e, n, r) {
  const i = "EXIT_NONE_TERMINAL", s = [i], a = "EXIT_ALTERNATIVE";
  let o = !1;
  const c = e.length, l = c - r - 1, u = [], f = [];
  for (f.push({
    idx: -1,
    def: t,
    ruleStack: [],
    occurrenceStack: []
  }); !oe(f); ) {
    const m = f.pop();
    if (m === a) {
      o && jn(f).idx <= l && f.pop();
      continue;
    }
    const g = m.def, A = m.idx, N = m.ruleStack, $ = m.occurrenceStack;
    if (oe(g))
      continue;
    const w = g[0];
    if (w === i) {
      const O = {
        idx: A,
        def: Fe(g),
        ruleStack: zi(N),
        occurrenceStack: zi($)
      };
      f.push(O);
    } else if (w instanceof ue)
      if (A < c - 1) {
        const O = A + 1, b = e[O];
        if (n(b, w.terminalType)) {
          const x = {
            idx: O,
            def: Fe(g),
            ruleStack: N,
            occurrenceStack: $
          };
          f.push(x);
        }
      } else if (A === c - 1)
        u.push({
          nextTokenType: w.terminalType,
          nextTokenOccurrence: w.idx,
          ruleStack: N,
          occurrenceStack: $
        }), o = !0;
      else
        throw Error("non exhaustive match");
    else if (w instanceof Xe) {
      const O = Be(N);
      O.push(w.nonTerminalName);
      const b = Be($);
      b.push(w.idx);
      const x = {
        idx: A,
        def: w.definition.concat(s, Fe(g)),
        ruleStack: O,
        occurrenceStack: b
      };
      f.push(x);
    } else if (w instanceof ze) {
      const O = {
        idx: A,
        def: Fe(g),
        ruleStack: N,
        occurrenceStack: $
      };
      f.push(O), f.push(a);
      const b = {
        idx: A,
        def: w.definition.concat(Fe(g)),
        ruleStack: N,
        occurrenceStack: $
      };
      f.push(b);
    } else if (w instanceof ft) {
      const O = new Ae({
        definition: w.definition,
        idx: w.idx
      }), b = w.definition.concat([O], Fe(g)), x = {
        idx: A,
        def: b,
        ruleStack: N,
        occurrenceStack: $
      };
      f.push(x);
    } else if (w instanceof ht) {
      const O = new ue({
        terminalType: w.separator
      }), b = new Ae({
        definition: [O].concat(w.definition),
        idx: w.idx
      }), x = w.definition.concat([b], Fe(g)), X = {
        idx: A,
        def: x,
        ruleStack: N,
        occurrenceStack: $
      };
      f.push(X);
    } else if (w instanceof rt) {
      const O = {
        idx: A,
        def: Fe(g),
        ruleStack: N,
        occurrenceStack: $
      };
      f.push(O), f.push(a);
      const b = new ue({
        terminalType: w.separator
      }), x = new Ae({
        definition: [b].concat(w.definition),
        idx: w.idx
      }), X = w.definition.concat([x], Fe(g)), te = {
        idx: A,
        def: X,
        ruleStack: N,
        occurrenceStack: $
      };
      f.push(te);
    } else if (w instanceof Ae) {
      const O = {
        idx: A,
        def: Fe(g),
        ruleStack: N,
        occurrenceStack: $
      };
      f.push(O), f.push(a);
      const b = new Ae({
        definition: w.definition,
        idx: w.idx
      }), x = w.definition.concat([b], Fe(g)), X = {
        idx: A,
        def: x,
        ruleStack: N,
        occurrenceStack: $
      };
      f.push(X);
    } else if (w instanceof it)
      for (let O = w.definition.length - 1; O >= 0; O--) {
        const b = w.definition[O], x = {
          idx: A,
          def: b.definition.concat(Fe(g)),
          ruleStack: N,
          occurrenceStack: $
        };
        f.push(x), f.push(a);
      }
    else if (w instanceof nt)
      f.push({
        idx: A,
        def: w.definition.concat(Fe(g)),
        ruleStack: N,
        occurrenceStack: $
      });
    else if (w instanceof si)
      f.push(Ty(w, A, N, $));
    else
      throw Error("non exhaustive match");
  }
  return u;
}
function Ty(t, e, n, r) {
  const i = Be(n);
  i.push(t.name);
  const s = Be(r);
  return s.push(1), {
    idx: e,
    def: t.definition,
    ruleStack: i,
    occurrenceStack: s
  };
}
var me;
(function(t) {
  t[t.OPTION = 0] = "OPTION", t[t.REPETITION = 1] = "REPETITION", t[t.REPETITION_MANDATORY = 2] = "REPETITION_MANDATORY", t[t.REPETITION_MANDATORY_WITH_SEPARATOR = 3] = "REPETITION_MANDATORY_WITH_SEPARATOR", t[t.REPETITION_WITH_SEPARATOR = 4] = "REPETITION_WITH_SEPARATOR", t[t.ALTERNATION = 5] = "ALTERNATION";
})(me || (me = {}));
function $l(t) {
  if (t instanceof ze || t === "Option")
    return me.OPTION;
  if (t instanceof Ae || t === "Repetition")
    return me.REPETITION;
  if (t instanceof ft || t === "RepetitionMandatory")
    return me.REPETITION_MANDATORY;
  if (t instanceof ht || t === "RepetitionMandatoryWithSeparator")
    return me.REPETITION_MANDATORY_WITH_SEPARATOR;
  if (t instanceof rt || t === "RepetitionWithSeparator")
    return me.REPETITION_WITH_SEPARATOR;
  if (t instanceof it || t === "Alternation")
    return me.ALTERNATION;
  throw Error("non exhaustive match");
}
function Cu(t) {
  const { occurrence: e, rule: n, prodType: r, maxLookahead: i } = t, s = $l(r);
  return s === me.ALTERNATION ? Ba(e, n, i) : qa(e, n, s, i);
}
function Ry(t, e, n, r, i, s) {
  const a = Ba(t, e, n), o = Th(a) ? da : cs;
  return s(a, r, o, i);
}
function vy(t, e, n, r, i, s) {
  const a = qa(t, e, i, n), o = Th(a) ? da : cs;
  return s(a[0], o, r);
}
function Ey(t, e, n, r) {
  const i = t.length, s = Nt(t, (a) => Nt(a, (o) => o.length === 1));
  if (e)
    return function(a) {
      const o = M(a, (c) => c.GATE);
      for (let c = 0; c < i; c++) {
        const l = t[c], u = l.length, f = o[c];
        if (!(f !== void 0 && f.call(this) === !1))
          e: for (let m = 0; m < u; m++) {
            const g = l[m], A = g.length;
            for (let N = 0; N < A; N++) {
              const $ = this.LA(N + 1);
              if (n($, g[N]) === !1)
                continue e;
            }
            return c;
          }
      }
    };
  if (s && !r) {
    const a = M(t, (c) => yt(c)), o = Ye(a, (c, l, u) => (j(l, (f) => {
      B(c, f.tokenTypeIdx) || (c[f.tokenTypeIdx] = u), j(f.categoryMatches, (m) => {
        B(c, m) || (c[m] = u);
      });
    }), c), {});
    return function() {
      const c = this.LA(1);
      return o[c.tokenTypeIdx];
    };
  } else
    return function() {
      for (let a = 0; a < i; a++) {
        const o = t[a], c = o.length;
        e: for (let l = 0; l < c; l++) {
          const u = o[l], f = u.length;
          for (let m = 0; m < f; m++) {
            const g = this.LA(m + 1);
            if (n(g, u[m]) === !1)
              continue e;
          }
          return a;
        }
      }
    };
}
function Ay(t, e, n) {
  const r = Nt(t, (s) => s.length === 1), i = t.length;
  if (r && !n) {
    const s = yt(t);
    if (s.length === 1 && oe(s[0].categoryMatches)) {
      const o = s[0].tokenTypeIdx;
      return function() {
        return this.LA(1).tokenTypeIdx === o;
      };
    } else {
      const a = Ye(s, (o, c, l) => (o[c.tokenTypeIdx] = !0, j(c.categoryMatches, (u) => {
        o[u] = !0;
      }), o), []);
      return function() {
        const o = this.LA(1);
        return a[o.tokenTypeIdx] === !0;
      };
    }
  } else
    return function() {
      e: for (let s = 0; s < i; s++) {
        const a = t[s], o = a.length;
        for (let c = 0; c < o; c++) {
          const l = this.LA(c + 1);
          if (e(l, a[c]) === !1)
            continue e;
        }
        return !0;
      }
      return !1;
    };
}
class Sy extends Ua {
  constructor(e, n, r) {
    super(), this.topProd = e, this.targetOccurrence = n, this.targetProdType = r;
  }
  startWalking() {
    return this.walk(this.topProd), this.restDef;
  }
  checkIsTarget(e, n, r, i) {
    return e.idx === this.targetOccurrence && this.targetProdType === n ? (this.restDef = r.concat(i), !0) : !1;
  }
  walkOption(e, n, r) {
    this.checkIsTarget(e, me.OPTION, n, r) || super.walkOption(e, n, r);
  }
  walkAtLeastOne(e, n, r) {
    this.checkIsTarget(e, me.REPETITION_MANDATORY, n, r) || super.walkOption(e, n, r);
  }
  walkAtLeastOneSep(e, n, r) {
    this.checkIsTarget(e, me.REPETITION_MANDATORY_WITH_SEPARATOR, n, r) || super.walkOption(e, n, r);
  }
  walkMany(e, n, r) {
    this.checkIsTarget(e, me.REPETITION, n, r) || super.walkOption(e, n, r);
  }
  walkManySep(e, n, r) {
    this.checkIsTarget(e, me.REPETITION_WITH_SEPARATOR, n, r) || super.walkOption(e, n, r);
  }
}
class gh extends ai {
  constructor(e, n, r) {
    super(), this.targetOccurrence = e, this.targetProdType = n, this.targetRef = r, this.result = [];
  }
  checkIsTarget(e, n) {
    e.idx === this.targetOccurrence && this.targetProdType === n && (this.targetRef === void 0 || e === this.targetRef) && (this.result = e.definition);
  }
  visitOption(e) {
    this.checkIsTarget(e, me.OPTION);
  }
  visitRepetition(e) {
    this.checkIsTarget(e, me.REPETITION);
  }
  visitRepetitionMandatory(e) {
    this.checkIsTarget(e, me.REPETITION_MANDATORY);
  }
  visitRepetitionMandatoryWithSeparator(e) {
    this.checkIsTarget(e, me.REPETITION_MANDATORY_WITH_SEPARATOR);
  }
  visitRepetitionWithSeparator(e) {
    this.checkIsTarget(e, me.REPETITION_WITH_SEPARATOR);
  }
  visitAlternation(e) {
    this.checkIsTarget(e, me.ALTERNATION);
  }
}
function ku(t) {
  const e = new Array(t);
  for (let n = 0; n < t; n++)
    e[n] = [];
  return e;
}
function po(t) {
  let e = [""];
  for (let n = 0; n < t.length; n++) {
    const r = t[n], i = [];
    for (let s = 0; s < e.length; s++) {
      const a = e[s];
      i.push(a + "_" + r.tokenTypeIdx);
      for (let o = 0; o < r.categoryMatches.length; o++) {
        const c = "_" + r.categoryMatches[o];
        i.push(a + c);
      }
    }
    e = i;
  }
  return e;
}
function Cy(t, e, n) {
  for (let r = 0; r < t.length; r++) {
    if (r === n)
      continue;
    const i = t[r];
    for (let s = 0; s < e.length; s++) {
      const a = e[s];
      if (i[a] === !0)
        return !1;
    }
  }
  return !0;
}
function yh(t, e) {
  const n = M(t, (a) => qo([a], 1)), r = ku(n.length), i = M(n, (a) => {
    const o = {};
    return j(a, (c) => {
      const l = po(c.partialPath);
      j(l, (u) => {
        o[u] = !0;
      });
    }), o;
  });
  let s = n;
  for (let a = 1; a <= e; a++) {
    const o = s;
    s = ku(o.length);
    for (let c = 0; c < o.length; c++) {
      const l = o[c];
      for (let u = 0; u < l.length; u++) {
        const f = l[u].partialPath, m = l[u].suffixDef, g = po(f);
        if (Cy(i, g, c) || oe(m) || f.length === e) {
          const N = r[c];
          if (Wo(N, f) === !1) {
            N.push(f);
            for (let $ = 0; $ < g.length; $++) {
              const w = g[$];
              i[c][w] = !0;
            }
          }
        } else {
          const N = qo(m, a + 1, f);
          s[c] = s[c].concat(N), j(N, ($) => {
            const w = po($.partialPath);
            j(w, (O) => {
              i[c][O] = !0;
            });
          });
        }
      }
    }
  }
  return r;
}
function Ba(t, e, n, r) {
  const i = new gh(t, me.ALTERNATION, r);
  return e.accept(i), yh(i.result, n);
}
function qa(t, e, n, r) {
  const i = new gh(t, n);
  e.accept(i);
  const s = i.result, o = new Sy(e, t, n).startWalking(), c = new nt({ definition: s }), l = new nt({ definition: o });
  return yh([c, l], r);
}
function Wo(t, e) {
  e: for (let n = 0; n < t.length; n++) {
    const r = t[n];
    if (r.length === e.length) {
      for (let i = 0; i < r.length; i++) {
        const s = e[i], a = r[i];
        if ((s === a || a.categoryMatchesMap[s.tokenTypeIdx] !== void 0) === !1)
          continue e;
      }
      return !0;
    }
  }
  return !1;
}
function ky(t, e) {
  return t.length < e.length && Nt(t, (n, r) => {
    const i = e[r];
    return n === i || i.categoryMatchesMap[n.tokenTypeIdx];
  });
}
function Th(t) {
  return Nt(t, (e) => Nt(e, (n) => Nt(n, (r) => oe(r.categoryMatches))));
}
function Ny(t) {
  const e = t.lookaheadStrategy.validate({
    rules: t.rules,
    tokenTypes: t.tokenTypes,
    grammarName: t.grammarName
  });
  return M(e, (n) => Object.assign({ type: Je.CUSTOM_LOOKAHEAD_VALIDATION }, n));
}
function wy(t, e, n, r) {
  const i = lt(t, (c) => by(c, n)), s = Uy(t, e, n), a = lt(t, (c) => Dy(c, n)), o = lt(t, (c) => $y(c, t, r, n));
  return i.concat(s, a, o);
}
function by(t, e) {
  const n = new _y();
  t.accept(n);
  const r = n.allProductions, i = am(r, Iy), s = It(i, (o) => o.length > 1);
  return M(Le(s), (o) => {
    const c = bt(o), l = e.buildDuplicateFoundError(t, o), u = Ot(c), f = {
      message: l,
      type: Je.DUPLICATE_PRODUCTIONS,
      ruleName: t.name,
      dslName: u,
      occurrence: c.idx
    }, m = Rh(c);
    return m && (f.parameter = m), f;
  });
}
function Iy(t) {
  return `${Ot(t)}_#_${t.idx}_#_${Rh(t)}`;
}
function Rh(t) {
  return t instanceof ue ? t.terminalType.name : t instanceof Xe ? t.nonTerminalName : "";
}
class _y extends ai {
  constructor() {
    super(...arguments), this.allProductions = [];
  }
  visitNonTerminal(e) {
    this.allProductions.push(e);
  }
  visitOption(e) {
    this.allProductions.push(e);
  }
  visitRepetitionWithSeparator(e) {
    this.allProductions.push(e);
  }
  visitRepetitionMandatory(e) {
    this.allProductions.push(e);
  }
  visitRepetitionMandatoryWithSeparator(e) {
    this.allProductions.push(e);
  }
  visitRepetition(e) {
    this.allProductions.push(e);
  }
  visitAlternation(e) {
    this.allProductions.push(e);
  }
  visitTerminal(e) {
    this.allProductions.push(e);
  }
}
function $y(t, e, n, r) {
  const i = [];
  if (Ye(e, (a, o) => o.name === t.name ? a + 1 : a, 0) > 1) {
    const a = r.buildDuplicateRuleNameError({
      topLevelRule: t,
      grammarName: n
    });
    i.push({
      message: a,
      type: Je.DUPLICATE_RULE_NAME,
      ruleName: t.name
    });
  }
  return i;
}
function Py(t, e, n) {
  const r = [];
  let i;
  return Qe(e, t) || (i = `Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${n}<-as it is not defined in any of the super grammars `, r.push({
    message: i,
    type: Je.INVALID_RULE_OVERRIDE,
    ruleName: t
  })), r;
}
function vh(t, e, n, r = []) {
  const i = [], s = Qs(e.definition);
  if (oe(s))
    return [];
  {
    const a = t.name;
    Qe(s, t) && i.push({
      message: n.buildLeftRecursionError({
        topLevelRule: t,
        leftRecursionPath: r
      }),
      type: Je.LEFT_RECURSION,
      ruleName: a
    });
    const c = La(s, r.concat([t])), l = lt(c, (u) => {
      const f = Be(r);
      return f.push(u), vh(t, u, n, f);
    });
    return i.concat(l);
  }
}
function Qs(t) {
  let e = [];
  if (oe(t))
    return e;
  const n = bt(t);
  if (n instanceof Xe)
    e.push(n.referencedRule);
  else if (n instanceof nt || n instanceof ze || n instanceof ft || n instanceof ht || n instanceof rt || n instanceof Ae)
    e = e.concat(Qs(n.definition));
  else if (n instanceof it)
    e = yt(M(n.definition, (s) => Qs(s.definition)));
  else if (!(n instanceof ue)) throw Error("non exhaustive match");
  const r = la(n), i = t.length > 1;
  if (r && i) {
    const s = Fe(t);
    return e.concat(Qs(s));
  } else
    return e;
}
class Pl extends ai {
  constructor() {
    super(...arguments), this.alternations = [];
  }
  visitAlternation(e) {
    this.alternations.push(e);
  }
}
function Ly(t, e) {
  const n = new Pl();
  t.accept(n);
  const r = n.alternations;
  return lt(r, (s) => {
    const a = zi(s.definition);
    return lt(a, (o, c) => {
      const l = mh([o], [], cs, 1);
      return oe(l) ? [
        {
          message: e.buildEmptyAlternationError({
            topLevelRule: t,
            alternation: s,
            emptyChoiceIdx: c
          }),
          type: Je.NONE_LAST_EMPTY_ALT,
          ruleName: t.name,
          occurrence: s.idx,
          alternative: c + 1
        }
      ] : [];
    });
  });
}
function Oy(t, e, n) {
  const r = new Pl();
  t.accept(r);
  let i = r.alternations;
  return i = Oa(i, (a) => a.ignoreAmbiguities === !0), lt(i, (a) => {
    const o = a.idx, c = a.maxLookahead || e, l = Ba(o, t, c, a), u = Fy(l, a, t, n), f = Gy(l, a, t, n);
    return u.concat(f);
  });
}
class xy extends ai {
  constructor() {
    super(...arguments), this.allProductions = [];
  }
  visitRepetitionWithSeparator(e) {
    this.allProductions.push(e);
  }
  visitRepetitionMandatory(e) {
    this.allProductions.push(e);
  }
  visitRepetitionMandatoryWithSeparator(e) {
    this.allProductions.push(e);
  }
  visitRepetition(e) {
    this.allProductions.push(e);
  }
}
function Dy(t, e) {
  const n = new Pl();
  t.accept(n);
  const r = n.alternations;
  return lt(r, (s) => s.definition.length > 255 ? [
    {
      message: e.buildTooManyAlternativesError({
        topLevelRule: t,
        alternation: s
      }),
      type: Je.TOO_MANY_ALTS,
      ruleName: t.name,
      occurrence: s.idx
    }
  ] : []);
}
function My(t, e, n) {
  const r = [];
  return j(t, (i) => {
    const s = new xy();
    i.accept(s);
    const a = s.allProductions;
    j(a, (o) => {
      const c = $l(o), l = o.maxLookahead || e, u = o.idx, m = qa(u, i, c, l)[0];
      if (oe(yt(m))) {
        const g = n.buildEmptyRepetitionError({
          topLevelRule: i,
          repetition: o
        });
        r.push({
          message: g,
          type: Je.NO_NON_EMPTY_LOOKAHEAD,
          ruleName: i.name
        });
      }
    });
  }), r;
}
function Fy(t, e, n, r) {
  const i = [], s = Ye(t, (o, c, l) => (e.definition[l].ignoreAmbiguities === !0 || j(c, (u) => {
    const f = [l];
    j(t, (m, g) => {
      l !== g && Wo(m, u) && // ignore (skip) ambiguities with this "other" alternative
      e.definition[g].ignoreAmbiguities !== !0 && f.push(g);
    }), f.length > 1 && !Wo(i, u) && (i.push(u), o.push({
      alts: f,
      path: u
    }));
  }), o), []);
  return M(s, (o) => {
    const c = M(o.alts, (u) => u + 1);
    return {
      message: r.buildAlternationAmbiguityError({
        topLevelRule: n,
        alternation: e,
        ambiguityIndices: c,
        prefixPath: o.path
      }),
      type: Je.AMBIGUOUS_ALTS,
      ruleName: n.name,
      occurrence: e.idx,
      alternatives: o.alts
    };
  });
}
function Gy(t, e, n, r) {
  const i = Ye(t, (a, o, c) => {
    const l = M(o, (u) => ({ idx: c, path: u }));
    return a.concat(l);
  }, []);
  return rs(lt(i, (a) => {
    if (e.definition[a.idx].ignoreAmbiguities === !0)
      return [];
    const c = a.idx, l = a.path, u = dt(i, (m) => (
      // ignore (skip) ambiguities with this "other" alternative
      e.definition[m.idx].ignoreAmbiguities !== !0 && m.idx < c && // checking for strict prefix because identical lookaheads
      // will be be detected using a different validation.
      ky(m.path, l)
    ));
    return M(u, (m) => {
      const g = [m.idx + 1, c + 1], A = e.idx === 0 ? "" : e.idx;
      return {
        message: r.buildAlternationPrefixAmbiguityError({
          topLevelRule: n,
          alternation: e,
          ambiguityIndices: g,
          prefixPath: m.path
        }),
        type: Je.AMBIGUOUS_PREFIX_ALTS,
        ruleName: n.name,
        occurrence: A,
        alternatives: g
      };
    });
  }));
}
function Uy(t, e, n) {
  const r = [], i = M(e, (s) => s.name);
  return j(t, (s) => {
    const a = s.name;
    if (Qe(i, a)) {
      const o = n.buildNamespaceConflictError(s);
      r.push({
        message: o,
        type: Je.CONFLICT_TOKENS_RULES_NAMESPACE,
        ruleName: a
      });
    }
  }), r;
}
function jy(t) {
  const e = El(t, {
    errMsgProvider: dy
  }), n = {};
  return j(t.rules, (r) => {
    n[r.name] = r;
  }), fy(n, e.errMsgProvider);
}
function zy(t) {
  return t = El(t, {
    errMsgProvider: Gn
  }), wy(t.rules, t.tokenTypes, t.errMsgProvider, t.grammarName);
}
const Eh = "MismatchedTokenException", Ah = "NoViableAltException", Sh = "EarlyExitException", Ch = "NotAllInputParsedException", kh = [
  Eh,
  Ah,
  Sh,
  Ch
];
Object.freeze(kh);
function fa(t) {
  return Qe(kh, t.name);
}
class Wa extends Error {
  constructor(e, n) {
    super(e), this.token = n, this.resyncedTokens = [], Object.setPrototypeOf(this, new.target.prototype), Error.captureStackTrace && Error.captureStackTrace(this, this.constructor);
  }
}
class Nh extends Wa {
  constructor(e, n, r) {
    super(e, n), this.previousToken = r, this.name = Eh;
  }
}
class By extends Wa {
  constructor(e, n, r) {
    super(e, n), this.previousToken = r, this.name = Ah;
  }
}
class qy extends Wa {
  constructor(e, n) {
    super(e, n), this.name = Ch;
  }
}
class Wy extends Wa {
  constructor(e, n, r) {
    super(e, n), this.previousToken = r, this.name = Sh;
  }
}
const mo = {}, wh = "InRuleRecoveryException";
class Vy extends Error {
  constructor(e) {
    super(e), this.name = wh;
  }
}
class Ky {
  initRecoverable(e) {
    this.firstAfterRepMap = {}, this.resyncFollows = {}, this.recoveryEnabled = B(e, "recoveryEnabled") ? e.recoveryEnabled : rn.recoveryEnabled, this.recoveryEnabled && (this.attemptInRepetitionRecovery = Hy);
  }
  getTokenToInsert(e) {
    const n = _l(e, "", NaN, NaN, NaN, NaN, NaN, NaN);
    return n.isInsertedInRecovery = !0, n;
  }
  canTokenTypeBeInsertedInRecovery(e) {
    return !0;
  }
  canTokenTypeBeDeletedInRecovery(e) {
    return !0;
  }
  tryInRepetitionRecovery(e, n, r, i) {
    const s = this.findReSyncTokenType(), a = this.exportLexerState(), o = [];
    let c = !1;
    const l = this.LA(1);
    let u = this.LA(1);
    const f = () => {
      const m = this.LA(0), g = this.errorMessageProvider.buildMismatchTokenMessage({
        expected: i,
        actual: l,
        previous: m,
        ruleName: this.getCurrRuleFullName()
      }), A = new Nh(g, l, this.LA(0));
      A.resyncedTokens = zi(o), this.SAVE_ERROR(A);
    };
    for (; !c; )
      if (this.tokenMatcher(u, i)) {
        f();
        return;
      } else if (r.call(this)) {
        f(), e.apply(this, n);
        return;
      } else this.tokenMatcher(u, s) ? c = !0 : (u = this.SKIP_TOKEN(), this.addToResyncTokens(u, o));
    this.importLexerState(a);
  }
  shouldInRepetitionRecoveryBeTried(e, n, r) {
    return !(r === !1 || this.tokenMatcher(this.LA(1), e) || this.isBackTracking() || this.canPerformInRuleRecovery(e, this.getFollowsForInRuleRecovery(e, n)));
  }
  // Error Recovery functionality
  getFollowsForInRuleRecovery(e, n) {
    const r = this.getCurrentGrammarPath(e, n);
    return this.getNextPossibleTokenTypes(r);
  }
  tryInRuleRecovery(e, n) {
    if (this.canRecoverWithSingleTokenInsertion(e, n))
      return this.getTokenToInsert(e);
    if (this.canRecoverWithSingleTokenDeletion(e)) {
      const r = this.SKIP_TOKEN();
      return this.consumeToken(), r;
    }
    throw new Vy("sad sad panda");
  }
  canPerformInRuleRecovery(e, n) {
    return this.canRecoverWithSingleTokenInsertion(e, n) || this.canRecoverWithSingleTokenDeletion(e);
  }
  canRecoverWithSingleTokenInsertion(e, n) {
    if (!this.canTokenTypeBeInsertedInRecovery(e) || oe(n))
      return !1;
    const r = this.LA(1);
    return jr(n, (s) => this.tokenMatcher(r, s)) !== void 0;
  }
  canRecoverWithSingleTokenDeletion(e) {
    return this.canTokenTypeBeDeletedInRecovery(e) ? this.tokenMatcher(this.LA(2), e) : !1;
  }
  isInCurrentRuleReSyncSet(e) {
    const n = this.getCurrFollowKey(), r = this.getFollowSetFromFollowKey(n);
    return Qe(r, e);
  }
  findReSyncTokenType() {
    const e = this.flattenFollowSet();
    let n = this.LA(1), r = 2;
    for (; ; ) {
      const i = jr(e, (s) => ph(n, s));
      if (i !== void 0)
        return i;
      n = this.LA(r), r++;
    }
  }
  getCurrFollowKey() {
    if (this.RULE_STACK.length === 1)
      return mo;
    const e = this.getLastExplicitRuleShortName(), n = this.getLastExplicitRuleOccurrenceIndex(), r = this.getPreviousExplicitRuleShortName();
    return {
      ruleName: this.shortRuleNameToFullName(e),
      idxInCallingRule: n,
      inRule: this.shortRuleNameToFullName(r)
    };
  }
  buildFullFollowKeyStack() {
    const e = this.RULE_STACK, n = this.RULE_OCCURRENCE_STACK;
    return M(e, (r, i) => i === 0 ? mo : {
      ruleName: this.shortRuleNameToFullName(r),
      idxInCallingRule: n[i],
      inRule: this.shortRuleNameToFullName(e[i - 1])
    });
  }
  flattenFollowSet() {
    const e = M(this.buildFullFollowKeyStack(), (n) => this.getFollowSetFromFollowKey(n));
    return yt(e);
  }
  getFollowSetFromFollowKey(e) {
    if (e === mo)
      return [vn];
    const n = e.ruleName + e.idxInCallingRule + ih + e.inRule;
    return this.resyncFollows[n];
  }
  // It does not make any sense to include a virtual EOF token in the list of resynced tokens
  // as EOF does not really exist and thus does not contain any useful information (line/column numbers)
  addToResyncTokens(e, n) {
    return this.tokenMatcher(e, vn) || n.push(e), n;
  }
  reSyncTo(e) {
    const n = [];
    let r = this.LA(1);
    for (; this.tokenMatcher(r, e) === !1; )
      r = this.SKIP_TOKEN(), this.addToResyncTokens(r, n);
    return zi(n);
  }
  attemptInRepetitionRecovery(e, n, r, i, s, a, o) {
  }
  getCurrentGrammarPath(e, n) {
    const r = this.getHumanReadableRuleStack(), i = Be(this.RULE_OCCURRENCE_STACK);
    return {
      ruleStack: r,
      occurrenceStack: i,
      lastTok: e,
      lastTokOccurrence: n
    };
  }
  getHumanReadableRuleStack() {
    return M(this.RULE_STACK, (e) => this.shortRuleNameToFullName(e));
  }
}
function Hy(t, e, n, r, i, s, a) {
  const o = this.getKeyForAutomaticLookahead(r, i);
  let c = this.firstAfterRepMap[o];
  if (c === void 0) {
    const m = this.getCurrRuleFullName(), g = this.getGAstProductions()[m];
    c = new s(g, i).startWalking(), this.firstAfterRepMap[o] = c;
  }
  let l = c.token, u = c.occurrence;
  const f = c.isEndOfRule;
  this.RULE_STACK.length === 1 && f && l === void 0 && (l = vn, u = 1), !(l === void 0 || u === void 0) && this.shouldInRepetitionRecoveryBeTried(l, u, a) && this.tryInRepetitionRecovery(t, e, n, l);
}
const Yy = 4, Sn = 8, bh = 1 << Sn, Ih = 2 << Sn, Vo = 3 << Sn, Ko = 4 << Sn, Ho = 5 << Sn, Zs = 6 << Sn;
function go(t, e, n) {
  return n | e | t;
}
class Ll {
  constructor(e) {
    var n;
    this.maxLookahead = (n = e == null ? void 0 : e.maxLookahead) !== null && n !== void 0 ? n : rn.maxLookahead;
  }
  validate(e) {
    const n = this.validateNoLeftRecursion(e.rules);
    if (oe(n)) {
      const r = this.validateEmptyOrAlternatives(e.rules), i = this.validateAmbiguousAlternationAlternatives(e.rules, this.maxLookahead), s = this.validateSomeNonEmptyLookaheadPath(e.rules, this.maxLookahead);
      return [
        ...n,
        ...r,
        ...i,
        ...s
      ];
    }
    return n;
  }
  validateNoLeftRecursion(e) {
    return lt(e, (n) => vh(n, n, Gn));
  }
  validateEmptyOrAlternatives(e) {
    return lt(e, (n) => Ly(n, Gn));
  }
  validateAmbiguousAlternationAlternatives(e, n) {
    return lt(e, (r) => Oy(r, n, Gn));
  }
  validateSomeNonEmptyLookaheadPath(e, n) {
    return My(e, n, Gn);
  }
  buildLookaheadForAlternation(e) {
    return Ry(e.prodOccurrence, e.rule, e.maxLookahead, e.hasPredicates, e.dynamicTokensEnabled, Ey);
  }
  buildLookaheadForOptional(e) {
    return vy(e.prodOccurrence, e.rule, e.maxLookahead, e.dynamicTokensEnabled, $l(e.prodType), Ay);
  }
}
class Xy {
  initLooksAhead(e) {
    this.dynamicTokensEnabled = B(e, "dynamicTokensEnabled") ? e.dynamicTokensEnabled : rn.dynamicTokensEnabled, this.maxLookahead = B(e, "maxLookahead") ? e.maxLookahead : rn.maxLookahead, this.lookaheadStrategy = B(e, "lookaheadStrategy") ? e.lookaheadStrategy : new Ll({ maxLookahead: this.maxLookahead }), this.lookAheadFuncsCache = /* @__PURE__ */ new Map();
  }
  preComputeLookaheadFunctions(e) {
    j(e, (n) => {
      this.TRACE_INIT(`${n.name} Rule Lookahead`, () => {
        const { alternation: r, repetition: i, option: s, repetitionMandatory: a, repetitionMandatoryWithSeparator: o, repetitionWithSeparator: c } = Qy(n);
        j(r, (l) => {
          const u = l.idx === 0 ? "" : l.idx;
          this.TRACE_INIT(`${Ot(l)}${u}`, () => {
            const f = this.lookaheadStrategy.buildLookaheadForAlternation({
              prodOccurrence: l.idx,
              rule: n,
              maxLookahead: l.maxLookahead || this.maxLookahead,
              hasPredicates: l.hasPredicates,
              dynamicTokensEnabled: this.dynamicTokensEnabled
            }), m = go(this.fullRuleNameToShort[n.name], bh, l.idx);
            this.setLaFuncCache(m, f);
          });
        }), j(i, (l) => {
          this.computeLookaheadFunc(n, l.idx, Vo, "Repetition", l.maxLookahead, Ot(l));
        }), j(s, (l) => {
          this.computeLookaheadFunc(n, l.idx, Ih, "Option", l.maxLookahead, Ot(l));
        }), j(a, (l) => {
          this.computeLookaheadFunc(n, l.idx, Ko, "RepetitionMandatory", l.maxLookahead, Ot(l));
        }), j(o, (l) => {
          this.computeLookaheadFunc(n, l.idx, Zs, "RepetitionMandatoryWithSeparator", l.maxLookahead, Ot(l));
        }), j(c, (l) => {
          this.computeLookaheadFunc(n, l.idx, Ho, "RepetitionWithSeparator", l.maxLookahead, Ot(l));
        });
      });
    });
  }
  computeLookaheadFunc(e, n, r, i, s, a) {
    this.TRACE_INIT(`${a}${n === 0 ? "" : n}`, () => {
      const o = this.lookaheadStrategy.buildLookaheadForOptional({
        prodOccurrence: n,
        rule: e,
        maxLookahead: s || this.maxLookahead,
        dynamicTokensEnabled: this.dynamicTokensEnabled,
        prodType: i
      }), c = go(this.fullRuleNameToShort[e.name], r, n);
      this.setLaFuncCache(c, o);
    });
  }
  // this actually returns a number, but it is always used as a string (object prop key)
  getKeyForAutomaticLookahead(e, n) {
    const r = this.getLastExplicitRuleShortName();
    return go(r, e, n);
  }
  getLaFuncFromCache(e) {
    return this.lookAheadFuncsCache.get(e);
  }
  /* istanbul ignore next */
  setLaFuncCache(e, n) {
    this.lookAheadFuncsCache.set(e, n);
  }
}
class Jy extends ai {
  constructor() {
    super(...arguments), this.dslMethods = {
      option: [],
      alternation: [],
      repetition: [],
      repetitionWithSeparator: [],
      repetitionMandatory: [],
      repetitionMandatoryWithSeparator: []
    };
  }
  reset() {
    this.dslMethods = {
      option: [],
      alternation: [],
      repetition: [],
      repetitionWithSeparator: [],
      repetitionMandatory: [],
      repetitionMandatoryWithSeparator: []
    };
  }
  visitOption(e) {
    this.dslMethods.option.push(e);
  }
  visitRepetitionWithSeparator(e) {
    this.dslMethods.repetitionWithSeparator.push(e);
  }
  visitRepetitionMandatory(e) {
    this.dslMethods.repetitionMandatory.push(e);
  }
  visitRepetitionMandatoryWithSeparator(e) {
    this.dslMethods.repetitionMandatoryWithSeparator.push(e);
  }
  visitRepetition(e) {
    this.dslMethods.repetition.push(e);
  }
  visitAlternation(e) {
    this.dslMethods.alternation.push(e);
  }
}
const Ds = new Jy();
function Qy(t) {
  Ds.reset(), t.accept(Ds);
  const e = Ds.dslMethods;
  return Ds.reset(), e;
}
function Nu(t, e) {
  isNaN(t.startOffset) === !0 ? (t.startOffset = e.startOffset, t.endOffset = e.endOffset) : t.endOffset < e.endOffset && (t.endOffset = e.endOffset);
}
function wu(t, e) {
  isNaN(t.startOffset) === !0 ? (t.startOffset = e.startOffset, t.startColumn = e.startColumn, t.startLine = e.startLine, t.endOffset = e.endOffset, t.endColumn = e.endColumn, t.endLine = e.endLine) : t.endOffset < e.endOffset && (t.endOffset = e.endOffset, t.endColumn = e.endColumn, t.endLine = e.endLine);
}
function Zy(t, e, n) {
  t.children[n] === void 0 ? t.children[n] = [e] : t.children[n].push(e);
}
function eT(t, e, n) {
  t.children[e] === void 0 ? t.children[e] = [n] : t.children[e].push(n);
}
const tT = "name";
function _h(t, e) {
  Object.defineProperty(t, tT, {
    enumerable: !1,
    configurable: !0,
    writable: !1,
    value: e
  });
}
function nT(t, e) {
  const n = Ur(t), r = n.length;
  for (let i = 0; i < r; i++) {
    const s = n[i], a = t[s], o = a.length;
    for (let c = 0; c < o; c++) {
      const l = a[c];
      l.tokenTypeIdx === void 0 && this[l.name](l.children, e);
    }
  }
}
function rT(t, e) {
  const n = function() {
  };
  _h(n, t + "BaseSemantics");
  const r = {
    visit: function(i, s) {
      if (je(i) && (i = i[0]), !tn(i))
        return this[i.name](i.children, s);
    },
    validateVisitor: function() {
      const i = sT(this, e);
      if (!oe(i)) {
        const s = M(i, (a) => a.msg);
        throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>:
	${s.join(`

`).replace(/\n/g, `
	`)}`);
      }
    }
  };
  return n.prototype = r, n.prototype.constructor = n, n._RULE_NAMES = e, n;
}
function iT(t, e, n) {
  const r = function() {
  };
  _h(r, t + "BaseSemanticsWithDefaults");
  const i = Object.create(n.prototype);
  return j(e, (s) => {
    i[s] = nT;
  }), r.prototype = i, r.prototype.constructor = r, r;
}
var Yo;
(function(t) {
  t[t.REDUNDANT_METHOD = 0] = "REDUNDANT_METHOD", t[t.MISSING_METHOD = 1] = "MISSING_METHOD";
})(Yo || (Yo = {}));
function sT(t, e) {
  return aT(t, e);
}
function aT(t, e) {
  const n = dt(e, (i) => Hn(t[i]) === !1), r = M(n, (i) => ({
    msg: `Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,
    type: Yo.MISSING_METHOD,
    methodName: i
  }));
  return rs(r);
}
class oT {
  initTreeBuilder(e) {
    if (this.CST_STACK = [], this.outputCst = e.outputCst, this.nodeLocationTracking = B(e, "nodeLocationTracking") ? e.nodeLocationTracking : rn.nodeLocationTracking, !this.outputCst)
      this.cstInvocationStateUpdate = Me, this.cstFinallyStateUpdate = Me, this.cstPostTerminal = Me, this.cstPostNonTerminal = Me, this.cstPostRule = Me;
    else if (/full/i.test(this.nodeLocationTracking))
      this.recoveryEnabled ? (this.setNodeLocationFromToken = wu, this.setNodeLocationFromNode = wu, this.cstPostRule = Me, this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery) : (this.setNodeLocationFromToken = Me, this.setNodeLocationFromNode = Me, this.cstPostRule = this.cstPostRuleFull, this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular);
    else if (/onlyOffset/i.test(this.nodeLocationTracking))
      this.recoveryEnabled ? (this.setNodeLocationFromToken = Nu, this.setNodeLocationFromNode = Nu, this.cstPostRule = Me, this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery) : (this.setNodeLocationFromToken = Me, this.setNodeLocationFromNode = Me, this.cstPostRule = this.cstPostRuleOnlyOffset, this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular);
    else if (/none/i.test(this.nodeLocationTracking))
      this.setNodeLocationFromToken = Me, this.setNodeLocationFromNode = Me, this.cstPostRule = Me, this.setInitialNodeLocation = Me;
    else
      throw Error(`Invalid <nodeLocationTracking> config option: "${e.nodeLocationTracking}"`);
  }
  setInitialNodeLocationOnlyOffsetRecovery(e) {
    e.location = {
      startOffset: NaN,
      endOffset: NaN
    };
  }
  setInitialNodeLocationOnlyOffsetRegular(e) {
    e.location = {
      // without error recovery the starting Location of a new CstNode is guaranteed
      // To be the next Token's startOffset (for valid inputs).
      // For invalid inputs there won't be any CSTOutput so this potential
      // inaccuracy does not matter
      startOffset: this.LA(1).startOffset,
      endOffset: NaN
    };
  }
  setInitialNodeLocationFullRecovery(e) {
    e.location = {
      startOffset: NaN,
      startLine: NaN,
      startColumn: NaN,
      endOffset: NaN,
      endLine: NaN,
      endColumn: NaN
    };
  }
  /**
       *  @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work
  
       * @param cstNode
       */
  setInitialNodeLocationFullRegular(e) {
    const n = this.LA(1);
    e.location = {
      startOffset: n.startOffset,
      startLine: n.startLine,
      startColumn: n.startColumn,
      endOffset: NaN,
      endLine: NaN,
      endColumn: NaN
    };
  }
  cstInvocationStateUpdate(e) {
    const n = {
      name: e,
      children: /* @__PURE__ */ Object.create(null)
    };
    this.setInitialNodeLocation(n), this.CST_STACK.push(n);
  }
  cstFinallyStateUpdate() {
    this.CST_STACK.pop();
  }
  cstPostRuleFull(e) {
    const n = this.LA(0), r = e.location;
    r.startOffset <= n.startOffset ? (r.endOffset = n.endOffset, r.endLine = n.endLine, r.endColumn = n.endColumn) : (r.startOffset = NaN, r.startLine = NaN, r.startColumn = NaN);
  }
  cstPostRuleOnlyOffset(e) {
    const n = this.LA(0), r = e.location;
    r.startOffset <= n.startOffset ? r.endOffset = n.endOffset : r.startOffset = NaN;
  }
  cstPostTerminal(e, n) {
    const r = this.CST_STACK[this.CST_STACK.length - 1];
    Zy(r, n, e), this.setNodeLocationFromToken(r.location, n);
  }
  cstPostNonTerminal(e, n) {
    const r = this.CST_STACK[this.CST_STACK.length - 1];
    eT(r, n, e), this.setNodeLocationFromNode(r.location, e.location);
  }
  getBaseCstVisitorConstructor() {
    if (tn(this.baseCstVisitorConstructor)) {
      const e = rT(this.className, Ur(this.gastProductionsCache));
      return this.baseCstVisitorConstructor = e, e;
    }
    return this.baseCstVisitorConstructor;
  }
  getBaseCstVisitorConstructorWithDefaults() {
    if (tn(this.baseCstVisitorWithDefaultsConstructor)) {
      const e = iT(this.className, Ur(this.gastProductionsCache), this.getBaseCstVisitorConstructor());
      return this.baseCstVisitorWithDefaultsConstructor = e, e;
    }
    return this.baseCstVisitorWithDefaultsConstructor;
  }
  getLastExplicitRuleShortName() {
    const e = this.RULE_STACK;
    return e[e.length - 1];
  }
  getPreviousExplicitRuleShortName() {
    const e = this.RULE_STACK;
    return e[e.length - 2];
  }
  getLastExplicitRuleOccurrenceIndex() {
    const e = this.RULE_OCCURRENCE_STACK;
    return e[e.length - 1];
  }
}
class cT {
  initLexerAdapter() {
    this.tokVector = [], this.tokVectorLength = 0, this.currIdx = -1;
  }
  set input(e) {
    if (this.selfAnalysisDone !== !0)
      throw Error("Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.");
    this.reset(), this.tokVector = e, this.tokVectorLength = e.length;
  }
  get input() {
    return this.tokVector;
  }
  // skips a token and returns the next token
  SKIP_TOKEN() {
    return this.currIdx <= this.tokVector.length - 2 ? (this.consumeToken(), this.LA(1)) : pa;
  }
  // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers
  // or lexers dependent on parser context.
  LA(e) {
    const n = this.currIdx + e;
    return n < 0 || this.tokVectorLength <= n ? pa : this.tokVector[n];
  }
  consumeToken() {
    this.currIdx++;
  }
  exportLexerState() {
    return this.currIdx;
  }
  importLexerState(e) {
    this.currIdx = e;
  }
  resetLexerState() {
    this.currIdx = -1;
  }
  moveToTerminatedState() {
    this.currIdx = this.tokVector.length - 1;
  }
  getLexerPosition() {
    return this.exportLexerState();
  }
}
class lT {
  ACTION(e) {
    return e.call(this);
  }
  consume(e, n, r) {
    return this.consumeInternal(n, e, r);
  }
  subrule(e, n, r) {
    return this.subruleInternal(n, e, r);
  }
  option(e, n) {
    return this.optionInternal(n, e);
  }
  or(e, n) {
    return this.orInternal(n, e);
  }
  many(e, n) {
    return this.manyInternal(e, n);
  }
  atLeastOne(e, n) {
    return this.atLeastOneInternal(e, n);
  }
  CONSUME(e, n) {
    return this.consumeInternal(e, 0, n);
  }
  CONSUME1(e, n) {
    return this.consumeInternal(e, 1, n);
  }
  CONSUME2(e, n) {
    return this.consumeInternal(e, 2, n);
  }
  CONSUME3(e, n) {
    return this.consumeInternal(e, 3, n);
  }
  CONSUME4(e, n) {
    return this.consumeInternal(e, 4, n);
  }
  CONSUME5(e, n) {
    return this.consumeInternal(e, 5, n);
  }
  CONSUME6(e, n) {
    return this.consumeInternal(e, 6, n);
  }
  CONSUME7(e, n) {
    return this.consumeInternal(e, 7, n);
  }
  CONSUME8(e, n) {
    return this.consumeInternal(e, 8, n);
  }
  CONSUME9(e, n) {
    return this.consumeInternal(e, 9, n);
  }
  SUBRULE(e, n) {
    return this.subruleInternal(e, 0, n);
  }
  SUBRULE1(e, n) {
    return this.subruleInternal(e, 1, n);
  }
  SUBRULE2(e, n) {
    return this.subruleInternal(e, 2, n);
  }
  SUBRULE3(e, n) {
    return this.subruleInternal(e, 3, n);
  }
  SUBRULE4(e, n) {
    return this.subruleInternal(e, 4, n);
  }
  SUBRULE5(e, n) {
    return this.subruleInternal(e, 5, n);
  }
  SUBRULE6(e, n) {
    return this.subruleInternal(e, 6, n);
  }
  SUBRULE7(e, n) {
    return this.subruleInternal(e, 7, n);
  }
  SUBRULE8(e, n) {
    return this.subruleInternal(e, 8, n);
  }
  SUBRULE9(e, n) {
    return this.subruleInternal(e, 9, n);
  }
  OPTION(e) {
    return this.optionInternal(e, 0);
  }
  OPTION1(e) {
    return this.optionInternal(e, 1);
  }
  OPTION2(e) {
    return this.optionInternal(e, 2);
  }
  OPTION3(e) {
    return this.optionInternal(e, 3);
  }
  OPTION4(e) {
    return this.optionInternal(e, 4);
  }
  OPTION5(e) {
    return this.optionInternal(e, 5);
  }
  OPTION6(e) {
    return this.optionInternal(e, 6);
  }
  OPTION7(e) {
    return this.optionInternal(e, 7);
  }
  OPTION8(e) {
    return this.optionInternal(e, 8);
  }
  OPTION9(e) {
    return this.optionInternal(e, 9);
  }
  OR(e) {
    return this.orInternal(e, 0);
  }
  OR1(e) {
    return this.orInternal(e, 1);
  }
  OR2(e) {
    return this.orInternal(e, 2);
  }
  OR3(e) {
    return this.orInternal(e, 3);
  }
  OR4(e) {
    return this.orInternal(e, 4);
  }
  OR5(e) {
    return this.orInternal(e, 5);
  }
  OR6(e) {
    return this.orInternal(e, 6);
  }
  OR7(e) {
    return this.orInternal(e, 7);
  }
  OR8(e) {
    return this.orInternal(e, 8);
  }
  OR9(e) {
    return this.orInternal(e, 9);
  }
  MANY(e) {
    this.manyInternal(0, e);
  }
  MANY1(e) {
    this.manyInternal(1, e);
  }
  MANY2(e) {
    this.manyInternal(2, e);
  }
  MANY3(e) {
    this.manyInternal(3, e);
  }
  MANY4(e) {
    this.manyInternal(4, e);
  }
  MANY5(e) {
    this.manyInternal(5, e);
  }
  MANY6(e) {
    this.manyInternal(6, e);
  }
  MANY7(e) {
    this.manyInternal(7, e);
  }
  MANY8(e) {
    this.manyInternal(8, e);
  }
  MANY9(e) {
    this.manyInternal(9, e);
  }
  MANY_SEP(e) {
    this.manySepFirstInternal(0, e);
  }
  MANY_SEP1(e) {
    this.manySepFirstInternal(1, e);
  }
  MANY_SEP2(e) {
    this.manySepFirstInternal(2, e);
  }
  MANY_SEP3(e) {
    this.manySepFirstInternal(3, e);
  }
  MANY_SEP4(e) {
    this.manySepFirstInternal(4, e);
  }
  MANY_SEP5(e) {
    this.manySepFirstInternal(5, e);
  }
  MANY_SEP6(e) {
    this.manySepFirstInternal(6, e);
  }
  MANY_SEP7(e) {
    this.manySepFirstInternal(7, e);
  }
  MANY_SEP8(e) {
    this.manySepFirstInternal(8, e);
  }
  MANY_SEP9(e) {
    this.manySepFirstInternal(9, e);
  }
  AT_LEAST_ONE(e) {
    this.atLeastOneInternal(0, e);
  }
  AT_LEAST_ONE1(e) {
    return this.atLeastOneInternal(1, e);
  }
  AT_LEAST_ONE2(e) {
    this.atLeastOneInternal(2, e);
  }
  AT_LEAST_ONE3(e) {
    this.atLeastOneInternal(3, e);
  }
  AT_LEAST_ONE4(e) {
    this.atLeastOneInternal(4, e);
  }
  AT_LEAST_ONE5(e) {
    this.atLeastOneInternal(5, e);
  }
  AT_LEAST_ONE6(e) {
    this.atLeastOneInternal(6, e);
  }
  AT_LEAST_ONE7(e) {
    this.atLeastOneInternal(7, e);
  }
  AT_LEAST_ONE8(e) {
    this.atLeastOneInternal(8, e);
  }
  AT_LEAST_ONE9(e) {
    this.atLeastOneInternal(9, e);
  }
  AT_LEAST_ONE_SEP(e) {
    this.atLeastOneSepFirstInternal(0, e);
  }
  AT_LEAST_ONE_SEP1(e) {
    this.atLeastOneSepFirstInternal(1, e);
  }
  AT_LEAST_ONE_SEP2(e) {
    this.atLeastOneSepFirstInternal(2, e);
  }
  AT_LEAST_ONE_SEP3(e) {
    this.atLeastOneSepFirstInternal(3, e);
  }
  AT_LEAST_ONE_SEP4(e) {
    this.atLeastOneSepFirstInternal(4, e);
  }
  AT_LEAST_ONE_SEP5(e) {
    this.atLeastOneSepFirstInternal(5, e);
  }
  AT_LEAST_ONE_SEP6(e) {
    this.atLeastOneSepFirstInternal(6, e);
  }
  AT_LEAST_ONE_SEP7(e) {
    this.atLeastOneSepFirstInternal(7, e);
  }
  AT_LEAST_ONE_SEP8(e) {
    this.atLeastOneSepFirstInternal(8, e);
  }
  AT_LEAST_ONE_SEP9(e) {
    this.atLeastOneSepFirstInternal(9, e);
  }
  RULE(e, n, r = ma) {
    if (Qe(this.definedRulesNames, e)) {
      const a = {
        message: Gn.buildDuplicateRuleNameError({
          topLevelRule: e,
          grammarName: this.className
        }),
        type: Je.DUPLICATE_RULE_NAME,
        ruleName: e
      };
      this.definitionErrors.push(a);
    }
    this.definedRulesNames.push(e);
    const i = this.defineRule(e, n, r);
    return this[e] = i, i;
  }
  OVERRIDE_RULE(e, n, r = ma) {
    const i = Py(e, this.definedRulesNames, this.className);
    this.definitionErrors = this.definitionErrors.concat(i);
    const s = this.defineRule(e, n, r);
    return this[e] = s, s;
  }
  BACKTRACK(e, n) {
    return function() {
      this.isBackTrackingStack.push(1);
      const r = this.saveRecogState();
      try {
        return e.apply(this, n), !0;
      } catch (i) {
        if (fa(i))
          return !1;
        throw i;
      } finally {
        this.reloadRecogState(r), this.isBackTrackingStack.pop();
      }
    };
  }
  // GAST export APIs
  getGAstProductions() {
    return this.gastProductionsCache;
  }
  getSerializedGastProductions() {
    return yg(Le(this.gastProductionsCache));
  }
}
class uT {
  initRecognizerEngine(e, n) {
    if (this.className = this.constructor.name, this.shortRuleNameToFull = {}, this.fullRuleNameToShort = {}, this.ruleShortNameIdx = 256, this.tokenMatcher = da, this.subruleIdx = 0, this.definedRulesNames = [], this.tokensMap = {}, this.isBackTrackingStack = [], this.RULE_STACK = [], this.RULE_OCCURRENCE_STACK = [], this.gastProductionsCache = {}, B(n, "serializedGrammar"))
      throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.
	See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0
	For Further details.`);
    if (je(e)) {
      if (oe(e))
        throw Error(`A Token Vocabulary cannot be empty.
	Note that the first argument for the parser constructor
	is no longer a Token vector (since v4.0).`);
      if (typeof e[0].startOffset == "number")
        throw Error(`The Parser constructor no longer accepts a token vector as the first argument.
	See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0
	For Further details.`);
    }
    if (je(e))
      this.tokensMap = Ye(e, (s, a) => (s[a.name] = a, s), {});
    else if (B(e, "modes") && Nt(yt(Le(e.modes)), cy)) {
      const s = yt(Le(e.modes)), a = Al(s);
      this.tokensMap = Ye(a, (o, c) => (o[c.name] = c, o), {});
    } else if (Mp(e))
      this.tokensMap = Be(e);
    else
      throw new Error("<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");
    this.tokensMap.EOF = vn;
    const r = B(e, "modes") ? yt(Le(e.modes)) : Le(e), i = Nt(r, (s) => oe(s.categoryMatches));
    this.tokenMatcher = i ? da : cs, ls(Le(this.tokensMap));
  }
  defineRule(e, n, r) {
    if (this.selfAnalysisDone)
      throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called'
Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);
    const i = B(r, "resyncEnabled") ? r.resyncEnabled : ma.resyncEnabled, s = B(r, "recoveryValueFunc") ? r.recoveryValueFunc : ma.recoveryValueFunc, a = this.ruleShortNameIdx << Yy + Sn;
    this.ruleShortNameIdx++, this.shortRuleNameToFull[a] = e, this.fullRuleNameToShort[e] = a;
    let o;
    return this.outputCst === !0 ? o = function(...u) {
      try {
        this.ruleInvocationStateUpdate(a, e, this.subruleIdx), n.apply(this, u);
        const f = this.CST_STACK[this.CST_STACK.length - 1];
        return this.cstPostRule(f), f;
      } catch (f) {
        return this.invokeRuleCatch(f, i, s);
      } finally {
        this.ruleFinallyStateUpdate();
      }
    } : o = function(...u) {
      try {
        return this.ruleInvocationStateUpdate(a, e, this.subruleIdx), n.apply(this, u);
      } catch (f) {
        return this.invokeRuleCatch(f, i, s);
      } finally {
        this.ruleFinallyStateUpdate();
      }
    }, Object.assign(o, { ruleName: e, originalGrammarAction: n });
  }
  invokeRuleCatch(e, n, r) {
    const i = this.RULE_STACK.length === 1, s = n && !this.isBackTracking() && this.recoveryEnabled;
    if (fa(e)) {
      const a = e;
      if (s) {
        const o = this.findReSyncTokenType();
        if (this.isInCurrentRuleReSyncSet(o))
          if (a.resyncedTokens = this.reSyncTo(o), this.outputCst) {
            const c = this.CST_STACK[this.CST_STACK.length - 1];
            return c.recoveredNode = !0, c;
          } else
            return r(e);
        else {
          if (this.outputCst) {
            const c = this.CST_STACK[this.CST_STACK.length - 1];
            c.recoveredNode = !0, a.partialCstResult = c;
          }
          throw a;
        }
      } else {
        if (i)
          return this.moveToTerminatedState(), r(e);
        throw a;
      }
    } else
      throw e;
  }
  // Implementation of parsing DSL
  optionInternal(e, n) {
    const r = this.getKeyForAutomaticLookahead(Ih, n);
    return this.optionInternalLogic(e, n, r);
  }
  optionInternalLogic(e, n, r) {
    let i = this.getLaFuncFromCache(r), s;
    if (typeof e != "function") {
      s = e.DEF;
      const a = e.GATE;
      if (a !== void 0) {
        const o = i;
        i = () => a.call(this) && o.call(this);
      }
    } else
      s = e;
    if (i.call(this) === !0)
      return s.call(this);
  }
  atLeastOneInternal(e, n) {
    const r = this.getKeyForAutomaticLookahead(Ko, e);
    return this.atLeastOneInternalLogic(e, n, r);
  }
  atLeastOneInternalLogic(e, n, r) {
    let i = this.getLaFuncFromCache(r), s;
    if (typeof n != "function") {
      s = n.DEF;
      const a = n.GATE;
      if (a !== void 0) {
        const o = i;
        i = () => a.call(this) && o.call(this);
      }
    } else
      s = n;
    if (i.call(this) === !0) {
      let a = this.doSingleRepetition(s);
      for (; i.call(this) === !0 && a === !0; )
        a = this.doSingleRepetition(s);
    } else
      throw this.raiseEarlyExitException(e, me.REPETITION_MANDATORY, n.ERR_MSG);
    this.attemptInRepetitionRecovery(this.atLeastOneInternal, [e, n], i, Ko, e, yy);
  }
  atLeastOneSepFirstInternal(e, n) {
    const r = this.getKeyForAutomaticLookahead(Zs, e);
    this.atLeastOneSepFirstInternalLogic(e, n, r);
  }
  atLeastOneSepFirstInternalLogic(e, n, r) {
    const i = n.DEF, s = n.SEP;
    if (this.getLaFuncFromCache(r).call(this) === !0) {
      i.call(this);
      const o = () => this.tokenMatcher(this.LA(1), s);
      for (; this.tokenMatcher(this.LA(1), s) === !0; )
        this.CONSUME(s), i.call(this);
      this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
        e,
        s,
        o,
        i,
        Su
      ], o, Zs, e, Su);
    } else
      throw this.raiseEarlyExitException(e, me.REPETITION_MANDATORY_WITH_SEPARATOR, n.ERR_MSG);
  }
  manyInternal(e, n) {
    const r = this.getKeyForAutomaticLookahead(Vo, e);
    return this.manyInternalLogic(e, n, r);
  }
  manyInternalLogic(e, n, r) {
    let i = this.getLaFuncFromCache(r), s;
    if (typeof n != "function") {
      s = n.DEF;
      const o = n.GATE;
      if (o !== void 0) {
        const c = i;
        i = () => o.call(this) && c.call(this);
      }
    } else
      s = n;
    let a = !0;
    for (; i.call(this) === !0 && a === !0; )
      a = this.doSingleRepetition(s);
    this.attemptInRepetitionRecovery(
      this.manyInternal,
      [e, n],
      i,
      Vo,
      e,
      gy,
      // The notStuck parameter is only relevant when "attemptInRepetitionRecovery"
      // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]
      // An infinite loop cannot occur as:
      // - Either the lookahead is guaranteed to consume something (Single Token Separator)
      // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).
      a
    );
  }
  manySepFirstInternal(e, n) {
    const r = this.getKeyForAutomaticLookahead(Ho, e);
    this.manySepFirstInternalLogic(e, n, r);
  }
  manySepFirstInternalLogic(e, n, r) {
    const i = n.DEF, s = n.SEP;
    if (this.getLaFuncFromCache(r).call(this) === !0) {
      i.call(this);
      const o = () => this.tokenMatcher(this.LA(1), s);
      for (; this.tokenMatcher(this.LA(1), s) === !0; )
        this.CONSUME(s), i.call(this);
      this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
        e,
        s,
        o,
        i,
        Au
      ], o, Ho, e, Au);
    }
  }
  repetitionSepSecondInternal(e, n, r, i, s) {
    for (; r(); )
      this.CONSUME(n), i.call(this);
    this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
      e,
      n,
      r,
      i,
      s
    ], r, Zs, e, s);
  }
  doSingleRepetition(e) {
    const n = this.getLexerPosition();
    return e.call(this), this.getLexerPosition() > n;
  }
  orInternal(e, n) {
    const r = this.getKeyForAutomaticLookahead(bh, n), i = je(e) ? e : e.DEF, a = this.getLaFuncFromCache(r).call(this, i);
    if (a !== void 0)
      return i[a].ALT.call(this);
    this.raiseNoAltException(n, e.ERR_MSG);
  }
  ruleFinallyStateUpdate() {
    if (this.RULE_STACK.pop(), this.RULE_OCCURRENCE_STACK.pop(), this.cstFinallyStateUpdate(), this.RULE_STACK.length === 0 && this.isAtEndOfInput() === !1) {
      const e = this.LA(1), n = this.errorMessageProvider.buildNotAllInputParsedMessage({
        firstRedundant: e,
        ruleName: this.getCurrRuleFullName()
      });
      this.SAVE_ERROR(new qy(n, e));
    }
  }
  subruleInternal(e, n, r) {
    let i;
    try {
      const s = r !== void 0 ? r.ARGS : void 0;
      return this.subruleIdx = n, i = e.apply(this, s), this.cstPostNonTerminal(i, r !== void 0 && r.LABEL !== void 0 ? r.LABEL : e.ruleName), i;
    } catch (s) {
      throw this.subruleInternalError(s, r, e.ruleName);
    }
  }
  subruleInternalError(e, n, r) {
    throw fa(e) && e.partialCstResult !== void 0 && (this.cstPostNonTerminal(e.partialCstResult, n !== void 0 && n.LABEL !== void 0 ? n.LABEL : r), delete e.partialCstResult), e;
  }
  consumeInternal(e, n, r) {
    let i;
    try {
      const s = this.LA(1);
      this.tokenMatcher(s, e) === !0 ? (this.consumeToken(), i = s) : this.consumeInternalError(e, s, r);
    } catch (s) {
      i = this.consumeInternalRecovery(e, n, s);
    }
    return this.cstPostTerminal(r !== void 0 && r.LABEL !== void 0 ? r.LABEL : e.name, i), i;
  }
  consumeInternalError(e, n, r) {
    let i;
    const s = this.LA(0);
    throw r !== void 0 && r.ERR_MSG ? i = r.ERR_MSG : i = this.errorMessageProvider.buildMismatchTokenMessage({
      expected: e,
      actual: n,
      previous: s,
      ruleName: this.getCurrRuleFullName()
    }), this.SAVE_ERROR(new Nh(i, n, s));
  }
  consumeInternalRecovery(e, n, r) {
    if (this.recoveryEnabled && // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?
    r.name === "MismatchedTokenException" && !this.isBackTracking()) {
      const i = this.getFollowsForInRuleRecovery(e, n);
      try {
        return this.tryInRuleRecovery(e, i);
      } catch (s) {
        throw s.name === wh ? r : s;
      }
    } else
      throw r;
  }
  saveRecogState() {
    const e = this.errors, n = Be(this.RULE_STACK);
    return {
      errors: e,
      lexerState: this.exportLexerState(),
      RULE_STACK: n,
      CST_STACK: this.CST_STACK
    };
  }
  reloadRecogState(e) {
    this.errors = e.errors, this.importLexerState(e.lexerState), this.RULE_STACK = e.RULE_STACK;
  }
  ruleInvocationStateUpdate(e, n, r) {
    this.RULE_OCCURRENCE_STACK.push(r), this.RULE_STACK.push(e), this.cstInvocationStateUpdate(n);
  }
  isBackTracking() {
    return this.isBackTrackingStack.length !== 0;
  }
  getCurrRuleFullName() {
    const e = this.getLastExplicitRuleShortName();
    return this.shortRuleNameToFull[e];
  }
  shortRuleNameToFullName(e) {
    return this.shortRuleNameToFull[e];
  }
  isAtEndOfInput() {
    return this.tokenMatcher(this.LA(1), vn);
  }
  reset() {
    this.resetLexerState(), this.subruleIdx = 0, this.isBackTrackingStack = [], this.errors = [], this.RULE_STACK = [], this.CST_STACK = [], this.RULE_OCCURRENCE_STACK = [];
  }
}
class dT {
  initErrorHandler(e) {
    this._errors = [], this.errorMessageProvider = B(e, "errorMessageProvider") ? e.errorMessageProvider : rn.errorMessageProvider;
  }
  SAVE_ERROR(e) {
    if (fa(e))
      return e.context = {
        ruleStack: this.getHumanReadableRuleStack(),
        ruleOccurrenceStack: Be(this.RULE_OCCURRENCE_STACK)
      }, this._errors.push(e), e;
    throw Error("Trying to save an Error which is not a RecognitionException");
  }
  get errors() {
    return Be(this._errors);
  }
  set errors(e) {
    this._errors = e;
  }
  // TODO: consider caching the error message computed information
  raiseEarlyExitException(e, n, r) {
    const i = this.getCurrRuleFullName(), s = this.getGAstProductions()[i], o = qa(e, s, n, this.maxLookahead)[0], c = [];
    for (let u = 1; u <= this.maxLookahead; u++)
      c.push(this.LA(u));
    const l = this.errorMessageProvider.buildEarlyExitMessage({
      expectedIterationPaths: o,
      actual: c,
      previous: this.LA(0),
      customUserDescription: r,
      ruleName: i
    });
    throw this.SAVE_ERROR(new Wy(l, this.LA(1), this.LA(0)));
  }
  // TODO: consider caching the error message computed information
  raiseNoAltException(e, n) {
    const r = this.getCurrRuleFullName(), i = this.getGAstProductions()[r], s = Ba(e, i, this.maxLookahead), a = [];
    for (let l = 1; l <= this.maxLookahead; l++)
      a.push(this.LA(l));
    const o = this.LA(0), c = this.errorMessageProvider.buildNoViableAltMessage({
      expectedPathsPerAlt: s,
      actual: a,
      previous: o,
      customUserDescription: n,
      ruleName: this.getCurrRuleFullName()
    });
    throw this.SAVE_ERROR(new By(c, this.LA(1), o));
  }
}
class fT {
  initContentAssist() {
  }
  computeContentAssist(e, n) {
    const r = this.gastProductionsCache[e];
    if (tn(r))
      throw Error(`Rule ->${e}<- does not exist in this grammar.`);
    return mh([r], n, this.tokenMatcher, this.maxLookahead);
  }
  // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...
  // TODO: should this be more explicitly part of the public API?
  getNextPossibleTokenTypes(e) {
    const n = bt(e.ruleStack), i = this.getGAstProductions()[n];
    return new my(i, e).startWalking();
  }
}
const Va = {
  description: "This Object indicates the Parser is during Recording Phase"
};
Object.freeze(Va);
const bu = !0, Iu = Math.pow(2, Sn) - 1, $h = hh({ name: "RECORDING_PHASE_TOKEN", pattern: et.NA });
ls([$h]);
const Ph = _l(
  $h,
  `This IToken indicates the Parser is in Recording Phase
	See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,
  // Using "-1" instead of NaN (as in EOF) because an actual number is less likely to
  // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.
  -1,
  -1,
  -1,
  -1,
  -1,
  -1
);
Object.freeze(Ph);
const hT = {
  name: `This CSTNode indicates the Parser is in Recording Phase
	See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,
  children: {}
};
class pT {
  initGastRecorder(e) {
    this.recordingProdStack = [], this.RECORDING_PHASE = !1;
  }
  enableRecording() {
    this.RECORDING_PHASE = !0, this.TRACE_INIT("Enable Recording", () => {
      for (let e = 0; e < 10; e++) {
        const n = e > 0 ? e : "";
        this[`CONSUME${n}`] = function(r, i) {
          return this.consumeInternalRecord(r, e, i);
        }, this[`SUBRULE${n}`] = function(r, i) {
          return this.subruleInternalRecord(r, e, i);
        }, this[`OPTION${n}`] = function(r) {
          return this.optionInternalRecord(r, e);
        }, this[`OR${n}`] = function(r) {
          return this.orInternalRecord(r, e);
        }, this[`MANY${n}`] = function(r) {
          this.manyInternalRecord(e, r);
        }, this[`MANY_SEP${n}`] = function(r) {
          this.manySepFirstInternalRecord(e, r);
        }, this[`AT_LEAST_ONE${n}`] = function(r) {
          this.atLeastOneInternalRecord(e, r);
        }, this[`AT_LEAST_ONE_SEP${n}`] = function(r) {
          this.atLeastOneSepFirstInternalRecord(e, r);
        };
      }
      this.consume = function(e, n, r) {
        return this.consumeInternalRecord(n, e, r);
      }, this.subrule = function(e, n, r) {
        return this.subruleInternalRecord(n, e, r);
      }, this.option = function(e, n) {
        return this.optionInternalRecord(n, e);
      }, this.or = function(e, n) {
        return this.orInternalRecord(n, e);
      }, this.many = function(e, n) {
        this.manyInternalRecord(e, n);
      }, this.atLeastOne = function(e, n) {
        this.atLeastOneInternalRecord(e, n);
      }, this.ACTION = this.ACTION_RECORD, this.BACKTRACK = this.BACKTRACK_RECORD, this.LA = this.LA_RECORD;
    });
  }
  disableRecording() {
    this.RECORDING_PHASE = !1, this.TRACE_INIT("Deleting Recording methods", () => {
      const e = this;
      for (let n = 0; n < 10; n++) {
        const r = n > 0 ? n : "";
        delete e[`CONSUME${r}`], delete e[`SUBRULE${r}`], delete e[`OPTION${r}`], delete e[`OR${r}`], delete e[`MANY${r}`], delete e[`MANY_SEP${r}`], delete e[`AT_LEAST_ONE${r}`], delete e[`AT_LEAST_ONE_SEP${r}`];
      }
      delete e.consume, delete e.subrule, delete e.option, delete e.or, delete e.many, delete e.atLeastOne, delete e.ACTION, delete e.BACKTRACK, delete e.LA;
    });
  }
  //   Parser methods are called inside an ACTION?
  //   Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?
  // @ts-expect-error -- noop place holder
  ACTION_RECORD(e) {
  }
  // Executing backtracking logic will break our recording logic assumptions
  BACKTRACK_RECORD(e, n) {
    return () => !0;
  }
  // LA is part of the official API and may be used for custom lookahead logic
  // by end users who may forget to wrap it in ACTION or inside a GATE
  LA_RECORD(e) {
    return pa;
  }
  topLevelRuleRecord(e, n) {
    try {
      const r = new si({ definition: [], name: e });
      return r.name = e, this.recordingProdStack.push(r), n.call(this), this.recordingProdStack.pop(), r;
    } catch (r) {
      if (r.KNOWN_RECORDER_ERROR !== !0)
        try {
          r.message = r.message + `
	 This error was thrown during the "grammar recording phase" For more info see:
	https://chevrotain.io/docs/guide/internals.html#grammar-recording`;
        } catch {
          throw r;
        }
      throw r;
    }
  }
  // Implementation of parsing DSL
  optionInternalRecord(e, n) {
    return Ci.call(this, ze, e, n);
  }
  atLeastOneInternalRecord(e, n) {
    Ci.call(this, ft, n, e);
  }
  atLeastOneSepFirstInternalRecord(e, n) {
    Ci.call(this, ht, n, e, bu);
  }
  manyInternalRecord(e, n) {
    Ci.call(this, Ae, n, e);
  }
  manySepFirstInternalRecord(e, n) {
    Ci.call(this, rt, n, e, bu);
  }
  orInternalRecord(e, n) {
    return mT.call(this, e, n);
  }
  subruleInternalRecord(e, n, r) {
    if (ha(n), !e || B(e, "ruleName") === !1) {
      const o = new Error(`<SUBRULE${_u(n)}> argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}>
 inside top level rule: <${this.recordingProdStack[0].name}>`);
      throw o.KNOWN_RECORDER_ERROR = !0, o;
    }
    const i = jn(this.recordingProdStack), s = e.ruleName, a = new Xe({
      idx: n,
      nonTerminalName: s,
      label: r == null ? void 0 : r.LABEL,
      // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created
      referencedRule: void 0
    });
    return i.definition.push(a), this.outputCst ? hT : Va;
  }
  consumeInternalRecord(e, n, r) {
    if (ha(n), !dh(e)) {
      const a = new Error(`<CONSUME${_u(n)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}>
 inside top level rule: <${this.recordingProdStack[0].name}>`);
      throw a.KNOWN_RECORDER_ERROR = !0, a;
    }
    const i = jn(this.recordingProdStack), s = new ue({
      idx: n,
      terminalType: e,
      label: r == null ? void 0 : r.LABEL
    });
    return i.definition.push(s), Ph;
  }
}
function Ci(t, e, n, r = !1) {
  ha(n);
  const i = jn(this.recordingProdStack), s = Hn(e) ? e : e.DEF, a = new t({ definition: [], idx: n });
  return r && (a.separator = e.SEP), B(e, "MAX_LOOKAHEAD") && (a.maxLookahead = e.MAX_LOOKAHEAD), this.recordingProdStack.push(a), s.call(this), i.definition.push(a), this.recordingProdStack.pop(), Va;
}
function mT(t, e) {
  ha(e);
  const n = jn(this.recordingProdStack), r = je(t) === !1, i = r === !1 ? t : t.DEF, s = new it({
    definition: [],
    idx: e,
    ignoreAmbiguities: r && t.IGNORE_AMBIGUITIES === !0
  });
  B(t, "MAX_LOOKAHEAD") && (s.maxLookahead = t.MAX_LOOKAHEAD);
  const a = Of(i, (o) => Hn(o.GATE));
  return s.hasPredicates = a, n.definition.push(s), j(i, (o) => {
    const c = new nt({ definition: [] });
    s.definition.push(c), B(o, "IGNORE_AMBIGUITIES") ? c.ignoreAmbiguities = o.IGNORE_AMBIGUITIES : B(o, "GATE") && (c.ignoreAmbiguities = !0), this.recordingProdStack.push(c), o.ALT.call(this), this.recordingProdStack.pop();
  }), Va;
}
function _u(t) {
  return t === 0 ? "" : `${t}`;
}
function ha(t) {
  if (t < 0 || t > Iu) {
    const e = new Error(
      // The stack trace will contain all the needed details
      `Invalid DSL Method idx value: <${t}>
	Idx value must be a none negative value smaller than ${Iu + 1}`
    );
    throw e.KNOWN_RECORDER_ERROR = !0, e;
  }
}
class gT {
  initPerformanceTracer(e) {
    if (B(e, "traceInitPerf")) {
      const n = e.traceInitPerf, r = typeof n == "number";
      this.traceInitMaxIdent = r ? n : 1 / 0, this.traceInitPerf = r ? n > 0 : n;
    } else
      this.traceInitMaxIdent = 0, this.traceInitPerf = rn.traceInitPerf;
    this.traceInitIndent = -1;
  }
  TRACE_INIT(e, n) {
    if (this.traceInitPerf === !0) {
      this.traceInitIndent++;
      const r = new Array(this.traceInitIndent + 1).join("	");
      this.traceInitIndent < this.traceInitMaxIdent && console.log(`${r}--> <${e}>`);
      const { time: i, value: s } = nh(n), a = i > 10 ? console.warn : console.log;
      return this.traceInitIndent < this.traceInitMaxIdent && a(`${r}<-- <${e}> time: ${i}ms`), this.traceInitIndent--, s;
    } else
      return n();
  }
}
function yT(t, e) {
  e.forEach((n) => {
    const r = n.prototype;
    Object.getOwnPropertyNames(r).forEach((i) => {
      if (i === "constructor")
        return;
      const s = Object.getOwnPropertyDescriptor(r, i);
      s && (s.get || s.set) ? Object.defineProperty(t.prototype, i, s) : t.prototype[i] = n.prototype[i];
    });
  });
}
const pa = _l(vn, "", NaN, NaN, NaN, NaN, NaN, NaN);
Object.freeze(pa);
const rn = Object.freeze({
  recoveryEnabled: !1,
  maxLookahead: 3,
  dynamicTokensEnabled: !1,
  outputCst: !0,
  errorMessageProvider: vr,
  nodeLocationTracking: "none",
  traceInitPerf: !1,
  skipValidations: !1
}), ma = Object.freeze({
  recoveryValueFunc: () => {
  },
  resyncEnabled: !0
});
var Je;
(function(t) {
  t[t.INVALID_RULE_NAME = 0] = "INVALID_RULE_NAME", t[t.DUPLICATE_RULE_NAME = 1] = "DUPLICATE_RULE_NAME", t[t.INVALID_RULE_OVERRIDE = 2] = "INVALID_RULE_OVERRIDE", t[t.DUPLICATE_PRODUCTIONS = 3] = "DUPLICATE_PRODUCTIONS", t[t.UNRESOLVED_SUBRULE_REF = 4] = "UNRESOLVED_SUBRULE_REF", t[t.LEFT_RECURSION = 5] = "LEFT_RECURSION", t[t.NONE_LAST_EMPTY_ALT = 6] = "NONE_LAST_EMPTY_ALT", t[t.AMBIGUOUS_ALTS = 7] = "AMBIGUOUS_ALTS", t[t.CONFLICT_TOKENS_RULES_NAMESPACE = 8] = "CONFLICT_TOKENS_RULES_NAMESPACE", t[t.INVALID_TOKEN_NAME = 9] = "INVALID_TOKEN_NAME", t[t.NO_NON_EMPTY_LOOKAHEAD = 10] = "NO_NON_EMPTY_LOOKAHEAD", t[t.AMBIGUOUS_PREFIX_ALTS = 11] = "AMBIGUOUS_PREFIX_ALTS", t[t.TOO_MANY_ALTS = 12] = "TOO_MANY_ALTS", t[t.CUSTOM_LOOKAHEAD_VALIDATION = 13] = "CUSTOM_LOOKAHEAD_VALIDATION";
})(Je || (Je = {}));
function $u(t = void 0) {
  return function() {
    return t;
  };
}
class us {
  /**
   *  @deprecated use the **instance** method with the same name instead
   */
  static performSelfAnalysis(e) {
    throw Error("The **static** `performSelfAnalysis` method has been deprecated.	\nUse the **instance** method with the same name instead.");
  }
  performSelfAnalysis() {
    this.TRACE_INIT("performSelfAnalysis", () => {
      let e;
      this.selfAnalysisDone = !0;
      const n = this.className;
      this.TRACE_INIT("toFastProps", () => {
        rh(this);
      }), this.TRACE_INIT("Grammar Recording", () => {
        try {
          this.enableRecording(), j(this.definedRulesNames, (i) => {
            const a = this[i].originalGrammarAction;
            let o;
            this.TRACE_INIT(`${i} Rule`, () => {
              o = this.topLevelRuleRecord(i, a);
            }), this.gastProductionsCache[i] = o;
          });
        } finally {
          this.disableRecording();
        }
      });
      let r = [];
      if (this.TRACE_INIT("Grammar Resolving", () => {
        r = jy({
          rules: Le(this.gastProductionsCache)
        }), this.definitionErrors = this.definitionErrors.concat(r);
      }), this.TRACE_INIT("Grammar Validations", () => {
        if (oe(r) && this.skipValidations === !1) {
          const i = zy({
            rules: Le(this.gastProductionsCache),
            tokenTypes: Le(this.tokensMap),
            errMsgProvider: Gn,
            grammarName: n
          }), s = Ny({
            lookaheadStrategy: this.lookaheadStrategy,
            rules: Le(this.gastProductionsCache),
            tokenTypes: Le(this.tokensMap),
            grammarName: n
          });
          this.definitionErrors = this.definitionErrors.concat(i, s);
        }
      }), oe(this.definitionErrors) && (this.recoveryEnabled && this.TRACE_INIT("computeAllProdsFollows", () => {
        const i = Cg(Le(this.gastProductionsCache));
        this.resyncFollows = i;
      }), this.TRACE_INIT("ComputeLookaheadFunctions", () => {
        var i, s;
        (s = (i = this.lookaheadStrategy).initialize) === null || s === void 0 || s.call(i, {
          rules: Le(this.gastProductionsCache)
        }), this.preComputeLookaheadFunctions(Le(this.gastProductionsCache));
      })), !us.DEFER_DEFINITION_ERRORS_HANDLING && !oe(this.definitionErrors))
        throw e = M(this.definitionErrors, (i) => i.message), new Error(`Parser Definition Errors detected:
 ${e.join(`
-------------------------------
`)}`);
    });
  }
  constructor(e, n) {
    this.definitionErrors = [], this.selfAnalysisDone = !1;
    const r = this;
    if (r.initErrorHandler(n), r.initLexerAdapter(), r.initLooksAhead(n), r.initRecognizerEngine(e, n), r.initRecoverable(n), r.initTreeBuilder(n), r.initContentAssist(), r.initGastRecorder(n), r.initPerformanceTracer(n), B(n, "ignoredIssues"))
      throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.
	Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.
	See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES
	For further details.`);
    this.skipValidations = B(n, "skipValidations") ? n.skipValidations : rn.skipValidations;
  }
}
us.DEFER_DEFINITION_ERRORS_HANDLING = !1;
yT(us, [
  Ky,
  Xy,
  oT,
  cT,
  uT,
  lT,
  dT,
  fT,
  pT,
  gT
]);
class TT extends us {
  constructor(e, n = rn) {
    const r = Be(n);
    r.outputCst = !1, super(e, r);
  }
}
function zr(t, e, n) {
  return `${t.name}_${e}_${n}`;
}
const En = 1, RT = 2, Lh = 4, Oh = 5, ds = 7, vT = 8, ET = 9, AT = 10, ST = 11, xh = 12;
class Ol {
  constructor(e) {
    this.target = e;
  }
  isEpsilon() {
    return !1;
  }
}
class xl extends Ol {
  constructor(e, n) {
    super(e), this.tokenType = n;
  }
}
class Dh extends Ol {
  constructor(e) {
    super(e);
  }
  isEpsilon() {
    return !0;
  }
}
class Dl extends Ol {
  constructor(e, n, r) {
    super(e), this.rule = n, this.followState = r;
  }
  isEpsilon() {
    return !0;
  }
}
function CT(t) {
  const e = {
    decisionMap: {},
    decisionStates: [],
    ruleToStartState: /* @__PURE__ */ new Map(),
    ruleToStopState: /* @__PURE__ */ new Map(),
    states: []
  };
  kT(e, t);
  const n = t.length;
  for (let r = 0; r < n; r++) {
    const i = t[r], s = Yn(e, i, i);
    s !== void 0 && DT(e, i, s);
  }
  return e;
}
function kT(t, e) {
  const n = e.length;
  for (let r = 0; r < n; r++) {
    const i = e[r], s = Oe(t, i, void 0, {
      type: RT
    }), a = Oe(t, i, void 0, {
      type: ds
    });
    s.stop = a, t.ruleToStartState.set(i, s), t.ruleToStopState.set(i, a);
  }
}
function Mh(t, e, n) {
  return n instanceof ue ? Ml(t, e, n.terminalType, n) : n instanceof Xe ? xT(t, e, n) : n instanceof it ? _T(t, e, n) : n instanceof ze ? $T(t, e, n) : n instanceof Ae ? NT(t, e, n) : n instanceof rt ? wT(t, e, n) : n instanceof ft ? bT(t, e, n) : n instanceof ht ? IT(t, e, n) : Yn(t, e, n);
}
function NT(t, e, n) {
  const r = Oe(t, e, n, {
    type: Oh
  });
  Cn(t, r);
  const i = oi(t, e, r, n, Yn(t, e, n));
  return Gh(t, e, n, i);
}
function wT(t, e, n) {
  const r = Oe(t, e, n, {
    type: Oh
  });
  Cn(t, r);
  const i = oi(t, e, r, n, Yn(t, e, n)), s = Ml(t, e, n.separator, n);
  return Gh(t, e, n, i, s);
}
function bT(t, e, n) {
  const r = Oe(t, e, n, {
    type: Lh
  });
  Cn(t, r);
  const i = oi(t, e, r, n, Yn(t, e, n));
  return Fh(t, e, n, i);
}
function IT(t, e, n) {
  const r = Oe(t, e, n, {
    type: Lh
  });
  Cn(t, r);
  const i = oi(t, e, r, n, Yn(t, e, n)), s = Ml(t, e, n.separator, n);
  return Fh(t, e, n, i, s);
}
function _T(t, e, n) {
  const r = Oe(t, e, n, {
    type: En
  });
  Cn(t, r);
  const i = M(n.definition, (a) => Mh(t, e, a));
  return oi(t, e, r, n, ...i);
}
function $T(t, e, n) {
  const r = Oe(t, e, n, {
    type: En
  });
  Cn(t, r);
  const i = oi(t, e, r, n, Yn(t, e, n));
  return PT(t, e, n, i);
}
function Yn(t, e, n) {
  const r = dt(M(n.definition, (i) => Mh(t, e, i)), (i) => i !== void 0);
  return r.length === 1 ? r[0] : r.length === 0 ? void 0 : OT(t, r);
}
function Fh(t, e, n, r, i) {
  const s = r.left, a = r.right, o = Oe(t, e, n, {
    type: ST
  });
  Cn(t, o);
  const c = Oe(t, e, n, {
    type: xh
  });
  return s.loopback = o, c.loopback = o, t.decisionMap[zr(e, i ? "RepetitionMandatoryWithSeparator" : "RepetitionMandatory", n.idx)] = o, Ie(a, o), i === void 0 ? (Ie(o, s), Ie(o, c)) : (Ie(o, c), Ie(o, i.left), Ie(i.right, s)), {
    left: s,
    right: c
  };
}
function Gh(t, e, n, r, i) {
  const s = r.left, a = r.right, o = Oe(t, e, n, {
    type: AT
  });
  Cn(t, o);
  const c = Oe(t, e, n, {
    type: xh
  }), l = Oe(t, e, n, {
    type: ET
  });
  return o.loopback = l, c.loopback = l, Ie(o, s), Ie(o, c), Ie(a, l), i !== void 0 ? (Ie(l, c), Ie(l, i.left), Ie(i.right, s)) : Ie(l, o), t.decisionMap[zr(e, i ? "RepetitionWithSeparator" : "Repetition", n.idx)] = o, {
    left: o,
    right: c
  };
}
function PT(t, e, n, r) {
  const i = r.left, s = r.right;
  return Ie(i, s), t.decisionMap[zr(e, "Option", n.idx)] = i, r;
}
function Cn(t, e) {
  return t.decisionStates.push(e), e.decision = t.decisionStates.length - 1, e.decision;
}
function oi(t, e, n, r, ...i) {
  const s = Oe(t, e, r, {
    type: vT,
    start: n
  });
  n.end = s;
  for (const o of i)
    o !== void 0 ? (Ie(n, o.left), Ie(o.right, s)) : Ie(n, s);
  const a = {
    left: n,
    right: s
  };
  return t.decisionMap[zr(e, LT(r), r.idx)] = n, a;
}
function LT(t) {
  if (t instanceof it)
    return "Alternation";
  if (t instanceof ze)
    return "Option";
  if (t instanceof Ae)
    return "Repetition";
  if (t instanceof rt)
    return "RepetitionWithSeparator";
  if (t instanceof ft)
    return "RepetitionMandatory";
  if (t instanceof ht)
    return "RepetitionMandatoryWithSeparator";
  throw new Error("Invalid production type encountered");
}
function OT(t, e) {
  const n = e.length;
  for (let s = 0; s < n - 1; s++) {
    const a = e[s];
    let o;
    a.left.transitions.length === 1 && (o = a.left.transitions[0]);
    const c = o instanceof Dl, l = o, u = e[s + 1].left;
    a.left.type === En && a.right.type === En && o !== void 0 && (c && l.followState === a.right || o.target === a.right) ? (c ? l.followState = u : o.target = u, MT(t, a.right)) : Ie(a.right, u);
  }
  const r = e[0], i = e[n - 1];
  return {
    left: r.left,
    right: i.right
  };
}
function Ml(t, e, n, r) {
  const i = Oe(t, e, r, {
    type: En
  }), s = Oe(t, e, r, {
    type: En
  });
  return Fl(i, new xl(s, n)), {
    left: i,
    right: s
  };
}
function xT(t, e, n) {
  const r = n.referencedRule, i = t.ruleToStartState.get(r), s = Oe(t, e, n, {
    type: En
  }), a = Oe(t, e, n, {
    type: En
  }), o = new Dl(i, r, a);
  return Fl(s, o), {
    left: s,
    right: a
  };
}
function DT(t, e, n) {
  const r = t.ruleToStartState.get(e);
  Ie(r, n.left);
  const i = t.ruleToStopState.get(e);
  return Ie(n.right, i), {
    left: r,
    right: i
  };
}
function Ie(t, e) {
  const n = new Dh(e);
  Fl(t, n);
}
function Oe(t, e, n, r) {
  const i = Object.assign({
    atn: t,
    production: n,
    epsilonOnlyTransitions: !1,
    rule: e,
    transitions: [],
    nextTokenWithinRule: [],
    stateNumber: t.states.length
  }, r);
  return t.states.push(i), i;
}
function Fl(t, e) {
  t.transitions.length === 0 && (t.epsilonOnlyTransitions = e.isEpsilon()), t.transitions.push(e);
}
function MT(t, e) {
  t.states.splice(t.states.indexOf(e), 1);
}
const ga = {};
class Xo {
  constructor() {
    this.map = {}, this.configs = [];
  }
  get size() {
    return this.configs.length;
  }
  finalize() {
    this.map = {};
  }
  add(e) {
    const n = Uh(e);
    n in this.map || (this.map[n] = this.configs.length, this.configs.push(e));
  }
  get elements() {
    return this.configs;
  }
  get alts() {
    return M(this.configs, (e) => e.alt);
  }
  get key() {
    let e = "";
    for (const n in this.map)
      e += n + ":";
    return e;
  }
}
function Uh(t, e = !0) {
  return `${e ? `a${t.alt}` : ""}s${t.state.stateNumber}:${t.stack.map((n) => n.stateNumber.toString()).join("_")}`;
}
function FT(t, e) {
  const n = {};
  return (r) => {
    const i = r.toString();
    let s = n[i];
    return s !== void 0 || (s = {
      atnStartState: t,
      decision: e,
      states: {}
    }, n[i] = s), s;
  };
}
class jh {
  constructor() {
    this.predicates = [];
  }
  is(e) {
    return e >= this.predicates.length || this.predicates[e];
  }
  set(e, n) {
    this.predicates[e] = n;
  }
  toString() {
    let e = "";
    const n = this.predicates.length;
    for (let r = 0; r < n; r++)
      e += this.predicates[r] === !0 ? "1" : "0";
    return e;
  }
}
const Pu = new jh();
class GT extends Ll {
  constructor(e) {
    var n;
    super(), this.logging = (n = e == null ? void 0 : e.logging) !== null && n !== void 0 ? n : (r) => console.log(r);
  }
  initialize(e) {
    this.atn = CT(e.rules), this.dfas = UT(this.atn);
  }
  validateAmbiguousAlternationAlternatives() {
    return [];
  }
  validateEmptyOrAlternatives() {
    return [];
  }
  buildLookaheadForAlternation(e) {
    const { prodOccurrence: n, rule: r, hasPredicates: i, dynamicTokensEnabled: s } = e, a = this.dfas, o = this.logging, c = zr(r, "Alternation", n), u = this.atn.decisionMap[c].decision, f = M(Cu({
      maxLookahead: 1,
      occurrence: n,
      prodType: "Alternation",
      rule: r
    }), (m) => M(m, (g) => g[0]));
    if (Lu(f, !1) && !s) {
      const m = Ye(f, (g, A, N) => (j(A, ($) => {
        $ && (g[$.tokenTypeIdx] = N, j($.categoryMatches, (w) => {
          g[w] = N;
        }));
      }), g), {});
      return i ? function(g) {
        var A;
        const N = this.LA(1), $ = m[N.tokenTypeIdx];
        if (g !== void 0 && $ !== void 0) {
          const w = (A = g[$]) === null || A === void 0 ? void 0 : A.GATE;
          if (w !== void 0 && w.call(this) === !1)
            return;
        }
        return $;
      } : function() {
        const g = this.LA(1);
        return m[g.tokenTypeIdx];
      };
    } else return i ? function(m) {
      const g = new jh(), A = m === void 0 ? 0 : m.length;
      for (let $ = 0; $ < A; $++) {
        const w = m == null ? void 0 : m[$].GATE;
        g.set($, w === void 0 || w.call(this));
      }
      const N = yo.call(this, a, u, g, o);
      return typeof N == "number" ? N : void 0;
    } : function() {
      const m = yo.call(this, a, u, Pu, o);
      return typeof m == "number" ? m : void 0;
    };
  }
  buildLookaheadForOptional(e) {
    const { prodOccurrence: n, rule: r, prodType: i, dynamicTokensEnabled: s } = e, a = this.dfas, o = this.logging, c = zr(r, i, n), u = this.atn.decisionMap[c].decision, f = M(Cu({
      maxLookahead: 1,
      occurrence: n,
      prodType: i,
      rule: r
    }), (m) => M(m, (g) => g[0]));
    if (Lu(f) && f[0][0] && !s) {
      const m = f[0], g = yt(m);
      if (g.length === 1 && oe(g[0].categoryMatches)) {
        const N = g[0].tokenTypeIdx;
        return function() {
          return this.LA(1).tokenTypeIdx === N;
        };
      } else {
        const A = Ye(g, (N, $) => ($ !== void 0 && (N[$.tokenTypeIdx] = !0, j($.categoryMatches, (w) => {
          N[w] = !0;
        })), N), {});
        return function() {
          const N = this.LA(1);
          return A[N.tokenTypeIdx] === !0;
        };
      }
    }
    return function() {
      const m = yo.call(this, a, u, Pu, o);
      return typeof m == "object" ? !1 : m === 0;
    };
  }
}
function Lu(t, e = !0) {
  const n = /* @__PURE__ */ new Set();
  for (const r of t) {
    const i = /* @__PURE__ */ new Set();
    for (const s of r) {
      if (s === void 0) {
        if (e)
          break;
        return !1;
      }
      const a = [s.tokenTypeIdx].concat(s.categoryMatches);
      for (const o of a)
        if (n.has(o)) {
          if (!i.has(o))
            return !1;
        } else
          n.add(o), i.add(o);
    }
  }
  return !0;
}
function UT(t) {
  const e = t.decisionStates.length, n = Array(e);
  for (let r = 0; r < e; r++)
    n[r] = FT(t.decisionStates[r], r);
  return n;
}
function yo(t, e, n, r) {
  const i = t[e](n);
  let s = i.start;
  if (s === void 0) {
    const o = JT(i.atnStartState);
    s = Bh(i, zh(o)), i.start = s;
  }
  return jT.apply(this, [i, s, n, r]);
}
function jT(t, e, n, r) {
  let i = e, s = 1;
  const a = [];
  let o = this.LA(s++);
  for (; ; ) {
    let c = KT(i, o);
    if (c === void 0 && (c = zT.apply(this, [t, i, o, s, n, r])), c === ga)
      return VT(a, i, o);
    if (c.isAcceptState === !0)
      return c.prediction;
    i = c, a.push(o), o = this.LA(s++);
  }
}
function zT(t, e, n, r, i, s) {
  const a = HT(e.configs, n, i);
  if (a.size === 0)
    return Ou(t, e, n, ga), ga;
  let o = zh(a);
  const c = XT(a, i);
  if (c !== void 0)
    o.isAcceptState = !0, o.prediction = c, o.configs.uniqueAlt = c;
  else if (tR(a)) {
    const l = Kp(a.alts);
    o.isAcceptState = !0, o.prediction = l, o.configs.uniqueAlt = l, BT.apply(this, [t, r, a.alts, s]);
  }
  return o = Ou(t, e, n, o), o;
}
function BT(t, e, n, r) {
  const i = [];
  for (let l = 1; l <= e; l++)
    i.push(this.LA(l).tokenType);
  const s = t.atnStartState, a = s.rule, o = s.production, c = qT({
    topLevelRule: a,
    ambiguityIndices: n,
    production: o,
    prefixPath: i
  });
  r(c);
}
function qT(t) {
  const e = M(t.prefixPath, (i) => Ar(i)).join(", "), n = t.production.idx === 0 ? "" : t.production.idx;
  let r = `Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${WT(t.production)}${n}> inside <${t.topLevelRule.name}> Rule,
<${e}> may appears as a prefix path in all these alternatives.
`;
  return r = r + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
For Further details.`, r;
}
function WT(t) {
  if (t instanceof Xe)
    return "SUBRULE";
  if (t instanceof ze)
    return "OPTION";
  if (t instanceof it)
    return "OR";
  if (t instanceof ft)
    return "AT_LEAST_ONE";
  if (t instanceof ht)
    return "AT_LEAST_ONE_SEP";
  if (t instanceof rt)
    return "MANY_SEP";
  if (t instanceof Ae)
    return "MANY";
  if (t instanceof ue)
    return "CONSUME";
  throw Error("non exhaustive match");
}
function VT(t, e, n) {
  const r = lt(e.configs.elements, (s) => s.state.transitions), i = pm(r.filter((s) => s instanceof xl).map((s) => s.tokenType), (s) => s.tokenTypeIdx);
  return {
    actualToken: n,
    possibleTokenTypes: i,
    tokenPath: t
  };
}
function KT(t, e) {
  return t.edges[e.tokenTypeIdx];
}
function HT(t, e, n) {
  const r = new Xo(), i = [];
  for (const a of t.elements) {
    if (n.is(a.alt) === !1)
      continue;
    if (a.state.type === ds) {
      i.push(a);
      continue;
    }
    const o = a.state.transitions.length;
    for (let c = 0; c < o; c++) {
      const l = a.state.transitions[c], u = YT(l, e);
      u !== void 0 && r.add({
        state: u,
        alt: a.alt,
        stack: a.stack
      });
    }
  }
  let s;
  if (i.length === 0 && r.size === 1 && (s = r), s === void 0) {
    s = new Xo();
    for (const a of r.elements)
      ya(a, s);
  }
  if (i.length > 0 && !ZT(s))
    for (const a of i)
      s.add(a);
  return s;
}
function YT(t, e) {
  if (t instanceof xl && ph(e, t.tokenType))
    return t.target;
}
function XT(t, e) {
  let n;
  for (const r of t.elements)
    if (e.is(r.alt) === !0) {
      if (n === void 0)
        n = r.alt;
      else if (n !== r.alt)
        return;
    }
  return n;
}
function zh(t) {
  return {
    configs: t,
    edges: {},
    isAcceptState: !1,
    prediction: -1
  };
}
function Ou(t, e, n, r) {
  return r = Bh(t, r), e.edges[n.tokenTypeIdx] = r, r;
}
function Bh(t, e) {
  if (e === ga)
    return e;
  const n = e.configs.key, r = t.states[n];
  return r !== void 0 ? r : (e.configs.finalize(), t.states[n] = e, e);
}
function JT(t) {
  const e = new Xo(), n = t.transitions.length;
  for (let r = 0; r < n; r++) {
    const s = {
      state: t.transitions[r].target,
      alt: r,
      stack: []
    };
    ya(s, e);
  }
  return e;
}
function ya(t, e) {
  const n = t.state;
  if (n.type === ds) {
    if (t.stack.length > 0) {
      const i = [...t.stack], a = {
        state: i.pop(),
        alt: t.alt,
        stack: i
      };
      ya(a, e);
    } else
      e.add(t);
    return;
  }
  n.epsilonOnlyTransitions || e.add(t);
  const r = n.transitions.length;
  for (let i = 0; i < r; i++) {
    const s = n.transitions[i], a = QT(t, s);
    a !== void 0 && ya(a, e);
  }
}
function QT(t, e) {
  if (e instanceof Dh)
    return {
      state: e.target,
      alt: t.alt,
      stack: t.stack
    };
  if (e instanceof Dl) {
    const n = [...t.stack, e.followState];
    return {
      state: e.target,
      alt: t.alt,
      stack: n
    };
  }
}
function ZT(t) {
  for (const e of t.elements)
    if (e.state.type === ds)
      return !0;
  return !1;
}
function eR(t) {
  for (const e of t.elements)
    if (e.state.type !== ds)
      return !1;
  return !0;
}
function tR(t) {
  if (eR(t))
    return !0;
  const e = nR(t.elements);
  return rR(e) && !iR(e);
}
function nR(t) {
  const e = /* @__PURE__ */ new Map();
  for (const n of t) {
    const r = Uh(n, !1);
    let i = e.get(r);
    i === void 0 && (i = {}, e.set(r, i)), i[n.alt] = !0;
  }
  return e;
}
function rR(t) {
  for (const e of Array.from(t.values()))
    if (Object.keys(e).length > 1)
      return !0;
  return !1;
}
function iR(t) {
  for (const e of Array.from(t.values()))
    if (Object.keys(e).length === 1)
      return !0;
  return !1;
}
var Jo;
(function(t) {
  function e(n) {
    return typeof n == "string";
  }
  t.is = e;
})(Jo || (Jo = {}));
var Ta;
(function(t) {
  function e(n) {
    return typeof n == "string";
  }
  t.is = e;
})(Ta || (Ta = {}));
var Qo;
(function(t) {
  t.MIN_VALUE = -2147483648, t.MAX_VALUE = 2147483647;
  function e(n) {
    return typeof n == "number" && t.MIN_VALUE <= n && n <= t.MAX_VALUE;
  }
  t.is = e;
})(Qo || (Qo = {}));
var Wi;
(function(t) {
  t.MIN_VALUE = 0, t.MAX_VALUE = 2147483647;
  function e(n) {
    return typeof n == "number" && t.MIN_VALUE <= n && n <= t.MAX_VALUE;
  }
  t.is = e;
})(Wi || (Wi = {}));
var ee;
(function(t) {
  function e(r, i) {
    return r === Number.MAX_VALUE && (r = Wi.MAX_VALUE), i === Number.MAX_VALUE && (i = Wi.MAX_VALUE), { line: r, character: i };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.objectLiteral(i) && v.uinteger(i.line) && v.uinteger(i.character);
  }
  t.is = n;
})(ee || (ee = {}));
var Y;
(function(t) {
  function e(r, i, s, a) {
    if (v.uinteger(r) && v.uinteger(i) && v.uinteger(s) && v.uinteger(a))
      return { start: ee.create(r, i), end: ee.create(s, a) };
    if (ee.is(r) && ee.is(i))
      return { start: r, end: i };
    throw new Error(`Range#create called with invalid arguments[${r}, ${i}, ${s}, ${a}]`);
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.objectLiteral(i) && ee.is(i.start) && ee.is(i.end);
  }
  t.is = n;
})(Y || (Y = {}));
var Vi;
(function(t) {
  function e(r, i) {
    return { uri: r, range: i };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.objectLiteral(i) && Y.is(i.range) && (v.string(i.uri) || v.undefined(i.uri));
  }
  t.is = n;
})(Vi || (Vi = {}));
var Zo;
(function(t) {
  function e(r, i, s, a) {
    return { targetUri: r, targetRange: i, targetSelectionRange: s, originSelectionRange: a };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.objectLiteral(i) && Y.is(i.targetRange) && v.string(i.targetUri) && Y.is(i.targetSelectionRange) && (Y.is(i.originSelectionRange) || v.undefined(i.originSelectionRange));
  }
  t.is = n;
})(Zo || (Zo = {}));
var Ra;
(function(t) {
  function e(r, i, s, a) {
    return {
      red: r,
      green: i,
      blue: s,
      alpha: a
    };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return v.objectLiteral(i) && v.numberRange(i.red, 0, 1) && v.numberRange(i.green, 0, 1) && v.numberRange(i.blue, 0, 1) && v.numberRange(i.alpha, 0, 1);
  }
  t.is = n;
})(Ra || (Ra = {}));
var ec;
(function(t) {
  function e(r, i) {
    return {
      range: r,
      color: i
    };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return v.objectLiteral(i) && Y.is(i.range) && Ra.is(i.color);
  }
  t.is = n;
})(ec || (ec = {}));
var tc;
(function(t) {
  function e(r, i, s) {
    return {
      label: r,
      textEdit: i,
      additionalTextEdits: s
    };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return v.objectLiteral(i) && v.string(i.label) && (v.undefined(i.textEdit) || Mt.is(i)) && (v.undefined(i.additionalTextEdits) || v.typedArray(i.additionalTextEdits, Mt.is));
  }
  t.is = n;
})(tc || (tc = {}));
var nc;
(function(t) {
  t.Comment = "comment", t.Imports = "imports", t.Region = "region";
})(nc || (nc = {}));
var rc;
(function(t) {
  function e(r, i, s, a, o, c) {
    const l = {
      startLine: r,
      endLine: i
    };
    return v.defined(s) && (l.startCharacter = s), v.defined(a) && (l.endCharacter = a), v.defined(o) && (l.kind = o), v.defined(c) && (l.collapsedText = c), l;
  }
  t.create = e;
  function n(r) {
    const i = r;
    return v.objectLiteral(i) && v.uinteger(i.startLine) && v.uinteger(i.startLine) && (v.undefined(i.startCharacter) || v.uinteger(i.startCharacter)) && (v.undefined(i.endCharacter) || v.uinteger(i.endCharacter)) && (v.undefined(i.kind) || v.string(i.kind));
  }
  t.is = n;
})(rc || (rc = {}));
var va;
(function(t) {
  function e(r, i) {
    return {
      location: r,
      message: i
    };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && Vi.is(i.location) && v.string(i.message);
  }
  t.is = n;
})(va || (va = {}));
var ic;
(function(t) {
  t.Error = 1, t.Warning = 2, t.Information = 3, t.Hint = 4;
})(ic || (ic = {}));
var sc;
(function(t) {
  t.Unnecessary = 1, t.Deprecated = 2;
})(sc || (sc = {}));
var ac;
(function(t) {
  function e(n) {
    const r = n;
    return v.objectLiteral(r) && v.string(r.href);
  }
  t.is = e;
})(ac || (ac = {}));
var Ki;
(function(t) {
  function e(r, i, s, a, o, c) {
    let l = { range: r, message: i };
    return v.defined(s) && (l.severity = s), v.defined(a) && (l.code = a), v.defined(o) && (l.source = o), v.defined(c) && (l.relatedInformation = c), l;
  }
  t.create = e;
  function n(r) {
    var i;
    let s = r;
    return v.defined(s) && Y.is(s.range) && v.string(s.message) && (v.number(s.severity) || v.undefined(s.severity)) && (v.integer(s.code) || v.string(s.code) || v.undefined(s.code)) && (v.undefined(s.codeDescription) || v.string((i = s.codeDescription) === null || i === void 0 ? void 0 : i.href)) && (v.string(s.source) || v.undefined(s.source)) && (v.undefined(s.relatedInformation) || v.typedArray(s.relatedInformation, va.is));
  }
  t.is = n;
})(Ki || (Ki = {}));
var Vn;
(function(t) {
  function e(r, i, ...s) {
    let a = { title: r, command: i };
    return v.defined(s) && s.length > 0 && (a.arguments = s), a;
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && v.string(i.title) && v.string(i.command);
  }
  t.is = n;
})(Vn || (Vn = {}));
var Mt;
(function(t) {
  function e(s, a) {
    return { range: s, newText: a };
  }
  t.replace = e;
  function n(s, a) {
    return { range: { start: s, end: s }, newText: a };
  }
  t.insert = n;
  function r(s) {
    return { range: s, newText: "" };
  }
  t.del = r;
  function i(s) {
    const a = s;
    return v.objectLiteral(a) && v.string(a.newText) && Y.is(a.range);
  }
  t.is = i;
})(Mt || (Mt = {}));
var Un;
(function(t) {
  function e(r, i, s) {
    const a = { label: r };
    return i !== void 0 && (a.needsConfirmation = i), s !== void 0 && (a.description = s), a;
  }
  t.create = e;
  function n(r) {
    const i = r;
    return v.objectLiteral(i) && v.string(i.label) && (v.boolean(i.needsConfirmation) || i.needsConfirmation === void 0) && (v.string(i.description) || i.description === void 0);
  }
  t.is = n;
})(Un || (Un = {}));
var Ue;
(function(t) {
  function e(n) {
    const r = n;
    return v.string(r);
  }
  t.is = e;
})(Ue || (Ue = {}));
var Jt;
(function(t) {
  function e(s, a, o) {
    return { range: s, newText: a, annotationId: o };
  }
  t.replace = e;
  function n(s, a, o) {
    return { range: { start: s, end: s }, newText: a, annotationId: o };
  }
  t.insert = n;
  function r(s, a) {
    return { range: s, newText: "", annotationId: a };
  }
  t.del = r;
  function i(s) {
    const a = s;
    return Mt.is(a) && (Un.is(a.annotationId) || Ue.is(a.annotationId));
  }
  t.is = i;
})(Jt || (Jt = {}));
var Hi;
(function(t) {
  function e(r, i) {
    return { textDocument: r, edits: i };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && Yi.is(i.textDocument) && Array.isArray(i.edits);
  }
  t.is = n;
})(Hi || (Hi = {}));
var Br;
(function(t) {
  function e(r, i, s) {
    let a = {
      kind: "create",
      uri: r
    };
    return i !== void 0 && (i.overwrite !== void 0 || i.ignoreIfExists !== void 0) && (a.options = i), s !== void 0 && (a.annotationId = s), a;
  }
  t.create = e;
  function n(r) {
    let i = r;
    return i && i.kind === "create" && v.string(i.uri) && (i.options === void 0 || (i.options.overwrite === void 0 || v.boolean(i.options.overwrite)) && (i.options.ignoreIfExists === void 0 || v.boolean(i.options.ignoreIfExists))) && (i.annotationId === void 0 || Ue.is(i.annotationId));
  }
  t.is = n;
})(Br || (Br = {}));
var qr;
(function(t) {
  function e(r, i, s, a) {
    let o = {
      kind: "rename",
      oldUri: r,
      newUri: i
    };
    return s !== void 0 && (s.overwrite !== void 0 || s.ignoreIfExists !== void 0) && (o.options = s), a !== void 0 && (o.annotationId = a), o;
  }
  t.create = e;
  function n(r) {
    let i = r;
    return i && i.kind === "rename" && v.string(i.oldUri) && v.string(i.newUri) && (i.options === void 0 || (i.options.overwrite === void 0 || v.boolean(i.options.overwrite)) && (i.options.ignoreIfExists === void 0 || v.boolean(i.options.ignoreIfExists))) && (i.annotationId === void 0 || Ue.is(i.annotationId));
  }
  t.is = n;
})(qr || (qr = {}));
var Wr;
(function(t) {
  function e(r, i, s) {
    let a = {
      kind: "delete",
      uri: r
    };
    return i !== void 0 && (i.recursive !== void 0 || i.ignoreIfNotExists !== void 0) && (a.options = i), s !== void 0 && (a.annotationId = s), a;
  }
  t.create = e;
  function n(r) {
    let i = r;
    return i && i.kind === "delete" && v.string(i.uri) && (i.options === void 0 || (i.options.recursive === void 0 || v.boolean(i.options.recursive)) && (i.options.ignoreIfNotExists === void 0 || v.boolean(i.options.ignoreIfNotExists))) && (i.annotationId === void 0 || Ue.is(i.annotationId));
  }
  t.is = n;
})(Wr || (Wr = {}));
var Ea;
(function(t) {
  function e(n) {
    let r = n;
    return r && (r.changes !== void 0 || r.documentChanges !== void 0) && (r.documentChanges === void 0 || r.documentChanges.every((i) => v.string(i.kind) ? Br.is(i) || qr.is(i) || Wr.is(i) : Hi.is(i)));
  }
  t.is = e;
})(Ea || (Ea = {}));
class Ms {
  constructor(e, n) {
    this.edits = e, this.changeAnnotations = n;
  }
  insert(e, n, r) {
    let i, s;
    if (r === void 0 ? i = Mt.insert(e, n) : Ue.is(r) ? (s = r, i = Jt.insert(e, n, r)) : (this.assertChangeAnnotations(this.changeAnnotations), s = this.changeAnnotations.manage(r), i = Jt.insert(e, n, s)), this.edits.push(i), s !== void 0)
      return s;
  }
  replace(e, n, r) {
    let i, s;
    if (r === void 0 ? i = Mt.replace(e, n) : Ue.is(r) ? (s = r, i = Jt.replace(e, n, r)) : (this.assertChangeAnnotations(this.changeAnnotations), s = this.changeAnnotations.manage(r), i = Jt.replace(e, n, s)), this.edits.push(i), s !== void 0)
      return s;
  }
  delete(e, n) {
    let r, i;
    if (n === void 0 ? r = Mt.del(e) : Ue.is(n) ? (i = n, r = Jt.del(e, n)) : (this.assertChangeAnnotations(this.changeAnnotations), i = this.changeAnnotations.manage(n), r = Jt.del(e, i)), this.edits.push(r), i !== void 0)
      return i;
  }
  add(e) {
    this.edits.push(e);
  }
  all() {
    return this.edits;
  }
  clear() {
    this.edits.splice(0, this.edits.length);
  }
  assertChangeAnnotations(e) {
    if (e === void 0)
      throw new Error("Text edit change is not configured to manage change annotations.");
  }
}
class xu {
  constructor(e) {
    this._annotations = e === void 0 ? /* @__PURE__ */ Object.create(null) : e, this._counter = 0, this._size = 0;
  }
  all() {
    return this._annotations;
  }
  get size() {
    return this._size;
  }
  manage(e, n) {
    let r;
    if (Ue.is(e) ? r = e : (r = this.nextId(), n = e), this._annotations[r] !== void 0)
      throw new Error(`Id ${r} is already in use.`);
    if (n === void 0)
      throw new Error(`No annotation provided for id ${r}`);
    return this._annotations[r] = n, this._size++, r;
  }
  nextId() {
    return this._counter++, this._counter.toString();
  }
}
class sR {
  constructor(e) {
    this._textEditChanges = /* @__PURE__ */ Object.create(null), e !== void 0 ? (this._workspaceEdit = e, e.documentChanges ? (this._changeAnnotations = new xu(e.changeAnnotations), e.changeAnnotations = this._changeAnnotations.all(), e.documentChanges.forEach((n) => {
      if (Hi.is(n)) {
        const r = new Ms(n.edits, this._changeAnnotations);
        this._textEditChanges[n.textDocument.uri] = r;
      }
    })) : e.changes && Object.keys(e.changes).forEach((n) => {
      const r = new Ms(e.changes[n]);
      this._textEditChanges[n] = r;
    })) : this._workspaceEdit = {};
  }
  /**
   * Returns the underlying {@link WorkspaceEdit} literal
   * use to be returned from a workspace edit operation like rename.
   */
  get edit() {
    return this.initDocumentChanges(), this._changeAnnotations !== void 0 && (this._changeAnnotations.size === 0 ? this._workspaceEdit.changeAnnotations = void 0 : this._workspaceEdit.changeAnnotations = this._changeAnnotations.all()), this._workspaceEdit;
  }
  getTextEditChange(e) {
    if (Yi.is(e)) {
      if (this.initDocumentChanges(), this._workspaceEdit.documentChanges === void 0)
        throw new Error("Workspace edit is not configured for document changes.");
      const n = { uri: e.uri, version: e.version };
      let r = this._textEditChanges[n.uri];
      if (!r) {
        const i = [], s = {
          textDocument: n,
          edits: i
        };
        this._workspaceEdit.documentChanges.push(s), r = new Ms(i, this._changeAnnotations), this._textEditChanges[n.uri] = r;
      }
      return r;
    } else {
      if (this.initChanges(), this._workspaceEdit.changes === void 0)
        throw new Error("Workspace edit is not configured for normal text edit changes.");
      let n = this._textEditChanges[e];
      if (!n) {
        let r = [];
        this._workspaceEdit.changes[e] = r, n = new Ms(r), this._textEditChanges[e] = n;
      }
      return n;
    }
  }
  initDocumentChanges() {
    this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0 && (this._changeAnnotations = new xu(), this._workspaceEdit.documentChanges = [], this._workspaceEdit.changeAnnotations = this._changeAnnotations.all());
  }
  initChanges() {
    this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0 && (this._workspaceEdit.changes = /* @__PURE__ */ Object.create(null));
  }
  createFile(e, n, r) {
    if (this.initDocumentChanges(), this._workspaceEdit.documentChanges === void 0)
      throw new Error("Workspace edit is not configured for document changes.");
    let i;
    Un.is(n) || Ue.is(n) ? i = n : r = n;
    let s, a;
    if (i === void 0 ? s = Br.create(e, r) : (a = Ue.is(i) ? i : this._changeAnnotations.manage(i), s = Br.create(e, r, a)), this._workspaceEdit.documentChanges.push(s), a !== void 0)
      return a;
  }
  renameFile(e, n, r, i) {
    if (this.initDocumentChanges(), this._workspaceEdit.documentChanges === void 0)
      throw new Error("Workspace edit is not configured for document changes.");
    let s;
    Un.is(r) || Ue.is(r) ? s = r : i = r;
    let a, o;
    if (s === void 0 ? a = qr.create(e, n, i) : (o = Ue.is(s) ? s : this._changeAnnotations.manage(s), a = qr.create(e, n, i, o)), this._workspaceEdit.documentChanges.push(a), o !== void 0)
      return o;
  }
  deleteFile(e, n, r) {
    if (this.initDocumentChanges(), this._workspaceEdit.documentChanges === void 0)
      throw new Error("Workspace edit is not configured for document changes.");
    let i;
    Un.is(n) || Ue.is(n) ? i = n : r = n;
    let s, a;
    if (i === void 0 ? s = Wr.create(e, r) : (a = Ue.is(i) ? i : this._changeAnnotations.manage(i), s = Wr.create(e, r, a)), this._workspaceEdit.documentChanges.push(s), a !== void 0)
      return a;
  }
}
var oc;
(function(t) {
  function e(r) {
    return { uri: r };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && v.string(i.uri);
  }
  t.is = n;
})(oc || (oc = {}));
var cc;
(function(t) {
  function e(r, i) {
    return { uri: r, version: i };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && v.string(i.uri) && v.integer(i.version);
  }
  t.is = n;
})(cc || (cc = {}));
var Yi;
(function(t) {
  function e(r, i) {
    return { uri: r, version: i };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && v.string(i.uri) && (i.version === null || v.integer(i.version));
  }
  t.is = n;
})(Yi || (Yi = {}));
var lc;
(function(t) {
  function e(r, i, s, a) {
    return { uri: r, languageId: i, version: s, text: a };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && v.string(i.uri) && v.string(i.languageId) && v.integer(i.version) && v.string(i.text);
  }
  t.is = n;
})(lc || (lc = {}));
var Aa;
(function(t) {
  t.PlainText = "plaintext", t.Markdown = "markdown";
  function e(n) {
    const r = n;
    return r === t.PlainText || r === t.Markdown;
  }
  t.is = e;
})(Aa || (Aa = {}));
var Vr;
(function(t) {
  function e(n) {
    const r = n;
    return v.objectLiteral(n) && Aa.is(r.kind) && v.string(r.value);
  }
  t.is = e;
})(Vr || (Vr = {}));
var uc;
(function(t) {
  t.Text = 1, t.Method = 2, t.Function = 3, t.Constructor = 4, t.Field = 5, t.Variable = 6, t.Class = 7, t.Interface = 8, t.Module = 9, t.Property = 10, t.Unit = 11, t.Value = 12, t.Enum = 13, t.Keyword = 14, t.Snippet = 15, t.Color = 16, t.File = 17, t.Reference = 18, t.Folder = 19, t.EnumMember = 20, t.Constant = 21, t.Struct = 22, t.Event = 23, t.Operator = 24, t.TypeParameter = 25;
})(uc || (uc = {}));
var dc;
(function(t) {
  t.PlainText = 1, t.Snippet = 2;
})(dc || (dc = {}));
var fc;
(function(t) {
  t.Deprecated = 1;
})(fc || (fc = {}));
var hc;
(function(t) {
  function e(r, i, s) {
    return { newText: r, insert: i, replace: s };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return i && v.string(i.newText) && Y.is(i.insert) && Y.is(i.replace);
  }
  t.is = n;
})(hc || (hc = {}));
var pc;
(function(t) {
  t.asIs = 1, t.adjustIndentation = 2;
})(pc || (pc = {}));
var mc;
(function(t) {
  function e(n) {
    const r = n;
    return r && (v.string(r.detail) || r.detail === void 0) && (v.string(r.description) || r.description === void 0);
  }
  t.is = e;
})(mc || (mc = {}));
var gc;
(function(t) {
  function e(n) {
    return { label: n };
  }
  t.create = e;
})(gc || (gc = {}));
var yc;
(function(t) {
  function e(n, r) {
    return { items: n || [], isIncomplete: !!r };
  }
  t.create = e;
})(yc || (yc = {}));
var Xi;
(function(t) {
  function e(r) {
    return r.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&");
  }
  t.fromPlainText = e;
  function n(r) {
    const i = r;
    return v.string(i) || v.objectLiteral(i) && v.string(i.language) && v.string(i.value);
  }
  t.is = n;
})(Xi || (Xi = {}));
var Tc;
(function(t) {
  function e(n) {
    let r = n;
    return !!r && v.objectLiteral(r) && (Vr.is(r.contents) || Xi.is(r.contents) || v.typedArray(r.contents, Xi.is)) && (n.range === void 0 || Y.is(n.range));
  }
  t.is = e;
})(Tc || (Tc = {}));
var Rc;
(function(t) {
  function e(n, r) {
    return r ? { label: n, documentation: r } : { label: n };
  }
  t.create = e;
})(Rc || (Rc = {}));
var vc;
(function(t) {
  function e(n, r, ...i) {
    let s = { label: n };
    return v.defined(r) && (s.documentation = r), v.defined(i) ? s.parameters = i : s.parameters = [], s;
  }
  t.create = e;
})(vc || (vc = {}));
var Ec;
(function(t) {
  t.Text = 1, t.Read = 2, t.Write = 3;
})(Ec || (Ec = {}));
var Ac;
(function(t) {
  function e(n, r) {
    let i = { range: n };
    return v.number(r) && (i.kind = r), i;
  }
  t.create = e;
})(Ac || (Ac = {}));
var Sc;
(function(t) {
  t.File = 1, t.Module = 2, t.Namespace = 3, t.Package = 4, t.Class = 5, t.Method = 6, t.Property = 7, t.Field = 8, t.Constructor = 9, t.Enum = 10, t.Interface = 11, t.Function = 12, t.Variable = 13, t.Constant = 14, t.String = 15, t.Number = 16, t.Boolean = 17, t.Array = 18, t.Object = 19, t.Key = 20, t.Null = 21, t.EnumMember = 22, t.Struct = 23, t.Event = 24, t.Operator = 25, t.TypeParameter = 26;
})(Sc || (Sc = {}));
var Cc;
(function(t) {
  t.Deprecated = 1;
})(Cc || (Cc = {}));
var kc;
(function(t) {
  function e(n, r, i, s, a) {
    let o = {
      name: n,
      kind: r,
      location: { uri: s, range: i }
    };
    return a && (o.containerName = a), o;
  }
  t.create = e;
})(kc || (kc = {}));
var Nc;
(function(t) {
  function e(n, r, i, s) {
    return s !== void 0 ? { name: n, kind: r, location: { uri: i, range: s } } : { name: n, kind: r, location: { uri: i } };
  }
  t.create = e;
})(Nc || (Nc = {}));
var wc;
(function(t) {
  function e(r, i, s, a, o, c) {
    let l = {
      name: r,
      detail: i,
      kind: s,
      range: a,
      selectionRange: o
    };
    return c !== void 0 && (l.children = c), l;
  }
  t.create = e;
  function n(r) {
    let i = r;
    return i && v.string(i.name) && v.number(i.kind) && Y.is(i.range) && Y.is(i.selectionRange) && (i.detail === void 0 || v.string(i.detail)) && (i.deprecated === void 0 || v.boolean(i.deprecated)) && (i.children === void 0 || Array.isArray(i.children)) && (i.tags === void 0 || Array.isArray(i.tags));
  }
  t.is = n;
})(wc || (wc = {}));
var bc;
(function(t) {
  t.Empty = "", t.QuickFix = "quickfix", t.Refactor = "refactor", t.RefactorExtract = "refactor.extract", t.RefactorInline = "refactor.inline", t.RefactorRewrite = "refactor.rewrite", t.Source = "source", t.SourceOrganizeImports = "source.organizeImports", t.SourceFixAll = "source.fixAll";
})(bc || (bc = {}));
var Ji;
(function(t) {
  t.Invoked = 1, t.Automatic = 2;
})(Ji || (Ji = {}));
var Ic;
(function(t) {
  function e(r, i, s) {
    let a = { diagnostics: r };
    return i != null && (a.only = i), s != null && (a.triggerKind = s), a;
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && v.typedArray(i.diagnostics, Ki.is) && (i.only === void 0 || v.typedArray(i.only, v.string)) && (i.triggerKind === void 0 || i.triggerKind === Ji.Invoked || i.triggerKind === Ji.Automatic);
  }
  t.is = n;
})(Ic || (Ic = {}));
var _c;
(function(t) {
  function e(r, i, s) {
    let a = { title: r }, o = !0;
    return typeof i == "string" ? (o = !1, a.kind = i) : Vn.is(i) ? a.command = i : a.edit = i, o && s !== void 0 && (a.kind = s), a;
  }
  t.create = e;
  function n(r) {
    let i = r;
    return i && v.string(i.title) && (i.diagnostics === void 0 || v.typedArray(i.diagnostics, Ki.is)) && (i.kind === void 0 || v.string(i.kind)) && (i.edit !== void 0 || i.command !== void 0) && (i.command === void 0 || Vn.is(i.command)) && (i.isPreferred === void 0 || v.boolean(i.isPreferred)) && (i.edit === void 0 || Ea.is(i.edit));
  }
  t.is = n;
})(_c || (_c = {}));
var $c;
(function(t) {
  function e(r, i) {
    let s = { range: r };
    return v.defined(i) && (s.data = i), s;
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && Y.is(i.range) && (v.undefined(i.command) || Vn.is(i.command));
  }
  t.is = n;
})($c || ($c = {}));
var Pc;
(function(t) {
  function e(r, i) {
    return { tabSize: r, insertSpaces: i };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && v.uinteger(i.tabSize) && v.boolean(i.insertSpaces);
  }
  t.is = n;
})(Pc || (Pc = {}));
var Lc;
(function(t) {
  function e(r, i, s) {
    return { range: r, target: i, data: s };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.defined(i) && Y.is(i.range) && (v.undefined(i.target) || v.string(i.target));
  }
  t.is = n;
})(Lc || (Lc = {}));
var Oc;
(function(t) {
  function e(r, i) {
    return { range: r, parent: i };
  }
  t.create = e;
  function n(r) {
    let i = r;
    return v.objectLiteral(i) && Y.is(i.range) && (i.parent === void 0 || t.is(i.parent));
  }
  t.is = n;
})(Oc || (Oc = {}));
var xc;
(function(t) {
  t.namespace = "namespace", t.type = "type", t.class = "class", t.enum = "enum", t.interface = "interface", t.struct = "struct", t.typeParameter = "typeParameter", t.parameter = "parameter", t.variable = "variable", t.property = "property", t.enumMember = "enumMember", t.event = "event", t.function = "function", t.method = "method", t.macro = "macro", t.keyword = "keyword", t.modifier = "modifier", t.comment = "comment", t.string = "string", t.number = "number", t.regexp = "regexp", t.operator = "operator", t.decorator = "decorator";
})(xc || (xc = {}));
var Dc;
(function(t) {
  t.declaration = "declaration", t.definition = "definition", t.readonly = "readonly", t.static = "static", t.deprecated = "deprecated", t.abstract = "abstract", t.async = "async", t.modification = "modification", t.documentation = "documentation", t.defaultLibrary = "defaultLibrary";
})(Dc || (Dc = {}));
var Mc;
(function(t) {
  function e(n) {
    const r = n;
    return v.objectLiteral(r) && (r.resultId === void 0 || typeof r.resultId == "string") && Array.isArray(r.data) && (r.data.length === 0 || typeof r.data[0] == "number");
  }
  t.is = e;
})(Mc || (Mc = {}));
var Fc;
(function(t) {
  function e(r, i) {
    return { range: r, text: i };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return i != null && Y.is(i.range) && v.string(i.text);
  }
  t.is = n;
})(Fc || (Fc = {}));
var Gc;
(function(t) {
  function e(r, i, s) {
    return { range: r, variableName: i, caseSensitiveLookup: s };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return i != null && Y.is(i.range) && v.boolean(i.caseSensitiveLookup) && (v.string(i.variableName) || i.variableName === void 0);
  }
  t.is = n;
})(Gc || (Gc = {}));
var Uc;
(function(t) {
  function e(r, i) {
    return { range: r, expression: i };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return i != null && Y.is(i.range) && (v.string(i.expression) || i.expression === void 0);
  }
  t.is = n;
})(Uc || (Uc = {}));
var jc;
(function(t) {
  function e(r, i) {
    return { frameId: r, stoppedLocation: i };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return v.defined(i) && Y.is(r.stoppedLocation);
  }
  t.is = n;
})(jc || (jc = {}));
var Sa;
(function(t) {
  t.Type = 1, t.Parameter = 2;
  function e(n) {
    return n === 1 || n === 2;
  }
  t.is = e;
})(Sa || (Sa = {}));
var Ca;
(function(t) {
  function e(r) {
    return { value: r };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return v.objectLiteral(i) && (i.tooltip === void 0 || v.string(i.tooltip) || Vr.is(i.tooltip)) && (i.location === void 0 || Vi.is(i.location)) && (i.command === void 0 || Vn.is(i.command));
  }
  t.is = n;
})(Ca || (Ca = {}));
var zc;
(function(t) {
  function e(r, i, s) {
    const a = { position: r, label: i };
    return s !== void 0 && (a.kind = s), a;
  }
  t.create = e;
  function n(r) {
    const i = r;
    return v.objectLiteral(i) && ee.is(i.position) && (v.string(i.label) || v.typedArray(i.label, Ca.is)) && (i.kind === void 0 || Sa.is(i.kind)) && i.textEdits === void 0 || v.typedArray(i.textEdits, Mt.is) && (i.tooltip === void 0 || v.string(i.tooltip) || Vr.is(i.tooltip)) && (i.paddingLeft === void 0 || v.boolean(i.paddingLeft)) && (i.paddingRight === void 0 || v.boolean(i.paddingRight));
  }
  t.is = n;
})(zc || (zc = {}));
var Bc;
(function(t) {
  function e(n) {
    return { kind: "snippet", value: n };
  }
  t.createSnippet = e;
})(Bc || (Bc = {}));
var qc;
(function(t) {
  function e(n, r, i, s) {
    return { insertText: n, filterText: r, range: i, command: s };
  }
  t.create = e;
})(qc || (qc = {}));
var Wc;
(function(t) {
  function e(n) {
    return { items: n };
  }
  t.create = e;
})(Wc || (Wc = {}));
var Vc;
(function(t) {
  t.Invoked = 0, t.Automatic = 1;
})(Vc || (Vc = {}));
var Kc;
(function(t) {
  function e(n, r) {
    return { range: n, text: r };
  }
  t.create = e;
})(Kc || (Kc = {}));
var Hc;
(function(t) {
  function e(n, r) {
    return { triggerKind: n, selectedCompletionInfo: r };
  }
  t.create = e;
})(Hc || (Hc = {}));
var Yc;
(function(t) {
  function e(n) {
    const r = n;
    return v.objectLiteral(r) && Ta.is(r.uri) && v.string(r.name);
  }
  t.is = e;
})(Yc || (Yc = {}));
const aR = [`
`, `\r
`, "\r"];
var Xc;
(function(t) {
  function e(s, a, o, c) {
    return new oR(s, a, o, c);
  }
  t.create = e;
  function n(s) {
    let a = s;
    return !!(v.defined(a) && v.string(a.uri) && (v.undefined(a.languageId) || v.string(a.languageId)) && v.uinteger(a.lineCount) && v.func(a.getText) && v.func(a.positionAt) && v.func(a.offsetAt));
  }
  t.is = n;
  function r(s, a) {
    let o = s.getText(), c = i(a, (u, f) => {
      let m = u.range.start.line - f.range.start.line;
      return m === 0 ? u.range.start.character - f.range.start.character : m;
    }), l = o.length;
    for (let u = c.length - 1; u >= 0; u--) {
      let f = c[u], m = s.offsetAt(f.range.start), g = s.offsetAt(f.range.end);
      if (g <= l)
        o = o.substring(0, m) + f.newText + o.substring(g, o.length);
      else
        throw new Error("Overlapping edit");
      l = m;
    }
    return o;
  }
  t.applyEdits = r;
  function i(s, a) {
    if (s.length <= 1)
      return s;
    const o = s.length / 2 | 0, c = s.slice(0, o), l = s.slice(o);
    i(c, a), i(l, a);
    let u = 0, f = 0, m = 0;
    for (; u < c.length && f < l.length; )
      a(c[u], l[f]) <= 0 ? s[m++] = c[u++] : s[m++] = l[f++];
    for (; u < c.length; )
      s[m++] = c[u++];
    for (; f < l.length; )
      s[m++] = l[f++];
    return s;
  }
})(Xc || (Xc = {}));
let oR = class {
  constructor(e, n, r, i) {
    this._uri = e, this._languageId = n, this._version = r, this._content = i, this._lineOffsets = void 0;
  }
  get uri() {
    return this._uri;
  }
  get languageId() {
    return this._languageId;
  }
  get version() {
    return this._version;
  }
  getText(e) {
    if (e) {
      let n = this.offsetAt(e.start), r = this.offsetAt(e.end);
      return this._content.substring(n, r);
    }
    return this._content;
  }
  update(e, n) {
    this._content = e.text, this._version = n, this._lineOffsets = void 0;
  }
  getLineOffsets() {
    if (this._lineOffsets === void 0) {
      let e = [], n = this._content, r = !0;
      for (let i = 0; i < n.length; i++) {
        r && (e.push(i), r = !1);
        let s = n.charAt(i);
        r = s === "\r" || s === `
`, s === "\r" && i + 1 < n.length && n.charAt(i + 1) === `
` && i++;
      }
      r && n.length > 0 && e.push(n.length), this._lineOffsets = e;
    }
    return this._lineOffsets;
  }
  positionAt(e) {
    e = Math.max(Math.min(e, this._content.length), 0);
    let n = this.getLineOffsets(), r = 0, i = n.length;
    if (i === 0)
      return ee.create(0, e);
    for (; r < i; ) {
      let a = Math.floor((r + i) / 2);
      n[a] > e ? i = a : r = a + 1;
    }
    let s = r - 1;
    return ee.create(s, e - n[s]);
  }
  offsetAt(e) {
    let n = this.getLineOffsets();
    if (e.line >= n.length)
      return this._content.length;
    if (e.line < 0)
      return 0;
    let r = n[e.line], i = e.line + 1 < n.length ? n[e.line + 1] : this._content.length;
    return Math.max(Math.min(r + e.character, i), r);
  }
  get lineCount() {
    return this.getLineOffsets().length;
  }
};
var v;
(function(t) {
  const e = Object.prototype.toString;
  function n(g) {
    return typeof g < "u";
  }
  t.defined = n;
  function r(g) {
    return typeof g > "u";
  }
  t.undefined = r;
  function i(g) {
    return g === !0 || g === !1;
  }
  t.boolean = i;
  function s(g) {
    return e.call(g) === "[object String]";
  }
  t.string = s;
  function a(g) {
    return e.call(g) === "[object Number]";
  }
  t.number = a;
  function o(g, A, N) {
    return e.call(g) === "[object Number]" && A <= g && g <= N;
  }
  t.numberRange = o;
  function c(g) {
    return e.call(g) === "[object Number]" && -2147483648 <= g && g <= 2147483647;
  }
  t.integer = c;
  function l(g) {
    return e.call(g) === "[object Number]" && 0 <= g && g <= 2147483647;
  }
  t.uinteger = l;
  function u(g) {
    return e.call(g) === "[object Function]";
  }
  t.func = u;
  function f(g) {
    return g !== null && typeof g == "object";
  }
  t.objectLiteral = f;
  function m(g, A) {
    return Array.isArray(g) && g.every(A);
  }
  t.typedArray = m;
})(v || (v = {}));
const cR = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
  __proto__: null,
  get AnnotatedTextEdit() {
    return Jt;
  },
  get ChangeAnnotation() {
    return Un;
  },
  get ChangeAnnotationIdentifier() {
    return Ue;
  },
  get CodeAction() {
    return _c;
  },
  get CodeActionContext() {
    return Ic;
  },
  get CodeActionKind() {
    return bc;
  },
  get CodeActionTriggerKind() {
    return Ji;
  },
  get CodeDescription() {
    return ac;
  },
  get CodeLens() {
    return $c;
  },
  get Color() {
    return Ra;
  },
  get ColorInformation() {
    return ec;
  },
  get ColorPresentation() {
    return tc;
  },
  get Command() {
    return Vn;
  },
  get CompletionItem() {
    return gc;
  },
  get CompletionItemKind() {
    return uc;
  },
  get CompletionItemLabelDetails() {
    return mc;
  },
  get CompletionItemTag() {
    return fc;
  },
  get CompletionList() {
    return yc;
  },
  get CreateFile() {
    return Br;
  },
  get DeleteFile() {
    return Wr;
  },
  get Diagnostic() {
    return Ki;
  },
  get DiagnosticRelatedInformation() {
    return va;
  },
  get DiagnosticSeverity() {
    return ic;
  },
  get DiagnosticTag() {
    return sc;
  },
  get DocumentHighlight() {
    return Ac;
  },
  get DocumentHighlightKind() {
    return Ec;
  },
  get DocumentLink() {
    return Lc;
  },
  get DocumentSymbol() {
    return wc;
  },
  get DocumentUri() {
    return Jo;
  },
  EOL: aR,
  get FoldingRange() {
    return rc;
  },
  get FoldingRangeKind() {
    return nc;
  },
  get FormattingOptions() {
    return Pc;
  },
  get Hover() {
    return Tc;
  },
  get InlayHint() {
    return zc;
  },
  get InlayHintKind() {
    return Sa;
  },
  get InlayHintLabelPart() {
    return Ca;
  },
  get InlineCompletionContext() {
    return Hc;
  },
  get InlineCompletionItem() {
    return qc;
  },
  get InlineCompletionList() {
    return Wc;
  },
  get InlineCompletionTriggerKind() {
    return Vc;
  },
  get InlineValueContext() {
    return jc;
  },
  get InlineValueEvaluatableExpression() {
    return Uc;
  },
  get InlineValueText() {
    return Fc;
  },
  get InlineValueVariableLookup() {
    return Gc;
  },
  get InsertReplaceEdit() {
    return hc;
  },
  get InsertTextFormat() {
    return dc;
  },
  get InsertTextMode() {
    return pc;
  },
  get Location() {
    return Vi;
  },
  get LocationLink() {
    return Zo;
  },
  get MarkedString() {
    return Xi;
  },
  get MarkupContent() {
    return Vr;
  },
  get MarkupKind() {
    return Aa;
  },
  get OptionalVersionedTextDocumentIdentifier() {
    return Yi;
  },
  get ParameterInformation() {
    return Rc;
  },
  get Position() {
    return ee;
  },
  get Range() {
    return Y;
  },
  get RenameFile() {
    return qr;
  },
  get SelectedCompletionInfo() {
    return Kc;
  },
  get SelectionRange() {
    return Oc;
  },
  get SemanticTokenModifiers() {
    return Dc;
  },
  get SemanticTokenTypes() {
    return xc;
  },
  get SemanticTokens() {
    return Mc;
  },
  get SignatureInformation() {
    return vc;
  },
  get StringValue() {
    return Bc;
  },
  get SymbolInformation() {
    return kc;
  },
  get SymbolKind() {
    return Sc;
  },
  get SymbolTag() {
    return Cc;
  },
  get TextDocument() {
    return Xc;
  },
  get TextDocumentEdit() {
    return Hi;
  },
  get TextDocumentIdentifier() {
    return oc;
  },
  get TextDocumentItem() {
    return lc;
  },
  get TextEdit() {
    return Mt;
  },
  get URI() {
    return Ta;
  },
  get VersionedTextDocumentIdentifier() {
    return cc;
  },
  WorkspaceChange: sR,
  get WorkspaceEdit() {
    return Ea;
  },
  get WorkspaceFolder() {
    return Yc;
  },
  get WorkspaceSymbol() {
    return Nc;
  },
  get integer() {
    return Qo;
  },
  get uinteger() {
    return Wi;
  }
}, Symbol.toStringTag, { value: "Module" }));
class lR {
  constructor() {
    this.nodeStack = [];
  }
  get current() {
    return this.nodeStack[this.nodeStack.length - 1] ?? this.rootNode;
  }
  buildRootNode(e) {
    return this.rootNode = new Wh(e), this.rootNode.root = this.rootNode, this.nodeStack = [this.rootNode], this.rootNode;
  }
  buildCompositeNode(e) {
    const n = new Gl();
    return n.grammarSource = e, n.root = this.rootNode, this.current.content.push(n), this.nodeStack.push(n), n;
  }
  buildLeafNode(e, n) {
    const r = new Jc(e.startOffset, e.image.length, Go(e), e.tokenType, !n);
    return r.grammarSource = n, r.root = this.rootNode, this.current.content.push(r), r;
  }
  removeNode(e) {
    const n = e.container;
    if (n) {
      const r = n.content.indexOf(e);
      r >= 0 && n.content.splice(r, 1);
    }
  }
  addHiddenNodes(e) {
    const n = [];
    for (const s of e) {
      const a = new Jc(s.startOffset, s.image.length, Go(s), s.tokenType, !0);
      a.root = this.rootNode, n.push(a);
    }
    let r = this.current, i = !1;
    if (r.content.length > 0) {
      r.content.push(...n);
      return;
    }
    for (; r.container; ) {
      const s = r.container.content.indexOf(r);
      if (s > 0) {
        r.container.content.splice(s, 0, ...n), i = !0;
        break;
      }
      r = r.container;
    }
    i || this.rootNode.content.unshift(...n);
  }
  construct(e) {
    const n = this.current;
    typeof e.$type == "string" && !e.$infixName && (this.current.astNode = e), e.$cstNode = n;
    const r = this.nodeStack.pop();
    (r == null ? void 0 : r.content.length) === 0 && this.removeNode(r);
  }
}
class qh {
  get hidden() {
    return !1;
  }
  get astNode() {
    var n, r;
    const e = typeof ((n = this._astNode) == null ? void 0 : n.$type) == "string" ? this._astNode : (r = this.container) == null ? void 0 : r.astNode;
    if (!e)
      throw new Error("This node has no associated AST element");
    return e;
  }
  set astNode(e) {
    this._astNode = e;
  }
  get text() {
    return this.root.fullText.substring(this.offset, this.end);
  }
}
class Jc extends qh {
  get offset() {
    return this._offset;
  }
  get length() {
    return this._length;
  }
  get end() {
    return this._offset + this._length;
  }
  get hidden() {
    return this._hidden;
  }
  get tokenType() {
    return this._tokenType;
  }
  get range() {
    return this._range;
  }
  constructor(e, n, r, i, s = !1) {
    super(), this._hidden = s, this._offset = e, this._tokenType = i, this._length = n, this._range = r;
  }
}
class Gl extends qh {
  constructor() {
    super(...arguments), this.content = new Ul(this);
  }
  get offset() {
    var e;
    return ((e = this.firstNonHiddenNode) == null ? void 0 : e.offset) ?? 0;
  }
  get length() {
    return this.end - this.offset;
  }
  get end() {
    var e;
    return ((e = this.lastNonHiddenNode) == null ? void 0 : e.end) ?? 0;
  }
  get range() {
    const e = this.firstNonHiddenNode, n = this.lastNonHiddenNode;
    if (e && n) {
      if (this._rangeCache === void 0) {
        const { range: r } = e, { range: i } = n;
        this._rangeCache = { start: r.start, end: i.end.line < r.start.line ? r.start : i.end };
      }
      return this._rangeCache;
    } else
      return { start: ee.create(0, 0), end: ee.create(0, 0) };
  }
  get firstNonHiddenNode() {
    for (const e of this.content)
      if (!e.hidden)
        return e;
    return this.content[0];
  }
  get lastNonHiddenNode() {
    for (let e = this.content.length - 1; e >= 0; e--) {
      const n = this.content[e];
      if (!n.hidden)
        return n;
    }
    return this.content[this.content.length - 1];
  }
}
class Ul extends Array {
  constructor(e) {
    super(), this.parent = e, Object.setPrototypeOf(this, Ul.prototype);
  }
  push(...e) {
    return this.addParents(e), super.push(...e);
  }
  unshift(...e) {
    return this.addParents(e), super.unshift(...e);
  }
  splice(e, n, ...r) {
    return this.addParents(r), super.splice(e, n, ...r);
  }
  addParents(e) {
    for (const n of e)
      n.container = this.parent;
  }
}
class Wh extends Gl {
  get text() {
    return this._text.substring(this.offset, this.end);
  }
  get fullText() {
    return this._text;
  }
  constructor(e) {
    super(), this._text = "", this._text = e ?? "";
  }
}
const Qc = Symbol("Datatype");
function To(t) {
  return t.$type === Qc;
}
const Du = "​", Vh = (t) => t.endsWith(Du) ? t : t + Du;
class Kh {
  constructor(e) {
    var i;
    this._unorderedGroups = /* @__PURE__ */ new Map(), this.allRules = /* @__PURE__ */ new Map(), this.lexer = e.parser.Lexer;
    const n = this.lexer.definition, r = e.LanguageMetaData.mode === "production";
    (i = e.shared.profilers.LangiumProfiler) != null && i.isActive("parsing") ? this.wrapper = new pR(n, {
      ...e.parser.ParserConfig,
      skipValidations: r,
      errorMessageProvider: e.parser.ParserErrorMessageProvider
    }, e.shared.profilers.LangiumProfiler.createTask("parsing", e.LanguageMetaData.languageId)) : this.wrapper = new Yh(n, {
      ...e.parser.ParserConfig,
      skipValidations: r,
      errorMessageProvider: e.parser.ParserErrorMessageProvider
    });
  }
  alternatives(e, n) {
    this.wrapper.wrapOr(e, n);
  }
  optional(e, n) {
    this.wrapper.wrapOption(e, n);
  }
  many(e, n) {
    this.wrapper.wrapMany(e, n);
  }
  atLeastOne(e, n) {
    this.wrapper.wrapAtLeastOne(e, n);
  }
  getRule(e) {
    return this.allRules.get(e);
  }
  isRecording() {
    return this.wrapper.IS_RECORDING;
  }
  get unorderedGroups() {
    return this._unorderedGroups;
  }
  getRuleStack() {
    return this.wrapper.RULE_STACK;
  }
  finalize() {
    this.wrapper.wrapSelfAnalysis();
  }
}
class uR extends Kh {
  get current() {
    return this.stack[this.stack.length - 1];
  }
  constructor(e) {
    super(e), this.nodeBuilder = new lR(), this.stack = [], this.assignmentMap = /* @__PURE__ */ new Map(), this.operatorPrecedence = /* @__PURE__ */ new Map(), this.linker = e.references.Linker, this.converter = e.parser.ValueConverter, this.astReflection = e.shared.AstReflection;
  }
  rule(e, n) {
    const r = this.computeRuleType(e);
    let i;
    sa(e) && (i = e.name, this.registerPrecedenceMap(e));
    const s = this.wrapper.DEFINE_RULE(Vh(e.name), this.startImplementation(r, i, n).bind(this));
    return this.allRules.set(e.name, s), an(e) && e.entry && (this.mainRule = s), s;
  }
  registerPrecedenceMap(e) {
    const n = e.name, r = /* @__PURE__ */ new Map();
    for (let i = 0; i < e.operators.precedences.length; i++) {
      const s = e.operators.precedences[i];
      for (const a of s.operators)
        r.set(a.value, {
          precedence: i,
          rightAssoc: s.associativity === "right"
        });
    }
    this.operatorPrecedence.set(n, r);
  }
  computeRuleType(e) {
    return sa(e) ? qi(e) : e.fragment ? void 0 : Qf(e) ? Qc : qi(e);
  }
  parse(e, n = {}) {
    this.nodeBuilder.buildRootNode(e);
    const r = this.lexerResult = this.lexer.tokenize(e);
    this.wrapper.input = r.tokens;
    const i = n.rule ? this.allRules.get(n.rule) : this.mainRule;
    if (!i)
      throw new Error(n.rule ? `No rule found with name '${n.rule}'` : "No main rule available.");
    const s = this.doParse(i);
    return this.nodeBuilder.addHiddenNodes(r.hidden), this.unorderedGroups.clear(), this.lexerResult = void 0, $o(s, { deep: !0 }), {
      value: s,
      lexerErrors: r.errors,
      lexerReport: r.report,
      parserErrors: this.wrapper.errors
    };
  }
  doParse(e) {
    let n = this.wrapper.rule(e);
    if (this.stack.length > 0 && (n = this.construct()), n === void 0)
      throw new Error("No result from parser");
    if (this.stack.length > 0)
      throw new Error("Parser stack is not empty after parsing");
    return n;
  }
  startImplementation(e, n, r) {
    return (i) => {
      const s = !this.isRecording() && e !== void 0;
      if (s) {
        const a = { $type: e };
        this.stack.push(a), e === Qc ? a.value = "" : n !== void 0 && (a.$infixName = n);
      }
      return r(i), s ? this.construct() : void 0;
    };
  }
  extractHiddenTokens(e) {
    const n = this.lexerResult.hidden;
    if (!n.length)
      return [];
    const r = e.startOffset;
    for (let i = 0; i < n.length; i++)
      if (n[i].startOffset > r)
        return n.splice(0, i);
    return n.splice(0, n.length);
  }
  consume(e, n, r) {
    const i = this.wrapper.wrapConsume(e, n);
    if (!this.isRecording() && this.isValidToken(i)) {
      const s = this.extractHiddenTokens(i);
      this.nodeBuilder.addHiddenNodes(s);
      const a = this.nodeBuilder.buildLeafNode(i, r), { assignment: o, crossRef: c } = this.getAssignment(r), l = this.current;
      if (o) {
        const u = Bn(r) ? i.image : this.converter.convert(i.image, a);
        this.assign(o.operator, o.feature, u, a, c);
      } else if (To(l)) {
        let u = i.image;
        Bn(r) || (u = this.converter.convert(u, a).toString()), l.value += u;
      }
    }
  }
  /**
   * Most consumed parser tokens are valid. However there are two cases in which they are not valid:
   *
   * 1. They were inserted during error recovery by the parser. These tokens don't really exist and should not be further processed
   * 2. They contain invalid token ranges. This might include the special EOF token, or other tokens produced by invalid token builders.
   */
  isValidToken(e) {
    return !e.isInsertedInRecovery && !isNaN(e.startOffset) && typeof e.endOffset == "number" && !isNaN(e.endOffset);
  }
  subrule(e, n, r, i, s) {
    let a;
    !this.isRecording() && !r && (a = this.nodeBuilder.buildCompositeNode(i));
    let o;
    try {
      o = this.wrapper.wrapSubrule(e, n, s);
    } finally {
      this.isRecording() || (o === void 0 && !r && (o = this.construct()), o !== void 0 && a && a.length > 0 && this.performSubruleAssignment(o, i, a));
    }
  }
  performSubruleAssignment(e, n, r) {
    const { assignment: i, crossRef: s } = this.getAssignment(n);
    if (i)
      this.assign(i.operator, i.feature, e, r, s);
    else if (!i) {
      const a = this.current;
      if (To(a))
        a.value += e.toString();
      else if (typeof e == "object" && e) {
        const c = this.assignWithoutOverride(e, a);
        this.stack.pop(), this.stack.push(c);
      }
    }
  }
  action(e, n) {
    if (!this.isRecording()) {
      let r = this.current;
      if (n.feature && n.operator) {
        r = this.construct(), this.nodeBuilder.removeNode(r.$cstNode), this.nodeBuilder.buildCompositeNode(n).content.push(r.$cstNode);
        const s = { $type: e };
        this.stack.push(s), this.assign(n.operator, n.feature, r, r.$cstNode);
      } else
        r.$type = e;
    }
  }
  construct() {
    if (this.isRecording())
      return;
    const e = this.stack.pop();
    return this.nodeBuilder.construct(e), "$infixName" in e ? this.constructInfix(e, this.operatorPrecedence.get(e.$infixName)) : To(e) ? this.converter.convert(e.value, e.$cstNode) : (ym(this.astReflection, e), e);
  }
  constructInfix(e, n) {
    const r = e.parts;
    if (!Array.isArray(r) || r.length === 0)
      return;
    const i = e.operators;
    if (!Array.isArray(i) || r.length < 2)
      return r[0];
    let s = 0, a = -1;
    for (let N = 0; N < i.length; N++) {
      const $ = i[N], w = n.get($) ?? {
        precedence: 1 / 0,
        rightAssoc: !1
      };
      w.precedence > a ? (a = w.precedence, s = N) : w.precedence === a && (w.rightAssoc || (s = N));
    }
    const o = i.slice(0, s), c = i.slice(s + 1), l = r.slice(0, s + 1), u = r.slice(s + 1), f = {
      $infixName: e.$infixName,
      $type: e.$type,
      $cstNode: e.$cstNode,
      parts: l,
      operators: o
    }, m = {
      $infixName: e.$infixName,
      $type: e.$type,
      $cstNode: e.$cstNode,
      parts: u,
      operators: c
    }, g = this.constructInfix(f, n), A = this.constructInfix(m, n);
    return {
      $type: e.$type,
      $cstNode: e.$cstNode,
      left: g,
      operator: i[s],
      right: A
    };
  }
  getAssignment(e) {
    if (!this.assignmentMap.has(e)) {
      const n = xa(e, zn);
      this.assignmentMap.set(e, {
        assignment: n,
        crossRef: n && Ma(n.terminal) ? n.terminal.isMulti ? "multi" : "single" : void 0
      });
    }
    return this.assignmentMap.get(e);
  }
  assign(e, n, r, i, s) {
    const a = this.current;
    let o;
    switch (s === "single" && typeof r == "string" ? o = this.linker.buildReference(a, n, i, r) : s === "multi" && typeof r == "string" ? o = this.linker.buildMultiReference(a, n, i, r) : o = r, e) {
      case "=": {
        a[n] = o;
        break;
      }
      case "?=": {
        a[n] = !0;
        break;
      }
      case "+=":
        Array.isArray(a[n]) || (a[n] = []), a[n].push(o);
    }
  }
  assignWithoutOverride(e, n) {
    for (const [i, s] of Object.entries(n)) {
      const a = e[i];
      a === void 0 ? e[i] = s : Array.isArray(a) && Array.isArray(s) && (s.push(...a), e[i] = s);
    }
    const r = e.$cstNode;
    return r && (r.astNode = void 0, e.$cstNode = void 0), e;
  }
  get definitionErrors() {
    return this.wrapper.definitionErrors;
  }
}
class dR {
  buildMismatchTokenMessage(e) {
    return vr.buildMismatchTokenMessage(e);
  }
  buildNotAllInputParsedMessage(e) {
    return vr.buildNotAllInputParsedMessage(e);
  }
  buildNoViableAltMessage(e) {
    return vr.buildNoViableAltMessage(e);
  }
  buildEarlyExitMessage(e) {
    return vr.buildEarlyExitMessage(e);
  }
}
class Hh extends dR {
  buildMismatchTokenMessage({ expected: e, actual: n }) {
    return `Expecting ${e.LABEL ? "`" + e.LABEL + "`" : e.name.endsWith(":KW") ? `keyword '${e.name.substring(0, e.name.length - 3)}'` : `token of type '${e.name}'`} but found \`${n.image}\`.`;
  }
  buildNotAllInputParsedMessage({ firstRedundant: e }) {
    return `Expecting end of file but found \`${e.image}\`.`;
  }
}
class fR extends Kh {
  constructor() {
    super(...arguments), this.tokens = [], this.elementStack = [], this.lastElementStack = [], this.nextTokenIndex = 0, this.stackSize = 0;
  }
  action() {
  }
  construct() {
  }
  parse(e) {
    this.resetState();
    const n = this.lexer.tokenize(e, { mode: "partial" });
    return this.tokens = n.tokens, this.wrapper.input = [...this.tokens], this.mainRule.call(this.wrapper, {}), this.unorderedGroups.clear(), {
      tokens: this.tokens,
      elementStack: [...this.lastElementStack],
      tokenIndex: this.nextTokenIndex
    };
  }
  rule(e, n) {
    const r = this.wrapper.DEFINE_RULE(Vh(e.name), this.startImplementation(n).bind(this));
    return this.allRules.set(e.name, r), e.entry && (this.mainRule = r), r;
  }
  resetState() {
    this.elementStack = [], this.lastElementStack = [], this.nextTokenIndex = 0, this.stackSize = 0;
  }
  startImplementation(e) {
    return (n) => {
      const r = this.keepStackSize();
      try {
        e(n);
      } finally {
        this.resetStackSize(r);
      }
    };
  }
  removeUnexpectedElements() {
    this.elementStack.splice(this.stackSize);
  }
  keepStackSize() {
    const e = this.elementStack.length;
    return this.stackSize = e, e;
  }
  resetStackSize(e) {
    this.removeUnexpectedElements(), this.stackSize = e;
  }
  consume(e, n, r) {
    this.wrapper.wrapConsume(e, n), this.isRecording() || (this.lastElementStack = [...this.elementStack, r], this.nextTokenIndex = this.currIdx + 1);
  }
  subrule(e, n, r, i, s) {
    this.before(i), this.wrapper.wrapSubrule(e, n, s), this.after(i);
  }
  before(e) {
    this.isRecording() || this.elementStack.push(e);
  }
  after(e) {
    if (!this.isRecording()) {
      const n = this.elementStack.lastIndexOf(e);
      n >= 0 && this.elementStack.splice(n);
    }
  }
  get currIdx() {
    return this.wrapper.currIdx;
  }
}
const hR = {
  recoveryEnabled: !0,
  nodeLocationTracking: "full",
  skipValidations: !0,
  errorMessageProvider: new Hh()
};
class Yh extends TT {
  constructor(e, n) {
    const r = n && "maxLookahead" in n;
    super(e, {
      ...hR,
      lookaheadStrategy: r ? new Ll({ maxLookahead: n.maxLookahead }) : new GT({
        // If validations are skipped, don't log the lookahead warnings
        logging: n.skipValidations ? () => {
        } : void 0
      }),
      ...n
    });
  }
  get IS_RECORDING() {
    return this.RECORDING_PHASE;
  }
  DEFINE_RULE(e, n, r) {
    return this.RULE(e, n, r);
  }
  wrapSelfAnalysis() {
    this.performSelfAnalysis();
  }
  wrapConsume(e, n) {
    return this.consume(e, n, void 0);
  }
  wrapSubrule(e, n, r) {
    return this.subrule(e, n, {
      ARGS: [r]
    });
  }
  wrapOr(e, n) {
    this.or(e, n);
  }
  wrapOption(e, n) {
    this.option(e, n);
  }
  wrapMany(e, n) {
    this.many(e, n);
  }
  wrapAtLeastOne(e, n) {
    this.atLeastOne(e, n);
  }
  rule(e) {
    return e.call(this, {});
  }
}
class pR extends Yh {
  constructor(e, n, r) {
    super(e, n), this.task = r;
  }
  rule(e) {
    this.task.start(), this.task.startSubTask(this.ruleName(e));
    try {
      return super.rule(e);
    } finally {
      this.task.stopSubTask(this.ruleName(e)), this.task.stop();
    }
  }
  ruleName(e) {
    return e.ruleName;
  }
  subrule(e, n, r) {
    this.task.startSubTask(this.ruleName(n));
    try {
      return super.subrule(e, n, r);
    } finally {
      this.task.stopSubTask(this.ruleName(n));
    }
  }
}
function Xh(t, e, n) {
  return mR({
    parser: e,
    tokens: n,
    ruleNames: /* @__PURE__ */ new Map()
  }, t), e;
}
function mR(t, e) {
  const n = Kf(e, !1), r = pe(e.rules).filter(an).filter((s) => n.has(s));
  for (const s of r) {
    const a = {
      ...t,
      consume: 1,
      optional: 1,
      subrule: 1,
      many: 1,
      or: 1
    };
    t.parser.rule(s, Kn(a, s.definition));
  }
  const i = pe(e.rules).filter(sa).filter((s) => n.has(s));
  for (const s of i)
    t.parser.rule(s, gR(t, s));
}
function gR(t, e) {
  const n = e.call.rule.ref;
  if (!n)
    throw new Error("Could not resolve reference to infix operator rule: " + e.call.rule.$refText);
  if (on(n))
    throw new Error("Cannot use terminal rule in infix expression");
  const r = e.operators.precedences.flatMap((g) => g.operators), i = {
    $type: "Group",
    elements: []
  }, s = {
    $container: i,
    $type: "Assignment",
    feature: "parts",
    operator: "+=",
    terminal: e.call
  }, a = {
    $container: i,
    $type: "Group",
    elements: [],
    cardinality: "*"
  };
  i.elements.push(s, a);
  const c = {
    $container: a,
    $type: "Assignment",
    feature: "operators",
    operator: "+=",
    terminal: {
      $type: "Alternatives",
      elements: r
    }
  }, l = {
    ...s,
    $container: a
  };
  a.elements.push(c, l);
  const f = r.map((g) => t.tokens[g.value]).map((g, A) => ({
    ALT: () => t.parser.consume(A, g, c)
  }));
  let m;
  return (g) => {
    m ?? (m = jl(t, n)), t.parser.subrule(0, m, !1, s, g), t.parser.many(0, {
      DEF: () => {
        t.parser.alternatives(0, f), t.parser.subrule(1, m, !1, l, g);
      }
    });
  };
}
function Kn(t, e, n = !1) {
  let r;
  if (Bn(e))
    r = SR(t, e);
  else if (Da(e))
    r = yR(t, e);
  else if (zn(e))
    r = Kn(t, e.terminal);
  else if (Ma(e))
    r = Jh(t, e);
  else if (qn(e))
    r = TR(t, e);
  else if (Uf(e))
    r = vR(t, e);
  else if (zf(e))
    r = ER(t, e);
  else if (kl(e))
    r = AR(t, e);
  else if (Sm(e)) {
    const i = t.consume++;
    r = () => t.parser.consume(i, vn, e);
  } else
    throw new qf(e.$cstNode, `Unexpected element type: ${e.$type}`);
  return Qh(t, n ? void 0 : ka(e), r, e.cardinality);
}
function yR(t, e) {
  const n = qi(e);
  return () => t.parser.action(n, e);
}
function TR(t, e) {
  const n = e.rule.ref;
  if (ss(n)) {
    const r = t.subrule++, i = an(n) && n.fragment, s = e.arguments.length > 0 ? RR(n, e.arguments) : () => ({});
    let a;
    return (o) => {
      a ?? (a = jl(t, n)), t.parser.subrule(r, a, i, e, s(o));
    };
  } else if (on(n)) {
    const r = t.consume++, i = Zc(t, n.name);
    return () => t.parser.consume(r, i, e);
  } else if (n)
    as();
  else
    throw new qf(e.$cstNode, `Undefined rule: ${e.rule.$refText}`);
}
function RR(t, e) {
  if (e.some((r) => r.calledByName)) {
    const r = e.map((i) => {
      var s, a;
      return {
        parameterName: (a = (s = i.parameter) == null ? void 0 : s.ref) == null ? void 0 : a.name,
        predicate: xt(i.value)
      };
    });
    return (i) => {
      const s = {};
      for (const { parameterName: a, predicate: o } of r)
        a && (s[a] = o(i));
      return s;
    };
  } else {
    const r = e.map((i) => xt(i.value));
    return (i) => {
      const s = {};
      for (let a = 0; a < r.length; a++)
        if (a < t.parameters.length) {
          const o = t.parameters[a].name, c = r[a];
          s[o] = c(i);
        }
      return s;
    };
  }
}
function xt(t) {
  if (Am(t)) {
    const e = xt(t.left), n = xt(t.right);
    return (r) => e(r) || n(r);
  } else if (Em(t)) {
    const e = xt(t.left), n = xt(t.right);
    return (r) => e(r) && n(r);
  } else if (Nm(t)) {
    const e = xt(t.value);
    return (n) => !e(n);
  } else if (wm(t)) {
    const e = t.parameter.ref.name;
    return (n) => n !== void 0 && n[e] === !0;
  } else if (Rm(t)) {
    const e = !!t.true;
    return () => e;
  }
  as();
}
function vR(t, e) {
  if (e.elements.length === 1)
    return Kn(t, e.elements[0]);
  {
    const n = [];
    for (const i of e.elements) {
      const s = {
        // Since we handle the guard condition in the alternative already
        // We can ignore the group guard condition inside
        ALT: Kn(t, i, !0)
      }, a = ka(i);
      a && (s.GATE = xt(a)), n.push(s);
    }
    const r = t.or++;
    return (i) => t.parser.alternatives(r, n.map((s) => {
      const a = {
        ALT: () => s.ALT(i)
      }, o = s.GATE;
      return o && (a.GATE = () => o(i)), a;
    }));
  }
}
function ER(t, e) {
  if (e.elements.length === 1)
    return Kn(t, e.elements[0]);
  const n = [];
  for (const o of e.elements) {
    const c = {
      // Since we handle the guard condition in the alternative already
      // We can ignore the group guard condition inside
      ALT: Kn(t, o, !0)
    }, l = ka(o);
    l && (c.GATE = xt(l)), n.push(c);
  }
  const r = t.or++, i = (o, c) => {
    const l = c.getRuleStack().join("-");
    return `uGroup_${o}_${l}`;
  }, s = (o) => t.parser.alternatives(r, n.map((c, l) => {
    const u = { ALT: () => !0 }, f = t.parser;
    u.ALT = () => {
      if (c.ALT(o), !f.isRecording()) {
        const g = i(r, f);
        f.unorderedGroups.get(g) || f.unorderedGroups.set(g, []);
        const A = f.unorderedGroups.get(g);
        typeof (A == null ? void 0 : A[l]) > "u" && (A[l] = !0);
      }
    };
    const m = c.GATE;
    return m ? u.GATE = () => m(o) : u.GATE = () => {
      const g = f.unorderedGroups.get(i(r, f));
      return !(g != null && g[l]);
    }, u;
  })), a = Qh(t, ka(e), s, "*");
  return (o) => {
    a(o), t.parser.isRecording() || t.parser.unorderedGroups.delete(i(r, t.parser));
  };
}
function AR(t, e) {
  const n = e.elements.map((r) => Kn(t, r));
  return (r) => n.forEach((i) => i(r));
}
function ka(t) {
  if (kl(t))
    return t.guardCondition;
}
function Jh(t, e, n = e.terminal) {
  if (n)
    if (qn(n) && an(n.rule.ref)) {
      const r = n.rule.ref, i = t.subrule++;
      let s;
      return (a) => {
        s ?? (s = jl(t, r)), t.parser.subrule(i, s, !1, e, a);
      };
    } else if (qn(n) && on(n.rule.ref)) {
      const r = t.consume++, i = Zc(t, n.rule.ref.name);
      return () => t.parser.consume(r, i, e);
    } else if (Bn(n)) {
      const r = t.consume++, i = Zc(t, n.value);
      return () => t.parser.consume(r, i, e);
    } else
      throw new Error("Could not build cross reference parser");
  else {
    if (!e.type.ref)
      throw new Error("Could not resolve reference to type: " + e.type.$refText);
    const r = Xf(e.type.ref), i = r == null ? void 0 : r.terminal;
    if (!i)
      throw new Error("Could not find name assignment for type: " + qi(e.type.ref));
    return Jh(t, e, i);
  }
}
function SR(t, e) {
  const n = t.consume++, r = t.tokens[e.value];
  if (!r)
    throw new Error("Could not find token for keyword: " + e.value);
  return () => t.parser.consume(n, r, e);
}
function Qh(t, e, n, r) {
  const i = e && xt(e);
  if (!r)
    if (i) {
      const s = t.or++;
      return (a) => t.parser.alternatives(s, [
        {
          ALT: () => n(a),
          GATE: () => i(a)
        },
        {
          ALT: $u(),
          GATE: () => !i(a)
        }
      ]);
    } else
      return n;
  if (r === "*") {
    const s = t.many++;
    return (a) => t.parser.many(s, {
      DEF: () => n(a),
      GATE: i ? () => i(a) : void 0
    });
  } else if (r === "+") {
    const s = t.many++;
    if (i) {
      const a = t.or++;
      return (o) => t.parser.alternatives(a, [
        {
          ALT: () => t.parser.atLeastOne(s, {
            DEF: () => n(o)
          }),
          GATE: () => i(o)
        },
        {
          ALT: $u(),
          GATE: () => !i(o)
        }
      ]);
    } else
      return (a) => t.parser.atLeastOne(s, {
        DEF: () => n(a)
      });
  } else if (r === "?") {
    const s = t.optional++;
    return (a) => t.parser.optional(s, {
      DEF: () => n(a),
      GATE: i ? () => i(a) : void 0
    });
  } else
    as();
}
function jl(t, e) {
  const n = CR(t, e), r = t.parser.getRule(n);
  if (!r)
    throw new Error(`Rule "${n}" not found."`);
  return r;
}
function CR(t, e) {
  if (ss(e))
    return e.name;
  if (t.ruleNames.has(e))
    return t.ruleNames.get(e);
  {
    let n = e, r = n.$container, i = e.$type;
    for (; !an(r); )
      (kl(r) || Uf(r) || zf(r)) && (i = r.elements.indexOf(n).toString() + ":" + i), n = r, r = r.$container;
    return i = r.name + ":" + i, t.ruleNames.set(e, i), i;
  }
}
function Zc(t, e) {
  const n = t.tokens[e];
  if (!n)
    throw new Error(`Token "${e}" not found."`);
  return n;
}
function kR(t) {
  const e = t.Grammar, n = t.parser.Lexer, r = new fR(t);
  return Xh(e, r, n.definition), r.finalize(), r;
}
function NR(t) {
  const e = wR(t);
  return e.finalize(), e;
}
function wR(t) {
  const e = t.Grammar, n = t.parser.Lexer, r = new uR(t);
  return Xh(e, r, n.definition);
}
class Zh {
  constructor() {
    this.diagnostics = [];
  }
  buildTokens(e, n) {
    const r = pe(Kf(e, !1)), i = this.buildTerminalTokens(r), s = this.buildKeywordTokens(r, i, n);
    return s.push(...i), s;
  }
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  flushLexingReport(e) {
    return { diagnostics: this.popDiagnostics() };
  }
  popDiagnostics() {
    const e = [...this.diagnostics];
    return this.diagnostics = [], e;
  }
  buildTerminalTokens(e) {
    return e.filter(on).filter((n) => !n.fragment).map((n) => this.buildTerminalToken(n)).toArray();
  }
  buildTerminalToken(e) {
    const n = wl(e), r = this.requiresCustomPattern(n) ? this.regexPatternFunction(n) : n, i = {
      name: e.name,
      PATTERN: r
    };
    return typeof r == "function" && (i.LINE_BREAKS = !0), e.hidden && (i.GROUP = Vf(n) ? et.SKIPPED : "hidden"), i;
  }
  requiresCustomPattern(e) {
    return !!(e.flags.includes("u") || e.flags.includes("s"));
  }
  regexPatternFunction(e) {
    const n = new RegExp(e, e.flags + "y");
    return (r, i) => (n.lastIndex = i, n.exec(r));
  }
  buildKeywordTokens(e, n, r) {
    return e.filter(ss).flatMap((i) => is(i).filter(Bn)).distinct((i) => i.value).toArray().sort((i, s) => s.value.length - i.value.length).map((i) => this.buildKeywordToken(i, n, !!(r != null && r.caseInsensitive)));
  }
  buildKeywordToken(e, n, r) {
    const i = this.buildKeywordPattern(e, r), s = {
      name: e.value,
      PATTERN: i,
      LONGER_ALT: this.findLongerAlt(e, n)
    };
    return typeof i == "function" && (s.LINE_BREAKS = !0), s;
  }
  buildKeywordPattern(e, n) {
    return n ? new RegExp(Ga(e.value), "i") : e.value;
  }
  findLongerAlt(e, n) {
    return n.reduce((r, i) => {
      const s = i == null ? void 0 : i.PATTERN;
      return s != null && s.source && Jm("^" + s.source + "$", e.value) && r.push(i), r;
    }, []);
  }
}
class ep {
  convert(e, n) {
    let r = n.grammarSource;
    if (Ma(r) && (r = tg(r)), qn(r)) {
      const i = r.rule.ref;
      if (!i)
        throw new Error("This cst node was not parsed by a rule.");
      return this.runConverter(i, e, n);
    }
    return e;
  }
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  runConverter(e, n, r) {
    var i;
    switch (e.name.toUpperCase()) {
      case "INT":
        return Ht.convertInt(n);
      case "STRING":
        return Ht.convertString(n);
      case "ID":
        return Ht.convertID(n);
    }
    switch ((i = cg(e)) == null ? void 0 : i.toLowerCase()) {
      case "number":
        return Ht.convertNumber(n);
      case "boolean":
        return Ht.convertBoolean(n);
      case "bigint":
        return Ht.convertBigint(n);
      case "date":
        return Ht.convertDate(n);
      default:
        return n;
    }
  }
}
var Ht;
(function(t) {
  function e(l) {
    let u = "";
    for (let f = 1; f < l.length - 1; f++) {
      const m = l.charAt(f);
      if (m === "\\") {
        const g = l.charAt(++f);
        u += n(g);
      } else
        u += m;
    }
    return u;
  }
  t.convertString = e;
  function n(l) {
    switch (l) {
      case "b":
        return "\b";
      case "f":
        return "\f";
      case "n":
        return `
`;
      case "r":
        return "\r";
      case "t":
        return "	";
      case "v":
        return "\v";
      case "0":
        return "\0";
      default:
        return l;
    }
  }
  function r(l) {
    return l.charAt(0) === "^" ? l.substring(1) : l;
  }
  t.convertID = r;
  function i(l) {
    return parseInt(l);
  }
  t.convertInt = i;
  function s(l) {
    return BigInt(l);
  }
  t.convertBigint = s;
  function a(l) {
    return new Date(l);
  }
  t.convertDate = a;
  function o(l) {
    return Number(l);
  }
  t.convertNumber = o;
  function c(l) {
    return l.toLowerCase() === "true";
  }
  t.convertBoolean = c;
})(Ht || (Ht = {}));
var An = {}, cn = {};
Object.defineProperty(cn, "__esModule", { value: !0 });
let el;
function tl() {
  if (el === void 0)
    throw new Error("No runtime abstraction layer installed");
  return el;
}
(function(t) {
  function e(n) {
    if (n === void 0)
      throw new Error("No runtime abstraction layer provided");
    el = n;
  }
  t.install = e;
})(tl || (tl = {}));
cn.default = tl;
var _e = {};
Object.defineProperty(_e, "__esModule", { value: !0 });
_e.stringArray = _e.array = _e.func = _e.error = _e.number = _e.string = _e.boolean = void 0;
function bR(t) {
  return t === !0 || t === !1;
}
_e.boolean = bR;
function tp(t) {
  return typeof t == "string" || t instanceof String;
}
_e.string = tp;
function IR(t) {
  return typeof t == "number" || t instanceof Number;
}
_e.number = IR;
function _R(t) {
  return t instanceof Error;
}
_e.error = _R;
function $R(t) {
  return typeof t == "function";
}
_e.func = $R;
function np(t) {
  return Array.isArray(t);
}
_e.array = np;
function PR(t) {
  return np(t) && t.every((e) => tp(e));
}
_e.stringArray = PR;
var Ft = {};
Object.defineProperty(Ft, "__esModule", { value: !0 });
var rp = Ft.Emitter = Ft.Event = void 0;
const LR = cn;
var Mu;
(function(t) {
  const e = { dispose() {
  } };
  t.None = function() {
    return e;
  };
})(Mu || (Ft.Event = Mu = {}));
class OR {
  add(e, n = null, r) {
    this._callbacks || (this._callbacks = [], this._contexts = []), this._callbacks.push(e), this._contexts.push(n), Array.isArray(r) && r.push({ dispose: () => this.remove(e, n) });
  }
  remove(e, n = null) {
    if (!this._callbacks)
      return;
    let r = !1;
    for (let i = 0, s = this._callbacks.length; i < s; i++)
      if (this._callbacks[i] === e)
        if (this._contexts[i] === n) {
          this._callbacks.splice(i, 1), this._contexts.splice(i, 1);
          return;
        } else
          r = !0;
    if (r)
      throw new Error("When adding a listener with a context, you should remove it with the same context");
  }
  invoke(...e) {
    if (!this._callbacks)
      return [];
    const n = [], r = this._callbacks.slice(0), i = this._contexts.slice(0);
    for (let s = 0, a = r.length; s < a; s++)
      try {
        n.push(r[s].apply(i[s], e));
      } catch (o) {
        (0, LR.default)().console.error(o);
      }
    return n;
  }
  isEmpty() {
    return !this._callbacks || this._callbacks.length === 0;
  }
  dispose() {
    this._callbacks = void 0, this._contexts = void 0;
  }
}
class Ka {
  constructor(e) {
    this._options = e;
  }
  /**
   * For the public to allow to subscribe
   * to events from this Emitter
   */
  get event() {
    return this._event || (this._event = (e, n, r) => {
      this._callbacks || (this._callbacks = new OR()), this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty() && this._options.onFirstListenerAdd(this), this._callbacks.add(e, n);
      const i = {
        dispose: () => {
          this._callbacks && (this._callbacks.remove(e, n), i.dispose = Ka._noop, this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty() && this._options.onLastListenerRemove(this));
        }
      };
      return Array.isArray(r) && r.push(i), i;
    }), this._event;
  }
  /**
   * To be kept private to fire an event to
   * subscribers
   */
  fire(e) {
    this._callbacks && this._callbacks.invoke.call(this._callbacks, e);
  }
  dispose() {
    this._callbacks && (this._callbacks.dispose(), this._callbacks = void 0);
  }
}
rp = Ft.Emitter = Ka;
Ka._noop = function() {
};
var ge;
Object.defineProperty(An, "__esModule", { value: !0 });
var zl = An.CancellationTokenSource = ge = An.CancellationToken = void 0;
const xR = cn, DR = _e, nl = Ft;
var Na;
(function(t) {
  t.None = Object.freeze({
    isCancellationRequested: !1,
    onCancellationRequested: nl.Event.None
  }), t.Cancelled = Object.freeze({
    isCancellationRequested: !0,
    onCancellationRequested: nl.Event.None
  });
  function e(n) {
    const r = n;
    return r && (r === t.None || r === t.Cancelled || DR.boolean(r.isCancellationRequested) && !!r.onCancellationRequested);
  }
  t.is = e;
})(Na || (ge = An.CancellationToken = Na = {}));
const MR = Object.freeze(function(t, e) {
  const n = (0, xR.default)().timer.setTimeout(t.bind(e), 0);
  return { dispose() {
    n.dispose();
  } };
});
class Fu {
  constructor() {
    this._isCancelled = !1;
  }
  cancel() {
    this._isCancelled || (this._isCancelled = !0, this._emitter && (this._emitter.fire(void 0), this.dispose()));
  }
  get isCancellationRequested() {
    return this._isCancelled;
  }
  get onCancellationRequested() {
    return this._isCancelled ? MR : (this._emitter || (this._emitter = new nl.Emitter()), this._emitter.event);
  }
  dispose() {
    this._emitter && (this._emitter.dispose(), this._emitter = void 0);
  }
}
class FR {
  get token() {
    return this._token || (this._token = new Fu()), this._token;
  }
  cancel() {
    this._token ? this._token.cancel() : this._token = Na.Cancelled;
  }
  dispose() {
    this._token ? this._token instanceof Fu && this._token.dispose() : this._token = Na.None;
  }
}
zl = An.CancellationTokenSource = FR;
function GR() {
  return new Promise((t) => {
    typeof setImmediate > "u" ? setTimeout(t, 0) : setImmediate(t);
  });
}
let ea = 0, UR = 10;
function jR() {
  return ea = performance.now(), new zl();
}
const Er = Symbol("OperationCancelled");
function Ha(t) {
  return t === Er;
}
async function He(t) {
  if (t === ge.None)
    return;
  const e = performance.now();
  if (e - ea >= UR && (ea = e, await GR(), ea = performance.now()), t.isCancellationRequested)
    throw Er;
}
class Bl {
  constructor() {
    this.promise = new Promise((e, n) => {
      this.resolve = (r) => (e(r), this), this.reject = (r) => (n(r), this);
    });
  }
}
class Qi {
  constructor(e, n, r, i) {
    this._uri = e, this._languageId = n, this._version = r, this._content = i, this._lineOffsets = void 0;
  }
  get uri() {
    return this._uri;
  }
  get languageId() {
    return this._languageId;
  }
  get version() {
    return this._version;
  }
  getText(e) {
    if (e) {
      const n = this.offsetAt(e.start), r = this.offsetAt(e.end);
      return this._content.substring(n, r);
    }
    return this._content;
  }
  update(e, n) {
    for (const r of e)
      if (Qi.isIncremental(r)) {
        const i = sp(r.range), s = this.offsetAt(i.start), a = this.offsetAt(i.end);
        this._content = this._content.substring(0, s) + r.text + this._content.substring(a, this._content.length);
        const o = Math.max(i.start.line, 0), c = Math.max(i.end.line, 0);
        let l = this._lineOffsets;
        const u = Gu(r.text, !1, s);
        if (c - o === u.length)
          for (let m = 0, g = u.length; m < g; m++)
            l[m + o + 1] = u[m];
        else
          u.length < 1e4 ? l.splice(o + 1, c - o, ...u) : this._lineOffsets = l = l.slice(0, o + 1).concat(u, l.slice(c + 1));
        const f = r.text.length - (a - s);
        if (f !== 0)
          for (let m = o + 1 + u.length, g = l.length; m < g; m++)
            l[m] = l[m] + f;
      } else if (Qi.isFull(r))
        this._content = r.text, this._lineOffsets = void 0;
      else
        throw new Error("Unknown change event received");
    this._version = n;
  }
  getLineOffsets() {
    return this._lineOffsets === void 0 && (this._lineOffsets = Gu(this._content, !0)), this._lineOffsets;
  }
  positionAt(e) {
    e = Math.max(Math.min(e, this._content.length), 0);
    const n = this.getLineOffsets();
    let r = 0, i = n.length;
    if (i === 0)
      return { line: 0, character: e };
    for (; r < i; ) {
      const a = Math.floor((r + i) / 2);
      n[a] > e ? i = a : r = a + 1;
    }
    const s = r - 1;
    return e = this.ensureBeforeEOL(e, n[s]), { line: s, character: e - n[s] };
  }
  offsetAt(e) {
    const n = this.getLineOffsets();
    if (e.line >= n.length)
      return this._content.length;
    if (e.line < 0)
      return 0;
    const r = n[e.line];
    if (e.character <= 0)
      return r;
    const i = e.line + 1 < n.length ? n[e.line + 1] : this._content.length, s = Math.min(r + e.character, i);
    return this.ensureBeforeEOL(s, r);
  }
  ensureBeforeEOL(e, n) {
    for (; e > n && ip(this._content.charCodeAt(e - 1)); )
      e--;
    return e;
  }
  get lineCount() {
    return this.getLineOffsets().length;
  }
  static isIncremental(e) {
    const n = e;
    return n != null && typeof n.text == "string" && n.range !== void 0 && (n.rangeLength === void 0 || typeof n.rangeLength == "number");
  }
  static isFull(e) {
    const n = e;
    return n != null && typeof n.text == "string" && n.range === void 0 && n.rangeLength === void 0;
  }
}
var rl;
(function(t) {
  function e(i, s, a, o) {
    return new Qi(i, s, a, o);
  }
  t.create = e;
  function n(i, s, a) {
    if (i instanceof Qi)
      return i.update(s, a), i;
    throw new Error("TextDocument.update: document must be created by TextDocument.create");
  }
  t.update = n;
  function r(i, s) {
    const a = i.getText(), o = il(s.map(zR), (u, f) => {
      const m = u.range.start.line - f.range.start.line;
      return m === 0 ? u.range.start.character - f.range.start.character : m;
    });
    let c = 0;
    const l = [];
    for (const u of o) {
      const f = i.offsetAt(u.range.start);
      if (f < c)
        throw new Error("Overlapping edit");
      f > c && l.push(a.substring(c, f)), u.newText.length && l.push(u.newText), c = i.offsetAt(u.range.end);
    }
    return l.push(a.substr(c)), l.join("");
  }
  t.applyEdits = r;
})(rl || (rl = {}));
function il(t, e) {
  if (t.length <= 1)
    return t;
  const n = t.length / 2 | 0, r = t.slice(0, n), i = t.slice(n);
  il(r, e), il(i, e);
  let s = 0, a = 0, o = 0;
  for (; s < r.length && a < i.length; )
    e(r[s], i[a]) <= 0 ? t[o++] = r[s++] : t[o++] = i[a++];
  for (; s < r.length; )
    t[o++] = r[s++];
  for (; a < i.length; )
    t[o++] = i[a++];
  return t;
}
function Gu(t, e, n = 0) {
  const r = e ? [n] : [];
  for (let i = 0; i < t.length; i++) {
    const s = t.charCodeAt(i);
    ip(s) && (s === 13 && i + 1 < t.length && t.charCodeAt(i + 1) === 10 && i++, r.push(n + i + 1));
  }
  return r;
}
function ip(t) {
  return t === 13 || t === 10;
}
function sp(t) {
  const e = t.start, n = t.end;
  return e.line > n.line || e.line === n.line && e.character > n.character ? { start: n, end: e } : t;
}
function zR(t) {
  const e = sp(t.range);
  return e !== t.range ? { newText: t.newText, range: e } : t;
}
var ap;
(() => {
  var t = { 975: (k) => {
    function R(y) {
      if (typeof y != "string") throw new TypeError("Path must be a string. Received " + JSON.stringify(y));
    }
    function p(y, T) {
      for (var E, P = "", D = 0, L = -1, z = 0, G = 0; G <= y.length; ++G) {
        if (G < y.length) E = y.charCodeAt(G);
        else {
          if (E === 47) break;
          E = 47;
        }
        if (E === 47) {
          if (!(L === G - 1 || z === 1)) if (L !== G - 1 && z === 2) {
            if (P.length < 2 || D !== 2 || P.charCodeAt(P.length - 1) !== 46 || P.charCodeAt(P.length - 2) !== 46) {
              if (P.length > 2) {
                var se = P.lastIndexOf("/");
                if (se !== P.length - 1) {
                  se === -1 ? (P = "", D = 0) : D = (P = P.slice(0, se)).length - 1 - P.lastIndexOf("/"), L = G, z = 0;
                  continue;
                }
              } else if (P.length === 2 || P.length === 1) {
                P = "", D = 0, L = G, z = 0;
                continue;
              }
            }
            T && (P.length > 0 ? P += "/.." : P = "..", D = 2);
          } else P.length > 0 ? P += "/" + y.slice(L + 1, G) : P = y.slice(L + 1, G), D = G - L - 1;
          L = G, z = 0;
        } else E === 46 && z !== -1 ? ++z : z = -1;
      }
      return P;
    }
    var S = { resolve: function() {
      for (var y, T = "", E = !1, P = arguments.length - 1; P >= -1 && !E; P--) {
        var D;
        P >= 0 ? D = arguments[P] : (y === void 0 && (y = process.cwd()), D = y), R(D), D.length !== 0 && (T = D + "/" + T, E = D.charCodeAt(0) === 47);
      }
      return T = p(T, !E), E ? T.length > 0 ? "/" + T : "/" : T.length > 0 ? T : ".";
    }, normalize: function(y) {
      if (R(y), y.length === 0) return ".";
      var T = y.charCodeAt(0) === 47, E = y.charCodeAt(y.length - 1) === 47;
      return (y = p(y, !T)).length !== 0 || T || (y = "."), y.length > 0 && E && (y += "/"), T ? "/" + y : y;
    }, isAbsolute: function(y) {
      return R(y), y.length > 0 && y.charCodeAt(0) === 47;
    }, join: function() {
      if (arguments.length === 0) return ".";
      for (var y, T = 0; T < arguments.length; ++T) {
        var E = arguments[T];
        R(E), E.length > 0 && (y === void 0 ? y = E : y += "/" + E);
      }
      return y === void 0 ? "." : S.normalize(y);
    }, relative: function(y, T) {
      if (R(y), R(T), y === T || (y = S.resolve(y)) === (T = S.resolve(T))) return "";
      for (var E = 1; E < y.length && y.charCodeAt(E) === 47; ++E) ;
      for (var P = y.length, D = P - E, L = 1; L < T.length && T.charCodeAt(L) === 47; ++L) ;
      for (var z = T.length - L, G = D < z ? D : z, se = -1, q = 0; q <= G; ++q) {
        if (q === G) {
          if (z > G) {
            if (T.charCodeAt(L + q) === 47) return T.slice(L + q + 1);
            if (q === 0) return T.slice(L + q);
          } else D > G && (y.charCodeAt(E + q) === 47 ? se = q : q === 0 && (se = 0));
          break;
        }
        var re = y.charCodeAt(E + q);
        if (re !== T.charCodeAt(L + q)) break;
        re === 47 && (se = q);
      }
      var xe = "";
      for (q = E + se + 1; q <= P; ++q) q !== P && y.charCodeAt(q) !== 47 || (xe.length === 0 ? xe += ".." : xe += "/..");
      return xe.length > 0 ? xe + T.slice(L + se) : (L += se, T.charCodeAt(L) === 47 && ++L, T.slice(L));
    }, _makeLong: function(y) {
      return y;
    }, dirname: function(y) {
      if (R(y), y.length === 0) return ".";
      for (var T = y.charCodeAt(0), E = T === 47, P = -1, D = !0, L = y.length - 1; L >= 1; --L) if ((T = y.charCodeAt(L)) === 47) {
        if (!D) {
          P = L;
          break;
        }
      } else D = !1;
      return P === -1 ? E ? "/" : "." : E && P === 1 ? "//" : y.slice(0, P);
    }, basename: function(y, T) {
      if (T !== void 0 && typeof T != "string") throw new TypeError('"ext" argument must be a string');
      R(y);
      var E, P = 0, D = -1, L = !0;
      if (T !== void 0 && T.length > 0 && T.length <= y.length) {
        if (T.length === y.length && T === y) return "";
        var z = T.length - 1, G = -1;
        for (E = y.length - 1; E >= 0; --E) {
          var se = y.charCodeAt(E);
          if (se === 47) {
            if (!L) {
              P = E + 1;
              break;
            }
          } else G === -1 && (L = !1, G = E + 1), z >= 0 && (se === T.charCodeAt(z) ? --z == -1 && (D = E) : (z = -1, D = G));
        }
        return P === D ? D = G : D === -1 && (D = y.length), y.slice(P, D);
      }
      for (E = y.length - 1; E >= 0; --E) if (y.charCodeAt(E) === 47) {
        if (!L) {
          P = E + 1;
          break;
        }
      } else D === -1 && (L = !1, D = E + 1);
      return D === -1 ? "" : y.slice(P, D);
    }, extname: function(y) {
      R(y);
      for (var T = -1, E = 0, P = -1, D = !0, L = 0, z = y.length - 1; z >= 0; --z) {
        var G = y.charCodeAt(z);
        if (G !== 47) P === -1 && (D = !1, P = z + 1), G === 46 ? T === -1 ? T = z : L !== 1 && (L = 1) : T !== -1 && (L = -1);
        else if (!D) {
          E = z + 1;
          break;
        }
      }
      return T === -1 || P === -1 || L === 0 || L === 1 && T === P - 1 && T === E + 1 ? "" : y.slice(T, P);
    }, format: function(y) {
      if (y === null || typeof y != "object") throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof y);
      return function(T, E) {
        var P = E.dir || E.root, D = E.base || (E.name || "") + (E.ext || "");
        return P ? P === E.root ? P + D : P + "/" + D : D;
      }(0, y);
    }, parse: function(y) {
      R(y);
      var T = { root: "", dir: "", base: "", ext: "", name: "" };
      if (y.length === 0) return T;
      var E, P = y.charCodeAt(0), D = P === 47;
      D ? (T.root = "/", E = 1) : E = 0;
      for (var L = -1, z = 0, G = -1, se = !0, q = y.length - 1, re = 0; q >= E; --q) if ((P = y.charCodeAt(q)) !== 47) G === -1 && (se = !1, G = q + 1), P === 46 ? L === -1 ? L = q : re !== 1 && (re = 1) : L !== -1 && (re = -1);
      else if (!se) {
        z = q + 1;
        break;
      }
      return L === -1 || G === -1 || re === 0 || re === 1 && L === G - 1 && L === z + 1 ? G !== -1 && (T.base = T.name = z === 0 && D ? y.slice(1, G) : y.slice(z, G)) : (z === 0 && D ? (T.name = y.slice(1, L), T.base = y.slice(1, G)) : (T.name = y.slice(z, L), T.base = y.slice(z, G)), T.ext = y.slice(L, G)), z > 0 ? T.dir = y.slice(0, z - 1) : D && (T.dir = "/"), T;
    }, sep: "/", delimiter: ":", win32: null, posix: null };
    S.posix = S, k.exports = S;
  } }, e = {};
  function n(k) {
    var R = e[k];
    if (R !== void 0) return R.exports;
    var p = e[k] = { exports: {} };
    return t[k](p, p.exports, n), p.exports;
  }
  n.d = (k, R) => {
    for (var p in R) n.o(R, p) && !n.o(k, p) && Object.defineProperty(k, p, { enumerable: !0, get: R[p] });
  }, n.o = (k, R) => Object.prototype.hasOwnProperty.call(k, R), n.r = (k) => {
    typeof Symbol < "u" && Symbol.toStringTag && Object.defineProperty(k, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(k, "__esModule", { value: !0 });
  };
  var r = {};
  let i;
  n.r(r), n.d(r, { URI: () => m, Utils: () => de }), typeof process == "object" ? i = process.platform === "win32" : typeof navigator == "object" && (i = navigator.userAgent.indexOf("Windows") >= 0);
  const s = /^\w[\w\d+.-]*$/, a = /^\//, o = /^\/\//;
  function c(k, R) {
    if (!k.scheme && R) throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${k.authority}", path: "${k.path}", query: "${k.query}", fragment: "${k.fragment}"}`);
    if (k.scheme && !s.test(k.scheme)) throw new Error("[UriError]: Scheme contains illegal characters.");
    if (k.path) {
      if (k.authority) {
        if (!a.test(k.path)) throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character');
      } else if (o.test(k.path)) throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")');
    }
  }
  const l = "", u = "/", f = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
  class m {
    constructor(R, p, S, y, T, E = !1) {
      dn(this, "scheme");
      dn(this, "authority");
      dn(this, "path");
      dn(this, "query");
      dn(this, "fragment");
      typeof R == "object" ? (this.scheme = R.scheme || l, this.authority = R.authority || l, this.path = R.path || l, this.query = R.query || l, this.fragment = R.fragment || l) : (this.scheme = /* @__PURE__ */ function(P, D) {
        return P || D ? P : "file";
      }(R, E), this.authority = p || l, this.path = function(P, D) {
        switch (P) {
          case "https":
          case "http":
          case "file":
            D ? D[0] !== u && (D = u + D) : D = u;
        }
        return D;
      }(this.scheme, S || l), this.query = y || l, this.fragment = T || l, c(this, E));
    }
    static isUri(R) {
      return R instanceof m || !!R && typeof R.authority == "string" && typeof R.fragment == "string" && typeof R.path == "string" && typeof R.query == "string" && typeof R.scheme == "string" && typeof R.fsPath == "string" && typeof R.with == "function" && typeof R.toString == "function";
    }
    get fsPath() {
      return O(this);
    }
    with(R) {
      if (!R) return this;
      let { scheme: p, authority: S, path: y, query: T, fragment: E } = R;
      return p === void 0 ? p = this.scheme : p === null && (p = l), S === void 0 ? S = this.authority : S === null && (S = l), y === void 0 ? y = this.path : y === null && (y = l), T === void 0 ? T = this.query : T === null && (T = l), E === void 0 ? E = this.fragment : E === null && (E = l), p === this.scheme && S === this.authority && y === this.path && T === this.query && E === this.fragment ? this : new A(p, S, y, T, E);
    }
    static parse(R, p = !1) {
      const S = f.exec(R);
      return S ? new A(S[2] || l, te(S[4] || l), te(S[5] || l), te(S[7] || l), te(S[9] || l), p) : new A(l, l, l, l, l);
    }
    static file(R) {
      let p = l;
      if (i && (R = R.replace(/\\/g, u)), R[0] === u && R[1] === u) {
        const S = R.indexOf(u, 2);
        S === -1 ? (p = R.substring(2), R = u) : (p = R.substring(2, S), R = R.substring(S) || u);
      }
      return new A("file", p, R, l, l);
    }
    static from(R) {
      const p = new A(R.scheme, R.authority, R.path, R.query, R.fragment);
      return c(p, !0), p;
    }
    toString(R = !1) {
      return b(this, R);
    }
    toJSON() {
      return this;
    }
    static revive(R) {
      if (R) {
        if (R instanceof m) return R;
        {
          const p = new A(R);
          return p._formatted = R.external, p._fsPath = R._sep === g ? R.fsPath : null, p;
        }
      }
      return R;
    }
  }
  const g = i ? 1 : void 0;
  class A extends m {
    constructor() {
      super(...arguments);
      dn(this, "_formatted", null);
      dn(this, "_fsPath", null);
    }
    get fsPath() {
      return this._fsPath || (this._fsPath = O(this)), this._fsPath;
    }
    toString(p = !1) {
      return p ? b(this, !0) : (this._formatted || (this._formatted = b(this, !1)), this._formatted);
    }
    toJSON() {
      const p = { $mid: 1 };
      return this._fsPath && (p.fsPath = this._fsPath, p._sep = g), this._formatted && (p.external = this._formatted), this.path && (p.path = this.path), this.scheme && (p.scheme = this.scheme), this.authority && (p.authority = this.authority), this.query && (p.query = this.query), this.fragment && (p.fragment = this.fragment), p;
    }
  }
  const N = { 58: "%3A", 47: "%2F", 63: "%3F", 35: "%23", 91: "%5B", 93: "%5D", 64: "%40", 33: "%21", 36: "%24", 38: "%26", 39: "%27", 40: "%28", 41: "%29", 42: "%2A", 43: "%2B", 44: "%2C", 59: "%3B", 61: "%3D", 32: "%20" };
  function $(k, R, p) {
    let S, y = -1;
    for (let T = 0; T < k.length; T++) {
      const E = k.charCodeAt(T);
      if (E >= 97 && E <= 122 || E >= 65 && E <= 90 || E >= 48 && E <= 57 || E === 45 || E === 46 || E === 95 || E === 126 || R && E === 47 || p && E === 91 || p && E === 93 || p && E === 58) y !== -1 && (S += encodeURIComponent(k.substring(y, T)), y = -1), S !== void 0 && (S += k.charAt(T));
      else {
        S === void 0 && (S = k.substr(0, T));
        const P = N[E];
        P !== void 0 ? (y !== -1 && (S += encodeURIComponent(k.substring(y, T)), y = -1), S += P) : y === -1 && (y = T);
      }
    }
    return y !== -1 && (S += encodeURIComponent(k.substring(y))), S !== void 0 ? S : k;
  }
  function w(k) {
    let R;
    for (let p = 0; p < k.length; p++) {
      const S = k.charCodeAt(p);
      S === 35 || S === 63 ? (R === void 0 && (R = k.substr(0, p)), R += N[S]) : R !== void 0 && (R += k[p]);
    }
    return R !== void 0 ? R : k;
  }
  function O(k, R) {
    let p;
    return p = k.authority && k.path.length > 1 && k.scheme === "file" ? `//${k.authority}${k.path}` : k.path.charCodeAt(0) === 47 && (k.path.charCodeAt(1) >= 65 && k.path.charCodeAt(1) <= 90 || k.path.charCodeAt(1) >= 97 && k.path.charCodeAt(1) <= 122) && k.path.charCodeAt(2) === 58 ? k.path[1].toLowerCase() + k.path.substr(2) : k.path, i && (p = p.replace(/\//g, "\\")), p;
  }
  function b(k, R) {
    const p = R ? w : $;
    let S = "", { scheme: y, authority: T, path: E, query: P, fragment: D } = k;
    if (y && (S += y, S += ":"), (T || y === "file") && (S += u, S += u), T) {
      let L = T.indexOf("@");
      if (L !== -1) {
        const z = T.substr(0, L);
        T = T.substr(L + 1), L = z.lastIndexOf(":"), L === -1 ? S += p(z, !1, !1) : (S += p(z.substr(0, L), !1, !1), S += ":", S += p(z.substr(L + 1), !1, !0)), S += "@";
      }
      T = T.toLowerCase(), L = T.lastIndexOf(":"), L === -1 ? S += p(T, !1, !0) : (S += p(T.substr(0, L), !1, !0), S += T.substr(L));
    }
    if (E) {
      if (E.length >= 3 && E.charCodeAt(0) === 47 && E.charCodeAt(2) === 58) {
        const L = E.charCodeAt(1);
        L >= 65 && L <= 90 && (E = `/${String.fromCharCode(L + 32)}:${E.substr(3)}`);
      } else if (E.length >= 2 && E.charCodeAt(1) === 58) {
        const L = E.charCodeAt(0);
        L >= 65 && L <= 90 && (E = `${String.fromCharCode(L + 32)}:${E.substr(2)}`);
      }
      S += p(E, !0, !1);
    }
    return P && (S += "?", S += p(P, !1, !1)), D && (S += "#", S += R ? D : $(D, !1, !1)), S;
  }
  function x(k) {
    try {
      return decodeURIComponent(k);
    } catch {
      return k.length > 3 ? k.substr(0, 3) + x(k.substr(3)) : k;
    }
  }
  const X = /(%[0-9A-Za-z][0-9A-Za-z])+/g;
  function te(k) {
    return k.match(X) ? k.replace(X, (R) => x(R)) : k;
  }
  var ne = n(975);
  const ye = ne.posix || ne, Ce = "/";
  var de;
  (function(k) {
    k.joinPath = function(R, ...p) {
      return R.with({ path: ye.join(R.path, ...p) });
    }, k.resolvePath = function(R, ...p) {
      let S = R.path, y = !1;
      S[0] !== Ce && (S = Ce + S, y = !0);
      let T = ye.resolve(S, ...p);
      return y && T[0] === Ce && !R.authority && (T = T.substring(1)), R.with({ path: T });
    }, k.dirname = function(R) {
      if (R.path.length === 0 || R.path === Ce) return R;
      let p = ye.dirname(R.path);
      return p.length === 1 && p.charCodeAt(0) === 46 && (p = ""), R.with({ path: p });
    }, k.basename = function(R) {
      return ye.basename(R.path);
    }, k.extname = function(R) {
      return ye.extname(R.path);
    };
  })(de || (de = {})), ap = r;
})();
const { URI: wt, Utils: ki } = ap;
var ct;
(function(t) {
  t.basename = ki.basename, t.dirname = ki.dirname, t.extname = ki.extname, t.joinPath = ki.joinPath, t.resolvePath = ki.resolvePath;
  const e = typeof process == "object" && (process == null ? void 0 : process.platform) === "win32";
  function n(a, o) {
    return (a == null ? void 0 : a.toString()) === (o == null ? void 0 : o.toString());
  }
  t.equals = n;
  function r(a, o) {
    const c = typeof a == "string" ? wt.parse(a).path : a.path, l = typeof o == "string" ? wt.parse(o).path : o.path, u = c.split("/").filter((N) => N.length > 0), f = l.split("/").filter((N) => N.length > 0);
    if (e) {
      const N = /^[A-Z]:$/;
      if (u[0] && N.test(u[0]) && (u[0] = u[0].toLowerCase()), f[0] && N.test(f[0]) && (f[0] = f[0].toLowerCase()), u[0] !== f[0])
        return l.substring(1);
    }
    let m = 0;
    for (; m < u.length && u[m] === f[m]; m++)
      ;
    const g = "../".repeat(u.length - m), A = f.slice(m).join("/");
    return g + A;
  }
  t.relative = r;
  function i(a) {
    return wt.parse(a.toString()).toString();
  }
  t.normalize = i;
  function s(a, o) {
    let c = typeof a == "string" ? a : a.path, l = typeof o == "string" ? o : o.path;
    return l.charAt(l.length - 1) === "/" && (l = l.slice(0, -1)), c.charAt(c.length - 1) === "/" && (c = c.slice(0, -1)), l === c ? !0 : l.length < c.length || l.charAt(c.length) !== "/" ? !1 : l.startsWith(c);
  }
  t.contains = s;
})(ct || (ct = {}));
class BR {
  constructor() {
    this.root = { name: "", children: /* @__PURE__ */ new Map() };
  }
  normalizeUri(e) {
    return ct.normalize(e);
  }
  clear() {
    this.root.children.clear();
  }
  insert(e, n) {
    const r = this.getNode(this.normalizeUri(e), !0);
    r.element = n;
  }
  delete(e) {
    const n = this.getNode(this.normalizeUri(e), !1);
    n != null && n.parent && n.parent.children.delete(n.name);
  }
  has(e) {
    var n;
    return ((n = this.getNode(this.normalizeUri(e), !1)) == null ? void 0 : n.element) !== void 0;
  }
  hasNode(e) {
    return this.getNode(this.normalizeUri(e), !1) !== void 0;
  }
  find(e) {
    var n;
    return (n = this.getNode(this.normalizeUri(e), !1)) == null ? void 0 : n.element;
  }
  findNode(e) {
    const n = this.normalizeUri(e), r = this.getNode(n, !1);
    if (r)
      return {
        name: r.name,
        uri: ct.joinPath(wt.parse(n), r.name).toString(),
        element: r.element
      };
  }
  findChildren(e) {
    const n = this.normalizeUri(e), r = this.getNode(n, !1);
    return r ? Array.from(r.children.values()).map((i) => ({
      name: i.name,
      uri: ct.joinPath(wt.parse(n), i.name).toString(),
      element: i.element
    })) : [];
  }
  all() {
    return this.collectValues(this.root);
  }
  findAll(e) {
    const n = this.getNode(ct.normalize(e), !1);
    return n ? this.collectValues(n) : [];
  }
  getNode(e, n) {
    const r = e.split("/");
    e.charAt(e.length - 1) === "/" && r.pop();
    let i = this.root;
    for (const s of r) {
      let a = i.children.get(s);
      if (!a)
        if (n)
          a = {
            name: s,
            children: /* @__PURE__ */ new Map(),
            parent: i
          }, i.children.set(s, a);
        else
          return;
      i = a;
    }
    return i;
  }
  collectValues(e) {
    const n = [];
    e.element && n.push(e.element);
    for (const r of e.children.values())
      n.push(...this.collectValues(r));
    return n;
  }
}
var K;
(function(t) {
  t[t.Changed = 0] = "Changed", t[t.Parsed = 1] = "Parsed", t[t.IndexedContent = 2] = "IndexedContent", t[t.ComputedScopes = 3] = "ComputedScopes", t[t.Linked = 4] = "Linked", t[t.IndexedReferences = 5] = "IndexedReferences", t[t.Validated = 6] = "Validated";
})(K || (K = {}));
class qR {
  constructor(e) {
    this.serviceRegistry = e.ServiceRegistry, this.textDocuments = e.workspace.TextDocuments, this.fileSystemProvider = e.workspace.FileSystemProvider;
  }
  async fromUri(e, n = ge.None) {
    const r = await this.fileSystemProvider.readFile(e);
    return this.createAsync(e, r, n);
  }
  fromTextDocument(e, n, r) {
    return n = n ?? wt.parse(e.uri), ge.is(r) ? this.createAsync(n, e, r) : this.create(n, e, r);
  }
  fromString(e, n, r) {
    return ge.is(r) ? this.createAsync(n, e, r) : this.create(n, e, r);
  }
  fromModel(e, n) {
    return this.create(n, { $model: e });
  }
  create(e, n, r) {
    if (typeof n == "string") {
      const i = this.parse(e, n, r);
      return this.createLangiumDocument(i, e, void 0, n);
    } else if ("$model" in n) {
      const i = { value: n.$model, parserErrors: [], lexerErrors: [] };
      return this.createLangiumDocument(i, e);
    } else {
      const i = this.parse(e, n.getText(), r);
      return this.createLangiumDocument(i, e, n);
    }
  }
  async createAsync(e, n, r) {
    if (typeof n == "string") {
      const i = await this.parseAsync(e, n, r);
      return this.createLangiumDocument(i, e, void 0, n);
    } else {
      const i = await this.parseAsync(e, n.getText(), r);
      return this.createLangiumDocument(i, e, n);
    }
  }
  /**
   * Create a LangiumDocument from a given parse result.
   *
   * A TextDocument is created on demand if it is not provided as argument here. Usually this
   * should not be necessary because the main purpose of the TextDocument is to convert between
   * text ranges and offsets, which is done solely in LSP request handling.
   *
   * With the introduction of {@link update} below this method is supposed to be mainly called
   * during workspace initialization and on addition/recognition of new files, while changes in
   * existing documents are processed via {@link update}.
   */
  createLangiumDocument(e, n, r, i) {
    let s;
    if (r)
      s = {
        parseResult: e,
        uri: n,
        state: K.Parsed,
        references: [],
        textDocument: r
      };
    else {
      const a = this.createTextDocumentGetter(n, i);
      s = {
        parseResult: e,
        uri: n,
        state: K.Parsed,
        references: [],
        get textDocument() {
          return a();
        }
      };
    }
    return e.value.$document = s, s;
  }
  async update(e, n) {
    var a, o;
    const r = (a = e.parseResult.value.$cstNode) == null ? void 0 : a.root.fullText, i = (o = this.textDocuments) == null ? void 0 : o.get(e.uri.toString()), s = i ? i.getText() : await this.fileSystemProvider.readFile(e.uri);
    if (i)
      Object.defineProperty(e, "textDocument", {
        value: i
      });
    else {
      const c = this.createTextDocumentGetter(e.uri, s);
      Object.defineProperty(e, "textDocument", {
        get: c
      });
    }
    return r !== s && (e.parseResult = await this.parseAsync(e.uri, s, n), e.parseResult.value.$document = e), e.state = K.Parsed, e;
  }
  parse(e, n, r) {
    return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(n, r);
  }
  parseAsync(e, n, r) {
    return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(n, r);
  }
  createTextDocumentGetter(e, n) {
    const r = this.serviceRegistry;
    let i;
    return () => i ?? (i = rl.create(e.toString(), r.getServices(e).LanguageMetaData.languageId, 0, n ?? ""));
  }
}
class WR {
  constructor(e) {
    this.documentTrie = new BR(), this.services = e, this.langiumDocumentFactory = e.workspace.LangiumDocumentFactory, this.documentBuilder = () => e.workspace.DocumentBuilder;
  }
  get all() {
    return pe(this.documentTrie.all());
  }
  addDocument(e) {
    const n = e.uri.toString();
    if (this.documentTrie.has(n))
      throw new Error(`A document with the URI '${n}' is already present.`);
    this.documentTrie.insert(n, e);
  }
  getDocument(e) {
    const n = e.toString();
    return this.documentTrie.find(n);
  }
  getDocuments(e) {
    const n = e.toString();
    return this.documentTrie.findAll(n);
  }
  async getOrCreateDocument(e, n) {
    let r = this.getDocument(e);
    return r || (r = await this.langiumDocumentFactory.fromUri(e, n), this.addDocument(r), r);
  }
  createDocument(e, n, r) {
    if (r)
      return this.langiumDocumentFactory.fromString(n, e, r).then((i) => (this.addDocument(i), i));
    {
      const i = this.langiumDocumentFactory.fromString(n, e);
      return this.addDocument(i), i;
    }
  }
  hasDocument(e) {
    return this.documentTrie.has(e.toString());
  }
  /**
   * @deprecated Since 4.2 use `DocumentBuilder.resetToState(DocumentState.Changed)` instead
   * TODO remove this for the next major release
   */
  invalidateDocument(e) {
    const n = e.toString(), r = this.documentTrie.find(n);
    return r && this.documentBuilder().resetToState(r, K.Changed), r;
  }
  deleteDocument(e) {
    const n = e.toString(), r = this.documentTrie.find(n);
    return r && (r.state = K.Changed, this.documentTrie.delete(n)), r;
  }
  deleteDocuments(e) {
    const n = e.toString(), r = this.documentTrie.findAll(n);
    for (const i of r)
      i.state = K.Changed;
    return this.documentTrie.delete(n), r;
  }
}
const rr = Symbol("RefResolving");
class VR {
  constructor(e) {
    this.reflection = e.shared.AstReflection, this.langiumDocuments = () => e.shared.workspace.LangiumDocuments, this.scopeProvider = e.references.ScopeProvider, this.astNodeLocator = e.workspace.AstNodeLocator, this.profiler = e.shared.profilers.LangiumProfiler, this.languageId = e.LanguageMetaData.languageId;
  }
  async link(e, n = ge.None) {
    var r;
    if ((r = this.profiler) != null && r.isActive("linking")) {
      const i = this.profiler.createTask("linking", this.languageId);
      i.start();
      try {
        for (const s of Zt(e.parseResult.value))
          await He(n), ia(s).forEach((a) => {
            const o = `${s.$type}:${a.property}`;
            i.startSubTask(o);
            try {
              this.doLink(a, e);
            } finally {
              i.stopSubTask(o);
            }
          });
      } finally {
        i.stop();
      }
    } else
      for (const i of Zt(e.parseResult.value))
        await He(n), ia(i).forEach((s) => this.doLink(s, e));
  }
  doLink(e, n) {
    const r = e.reference;
    if ("_ref" in r && r._ref === void 0) {
      r._ref = rr;
      try {
        const i = this.getCandidate(e);
        if (Ri(i))
          r._ref = i;
        else {
          r._nodeDescription = i;
          const s = this.loadAstNode(i);
          r._ref = s ?? this.createLinkingError(e, i);
        }
      } catch (i) {
        console.error(`An error occurred while resolving reference to '${r.$refText}':`, i);
        const s = i.message ?? String(i);
        r._ref = {
          info: e,
          message: `An error occurred while resolving reference to '${r.$refText}': ${s}`
        };
      }
      n.references.push(r);
    } else if ("_items" in r && r._items === void 0) {
      r._items = rr;
      try {
        const i = this.getCandidates(e), s = [];
        if (Ri(i))
          r._linkingError = i;
        else
          for (const a of i) {
            const o = this.loadAstNode(a);
            o && s.push({ ref: o, $nodeDescription: a });
          }
        r._items = s;
      } catch (i) {
        r._linkingError = {
          info: e,
          message: `An error occurred while resolving reference to '${r.$refText}': ${i}`
        }, r._items = [];
      }
      n.references.push(r);
    }
  }
  unlink(e) {
    for (const n of e.references)
      "_ref" in n ? (n._ref = void 0, delete n._nodeDescription) : "_items" in n && (n._items = void 0, delete n._linkingError);
    e.references = [];
  }
  getCandidate(e) {
    return this.scopeProvider.getScope(e).getElement(e.reference.$refText) ?? this.createLinkingError(e);
  }
  getCandidates(e) {
    const r = this.scopeProvider.getScope(e).getElements(e.reference.$refText).distinct((i) => `${i.documentUri}#${i.path}`).toArray();
    return r.length > 0 ? r : this.createLinkingError(e);
  }
  buildReference(e, n, r, i) {
    const s = this, a = {
      $refNode: r,
      $refText: i,
      _ref: void 0,
      get ref() {
        if (We(this._ref))
          return this._ref;
        if (mm(this._nodeDescription)) {
          const o = s.loadAstNode(this._nodeDescription);
          this._ref = o ?? s.createLinkingError({ reference: a, container: e, property: n }, this._nodeDescription);
        } else if (this._ref === void 0) {
          this._ref = rr;
          const o = zs(e).$document, c = s.getLinkedNode({ reference: a, container: e, property: n });
          if (c.error && o && o.state < K.ComputedScopes)
            return this._ref = void 0;
          this._ref = c.node ?? c.error, this._nodeDescription = c.descr, o == null || o.references.push(this);
        } else this._ref === rr && s.throwCyclicReferenceError(e, n, i);
        return We(this._ref) ? this._ref : void 0;
      },
      get $nodeDescription() {
        return this._nodeDescription;
      },
      get error() {
        return Ri(this._ref) ? this._ref : void 0;
      }
    };
    return a;
  }
  buildMultiReference(e, n, r, i) {
    const s = this, a = {
      $refNode: r,
      $refText: i,
      _items: void 0,
      get items() {
        if (Array.isArray(this._items))
          return this._items;
        if (this._items === void 0) {
          this._items = rr;
          const o = zs(e).$document, c = s.getCandidates({
            reference: a,
            container: e,
            property: n
          }), l = [];
          if (Ri(c))
            this._linkingError = c;
          else
            for (const u of c) {
              const f = s.loadAstNode(u);
              f && l.push({ ref: f, $nodeDescription: u });
            }
          this._items = l, o == null || o.references.push(this);
        } else this._items === rr && s.throwCyclicReferenceError(e, n, i);
        return Array.isArray(this._items) ? this._items : [];
      },
      get error() {
        if (this._linkingError)
          return this._linkingError;
        if (!(this.items.length > 0))
          return this._linkingError = s.createLinkingError({ reference: a, container: e, property: n });
      }
    };
    return a;
  }
  throwCyclicReferenceError(e, n, r) {
    throw new Error(`Cyclic reference resolution detected: ${this.astNodeLocator.getAstNodePath(e)}/${n} (symbol '${r}')`);
  }
  getLinkedNode(e) {
    try {
      const n = this.getCandidate(e);
      if (Ri(n))
        return { error: n };
      const r = this.loadAstNode(n);
      return r ? { node: r, descr: n } : {
        descr: n,
        error: this.createLinkingError(e, n)
      };
    } catch (n) {
      console.error(`An error occurred while resolving reference to '${e.reference.$refText}':`, n);
      const r = n.message ?? String(n);
      return {
        error: {
          info: e,
          message: `An error occurred while resolving reference to '${e.reference.$refText}': ${r}`
        }
      };
    }
  }
  loadAstNode(e) {
    if (e.node)
      return e.node;
    const n = this.langiumDocuments().getDocument(e.documentUri);
    if (n)
      return this.astNodeLocator.getAstNode(n.parseResult.value, e.path);
  }
  createLinkingError(e, n) {
    const r = zs(e.container).$document;
    r && r.state < K.ComputedScopes && console.warn(`Attempted reference resolution before document reached ComputedScopes state (${r.uri}).`);
    const i = this.reflection.getReferenceType(e);
    return {
      info: e,
      message: `Could not resolve reference to ${i} named '${e.reference.$refText}'.`,
      targetDescription: n
    };
  }
}
function KR(t) {
  return typeof t.name == "string";
}
class HR {
  getName(e) {
    if (KR(e))
      return e.name;
  }
  getNameNode(e) {
    return Yf(e.$cstNode, "name");
  }
}
class YR {
  constructor(e) {
    this.nameProvider = e.references.NameProvider, this.index = e.shared.workspace.IndexManager, this.nodeLocator = e.workspace.AstNodeLocator, this.documents = e.shared.workspace.LangiumDocuments, this.hasMultiReference = Zt(e.Grammar).some((n) => Ma(n) && n.isMulti);
  }
  findDeclarations(e) {
    if (e) {
      const n = ag(e), r = e.astNode;
      if (n && r) {
        const i = r[n.feature];
        if (Ct(i) || hn(i))
          return Jl(i);
        if (Array.isArray(i)) {
          for (const s of i)
            if ((Ct(s) || hn(s)) && s.$refNode && s.$refNode.offset <= e.offset && s.$refNode.end >= e.end)
              return Jl(s);
        }
      }
      if (r) {
        const i = this.nameProvider.getNameNode(r);
        if (i && (i === e || Mm(e, i)))
          return this.getSelfNodes(r);
      }
    }
    return [];
  }
  /**
   * Returns all self-references for the specified node.
   * Since the node can be part of a multi-reference, this method returns all nodes that are part of the same multi-reference.
   */
  getSelfNodes(e) {
    if (this.hasMultiReference) {
      const n = this.index.findAllReferences(e, this.nodeLocator.getAstNodePath(e)), r = this.getNodeFromReferenceDescription(n.head());
      if (r) {
        for (const i of ia(r))
          if (hn(i.reference) && i.reference.items.some((s) => s.ref === e))
            return i.reference.items.map((s) => s.ref);
      }
      return [e];
    } else
      return [e];
  }
  getNodeFromReferenceDescription(e) {
    if (!e)
      return;
    const n = this.documents.getDocument(e.sourceUri);
    if (n)
      return this.nodeLocator.getAstNode(n.parseResult.value, e.sourcePath);
  }
  findDeclarationNodes(e) {
    const n = this.findDeclarations(e), r = [];
    for (const i of n) {
      const s = this.nameProvider.getNameNode(i) ?? i.$cstNode;
      s && r.push(s);
    }
    return r;
  }
  findReferences(e, n) {
    const r = [];
    n.includeDeclaration && r.push(...this.getSelfReferences(e));
    let i = this.index.findAllReferences(e, this.nodeLocator.getAstNodePath(e));
    return n.documentUri && (i = i.filter((s) => ct.equals(s.sourceUri, n.documentUri))), r.push(...i), pe(r);
  }
  getSelfReferences(e) {
    const n = this.getSelfNodes(e), r = [];
    for (const i of n) {
      const s = this.nameProvider.getNameNode(i);
      if (s) {
        const a = Qt(i), o = this.nodeLocator.getAstNodePath(i);
        r.push({
          sourceUri: a.uri,
          sourcePath: o,
          targetUri: a.uri,
          targetPath: o,
          segment: aa(s),
          local: !0
        });
      }
    }
    return r;
  }
}
class Zi {
  constructor(e) {
    if (this.map = /* @__PURE__ */ new Map(), e)
      for (const [n, r] of e)
        this.add(n, r);
  }
  /**
   * The total number of values in the multimap.
   */
  get size() {
    return _o.sum(pe(this.map.values()).map((e) => e.length));
  }
  /**
   * Clear all entries in the multimap.
   */
  clear() {
    this.map.clear();
  }
  /**
   * Operates differently depending on whether a `value` is given:
   *  * With a value, this method deletes the specific key / value pair from the multimap.
   *  * Without a value, all values associated with the given key are deleted.
   *
   * @returns `true` if a value existed and has been removed, or `false` if the specified
   *     key / value does not exist.
   */
  delete(e, n) {
    if (n === void 0)
      return this.map.delete(e);
    {
      const r = this.map.get(e);
      if (r) {
        const i = r.indexOf(n);
        if (i >= 0)
          return r.length === 1 ? this.map.delete(e) : r.splice(i, 1), !0;
      }
      return !1;
    }
  }
  /**
   * Returns an array of all values associated with the given key. If no value exists,
   * an empty array is returned.
   *
   * _Note:_ The returned array is assumed not to be modified. Use the `set` method to add a
   * value and `delete` to remove a value from the multimap.
   */
  get(e) {
    return this.map.get(e) ?? [];
  }
  /**
   * Returns a stream of all values associated with the given key. If no value exists,
   * {@link EMPTY_STREAM} is returned.
   */
  getStream(e) {
    const n = this.map.get(e);
    return n ? pe(n) : Ff;
  }
  /**
   * Operates differently depending on whether a `value` is given:
   *  * With a value, this method returns `true` if the specific key / value pair is present in the multimap.
   *  * Without a value, this method returns `true` if the given key is present in the multimap.
   */
  has(e, n) {
    if (n === void 0)
      return this.map.has(e);
    {
      const r = this.map.get(e);
      return r ? r.indexOf(n) >= 0 : !1;
    }
  }
  /**
   * Add the given key / value pair to the multimap.
   */
  add(e, n) {
    return this.map.has(e) ? this.map.get(e).push(n) : this.map.set(e, [n]), this;
  }
  /**
   * Add the given set of key / value pairs to the multimap.
   */
  addAll(e, n) {
    return this.map.has(e) ? this.map.get(e).push(...n) : this.map.set(e, Array.from(n)), this;
  }
  /**
   * Invokes the given callback function for every key / value pair in the multimap.
   */
  forEach(e) {
    this.map.forEach((n, r) => n.forEach((i) => e(i, r, this)));
  }
  /**
   * Returns an iterator of key, value pairs for every entry in the map.
   */
  [Symbol.iterator]() {
    return this.entries().iterator();
  }
  /**
   * Returns a stream of key, value pairs for every entry in the map.
   */
  entries() {
    return pe(this.map.entries()).flatMap(([e, n]) => n.map((r) => [e, r]));
  }
  /**
   * Returns a stream of keys in the map.
   */
  keys() {
    return pe(this.map.keys());
  }
  /**
   * Returns a stream of values in the map.
   */
  values() {
    return pe(this.map.values()).flat();
  }
  /**
   * Returns a stream of key, value set pairs for every key in the map.
   */
  entriesGroupedByKey() {
    return pe(this.map.entries());
  }
}
class Uu {
  get size() {
    return this.map.size;
  }
  constructor(e) {
    if (this.map = /* @__PURE__ */ new Map(), this.inverse = /* @__PURE__ */ new Map(), e)
      for (const [n, r] of e)
        this.set(n, r);
  }
  clear() {
    this.map.clear(), this.inverse.clear();
  }
  set(e, n) {
    return this.map.set(e, n), this.inverse.set(n, e), this;
  }
  get(e) {
    return this.map.get(e);
  }
  getKey(e) {
    return this.inverse.get(e);
  }
  delete(e) {
    const n = this.map.get(e);
    return n !== void 0 ? (this.map.delete(e), this.inverse.delete(n), !0) : !1;
  }
}
class XR {
  constructor(e) {
    this.nameProvider = e.references.NameProvider, this.descriptions = e.workspace.AstNodeDescriptionProvider;
  }
  async collectExportedSymbols(e, n = ge.None) {
    return this.collectExportedSymbolsForNode(e.parseResult.value, e, void 0, n);
  }
  /**
   * Creates {@link AstNodeDescription AstNodeDescriptions} for the given {@link AstNode parentNode} and its children.
   * The list of children to be considered is determined by the function parameter {@link children}.
   * By default only the direct children of {@link parentNode} are visited, nested nodes are not exported.
   *
   * @param parentNode AST node to be exported, i.e., of which an {@link AstNodeDescription} shall be added to the returned list.
   * @param document The document containing the AST node to be exported.
   * @param children A function called with {@link parentNode} as single argument and returning an {@link Iterable} supplying the children to be visited, which must be directly or transitively contained in {@link parentNode}.
   * @param cancelToken Indicates when to cancel the current operation.
   * @throws `OperationCancelled` if a user action occurs during execution.
   * @returns A list of {@link AstNodeDescription AstNodeDescriptions} to be published to index.
   */
  async collectExportedSymbolsForNode(e, n, r = Cl, i = ge.None) {
    const s = [];
    this.addExportedSymbol(e, s, n);
    for (const a of r(e))
      await He(i), this.addExportedSymbol(a, s, n);
    return s;
  }
  /**
   * Adds a single node to the list of exports if it has a name. Override this method to change how
   * symbols are exported, e.g. by modifying their exported name.
   */
  addExportedSymbol(e, n, r) {
    const i = this.nameProvider.getName(e);
    i && n.push(this.descriptions.createDescription(e, i, r));
  }
  // --- local symbols gathering ---
  async collectLocalSymbols(e, n = ge.None) {
    const r = e.parseResult.value, i = new Zi();
    for (const s of is(r))
      await He(n), this.addLocalSymbol(s, e, i);
    return i;
  }
  /**
   * Adds a single node to the local symbols of its containing document if it has a name.
   * The default implementation makes the node visible in the subtree of its container if it does have a container.
   * Override this method to change this, e.g. by increasing the visibility to a higher level in the AST.
   */
  addLocalSymbol(e, n, r) {
    const i = e.$container;
    if (i) {
      const s = this.nameProvider.getName(e);
      s && r.add(i, this.descriptions.createDescription(e, s, n));
    }
  }
}
class ju {
  constructor(e, n, r) {
    this.elements = e, this.outerScope = n, this.caseInsensitive = (r == null ? void 0 : r.caseInsensitive) ?? !1, this.concatOuterScope = (r == null ? void 0 : r.concatOuterScope) ?? !0;
  }
  getAllElements() {
    return this.outerScope ? this.elements.concat(this.outerScope.getAllElements()) : this.elements;
  }
  getElement(e) {
    const n = this.caseInsensitive ? e.toLowerCase() : e, r = this.caseInsensitive ? this.elements.find((i) => i.name.toLowerCase() === n) : this.elements.find((i) => i.name === e);
    if (r)
      return r;
    if (this.outerScope)
      return this.outerScope.getElement(e);
  }
  getElements(e) {
    const n = this.caseInsensitive ? e.toLowerCase() : e, r = this.caseInsensitive ? this.elements.filter((i) => i.name.toLowerCase() === n) : this.elements.filter((i) => i.name === e);
    return (this.concatOuterScope || r.isEmpty()) && this.outerScope ? r.concat(this.outerScope.getElements(e)) : r;
  }
}
class JR {
  constructor(e, n, r) {
    this.elements = new Zi(), this.caseInsensitive = (r == null ? void 0 : r.caseInsensitive) ?? !1, this.concatOuterScope = (r == null ? void 0 : r.concatOuterScope) ?? !0;
    for (const i of e) {
      const s = this.caseInsensitive ? i.name.toLowerCase() : i.name;
      this.elements.add(s, i);
    }
    this.outerScope = n;
  }
  getElement(e) {
    const n = this.caseInsensitive ? e.toLowerCase() : e, r = this.elements.get(n)[0];
    if (r)
      return r;
    if (this.outerScope)
      return this.outerScope.getElement(e);
  }
  getElements(e) {
    const n = this.caseInsensitive ? e.toLowerCase() : e, r = this.elements.get(n);
    return (this.concatOuterScope || r.length === 0) && this.outerScope ? pe(r).concat(this.outerScope.getElements(e)) : pe(r);
  }
  getAllElements() {
    let e = pe(this.elements.values());
    return this.outerScope && (e = e.concat(this.outerScope.getAllElements())), e;
  }
}
class op {
  constructor() {
    this.toDispose = [], this.isDisposed = !1;
  }
  onDispose(e) {
    this.toDispose.push(e);
  }
  dispose() {
    this.throwIfDisposed(), this.clear(), this.isDisposed = !0, this.toDispose.forEach((e) => e.dispose());
  }
  throwIfDisposed() {
    if (this.isDisposed)
      throw new Error("This cache has already been disposed");
  }
}
class QR extends op {
  constructor() {
    super(...arguments), this.cache = /* @__PURE__ */ new Map();
  }
  has(e) {
    return this.throwIfDisposed(), this.cache.has(e);
  }
  set(e, n) {
    this.throwIfDisposed(), this.cache.set(e, n);
  }
  get(e, n) {
    if (this.throwIfDisposed(), this.cache.has(e))
      return this.cache.get(e);
    if (n) {
      const r = n();
      return this.cache.set(e, r), r;
    } else
      return;
  }
  delete(e) {
    return this.throwIfDisposed(), this.cache.delete(e);
  }
  clear() {
    this.throwIfDisposed(), this.cache.clear();
  }
}
class ZR extends op {
  constructor(e) {
    super(), this.cache = /* @__PURE__ */ new Map(), this.converter = e ?? ((n) => n);
  }
  has(e, n) {
    return this.throwIfDisposed(), this.cacheForContext(e).has(n);
  }
  set(e, n, r) {
    this.throwIfDisposed(), this.cacheForContext(e).set(n, r);
  }
  get(e, n, r) {
    this.throwIfDisposed();
    const i = this.cacheForContext(e);
    if (i.has(n))
      return i.get(n);
    if (r) {
      const s = r();
      return i.set(n, s), s;
    } else
      return;
  }
  delete(e, n) {
    return this.throwIfDisposed(), this.cacheForContext(e).delete(n);
  }
  clear(e) {
    if (this.throwIfDisposed(), e) {
      const n = this.converter(e);
      this.cache.delete(n);
    } else
      this.cache.clear();
  }
  cacheForContext(e) {
    const n = this.converter(e);
    let r = this.cache.get(n);
    return r || (r = /* @__PURE__ */ new Map(), this.cache.set(n, r)), r;
  }
}
class ev extends QR {
  /**
   * Creates a new workspace cache.
   *
   * @param sharedServices Service container instance to hook into document lifecycle events.
   * @param state Optional document state on which the cache should evict.
   * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.
   * *Deleted* documents are considered in both cases.
   */
  constructor(e, n) {
    super(), n ? (this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(n, () => {
      this.clear();
    })), this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((r, i) => {
      i.length > 0 && this.clear();
    }))) : this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(() => {
      this.clear();
    }));
  }
}
class tv {
  constructor(e) {
    this.reflection = e.shared.AstReflection, this.nameProvider = e.references.NameProvider, this.descriptions = e.workspace.AstNodeDescriptionProvider, this.indexManager = e.shared.workspace.IndexManager, this.globalScopeCache = new ev(e.shared);
  }
  getScope(e) {
    const n = [], r = this.reflection.getReferenceType(e), i = Qt(e.container).localSymbols;
    if (i) {
      let a = e.container;
      do
        i.has(a) && n.push(i.getStream(a).filter((o) => this.reflection.isSubtype(o.type, r))), a = a.$container;
      while (a);
    }
    let s = this.getGlobalScope(r, e);
    for (let a = n.length - 1; a >= 0; a--)
      s = this.createScope(n[a], s);
    return s;
  }
  /**
   * Create a scope for the given collection of AST node descriptions.
   */
  createScope(e, n, r) {
    return new ju(pe(e), n, r);
  }
  /**
   * Create a scope for the given collection of AST nodes, which need to be transformed into respective
   * descriptions first. This is done using the `NameProvider` and `AstNodeDescriptionProvider` services.
   */
  createScopeForNodes(e, n, r) {
    const i = pe(e).map((s) => {
      const a = this.nameProvider.getName(s);
      if (a)
        return this.descriptions.createDescription(s, a);
    }).nonNullable();
    return new ju(i, n, r);
  }
  /**
   * Create a global scope filtered for the given reference type.
   */
  getGlobalScope(e, n) {
    return this.globalScopeCache.get(e, () => new JR(this.indexManager.allElements(e)));
  }
}
function nv(t) {
  return typeof t.$comment == "string";
}
function zu(t) {
  return typeof t == "object" && !!t && ("$ref" in t || "$error" in t);
}
class rv {
  constructor(e) {
    this.ignoreProperties = /* @__PURE__ */ new Set(["$container", "$containerProperty", "$containerIndex", "$document", "$cstNode"]), this.langiumDocuments = e.shared.workspace.LangiumDocuments, this.astNodeLocator = e.workspace.AstNodeLocator, this.nameProvider = e.references.NameProvider, this.commentProvider = e.documentation.CommentProvider;
  }
  serialize(e, n) {
    const r = n ?? {}, i = n == null ? void 0 : n.replacer, s = (o, c) => this.replacer(o, c, r), a = i ? (o, c) => i(o, c, s) : s;
    try {
      return this.currentDocument = Qt(e), JSON.stringify(e, a, n == null ? void 0 : n.space);
    } finally {
      this.currentDocument = void 0;
    }
  }
  deserialize(e, n) {
    const r = n ?? {}, i = JSON.parse(e);
    return this.linkNode(i, i, r), i;
  }
  replacer(e, n, { refText: r, sourceText: i, textRegions: s, comments: a, uriConverter: o }) {
    var c, l, u;
    if (!this.ignoreProperties.has(e))
      if (Ct(n)) {
        const f = n.ref, m = r ? n.$refText : void 0;
        if (f) {
          const g = Qt(f);
          let A = "";
          this.currentDocument && this.currentDocument !== g && (o ? A = o(g.uri, f) : A = g.uri.toString());
          const N = this.astNodeLocator.getAstNodePath(f);
          return {
            $ref: `${A}#${N}`,
            $refText: m
          };
        } else
          return {
            $error: ((c = n.error) == null ? void 0 : c.message) ?? "Could not resolve reference",
            $refText: m
          };
      } else if (hn(n)) {
        const f = r ? n.$refText : void 0, m = [];
        for (const g of n.items) {
          const A = g.ref, N = Qt(g.ref);
          let $ = "";
          this.currentDocument && this.currentDocument !== N && (o ? $ = o(N.uri, A) : $ = N.uri.toString());
          const w = this.astNodeLocator.getAstNodePath(A);
          m.push(`${$}#${w}`);
        }
        return {
          $refs: m,
          $refText: f
        };
      } else if (We(n)) {
        let f;
        if (s && (f = this.addAstNodeRegionWithAssignmentsTo({ ...n }), (!e || n.$document) && (f != null && f.$textRegion) && (f.$textRegion.documentURI = (l = this.currentDocument) == null ? void 0 : l.uri.toString())), i && !e && (f ?? (f = { ...n }), f.$sourceText = (u = n.$cstNode) == null ? void 0 : u.text), a) {
          f ?? (f = { ...n });
          const m = this.commentProvider.getComment(n);
          m && (f.$comment = m.replace(/\r/g, ""));
        }
        return f ?? n;
      } else
        return n;
  }
  addAstNodeRegionWithAssignmentsTo(e) {
    const n = (r) => ({
      offset: r.offset,
      end: r.end,
      length: r.length,
      range: r.range
    });
    if (e.$cstNode) {
      const r = e.$textRegion = n(e.$cstNode), i = r.assignments = {};
      return Object.keys(e).filter((s) => !s.startsWith("$")).forEach((s) => {
        const a = rg(e.$cstNode, s).map(n);
        a.length !== 0 && (i[s] = a);
      }), e;
    }
  }
  linkNode(e, n, r, i, s, a) {
    for (const [c, l] of Object.entries(e))
      if (Array.isArray(l))
        for (let u = 0; u < l.length; u++) {
          const f = l[u];
          zu(f) ? l[u] = this.reviveReference(e, c, n, f, r) : We(f) && this.linkNode(f, n, r, e, c, u);
        }
      else zu(l) ? e[c] = this.reviveReference(e, c, n, l, r) : We(l) && this.linkNode(l, n, r, e, c);
    const o = e;
    o.$container = i, o.$containerProperty = s, o.$containerIndex = a;
  }
  reviveReference(e, n, r, i, s) {
    let a = i.$refText, o = i.$error, c;
    if (i.$ref) {
      const l = this.getRefNode(r, i.$ref, s.uriConverter);
      if (We(l))
        return a || (a = this.nameProvider.getName(l)), {
          $refText: a ?? "",
          ref: l
        };
      o = l;
    } else if (i.$refs) {
      const l = [];
      for (const u of i.$refs) {
        const f = this.getRefNode(r, u, s.uriConverter);
        We(f) && l.push({ ref: f });
      }
      if (l.length === 0)
        c = {
          $refText: a ?? "",
          items: l
        }, o ?? (o = "Could not resolve multi-reference");
      else
        return {
          $refText: a ?? "",
          items: l
        };
    }
    if (o)
      return c ?? (c = {
        $refText: a ?? "",
        ref: void 0
      }), c.error = {
        info: {
          container: e,
          property: n,
          reference: c
        },
        message: o
      }, c;
  }
  getRefNode(e, n, r) {
    try {
      const i = n.indexOf("#");
      if (i === 0) {
        const c = this.astNodeLocator.getAstNode(e, n.substring(1));
        return c || "Could not resolve path: " + n;
      }
      if (i < 0) {
        const c = r ? r(n) : wt.parse(n), l = this.langiumDocuments.getDocument(c);
        return l ? l.parseResult.value : "Could not find document for URI: " + n;
      }
      const s = r ? r(n.substring(0, i)) : wt.parse(n.substring(0, i)), a = this.langiumDocuments.getDocument(s);
      if (!a)
        return "Could not find document for URI: " + n;
      if (i === n.length - 1)
        return a.parseResult.value;
      const o = this.astNodeLocator.getAstNode(a.parseResult.value, n.substring(i + 1));
      return o || "Could not resolve URI: " + n;
    } catch (i) {
      return String(i);
    }
  }
}
class iv {
  /**
   * @deprecated Since 3.1.0. Use the new `fileExtensionMap` (or `languageIdMap`) property instead.
   */
  get map() {
    return this.fileExtensionMap;
  }
  constructor(e) {
    this.languageIdMap = /* @__PURE__ */ new Map(), this.fileExtensionMap = /* @__PURE__ */ new Map(), this.fileNameMap = /* @__PURE__ */ new Map(), this.textDocuments = e == null ? void 0 : e.workspace.TextDocuments;
  }
  register(e) {
    const n = e.LanguageMetaData;
    for (const r of n.fileExtensions)
      this.fileExtensionMap.has(r) && console.warn(`The file extension ${r} is used by multiple languages. It is now assigned to '${n.languageId}'.`), this.fileExtensionMap.set(r, e);
    if (n.fileNames)
      for (const r of n.fileNames)
        this.fileNameMap.has(r) && console.warn(`The file name ${r} is used by multiple languages. It is now assigned to '${n.languageId}'.`), this.fileNameMap.set(r, e);
    this.languageIdMap.set(n.languageId, e);
  }
  getServices(e) {
    var a, o;
    if (this.languageIdMap.size === 0)
      throw new Error("The service registry is empty. Use `register` to register the services of a language.");
    const n = (o = (a = this.textDocuments) == null ? void 0 : a.get(e)) == null ? void 0 : o.languageId;
    if (n !== void 0) {
      const c = this.languageIdMap.get(n);
      if (c)
        return c;
    }
    const r = ct.extname(e), i = ct.basename(e), s = this.fileNameMap.get(i) ?? this.fileExtensionMap.get(r);
    if (!s)
      throw n ? new Error(`The service registry contains no services for the extension '${r}' for language '${n}'.`) : new Error(`The service registry contains no services for the extension '${r}'.`);
    return s;
  }
  hasServices(e) {
    try {
      return this.getServices(e), !0;
    } catch {
      return !1;
    }
  }
  get all() {
    return Array.from(this.languageIdMap.values());
  }
}
function Fi(t) {
  return { code: t };
}
var sl;
(function(t) {
  t.defaults = ["fast", "slow", "built-in"], t.all = t.defaults;
})(sl || (sl = {}));
class sv {
  constructor(e) {
    this.entries = new Zi(), this.knownCategories = new Set(sl.defaults), this.entriesBefore = [], this.entriesAfter = [], this.reflection = e.shared.AstReflection;
  }
  /**
   * Register a set of validation checks. Each value in the record can be either a single validation check (i.e. a function)
   * or an array of validation checks.
   *
   * @param checksRecord Set of validation checks to register.
   * @param thisObj Optional object to be used as `this` when calling the validation check functions.
   * @param category Optional category for the validation checks (defaults to `'fast'`).
   */
  register(e, n = this, r = "fast") {
    if (r === "built-in")
      throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");
    this.knownCategories.add(r);
    for (const [i, s] of Object.entries(e)) {
      const a = s;
      if (Array.isArray(a))
        for (const o of a) {
          const c = {
            check: this.wrapValidationException(o, n),
            category: r
          };
          this.addEntry(i, c);
        }
      else if (typeof a == "function") {
        const o = {
          check: this.wrapValidationException(a, n),
          category: r
        };
        this.addEntry(i, o);
      } else
        as();
    }
  }
  wrapValidationException(e, n) {
    return async (r, i, s) => {
      await this.handleException(() => e.call(n, r, i, s), "An error occurred during validation", i, r);
    };
  }
  async handleException(e, n, r, i) {
    try {
      await e();
    } catch (s) {
      if (Ha(s))
        throw s;
      console.error(`${n}:`, s), s instanceof Error && s.stack && console.error(s.stack);
      const a = s instanceof Error ? s.message : String(s);
      r("error", `${n}: ${a}`, { node: i });
    }
  }
  addEntry(e, n) {
    if (e === "AstNode") {
      this.entries.add("AstNode", n);
      return;
    }
    for (const r of this.reflection.getAllSubTypes(e))
      this.entries.add(r, n);
  }
  getChecks(e, n) {
    let r = pe(this.entries.get(e)).concat(this.entries.get("AstNode"));
    return n && (r = r.filter((i) => n.includes(i.category))), r.map((i) => i.check);
  }
  /**
   * Register logic which will be executed once before validating all the nodes of an AST/Langium document.
   * This helps to prepare or initialize some information which are required or reusable for the following checks on the AstNodes.
   *
   * As an example, for validating unique fully-qualified names of nodes in the AST,
   * here the map for mapping names to nodes could be established.
   * During the usual checks on the nodes, they are put into this map with their name.
   *
   * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.
   * Therefore it is recommended to clear stored information
   * _before_ validating an AST to validate each AST unaffected from other ASTs
   * AND _after_ validating the AST to free memory by information which are no longer used.
   *
   * @param checkBefore a set-up function which will be called once before actually validating an AST
   * @param thisObj Optional object to be used as `this` when calling the validation check functions.
   */
  registerBeforeDocument(e, n = this) {
    this.entriesBefore.push(this.wrapPreparationException(e, "An error occurred during set-up of the validation", n));
  }
  /**
   * Register logic which will be executed once after validating all the nodes of an AST/Langium document.
   * This helps to finally evaluate information which are collected during the checks on the AstNodes.
   *
   * As an example, for validating unique fully-qualified names of nodes in the AST,
   * here the map with all the collected nodes and their names is checked
   * and validation hints are created for all nodes with the same name.
   *
   * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.
   * Therefore it is recommended to clear stored information
   * _before_ validating an AST to validate each AST unaffected from other ASTs
   * AND _after_ validating the AST to free memory by information which are no longer used.
   *
   * @param checkBefore a set-up function which will be called once before actually validating an AST
   * @param thisObj Optional object to be used as `this` when calling the validation check functions.
   */
  registerAfterDocument(e, n = this) {
    this.entriesAfter.push(this.wrapPreparationException(e, "An error occurred during tear-down of the validation", n));
  }
  wrapPreparationException(e, n, r) {
    return async (i, s, a, o) => {
      await this.handleException(() => e.call(r, i, s, a, o), n, s, i);
    };
  }
  get checksBefore() {
    return this.entriesBefore;
  }
  get checksAfter() {
    return this.entriesAfter;
  }
  getAllValidationCategories(e) {
    return this.knownCategories;
  }
}
const av = Object.freeze({
  validateNode: !0,
  validateChildren: !0
});
class ov {
  constructor(e) {
    this.validationRegistry = e.validation.ValidationRegistry, this.metadata = e.LanguageMetaData, this.profiler = e.shared.profilers.LangiumProfiler, this.languageId = e.LanguageMetaData.languageId;
  }
  async validateDocument(e, n = {}, r = ge.None) {
    const i = e.parseResult, s = [];
    if (await He(r), (!n.categories || n.categories.includes("built-in")) && (this.processLexingErrors(i, s, n), n.stopAfterLexingErrors && s.some((a) => {
      var o;
      return ((o = a.data) == null ? void 0 : o.code) === St.LexingError;
    }) || (this.processParsingErrors(i, s, n), n.stopAfterParsingErrors && s.some((a) => {
      var o;
      return ((o = a.data) == null ? void 0 : o.code) === St.ParsingError;
    })) || (this.processLinkingErrors(e, s, n), n.stopAfterLinkingErrors && s.some((a) => {
      var o;
      return ((o = a.data) == null ? void 0 : o.code) === St.LinkingError;
    }))))
      return s;
    try {
      s.push(...await this.validateAst(i.value, n, r));
    } catch (a) {
      if (Ha(a))
        throw a;
      console.error("An error occurred during validation:", a);
    }
    return await He(r), s;
  }
  processLexingErrors(e, n, r) {
    var s;
    const i = [...e.lexerErrors, ...((s = e.lexerReport) == null ? void 0 : s.diagnostics) ?? []];
    for (const a of i) {
      const o = a.severity ?? "error", c = {
        severity: Ro(o),
        range: {
          start: {
            line: a.line - 1,
            character: a.column - 1
          },
          end: {
            line: a.line - 1,
            character: a.column + a.length - 1
          }
        },
        message: a.message,
        data: lv(o),
        source: this.getSource()
      };
      n.push(c);
    }
  }
  processParsingErrors(e, n, r) {
    for (const i of e.parserErrors) {
      let s;
      if (isNaN(i.token.startOffset)) {
        if ("previousToken" in i) {
          const a = i.previousToken;
          if (isNaN(a.startOffset)) {
            const o = { line: 0, character: 0 };
            s = { start: o, end: o };
          } else {
            const o = { line: a.endLine - 1, character: a.endColumn };
            s = { start: o, end: o };
          }
        }
      } else
        s = Go(i.token);
      if (s) {
        const a = {
          severity: Ro("error"),
          range: s,
          message: i.message,
          data: Fi(St.ParsingError),
          source: this.getSource()
        };
        n.push(a);
      }
    }
  }
  processLinkingErrors(e, n, r) {
    var i;
    for (const s of e.references) {
      const a = s.error;
      if (a) {
        const o = {
          node: a.info.container,
          range: (i = s.$refNode) == null ? void 0 : i.range,
          property: a.info.property,
          index: a.info.index,
          data: {
            code: St.LinkingError,
            containerType: a.info.container.$type,
            property: a.info.property,
            refText: a.info.reference.$refText
          }
        };
        n.push(this.toDiagnostic("error", a.message, o));
      }
    }
  }
  async validateAst(e, n, r = ge.None) {
    const i = [], s = (a, o, c) => {
      i.push(this.toDiagnostic(a, o, c));
    };
    return await this.validateAstBefore(e, n, s, r), await this.validateAstNodes(e, n, s, r), await this.validateAstAfter(e, n, s, r), i;
  }
  async validateAstBefore(e, n, r, i = ge.None) {
    const s = this.validationRegistry.checksBefore;
    for (const a of s)
      await He(i), await a(e, r, n.categories ?? [], i);
  }
  async validateAstNodes(e, n, r, i = ge.None) {
    var s;
    if ((s = this.profiler) != null && s.isActive("validating")) {
      const a = this.profiler.createTask("validating", this.languageId);
      a.start();
      try {
        const o = Zt(e).iterator();
        for (const c of o) {
          a.startSubTask(c.$type);
          const l = this.validateSingleNodeOptions(c, n);
          if (l.validateNode)
            try {
              const u = this.validationRegistry.getChecks(c.$type, n.categories);
              for (const f of u)
                await f(c, r, i);
            } finally {
              a.stopSubTask(c.$type);
            }
          l.validateChildren || o.prune();
        }
      } finally {
        a.stop();
      }
    } else {
      const a = Zt(e).iterator();
      for (const o of a) {
        await He(i);
        const c = this.validateSingleNodeOptions(o, n);
        if (c.validateNode) {
          const l = this.validationRegistry.getChecks(o.$type, n.categories);
          for (const u of l)
            await u(o, r, i);
        }
        c.validateChildren || a.prune();
      }
    }
  }
  validateSingleNodeOptions(e, n) {
    return av;
  }
  async validateAstAfter(e, n, r, i = ge.None) {
    const s = this.validationRegistry.checksAfter;
    for (const a of s)
      await He(i), await a(e, r, n.categories ?? [], i);
  }
  toDiagnostic(e, n, r) {
    return {
      message: n,
      range: cv(r),
      severity: Ro(e),
      code: r.code,
      codeDescription: r.codeDescription,
      tags: r.tags,
      relatedInformation: r.relatedInformation,
      data: r.data,
      source: this.getSource()
    };
  }
  getSource() {
    return this.metadata.languageId;
  }
}
function cv(t) {
  if (t.range)
    return t.range;
  let e;
  return typeof t.property == "string" ? e = Yf(t.node.$cstNode, t.property, t.index) : typeof t.keyword == "string" && (e = ig(t.node.$cstNode, t.keyword, t.index)), e ?? (e = t.node.$cstNode), e ? e.range : {
    start: { line: 0, character: 0 },
    end: { line: 0, character: 0 }
  };
}
function Ro(t) {
  switch (t) {
    case "error":
      return 1;
    case "warning":
      return 2;
    case "info":
      return 3;
    case "hint":
      return 4;
    default:
      throw new Error("Invalid diagnostic severity: " + t);
  }
}
function lv(t) {
  switch (t) {
    case "error":
      return Fi(St.LexingError);
    case "warning":
      return Fi(St.LexingWarning);
    case "info":
      return Fi(St.LexingInfo);
    case "hint":
      return Fi(St.LexingHint);
    default:
      throw new Error("Invalid diagnostic severity: " + t);
  }
}
var St;
(function(t) {
  t.LexingError = "lexing-error", t.LexingWarning = "lexing-warning", t.LexingInfo = "lexing-info", t.LexingHint = "lexing-hint", t.ParsingError = "parsing-error", t.LinkingError = "linking-error";
})(St || (St = {}));
class uv {
  constructor(e) {
    this.astNodeLocator = e.workspace.AstNodeLocator, this.nameProvider = e.references.NameProvider;
  }
  createDescription(e, n, r) {
    const i = r ?? Qt(e);
    n ?? (n = this.nameProvider.getName(e));
    const s = this.astNodeLocator.getAstNodePath(e);
    if (!n)
      throw new Error(`Node at path ${s} has no name.`);
    let a;
    const o = () => a ?? (a = aa(this.nameProvider.getNameNode(e) ?? e.$cstNode));
    return {
      node: e,
      name: n,
      get nameSegment() {
        return o();
      },
      selectionSegment: aa(e.$cstNode),
      type: e.$type,
      documentUri: i.uri,
      path: s
    };
  }
}
class dv {
  constructor(e) {
    this.nodeLocator = e.workspace.AstNodeLocator;
  }
  async createDescriptions(e, n = ge.None) {
    const r = [], i = e.parseResult.value;
    for (const s of Zt(i))
      await He(n), ia(s).forEach((a) => {
        a.reference.error || r.push(...this.createInfoDescriptions(a));
      });
    return r;
  }
  createInfoDescriptions(e) {
    const n = e.reference;
    if (n.error || !n.$refNode)
      return [];
    let r = [];
    Ct(n) && n.$nodeDescription ? r = [n.$nodeDescription] : hn(n) && (r = n.items.map((c) => c.$nodeDescription).filter((c) => c !== void 0));
    const i = Qt(e.container).uri, s = this.nodeLocator.getAstNodePath(e.container), a = [], o = aa(n.$refNode);
    for (const c of r)
      a.push({
        sourceUri: i,
        sourcePath: s,
        targetUri: c.documentUri,
        targetPath: c.path,
        segment: o,
        local: ct.equals(c.documentUri, i)
      });
    return a;
  }
}
class fv {
  constructor() {
    this.segmentSeparator = "/", this.indexSeparator = "@";
  }
  getAstNodePath(e) {
    if (e.$container) {
      const n = this.getAstNodePath(e.$container), r = this.getPathSegment(e);
      return n + this.segmentSeparator + r;
    }
    return "";
  }
  getPathSegment({ $containerProperty: e, $containerIndex: n }) {
    if (!e)
      throw new Error("Missing '$containerProperty' in AST node.");
    return n !== void 0 ? e + this.indexSeparator + n : e;
  }
  getAstNode(e, n) {
    return n.split(this.segmentSeparator).reduce((i, s) => {
      if (!i || s.length === 0)
        return i;
      const a = s.indexOf(this.indexSeparator);
      if (a > 0) {
        const o = s.substring(0, a), c = parseInt(s.substring(a + 1)), l = i[o];
        return l == null ? void 0 : l[c];
      }
      return i[s];
    }, e);
  }
}
class hv {
  constructor(e) {
    this._ready = new Bl(), this.onConfigurationSectionUpdateEmitter = new rp(), this.settings = {}, this.workspaceConfig = !1, this.serviceRegistry = e.ServiceRegistry;
  }
  get ready() {
    return this._ready.promise;
  }
  initialize(e) {
    var n;
    this.workspaceConfig = ((n = e.capabilities.workspace) == null ? void 0 : n.configuration) ?? !1;
  }
  async initialized(e) {
    if (this.workspaceConfig) {
      if (e.register) {
        const n = this.serviceRegistry.all;
        e.register({
          // Listen to configuration changes for all languages
          section: n.map((r) => this.toSectionName(r.LanguageMetaData.languageId))
        });
      }
      if (e.fetchConfiguration) {
        const n = this.serviceRegistry.all.map((i) => ({
          // Fetch the configuration changes for all languages
          section: this.toSectionName(i.LanguageMetaData.languageId)
        })), r = await e.fetchConfiguration(n);
        n.forEach((i, s) => {
          this.updateSectionConfiguration(i.section, r[s]);
        });
      }
    }
    this._ready.resolve();
  }
  /**
   *  Updates the cached configurations using the `change` notification parameters.
   *
   * @param change The parameters of a change configuration notification.
   * `settings` property of the change object could be expressed as `Record<string, Record<string, any>>`
   */
  updateConfiguration(e) {
    typeof e.settings != "object" || e.settings === null || Object.entries(e.settings).forEach(([n, r]) => {
      this.updateSectionConfiguration(n, r), this.onConfigurationSectionUpdateEmitter.fire({ section: n, configuration: r });
    });
  }
  updateSectionConfiguration(e, n) {
    this.settings[e] = n;
  }
  /**
  * Returns a configuration value stored for the given language.
  *
  * @param language The language id
  * @param configuration Configuration name
  */
  async getConfiguration(e, n) {
    await this.ready;
    const r = this.toSectionName(e);
    if (this.settings[r])
      return this.settings[r][n];
  }
  toSectionName(e) {
    return `${e}`;
  }
  get onConfigurationSectionUpdate() {
    return this.onConfigurationSectionUpdateEmitter.event;
  }
}
var Gi = {}, Xn = {}, ql = {}, vo = {}, U = {}, Bu;
function cp() {
  if (Bu) return U;
  Bu = 1, Object.defineProperty(U, "__esModule", { value: !0 }), U.Message = U.NotificationType9 = U.NotificationType8 = U.NotificationType7 = U.NotificationType6 = U.NotificationType5 = U.NotificationType4 = U.NotificationType3 = U.NotificationType2 = U.NotificationType1 = U.NotificationType0 = U.NotificationType = U.RequestType9 = U.RequestType8 = U.RequestType7 = U.RequestType6 = U.RequestType5 = U.RequestType4 = U.RequestType3 = U.RequestType2 = U.RequestType1 = U.RequestType = U.RequestType0 = U.AbstractMessageSignature = U.ParameterStructures = U.ResponseError = U.ErrorCodes = void 0;
  const t = _e;
  var e;
  (function(R) {
    R.ParseError = -32700, R.InvalidRequest = -32600, R.MethodNotFound = -32601, R.InvalidParams = -32602, R.InternalError = -32603, R.jsonrpcReservedErrorRangeStart = -32099, R.serverErrorStart = -32099, R.MessageWriteError = -32099, R.MessageReadError = -32098, R.PendingResponseRejected = -32097, R.ConnectionInactive = -32096, R.ServerNotInitialized = -32002, R.UnknownErrorCode = -32001, R.jsonrpcReservedErrorRangeEnd = -32e3, R.serverErrorEnd = -32e3;
  })(e || (U.ErrorCodes = e = {}));
  class n extends Error {
    constructor(p, S, y) {
      super(S), this.code = t.number(p) ? p : e.UnknownErrorCode, this.data = y, Object.setPrototypeOf(this, n.prototype);
    }
    toJson() {
      const p = {
        code: this.code,
        message: this.message
      };
      return this.data !== void 0 && (p.data = this.data), p;
    }
  }
  U.ResponseError = n;
  class r {
    constructor(p) {
      this.kind = p;
    }
    static is(p) {
      return p === r.auto || p === r.byName || p === r.byPosition;
    }
    toString() {
      return this.kind;
    }
  }
  U.ParameterStructures = r, r.auto = new r("auto"), r.byPosition = new r("byPosition"), r.byName = new r("byName");
  class i {
    constructor(p, S) {
      this.method = p, this.numberOfParams = S;
    }
    get parameterStructures() {
      return r.auto;
    }
  }
  U.AbstractMessageSignature = i;
  class s extends i {
    constructor(p) {
      super(p, 0);
    }
  }
  U.RequestType0 = s;
  class a extends i {
    constructor(p, S = r.auto) {
      super(p, 1), this._parameterStructures = S;
    }
    get parameterStructures() {
      return this._parameterStructures;
    }
  }
  U.RequestType = a;
  class o extends i {
    constructor(p, S = r.auto) {
      super(p, 1), this._parameterStructures = S;
    }
    get parameterStructures() {
      return this._parameterStructures;
    }
  }
  U.RequestType1 = o;
  class c extends i {
    constructor(p) {
      super(p, 2);
    }
  }
  U.RequestType2 = c;
  class l extends i {
    constructor(p) {
      super(p, 3);
    }
  }
  U.RequestType3 = l;
  class u extends i {
    constructor(p) {
      super(p, 4);
    }
  }
  U.RequestType4 = u;
  class f extends i {
    constructor(p) {
      super(p, 5);
    }
  }
  U.RequestType5 = f;
  class m extends i {
    constructor(p) {
      super(p, 6);
    }
  }
  U.RequestType6 = m;
  class g extends i {
    constructor(p) {
      super(p, 7);
    }
  }
  U.RequestType7 = g;
  class A extends i {
    constructor(p) {
      super(p, 8);
    }
  }
  U.RequestType8 = A;
  class N extends i {
    constructor(p) {
      super(p, 9);
    }
  }
  U.RequestType9 = N;
  class $ extends i {
    constructor(p, S = r.auto) {
      super(p, 1), this._parameterStructures = S;
    }
    get parameterStructures() {
      return this._parameterStructures;
    }
  }
  U.NotificationType = $;
  class w extends i {
    constructor(p) {
      super(p, 0);
    }
  }
  U.NotificationType0 = w;
  class O extends i {
    constructor(p, S = r.auto) {
      super(p, 1), this._parameterStructures = S;
    }
    get parameterStructures() {
      return this._parameterStructures;
    }
  }
  U.NotificationType1 = O;
  class b extends i {
    constructor(p) {
      super(p, 2);
    }
  }
  U.NotificationType2 = b;
  class x extends i {
    constructor(p) {
      super(p, 3);
    }
  }
  U.NotificationType3 = x;
  class X extends i {
    constructor(p) {
      super(p, 4);
    }
  }
  U.NotificationType4 = X;
  class te extends i {
    constructor(p) {
      super(p, 5);
    }
  }
  U.NotificationType5 = te;
  class ne extends i {
    constructor(p) {
      super(p, 6);
    }
  }
  U.NotificationType6 = ne;
  class ye extends i {
    constructor(p) {
      super(p, 7);
    }
  }
  U.NotificationType7 = ye;
  class Ce extends i {
    constructor(p) {
      super(p, 8);
    }
  }
  U.NotificationType8 = Ce;
  class de extends i {
    constructor(p) {
      super(p, 9);
    }
  }
  U.NotificationType9 = de;
  var k;
  return function(R) {
    function p(T) {
      const E = T;
      return E && t.string(E.method) && (t.string(E.id) || t.number(E.id));
    }
    R.isRequest = p;
    function S(T) {
      const E = T;
      return E && t.string(E.method) && T.id === void 0;
    }
    R.isNotification = S;
    function y(T) {
      const E = T;
      return E && (E.result !== void 0 || !!E.error) && (t.string(E.id) || t.number(E.id) || E.id === null);
    }
    R.isResponse = y;
  }(k || (U.Message = k = {})), U;
}
var Bt = {}, qu;
function lp() {
  if (qu) return Bt;
  qu = 1;
  var t;
  Object.defineProperty(Bt, "__esModule", { value: !0 }), Bt.LRUCache = Bt.LinkedMap = Bt.Touch = void 0;
  var e;
  (function(i) {
    i.None = 0, i.First = 1, i.AsOld = i.First, i.Last = 2, i.AsNew = i.Last;
  })(e || (Bt.Touch = e = {}));
  class n {
    constructor() {
      this[t] = "LinkedMap", this._map = /* @__PURE__ */ new Map(), this._head = void 0, this._tail = void 0, this._size = 0, this._state = 0;
    }
    clear() {
      this._map.clear(), this._head = void 0, this._tail = void 0, this._size = 0, this._state++;
    }
    isEmpty() {
      return !this._head && !this._tail;
    }
    get size() {
      return this._size;
    }
    get first() {
      var s;
      return (s = this._head) == null ? void 0 : s.value;
    }
    get last() {
      var s;
      return (s = this._tail) == null ? void 0 : s.value;
    }
    has(s) {
      return this._map.has(s);
    }
    get(s, a = e.None) {
      const o = this._map.get(s);
      if (o)
        return a !== e.None && this.touch(o, a), o.value;
    }
    set(s, a, o = e.None) {
      let c = this._map.get(s);
      if (c)
        c.value = a, o !== e.None && this.touch(c, o);
      else {
        switch (c = { key: s, value: a, next: void 0, previous: void 0 }, o) {
          case e.None:
            this.addItemLast(c);
            break;
          case e.First:
            this.addItemFirst(c);
            break;
          case e.Last:
            this.addItemLast(c);
            break;
          default:
            this.addItemLast(c);
            break;
        }
        this._map.set(s, c), this._size++;
      }
      return this;
    }
    delete(s) {
      return !!this.remove(s);
    }
    remove(s) {
      const a = this._map.get(s);
      if (a)
        return this._map.delete(s), this.removeItem(a), this._size--, a.value;
    }
    shift() {
      if (!this._head && !this._tail)
        return;
      if (!this._head || !this._tail)
        throw new Error("Invalid list");
      const s = this._head;
      return this._map.delete(s.key), this.removeItem(s), this._size--, s.value;
    }
    forEach(s, a) {
      const o = this._state;
      let c = this._head;
      for (; c; ) {
        if (a ? s.bind(a)(c.value, c.key, this) : s(c.value, c.key, this), this._state !== o)
          throw new Error("LinkedMap got modified during iteration.");
        c = c.next;
      }
    }
    keys() {
      const s = this._state;
      let a = this._head;
      const o = {
        [Symbol.iterator]: () => o,
        next: () => {
          if (this._state !== s)
            throw new Error("LinkedMap got modified during iteration.");
          if (a) {
            const c = { value: a.key, done: !1 };
            return a = a.next, c;
          } else
            return { value: void 0, done: !0 };
        }
      };
      return o;
    }
    values() {
      const s = this._state;
      let a = this._head;
      const o = {
        [Symbol.iterator]: () => o,
        next: () => {
          if (this._state !== s)
            throw new Error("LinkedMap got modified during iteration.");
          if (a) {
            const c = { value: a.value, done: !1 };
            return a = a.next, c;
          } else
            return { value: void 0, done: !0 };
        }
      };
      return o;
    }
    entries() {
      const s = this._state;
      let a = this._head;
      const o = {
        [Symbol.iterator]: () => o,
        next: () => {
          if (this._state !== s)
            throw new Error("LinkedMap got modified during iteration.");
          if (a) {
            const c = { value: [a.key, a.value], done: !1 };
            return a = a.next, c;
          } else
            return { value: void 0, done: !0 };
        }
      };
      return o;
    }
    [(t = Symbol.toStringTag, Symbol.iterator)]() {
      return this.entries();
    }
    trimOld(s) {
      if (s >= this.size)
        return;
      if (s === 0) {
        this.clear();
        return;
      }
      let a = this._head, o = this.size;
      for (; a && o > s; )
        this._map.delete(a.key), a = a.next, o--;
      this._head = a, this._size = o, a && (a.previous = void 0), this._state++;
    }
    addItemFirst(s) {
      if (!this._head && !this._tail)
        this._tail = s;
      else if (this._head)
        s.next = this._head, this._head.previous = s;
      else
        throw new Error("Invalid list");
      this._head = s, this._state++;
    }
    addItemLast(s) {
      if (!this._head && !this._tail)
        this._head = s;
      else if (this._tail)
        s.previous = this._tail, this._tail.next = s;
      else
        throw new Error("Invalid list");
      this._tail = s, this._state++;
    }
    removeItem(s) {
      if (s === this._head && s === this._tail)
        this._head = void 0, this._tail = void 0;
      else if (s === this._head) {
        if (!s.next)
          throw new Error("Invalid list");
        s.next.previous = void 0, this._head = s.next;
      } else if (s === this._tail) {
        if (!s.previous)
          throw new Error("Invalid list");
        s.previous.next = void 0, this._tail = s.previous;
      } else {
        const a = s.next, o = s.previous;
        if (!a || !o)
          throw new Error("Invalid list");
        a.previous = o, o.next = a;
      }
      s.next = void 0, s.previous = void 0, this._state++;
    }
    touch(s, a) {
      if (!this._head || !this._tail)
        throw new Error("Invalid list");
      if (!(a !== e.First && a !== e.Last)) {
        if (a === e.First) {
          if (s === this._head)
            return;
          const o = s.next, c = s.previous;
          s === this._tail ? (c.next = void 0, this._tail = c) : (o.previous = c, c.next = o), s.previous = void 0, s.next = this._head, this._head.previous = s, this._head = s, this._state++;
        } else if (a === e.Last) {
          if (s === this._tail)
            return;
          const o = s.next, c = s.previous;
          s === this._head ? (o.previous = void 0, this._head = o) : (o.previous = c, c.next = o), s.next = void 0, s.previous = this._tail, this._tail.next = s, this._tail = s, this._state++;
        }
      }
    }
    toJSON() {
      const s = [];
      return this.forEach((a, o) => {
        s.push([o, a]);
      }), s;
    }
    fromJSON(s) {
      this.clear();
      for (const [a, o] of s)
        this.set(a, o);
    }
  }
  Bt.LinkedMap = n;
  class r extends n {
    constructor(s, a = 1) {
      super(), this._limit = s, this._ratio = Math.min(Math.max(0, a), 1);
    }
    get limit() {
      return this._limit;
    }
    set limit(s) {
      this._limit = s, this.checkTrim();
    }
    get ratio() {
      return this._ratio;
    }
    set ratio(s) {
      this._ratio = Math.min(Math.max(0, s), 1), this.checkTrim();
    }
    get(s, a = e.AsNew) {
      return super.get(s, a);
    }
    peek(s) {
      return super.get(s, e.None);
    }
    set(s, a) {
      return super.set(s, a, e.Last), this.checkTrim(), this;
    }
    checkTrim() {
      this.size > this._limit && this.trimOld(Math.round(this._limit * this._ratio));
    }
  }
  return Bt.LRUCache = r, Bt;
}
var Ni = {}, Wu;
function pv() {
  if (Wu) return Ni;
  Wu = 1, Object.defineProperty(Ni, "__esModule", { value: !0 }), Ni.Disposable = void 0;
  var t;
  return function(e) {
    function n(r) {
      return {
        dispose: r
      };
    }
    e.create = n;
  }(t || (Ni.Disposable = t = {})), Ni;
}
var $n = {}, Vu;
function mv() {
  if (Vu) return $n;
  Vu = 1, Object.defineProperty($n, "__esModule", { value: !0 }), $n.SharedArrayReceiverStrategy = $n.SharedArraySenderStrategy = void 0;
  const t = An;
  var e;
  (function(a) {
    a.Continue = 0, a.Cancelled = 1;
  })(e || (e = {}));
  class n {
    constructor() {
      this.buffers = /* @__PURE__ */ new Map();
    }
    enableCancellation(o) {
      if (o.id === null)
        return;
      const c = new SharedArrayBuffer(4), l = new Int32Array(c, 0, 1);
      l[0] = e.Continue, this.buffers.set(o.id, c), o.$cancellationData = c;
    }
    async sendCancellation(o, c) {
      const l = this.buffers.get(c);
      if (l === void 0)
        return;
      const u = new Int32Array(l, 0, 1);
      Atomics.store(u, 0, e.Cancelled);
    }
    cleanup(o) {
      this.buffers.delete(o);
    }
    dispose() {
      this.buffers.clear();
    }
  }
  $n.SharedArraySenderStrategy = n;
  class r {
    constructor(o) {
      this.data = new Int32Array(o, 0, 1);
    }
    get isCancellationRequested() {
      return Atomics.load(this.data, 0) === e.Cancelled;
    }
    get onCancellationRequested() {
      throw new Error("Cancellation over SharedArrayBuffer doesn't support cancellation events");
    }
  }
  class i {
    constructor(o) {
      this.token = new r(o);
    }
    cancel() {
    }
    dispose() {
    }
  }
  class s {
    constructor() {
      this.kind = "request";
    }
    createCancellationTokenSource(o) {
      const c = o.$cancellationData;
      return c === void 0 ? new t.CancellationTokenSource() : new i(c);
    }
  }
  return $n.SharedArrayReceiverStrategy = s, $n;
}
var qt = {}, wi = {}, Ku;
function up() {
  if (Ku) return wi;
  Ku = 1, Object.defineProperty(wi, "__esModule", { value: !0 }), wi.Semaphore = void 0;
  const t = cn;
  class e {
    constructor(r = 1) {
      if (r <= 0)
        throw new Error("Capacity must be greater than 0");
      this._capacity = r, this._active = 0, this._waiting = [];
    }
    lock(r) {
      return new Promise((i, s) => {
        this._waiting.push({ thunk: r, resolve: i, reject: s }), this.runNext();
      });
    }
    get active() {
      return this._active;
    }
    runNext() {
      this._waiting.length === 0 || this._active === this._capacity || (0, t.default)().timer.setImmediate(() => this.doRunNext());
    }
    doRunNext() {
      if (this._waiting.length === 0 || this._active === this._capacity)
        return;
      const r = this._waiting.shift();
      if (this._active++, this._active > this._capacity)
        throw new Error("To many thunks active");
      try {
        const i = r.thunk();
        i instanceof Promise ? i.then((s) => {
          this._active--, r.resolve(s), this.runNext();
        }, (s) => {
          this._active--, r.reject(s), this.runNext();
        }) : (this._active--, r.resolve(i), this.runNext());
      } catch (i) {
        this._active--, r.reject(i), this.runNext();
      }
    }
  }
  return wi.Semaphore = e, wi;
}
var Hu;
function gv() {
  if (Hu) return qt;
  Hu = 1, Object.defineProperty(qt, "__esModule", { value: !0 }), qt.ReadableStreamMessageReader = qt.AbstractMessageReader = qt.MessageReader = void 0;
  const t = cn, e = _e, n = Ft, r = up();
  var i;
  (function(c) {
    function l(u) {
      let f = u;
      return f && e.func(f.listen) && e.func(f.dispose) && e.func(f.onError) && e.func(f.onClose) && e.func(f.onPartialMessage);
    }
    c.is = l;
  })(i || (qt.MessageReader = i = {}));
  class s {
    constructor() {
      this.errorEmitter = new n.Emitter(), this.closeEmitter = new n.Emitter(), this.partialMessageEmitter = new n.Emitter();
    }
    dispose() {
      this.errorEmitter.dispose(), this.closeEmitter.dispose();
    }
    get onError() {
      return this.errorEmitter.event;
    }
    fireError(l) {
      this.errorEmitter.fire(this.asError(l));
    }
    get onClose() {
      return this.closeEmitter.event;
    }
    fireClose() {
      this.closeEmitter.fire(void 0);
    }
    get onPartialMessage() {
      return this.partialMessageEmitter.event;
    }
    firePartialMessage(l) {
      this.partialMessageEmitter.fire(l);
    }
    asError(l) {
      return l instanceof Error ? l : new Error(`Reader received error. Reason: ${e.string(l.message) ? l.message : "unknown"}`);
    }
  }
  qt.AbstractMessageReader = s;
  var a;
  (function(c) {
    function l(u) {
      let f, m;
      const g = /* @__PURE__ */ new Map();
      let A;
      const N = /* @__PURE__ */ new Map();
      if (u === void 0 || typeof u == "string")
        f = u ?? "utf-8";
      else {
        if (f = u.charset ?? "utf-8", u.contentDecoder !== void 0 && (m = u.contentDecoder, g.set(m.name, m)), u.contentDecoders !== void 0)
          for (const $ of u.contentDecoders)
            g.set($.name, $);
        if (u.contentTypeDecoder !== void 0 && (A = u.contentTypeDecoder, N.set(A.name, A)), u.contentTypeDecoders !== void 0)
          for (const $ of u.contentTypeDecoders)
            N.set($.name, $);
      }
      return A === void 0 && (A = (0, t.default)().applicationJson.decoder, N.set(A.name, A)), { charset: f, contentDecoder: m, contentDecoders: g, contentTypeDecoder: A, contentTypeDecoders: N };
    }
    c.fromOptions = l;
  })(a || (a = {}));
  class o extends s {
    constructor(l, u) {
      super(), this.readable = l, this.options = a.fromOptions(u), this.buffer = (0, t.default)().messageBuffer.create(this.options.charset), this._partialMessageTimeout = 1e4, this.nextMessageLength = -1, this.messageToken = 0, this.readSemaphore = new r.Semaphore(1);
    }
    set partialMessageTimeout(l) {
      this._partialMessageTimeout = l;
    }
    get partialMessageTimeout() {
      return this._partialMessageTimeout;
    }
    listen(l) {
      this.nextMessageLength = -1, this.messageToken = 0, this.partialMessageTimer = void 0, this.callback = l;
      const u = this.readable.onData((f) => {
        this.onData(f);
      });
      return this.readable.onError((f) => this.fireError(f)), this.readable.onClose(() => this.fireClose()), u;
    }
    onData(l) {
      try {
        for (this.buffer.append(l); ; ) {
          if (this.nextMessageLength === -1) {
            const f = this.buffer.tryReadHeaders(!0);
            if (!f)
              return;
            const m = f.get("content-length");
            if (!m) {
              this.fireError(new Error(`Header must provide a Content-Length property.
${JSON.stringify(Object.fromEntries(f))}`));
              return;
            }
            const g = parseInt(m);
            if (isNaN(g)) {
              this.fireError(new Error(`Content-Length value must be a number. Got ${m}`));
              return;
            }
            this.nextMessageLength = g;
          }
          const u = this.buffer.tryReadBody(this.nextMessageLength);
          if (u === void 0) {
            this.setPartialMessageTimer();
            return;
          }
          this.clearPartialMessageTimer(), this.nextMessageLength = -1, this.readSemaphore.lock(async () => {
            const f = this.options.contentDecoder !== void 0 ? await this.options.contentDecoder.decode(u) : u, m = await this.options.contentTypeDecoder.decode(f, this.options);
            this.callback(m);
          }).catch((f) => {
            this.fireError(f);
          });
        }
      } catch (u) {
        this.fireError(u);
      }
    }
    clearPartialMessageTimer() {
      this.partialMessageTimer && (this.partialMessageTimer.dispose(), this.partialMessageTimer = void 0);
    }
    setPartialMessageTimer() {
      this.clearPartialMessageTimer(), !(this._partialMessageTimeout <= 0) && (this.partialMessageTimer = (0, t.default)().timer.setTimeout((l, u) => {
        this.partialMessageTimer = void 0, l === this.messageToken && (this.firePartialMessage({ messageToken: l, waitingTime: u }), this.setPartialMessageTimer());
      }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout));
    }
  }
  return qt.ReadableStreamMessageReader = o, qt;
}
var Wt = {}, Yu;
function yv() {
  if (Yu) return Wt;
  Yu = 1, Object.defineProperty(Wt, "__esModule", { value: !0 }), Wt.WriteableStreamMessageWriter = Wt.AbstractMessageWriter = Wt.MessageWriter = void 0;
  const t = cn, e = _e, n = up(), r = Ft, i = "Content-Length: ", s = `\r
`;
  var a;
  (function(u) {
    function f(m) {
      let g = m;
      return g && e.func(g.dispose) && e.func(g.onClose) && e.func(g.onError) && e.func(g.write);
    }
    u.is = f;
  })(a || (Wt.MessageWriter = a = {}));
  class o {
    constructor() {
      this.errorEmitter = new r.Emitter(), this.closeEmitter = new r.Emitter();
    }
    dispose() {
      this.errorEmitter.dispose(), this.closeEmitter.dispose();
    }
    get onError() {
      return this.errorEmitter.event;
    }
    fireError(f, m, g) {
      this.errorEmitter.fire([this.asError(f), m, g]);
    }
    get onClose() {
      return this.closeEmitter.event;
    }
    fireClose() {
      this.closeEmitter.fire(void 0);
    }
    asError(f) {
      return f instanceof Error ? f : new Error(`Writer received error. Reason: ${e.string(f.message) ? f.message : "unknown"}`);
    }
  }
  Wt.AbstractMessageWriter = o;
  var c;
  (function(u) {
    function f(m) {
      return m === void 0 || typeof m == "string" ? { charset: m ?? "utf-8", contentTypeEncoder: (0, t.default)().applicationJson.encoder } : { charset: m.charset ?? "utf-8", contentEncoder: m.contentEncoder, contentTypeEncoder: m.contentTypeEncoder ?? (0, t.default)().applicationJson.encoder };
    }
    u.fromOptions = f;
  })(c || (c = {}));
  class l extends o {
    constructor(f, m) {
      super(), this.writable = f, this.options = c.fromOptions(m), this.errorCount = 0, this.writeSemaphore = new n.Semaphore(1), this.writable.onError((g) => this.fireError(g)), this.writable.onClose(() => this.fireClose());
    }
    async write(f) {
      return this.writeSemaphore.lock(async () => this.options.contentTypeEncoder.encode(f, this.options).then((g) => this.options.contentEncoder !== void 0 ? this.options.contentEncoder.encode(g) : g).then((g) => {
        const A = [];
        return A.push(i, g.byteLength.toString(), s), A.push(s), this.doWrite(f, A, g);
      }, (g) => {
        throw this.fireError(g), g;
      }));
    }
    async doWrite(f, m, g) {
      try {
        return await this.writable.write(m.join(""), "ascii"), this.writable.write(g);
      } catch (A) {
        return this.handleError(A, f), Promise.reject(A);
      }
    }
    handleError(f, m) {
      this.errorCount++, this.fireError(f, m, this.errorCount);
    }
    end() {
      this.writable.end();
    }
  }
  return Wt.WriteableStreamMessageWriter = l, Wt;
}
var bi = {}, Xu;
function Tv() {
  if (Xu) return bi;
  Xu = 1, Object.defineProperty(bi, "__esModule", { value: !0 }), bi.AbstractMessageBuffer = void 0;
  const t = 13, e = 10, n = `\r
`;
  class r {
    constructor(s = "utf-8") {
      this._encoding = s, this._chunks = [], this._totalLength = 0;
    }
    get encoding() {
      return this._encoding;
    }
    append(s) {
      const a = typeof s == "string" ? this.fromString(s, this._encoding) : s;
      this._chunks.push(a), this._totalLength += a.byteLength;
    }
    tryReadHeaders(s = !1) {
      if (this._chunks.length === 0)
        return;
      let a = 0, o = 0, c = 0, l = 0;
      e: for (; o < this._chunks.length; ) {
        const g = this._chunks[o];
        for (c = 0; c < g.length; ) {
          switch (g[c]) {
            case t:
              switch (a) {
                case 0:
                  a = 1;
                  break;
                case 2:
                  a = 3;
                  break;
                default:
                  a = 0;
              }
              break;
            case e:
              switch (a) {
                case 1:
                  a = 2;
                  break;
                case 3:
                  a = 4, c++;
                  break e;
                default:
                  a = 0;
              }
              break;
            default:
              a = 0;
          }
          c++;
        }
        l += g.byteLength, o++;
      }
      if (a !== 4)
        return;
      const u = this._read(l + c), f = /* @__PURE__ */ new Map(), m = this.toString(u, "ascii").split(n);
      if (m.length < 2)
        return f;
      for (let g = 0; g < m.length - 2; g++) {
        const A = m[g], N = A.indexOf(":");
        if (N === -1)
          throw new Error(`Message header must separate key and value using ':'
${A}`);
        const $ = A.substr(0, N), w = A.substr(N + 1).trim();
        f.set(s ? $.toLowerCase() : $, w);
      }
      return f;
    }
    tryReadBody(s) {
      if (!(this._totalLength < s))
        return this._read(s);
    }
    get numberOfBytes() {
      return this._totalLength;
    }
    _read(s) {
      if (s === 0)
        return this.emptyBuffer();
      if (s > this._totalLength)
        throw new Error("Cannot read so many bytes!");
      if (this._chunks[0].byteLength === s) {
        const l = this._chunks[0];
        return this._chunks.shift(), this._totalLength -= s, this.asNative(l);
      }
      if (this._chunks[0].byteLength > s) {
        const l = this._chunks[0], u = this.asNative(l, s);
        return this._chunks[0] = l.slice(s), this._totalLength -= s, u;
      }
      const a = this.allocNative(s);
      let o = 0, c = 0;
      for (; s > 0; ) {
        const l = this._chunks[c];
        if (l.byteLength > s) {
          const u = l.slice(0, s);
          a.set(u, o), o += s, this._chunks[c] = l.slice(s), this._totalLength -= s, s -= s;
        } else
          a.set(l, o), o += l.byteLength, this._chunks.shift(), this._totalLength -= l.byteLength, s -= l.byteLength;
      }
      return a;
    }
  }
  return bi.AbstractMessageBuffer = r, bi;
}
var Eo = {}, Ju;
function Rv() {
  return Ju || (Ju = 1, function(t) {
    Object.defineProperty(t, "__esModule", { value: !0 }), t.createMessageConnection = t.ConnectionOptions = t.MessageStrategy = t.CancellationStrategy = t.CancellationSenderStrategy = t.CancellationReceiverStrategy = t.RequestCancellationReceiverStrategy = t.IdCancellationReceiverStrategy = t.ConnectionStrategy = t.ConnectionError = t.ConnectionErrors = t.LogTraceNotification = t.SetTraceNotification = t.TraceFormat = t.TraceValues = t.Trace = t.NullLogger = t.ProgressType = t.ProgressToken = void 0;
    const e = cn, n = _e, r = cp(), i = lp(), s = Ft, a = An;
    var o;
    (function(p) {
      p.type = new r.NotificationType("$/cancelRequest");
    })(o || (o = {}));
    var c;
    (function(p) {
      function S(y) {
        return typeof y == "string" || typeof y == "number";
      }
      p.is = S;
    })(c || (t.ProgressToken = c = {}));
    var l;
    (function(p) {
      p.type = new r.NotificationType("$/progress");
    })(l || (l = {}));
    class u {
      constructor() {
      }
    }
    t.ProgressType = u;
    var f;
    (function(p) {
      function S(y) {
        return n.func(y);
      }
      p.is = S;
    })(f || (f = {})), t.NullLogger = Object.freeze({
      error: () => {
      },
      warn: () => {
      },
      info: () => {
      },
      log: () => {
      }
    });
    var m;
    (function(p) {
      p[p.Off = 0] = "Off", p[p.Messages = 1] = "Messages", p[p.Compact = 2] = "Compact", p[p.Verbose = 3] = "Verbose";
    })(m || (t.Trace = m = {}));
    var g;
    (function(p) {
      p.Off = "off", p.Messages = "messages", p.Compact = "compact", p.Verbose = "verbose";
    })(g || (t.TraceValues = g = {})), function(p) {
      function S(T) {
        if (!n.string(T))
          return p.Off;
        switch (T = T.toLowerCase(), T) {
          case "off":
            return p.Off;
          case "messages":
            return p.Messages;
          case "compact":
            return p.Compact;
          case "verbose":
            return p.Verbose;
          default:
            return p.Off;
        }
      }
      p.fromString = S;
      function y(T) {
        switch (T) {
          case p.Off:
            return "off";
          case p.Messages:
            return "messages";
          case p.Compact:
            return "compact";
          case p.Verbose:
            return "verbose";
          default:
            return "off";
        }
      }
      p.toString = y;
    }(m || (t.Trace = m = {}));
    var A;
    (function(p) {
      p.Text = "text", p.JSON = "json";
    })(A || (t.TraceFormat = A = {})), function(p) {
      function S(y) {
        return n.string(y) ? (y = y.toLowerCase(), y === "json" ? p.JSON : p.Text) : p.Text;
      }
      p.fromString = S;
    }(A || (t.TraceFormat = A = {}));
    var N;
    (function(p) {
      p.type = new r.NotificationType("$/setTrace");
    })(N || (t.SetTraceNotification = N = {}));
    var $;
    (function(p) {
      p.type = new r.NotificationType("$/logTrace");
    })($ || (t.LogTraceNotification = $ = {}));
    var w;
    (function(p) {
      p[p.Closed = 1] = "Closed", p[p.Disposed = 2] = "Disposed", p[p.AlreadyListening = 3] = "AlreadyListening";
    })(w || (t.ConnectionErrors = w = {}));
    class O extends Error {
      constructor(S, y) {
        super(y), this.code = S, Object.setPrototypeOf(this, O.prototype);
      }
    }
    t.ConnectionError = O;
    var b;
    (function(p) {
      function S(y) {
        const T = y;
        return T && n.func(T.cancelUndispatched);
      }
      p.is = S;
    })(b || (t.ConnectionStrategy = b = {}));
    var x;
    (function(p) {
      function S(y) {
        const T = y;
        return T && (T.kind === void 0 || T.kind === "id") && n.func(T.createCancellationTokenSource) && (T.dispose === void 0 || n.func(T.dispose));
      }
      p.is = S;
    })(x || (t.IdCancellationReceiverStrategy = x = {}));
    var X;
    (function(p) {
      function S(y) {
        const T = y;
        return T && T.kind === "request" && n.func(T.createCancellationTokenSource) && (T.dispose === void 0 || n.func(T.dispose));
      }
      p.is = S;
    })(X || (t.RequestCancellationReceiverStrategy = X = {}));
    var te;
    (function(p) {
      p.Message = Object.freeze({
        createCancellationTokenSource(y) {
          return new a.CancellationTokenSource();
        }
      });
      function S(y) {
        return x.is(y) || X.is(y);
      }
      p.is = S;
    })(te || (t.CancellationReceiverStrategy = te = {}));
    var ne;
    (function(p) {
      p.Message = Object.freeze({
        sendCancellation(y, T) {
          return y.sendNotification(o.type, { id: T });
        },
        cleanup(y) {
        }
      });
      function S(y) {
        const T = y;
        return T && n.func(T.sendCancellation) && n.func(T.cleanup);
      }
      p.is = S;
    })(ne || (t.CancellationSenderStrategy = ne = {}));
    var ye;
    (function(p) {
      p.Message = Object.freeze({
        receiver: te.Message,
        sender: ne.Message
      });
      function S(y) {
        const T = y;
        return T && te.is(T.receiver) && ne.is(T.sender);
      }
      p.is = S;
    })(ye || (t.CancellationStrategy = ye = {}));
    var Ce;
    (function(p) {
      function S(y) {
        const T = y;
        return T && n.func(T.handleMessage);
      }
      p.is = S;
    })(Ce || (t.MessageStrategy = Ce = {}));
    var de;
    (function(p) {
      function S(y) {
        const T = y;
        return T && (ye.is(T.cancellationStrategy) || b.is(T.connectionStrategy) || Ce.is(T.messageStrategy));
      }
      p.is = S;
    })(de || (t.ConnectionOptions = de = {}));
    var k;
    (function(p) {
      p[p.New = 1] = "New", p[p.Listening = 2] = "Listening", p[p.Closed = 3] = "Closed", p[p.Disposed = 4] = "Disposed";
    })(k || (k = {}));
    function R(p, S, y, T) {
      const E = y !== void 0 ? y : t.NullLogger;
      let P = 0, D = 0, L = 0;
      const z = "2.0";
      let G;
      const se = /* @__PURE__ */ new Map();
      let q;
      const re = /* @__PURE__ */ new Map(), xe = /* @__PURE__ */ new Map();
      let Te, fe = new i.LinkedMap(), $e = /* @__PURE__ */ new Map(), De = /* @__PURE__ */ new Set(), be = /* @__PURE__ */ new Map(), Q = m.Off, st = A.Text, Re, Rt = k.New;
      const Zn = new s.Emitter(), ci = new s.Emitter(), li = new s.Emitter(), ui = new s.Emitter(), di = new s.Emitter(), vt = T && T.cancellationStrategy ? T.cancellationStrategy : ye.Message;
      function fi(h) {
        if (h === null)
          throw new Error("Can't send requests with id null since the response can't be correlated.");
        return "req-" + h.toString();
      }
      function fs(h) {
        return h === null ? "res-unknown-" + (++L).toString() : "res-" + h.toString();
      }
      function hs() {
        return "not-" + (++D).toString();
      }
      function ps(h, C) {
        r.Message.isRequest(C) ? h.set(fi(C.id), C) : r.Message.isResponse(C) ? h.set(fs(C.id), C) : h.set(hs(), C);
      }
      function ms(h) {
      }
      function hi() {
        return Rt === k.Listening;
      }
      function pi() {
        return Rt === k.Closed;
      }
      function jt() {
        return Rt === k.Disposed;
      }
      function mi() {
        (Rt === k.New || Rt === k.Listening) && (Rt = k.Closed, ci.fire(void 0));
      }
      function gs(h) {
        Zn.fire([h, void 0, void 0]);
      }
      function ys(h) {
        Zn.fire(h);
      }
      p.onClose(mi), p.onError(gs), S.onClose(mi), S.onError(ys);
      function gi() {
        Te || fe.size === 0 || (Te = (0, e.default)().timer.setImmediate(() => {
          Te = void 0, Ts();
        }));
      }
      function yi(h) {
        r.Message.isRequest(h) ? vs(h) : r.Message.isNotification(h) ? As(h) : r.Message.isResponse(h) ? Es(h) : Ss(h);
      }
      function Ts() {
        if (fe.size === 0)
          return;
        const h = fe.shift();
        try {
          const C = T == null ? void 0 : T.messageStrategy;
          Ce.is(C) ? C.handleMessage(h, yi) : yi(h);
        } finally {
          gi();
        }
      }
      const Rs = (h) => {
        try {
          if (r.Message.isNotification(h) && h.method === o.type.method) {
            const C = h.params.id, _ = fi(C), F = fe.get(_);
            if (r.Message.isRequest(F)) {
              const ae = T == null ? void 0 : T.connectionStrategy, ce = ae && ae.cancelUndispatched ? ae.cancelUndispatched(F, ms) : void 0;
              if (ce && (ce.error !== void 0 || ce.result !== void 0)) {
                fe.delete(_), be.delete(C), ce.id = F.id, In(ce, h.method, Date.now()), S.write(ce).catch(() => E.error("Sending response for canceled message failed."));
                return;
              }
            }
            const le = be.get(C);
            if (le !== void 0) {
              le.cancel(), er(h);
              return;
            } else
              De.add(C);
          }
          ps(fe, h);
        } finally {
          gi();
        }
      };
      function vs(h) {
        if (jt())
          return;
        function C(J, he, ie) {
          const Pe = {
            jsonrpc: z,
            id: h.id
          };
          J instanceof r.ResponseError ? Pe.error = J.toJson() : Pe.result = J === void 0 ? null : J, In(Pe, he, ie), S.write(Pe).catch(() => E.error("Sending response failed."));
        }
        function _(J, he, ie) {
          const Pe = {
            jsonrpc: z,
            id: h.id,
            error: J.toJson()
          };
          In(Pe, he, ie), S.write(Pe).catch(() => E.error("Sending response failed."));
        }
        function F(J, he, ie) {
          J === void 0 && (J = null);
          const Pe = {
            jsonrpc: z,
            id: h.id,
            result: J
          };
          In(Pe, he, ie), S.write(Pe).catch(() => E.error("Sending response failed."));
        }
        Ns(h);
        const le = se.get(h.method);
        let ae, ce;
        le && (ae = le.type, ce = le.handler);
        const we = Date.now();
        if (ce || G) {
          const J = h.id ?? String(Date.now()), he = x.is(vt.receiver) ? vt.receiver.createCancellationTokenSource(J) : vt.receiver.createCancellationTokenSource(h);
          h.id !== null && De.has(h.id) && he.cancel(), h.id !== null && be.set(J, he);
          try {
            let ie;
            if (ce)
              if (h.params === void 0) {
                if (ae !== void 0 && ae.numberOfParams !== 0) {
                  _(new r.ResponseError(r.ErrorCodes.InvalidParams, `Request ${h.method} defines ${ae.numberOfParams} params but received none.`), h.method, we);
                  return;
                }
                ie = ce(he.token);
              } else if (Array.isArray(h.params)) {
                if (ae !== void 0 && ae.parameterStructures === r.ParameterStructures.byName) {
                  _(new r.ResponseError(r.ErrorCodes.InvalidParams, `Request ${h.method} defines parameters by name but received parameters by position`), h.method, we);
                  return;
                }
                ie = ce(...h.params, he.token);
              } else {
                if (ae !== void 0 && ae.parameterStructures === r.ParameterStructures.byPosition) {
                  _(new r.ResponseError(r.ErrorCodes.InvalidParams, `Request ${h.method} defines parameters by position but received parameters by name`), h.method, we);
                  return;
                }
                ie = ce(h.params, he.token);
              }
            else G && (ie = G(h.method, h.params, he.token));
            const Pe = ie;
            ie ? Pe.then ? Pe.then((Ke) => {
              be.delete(J), C(Ke, h.method, we);
            }, (Ke) => {
              be.delete(J), Ke instanceof r.ResponseError ? _(Ke, h.method, we) : Ke && n.string(Ke.message) ? _(new r.ResponseError(r.ErrorCodes.InternalError, `Request ${h.method} failed with message: ${Ke.message}`), h.method, we) : _(new r.ResponseError(r.ErrorCodes.InternalError, `Request ${h.method} failed unexpectedly without providing any details.`), h.method, we);
            }) : (be.delete(J), C(ie, h.method, we)) : (be.delete(J), F(ie, h.method, we));
          } catch (ie) {
            be.delete(J), ie instanceof r.ResponseError ? C(ie, h.method, we) : ie && n.string(ie.message) ? _(new r.ResponseError(r.ErrorCodes.InternalError, `Request ${h.method} failed with message: ${ie.message}`), h.method, we) : _(new r.ResponseError(r.ErrorCodes.InternalError, `Request ${h.method} failed unexpectedly without providing any details.`), h.method, we);
          }
        } else
          _(new r.ResponseError(r.ErrorCodes.MethodNotFound, `Unhandled method ${h.method}`), h.method, we);
      }
      function Es(h) {
        if (!jt())
          if (h.id === null)
            h.error ? E.error(`Received response message without id: Error is: 
${JSON.stringify(h.error, void 0, 4)}`) : E.error("Received response message without id. No further error information provided.");
          else {
            const C = h.id, _ = $e.get(C);
            if (ws(h, _), _ !== void 0) {
              $e.delete(C);
              try {
                if (h.error) {
                  const F = h.error;
                  _.reject(new r.ResponseError(F.code, F.message, F.data));
                } else if (h.result !== void 0)
                  _.resolve(h.result);
                else
                  throw new Error("Should never happen.");
              } catch (F) {
                F.message ? E.error(`Response handler '${_.method}' failed with message: ${F.message}`) : E.error(`Response handler '${_.method}' failed unexpectedly.`);
              }
            }
          }
      }
      function As(h) {
        if (jt())
          return;
        let C, _;
        if (h.method === o.type.method) {
          const F = h.params.id;
          De.delete(F), er(h);
          return;
        } else {
          const F = re.get(h.method);
          F && (_ = F.handler, C = F.type);
        }
        if (_ || q)
          try {
            if (er(h), _)
              if (h.params === void 0)
                C !== void 0 && C.numberOfParams !== 0 && C.parameterStructures !== r.ParameterStructures.byName && E.error(`Notification ${h.method} defines ${C.numberOfParams} params but received none.`), _();
              else if (Array.isArray(h.params)) {
                const F = h.params;
                h.method === l.type.method && F.length === 2 && c.is(F[0]) ? _({ token: F[0], value: F[1] }) : (C !== void 0 && (C.parameterStructures === r.ParameterStructures.byName && E.error(`Notification ${h.method} defines parameters by name but received parameters by position`), C.numberOfParams !== h.params.length && E.error(`Notification ${h.method} defines ${C.numberOfParams} params but received ${F.length} arguments`)), _(...F));
              } else
                C !== void 0 && C.parameterStructures === r.ParameterStructures.byPosition && E.error(`Notification ${h.method} defines parameters by position but received parameters by name`), _(h.params);
            else q && q(h.method, h.params);
          } catch (F) {
            F.message ? E.error(`Notification handler '${h.method}' failed with message: ${F.message}`) : E.error(`Notification handler '${h.method}' failed unexpectedly.`);
          }
        else
          li.fire(h);
      }
      function Ss(h) {
        if (!h) {
          E.error("Received empty message.");
          return;
        }
        E.error(`Received message which is neither a response nor a notification message:
${JSON.stringify(h, null, 4)}`);
        const C = h;
        if (n.string(C.id) || n.number(C.id)) {
          const _ = C.id, F = $e.get(_);
          F && F.reject(new Error("The received response has neither a result nor an error property."));
        }
      }
      function Et(h) {
        if (h != null)
          switch (Q) {
            case m.Verbose:
              return JSON.stringify(h, null, 4);
            case m.Compact:
              return JSON.stringify(h);
            default:
              return;
          }
      }
      function Cs(h) {
        if (!(Q === m.Off || !Re))
          if (st === A.Text) {
            let C;
            (Q === m.Verbose || Q === m.Compact) && h.params && (C = `Params: ${Et(h.params)}

`), Re.log(`Sending request '${h.method} - (${h.id})'.`, C);
          } else
            zt("send-request", h);
      }
      function ks(h) {
        if (!(Q === m.Off || !Re))
          if (st === A.Text) {
            let C;
            (Q === m.Verbose || Q === m.Compact) && (h.params ? C = `Params: ${Et(h.params)}

` : C = `No parameters provided.

`), Re.log(`Sending notification '${h.method}'.`, C);
          } else
            zt("send-notification", h);
      }
      function In(h, C, _) {
        if (!(Q === m.Off || !Re))
          if (st === A.Text) {
            let F;
            (Q === m.Verbose || Q === m.Compact) && (h.error && h.error.data ? F = `Error data: ${Et(h.error.data)}

` : h.result ? F = `Result: ${Et(h.result)}

` : h.error === void 0 && (F = `No result returned.

`)), Re.log(`Sending response '${C} - (${h.id})'. Processing request took ${Date.now() - _}ms`, F);
          } else
            zt("send-response", h);
      }
      function Ns(h) {
        if (!(Q === m.Off || !Re))
          if (st === A.Text) {
            let C;
            (Q === m.Verbose || Q === m.Compact) && h.params && (C = `Params: ${Et(h.params)}

`), Re.log(`Received request '${h.method} - (${h.id})'.`, C);
          } else
            zt("receive-request", h);
      }
      function er(h) {
        if (!(Q === m.Off || !Re || h.method === $.type.method))
          if (st === A.Text) {
            let C;
            (Q === m.Verbose || Q === m.Compact) && (h.params ? C = `Params: ${Et(h.params)}

` : C = `No parameters provided.

`), Re.log(`Received notification '${h.method}'.`, C);
          } else
            zt("receive-notification", h);
      }
      function ws(h, C) {
        if (!(Q === m.Off || !Re))
          if (st === A.Text) {
            let _;
            if ((Q === m.Verbose || Q === m.Compact) && (h.error && h.error.data ? _ = `Error data: ${Et(h.error.data)}

` : h.result ? _ = `Result: ${Et(h.result)}

` : h.error === void 0 && (_ = `No result returned.

`)), C) {
              const F = h.error ? ` Request failed: ${h.error.message} (${h.error.code}).` : "";
              Re.log(`Received response '${C.method} - (${h.id})' in ${Date.now() - C.timerStart}ms.${F}`, _);
            } else
              Re.log(`Received response ${h.id} without active response promise.`, _);
          } else
            zt("receive-response", h);
      }
      function zt(h, C) {
        if (!Re || Q === m.Off)
          return;
        const _ = {
          isLSPMessage: !0,
          type: h,
          message: C,
          timestamp: Date.now()
        };
        Re.log(_);
      }
      function ln() {
        if (pi())
          throw new O(w.Closed, "Connection is closed.");
        if (jt())
          throw new O(w.Disposed, "Connection is disposed.");
      }
      function bs() {
        if (hi())
          throw new O(w.AlreadyListening, "Connection is already listening");
      }
      function Is() {
        if (!hi())
          throw new Error("Call listen() first.");
      }
      function un(h) {
        return h === void 0 ? null : h;
      }
      function Ti(h) {
        if (h !== null)
          return h;
      }
      function d(h) {
        return h != null && !Array.isArray(h) && typeof h == "object";
      }
      function ke(h, C) {
        switch (h) {
          case r.ParameterStructures.auto:
            return d(C) ? Ti(C) : [un(C)];
          case r.ParameterStructures.byName:
            if (!d(C))
              throw new Error("Received parameters by name but param is not an object literal.");
            return Ti(C);
          case r.ParameterStructures.byPosition:
            return [un(C)];
          default:
            throw new Error(`Unknown parameter structure ${h.toString()}`);
        }
      }
      function Ne(h, C) {
        let _;
        const F = h.numberOfParams;
        switch (F) {
          case 0:
            _ = void 0;
            break;
          case 1:
            _ = ke(h.parameterStructures, C[0]);
            break;
          default:
            _ = [];
            for (let le = 0; le < C.length && le < F; le++)
              _.push(un(C[le]));
            if (C.length < F)
              for (let le = C.length; le < F; le++)
                _.push(null);
            break;
        }
        return _;
      }
      const V = {
        sendNotification: (h, ...C) => {
          ln();
          let _, F;
          if (n.string(h)) {
            _ = h;
            const ae = C[0];
            let ce = 0, we = r.ParameterStructures.auto;
            r.ParameterStructures.is(ae) && (ce = 1, we = ae);
            let J = C.length;
            const he = J - ce;
            switch (he) {
              case 0:
                F = void 0;
                break;
              case 1:
                F = ke(we, C[ce]);
                break;
              default:
                if (we === r.ParameterStructures.byName)
                  throw new Error(`Received ${he} parameters for 'by Name' notification parameter structure.`);
                F = C.slice(ce, J).map((ie) => un(ie));
                break;
            }
          } else {
            const ae = C;
            _ = h.method, F = Ne(h, ae);
          }
          const le = {
            jsonrpc: z,
            method: _,
            params: F
          };
          return ks(le), S.write(le).catch((ae) => {
            throw E.error("Sending notification failed."), ae;
          });
        },
        onNotification: (h, C) => {
          ln();
          let _;
          return n.func(h) ? q = h : C && (n.string(h) ? (_ = h, re.set(h, { type: void 0, handler: C })) : (_ = h.method, re.set(h.method, { type: h, handler: C }))), {
            dispose: () => {
              _ !== void 0 ? re.delete(_) : q = void 0;
            }
          };
        },
        onProgress: (h, C, _) => {
          if (xe.has(C))
            throw new Error(`Progress handler for token ${C} already registered`);
          return xe.set(C, _), {
            dispose: () => {
              xe.delete(C);
            }
          };
        },
        sendProgress: (h, C, _) => V.sendNotification(l.type, { token: C, value: _ }),
        onUnhandledProgress: ui.event,
        sendRequest: (h, ...C) => {
          ln(), Is();
          let _, F, le;
          if (n.string(h)) {
            _ = h;
            const J = C[0], he = C[C.length - 1];
            let ie = 0, Pe = r.ParameterStructures.auto;
            r.ParameterStructures.is(J) && (ie = 1, Pe = J);
            let Ke = C.length;
            a.CancellationToken.is(he) && (Ke = Ke - 1, le = he);
            const $t = Ke - ie;
            switch ($t) {
              case 0:
                F = void 0;
                break;
              case 1:
                F = ke(Pe, C[ie]);
                break;
              default:
                if (Pe === r.ParameterStructures.byName)
                  throw new Error(`Received ${$t} parameters for 'by Name' request parameter structure.`);
                F = C.slice(ie, Ke).map((Np) => un(Np));
                break;
            }
          } else {
            const J = C;
            _ = h.method, F = Ne(h, J);
            const he = h.numberOfParams;
            le = a.CancellationToken.is(J[he]) ? J[he] : void 0;
          }
          const ae = P++;
          let ce;
          le && (ce = le.onCancellationRequested(() => {
            const J = vt.sender.sendCancellation(V, ae);
            return J === void 0 ? (E.log(`Received no promise from cancellation strategy when cancelling id ${ae}`), Promise.resolve()) : J.catch(() => {
              E.log(`Sending cancellation messages for id ${ae} failed`);
            });
          }));
          const we = {
            jsonrpc: z,
            id: ae,
            method: _,
            params: F
          };
          return Cs(we), typeof vt.sender.enableCancellation == "function" && vt.sender.enableCancellation(we), new Promise(async (J, he) => {
            const ie = ($t) => {
              J($t), vt.sender.cleanup(ae), ce == null || ce.dispose();
            }, Pe = ($t) => {
              he($t), vt.sender.cleanup(ae), ce == null || ce.dispose();
            }, Ke = { method: _, timerStart: Date.now(), resolve: ie, reject: Pe };
            try {
              await S.write(we), $e.set(ae, Ke);
            } catch ($t) {
              throw E.error("Sending request failed."), Ke.reject(new r.ResponseError(r.ErrorCodes.MessageWriteError, $t.message ? $t.message : "Unknown reason")), $t;
            }
          });
        },
        onRequest: (h, C) => {
          ln();
          let _ = null;
          return f.is(h) ? (_ = void 0, G = h) : n.string(h) ? (_ = null, C !== void 0 && (_ = h, se.set(h, { handler: C, type: void 0 }))) : C !== void 0 && (_ = h.method, se.set(h.method, { type: h, handler: C })), {
            dispose: () => {
              _ !== null && (_ !== void 0 ? se.delete(_) : G = void 0);
            }
          };
        },
        hasPendingResponse: () => $e.size > 0,
        trace: async (h, C, _) => {
          let F = !1, le = A.Text;
          _ !== void 0 && (n.boolean(_) ? F = _ : (F = _.sendNotification || !1, le = _.traceFormat || A.Text)), Q = h, st = le, Q === m.Off ? Re = void 0 : Re = C, F && !pi() && !jt() && await V.sendNotification(N.type, { value: m.toString(h) });
        },
        onError: Zn.event,
        onClose: ci.event,
        onUnhandledNotification: li.event,
        onDispose: di.event,
        end: () => {
          S.end();
        },
        dispose: () => {
          if (jt())
            return;
          Rt = k.Disposed, di.fire(void 0);
          const h = new r.ResponseError(r.ErrorCodes.PendingResponseRejected, "Pending response rejected since connection got disposed");
          for (const C of $e.values())
            C.reject(h);
          $e = /* @__PURE__ */ new Map(), be = /* @__PURE__ */ new Map(), De = /* @__PURE__ */ new Set(), fe = new i.LinkedMap(), n.func(S.dispose) && S.dispose(), n.func(p.dispose) && p.dispose();
        },
        listen: () => {
          ln(), bs(), Rt = k.Listening, p.listen(Rs);
        },
        inspect: () => {
          (0, e.default)().console.log("inspect");
        }
      };
      return V.onNotification($.type, (h) => {
        if (Q === m.Off || !Re)
          return;
        const C = Q === m.Verbose || Q === m.Compact;
        Re.log(h.message, C ? h.verbose : void 0);
      }), V.onNotification(l.type, (h) => {
        const C = xe.get(h.token);
        C ? C(h.value) : ui.fire(h);
      }), V;
    }
    t.createMessageConnection = R;
  }(Eo)), Eo;
}
var Qu;
function al() {
  return Qu || (Qu = 1, function(t) {
    Object.defineProperty(t, "__esModule", { value: !0 }), t.ProgressType = t.ProgressToken = t.createMessageConnection = t.NullLogger = t.ConnectionOptions = t.ConnectionStrategy = t.AbstractMessageBuffer = t.WriteableStreamMessageWriter = t.AbstractMessageWriter = t.MessageWriter = t.ReadableStreamMessageReader = t.AbstractMessageReader = t.MessageReader = t.SharedArrayReceiverStrategy = t.SharedArraySenderStrategy = t.CancellationToken = t.CancellationTokenSource = t.Emitter = t.Event = t.Disposable = t.LRUCache = t.Touch = t.LinkedMap = t.ParameterStructures = t.NotificationType9 = t.NotificationType8 = t.NotificationType7 = t.NotificationType6 = t.NotificationType5 = t.NotificationType4 = t.NotificationType3 = t.NotificationType2 = t.NotificationType1 = t.NotificationType0 = t.NotificationType = t.ErrorCodes = t.ResponseError = t.RequestType9 = t.RequestType8 = t.RequestType7 = t.RequestType6 = t.RequestType5 = t.RequestType4 = t.RequestType3 = t.RequestType2 = t.RequestType1 = t.RequestType0 = t.RequestType = t.Message = t.RAL = void 0, t.MessageStrategy = t.CancellationStrategy = t.CancellationSenderStrategy = t.CancellationReceiverStrategy = t.ConnectionError = t.ConnectionErrors = t.LogTraceNotification = t.SetTraceNotification = t.TraceFormat = t.TraceValues = t.Trace = void 0;
    const e = cp();
    Object.defineProperty(t, "Message", { enumerable: !0, get: function() {
      return e.Message;
    } }), Object.defineProperty(t, "RequestType", { enumerable: !0, get: function() {
      return e.RequestType;
    } }), Object.defineProperty(t, "RequestType0", { enumerable: !0, get: function() {
      return e.RequestType0;
    } }), Object.defineProperty(t, "RequestType1", { enumerable: !0, get: function() {
      return e.RequestType1;
    } }), Object.defineProperty(t, "RequestType2", { enumerable: !0, get: function() {
      return e.RequestType2;
    } }), Object.defineProperty(t, "RequestType3", { enumerable: !0, get: function() {
      return e.RequestType3;
    } }), Object.defineProperty(t, "RequestType4", { enumerable: !0, get: function() {
      return e.RequestType4;
    } }), Object.defineProperty(t, "RequestType5", { enumerable: !0, get: function() {
      return e.RequestType5;
    } }), Object.defineProperty(t, "RequestType6", { enumerable: !0, get: function() {
      return e.RequestType6;
    } }), Object.defineProperty(t, "RequestType7", { enumerable: !0, get: function() {
      return e.RequestType7;
    } }), Object.defineProperty(t, "RequestType8", { enumerable: !0, get: function() {
      return e.RequestType8;
    } }), Object.defineProperty(t, "RequestType9", { enumerable: !0, get: function() {
      return e.RequestType9;
    } }), Object.defineProperty(t, "ResponseError", { enumerable: !0, get: function() {
      return e.ResponseError;
    } }), Object.defineProperty(t, "ErrorCodes", { enumerable: !0, get: function() {
      return e.ErrorCodes;
    } }), Object.defineProperty(t, "NotificationType", { enumerable: !0, get: function() {
      return e.NotificationType;
    } }), Object.defineProperty(t, "NotificationType0", { enumerable: !0, get: function() {
      return e.NotificationType0;
    } }), Object.defineProperty(t, "NotificationType1", { enumerable: !0, get: function() {
      return e.NotificationType1;
    } }), Object.defineProperty(t, "NotificationType2", { enumerable: !0, get: function() {
      return e.NotificationType2;
    } }), Object.defineProperty(t, "NotificationType3", { enumerable: !0, get: function() {
      return e.NotificationType3;
    } }), Object.defineProperty(t, "NotificationType4", { enumerable: !0, get: function() {
      return e.NotificationType4;
    } }), Object.defineProperty(t, "NotificationType5", { enumerable: !0, get: function() {
      return e.NotificationType5;
    } }), Object.defineProperty(t, "NotificationType6", { enumerable: !0, get: function() {
      return e.NotificationType6;
    } }), Object.defineProperty(t, "NotificationType7", { enumerable: !0, get: function() {
      return e.NotificationType7;
    } }), Object.defineProperty(t, "NotificationType8", { enumerable: !0, get: function() {
      return e.NotificationType8;
    } }), Object.defineProperty(t, "NotificationType9", { enumerable: !0, get: function() {
      return e.NotificationType9;
    } }), Object.defineProperty(t, "ParameterStructures", { enumerable: !0, get: function() {
      return e.ParameterStructures;
    } });
    const n = lp();
    Object.defineProperty(t, "LinkedMap", { enumerable: !0, get: function() {
      return n.LinkedMap;
    } }), Object.defineProperty(t, "LRUCache", { enumerable: !0, get: function() {
      return n.LRUCache;
    } }), Object.defineProperty(t, "Touch", { enumerable: !0, get: function() {
      return n.Touch;
    } });
    const r = pv();
    Object.defineProperty(t, "Disposable", { enumerable: !0, get: function() {
      return r.Disposable;
    } });
    const i = Ft;
    Object.defineProperty(t, "Event", { enumerable: !0, get: function() {
      return i.Event;
    } }), Object.defineProperty(t, "Emitter", { enumerable: !0, get: function() {
      return i.Emitter;
    } });
    const s = An;
    Object.defineProperty(t, "CancellationTokenSource", { enumerable: !0, get: function() {
      return s.CancellationTokenSource;
    } }), Object.defineProperty(t, "CancellationToken", { enumerable: !0, get: function() {
      return s.CancellationToken;
    } });
    const a = mv();
    Object.defineProperty(t, "SharedArraySenderStrategy", { enumerable: !0, get: function() {
      return a.SharedArraySenderStrategy;
    } }), Object.defineProperty(t, "SharedArrayReceiverStrategy", { enumerable: !0, get: function() {
      return a.SharedArrayReceiverStrategy;
    } });
    const o = gv();
    Object.defineProperty(t, "MessageReader", { enumerable: !0, get: function() {
      return o.MessageReader;
    } }), Object.defineProperty(t, "AbstractMessageReader", { enumerable: !0, get: function() {
      return o.AbstractMessageReader;
    } }), Object.defineProperty(t, "ReadableStreamMessageReader", { enumerable: !0, get: function() {
      return o.ReadableStreamMessageReader;
    } });
    const c = yv();
    Object.defineProperty(t, "MessageWriter", { enumerable: !0, get: function() {
      return c.MessageWriter;
    } }), Object.defineProperty(t, "AbstractMessageWriter", { enumerable: !0, get: function() {
      return c.AbstractMessageWriter;
    } }), Object.defineProperty(t, "WriteableStreamMessageWriter", { enumerable: !0, get: function() {
      return c.WriteableStreamMessageWriter;
    } });
    const l = Tv();
    Object.defineProperty(t, "AbstractMessageBuffer", { enumerable: !0, get: function() {
      return l.AbstractMessageBuffer;
    } });
    const u = Rv();
    Object.defineProperty(t, "ConnectionStrategy", { enumerable: !0, get: function() {
      return u.ConnectionStrategy;
    } }), Object.defineProperty(t, "ConnectionOptions", { enumerable: !0, get: function() {
      return u.ConnectionOptions;
    } }), Object.defineProperty(t, "NullLogger", { enumerable: !0, get: function() {
      return u.NullLogger;
    } }), Object.defineProperty(t, "createMessageConnection", { enumerable: !0, get: function() {
      return u.createMessageConnection;
    } }), Object.defineProperty(t, "ProgressToken", { enumerable: !0, get: function() {
      return u.ProgressToken;
    } }), Object.defineProperty(t, "ProgressType", { enumerable: !0, get: function() {
      return u.ProgressType;
    } }), Object.defineProperty(t, "Trace", { enumerable: !0, get: function() {
      return u.Trace;
    } }), Object.defineProperty(t, "TraceValues", { enumerable: !0, get: function() {
      return u.TraceValues;
    } }), Object.defineProperty(t, "TraceFormat", { enumerable: !0, get: function() {
      return u.TraceFormat;
    } }), Object.defineProperty(t, "SetTraceNotification", { enumerable: !0, get: function() {
      return u.SetTraceNotification;
    } }), Object.defineProperty(t, "LogTraceNotification", { enumerable: !0, get: function() {
      return u.LogTraceNotification;
    } }), Object.defineProperty(t, "ConnectionErrors", { enumerable: !0, get: function() {
      return u.ConnectionErrors;
    } }), Object.defineProperty(t, "ConnectionError", { enumerable: !0, get: function() {
      return u.ConnectionError;
    } }), Object.defineProperty(t, "CancellationReceiverStrategy", { enumerable: !0, get: function() {
      return u.CancellationReceiverStrategy;
    } }), Object.defineProperty(t, "CancellationSenderStrategy", { enumerable: !0, get: function() {
      return u.CancellationSenderStrategy;
    } }), Object.defineProperty(t, "CancellationStrategy", { enumerable: !0, get: function() {
      return u.CancellationStrategy;
    } }), Object.defineProperty(t, "MessageStrategy", { enumerable: !0, get: function() {
      return u.MessageStrategy;
    } });
    const f = cn;
    t.RAL = f.default;
  }(vo)), vo;
}
Object.defineProperty(ql, "__esModule", { value: !0 });
const Dt = al();
class Ya extends Dt.AbstractMessageBuffer {
  constructor(e = "utf-8") {
    super(e), this.asciiDecoder = new TextDecoder("ascii");
  }
  emptyBuffer() {
    return Ya.emptyBuffer;
  }
  fromString(e, n) {
    return new TextEncoder().encode(e);
  }
  toString(e, n) {
    return n === "ascii" ? this.asciiDecoder.decode(e) : new TextDecoder(n).decode(e);
  }
  asNative(e, n) {
    return n === void 0 ? e : e.slice(0, n);
  }
  allocNative(e) {
    return new Uint8Array(e);
  }
}
Ya.emptyBuffer = new Uint8Array(0);
class vv {
  constructor(e) {
    this.socket = e, this._onData = new Dt.Emitter(), this._messageListener = (n) => {
      n.data.arrayBuffer().then((i) => {
        this._onData.fire(new Uint8Array(i));
      }, () => {
        (0, Dt.RAL)().console.error("Converting blob to array buffer failed.");
      });
    }, this.socket.addEventListener("message", this._messageListener);
  }
  onClose(e) {
    return this.socket.addEventListener("close", e), Dt.Disposable.create(() => this.socket.removeEventListener("close", e));
  }
  onError(e) {
    return this.socket.addEventListener("error", e), Dt.Disposable.create(() => this.socket.removeEventListener("error", e));
  }
  onEnd(e) {
    return this.socket.addEventListener("end", e), Dt.Disposable.create(() => this.socket.removeEventListener("end", e));
  }
  onData(e) {
    return this._onData.event(e);
  }
}
class Ev {
  constructor(e) {
    this.socket = e;
  }
  onClose(e) {
    return this.socket.addEventListener("close", e), Dt.Disposable.create(() => this.socket.removeEventListener("close", e));
  }
  onError(e) {
    return this.socket.addEventListener("error", e), Dt.Disposable.create(() => this.socket.removeEventListener("error", e));
  }
  onEnd(e) {
    return this.socket.addEventListener("end", e), Dt.Disposable.create(() => this.socket.removeEventListener("end", e));
  }
  write(e, n) {
    if (typeof e == "string") {
      if (n !== void 0 && n !== "utf-8")
        throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${n}`);
      this.socket.send(e);
    } else
      this.socket.send(e);
    return Promise.resolve();
  }
  end() {
    this.socket.close();
  }
}
const Av = new TextEncoder(), dp = Object.freeze({
  messageBuffer: Object.freeze({
    create: (t) => new Ya(t)
  }),
  applicationJson: Object.freeze({
    encoder: Object.freeze({
      name: "application/json",
      encode: (t, e) => {
        if (e.charset !== "utf-8")
          throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${e.charset}`);
        return Promise.resolve(Av.encode(JSON.stringify(t, void 0, 0)));
      }
    }),
    decoder: Object.freeze({
      name: "application/json",
      decode: (t, e) => {
        if (!(t instanceof Uint8Array))
          throw new Error("In a Browser environments only Uint8Arrays are supported.");
        return Promise.resolve(JSON.parse(new TextDecoder(e.charset).decode(t)));
      }
    })
  }),
  stream: Object.freeze({
    asReadableStream: (t) => new vv(t),
    asWritableStream: (t) => new Ev(t)
  }),
  console,
  timer: Object.freeze({
    setTimeout(t, e, ...n) {
      const r = setTimeout(t, e, ...n);
      return { dispose: () => clearTimeout(r) };
    },
    setImmediate(t, ...e) {
      const n = setTimeout(t, 0, ...e);
      return { dispose: () => clearTimeout(n) };
    },
    setInterval(t, e, ...n) {
      const r = setInterval(t, e, ...n);
      return { dispose: () => clearInterval(r) };
    }
  })
});
function ol() {
  return dp;
}
(function(t) {
  function e() {
    Dt.RAL.install(dp);
  }
  t.install = e;
})(ol || (ol = {}));
ql.default = ol;
(function(t) {
  var e = gt && gt.__createBinding || (Object.create ? function(c, l, u, f) {
    f === void 0 && (f = u);
    var m = Object.getOwnPropertyDescriptor(l, u);
    (!m || ("get" in m ? !l.__esModule : m.writable || m.configurable)) && (m = { enumerable: !0, get: function() {
      return l[u];
    } }), Object.defineProperty(c, f, m);
  } : function(c, l, u, f) {
    f === void 0 && (f = u), c[f] = l[u];
  }), n = gt && gt.__exportStar || function(c, l) {
    for (var u in c) u !== "default" && !Object.prototype.hasOwnProperty.call(l, u) && e(l, c, u);
  };
  Object.defineProperty(t, "__esModule", { value: !0 }), t.createMessageConnection = t.BrowserMessageWriter = t.BrowserMessageReader = void 0, ql.default.install();
  const i = al();
  n(al(), t);
  class s extends i.AbstractMessageReader {
    constructor(l) {
      super(), this._onData = new i.Emitter(), this._messageListener = (u) => {
        this._onData.fire(u.data);
      }, l.addEventListener("error", (u) => this.fireError(u)), l.onmessage = this._messageListener;
    }
    listen(l) {
      return this._onData.event(l);
    }
  }
  t.BrowserMessageReader = s;
  class a extends i.AbstractMessageWriter {
    constructor(l) {
      super(), this.port = l, this.errorCount = 0, l.addEventListener("error", (u) => this.fireError(u));
    }
    write(l) {
      try {
        return this.port.postMessage(l), Promise.resolve();
      } catch (u) {
        return this.handleError(u, l), Promise.reject(u);
      }
    }
    handleError(l, u) {
      this.errorCount++, this.fireError(l, u, this.errorCount);
    }
    end() {
    }
  }
  t.BrowserMessageWriter = a;
  function o(c, l, u, f) {
    return u === void 0 && (u = i.NullLogger), i.ConnectionStrategy.is(f) && (f = { connectionStrategy: f }), (0, i.createMessageConnection)(c, l, u, f);
  }
  t.createMessageConnection = o;
})(Xn);
var Zu = Xn, fp = {};
const Wl = /* @__PURE__ */ Hp(cR);
var H = {};
Object.defineProperty(H, "__esModule", { value: !0 });
H.ProtocolNotificationType = H.ProtocolNotificationType0 = H.ProtocolRequestType = H.ProtocolRequestType0 = H.RegistrationType = H.MessageDirection = void 0;
const Kr = Xn;
var ed;
(function(t) {
  t.clientToServer = "clientToServer", t.serverToClient = "serverToClient", t.both = "both";
})(ed || (H.MessageDirection = ed = {}));
class Sv {
  constructor(e) {
    this.method = e;
  }
}
H.RegistrationType = Sv;
class Cv extends Kr.RequestType0 {
  constructor(e) {
    super(e);
  }
}
H.ProtocolRequestType0 = Cv;
class kv extends Kr.RequestType {
  constructor(e) {
    super(e, Kr.ParameterStructures.byName);
  }
}
H.ProtocolRequestType = kv;
class Nv extends Kr.NotificationType0 {
  constructor(e) {
    super(e);
  }
}
H.ProtocolNotificationType0 = Nv;
class wv extends Kr.NotificationType {
  constructor(e) {
    super(e, Kr.ParameterStructures.byName);
  }
}
H.ProtocolNotificationType = wv;
var hp = {}, Ee = {};
Object.defineProperty(Ee, "__esModule", { value: !0 });
Ee.objectLiteral = Ee.typedArray = Ee.stringArray = Ee.array = Ee.func = Ee.error = Ee.number = Ee.string = Ee.boolean = void 0;
function bv(t) {
  return t === !0 || t === !1;
}
Ee.boolean = bv;
function pp(t) {
  return typeof t == "string" || t instanceof String;
}
Ee.string = pp;
function Iv(t) {
  return typeof t == "number" || t instanceof Number;
}
Ee.number = Iv;
function _v(t) {
  return t instanceof Error;
}
Ee.error = _v;
function $v(t) {
  return typeof t == "function";
}
Ee.func = $v;
function mp(t) {
  return Array.isArray(t);
}
Ee.array = mp;
function Pv(t) {
  return mp(t) && t.every((e) => pp(e));
}
Ee.stringArray = Pv;
function Lv(t, e) {
  return Array.isArray(t) && t.every(e);
}
Ee.typedArray = Lv;
function Ov(t) {
  return t !== null && typeof t == "object";
}
Ee.objectLiteral = Ov;
var Xa = {};
Object.defineProperty(Xa, "__esModule", { value: !0 });
Xa.ImplementationRequest = void 0;
const td = H;
var nd;
(function(t) {
  t.method = "textDocument/implementation", t.messageDirection = td.MessageDirection.clientToServer, t.type = new td.ProtocolRequestType(t.method);
})(nd || (Xa.ImplementationRequest = nd = {}));
var Ja = {};
Object.defineProperty(Ja, "__esModule", { value: !0 });
Ja.TypeDefinitionRequest = void 0;
const rd = H;
var id;
(function(t) {
  t.method = "textDocument/typeDefinition", t.messageDirection = rd.MessageDirection.clientToServer, t.type = new rd.ProtocolRequestType(t.method);
})(id || (Ja.TypeDefinitionRequest = id = {}));
var Hr = {};
Object.defineProperty(Hr, "__esModule", { value: !0 });
Hr.DidChangeWorkspaceFoldersNotification = Hr.WorkspaceFoldersRequest = void 0;
const wa = H;
var sd;
(function(t) {
  t.method = "workspace/workspaceFolders", t.messageDirection = wa.MessageDirection.serverToClient, t.type = new wa.ProtocolRequestType0(t.method);
})(sd || (Hr.WorkspaceFoldersRequest = sd = {}));
var ad;
(function(t) {
  t.method = "workspace/didChangeWorkspaceFolders", t.messageDirection = wa.MessageDirection.clientToServer, t.type = new wa.ProtocolNotificationType(t.method);
})(ad || (Hr.DidChangeWorkspaceFoldersNotification = ad = {}));
var Qa = {};
Object.defineProperty(Qa, "__esModule", { value: !0 });
Qa.ConfigurationRequest = void 0;
const od = H;
var cd;
(function(t) {
  t.method = "workspace/configuration", t.messageDirection = od.MessageDirection.serverToClient, t.type = new od.ProtocolRequestType(t.method);
})(cd || (Qa.ConfigurationRequest = cd = {}));
var Yr = {};
Object.defineProperty(Yr, "__esModule", { value: !0 });
Yr.ColorPresentationRequest = Yr.DocumentColorRequest = void 0;
const ba = H;
var ld;
(function(t) {
  t.method = "textDocument/documentColor", t.messageDirection = ba.MessageDirection.clientToServer, t.type = new ba.ProtocolRequestType(t.method);
})(ld || (Yr.DocumentColorRequest = ld = {}));
var ud;
(function(t) {
  t.method = "textDocument/colorPresentation", t.messageDirection = ba.MessageDirection.clientToServer, t.type = new ba.ProtocolRequestType(t.method);
})(ud || (Yr.ColorPresentationRequest = ud = {}));
var Xr = {};
Object.defineProperty(Xr, "__esModule", { value: !0 });
Xr.FoldingRangeRefreshRequest = Xr.FoldingRangeRequest = void 0;
const Ia = H;
var dd;
(function(t) {
  t.method = "textDocument/foldingRange", t.messageDirection = Ia.MessageDirection.clientToServer, t.type = new Ia.ProtocolRequestType(t.method);
})(dd || (Xr.FoldingRangeRequest = dd = {}));
var fd;
(function(t) {
  t.method = "workspace/foldingRange/refresh", t.messageDirection = Ia.MessageDirection.serverToClient, t.type = new Ia.ProtocolRequestType0(t.method);
})(fd || (Xr.FoldingRangeRefreshRequest = fd = {}));
var Za = {};
Object.defineProperty(Za, "__esModule", { value: !0 });
Za.DeclarationRequest = void 0;
const hd = H;
var pd;
(function(t) {
  t.method = "textDocument/declaration", t.messageDirection = hd.MessageDirection.clientToServer, t.type = new hd.ProtocolRequestType(t.method);
})(pd || (Za.DeclarationRequest = pd = {}));
var eo = {};
Object.defineProperty(eo, "__esModule", { value: !0 });
eo.SelectionRangeRequest = void 0;
const md = H;
var gd;
(function(t) {
  t.method = "textDocument/selectionRange", t.messageDirection = md.MessageDirection.clientToServer, t.type = new md.ProtocolRequestType(t.method);
})(gd || (eo.SelectionRangeRequest = gd = {}));
var pn = {};
Object.defineProperty(pn, "__esModule", { value: !0 });
pn.WorkDoneProgressCancelNotification = pn.WorkDoneProgressCreateRequest = pn.WorkDoneProgress = void 0;
const xv = Xn, _a = H;
var yd;
(function(t) {
  t.type = new xv.ProgressType();
  function e(n) {
    return n === t.type;
  }
  t.is = e;
})(yd || (pn.WorkDoneProgress = yd = {}));
var Td;
(function(t) {
  t.method = "window/workDoneProgress/create", t.messageDirection = _a.MessageDirection.serverToClient, t.type = new _a.ProtocolRequestType(t.method);
})(Td || (pn.WorkDoneProgressCreateRequest = Td = {}));
var Rd;
(function(t) {
  t.method = "window/workDoneProgress/cancel", t.messageDirection = _a.MessageDirection.clientToServer, t.type = new _a.ProtocolNotificationType(t.method);
})(Rd || (pn.WorkDoneProgressCancelNotification = Rd = {}));
var mn = {};
Object.defineProperty(mn, "__esModule", { value: !0 });
mn.CallHierarchyOutgoingCallsRequest = mn.CallHierarchyIncomingCallsRequest = mn.CallHierarchyPrepareRequest = void 0;
const Jr = H;
var vd;
(function(t) {
  t.method = "textDocument/prepareCallHierarchy", t.messageDirection = Jr.MessageDirection.clientToServer, t.type = new Jr.ProtocolRequestType(t.method);
})(vd || (mn.CallHierarchyPrepareRequest = vd = {}));
var Ed;
(function(t) {
  t.method = "callHierarchy/incomingCalls", t.messageDirection = Jr.MessageDirection.clientToServer, t.type = new Jr.ProtocolRequestType(t.method);
})(Ed || (mn.CallHierarchyIncomingCallsRequest = Ed = {}));
var Ad;
(function(t) {
  t.method = "callHierarchy/outgoingCalls", t.messageDirection = Jr.MessageDirection.clientToServer, t.type = new Jr.ProtocolRequestType(t.method);
})(Ad || (mn.CallHierarchyOutgoingCallsRequest = Ad = {}));
var Ze = {};
Object.defineProperty(Ze, "__esModule", { value: !0 });
Ze.SemanticTokensRefreshRequest = Ze.SemanticTokensRangeRequest = Ze.SemanticTokensDeltaRequest = Ze.SemanticTokensRequest = Ze.SemanticTokensRegistrationType = Ze.TokenFormat = void 0;
const sn = H;
var Sd;
(function(t) {
  t.Relative = "relative";
})(Sd || (Ze.TokenFormat = Sd = {}));
var es;
(function(t) {
  t.method = "textDocument/semanticTokens", t.type = new sn.RegistrationType(t.method);
})(es || (Ze.SemanticTokensRegistrationType = es = {}));
var Cd;
(function(t) {
  t.method = "textDocument/semanticTokens/full", t.messageDirection = sn.MessageDirection.clientToServer, t.type = new sn.ProtocolRequestType(t.method), t.registrationMethod = es.method;
})(Cd || (Ze.SemanticTokensRequest = Cd = {}));
var kd;
(function(t) {
  t.method = "textDocument/semanticTokens/full/delta", t.messageDirection = sn.MessageDirection.clientToServer, t.type = new sn.ProtocolRequestType(t.method), t.registrationMethod = es.method;
})(kd || (Ze.SemanticTokensDeltaRequest = kd = {}));
var Nd;
(function(t) {
  t.method = "textDocument/semanticTokens/range", t.messageDirection = sn.MessageDirection.clientToServer, t.type = new sn.ProtocolRequestType(t.method), t.registrationMethod = es.method;
})(Nd || (Ze.SemanticTokensRangeRequest = Nd = {}));
var wd;
(function(t) {
  t.method = "workspace/semanticTokens/refresh", t.messageDirection = sn.MessageDirection.serverToClient, t.type = new sn.ProtocolRequestType0(t.method);
})(wd || (Ze.SemanticTokensRefreshRequest = wd = {}));
var to = {};
Object.defineProperty(to, "__esModule", { value: !0 });
to.ShowDocumentRequest = void 0;
const bd = H;
var Id;
(function(t) {
  t.method = "window/showDocument", t.messageDirection = bd.MessageDirection.serverToClient, t.type = new bd.ProtocolRequestType(t.method);
})(Id || (to.ShowDocumentRequest = Id = {}));
var no = {};
Object.defineProperty(no, "__esModule", { value: !0 });
no.LinkedEditingRangeRequest = void 0;
const _d = H;
var $d;
(function(t) {
  t.method = "textDocument/linkedEditingRange", t.messageDirection = _d.MessageDirection.clientToServer, t.type = new _d.ProtocolRequestType(t.method);
})($d || (no.LinkedEditingRangeRequest = $d = {}));
var qe = {};
Object.defineProperty(qe, "__esModule", { value: !0 });
qe.WillDeleteFilesRequest = qe.DidDeleteFilesNotification = qe.DidRenameFilesNotification = qe.WillRenameFilesRequest = qe.DidCreateFilesNotification = qe.WillCreateFilesRequest = qe.FileOperationPatternKind = void 0;
const Tt = H;
var Pd;
(function(t) {
  t.file = "file", t.folder = "folder";
})(Pd || (qe.FileOperationPatternKind = Pd = {}));
var Ld;
(function(t) {
  t.method = "workspace/willCreateFiles", t.messageDirection = Tt.MessageDirection.clientToServer, t.type = new Tt.ProtocolRequestType(t.method);
})(Ld || (qe.WillCreateFilesRequest = Ld = {}));
var Od;
(function(t) {
  t.method = "workspace/didCreateFiles", t.messageDirection = Tt.MessageDirection.clientToServer, t.type = new Tt.ProtocolNotificationType(t.method);
})(Od || (qe.DidCreateFilesNotification = Od = {}));
var xd;
(function(t) {
  t.method = "workspace/willRenameFiles", t.messageDirection = Tt.MessageDirection.clientToServer, t.type = new Tt.ProtocolRequestType(t.method);
})(xd || (qe.WillRenameFilesRequest = xd = {}));
var Dd;
(function(t) {
  t.method = "workspace/didRenameFiles", t.messageDirection = Tt.MessageDirection.clientToServer, t.type = new Tt.ProtocolNotificationType(t.method);
})(Dd || (qe.DidRenameFilesNotification = Dd = {}));
var Md;
(function(t) {
  t.method = "workspace/didDeleteFiles", t.messageDirection = Tt.MessageDirection.clientToServer, t.type = new Tt.ProtocolNotificationType(t.method);
})(Md || (qe.DidDeleteFilesNotification = Md = {}));
var Fd;
(function(t) {
  t.method = "workspace/willDeleteFiles", t.messageDirection = Tt.MessageDirection.clientToServer, t.type = new Tt.ProtocolRequestType(t.method);
})(Fd || (qe.WillDeleteFilesRequest = Fd = {}));
var gn = {};
Object.defineProperty(gn, "__esModule", { value: !0 });
gn.MonikerRequest = gn.MonikerKind = gn.UniquenessLevel = void 0;
const Gd = H;
var Ud;
(function(t) {
  t.document = "document", t.project = "project", t.group = "group", t.scheme = "scheme", t.global = "global";
})(Ud || (gn.UniquenessLevel = Ud = {}));
var jd;
(function(t) {
  t.$import = "import", t.$export = "export", t.local = "local";
})(jd || (gn.MonikerKind = jd = {}));
var zd;
(function(t) {
  t.method = "textDocument/moniker", t.messageDirection = Gd.MessageDirection.clientToServer, t.type = new Gd.ProtocolRequestType(t.method);
})(zd || (gn.MonikerRequest = zd = {}));
var yn = {};
Object.defineProperty(yn, "__esModule", { value: !0 });
yn.TypeHierarchySubtypesRequest = yn.TypeHierarchySupertypesRequest = yn.TypeHierarchyPrepareRequest = void 0;
const Qr = H;
var Bd;
(function(t) {
  t.method = "textDocument/prepareTypeHierarchy", t.messageDirection = Qr.MessageDirection.clientToServer, t.type = new Qr.ProtocolRequestType(t.method);
})(Bd || (yn.TypeHierarchyPrepareRequest = Bd = {}));
var qd;
(function(t) {
  t.method = "typeHierarchy/supertypes", t.messageDirection = Qr.MessageDirection.clientToServer, t.type = new Qr.ProtocolRequestType(t.method);
})(qd || (yn.TypeHierarchySupertypesRequest = qd = {}));
var Wd;
(function(t) {
  t.method = "typeHierarchy/subtypes", t.messageDirection = Qr.MessageDirection.clientToServer, t.type = new Qr.ProtocolRequestType(t.method);
})(Wd || (yn.TypeHierarchySubtypesRequest = Wd = {}));
var Zr = {};
Object.defineProperty(Zr, "__esModule", { value: !0 });
Zr.InlineValueRefreshRequest = Zr.InlineValueRequest = void 0;
const $a = H;
var Vd;
(function(t) {
  t.method = "textDocument/inlineValue", t.messageDirection = $a.MessageDirection.clientToServer, t.type = new $a.ProtocolRequestType(t.method);
})(Vd || (Zr.InlineValueRequest = Vd = {}));
var Kd;
(function(t) {
  t.method = "workspace/inlineValue/refresh", t.messageDirection = $a.MessageDirection.serverToClient, t.type = new $a.ProtocolRequestType0(t.method);
})(Kd || (Zr.InlineValueRefreshRequest = Kd = {}));
var Tn = {};
Object.defineProperty(Tn, "__esModule", { value: !0 });
Tn.InlayHintRefreshRequest = Tn.InlayHintResolveRequest = Tn.InlayHintRequest = void 0;
const ei = H;
var Hd;
(function(t) {
  t.method = "textDocument/inlayHint", t.messageDirection = ei.MessageDirection.clientToServer, t.type = new ei.ProtocolRequestType(t.method);
})(Hd || (Tn.InlayHintRequest = Hd = {}));
var Yd;
(function(t) {
  t.method = "inlayHint/resolve", t.messageDirection = ei.MessageDirection.clientToServer, t.type = new ei.ProtocolRequestType(t.method);
})(Yd || (Tn.InlayHintResolveRequest = Yd = {}));
var Xd;
(function(t) {
  t.method = "workspace/inlayHint/refresh", t.messageDirection = ei.MessageDirection.serverToClient, t.type = new ei.ProtocolRequestType0(t.method);
})(Xd || (Tn.InlayHintRefreshRequest = Xd = {}));
var mt = {};
Object.defineProperty(mt, "__esModule", { value: !0 });
mt.DiagnosticRefreshRequest = mt.WorkspaceDiagnosticRequest = mt.DocumentDiagnosticRequest = mt.DocumentDiagnosticReportKind = mt.DiagnosticServerCancellationData = void 0;
const gp = Xn, Dv = Ee, ti = H;
var Jd;
(function(t) {
  function e(n) {
    const r = n;
    return r && Dv.boolean(r.retriggerRequest);
  }
  t.is = e;
})(Jd || (mt.DiagnosticServerCancellationData = Jd = {}));
var Qd;
(function(t) {
  t.Full = "full", t.Unchanged = "unchanged";
})(Qd || (mt.DocumentDiagnosticReportKind = Qd = {}));
var Zd;
(function(t) {
  t.method = "textDocument/diagnostic", t.messageDirection = ti.MessageDirection.clientToServer, t.type = new ti.ProtocolRequestType(t.method), t.partialResult = new gp.ProgressType();
})(Zd || (mt.DocumentDiagnosticRequest = Zd = {}));
var ef;
(function(t) {
  t.method = "workspace/diagnostic", t.messageDirection = ti.MessageDirection.clientToServer, t.type = new ti.ProtocolRequestType(t.method), t.partialResult = new gp.ProgressType();
})(ef || (mt.WorkspaceDiagnosticRequest = ef = {}));
var tf;
(function(t) {
  t.method = "workspace/diagnostic/refresh", t.messageDirection = ti.MessageDirection.serverToClient, t.type = new ti.ProtocolRequestType0(t.method);
})(tf || (mt.DiagnosticRefreshRequest = tf = {}));
var ve = {};
Object.defineProperty(ve, "__esModule", { value: !0 });
ve.DidCloseNotebookDocumentNotification = ve.DidSaveNotebookDocumentNotification = ve.DidChangeNotebookDocumentNotification = ve.NotebookCellArrayChange = ve.DidOpenNotebookDocumentNotification = ve.NotebookDocumentSyncRegistrationType = ve.NotebookDocument = ve.NotebookCell = ve.ExecutionSummary = ve.NotebookCellKind = void 0;
const ts = Wl, kt = Ee, Gt = H;
var cl;
(function(t) {
  t.Markup = 1, t.Code = 2;
  function e(n) {
    return n === 1 || n === 2;
  }
  t.is = e;
})(cl || (ve.NotebookCellKind = cl = {}));
var ll;
(function(t) {
  function e(i, s) {
    const a = { executionOrder: i };
    return (s === !0 || s === !1) && (a.success = s), a;
  }
  t.create = e;
  function n(i) {
    const s = i;
    return kt.objectLiteral(s) && ts.uinteger.is(s.executionOrder) && (s.success === void 0 || kt.boolean(s.success));
  }
  t.is = n;
  function r(i, s) {
    return i === s ? !0 : i == null || s === null || s === void 0 ? !1 : i.executionOrder === s.executionOrder && i.success === s.success;
  }
  t.equals = r;
})(ll || (ve.ExecutionSummary = ll = {}));
var Pa;
(function(t) {
  function e(s, a) {
    return { kind: s, document: a };
  }
  t.create = e;
  function n(s) {
    const a = s;
    return kt.objectLiteral(a) && cl.is(a.kind) && ts.DocumentUri.is(a.document) && (a.metadata === void 0 || kt.objectLiteral(a.metadata));
  }
  t.is = n;
  function r(s, a) {
    const o = /* @__PURE__ */ new Set();
    return s.document !== a.document && o.add("document"), s.kind !== a.kind && o.add("kind"), s.executionSummary !== a.executionSummary && o.add("executionSummary"), (s.metadata !== void 0 || a.metadata !== void 0) && !i(s.metadata, a.metadata) && o.add("metadata"), (s.executionSummary !== void 0 || a.executionSummary !== void 0) && !ll.equals(s.executionSummary, a.executionSummary) && o.add("executionSummary"), o;
  }
  t.diff = r;
  function i(s, a) {
    if (s === a)
      return !0;
    if (s == null || a === null || a === void 0 || typeof s != typeof a || typeof s != "object")
      return !1;
    const o = Array.isArray(s), c = Array.isArray(a);
    if (o !== c)
      return !1;
    if (o && c) {
      if (s.length !== a.length)
        return !1;
      for (let l = 0; l < s.length; l++)
        if (!i(s[l], a[l]))
          return !1;
    }
    if (kt.objectLiteral(s) && kt.objectLiteral(a)) {
      const l = Object.keys(s), u = Object.keys(a);
      if (l.length !== u.length || (l.sort(), u.sort(), !i(l, u)))
        return !1;
      for (let f = 0; f < l.length; f++) {
        const m = l[f];
        if (!i(s[m], a[m]))
          return !1;
      }
    }
    return !0;
  }
})(Pa || (ve.NotebookCell = Pa = {}));
var nf;
(function(t) {
  function e(r, i, s, a) {
    return { uri: r, notebookType: i, version: s, cells: a };
  }
  t.create = e;
  function n(r) {
    const i = r;
    return kt.objectLiteral(i) && kt.string(i.uri) && ts.integer.is(i.version) && kt.typedArray(i.cells, Pa.is);
  }
  t.is = n;
})(nf || (ve.NotebookDocument = nf = {}));
var ni;
(function(t) {
  t.method = "notebookDocument/sync", t.messageDirection = Gt.MessageDirection.clientToServer, t.type = new Gt.RegistrationType(t.method);
})(ni || (ve.NotebookDocumentSyncRegistrationType = ni = {}));
var rf;
(function(t) {
  t.method = "notebookDocument/didOpen", t.messageDirection = Gt.MessageDirection.clientToServer, t.type = new Gt.ProtocolNotificationType(t.method), t.registrationMethod = ni.method;
})(rf || (ve.DidOpenNotebookDocumentNotification = rf = {}));
var sf;
(function(t) {
  function e(r) {
    const i = r;
    return kt.objectLiteral(i) && ts.uinteger.is(i.start) && ts.uinteger.is(i.deleteCount) && (i.cells === void 0 || kt.typedArray(i.cells, Pa.is));
  }
  t.is = e;
  function n(r, i, s) {
    const a = { start: r, deleteCount: i };
    return s !== void 0 && (a.cells = s), a;
  }
  t.create = n;
})(sf || (ve.NotebookCellArrayChange = sf = {}));
var af;
(function(t) {
  t.method = "notebookDocument/didChange", t.messageDirection = Gt.MessageDirection.clientToServer, t.type = new Gt.ProtocolNotificationType(t.method), t.registrationMethod = ni.method;
})(af || (ve.DidChangeNotebookDocumentNotification = af = {}));
var of;
(function(t) {
  t.method = "notebookDocument/didSave", t.messageDirection = Gt.MessageDirection.clientToServer, t.type = new Gt.ProtocolNotificationType(t.method), t.registrationMethod = ni.method;
})(of || (ve.DidSaveNotebookDocumentNotification = of = {}));
var cf;
(function(t) {
  t.method = "notebookDocument/didClose", t.messageDirection = Gt.MessageDirection.clientToServer, t.type = new Gt.ProtocolNotificationType(t.method), t.registrationMethod = ni.method;
})(cf || (ve.DidCloseNotebookDocumentNotification = cf = {}));
var ro = {};
Object.defineProperty(ro, "__esModule", { value: !0 });
ro.InlineCompletionRequest = void 0;
const lf = H;
var uf;
(function(t) {
  t.method = "textDocument/inlineCompletion", t.messageDirection = lf.MessageDirection.clientToServer, t.type = new lf.ProtocolRequestType(t.method);
})(uf || (ro.InlineCompletionRequest = uf = {}));
(function(t) {
  Object.defineProperty(t, "__esModule", { value: !0 }), t.WorkspaceSymbolRequest = t.CodeActionResolveRequest = t.CodeActionRequest = t.DocumentSymbolRequest = t.DocumentHighlightRequest = t.ReferencesRequest = t.DefinitionRequest = t.SignatureHelpRequest = t.SignatureHelpTriggerKind = t.HoverRequest = t.CompletionResolveRequest = t.CompletionRequest = t.CompletionTriggerKind = t.PublishDiagnosticsNotification = t.WatchKind = t.RelativePattern = t.FileChangeType = t.DidChangeWatchedFilesNotification = t.WillSaveTextDocumentWaitUntilRequest = t.WillSaveTextDocumentNotification = t.TextDocumentSaveReason = t.DidSaveTextDocumentNotification = t.DidCloseTextDocumentNotification = t.DidChangeTextDocumentNotification = t.TextDocumentContentChangeEvent = t.DidOpenTextDocumentNotification = t.TextDocumentSyncKind = t.TelemetryEventNotification = t.LogMessageNotification = t.ShowMessageRequest = t.ShowMessageNotification = t.MessageType = t.DidChangeConfigurationNotification = t.ExitNotification = t.ShutdownRequest = t.InitializedNotification = t.InitializeErrorCodes = t.InitializeRequest = t.WorkDoneProgressOptions = t.TextDocumentRegistrationOptions = t.StaticRegistrationOptions = t.PositionEncodingKind = t.FailureHandlingKind = t.ResourceOperationKind = t.UnregistrationRequest = t.RegistrationRequest = t.DocumentSelector = t.NotebookCellTextDocumentFilter = t.NotebookDocumentFilter = t.TextDocumentFilter = void 0, t.MonikerRequest = t.MonikerKind = t.UniquenessLevel = t.WillDeleteFilesRequest = t.DidDeleteFilesNotification = t.WillRenameFilesRequest = t.DidRenameFilesNotification = t.WillCreateFilesRequest = t.DidCreateFilesNotification = t.FileOperationPatternKind = t.LinkedEditingRangeRequest = t.ShowDocumentRequest = t.SemanticTokensRegistrationType = t.SemanticTokensRefreshRequest = t.SemanticTokensRangeRequest = t.SemanticTokensDeltaRequest = t.SemanticTokensRequest = t.TokenFormat = t.CallHierarchyPrepareRequest = t.CallHierarchyOutgoingCallsRequest = t.CallHierarchyIncomingCallsRequest = t.WorkDoneProgressCancelNotification = t.WorkDoneProgressCreateRequest = t.WorkDoneProgress = t.SelectionRangeRequest = t.DeclarationRequest = t.FoldingRangeRefreshRequest = t.FoldingRangeRequest = t.ColorPresentationRequest = t.DocumentColorRequest = t.ConfigurationRequest = t.DidChangeWorkspaceFoldersNotification = t.WorkspaceFoldersRequest = t.TypeDefinitionRequest = t.ImplementationRequest = t.ApplyWorkspaceEditRequest = t.ExecuteCommandRequest = t.PrepareRenameRequest = t.RenameRequest = t.PrepareSupportDefaultBehavior = t.DocumentOnTypeFormattingRequest = t.DocumentRangesFormattingRequest = t.DocumentRangeFormattingRequest = t.DocumentFormattingRequest = t.DocumentLinkResolveRequest = t.DocumentLinkRequest = t.CodeLensRefreshRequest = t.CodeLensResolveRequest = t.CodeLensRequest = t.WorkspaceSymbolResolveRequest = void 0, t.InlineCompletionRequest = t.DidCloseNotebookDocumentNotification = t.DidSaveNotebookDocumentNotification = t.DidChangeNotebookDocumentNotification = t.NotebookCellArrayChange = t.DidOpenNotebookDocumentNotification = t.NotebookDocumentSyncRegistrationType = t.NotebookDocument = t.NotebookCell = t.ExecutionSummary = t.NotebookCellKind = t.DiagnosticRefreshRequest = t.WorkspaceDiagnosticRequest = t.DocumentDiagnosticRequest = t.DocumentDiagnosticReportKind = t.DiagnosticServerCancellationData = t.InlayHintRefreshRequest = t.InlayHintResolveRequest = t.InlayHintRequest = t.InlineValueRefreshRequest = t.InlineValueRequest = t.TypeHierarchySupertypesRequest = t.TypeHierarchySubtypesRequest = t.TypeHierarchyPrepareRequest = void 0;
  const e = H, n = Wl, r = Ee, i = Xa;
  Object.defineProperty(t, "ImplementationRequest", { enumerable: !0, get: function() {
    return i.ImplementationRequest;
  } });
  const s = Ja;
  Object.defineProperty(t, "TypeDefinitionRequest", { enumerable: !0, get: function() {
    return s.TypeDefinitionRequest;
  } });
  const a = Hr;
  Object.defineProperty(t, "WorkspaceFoldersRequest", { enumerable: !0, get: function() {
    return a.WorkspaceFoldersRequest;
  } }), Object.defineProperty(t, "DidChangeWorkspaceFoldersNotification", { enumerable: !0, get: function() {
    return a.DidChangeWorkspaceFoldersNotification;
  } });
  const o = Qa;
  Object.defineProperty(t, "ConfigurationRequest", { enumerable: !0, get: function() {
    return o.ConfigurationRequest;
  } });
  const c = Yr;
  Object.defineProperty(t, "DocumentColorRequest", { enumerable: !0, get: function() {
    return c.DocumentColorRequest;
  } }), Object.defineProperty(t, "ColorPresentationRequest", { enumerable: !0, get: function() {
    return c.ColorPresentationRequest;
  } });
  const l = Xr;
  Object.defineProperty(t, "FoldingRangeRequest", { enumerable: !0, get: function() {
    return l.FoldingRangeRequest;
  } }), Object.defineProperty(t, "FoldingRangeRefreshRequest", { enumerable: !0, get: function() {
    return l.FoldingRangeRefreshRequest;
  } });
  const u = Za;
  Object.defineProperty(t, "DeclarationRequest", { enumerable: !0, get: function() {
    return u.DeclarationRequest;
  } });
  const f = eo;
  Object.defineProperty(t, "SelectionRangeRequest", { enumerable: !0, get: function() {
    return f.SelectionRangeRequest;
  } });
  const m = pn;
  Object.defineProperty(t, "WorkDoneProgress", { enumerable: !0, get: function() {
    return m.WorkDoneProgress;
  } }), Object.defineProperty(t, "WorkDoneProgressCreateRequest", { enumerable: !0, get: function() {
    return m.WorkDoneProgressCreateRequest;
  } }), Object.defineProperty(t, "WorkDoneProgressCancelNotification", { enumerable: !0, get: function() {
    return m.WorkDoneProgressCancelNotification;
  } });
  const g = mn;
  Object.defineProperty(t, "CallHierarchyIncomingCallsRequest", { enumerable: !0, get: function() {
    return g.CallHierarchyIncomingCallsRequest;
  } }), Object.defineProperty(t, "CallHierarchyOutgoingCallsRequest", { enumerable: !0, get: function() {
    return g.CallHierarchyOutgoingCallsRequest;
  } }), Object.defineProperty(t, "CallHierarchyPrepareRequest", { enumerable: !0, get: function() {
    return g.CallHierarchyPrepareRequest;
  } });
  const A = Ze;
  Object.defineProperty(t, "TokenFormat", { enumerable: !0, get: function() {
    return A.TokenFormat;
  } }), Object.defineProperty(t, "SemanticTokensRequest", { enumerable: !0, get: function() {
    return A.SemanticTokensRequest;
  } }), Object.defineProperty(t, "SemanticTokensDeltaRequest", { enumerable: !0, get: function() {
    return A.SemanticTokensDeltaRequest;
  } }), Object.defineProperty(t, "SemanticTokensRangeRequest", { enumerable: !0, get: function() {
    return A.SemanticTokensRangeRequest;
  } }), Object.defineProperty(t, "SemanticTokensRefreshRequest", { enumerable: !0, get: function() {
    return A.SemanticTokensRefreshRequest;
  } }), Object.defineProperty(t, "SemanticTokensRegistrationType", { enumerable: !0, get: function() {
    return A.SemanticTokensRegistrationType;
  } });
  const N = to;
  Object.defineProperty(t, "ShowDocumentRequest", { enumerable: !0, get: function() {
    return N.ShowDocumentRequest;
  } });
  const $ = no;
  Object.defineProperty(t, "LinkedEditingRangeRequest", { enumerable: !0, get: function() {
    return $.LinkedEditingRangeRequest;
  } });
  const w = qe;
  Object.defineProperty(t, "FileOperationPatternKind", { enumerable: !0, get: function() {
    return w.FileOperationPatternKind;
  } }), Object.defineProperty(t, "DidCreateFilesNotification", { enumerable: !0, get: function() {
    return w.DidCreateFilesNotification;
  } }), Object.defineProperty(t, "WillCreateFilesRequest", { enumerable: !0, get: function() {
    return w.WillCreateFilesRequest;
  } }), Object.defineProperty(t, "DidRenameFilesNotification", { enumerable: !0, get: function() {
    return w.DidRenameFilesNotification;
  } }), Object.defineProperty(t, "WillRenameFilesRequest", { enumerable: !0, get: function() {
    return w.WillRenameFilesRequest;
  } }), Object.defineProperty(t, "DidDeleteFilesNotification", { enumerable: !0, get: function() {
    return w.DidDeleteFilesNotification;
  } }), Object.defineProperty(t, "WillDeleteFilesRequest", { enumerable: !0, get: function() {
    return w.WillDeleteFilesRequest;
  } });
  const O = gn;
  Object.defineProperty(t, "UniquenessLevel", { enumerable: !0, get: function() {
    return O.UniquenessLevel;
  } }), Object.defineProperty(t, "MonikerKind", { enumerable: !0, get: function() {
    return O.MonikerKind;
  } }), Object.defineProperty(t, "MonikerRequest", { enumerable: !0, get: function() {
    return O.MonikerRequest;
  } });
  const b = yn;
  Object.defineProperty(t, "TypeHierarchyPrepareRequest", { enumerable: !0, get: function() {
    return b.TypeHierarchyPrepareRequest;
  } }), Object.defineProperty(t, "TypeHierarchySubtypesRequest", { enumerable: !0, get: function() {
    return b.TypeHierarchySubtypesRequest;
  } }), Object.defineProperty(t, "TypeHierarchySupertypesRequest", { enumerable: !0, get: function() {
    return b.TypeHierarchySupertypesRequest;
  } });
  const x = Zr;
  Object.defineProperty(t, "InlineValueRequest", { enumerable: !0, get: function() {
    return x.InlineValueRequest;
  } }), Object.defineProperty(t, "InlineValueRefreshRequest", { enumerable: !0, get: function() {
    return x.InlineValueRefreshRequest;
  } });
  const X = Tn;
  Object.defineProperty(t, "InlayHintRequest", { enumerable: !0, get: function() {
    return X.InlayHintRequest;
  } }), Object.defineProperty(t, "InlayHintResolveRequest", { enumerable: !0, get: function() {
    return X.InlayHintResolveRequest;
  } }), Object.defineProperty(t, "InlayHintRefreshRequest", { enumerable: !0, get: function() {
    return X.InlayHintRefreshRequest;
  } });
  const te = mt;
  Object.defineProperty(t, "DiagnosticServerCancellationData", { enumerable: !0, get: function() {
    return te.DiagnosticServerCancellationData;
  } }), Object.defineProperty(t, "DocumentDiagnosticReportKind", { enumerable: !0, get: function() {
    return te.DocumentDiagnosticReportKind;
  } }), Object.defineProperty(t, "DocumentDiagnosticRequest", { enumerable: !0, get: function() {
    return te.DocumentDiagnosticRequest;
  } }), Object.defineProperty(t, "WorkspaceDiagnosticRequest", { enumerable: !0, get: function() {
    return te.WorkspaceDiagnosticRequest;
  } }), Object.defineProperty(t, "DiagnosticRefreshRequest", { enumerable: !0, get: function() {
    return te.DiagnosticRefreshRequest;
  } });
  const ne = ve;
  Object.defineProperty(t, "NotebookCellKind", { enumerable: !0, get: function() {
    return ne.NotebookCellKind;
  } }), Object.defineProperty(t, "ExecutionSummary", { enumerable: !0, get: function() {
    return ne.ExecutionSummary;
  } }), Object.defineProperty(t, "NotebookCell", { enumerable: !0, get: function() {
    return ne.NotebookCell;
  } }), Object.defineProperty(t, "NotebookDocument", { enumerable: !0, get: function() {
    return ne.NotebookDocument;
  } }), Object.defineProperty(t, "NotebookDocumentSyncRegistrationType", { enumerable: !0, get: function() {
    return ne.NotebookDocumentSyncRegistrationType;
  } }), Object.defineProperty(t, "DidOpenNotebookDocumentNotification", { enumerable: !0, get: function() {
    return ne.DidOpenNotebookDocumentNotification;
  } }), Object.defineProperty(t, "NotebookCellArrayChange", { enumerable: !0, get: function() {
    return ne.NotebookCellArrayChange;
  } }), Object.defineProperty(t, "DidChangeNotebookDocumentNotification", { enumerable: !0, get: function() {
    return ne.DidChangeNotebookDocumentNotification;
  } }), Object.defineProperty(t, "DidSaveNotebookDocumentNotification", { enumerable: !0, get: function() {
    return ne.DidSaveNotebookDocumentNotification;
  } }), Object.defineProperty(t, "DidCloseNotebookDocumentNotification", { enumerable: !0, get: function() {
    return ne.DidCloseNotebookDocumentNotification;
  } });
  const ye = ro;
  Object.defineProperty(t, "InlineCompletionRequest", { enumerable: !0, get: function() {
    return ye.InlineCompletionRequest;
  } });
  var Ce;
  (function(d) {
    function ke(Ne) {
      const V = Ne;
      return r.string(V) || r.string(V.language) || r.string(V.scheme) || r.string(V.pattern);
    }
    d.is = ke;
  })(Ce || (t.TextDocumentFilter = Ce = {}));
  var de;
  (function(d) {
    function ke(Ne) {
      const V = Ne;
      return r.objectLiteral(V) && (r.string(V.notebookType) || r.string(V.scheme) || r.string(V.pattern));
    }
    d.is = ke;
  })(de || (t.NotebookDocumentFilter = de = {}));
  var k;
  (function(d) {
    function ke(Ne) {
      const V = Ne;
      return r.objectLiteral(V) && (r.string(V.notebook) || de.is(V.notebook)) && (V.language === void 0 || r.string(V.language));
    }
    d.is = ke;
  })(k || (t.NotebookCellTextDocumentFilter = k = {}));
  var R;
  (function(d) {
    function ke(Ne) {
      if (!Array.isArray(Ne))
        return !1;
      for (let V of Ne)
        if (!r.string(V) && !Ce.is(V) && !k.is(V))
          return !1;
      return !0;
    }
    d.is = ke;
  })(R || (t.DocumentSelector = R = {}));
  var p;
  (function(d) {
    d.method = "client/registerCapability", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolRequestType(d.method);
  })(p || (t.RegistrationRequest = p = {}));
  var S;
  (function(d) {
    d.method = "client/unregisterCapability", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolRequestType(d.method);
  })(S || (t.UnregistrationRequest = S = {}));
  var y;
  (function(d) {
    d.Create = "create", d.Rename = "rename", d.Delete = "delete";
  })(y || (t.ResourceOperationKind = y = {}));
  var T;
  (function(d) {
    d.Abort = "abort", d.Transactional = "transactional", d.TextOnlyTransactional = "textOnlyTransactional", d.Undo = "undo";
  })(T || (t.FailureHandlingKind = T = {}));
  var E;
  (function(d) {
    d.UTF8 = "utf-8", d.UTF16 = "utf-16", d.UTF32 = "utf-32";
  })(E || (t.PositionEncodingKind = E = {}));
  var P;
  (function(d) {
    function ke(Ne) {
      const V = Ne;
      return V && r.string(V.id) && V.id.length > 0;
    }
    d.hasId = ke;
  })(P || (t.StaticRegistrationOptions = P = {}));
  var D;
  (function(d) {
    function ke(Ne) {
      const V = Ne;
      return V && (V.documentSelector === null || R.is(V.documentSelector));
    }
    d.is = ke;
  })(D || (t.TextDocumentRegistrationOptions = D = {}));
  var L;
  (function(d) {
    function ke(V) {
      const h = V;
      return r.objectLiteral(h) && (h.workDoneProgress === void 0 || r.boolean(h.workDoneProgress));
    }
    d.is = ke;
    function Ne(V) {
      const h = V;
      return h && r.boolean(h.workDoneProgress);
    }
    d.hasWorkDoneProgress = Ne;
  })(L || (t.WorkDoneProgressOptions = L = {}));
  var z;
  (function(d) {
    d.method = "initialize", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(z || (t.InitializeRequest = z = {}));
  var G;
  (function(d) {
    d.unknownProtocolVersion = 1;
  })(G || (t.InitializeErrorCodes = G = {}));
  var se;
  (function(d) {
    d.method = "initialized", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType(d.method);
  })(se || (t.InitializedNotification = se = {}));
  var q;
  (function(d) {
    d.method = "shutdown", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType0(d.method);
  })(q || (t.ShutdownRequest = q = {}));
  var re;
  (function(d) {
    d.method = "exit", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType0(d.method);
  })(re || (t.ExitNotification = re = {}));
  var xe;
  (function(d) {
    d.method = "workspace/didChangeConfiguration", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType(d.method);
  })(xe || (t.DidChangeConfigurationNotification = xe = {}));
  var Te;
  (function(d) {
    d.Error = 1, d.Warning = 2, d.Info = 3, d.Log = 4, d.Debug = 5;
  })(Te || (t.MessageType = Te = {}));
  var fe;
  (function(d) {
    d.method = "window/showMessage", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolNotificationType(d.method);
  })(fe || (t.ShowMessageNotification = fe = {}));
  var $e;
  (function(d) {
    d.method = "window/showMessageRequest", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolRequestType(d.method);
  })($e || (t.ShowMessageRequest = $e = {}));
  var De;
  (function(d) {
    d.method = "window/logMessage", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolNotificationType(d.method);
  })(De || (t.LogMessageNotification = De = {}));
  var be;
  (function(d) {
    d.method = "telemetry/event", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolNotificationType(d.method);
  })(be || (t.TelemetryEventNotification = be = {}));
  var Q;
  (function(d) {
    d.None = 0, d.Full = 1, d.Incremental = 2;
  })(Q || (t.TextDocumentSyncKind = Q = {}));
  var st;
  (function(d) {
    d.method = "textDocument/didOpen", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType(d.method);
  })(st || (t.DidOpenTextDocumentNotification = st = {}));
  var Re;
  (function(d) {
    function ke(V) {
      let h = V;
      return h != null && typeof h.text == "string" && h.range !== void 0 && (h.rangeLength === void 0 || typeof h.rangeLength == "number");
    }
    d.isIncremental = ke;
    function Ne(V) {
      let h = V;
      return h != null && typeof h.text == "string" && h.range === void 0 && h.rangeLength === void 0;
    }
    d.isFull = Ne;
  })(Re || (t.TextDocumentContentChangeEvent = Re = {}));
  var Rt;
  (function(d) {
    d.method = "textDocument/didChange", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType(d.method);
  })(Rt || (t.DidChangeTextDocumentNotification = Rt = {}));
  var Zn;
  (function(d) {
    d.method = "textDocument/didClose", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType(d.method);
  })(Zn || (t.DidCloseTextDocumentNotification = Zn = {}));
  var ci;
  (function(d) {
    d.method = "textDocument/didSave", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType(d.method);
  })(ci || (t.DidSaveTextDocumentNotification = ci = {}));
  var li;
  (function(d) {
    d.Manual = 1, d.AfterDelay = 2, d.FocusOut = 3;
  })(li || (t.TextDocumentSaveReason = li = {}));
  var ui;
  (function(d) {
    d.method = "textDocument/willSave", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType(d.method);
  })(ui || (t.WillSaveTextDocumentNotification = ui = {}));
  var di;
  (function(d) {
    d.method = "textDocument/willSaveWaitUntil", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(di || (t.WillSaveTextDocumentWaitUntilRequest = di = {}));
  var vt;
  (function(d) {
    d.method = "workspace/didChangeWatchedFiles", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolNotificationType(d.method);
  })(vt || (t.DidChangeWatchedFilesNotification = vt = {}));
  var fi;
  (function(d) {
    d.Created = 1, d.Changed = 2, d.Deleted = 3;
  })(fi || (t.FileChangeType = fi = {}));
  var fs;
  (function(d) {
    function ke(Ne) {
      const V = Ne;
      return r.objectLiteral(V) && (n.URI.is(V.baseUri) || n.WorkspaceFolder.is(V.baseUri)) && r.string(V.pattern);
    }
    d.is = ke;
  })(fs || (t.RelativePattern = fs = {}));
  var hs;
  (function(d) {
    d.Create = 1, d.Change = 2, d.Delete = 4;
  })(hs || (t.WatchKind = hs = {}));
  var ps;
  (function(d) {
    d.method = "textDocument/publishDiagnostics", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolNotificationType(d.method);
  })(ps || (t.PublishDiagnosticsNotification = ps = {}));
  var ms;
  (function(d) {
    d.Invoked = 1, d.TriggerCharacter = 2, d.TriggerForIncompleteCompletions = 3;
  })(ms || (t.CompletionTriggerKind = ms = {}));
  var hi;
  (function(d) {
    d.method = "textDocument/completion", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(hi || (t.CompletionRequest = hi = {}));
  var pi;
  (function(d) {
    d.method = "completionItem/resolve", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(pi || (t.CompletionResolveRequest = pi = {}));
  var jt;
  (function(d) {
    d.method = "textDocument/hover", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(jt || (t.HoverRequest = jt = {}));
  var mi;
  (function(d) {
    d.Invoked = 1, d.TriggerCharacter = 2, d.ContentChange = 3;
  })(mi || (t.SignatureHelpTriggerKind = mi = {}));
  var gs;
  (function(d) {
    d.method = "textDocument/signatureHelp", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(gs || (t.SignatureHelpRequest = gs = {}));
  var ys;
  (function(d) {
    d.method = "textDocument/definition", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(ys || (t.DefinitionRequest = ys = {}));
  var gi;
  (function(d) {
    d.method = "textDocument/references", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(gi || (t.ReferencesRequest = gi = {}));
  var yi;
  (function(d) {
    d.method = "textDocument/documentHighlight", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(yi || (t.DocumentHighlightRequest = yi = {}));
  var Ts;
  (function(d) {
    d.method = "textDocument/documentSymbol", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(Ts || (t.DocumentSymbolRequest = Ts = {}));
  var Rs;
  (function(d) {
    d.method = "textDocument/codeAction", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(Rs || (t.CodeActionRequest = Rs = {}));
  var vs;
  (function(d) {
    d.method = "codeAction/resolve", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(vs || (t.CodeActionResolveRequest = vs = {}));
  var Es;
  (function(d) {
    d.method = "workspace/symbol", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(Es || (t.WorkspaceSymbolRequest = Es = {}));
  var As;
  (function(d) {
    d.method = "workspaceSymbol/resolve", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(As || (t.WorkspaceSymbolResolveRequest = As = {}));
  var Ss;
  (function(d) {
    d.method = "textDocument/codeLens", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(Ss || (t.CodeLensRequest = Ss = {}));
  var Et;
  (function(d) {
    d.method = "codeLens/resolve", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(Et || (t.CodeLensResolveRequest = Et = {}));
  var Cs;
  (function(d) {
    d.method = "workspace/codeLens/refresh", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolRequestType0(d.method);
  })(Cs || (t.CodeLensRefreshRequest = Cs = {}));
  var ks;
  (function(d) {
    d.method = "textDocument/documentLink", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(ks || (t.DocumentLinkRequest = ks = {}));
  var In;
  (function(d) {
    d.method = "documentLink/resolve", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(In || (t.DocumentLinkResolveRequest = In = {}));
  var Ns;
  (function(d) {
    d.method = "textDocument/formatting", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(Ns || (t.DocumentFormattingRequest = Ns = {}));
  var er;
  (function(d) {
    d.method = "textDocument/rangeFormatting", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(er || (t.DocumentRangeFormattingRequest = er = {}));
  var ws;
  (function(d) {
    d.method = "textDocument/rangesFormatting", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(ws || (t.DocumentRangesFormattingRequest = ws = {}));
  var zt;
  (function(d) {
    d.method = "textDocument/onTypeFormatting", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(zt || (t.DocumentOnTypeFormattingRequest = zt = {}));
  var ln;
  (function(d) {
    d.Identifier = 1;
  })(ln || (t.PrepareSupportDefaultBehavior = ln = {}));
  var bs;
  (function(d) {
    d.method = "textDocument/rename", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(bs || (t.RenameRequest = bs = {}));
  var Is;
  (function(d) {
    d.method = "textDocument/prepareRename", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(Is || (t.PrepareRenameRequest = Is = {}));
  var un;
  (function(d) {
    d.method = "workspace/executeCommand", d.messageDirection = e.MessageDirection.clientToServer, d.type = new e.ProtocolRequestType(d.method);
  })(un || (t.ExecuteCommandRequest = un = {}));
  var Ti;
  (function(d) {
    d.method = "workspace/applyEdit", d.messageDirection = e.MessageDirection.serverToClient, d.type = new e.ProtocolRequestType("workspace/applyEdit");
  })(Ti || (t.ApplyWorkspaceEditRequest = Ti = {}));
})(hp);
var io = {};
Object.defineProperty(io, "__esModule", { value: !0 });
io.createProtocolConnection = void 0;
const df = Xn;
function Mv(t, e, n, r) {
  return df.ConnectionStrategy.is(r) && (r = { connectionStrategy: r }), (0, df.createMessageConnection)(t, e, n, r);
}
io.createProtocolConnection = Mv;
(function(t) {
  var e = gt && gt.__createBinding || (Object.create ? function(s, a, o, c) {
    c === void 0 && (c = o);
    var l = Object.getOwnPropertyDescriptor(a, o);
    (!l || ("get" in l ? !a.__esModule : l.writable || l.configurable)) && (l = { enumerable: !0, get: function() {
      return a[o];
    } }), Object.defineProperty(s, c, l);
  } : function(s, a, o, c) {
    c === void 0 && (c = o), s[c] = a[o];
  }), n = gt && gt.__exportStar || function(s, a) {
    for (var o in s) o !== "default" && !Object.prototype.hasOwnProperty.call(a, o) && e(a, s, o);
  };
  Object.defineProperty(t, "__esModule", { value: !0 }), t.LSPErrorCodes = t.createProtocolConnection = void 0, n(Xn, t), n(Wl, t), n(H, t), n(hp, t);
  var r = io;
  Object.defineProperty(t, "createProtocolConnection", { enumerable: !0, get: function() {
    return r.createProtocolConnection;
  } });
  var i;
  (function(s) {
    s.lspReservedErrorRangeStart = -32899, s.RequestFailed = -32803, s.ServerCancelled = -32802, s.ContentModified = -32801, s.RequestCancelled = -32800, s.lspReservedErrorRangeEnd = -32800;
  })(i || (t.LSPErrorCodes = i = {}));
})(fp);
(function(t) {
  var e = gt && gt.__createBinding || (Object.create ? function(s, a, o, c) {
    c === void 0 && (c = o);
    var l = Object.getOwnPropertyDescriptor(a, o);
    (!l || ("get" in l ? !a.__esModule : l.writable || l.configurable)) && (l = { enumerable: !0, get: function() {
      return a[o];
    } }), Object.defineProperty(s, c, l);
  } : function(s, a, o, c) {
    c === void 0 && (c = o), s[c] = a[o];
  }), n = gt && gt.__exportStar || function(s, a) {
    for (var o in s) o !== "default" && !Object.prototype.hasOwnProperty.call(a, o) && e(a, s, o);
  };
  Object.defineProperty(t, "__esModule", { value: !0 }), t.createProtocolConnection = void 0;
  const r = Zu;
  n(Zu, t), n(fp, t);
  function i(s, a, o, c) {
    return (0, r.createMessageConnection)(s, a, o, c);
  }
  t.createProtocolConnection = i;
})(Gi);
var ji;
(function(t) {
  function e(n) {
    return {
      dispose: async () => await n()
    };
  }
  t.create = e;
})(ji || (ji = {}));
class Fv {
  constructor(e) {
    this.updateBuildOptions = {
      // Default: run only the built-in validation checks and those in the _fast_ category (includes those without category)
      validation: {
        categories: ["built-in", "fast"]
      }
    }, this.updateListeners = [], this.buildPhaseListeners = new Zi(), this.documentPhaseListeners = new Zi(), this.buildState = /* @__PURE__ */ new Map(), this.documentBuildWaiters = /* @__PURE__ */ new Map(), this.currentState = K.Changed, this.langiumDocuments = e.workspace.LangiumDocuments, this.langiumDocumentFactory = e.workspace.LangiumDocumentFactory, this.textDocuments = e.workspace.TextDocuments, this.indexManager = e.workspace.IndexManager, this.fileSystemProvider = e.workspace.FileSystemProvider, this.workspaceManager = () => e.workspace.WorkspaceManager, this.serviceRegistry = e.ServiceRegistry;
  }
  async build(e, n = {}, r = ge.None) {
    var i;
    for (const s of e) {
      const a = s.uri.toString();
      if (s.state === K.Validated) {
        if (typeof n.validation == "boolean" && n.validation)
          this.resetToState(s, K.IndexedReferences);
        else if (typeof n.validation == "object") {
          const o = this.findMissingValidationCategories(s, n);
          o.length > 0 && (this.buildState.set(a, {
            completed: !1,
            options: {
              validation: {
                categories: o
              }
            },
            result: (i = this.buildState.get(a)) == null ? void 0 : i.result
          }), s.state = K.IndexedReferences);
        }
      } else
        this.buildState.delete(a);
    }
    this.currentState = K.Changed, await this.emitUpdate(e.map((s) => s.uri), []), await this.buildDocuments(e, n, r);
  }
  async update(e, n, r = ge.None) {
    this.currentState = K.Changed;
    const i = [];
    for (const c of n) {
      const l = this.langiumDocuments.deleteDocuments(c);
      for (const u of l)
        i.push(u.uri), this.cleanUpDeleted(u);
    }
    const s = (await Promise.all(e.map((c) => this.findChangedUris(c)))).flat();
    for (const c of s) {
      let l = this.langiumDocuments.getDocument(c);
      l === void 0 && (l = this.langiumDocumentFactory.fromModel({ $type: "INVALID" }, c), l.state = K.Changed, this.langiumDocuments.addDocument(l)), this.resetToState(l, K.Changed);
    }
    const a = pe(s).concat(i).map((c) => c.toString()).toSet();
    this.langiumDocuments.all.filter((c) => !a.has(c.uri.toString()) && this.shouldRelink(c, a)).forEach((c) => this.resetToState(c, K.ComputedScopes)), await this.emitUpdate(s, i), await He(r);
    const o = this.sortDocuments(this.langiumDocuments.all.filter((c) => {
      var l;
      return (
        // This includes those that were reported as changed and those that we selected for relinking
        c.state < K.Validated || !((l = this.buildState.get(c.uri.toString())) != null && l.completed) || this.resultsAreIncomplete(c, this.updateBuildOptions)
      );
    }).toArray());
    await this.buildDocuments(o, this.updateBuildOptions, r);
  }
  resultsAreIncomplete(e, n) {
    return this.findMissingValidationCategories(e, n).length >= 1;
  }
  findMissingValidationCategories(e, n) {
    var o, c;
    const r = this.buildState.get(e.uri.toString()), i = this.serviceRegistry.getServices(e.uri).validation.ValidationRegistry.getAllValidationCategories(e), s = (o = r == null ? void 0 : r.result) != null && o.validationChecks ? new Set((c = r == null ? void 0 : r.result) == null ? void 0 : c.validationChecks) : r != null && r.completed ? i : /* @__PURE__ */ new Set(), a = n === void 0 || n.validation === !0 ? i : typeof n.validation == "object" ? n.validation.categories ?? i : [];
    return pe(a).filter((l) => !s.has(l)).toArray();
  }
  async findChangedUris(e) {
    var r;
    if (this.langiumDocuments.getDocument(e) ?? ((r = this.textDocuments) == null ? void 0 : r.get(e)))
      return [e];
    try {
      const i = await this.fileSystemProvider.stat(e);
      if (i.isDirectory)
        return await this.workspaceManager().searchFolder(e);
      if (this.workspaceManager().shouldIncludeEntry(i))
        return [e];
    } catch {
    }
    return [];
  }
  async emitUpdate(e, n) {
    await Promise.all(this.updateListeners.map((r) => r(e, n)));
  }
  /**
   * Sort the given documents by priority. By default, documents with an open text document are prioritized.
   * This is useful to ensure that visible documents show their diagnostics before all other documents.
   *
   * This improves the responsiveness in large workspaces as users usually don't care about diagnostics
   * in files that are currently not opened in the editor.
   */
  sortDocuments(e) {
    let n = 0, r = e.length - 1;
    for (; n < r; ) {
      for (; n < e.length && this.hasTextDocument(e[n]); )
        n++;
      for (; r >= 0 && !this.hasTextDocument(e[r]); )
        r--;
      n < r && ([e[n], e[r]] = [e[r], e[n]]);
    }
    return e;
  }
  hasTextDocument(e) {
    var n;
    return !!((n = this.textDocuments) != null && n.get(e.uri));
  }
  /**
   * Check whether the given document should be relinked after changes were found in the given URIs.
   */
  shouldRelink(e, n) {
    return e.references.some((r) => r.error !== void 0) ? !0 : this.indexManager.isAffected(e, n);
  }
  onUpdate(e) {
    return this.updateListeners.push(e), ji.create(() => {
      const n = this.updateListeners.indexOf(e);
      n >= 0 && this.updateListeners.splice(n, 1);
    });
  }
  resetToState(e, n) {
    switch (n) {
      case K.Changed:
      case K.Parsed:
        this.indexManager.removeContent(e.uri);
      case K.IndexedContent:
        e.localSymbols = void 0;
      case K.ComputedScopes:
        this.serviceRegistry.getServices(e.uri).references.Linker.unlink(e);
      case K.Linked:
        this.indexManager.removeReferences(e.uri);
      case K.IndexedReferences:
        e.diagnostics = void 0, this.buildState.delete(e.uri.toString());
      case K.Validated:
    }
    e.state > n && (e.state = n);
  }
  cleanUpDeleted(e) {
    this.buildState.delete(e.uri.toString()), this.indexManager.remove(e.uri), e.state = K.Changed;
  }
  /**
   * Build the given documents by stepping through all build phases. If a document's state indicates
   * that a certain build phase is already done, the phase is skipped for that document.
   *
   * @param documents The documents to build.
   * @param options the {@link BuildOptions} to use.
   * @param cancelToken A cancellation token that can be used to cancel the build.
   * @returns A promise that resolves when the build is done.
   */
  async buildDocuments(e, n, r) {
    this.prepareBuild(e, n), await this.runCancelable(e, K.Parsed, r, (a) => this.langiumDocumentFactory.update(a, r)), await this.runCancelable(e, K.IndexedContent, r, (a) => this.indexManager.updateContent(a, r)), await this.runCancelable(e, K.ComputedScopes, r, async (a) => {
      const o = this.serviceRegistry.getServices(a.uri).references.ScopeComputation;
      a.localSymbols = await o.collectLocalSymbols(a, r);
    });
    const i = e.filter((a) => this.shouldLink(a));
    await this.runCancelable(i, K.Linked, r, (a) => this.serviceRegistry.getServices(a.uri).references.Linker.link(a, r)), await this.runCancelable(i, K.IndexedReferences, r, (a) => this.indexManager.updateReferences(a, r));
    const s = e.filter((a) => this.shouldValidate(a) ? !0 : (this.markAsCompleted(a), !1));
    await this.runCancelable(s, K.Validated, r, async (a) => {
      await this.validate(a, r), this.markAsCompleted(a);
    });
  }
  markAsCompleted(e) {
    const n = this.buildState.get(e.uri.toString());
    n && (n.completed = !0);
  }
  /**
   * Runs prior to beginning the build process to update the {@link DocumentBuildState} for each document
   *
   * @param documents collection of documents to be built
   * @param options the {@link BuildOptions} to use
   */
  prepareBuild(e, n) {
    for (const r of e) {
      const i = r.uri.toString(), s = this.buildState.get(i);
      (!s || s.completed) && this.buildState.set(i, {
        completed: !1,
        options: n,
        result: s == null ? void 0 : s.result
      });
    }
  }
  /**
   * Runs a cancelable operation on a set of documents to bring them to a specified {@link DocumentState}.
   *
   * @param documents The array of documents to process.
   * @param targetState The target {@link DocumentState} to bring the documents to.
   * @param cancelToken A token that can be used to cancel the operation.
   * @param callback A function to be called for each document.
   * @returns A promise that resolves when all documents have been processed or the operation is canceled.
   * @throws Will throw `OperationCancelled` if the operation is canceled via a `CancellationToken`.
   */
  async runCancelable(e, n, r, i) {
    for (const a of e)
      a.state < n && (await He(r), await i(a), a.state = n, await this.notifyDocumentPhase(a, n, r));
    const s = e.filter((a) => a.state === n);
    await this.notifyBuildPhase(s, n, r), this.currentState = n;
  }
  onBuildPhase(e, n) {
    return this.buildPhaseListeners.add(e, n), ji.create(() => {
      this.buildPhaseListeners.delete(e, n);
    });
  }
  onDocumentPhase(e, n) {
    return this.documentPhaseListeners.add(e, n), ji.create(() => {
      this.documentPhaseListeners.delete(e, n);
    });
  }
  waitUntil(e, n, r) {
    let i;
    return n && "path" in n ? i = n : r = n, r ?? (r = ge.None), i ? this.awaitDocumentState(e, i, r) : this.awaitBuilderState(e, r);
  }
  awaitDocumentState(e, n, r) {
    const i = this.langiumDocuments.getDocument(n);
    if (i) {
      if (i.state >= e)
        return Promise.resolve(n);
      if (r.isCancellationRequested)
        return Promise.reject(Er);
      if (this.currentState >= e && e > i.state)
        return Promise.reject(new Gi.ResponseError(Gi.LSPErrorCodes.RequestFailed, `Document state of ${n.toString()} is ${K[i.state]}, requiring ${K[e]}, but workspace state is already ${K[this.currentState]}. Returning undefined.`));
    } else return Promise.reject(new Gi.ResponseError(Gi.LSPErrorCodes.ServerCancelled, `No document found for URI: ${n.toString()}`));
    return new Promise((s, a) => {
      const o = this.onDocumentPhase(e, (l) => {
        ct.equals(l.uri, n) && (o.dispose(), c.dispose(), s(l.uri));
      }), c = r.onCancellationRequested(() => {
        o.dispose(), c.dispose(), a(Er);
      });
    });
  }
  awaitBuilderState(e, n) {
    return this.currentState >= e ? Promise.resolve() : n.isCancellationRequested ? Promise.reject(Er) : new Promise((r, i) => {
      const s = this.onBuildPhase(e, () => {
        s.dispose(), a.dispose(), r();
      }), a = n.onCancellationRequested(() => {
        s.dispose(), a.dispose(), i(Er);
      });
    });
  }
  async notifyDocumentPhase(e, n, r) {
    const s = this.documentPhaseListeners.get(n).slice();
    for (const a of s)
      try {
        await He(r), await a(e, r);
      } catch (o) {
        if (!Ha(o))
          throw o;
      }
  }
  async notifyBuildPhase(e, n, r) {
    if (e.length === 0)
      return;
    const s = this.buildPhaseListeners.get(n).slice();
    for (const a of s)
      await He(r), await a(e, r);
  }
  /**
   * Determine whether the given document should be linked during a build. The default
   * implementation checks the `eagerLinking` property of the build options. If it's set to `true`
   * or `undefined`, the document is included in the linking phase. This also affects the
   * references indexing phase, which depends on eager linking.
   */
  shouldLink(e) {
    return this.getBuildOptions(e).eagerLinking ?? !0;
  }
  /**
   * Determine whether the given document should be validated during a build. The default
   * implementation checks the `validation` property of the build options. If it's set to `true`
   * or a `ValidationOptions` object, the document is included in the validation phase.
   */
  shouldValidate(e) {
    return !!this.getBuildOptions(e).validation;
  }
  /**
   * Run validation checks on the given document and store the resulting diagnostics in the document.
   * If the document already contains diagnostics, the new ones are added to the list.
   */
  async validate(e, n) {
    const r = this.serviceRegistry.getServices(e.uri).validation.DocumentValidator, i = this.getBuildOptions(e), s = typeof i.validation == "object" ? { ...i.validation } : {};
    s.categories = this.findMissingValidationCategories(e, i);
    const a = await r.validateDocument(e, s, n);
    e.diagnostics ? e.diagnostics.push(...a) : e.diagnostics = a;
    const o = this.buildState.get(e.uri.toString());
    o && (o.result ?? (o.result = {}), o.result.validationChecks ? o.result.validationChecks = pe(o.result.validationChecks).concat(s.categories).distinct().toArray() : o.result.validationChecks = [...s.categories]);
  }
  getBuildOptions(e) {
    var n;
    return ((n = this.buildState.get(e.uri.toString())) == null ? void 0 : n.options) ?? {};
  }
}
class Gv {
  constructor(e) {
    this.symbolIndex = /* @__PURE__ */ new Map(), this.symbolByTypeIndex = new ZR(), this.referenceIndex = /* @__PURE__ */ new Map(), this.documents = e.workspace.LangiumDocuments, this.serviceRegistry = e.ServiceRegistry, this.astReflection = e.AstReflection;
  }
  findAllReferences(e, n) {
    const r = Qt(e).uri, i = [];
    return this.referenceIndex.forEach((s) => {
      s.forEach((a) => {
        ct.equals(a.targetUri, r) && a.targetPath === n && i.push(a);
      });
    }), pe(i);
  }
  allElements(e, n) {
    let r = pe(this.symbolIndex.keys());
    return n && (r = r.filter((i) => !n || n.has(i))), r.map((i) => this.getFileDescriptions(i, e)).flat();
  }
  getFileDescriptions(e, n) {
    return n ? this.symbolByTypeIndex.get(e, n, () => (this.symbolIndex.get(e) ?? []).filter((s) => this.astReflection.isSubtype(s.type, n))) : this.symbolIndex.get(e) ?? [];
  }
  remove(e) {
    this.removeContent(e), this.removeReferences(e);
  }
  removeContent(e) {
    const n = e.toString();
    this.symbolIndex.delete(n), this.symbolByTypeIndex.clear(n);
  }
  removeReferences(e) {
    const n = e.toString();
    this.referenceIndex.delete(n);
  }
  async updateContent(e, n = ge.None) {
    const i = await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.collectExportedSymbols(e, n), s = e.uri.toString();
    this.symbolIndex.set(s, i), this.symbolByTypeIndex.clear(s);
  }
  async updateReferences(e, n = ge.None) {
    const i = await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e, n);
    this.referenceIndex.set(e.uri.toString(), i);
  }
  isAffected(e, n) {
    const r = this.referenceIndex.get(e.uri.toString());
    return r ? r.some((i) => !i.local && n.has(i.targetUri.toString())) : !1;
  }
}
class Uv {
  constructor(e) {
    this.initialBuildOptions = {}, this._ready = new Bl(), this.serviceRegistry = e.ServiceRegistry, this.langiumDocuments = e.workspace.LangiumDocuments, this.documentBuilder = e.workspace.DocumentBuilder, this.fileSystemProvider = e.workspace.FileSystemProvider, this.mutex = e.workspace.WorkspaceLock;
  }
  get ready() {
    return this._ready.promise;
  }
  get workspaceFolders() {
    return this.folders;
  }
  initialize(e) {
    this.folders = e.workspaceFolders ?? void 0;
  }
  initialized(e) {
    return this.mutex.write((n) => this.initializeWorkspace(this.folders ?? [], n));
  }
  async initializeWorkspace(e, n = ge.None) {
    const r = await this.performStartup(e);
    await He(n), await this.documentBuilder.build(r, this.initialBuildOptions, n);
  }
  /**
   * Performs the uninterruptable startup sequence of the workspace manager.
   * This methods loads all documents in the workspace and other documents and returns them.
   */
  async performStartup(e) {
    const n = [], r = (a) => {
      n.push(a), this.langiumDocuments.hasDocument(a.uri) || this.langiumDocuments.addDocument(a);
    };
    await this.loadAdditionalDocuments(e, r);
    const i = [];
    await Promise.all(e.map((a) => this.getRootFolder(a)).map(async (a) => this.traverseFolder(a, i)));
    const s = pe(i).distinct((a) => a.toString()).filter((a) => !this.langiumDocuments.hasDocument(a));
    return await this.loadWorkspaceDocuments(s, r), this._ready.resolve(), n;
  }
  async loadWorkspaceDocuments(e, n) {
    await Promise.all(e.map(async (r) => {
      const i = await this.langiumDocuments.getOrCreateDocument(r);
      n(i);
    }));
  }
  /**
   * Load all additional documents that shall be visible in the context of the given workspace
   * folders and add them to the collector. This can be used to include built-in libraries of
   * your language, which can be either loaded from provided files or constructed in memory.
   */
  loadAdditionalDocuments(e, n) {
    return Promise.resolve();
  }
  /**
   * Determine the root folder of the source documents in the given workspace folder.
   * The default implementation returns the URI of the workspace folder, but you can override
   * this to return a subfolder like `src` instead.
   */
  getRootFolder(e) {
    return wt.parse(e.uri);
  }
  /**
   * Traverse the file system folder identified by the given URI and its subfolders. All
   * contained files that match the file extensions are added to the `uris` array.
   */
  async traverseFolder(e, n) {
    try {
      const r = await this.fileSystemProvider.readDirectory(e);
      await Promise.all(r.map(async (i) => {
        this.shouldIncludeEntry(i) && (i.isDirectory ? await this.traverseFolder(i.uri, n) : i.isFile && n.push(i.uri));
      }));
    } catch (r) {
      console.error("Failure to read directory content of " + e.toString(!0), r);
    }
  }
  async searchFolder(e) {
    const n = [];
    return await this.traverseFolder(e, n), n;
  }
  /**
   * Determine whether the given folder entry shall be included while indexing the workspace.
   */
  shouldIncludeEntry(e) {
    const n = ct.basename(e.uri);
    return n.startsWith(".") ? !1 : e.isDirectory ? n !== "node_modules" && n !== "out" : e.isFile ? this.serviceRegistry.hasServices(e.uri) : !1;
  }
}
class jv {
  buildUnexpectedCharactersMessage(e, n, r, i, s) {
    return Bo.buildUnexpectedCharactersMessage(e, n, r, i, s);
  }
  buildUnableToPopLexerModeMessage(e) {
    return Bo.buildUnableToPopLexerModeMessage(e);
  }
}
const zv = { mode: "full" };
class Bv {
  constructor(e) {
    this.errorMessageProvider = e.parser.LexerErrorMessageProvider, this.tokenBuilder = e.parser.TokenBuilder;
    const n = this.tokenBuilder.buildTokens(e.Grammar, {
      caseInsensitive: e.LanguageMetaData.caseInsensitive
    });
    this.tokenTypes = this.toTokenTypeDictionary(n);
    const r = ff(n) ? Object.values(n) : n, i = e.LanguageMetaData.mode === "production";
    this.chevrotainLexer = new et(r, {
      positionTracking: "full",
      skipValidations: i,
      errorMessageProvider: this.errorMessageProvider
    });
  }
  get definition() {
    return this.tokenTypes;
  }
  tokenize(e, n = zv) {
    var i, s;
    const r = this.chevrotainLexer.tokenize(e);
    return {
      tokens: r.tokens,
      errors: r.errors,
      hidden: r.groups.hidden ?? [],
      report: (s = (i = this.tokenBuilder).flushLexingReport) == null ? void 0 : s.call(i, e)
    };
  }
  toTokenTypeDictionary(e) {
    if (ff(e))
      return e;
    const n = yp(e) ? Object.values(e.modes).flat() : e, r = {};
    return n.forEach((i) => r[i.name] = i), r;
  }
}
function qv(t) {
  return Array.isArray(t) && (t.length === 0 || "name" in t[0]);
}
function yp(t) {
  return t && "modes" in t && "defaultMode" in t;
}
function ff(t) {
  return !qv(t) && !yp(t);
}
function Wv(t, e, n) {
  let r, i;
  typeof t == "string" ? (i = e, r = n) : (i = t.range.start, r = e), i || (i = ee.create(0, 0));
  const s = Tp(t), a = Vl(r), o = Hv({
    lines: s,
    position: i,
    options: a
  });
  return Zv({
    index: 0,
    tokens: o,
    position: i
  });
}
function Vv(t, e) {
  const n = Vl(e), r = Tp(t);
  if (r.length === 0)
    return !1;
  const i = r[0], s = r[r.length - 1], a = n.start, o = n.end;
  return !!(a != null && a.exec(i)) && !!(o != null && o.exec(s));
}
function Tp(t) {
  let e = "";
  return typeof t == "string" ? e = t : e = t.text, e.split(Vm);
}
const hf = /\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy, Kv = /\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;
function Hv(t) {
  var i, s, a;
  const e = [];
  let n = t.position.line, r = t.position.character;
  for (let o = 0; o < t.lines.length; o++) {
    const c = o === 0, l = o === t.lines.length - 1;
    let u = t.lines[o], f = 0;
    if (c && t.options.start) {
      const g = (i = t.options.start) == null ? void 0 : i.exec(u);
      g && (f = g.index + g[0].length);
    } else {
      const g = (s = t.options.line) == null ? void 0 : s.exec(u);
      g && (f = g.index + g[0].length);
    }
    if (l) {
      const g = (a = t.options.end) == null ? void 0 : a.exec(u);
      g && (u = u.substring(0, g.index));
    }
    if (u = u.substring(0, Qv(u)), ul(u, f) >= u.length) {
      if (e.length > 0) {
        const g = ee.create(n, r);
        e.push({
          type: "break",
          content: "",
          range: Y.create(g, g)
        });
      }
    } else {
      hf.lastIndex = f;
      const g = hf.exec(u);
      if (g) {
        const A = g[0], N = g[1], $ = ee.create(n, r + f), w = ee.create(n, r + f + A.length);
        e.push({
          type: "tag",
          content: N,
          range: Y.create($, w)
        }), f += A.length, f = ul(u, f);
      }
      if (f < u.length) {
        const A = u.substring(f), N = Array.from(A.matchAll(Kv));
        e.push(...Yv(N, A, n, r + f));
      }
    }
    n++, r = 0;
  }
  return e.length > 0 && e[e.length - 1].type === "break" ? e.slice(0, -1) : e;
}
function Yv(t, e, n, r) {
  const i = [];
  if (t.length === 0) {
    const s = ee.create(n, r), a = ee.create(n, r + e.length);
    i.push({
      type: "text",
      content: e,
      range: Y.create(s, a)
    });
  } else {
    let s = 0;
    for (const o of t) {
      const c = o.index, l = e.substring(s, c);
      l.length > 0 && i.push({
        type: "text",
        content: e.substring(s, c),
        range: Y.create(ee.create(n, s + r), ee.create(n, c + r))
      });
      let u = l.length + 1;
      const f = o[1];
      if (i.push({
        type: "inline-tag",
        content: f,
        range: Y.create(ee.create(n, s + u + r), ee.create(n, s + u + f.length + r))
      }), u += f.length, o.length === 4) {
        u += o[2].length;
        const m = o[3];
        i.push({
          type: "text",
          content: m,
          range: Y.create(ee.create(n, s + u + r), ee.create(n, s + u + m.length + r))
        });
      } else
        i.push({
          type: "text",
          content: "",
          range: Y.create(ee.create(n, s + u + r), ee.create(n, s + u + r))
        });
      s = c + o[0].length;
    }
    const a = e.substring(s);
    a.length > 0 && i.push({
      type: "text",
      content: a,
      range: Y.create(ee.create(n, s + r), ee.create(n, s + r + a.length))
    });
  }
  return i;
}
const Xv = /\S/, Jv = /\s*$/;
function ul(t, e) {
  const n = t.substring(e).match(Xv);
  return n ? e + n.index : t.length;
}
function Qv(t) {
  const e = t.match(Jv);
  if (e && typeof e.index == "number")
    return e.index;
}
function Zv(t) {
  var s, a;
  const e = ee.create(t.position.line, t.position.character);
  if (t.tokens.length === 0)
    return new pf([], Y.create(e, e));
  const n = [];
  for (; t.index < t.tokens.length; ) {
    const o = eE(t, n[n.length - 1]);
    o && n.push(o);
  }
  const r = ((s = n[0]) == null ? void 0 : s.range.start) ?? e, i = ((a = n[n.length - 1]) == null ? void 0 : a.range.end) ?? e;
  return new pf(n, Y.create(r, i));
}
function eE(t, e) {
  const n = t.tokens[t.index];
  if (n.type === "tag")
    return vp(t, !1);
  if (n.type === "text" || n.type === "inline-tag")
    return Rp(t);
  tE(n, e), t.index++;
}
function tE(t, e) {
  if (e) {
    const n = new Ap("", t.range);
    "inlines" in e ? e.inlines.push(n) : e.content.inlines.push(n);
  }
}
function Rp(t) {
  let e = t.tokens[t.index];
  const n = e;
  let r = e;
  const i = [];
  for (; e && e.type !== "break" && e.type !== "tag"; )
    i.push(nE(t)), r = e, e = t.tokens[t.index];
  return new dl(i, Y.create(n.range.start, r.range.end));
}
function nE(t) {
  return t.tokens[t.index].type === "inline-tag" ? vp(t, !0) : Ep(t);
}
function vp(t, e) {
  const n = t.tokens[t.index++], r = n.content.substring(1), i = t.tokens[t.index];
  if ((i == null ? void 0 : i.type) === "text")
    if (e) {
      const s = Ep(t);
      return new So(r, new dl([s], s.range), e, Y.create(n.range.start, s.range.end));
    } else {
      const s = Rp(t);
      return new So(r, s, e, Y.create(n.range.start, s.range.end));
    }
  else {
    const s = n.range;
    return new So(r, new dl([], s), e, s);
  }
}
function Ep(t) {
  const e = t.tokens[t.index++];
  return new Ap(e.content, e.range);
}
function Vl(t) {
  if (!t)
    return Vl({
      start: "/**",
      end: "*/",
      line: "*"
    });
  const { start: e, end: n, line: r } = t;
  return {
    start: Ao(e, !0),
    end: Ao(n, !1),
    line: Ao(r, !0)
  };
}
function Ao(t, e) {
  if (typeof t == "string" || typeof t == "object") {
    const n = typeof t == "string" ? Ga(t) : t.source;
    return e ? new RegExp(`^\\s*${n}`) : new RegExp(`\\s*${n}\\s*$`);
  } else
    return t;
}
class pf {
  constructor(e, n) {
    this.elements = e, this.range = n;
  }
  getTag(e) {
    return this.getAllTags().find((n) => n.name === e);
  }
  getTags(e) {
    return this.getAllTags().filter((n) => n.name === e);
  }
  getAllTags() {
    return this.elements.filter((e) => "name" in e);
  }
  toString() {
    let e = "";
    for (const n of this.elements)
      if (e.length === 0)
        e = n.toString();
      else {
        const r = n.toString();
        e += mf(e) + r;
      }
    return e.trim();
  }
  toMarkdown(e) {
    let n = "";
    for (const r of this.elements)
      if (n.length === 0)
        n = r.toMarkdown(e);
      else {
        const i = r.toMarkdown(e);
        n += mf(n) + i;
      }
    return n.trim();
  }
}
class So {
  constructor(e, n, r, i) {
    this.name = e, this.content = n, this.inline = r, this.range = i;
  }
  toString() {
    let e = `@${this.name}`;
    const n = this.content.toString();
    return this.content.inlines.length === 1 ? e = `${e} ${n}` : this.content.inlines.length > 1 && (e = `${e}
${n}`), this.inline ? `{${e}}` : e;
  }
  toMarkdown(e) {
    var n;
    return ((n = e == null ? void 0 : e.renderTag) == null ? void 0 : n.call(e, this)) ?? this.toMarkdownDefault(e);
  }
  toMarkdownDefault(e) {
    const n = this.content.toMarkdown(e);
    if (this.inline) {
      const s = rE(this.name, n, e ?? {});
      if (typeof s == "string")
        return s;
    }
    let r = "";
    (e == null ? void 0 : e.tag) === "italic" || (e == null ? void 0 : e.tag) === void 0 ? r = "*" : (e == null ? void 0 : e.tag) === "bold" ? r = "**" : (e == null ? void 0 : e.tag) === "bold-italic" && (r = "***");
    let i = `${r}@${this.name}${r}`;
    return this.content.inlines.length === 1 ? i = `${i} — ${n}` : this.content.inlines.length > 1 && (i = `${i}
${n}`), this.inline ? `{${i}}` : i;
  }
}
function rE(t, e, n) {
  var r;
  if (t === "linkplain" || t === "linkcode" || t === "link") {
    const i = e.indexOf(" ");
    let s = e;
    if (i > 0) {
      const o = ul(e, i);
      s = e.substring(o), e = e.substring(0, i);
    }
    return (t === "linkcode" || t === "link" && n.link === "code") && (s = `\`${s}\``), ((r = n.renderLink) == null ? void 0 : r.call(n, e, s)) ?? iE(e, s);
  }
}
function iE(t, e) {
  try {
    return wt.parse(t, !0), `[${e}](${t})`;
  } catch {
    return t;
  }
}
class dl {
  constructor(e, n) {
    this.inlines = e, this.range = n;
  }
  toString() {
    let e = "";
    for (let n = 0; n < this.inlines.length; n++) {
      const r = this.inlines[n], i = this.inlines[n + 1];
      e += r.toString(), i && i.range.start.line > r.range.start.line && (e += `
`);
    }
    return e;
  }
  toMarkdown(e) {
    let n = "";
    for (let r = 0; r < this.inlines.length; r++) {
      const i = this.inlines[r], s = this.inlines[r + 1];
      n += i.toMarkdown(e), s && s.range.start.line > i.range.start.line && (n += `
`);
    }
    return n;
  }
}
class Ap {
  constructor(e, n) {
    this.text = e, this.range = n;
  }
  toString() {
    return this.text;
  }
  toMarkdown() {
    return this.text;
  }
}
function mf(t) {
  return t.endsWith(`
`) ? `
` : `

`;
}
class sE {
  constructor(e) {
    this.indexManager = e.shared.workspace.IndexManager, this.commentProvider = e.documentation.CommentProvider;
  }
  getDocumentation(e) {
    const n = this.commentProvider.getComment(e);
    if (n && Vv(n))
      return Wv(n).toMarkdown({
        renderLink: (i, s) => this.documentationLinkRenderer(e, i, s),
        renderTag: (i) => this.documentationTagRenderer(e, i)
      });
  }
  documentationLinkRenderer(e, n, r) {
    const i = this.findNameInLocalSymbols(e, n) ?? this.findNameInGlobalScope(e, n);
    if (i && i.nameSegment) {
      const s = i.nameSegment.range.start.line + 1, a = i.nameSegment.range.start.character + 1, o = i.documentUri.with({ fragment: `L${s},${a}` });
      return `[${r}](${o.toString()})`;
    } else
      return;
  }
  documentationTagRenderer(e, n) {
  }
  findNameInLocalSymbols(e, n) {
    const i = Qt(e).localSymbols;
    if (!i)
      return;
    let s = e;
    do {
      const o = i.getStream(s).find((c) => c.name === n);
      if (o)
        return o;
      s = s.$container;
    } while (s);
  }
  findNameInGlobalScope(e, n) {
    return this.indexManager.allElements().find((i) => i.name === n);
  }
}
class aE {
  constructor(e) {
    this.grammarConfig = () => e.parser.GrammarConfig;
  }
  getComment(e) {
    var n;
    return nv(e) ? e.$comment : (n = jm(e.$cstNode, this.grammarConfig().multilineCommentRules)) == null ? void 0 : n.text;
  }
}
class oE {
  constructor(e) {
    this.syncParser = e.parser.LangiumParser;
  }
  parse(e, n) {
    return Promise.resolve(this.syncParser.parse(e));
  }
}
class cE {
  constructor() {
    this.previousTokenSource = new zl(), this.writeQueue = [], this.readQueue = [], this.done = !0;
  }
  write(e) {
    this.cancelWrite();
    const n = jR();
    return this.previousTokenSource = n, this.enqueue(this.writeQueue, e, n.token);
  }
  read(e) {
    return this.enqueue(this.readQueue, e);
  }
  enqueue(e, n, r = ge.None) {
    const i = new Bl(), s = {
      action: n,
      deferred: i,
      cancellationToken: r
    };
    return e.push(s), this.performNextOperation(), i.promise;
  }
  async performNextOperation() {
    if (!this.done)
      return;
    const e = [];
    if (this.writeQueue.length > 0)
      e.push(this.writeQueue.shift());
    else if (this.readQueue.length > 0)
      e.push(...this.readQueue.splice(0, this.readQueue.length));
    else
      return;
    this.done = !1, await Promise.all(e.map(async ({ action: n, deferred: r, cancellationToken: i }) => {
      try {
        const s = await Promise.resolve().then(() => n(i));
        r.resolve(s);
      } catch (s) {
        Ha(s) ? r.resolve(void 0) : r.reject(s);
      }
    })), this.done = !0, this.performNextOperation();
  }
  cancelWrite() {
    this.previousTokenSource.cancel();
  }
}
class lE {
  constructor(e) {
    this.grammarElementIdMap = new Uu(), this.tokenTypeIdMap = new Uu(), this.grammar = e.Grammar, this.lexer = e.parser.Lexer, this.linker = e.references.Linker;
  }
  dehydrate(e) {
    return {
      lexerErrors: e.lexerErrors,
      lexerReport: e.lexerReport ? this.dehydrateLexerReport(e.lexerReport) : void 0,
      // We need to create shallow copies of the errors
      // The original errors inherit from the `Error` class, which is not transferable across worker threads
      parserErrors: e.parserErrors.map((n) => ({ ...n, message: n.message })),
      value: this.dehydrateAstNode(e.value, this.createDehyrationContext(e.value))
    };
  }
  dehydrateLexerReport(e) {
    return e;
  }
  createDehyrationContext(e) {
    const n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
    for (const i of Zt(e))
      n.set(i, {});
    if (e.$cstNode)
      for (const i of Fo(e.$cstNode))
        r.set(i, {});
    return {
      astNodes: n,
      cstNodes: r
    };
  }
  dehydrateAstNode(e, n) {
    const r = n.astNodes.get(e);
    r.$type = e.$type, r.$containerIndex = e.$containerIndex, r.$containerProperty = e.$containerProperty, e.$cstNode !== void 0 && (r.$cstNode = this.dehydrateCstNode(e.$cstNode, n));
    for (const [i, s] of Object.entries(e))
      if (!i.startsWith("$"))
        if (Array.isArray(s)) {
          const a = [];
          r[i] = a;
          for (const o of s)
            We(o) ? a.push(this.dehydrateAstNode(o, n)) : Ct(o) ? a.push(this.dehydrateReference(o, n)) : a.push(o);
        } else We(s) ? r[i] = this.dehydrateAstNode(s, n) : Ct(s) ? r[i] = this.dehydrateReference(s, n) : s !== void 0 && (r[i] = s);
    return r;
  }
  dehydrateReference(e, n) {
    const r = {};
    return r.$refText = e.$refText, e.$refNode && (r.$refNode = n.cstNodes.get(e.$refNode)), r;
  }
  dehydrateCstNode(e, n) {
    const r = n.cstNodes.get(e);
    return Mf(e) ? r.fullText = e.fullText : r.grammarSource = this.getGrammarElementId(e.grammarSource), r.hidden = e.hidden, r.astNode = n.astNodes.get(e.astNode), Bi(e) ? r.content = e.content.map((i) => this.dehydrateCstNode(i, n)) : Df(e) && (r.tokenType = e.tokenType.name, r.offset = e.offset, r.length = e.length, r.startLine = e.range.start.line, r.startColumn = e.range.start.character, r.endLine = e.range.end.line, r.endColumn = e.range.end.character), r;
  }
  hydrate(e) {
    const n = e.value, r = this.createHydrationContext(n);
    return "$cstNode" in n && this.hydrateCstNode(n.$cstNode, r), {
      lexerErrors: e.lexerErrors,
      lexerReport: e.lexerReport,
      parserErrors: e.parserErrors,
      value: this.hydrateAstNode(n, r)
    };
  }
  createHydrationContext(e) {
    const n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
    for (const s of Zt(e))
      n.set(s, {});
    let i;
    if (e.$cstNode)
      for (const s of Fo(e.$cstNode)) {
        let a;
        "fullText" in s ? (a = new Wh(s.fullText), i = a) : "content" in s ? a = new Gl() : "tokenType" in s && (a = this.hydrateCstLeafNode(s)), a && (r.set(s, a), a.root = i);
      }
    return {
      astNodes: n,
      cstNodes: r
    };
  }
  hydrateAstNode(e, n) {
    const r = n.astNodes.get(e);
    r.$type = e.$type, r.$containerIndex = e.$containerIndex, r.$containerProperty = e.$containerProperty, e.$cstNode && (r.$cstNode = n.cstNodes.get(e.$cstNode));
    for (const [i, s] of Object.entries(e))
      if (!i.startsWith("$"))
        if (Array.isArray(s)) {
          const a = [];
          r[i] = a;
          for (const o of s)
            We(o) ? a.push(this.setParent(this.hydrateAstNode(o, n), r)) : Ct(o) ? a.push(this.hydrateReference(o, r, i, n)) : a.push(o);
        } else We(s) ? r[i] = this.setParent(this.hydrateAstNode(s, n), r) : Ct(s) ? r[i] = this.hydrateReference(s, r, i, n) : s !== void 0 && (r[i] = s);
    return r;
  }
  setParent(e, n) {
    return e.$container = n, e;
  }
  hydrateReference(e, n, r, i) {
    return this.linker.buildReference(n, r, i.cstNodes.get(e.$refNode), e.$refText);
  }
  hydrateCstNode(e, n, r = 0) {
    const i = n.cstNodes.get(e);
    if (typeof e.grammarSource == "number" && (i.grammarSource = this.getGrammarElement(e.grammarSource)), i.astNode = n.astNodes.get(e.astNode), Bi(i))
      for (const s of e.content) {
        const a = this.hydrateCstNode(s, n, r++);
        i.content.push(a);
      }
    return i;
  }
  hydrateCstLeafNode(e) {
    const n = this.getTokenType(e.tokenType), r = e.offset, i = e.length, s = e.startLine, a = e.startColumn, o = e.endLine, c = e.endColumn, l = e.hidden;
    return new Jc(r, i, {
      start: {
        line: s,
        character: a
      },
      end: {
        line: o,
        character: c
      }
    }, n, l);
  }
  getTokenType(e) {
    return this.lexer.definition[e];
  }
  getGrammarElementId(e) {
    if (e)
      return this.grammarElementIdMap.size === 0 && this.createGrammarElementIdMap(), this.grammarElementIdMap.get(e);
  }
  getGrammarElement(e) {
    return this.grammarElementIdMap.size === 0 && this.createGrammarElementIdMap(), this.grammarElementIdMap.getKey(e);
  }
  createGrammarElementIdMap() {
    let e = 0;
    for (const n of Zt(this.grammar))
      Tm(n) && this.grammarElementIdMap.set(n, e++);
  }
}
function kn(t) {
  return {
    documentation: {
      CommentProvider: (e) => new aE(e),
      DocumentationProvider: (e) => new sE(e)
    },
    parser: {
      AsyncParser: (e) => new oE(e),
      GrammarConfig: (e) => pg(e),
      LangiumParser: (e) => NR(e),
      CompletionParser: (e) => kR(e),
      ValueConverter: () => new ep(),
      TokenBuilder: () => new Zh(),
      Lexer: (e) => new Bv(e),
      ParserErrorMessageProvider: () => new Hh(),
      LexerErrorMessageProvider: () => new jv()
    },
    workspace: {
      AstNodeLocator: () => new fv(),
      AstNodeDescriptionProvider: (e) => new uv(e),
      ReferenceDescriptionProvider: (e) => new dv(e)
    },
    references: {
      Linker: (e) => new VR(e),
      NameProvider: () => new HR(),
      ScopeProvider: (e) => new tv(e),
      ScopeComputation: (e) => new XR(e),
      References: (e) => new YR(e)
    },
    serializer: {
      Hydrator: (e) => new lE(e),
      JsonSerializer: (e) => new rv(e)
    },
    validation: {
      DocumentValidator: (e) => new ov(e),
      ValidationRegistry: (e) => new sv(e)
    },
    shared: () => t.shared
  };
}
function Nn(t) {
  return {
    ServiceRegistry: (e) => new iv(e),
    workspace: {
      LangiumDocuments: (e) => new WR(e),
      LangiumDocumentFactory: (e) => new qR(e),
      DocumentBuilder: (e) => new Fv(e),
      IndexManager: (e) => new Gv(e),
      WorkspaceManager: (e) => new Uv(e),
      FileSystemProvider: (e) => t.fileSystemProvider(e),
      WorkspaceLock: () => new cE(),
      ConfigurationProvider: (e) => new hv(e)
    },
    profilers: {}
  };
}
var gf;
(function(t) {
  t.merge = (e, n) => ns(ns({}, e), n);
})(gf || (gf = {}));
function Ve(t, e, n, r, i, s, a, o, c) {
  const l = [t, e, n, r, i, s, a, o, c].reduce(ns, {});
  return Sp(l);
}
const uE = Symbol("isProxy");
function Sp(t, e) {
  const n = new Proxy({}, {
    deleteProperty: () => !1,
    set: () => {
      throw new Error("Cannot set property on injected service container");
    },
    get: (r, i) => i === uE ? !0 : Tf(r, i, t, e || n),
    getOwnPropertyDescriptor: (r, i) => (Tf(r, i, t, e || n), Object.getOwnPropertyDescriptor(r, i)),
    // used by for..in
    has: (r, i) => i in t,
    // used by ..in..
    ownKeys: () => [...Object.getOwnPropertyNames(t)]
    // used by for..in
  });
  return n;
}
const yf = Symbol();
function Tf(t, e, n, r) {
  if (e in t) {
    if (t[e] instanceof Error)
      throw new Error("Construction failure. Please make sure that your dependencies are constructable. Cause: " + t[e]);
    if (t[e] === yf)
      throw new Error('Cycle detected. Please make "' + String(e) + '" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');
    return t[e];
  } else if (e in n) {
    const i = n[e];
    t[e] = yf;
    try {
      t[e] = typeof i == "function" ? i(r) : Sp(i, r);
    } catch (s) {
      throw t[e] = s instanceof Error ? s : void 0, s;
    }
    return t[e];
  } else
    return;
}
function ns(t, e) {
  if (e) {
    for (const [n, r] of Object.entries(e))
      if (r != null)
        if (typeof r == "object") {
          const i = t[n];
          typeof i == "object" && i !== null ? t[n] = ns(i, r) : t[n] = ns({}, r);
        } else
          t[n] = r;
  }
  return t;
}
class dE {
  stat(e) {
    throw new Error("No file system is available.");
  }
  statSync(e) {
    throw new Error("No file system is available.");
  }
  async exists() {
    return !1;
  }
  existsSync() {
    return !1;
  }
  readBinary() {
    throw new Error("No file system is available.");
  }
  readBinarySync() {
    throw new Error("No file system is available.");
  }
  readFile() {
    throw new Error("No file system is available.");
  }
  readFileSync() {
    throw new Error("No file system is available.");
  }
  async readDirectory() {
    return [];
  }
  readDirectorySync() {
    return [];
  }
}
const wn = {
  fileSystemProvider: () => new dE()
}, fE = {
  Grammar: () => {
  },
  LanguageMetaData: () => ({
    caseInsensitive: !1,
    fileExtensions: [".langium"],
    languageId: "langium"
  })
}, hE = {
  AstReflection: () => new Bf()
};
function pE() {
  const t = Ve(Nn(wn), hE), e = Ve(kn({ shared: t }), fE);
  return t.ServiceRegistry.register(e), e;
}
function Jn(t) {
  const e = pE(), n = e.serializer.JsonSerializer.deserialize(t);
  return e.shared.workspace.LangiumDocumentFactory.fromModel(n, wt.parse(`memory:/${n.name ?? "grammar"}.langium`)), n;
}
var mE = Object.defineProperty, I = (t, e) => mE(t, "name", { value: e, configurable: !0 }), fl;
((t) => {
  t.Terminals = {
    ARROW_DIRECTION: /L|R|T|B/,
    ARROW_GROUP: /\{group\}/,
    ARROW_INTO: /<|>/,
    ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
    ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
    TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
    STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
    ID: /[\w]([-\w]*\w)?/,
    NEWLINE: /\r?\n/,
    WHITESPACE: /[\t ]+/,
    YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
    DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
    SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
    ARCH_ICON: /\([\w-:]+\)/,
    ARCH_TITLE: /\[(?:"([^"\\]|\\.)*"|'([^'\\]|\\.)*'|[\w ]+)\]/
  };
})(fl || (fl = {}));
var hl;
((t) => {
  t.Terminals = {
    ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
    ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
    TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
    INT: /0|[1-9][0-9]*(?!\.)/,
    STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
    NEWLINE: /\r?\n/,
    WHITESPACE: /[\t ]+/,
    YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
    DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
    SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
    REFERENCE: /\w([-\./\w]*[-\w])?/
  };
})(hl || (hl = {}));
var pl;
((t) => {
  t.Terminals = {
    ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
    ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
    TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
    NEWLINE: /\r?\n/,
    WHITESPACE: /[\t ]+/,
    YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
    DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
    SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
  };
})(pl || (pl = {}));
var ml;
((t) => {
  t.Terminals = {
    ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
    ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
    TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
    INT: /0|[1-9][0-9]*(?!\.)/,
    STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
    NEWLINE: /\r?\n/,
    WHITESPACE: /[\t ]+/,
    YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
    DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
    SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
  };
})(ml || (ml = {}));
var gl;
((t) => {
  t.Terminals = {
    NUMBER_PIE: /(?:-?[0-9]+\.[0-9]+(?!\.))|(?:-?(0|[1-9][0-9]*)(?!\.))/,
    ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
    ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
    TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
    STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
    NEWLINE: /\r?\n/,
    WHITESPACE: /[\t ]+/,
    YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
    DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
    SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
  };
})(gl || (gl = {}));
var yl;
((t) => {
  t.Terminals = {
    GRATICULE: /circle|polygon/,
    BOOLEAN: /true|false/,
    ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
    ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
    TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
    NUMBER: /(?:[0-9]+\.[0-9]+(?!\.))|(?:0|[1-9][0-9]*(?!\.))/,
    STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
    ID: /[\w]([-\w]*\w)?/,
    NEWLINE: /\r?\n/,
    WHITESPACE: /[\t ]+/,
    YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
    DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
    SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
  };
})(yl || (yl = {}));
var Tl;
((t) => {
  t.Terminals = {
    ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
    ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
    TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
    TREEMAP_KEYWORD: /treemap-beta|treemap/,
    CLASS_DEF: /classDef\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\s+([^;\r\n]*))?(?:;)?/,
    STYLE_SEPARATOR: /:::/,
    SEPARATOR: /:/,
    COMMA: /,/,
    INDENTATION: /[ \t]{1,}/,
    WS: /[ \t]+/,
    ML_COMMENT: /\%\%[^\n]*/,
    NL: /\r?\n/,
    ID2: /[a-zA-Z_][a-zA-Z0-9_]*/,
    NUMBER2: /[0-9_\.\,]+/,
    STRING2: /"[^"]*"|'[^']*'/
  };
})(Tl || (Tl = {}));
({
  ...fl.Terminals,
  ...hl.Terminals,
  ...pl.Terminals,
  ...ml.Terminals,
  ...gl.Terminals,
  ...yl.Terminals,
  ...Tl.Terminals
});
var Kt = {
  $type: "Architecture",
  accDescr: "accDescr",
  accTitle: "accTitle",
  edges: "edges",
  groups: "groups",
  junctions: "junctions",
  services: "services",
  title: "title"
};
function gE(t) {
  return _t.isInstance(t, Kt.$type);
}
I(gE, "isArchitecture");
var Fs = {
  $type: "Axis",
  label: "label",
  name: "name"
}, ta = {
  $type: "Branch",
  name: "name",
  order: "order"
};
function yE(t) {
  return _t.isInstance(t, ta.$type);
}
I(yE, "isBranch");
var Rf = {
  $type: "Checkout",
  branch: "branch"
}, Gs = {
  $type: "CherryPicking",
  id: "id",
  parent: "parent",
  tags: "tags"
}, Co = {
  $type: "ClassDefStatement",
  className: "className",
  styleText: "styleText"
}, mr = {
  $type: "Commit",
  id: "id",
  message: "message",
  tags: "tags",
  type: "type"
};
function TE(t) {
  return _t.isInstance(t, mr.$type);
}
I(TE, "isCommit");
var Us = {
  $type: "Curve",
  entries: "entries",
  label: "label",
  name: "name"
}, ir = {
  $type: "Direction",
  accDescr: "accDescr",
  accTitle: "accTitle",
  dir: "dir",
  statements: "statements",
  title: "title"
}, Pt = {
  $type: "Edge",
  lhsDir: "lhsDir",
  lhsGroup: "lhsGroup",
  lhsId: "lhsId",
  lhsInto: "lhsInto",
  rhsDir: "rhsDir",
  rhsGroup: "rhsGroup",
  rhsId: "rhsId",
  rhsInto: "rhsInto",
  title: "title"
}, ko = {
  $type: "Entry",
  axis: "axis",
  value: "value"
}, Mn = {
  $type: "GitGraph",
  accDescr: "accDescr",
  accTitle: "accTitle",
  statements: "statements",
  title: "title"
};
function RE(t) {
  return _t.isInstance(t, Mn.$type);
}
I(RE, "isGitGraph");
var Ii = {
  $type: "Group",
  icon: "icon",
  id: "id",
  in: "in",
  title: "title"
}, Ui = {
  $type: "Info",
  accDescr: "accDescr",
  accTitle: "accTitle",
  title: "title"
};
function vE(t) {
  return _t.isInstance(t, Ui.$type);
}
I(vE, "isInfo");
var _i = {
  $type: "Item",
  classSelector: "classSelector",
  name: "name"
}, No = {
  $type: "Junction",
  id: "id",
  in: "in"
}, js = {
  $type: "Leaf",
  classSelector: "classSelector",
  name: "name",
  value: "value"
}, gr = {
  $type: "Merge",
  branch: "branch",
  id: "id",
  tags: "tags",
  type: "type"
};
function EE(t) {
  return _t.isInstance(t, gr.$type);
}
I(EE, "isMerge");
var wo = {
  $type: "Option",
  name: "name",
  value: "value"
}, yr = {
  $type: "Packet",
  accDescr: "accDescr",
  accTitle: "accTitle",
  blocks: "blocks",
  title: "title"
};
function AE(t) {
  return _t.isInstance(t, yr.$type);
}
I(AE, "isPacket");
var Tr = {
  $type: "PacketBlock",
  bits: "bits",
  end: "end",
  label: "label",
  start: "start"
};
function SE(t) {
  return _t.isInstance(t, Tr.$type);
}
I(SE, "isPacketBlock");
var Fn = {
  $type: "Pie",
  accDescr: "accDescr",
  accTitle: "accTitle",
  sections: "sections",
  showData: "showData",
  title: "title"
};
function CE(t) {
  return _t.isInstance(t, Fn.$type);
}
I(CE, "isPie");
var na = {
  $type: "PieSection",
  label: "label",
  value: "value"
};
function kE(t) {
  return _t.isInstance(t, na.$type);
}
I(kE, "isPieSection");
var Pn = {
  $type: "Radar",
  accDescr: "accDescr",
  accTitle: "accTitle",
  axes: "axes",
  curves: "curves",
  options: "options",
  title: "title"
}, bo = {
  $type: "Section",
  classSelector: "classSelector",
  name: "name"
}, sr = {
  $type: "Service",
  icon: "icon",
  iconText: "iconText",
  id: "id",
  in: "in",
  title: "title"
}, ar = {
  $type: "Statement"
}, Rr = {
  $type: "Treemap",
  accDescr: "accDescr",
  accTitle: "accTitle",
  title: "title",
  TreemapRows: "TreemapRows"
};
function NE(t) {
  return _t.isInstance(t, Rr.$type);
}
I(NE, "isTreemap");
var Io = {
  $type: "TreemapRow",
  indent: "indent",
  item: "item"
}, Sr, Cp = (Sr = class extends xf {
  constructor() {
    super(...arguments), this.types = {
      Architecture: {
        name: Kt.$type,
        properties: {
          accDescr: {
            name: Kt.accDescr
          },
          accTitle: {
            name: Kt.accTitle
          },
          edges: {
            name: Kt.edges,
            defaultValue: []
          },
          groups: {
            name: Kt.groups,
            defaultValue: []
          },
          junctions: {
            name: Kt.junctions,
            defaultValue: []
          },
          services: {
            name: Kt.services,
            defaultValue: []
          },
          title: {
            name: Kt.title
          }
        },
        superTypes: []
      },
      Axis: {
        name: Fs.$type,
        properties: {
          label: {
            name: Fs.label
          },
          name: {
            name: Fs.name
          }
        },
        superTypes: []
      },
      Branch: {
        name: ta.$type,
        properties: {
          name: {
            name: ta.name
          },
          order: {
            name: ta.order
          }
        },
        superTypes: [ar.$type]
      },
      Checkout: {
        name: Rf.$type,
        properties: {
          branch: {
            name: Rf.branch
          }
        },
        superTypes: [ar.$type]
      },
      CherryPicking: {
        name: Gs.$type,
        properties: {
          id: {
            name: Gs.id
          },
          parent: {
            name: Gs.parent
          },
          tags: {
            name: Gs.tags,
            defaultValue: []
          }
        },
        superTypes: [ar.$type]
      },
      ClassDefStatement: {
        name: Co.$type,
        properties: {
          className: {
            name: Co.className
          },
          styleText: {
            name: Co.styleText
          }
        },
        superTypes: []
      },
      Commit: {
        name: mr.$type,
        properties: {
          id: {
            name: mr.id
          },
          message: {
            name: mr.message
          },
          tags: {
            name: mr.tags,
            defaultValue: []
          },
          type: {
            name: mr.type
          }
        },
        superTypes: [ar.$type]
      },
      Curve: {
        name: Us.$type,
        properties: {
          entries: {
            name: Us.entries,
            defaultValue: []
          },
          label: {
            name: Us.label
          },
          name: {
            name: Us.name
          }
        },
        superTypes: []
      },
      Direction: {
        name: ir.$type,
        properties: {
          accDescr: {
            name: ir.accDescr
          },
          accTitle: {
            name: ir.accTitle
          },
          dir: {
            name: ir.dir
          },
          statements: {
            name: ir.statements,
            defaultValue: []
          },
          title: {
            name: ir.title
          }
        },
        superTypes: [Mn.$type]
      },
      Edge: {
        name: Pt.$type,
        properties: {
          lhsDir: {
            name: Pt.lhsDir
          },
          lhsGroup: {
            name: Pt.lhsGroup,
            defaultValue: !1
          },
          lhsId: {
            name: Pt.lhsId
          },
          lhsInto: {
            name: Pt.lhsInto,
            defaultValue: !1
          },
          rhsDir: {
            name: Pt.rhsDir
          },
          rhsGroup: {
            name: Pt.rhsGroup,
            defaultValue: !1
          },
          rhsId: {
            name: Pt.rhsId
          },
          rhsInto: {
            name: Pt.rhsInto,
            defaultValue: !1
          },
          title: {
            name: Pt.title
          }
        },
        superTypes: []
      },
      Entry: {
        name: ko.$type,
        properties: {
          axis: {
            name: ko.axis,
            referenceType: Fs.$type
          },
          value: {
            name: ko.value
          }
        },
        superTypes: []
      },
      GitGraph: {
        name: Mn.$type,
        properties: {
          accDescr: {
            name: Mn.accDescr
          },
          accTitle: {
            name: Mn.accTitle
          },
          statements: {
            name: Mn.statements,
            defaultValue: []
          },
          title: {
            name: Mn.title
          }
        },
        superTypes: []
      },
      Group: {
        name: Ii.$type,
        properties: {
          icon: {
            name: Ii.icon
          },
          id: {
            name: Ii.id
          },
          in: {
            name: Ii.in
          },
          title: {
            name: Ii.title
          }
        },
        superTypes: []
      },
      Info: {
        name: Ui.$type,
        properties: {
          accDescr: {
            name: Ui.accDescr
          },
          accTitle: {
            name: Ui.accTitle
          },
          title: {
            name: Ui.title
          }
        },
        superTypes: []
      },
      Item: {
        name: _i.$type,
        properties: {
          classSelector: {
            name: _i.classSelector
          },
          name: {
            name: _i.name
          }
        },
        superTypes: []
      },
      Junction: {
        name: No.$type,
        properties: {
          id: {
            name: No.id
          },
          in: {
            name: No.in
          }
        },
        superTypes: []
      },
      Leaf: {
        name: js.$type,
        properties: {
          classSelector: {
            name: js.classSelector
          },
          name: {
            name: js.name
          },
          value: {
            name: js.value
          }
        },
        superTypes: [_i.$type]
      },
      Merge: {
        name: gr.$type,
        properties: {
          branch: {
            name: gr.branch
          },
          id: {
            name: gr.id
          },
          tags: {
            name: gr.tags,
            defaultValue: []
          },
          type: {
            name: gr.type
          }
        },
        superTypes: [ar.$type]
      },
      Option: {
        name: wo.$type,
        properties: {
          name: {
            name: wo.name
          },
          value: {
            name: wo.value,
            defaultValue: !1
          }
        },
        superTypes: []
      },
      Packet: {
        name: yr.$type,
        properties: {
          accDescr: {
            name: yr.accDescr
          },
          accTitle: {
            name: yr.accTitle
          },
          blocks: {
            name: yr.blocks,
            defaultValue: []
          },
          title: {
            name: yr.title
          }
        },
        superTypes: []
      },
      PacketBlock: {
        name: Tr.$type,
        properties: {
          bits: {
            name: Tr.bits
          },
          end: {
            name: Tr.end
          },
          label: {
            name: Tr.label
          },
          start: {
            name: Tr.start
          }
        },
        superTypes: []
      },
      Pie: {
        name: Fn.$type,
        properties: {
          accDescr: {
            name: Fn.accDescr
          },
          accTitle: {
            name: Fn.accTitle
          },
          sections: {
            name: Fn.sections,
            defaultValue: []
          },
          showData: {
            name: Fn.showData,
            defaultValue: !1
          },
          title: {
            name: Fn.title
          }
        },
        superTypes: []
      },
      PieSection: {
        name: na.$type,
        properties: {
          label: {
            name: na.label
          },
          value: {
            name: na.value
          }
        },
        superTypes: []
      },
      Radar: {
        name: Pn.$type,
        properties: {
          accDescr: {
            name: Pn.accDescr
          },
          accTitle: {
            name: Pn.accTitle
          },
          axes: {
            name: Pn.axes,
            defaultValue: []
          },
          curves: {
            name: Pn.curves,
            defaultValue: []
          },
          options: {
            name: Pn.options,
            defaultValue: []
          },
          title: {
            name: Pn.title
          }
        },
        superTypes: []
      },
      Section: {
        name: bo.$type,
        properties: {
          classSelector: {
            name: bo.classSelector
          },
          name: {
            name: bo.name
          }
        },
        superTypes: [_i.$type]
      },
      Service: {
        name: sr.$type,
        properties: {
          icon: {
            name: sr.icon
          },
          iconText: {
            name: sr.iconText
          },
          id: {
            name: sr.id
          },
          in: {
            name: sr.in
          },
          title: {
            name: sr.title
          }
        },
        superTypes: []
      },
      Statement: {
        name: ar.$type,
        properties: {},
        superTypes: []
      },
      Treemap: {
        name: Rr.$type,
        properties: {
          accDescr: {
            name: Rr.accDescr
          },
          accTitle: {
            name: Rr.accTitle
          },
          title: {
            name: Rr.title
          },
          TreemapRows: {
            name: Rr.TreemapRows,
            defaultValue: []
          }
        },
        superTypes: []
      },
      TreemapRow: {
        name: Io.$type,
        properties: {
          indent: {
            name: Io.indent
          },
          item: {
            name: Io.item
          }
        },
        superTypes: []
      }
    };
  }
}, I(Sr, "MermaidAstReflection"), Sr), _t = new Cp(), vf, wE = /* @__PURE__ */ I(() => vf ?? (vf = Jn(`{"$type":"Grammar","isDeclared":true,"name":"ArchitectureGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@18"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[(?:\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'|[\\\\w ]+)\\\\]/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)), "ArchitectureGrammarGrammar"), Ef, bE = /* @__PURE__ */ I(() => Ef ?? (Ef = Jn(`{"$type":"Grammar","isDeclared":true,"name":"GitGraphGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)), "GitGraphGrammarGrammar"), Af, IE = /* @__PURE__ */ I(() => Af ?? (Af = Jn(`{"$type":"Grammar","isDeclared":true,"name":"InfoGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)), "InfoGrammarGrammar"), Sf, _E = /* @__PURE__ */ I(() => Sf ?? (Sf = Jn(`{"$type":"Grammar","isDeclared":true,"name":"PacketGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"packet"},{"$type":"Keyword","value":"packet-beta"}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)), "PacketGrammarGrammar"), Cf, $E = /* @__PURE__ */ I(() => Cf ?? (Cf = Jn(`{"$type":"Grammar","isDeclared":true,"name":"PieGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"FLOAT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?(0|[1-9][0-9]*)(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@2"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@3"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@11"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@12"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)), "PieGrammarGrammar"), kf, PE = /* @__PURE__ */ I(() => kf ?? (kf = Jn(`{"$type":"Grammar","isDeclared":true,"name":"RadarGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}},"isMulti":false}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"types":[]}`)), "RadarGrammarGrammar"), Nf, LE = /* @__PURE__ */ I(() => Nf ?? (Nf = Jn(`{"$type":"Grammar","isDeclared":true,"name":"TreemapGrammar","rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"Treemap","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"TreemapRows","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"TREEMAP_KEYWORD","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap-beta"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"CLASS_DEF","definition":{"$type":"RegexToken","regex":"/classDef\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\s+([^;\\\\r\\\\n]*))?(?:;)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STYLE_SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":::"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"COMMA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":","},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"TreemapRow","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"item","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"ClassDef","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Item","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Section","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Leaf","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ID2","definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9_]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER2","definition":{"$type":"RegexToken","regex":"/[0-9_\\\\.\\\\,]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"MyNumber","dataType":"number","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"Item","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"classSelector","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Section","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[]},{"$type":"Interface","name":"Leaf","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}]},{"$type":"Interface","name":"ClassDefStatement","attributes":[{"$type":"TypeAttribute","name":"className","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"styleText","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"Treemap","attributes":[{"$type":"TypeAttribute","name":"TreemapRows","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@15"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * Treemap grammar for Langium\\n * Converted from mindmap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treemap declaration.\\n */"}`)), "TreemapGrammarGrammar"), OE = {
  languageId: "architecture",
  fileExtensions: [".mmd", ".mermaid"],
  caseInsensitive: !1,
  mode: "production"
}, xE = {
  languageId: "gitGraph",
  fileExtensions: [".mmd", ".mermaid"],
  caseInsensitive: !1,
  mode: "production"
}, DE = {
  languageId: "info",
  fileExtensions: [".mmd", ".mermaid"],
  caseInsensitive: !1,
  mode: "production"
}, ME = {
  languageId: "packet",
  fileExtensions: [".mmd", ".mermaid"],
  caseInsensitive: !1,
  mode: "production"
}, FE = {
  languageId: "pie",
  fileExtensions: [".mmd", ".mermaid"],
  caseInsensitive: !1,
  mode: "production"
}, GE = {
  languageId: "radar",
  fileExtensions: [".mmd", ".mermaid"],
  caseInsensitive: !1,
  mode: "production"
}, UE = {
  languageId: "treemap",
  fileExtensions: [".mmd", ".mermaid"],
  caseInsensitive: !1,
  mode: "production"
}, Qn = {
  AstReflection: /* @__PURE__ */ I(() => new Cp(), "AstReflection")
}, jE = {
  Grammar: /* @__PURE__ */ I(() => wE(), "Grammar"),
  LanguageMetaData: /* @__PURE__ */ I(() => OE, "LanguageMetaData"),
  parser: {}
}, zE = {
  Grammar: /* @__PURE__ */ I(() => bE(), "Grammar"),
  LanguageMetaData: /* @__PURE__ */ I(() => xE, "LanguageMetaData"),
  parser: {}
}, BE = {
  Grammar: /* @__PURE__ */ I(() => IE(), "Grammar"),
  LanguageMetaData: /* @__PURE__ */ I(() => DE, "LanguageMetaData"),
  parser: {}
}, qE = {
  Grammar: /* @__PURE__ */ I(() => _E(), "Grammar"),
  LanguageMetaData: /* @__PURE__ */ I(() => ME, "LanguageMetaData"),
  parser: {}
}, WE = {
  Grammar: /* @__PURE__ */ I(() => $E(), "Grammar"),
  LanguageMetaData: /* @__PURE__ */ I(() => FE, "LanguageMetaData"),
  parser: {}
}, VE = {
  Grammar: /* @__PURE__ */ I(() => PE(), "Grammar"),
  LanguageMetaData: /* @__PURE__ */ I(() => GE, "LanguageMetaData"),
  parser: {}
}, KE = {
  Grammar: /* @__PURE__ */ I(() => LE(), "Grammar"),
  LanguageMetaData: /* @__PURE__ */ I(() => UE, "LanguageMetaData"),
  parser: {}
}, HE = /accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/, YE = /accTitle[\t ]*:([^\n\r]*)/, XE = /title([\t ][^\n\r]*|)/, JE = {
  ACC_DESCR: HE,
  ACC_TITLE: YE,
  TITLE: XE
}, Cr, so = (Cr = class extends ep {
  runConverter(e, n, r) {
    let i = this.runCommonConverter(e, n, r);
    return i === void 0 && (i = this.runCustomConverter(e, n, r)), i === void 0 ? super.runConverter(e, n, r) : i;
  }
  runCommonConverter(e, n, r) {
    const i = JE[e.name];
    if (i === void 0)
      return;
    const s = i.exec(n);
    if (s !== null) {
      if (s[1] !== void 0)
        return s[1].trim().replace(/[\t ]{2,}/gm, " ");
      if (s[2] !== void 0)
        return s[2].replace(/^\s*/gm, "").replace(/\s+$/gm, "").replace(/[\t ]{2,}/gm, " ").replace(/[\n\r]{2,}/gm, `
`);
    }
  }
}, I(Cr, "AbstractMermaidValueConverter"), Cr), kr, ao = (kr = class extends so {
  runCustomConverter(e, n, r) {
  }
}, I(kr, "CommonValueConverter"), kr), Nr, bn = (Nr = class extends Zh {
  constructor(e) {
    super(), this.keywords = new Set(e);
  }
  buildKeywordTokens(e, n, r) {
    const i = super.buildKeywordTokens(e, n, r);
    return i.forEach((s) => {
      this.keywords.has(s.name) && s.PATTERN !== void 0 && (s.PATTERN = new RegExp(s.PATTERN.toString() + "(?:(?=%%)|(?!\\S))"));
    }), i;
  }
}, I(Nr, "AbstractMermaidTokenBuilder"), Nr), wr;
wr = class extends bn {
}, I(wr, "CommonTokenBuilder");
var br, QE = (br = class extends bn {
  constructor() {
    super(["gitGraph"]);
  }
}, I(br, "GitGraphTokenBuilder"), br), ZE = {
  parser: {
    TokenBuilder: /* @__PURE__ */ I(() => new QE(), "TokenBuilder"),
    ValueConverter: /* @__PURE__ */ I(() => new ao(), "ValueConverter")
  }
};
function eA(t = wn) {
  const e = Ve(
    Nn(t),
    Qn
  ), n = Ve(
    kn({ shared: e }),
    zE,
    ZE
  );
  return e.ServiceRegistry.register(n), { shared: e, GitGraph: n };
}
I(eA, "createGitGraphServices");
var Ir, tA = (Ir = class extends bn {
  constructor() {
    super(["info", "showInfo"]);
  }
}, I(Ir, "InfoTokenBuilder"), Ir), nA = {
  parser: {
    TokenBuilder: /* @__PURE__ */ I(() => new tA(), "TokenBuilder"),
    ValueConverter: /* @__PURE__ */ I(() => new ao(), "ValueConverter")
  }
};
function rA(t = wn) {
  const e = Ve(
    Nn(t),
    Qn
  ), n = Ve(
    kn({ shared: e }),
    BE,
    nA
  );
  return e.ServiceRegistry.register(n), { shared: e, Info: n };
}
I(rA, "createInfoServices");
var _r, iA = (_r = class extends bn {
  constructor() {
    super(["packet"]);
  }
}, I(_r, "PacketTokenBuilder"), _r), sA = {
  parser: {
    TokenBuilder: /* @__PURE__ */ I(() => new iA(), "TokenBuilder"),
    ValueConverter: /* @__PURE__ */ I(() => new ao(), "ValueConverter")
  }
};
function aA(t = wn) {
  const e = Ve(
    Nn(t),
    Qn
  ), n = Ve(
    kn({ shared: e }),
    qE,
    sA
  );
  return e.ServiceRegistry.register(n), { shared: e, Packet: n };
}
I(aA, "createPacketServices");
var $r, oA = ($r = class extends bn {
  constructor() {
    super(["pie", "showData"]);
  }
}, I($r, "PieTokenBuilder"), $r), Pr, cA = (Pr = class extends so {
  runCustomConverter(e, n, r) {
    if (e.name === "PIE_SECTION_LABEL")
      return n.replace(/"/g, "").trim();
  }
}, I(Pr, "PieValueConverter"), Pr), lA = {
  parser: {
    TokenBuilder: /* @__PURE__ */ I(() => new oA(), "TokenBuilder"),
    ValueConverter: /* @__PURE__ */ I(() => new cA(), "ValueConverter")
  }
};
function uA(t = wn) {
  const e = Ve(
    Nn(t),
    Qn
  ), n = Ve(
    kn({ shared: e }),
    WE,
    lA
  );
  return e.ServiceRegistry.register(n), { shared: e, Pie: n };
}
I(uA, "createPieServices");
var Lr, dA = (Lr = class extends bn {
  constructor() {
    super(["architecture"]);
  }
}, I(Lr, "ArchitectureTokenBuilder"), Lr), Or, fA = (Or = class extends so {
  runCustomConverter(e, n, r) {
    if (e.name === "ARCH_ICON")
      return n.replace(/[()]/g, "").trim();
    if (e.name === "ARCH_TEXT_ICON")
      return n.replace(/["()]/g, "");
    if (e.name === "ARCH_TITLE") {
      let i = n.replace(/^\[|]$/g, "").trim();
      return (i.startsWith('"') && i.endsWith('"') || i.startsWith("'") && i.endsWith("'")) && (i = i.slice(1, -1), i = i.replace(/\\"/g, '"').replace(/\\'/g, "'")), i.trim();
    }
  }
}, I(Or, "ArchitectureValueConverter"), Or), hA = {
  parser: {
    TokenBuilder: /* @__PURE__ */ I(() => new dA(), "TokenBuilder"),
    ValueConverter: /* @__PURE__ */ I(() => new fA(), "ValueConverter")
  }
};
function pA(t = wn) {
  const e = Ve(
    Nn(t),
    Qn
  ), n = Ve(
    kn({ shared: e }),
    jE,
    hA
  );
  return e.ServiceRegistry.register(n), { shared: e, Architecture: n };
}
I(pA, "createArchitectureServices");
var xr, mA = (xr = class extends bn {
  constructor() {
    super(["radar-beta"]);
  }
}, I(xr, "RadarTokenBuilder"), xr), gA = {
  parser: {
    TokenBuilder: /* @__PURE__ */ I(() => new mA(), "TokenBuilder"),
    ValueConverter: /* @__PURE__ */ I(() => new ao(), "ValueConverter")
  }
};
function yA(t = wn) {
  const e = Ve(
    Nn(t),
    Qn
  ), n = Ve(
    kn({ shared: e }),
    VE,
    gA
  );
  return e.ServiceRegistry.register(n), { shared: e, Radar: n };
}
I(yA, "createRadarServices");
var Dr, TA = (Dr = class extends bn {
  constructor() {
    super(["treemap"]);
  }
}, I(Dr, "TreemapTokenBuilder"), Dr), RA = /classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/, Mr, vA = (Mr = class extends so {
  runCustomConverter(e, n, r) {
    if (e.name === "NUMBER2")
      return parseFloat(n.replace(/,/g, ""));
    if (e.name === "SEPARATOR")
      return n.substring(1, n.length - 1);
    if (e.name === "STRING2")
      return n.substring(1, n.length - 1);
    if (e.name === "INDENTATION")
      return n.length;
    if (e.name === "ClassDef") {
      if (typeof n != "string")
        return n;
      const i = RA.exec(n);
      if (i)
        return {
          $type: "ClassDefStatement",
          className: i[1],
          styleText: i[2] || void 0
        };
    }
  }
}, I(Mr, "TreemapValueConverter"), Mr);
function kp(t) {
  const e = t.validation.TreemapValidator, n = t.validation.ValidationRegistry;
  if (n) {
    const r = {
      Treemap: e.checkSingleRoot.bind(e)
      // Remove unused validation for TreemapRow
    };
    n.register(r, e);
  }
}
I(kp, "registerValidationChecks");
var Fr, EA = (Fr = class {
  /**
   * Validates that a treemap has only one root node.
   * A root node is defined as a node that has no indentation.
   */
  checkSingleRoot(e, n) {
    let r;
    for (const i of e.TreemapRows)
      i.item && (r === void 0 && // Check if this is a root node (no indentation)
      i.indent === void 0 ? r = 0 : i.indent === void 0 ? n("error", "Multiple root nodes are not allowed in a treemap.", {
        node: i,
        property: "item"
      }) : r !== void 0 && r >= parseInt(i.indent, 10) && n("error", "Multiple root nodes are not allowed in a treemap.", {
        node: i,
        property: "item"
      }));
  }
}, I(Fr, "TreemapValidator"), Fr), AA = {
  parser: {
    TokenBuilder: /* @__PURE__ */ I(() => new TA(), "TokenBuilder"),
    ValueConverter: /* @__PURE__ */ I(() => new vA(), "ValueConverter")
  },
  validation: {
    TreemapValidator: /* @__PURE__ */ I(() => new EA(), "TreemapValidator")
  }
};
function SA(t = wn) {
  const e = Ve(
    Nn(t),
    Qn
  ), n = Ve(
    kn({ shared: e }),
    KE,
    AA
  );
  return e.ServiceRegistry.register(n), kp(n), { shared: e, Treemap: n };
}
I(SA, "createTreemapServices");
var Yt = {}, CA = {
  info: /* @__PURE__ */ I(async () => {
    const { createInfoServices: t } = await import("./info-3K5VOQVL-ZdFRiyx1.js"), e = t().Info.parser.LangiumParser;
    Yt.info = e;
  }, "info"),
  packet: /* @__PURE__ */ I(async () => {
    const { createPacketServices: t } = await import("./packet-RMMSAZCW-CHVZvjQZ.js"), e = t().Packet.parser.LangiumParser;
    Yt.packet = e;
  }, "packet"),
  pie: /* @__PURE__ */ I(async () => {
    const { createPieServices: t } = await import("./pie-UPGHQEXC-afav2Klr.js"), e = t().Pie.parser.LangiumParser;
    Yt.pie = e;
  }, "pie"),
  architecture: /* @__PURE__ */ I(async () => {
    const { createArchitectureServices: t } = await import("./architecture-PBZL5I3N-CamU3c6Z.js"), e = t().Architecture.parser.LangiumParser;
    Yt.architecture = e;
  }, "architecture"),
  gitGraph: /* @__PURE__ */ I(async () => {
    const { createGitGraphServices: t } = await import("./gitGraph-HDMCJU4V-C3N5YqLO.js"), e = t().GitGraph.parser.LangiumParser;
    Yt.gitGraph = e;
  }, "gitGraph"),
  radar: /* @__PURE__ */ I(async () => {
    const { createRadarServices: t } = await import("./radar-KQ55EAFF-DnUN2oK_.js"), e = t().Radar.parser.LangiumParser;
    Yt.radar = e;
  }, "radar"),
  treemap: /* @__PURE__ */ I(async () => {
    const { createTreemapServices: t } = await import("./treemap-KZPCXAKY-CH5JYuHO.js"), e = t().Treemap.parser.LangiumParser;
    Yt.treemap = e;
  }, "treemap")
};
async function kA(t, e) {
  const n = CA[t];
  if (!n)
    throw new Error(`Unknown diagram type: ${t}`);
  Yt[t] || await n();
  const i = Yt[t].parse(e);
  if (i.lexerErrors.length > 0 || i.parserErrors.length > 0)
    throw new NA(i);
  return i.value;
}
I(kA, "parse");
var Gr, NA = (Gr = class extends Error {
  constructor(e) {
    const n = e.lexerErrors.map((i) => {
      const s = i.line !== void 0 && !isNaN(i.line) ? i.line : "?", a = i.column !== void 0 && !isNaN(i.column) ? i.column : "?";
      return `Lexer error on line ${s}, column ${a}: ${i.message}`;
    }).join(`
`), r = e.parserErrors.map((i) => {
      const s = i.token.startLine !== void 0 && !isNaN(i.token.startLine) ? i.token.startLine : "?", a = i.token.startColumn !== void 0 && !isNaN(i.token.startColumn) ? i.token.startColumn : "?";
      return `Parse error on line ${s}, column ${a}: ${i.message}`;
    }).join(`
`);
    super(`Parsing failed: ${n} ${r}`), this.result = e;
  }
}, I(Gr, "MermaidParseError"), Gr);
export {
  hA as A,
  ZE as G,
  nA as I,
  sA as P,
  gA as R,
  AA as T,
  aA as a,
  uA as b,
  rA as c,
  lA as d,
  pA as e,
  eA as f,
  yA as g,
  SA as h,
  kA as p
};