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