1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4  value: true
5});
6exports.findMatchingBracketPosition = findMatchingBracketPosition;
7const LEFT_BRACKETS = ['(', '{'];
8const RIGHT_BRACKETS = [')', '}'];
9function findMatchingBracketPosition(contents, bracket, offset = 0) {
10  // search first occurrence of `bracket`
11  const firstBracketPos = contents.indexOf(bracket, offset);
12  if (firstBracketPos < 0) {
13    return -1;
14  }
15  let stackCounter = 0;
16  const matchingBracket = getMatchingBracket(bracket);
17  if (isLeftBracket(bracket)) {
18    const contentsLength = contents.length;
19    // search forward
20    for (let i = firstBracketPos + 1; i < contentsLength; ++i) {
21      const c = contents[i];
22      if (c === bracket) {
23        stackCounter += 1;
24      } else if (c === matchingBracket) {
25        if (stackCounter === 0) {
26          return i;
27        }
28        stackCounter -= 1;
29      }
30    }
31  } else {
32    // search backward
33    for (let i = firstBracketPos - 1; i >= 0; --i) {
34      const c = contents[i];
35      if (c === bracket) {
36        stackCounter += 1;
37      } else if (c === matchingBracket) {
38        if (stackCounter === 0) {
39          return i;
40        }
41        stackCounter -= 1;
42      }
43    }
44  }
45  return -1;
46}
47function isLeftBracket(bracket) {
48  const leftBracketList = LEFT_BRACKETS;
49  return leftBracketList.includes(bracket);
50}
51function getMatchingBracket(bracket) {
52  switch (bracket) {
53    case '(':
54      return ')';
55    case ')':
56      return '(';
57    case '{':
58      return '}';
59    case '}':
60      return '{';
61    default:
62      throw new Error(`Unsupported bracket - ${bracket}`);
63  }
64}
65//# sourceMappingURL=matchBrackets.js.map