{"version":3,"file":"ParseState.mjs","names":["ParseState","index","start","end","flags","constructor","input","length","done","peek","pattern","toRegExp","RegExp","source","replace","lastIndex","match","exec","undefined","s"],"sources":["../../src/util/ParseState.ts"],"sourcesContent":["export class ParseState {\n  index = 0\n  readonly start: number\n  readonly end: number\n  readonly flags: string\n\n  constructor(\n    public input: string,\n    {\n      start = 0,\n      end = input.length,\n      flags = 'g',\n    }: {\n      /**\n       * The starting index (defaults to 0)\n       */\n      start?: number\n      /**\n       * The ending index (defaults to input.length)\n       */\n      end?: number\n      /**\n       * Flags to add to all regexes\n       */\n      flags?: string\n    } = {}\n  ) {\n    this.start = start\n    this.end = end\n    this.flags = flags\n  }\n\n  get done() {\n    return this.index >= this.end\n  }\n\n  /**\n   * If pattern matches the input at the current index, returns the match,\n   * but doesn't advance the index.\n   */\n  peek(pattern: string | RegExp): RegExpExecArray | undefined {\n    if (typeof pattern === 'string') pattern = toRegExp(pattern)\n    pattern = new RegExp(\n      pattern.source,\n      `${this.flags}${pattern.flags.replace(\n        new RegExp(`[${this.flags}]`, 'g'),\n        ''\n      )}`\n    )\n    pattern.lastIndex = this.index\n    const match = pattern.exec(this.input)\n    return match?.index === this.index &&\n      match.index + match[0].length <= this.end\n      ? match\n      : undefined\n  }\n\n  /**\n   * If pattern matches the input at the current index, returns the match,\n   * and advances the index to the end of the match.\n   */\n  match(pattern: string | RegExp): RegExpExecArray | undefined {\n    const match = this.peek(pattern)\n    if (match) {\n      this.index += match[0].length\n    }\n    return match\n  }\n}\n\nexport function toRegExp(s: string, flags = ''): RegExp {\n  return new RegExp(s.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), flags)\n}\n"],"mappings":"AAAA,OAAO,MAAMA,UAAU,CAAC;EACtBC,KAAK,GAAG,CAAC;EACAC,KAAK;EACLC,GAAG;EACHC,KAAK;EAEdC,WAAWA,CACFC,KAAa,EACpB;IACEJ,KAAK,GAAG,CAAC;IACTC,GAAG,GAAGG,KAAK,CAACC,MAAM;IAClBH,KAAK,GAAG;EAcV,CAAC,GAAG,CAAC,CAAC,EACN;IAAA,KAnBOE,KAAa,GAAbA,KAAa;IAoBpB,IAAI,CAACJ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,GAAG,GAAGA,GAAG;IACd,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB;EAEA,IAAII,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACP,KAAK,IAAI,IAAI,CAACE,GAAG;EAC/B;;EAEA;AACF;AACA;AACA;EACEM,IAAIA,CAACC,OAAwB,EAA+B;IAC1D,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAEA,OAAO,GAAGC,QAAQ,CAACD,OAAO,CAAC;IAC5DA,OAAO,GAAG,IAAIE,MAAM,CAClBF,OAAO,CAACG,MAAM,EACd,GAAG,IAAI,CAACT,KAAK,GAAGM,OAAO,CAACN,KAAK,CAACU,OAAO,CACnC,IAAIF,MAAM,CAAC,IAAI,IAAI,CAACR,KAAK,GAAG,EAAE,GAAG,CAAC,EAClC,EACF,CAAC,EACH,CAAC;IACDM,OAAO,CAACK,SAAS,GAAG,IAAI,CAACd,KAAK;IAC9B,MAAMe,KAAK,GAAGN,OAAO,CAACO,IAAI,CAAC,IAAI,CAACX,KAAK,CAAC;IACtC,OAAO,CAAAU,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEf,KAAK,MAAK,IAAI,CAACA,KAAK,IAChCe,KAAK,CAACf,KAAK,GAAGe,KAAK,CAAC,CAAC,CAAC,CAACT,MAAM,IAAI,IAAI,CAACJ,GAAG,GACvCa,KAAK,GACLE,SAAS;EACf;;EAEA;AACF;AACA;AACA;EACEF,KAAKA,CAACN,OAAwB,EAA+B;IAC3D,MAAMM,KAAK,GAAG,IAAI,CAACP,IAAI,CAACC,OAAO,CAAC;IAChC,IAAIM,KAAK,EAAE;MACT,IAAI,CAACf,KAAK,IAAIe,KAAK,CAAC,CAAC,CAAC,CAACT,MAAM;IAC/B;IACA,OAAOS,KAAK;EACd;AACF;AAEA,OAAO,SAASL,QAAQA,CAACQ,CAAS,EAAEf,KAAK,GAAG,EAAE,EAAU;EACtD,OAAO,IAAIQ,MAAM,CAACO,CAAC,CAACL,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAAEV,KAAK,CAAC;AACvE","ignoreList":[]}