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