1{"version":3,"file":"matchBrackets.js","names":["LEFT_BRACKETS","RIGHT_BRACKETS","findMatchingBracketPosition","contents","bracket","offset","firstBracketPos","indexOf","stackCounter","matchingBracket","getMatchingBracket","isLeftBracket","contentsLength","length","i","c","leftBracketList","includes","Error"],"sources":["../../src/utils/matchBrackets.ts"],"sourcesContent":["const LEFT_BRACKETS = ['(', '{'] as const;\nconst RIGHT_BRACKETS = [')', '}'] as const;\n\ntype LeftBracket = typeof LEFT_BRACKETS[number];\ntype RightBracket = typeof RIGHT_BRACKETS[number];\ntype Bracket = LeftBracket | RightBracket;\n\nexport function findMatchingBracketPosition(\n contents: string,\n bracket: Bracket,\n offset: number = 0\n): number {\n // search first occurrence of `bracket`\n const firstBracketPos = contents.indexOf(bracket, offset);\n if (firstBracketPos < 0) {\n return -1;\n }\n\n let stackCounter = 0;\n const matchingBracket = getMatchingBracket(bracket);\n\n if (isLeftBracket(bracket)) {\n const contentsLength = contents.length;\n // search forward\n for (let i = firstBracketPos + 1; i < contentsLength; ++i) {\n const c = contents[i];\n if (c === bracket) {\n stackCounter += 1;\n } else if (c === matchingBracket) {\n if (stackCounter === 0) {\n return i;\n }\n stackCounter -= 1;\n }\n }\n } else {\n // search backward\n for (let i = firstBracketPos - 1; i >= 0; --i) {\n const c = contents[i];\n if (c === bracket) {\n stackCounter += 1;\n } else if (c === matchingBracket) {\n if (stackCounter === 0) {\n return i;\n }\n stackCounter -= 1;\n }\n }\n }\n\n return -1;\n}\n\nfunction isLeftBracket(bracket: Bracket): boolean {\n const leftBracketList: readonly Bracket[] = LEFT_BRACKETS;\n return leftBracketList.includes(bracket);\n}\n\nfunction getMatchingBracket(bracket: Bracket): Bracket {\n switch (bracket) {\n case '(':\n return ')';\n case ')':\n return '(';\n case '{':\n return '}';\n case '}':\n return '{';\n default:\n throw new Error(`Unsupported bracket - ${bracket}`);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,aAAa,GAAG,CAAC,GAAD,EAAM,GAAN,CAAtB;AACA,MAAMC,cAAc,GAAG,CAAC,GAAD,EAAM,GAAN,CAAvB;;AAMO,SAASC,2BAAT,CACLC,QADK,EAELC,OAFK,EAGLC,MAAc,GAAG,CAHZ,EAIG;EACR;EACA,MAAMC,eAAe,GAAGH,QAAQ,CAACI,OAAT,CAAiBH,OAAjB,EAA0BC,MAA1B,CAAxB;;EACA,IAAIC,eAAe,GAAG,CAAtB,EAAyB;IACvB,OAAO,CAAC,CAAR;EACD;;EAED,IAAIE,YAAY,GAAG,CAAnB;EACA,MAAMC,eAAe,GAAGC,kBAAkB,CAACN,OAAD,CAA1C;;EAEA,IAAIO,aAAa,CAACP,OAAD,CAAjB,EAA4B;IAC1B,MAAMQ,cAAc,GAAGT,QAAQ,CAACU,MAAhC,CAD0B,CAE1B;;IACA,KAAK,IAAIC,CAAC,GAAGR,eAAe,GAAG,CAA/B,EAAkCQ,CAAC,GAAGF,cAAtC,EAAsD,EAAEE,CAAxD,EAA2D;MACzD,MAAMC,CAAC,GAAGZ,QAAQ,CAACW,CAAD,CAAlB;;MACA,IAAIC,CAAC,KAAKX,OAAV,EAAmB;QACjBI,YAAY,IAAI,CAAhB;MACD,CAFD,MAEO,IAAIO,CAAC,KAAKN,eAAV,EAA2B;QAChC,IAAID,YAAY,KAAK,CAArB,EAAwB;UACtB,OAAOM,CAAP;QACD;;QACDN,YAAY,IAAI,CAAhB;MACD;IACF;EACF,CAdD,MAcO;IACL;IACA,KAAK,IAAIM,CAAC,GAAGR,eAAe,GAAG,CAA/B,EAAkCQ,CAAC,IAAI,CAAvC,EAA0C,EAAEA,CAA5C,EAA+C;MAC7C,MAAMC,CAAC,GAAGZ,QAAQ,CAACW,CAAD,CAAlB;;MACA,IAAIC,CAAC,KAAKX,OAAV,EAAmB;QACjBI,YAAY,IAAI,CAAhB;MACD,CAFD,MAEO,IAAIO,CAAC,KAAKN,eAAV,EAA2B;QAChC,IAAID,YAAY,KAAK,CAArB,EAAwB;UACtB,OAAOM,CAAP;QACD;;QACDN,YAAY,IAAI,CAAhB;MACD;IACF;EACF;;EAED,OAAO,CAAC,CAAR;AACD;;AAED,SAASG,aAAT,CAAuBP,OAAvB,EAAkD;EAChD,MAAMY,eAAmC,GAAGhB,aAA5C;EACA,OAAOgB,eAAe,CAACC,QAAhB,CAAyBb,OAAzB,CAAP;AACD;;AAED,SAASM,kBAAT,CAA4BN,OAA5B,EAAuD;EACrD,QAAQA,OAAR;IACE,KAAK,GAAL;MACE,OAAO,GAAP;;IACF,KAAK,GAAL;MACE,OAAO,GAAP;;IACF,KAAK,GAAL;MACE,OAAO,GAAP;;IACF,KAAK,GAAL;MACE,OAAO,GAAP;;IACF;MACE,MAAM,IAAIc,KAAJ,CAAW,yBAAwBd,OAAQ,EAA3C,CAAN;EAVJ;AAYD"}