{"mappings":";AACA,IAAMA,EAAN,KAAwB,CACtB,YAAYC,EAAUC,EAAU,CAAC,EAAG,CAClC,KAAK,SAAWD,EAChB,KAAK,QAAUC,EACf,GAAM,CACJ,UAAAC,EAAY,GACZ,MAAAC,EACA,iBAAAC,CACF,EAAIH,EACJ,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,2CAA2C,EAE7D,KAAK,QAAUJ,EAAS,IAAKK,GAAM,CACjC,GAAI,OAAOA,GAAM,SACf,OAAOA,EAET,IAAMC,EAASH,GAAO,IAAIE,CAAC,EAC3B,GAAIC,EAAQ,CACV,GAAIA,aAAkB,OACpB,OAAOA,EAET,GAAIJ,EACF,OAAO,KACT,MAAMI,CACR,CACA,GAAI,CACF,IAAMC,EAAQH,EAAiBC,CAAC,EAChC,OAAAF,GAAO,IAAIE,EAAGE,CAAK,EACZA,CACT,OAASC,EAAG,CAEV,GADAL,GAAO,IAAIE,EAAGG,CAAC,EACXN,EACF,OAAO,KACT,MAAMM,CACR,CACF,CAAC,CACH,CACA,QACA,kBAAkBC,EAAQC,EAAeC,EAAU,CACjD,IAAMC,EAAM,OAAOH,GAAW,SAAWA,EAASA,EAAO,QACnDI,EAAU,CAAC,EACjB,SAASC,EAASC,EAAOC,EAAOC,EAAS,EAAG,CAC1C,MAAO,CACL,MAAAF,EACA,eAAgBC,EAAM,QAAQ,IAAKE,GAC7BA,GAAU,KACL,CACL,MAAO,WACP,IAAK,WACL,OAAQ,CACV,EAEK,CACL,MAAOA,EAAO,CAAC,EAAID,EACnB,IAAKC,EAAO,CAAC,EAAID,EACjB,OAAQC,EAAO,CAAC,EAAIA,EAAO,CAAC,CAC9B,CACD,CACH,CACF,CACA,QAASC,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IAAK,CAC5C,IAAMC,EAAS,KAAK,QAAQD,CAAC,EAC7B,GAAKC,EAEL,GAAI,CACFA,EAAO,UAAYV,EACnB,IAAMM,EAAQI,EAAO,KAAKR,CAAG,EAC7B,GAAI,CAACI,EACH,SACF,GAAIA,EAAM,QAAUN,EAClB,OAAOI,EAASK,EAAGH,EAAO,CAAC,EAE7BH,EAAQ,KAAK,CAACM,EAAGH,EAAO,CAAC,CAAC,CAC5B,OAASR,EAAG,CACV,GAAI,KAAK,QAAQ,UACf,SACF,MAAMA,CACR,CACF,CACA,GAAIK,EAAQ,OAAQ,CAClB,IAAMQ,EAAW,KAAK,IAAI,GAAGR,EAAQ,IAAKS,GAAMA,EAAE,CAAC,EAAE,KAAK,CAAC,EAC3D,OAAW,CAACH,EAAGH,EAAOC,CAAM,IAAKJ,EAC/B,GAAIG,EAAM,QAAUK,EAClB,OAAOP,EAASK,EAAGH,EAAOC,CAAM,CAGtC,CACA,OAAO,IACT,CACF","names":["JavaScriptScanner","patterns","options","forgiving","cache","regexConstructor","p","cached","regex","e","string","startPosition","_options","str","pending","toResult","index","match","offset","indice","i","regexp","minIndex","m"],"sources":["../esm/npm/@shikijs/engine-javascript@3.22.0/node_modules/@shikijs/engine-javascript/dist/shared/engine-javascript.hzpS1_41.mjs"],"sourcesContent":["const MAX = 4294967295;\nclass JavaScriptScanner {\n  constructor(patterns, options = {}) {\n    this.patterns = patterns;\n    this.options = options;\n    const {\n      forgiving = false,\n      cache,\n      regexConstructor\n    } = options;\n    if (!regexConstructor) {\n      throw new Error(\"Option `regexConstructor` is not provided\");\n    }\n    this.regexps = patterns.map((p) =\u003e {\n      if (typeof p !== \"string\") {\n        return p;\n      }\n      const cached = cache?.get(p);\n      if (cached) {\n        if (cached instanceof RegExp) {\n          return cached;\n        }\n        if (forgiving)\n          return null;\n        throw cached;\n      }\n      try {\n        const regex = regexConstructor(p);\n        cache?.set(p, regex);\n        return regex;\n      } catch (e) {\n        cache?.set(p, e);\n        if (forgiving)\n          return null;\n        throw e;\n      }\n    });\n  }\n  regexps;\n  findNextMatchSync(string, startPosition, _options) {\n    const str = typeof string === \"string\" ? string : string.content;\n    const pending = [];\n    function toResult(index, match, offset = 0) {\n      return {\n        index,\n        captureIndices: match.indices.map((indice) =\u003e {\n          if (indice == null) {\n            return {\n              start: MAX,\n              end: MAX,\n              length: 0\n            };\n          }\n          return {\n            start: indice[0] + offset,\n            end: indice[1] + offset,\n            length: indice[1] - indice[0]\n          };\n        })\n      };\n    }\n    for (let i = 0; i \u003c this.regexps.length; i++) {\n      const regexp = this.regexps[i];\n      if (!regexp)\n        continue;\n      try {\n        regexp.lastIndex = startPosition;\n        const match = regexp.exec(str);\n        if (!match)\n          continue;\n        if (match.index === startPosition) {\n          return toResult(i, match, 0);\n        }\n        pending.push([i, match, 0]);\n      } catch (e) {\n        if (this.options.forgiving)\n          continue;\n        throw e;\n      }\n    }\n    if (pending.length) {\n      const minIndex = Math.min(...pending.map((m) =\u003e m[1].index));\n      for (const [i, match, offset] of pending) {\n        if (match.index === minIndex) {\n          return toResult(i, match, offset);\n        }\n      }\n    }\n    return null;\n  }\n}\n\nexport { JavaScriptScanner as J };\n"],"version":3}
