From e61fc6f5a1e144af832b560617098862fd0603d1 Mon Sep 17 00:00:00 2001 From: "codefix-patchflow[bot]" <292349666+codefix-patchflow[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2026 14:59:52 +0000 Subject: [PATCH] fix: handle require edge case --- lib/parse.js | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/lib/parse.js b/lib/parse.js index 549de82e..08b21029 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -227,10 +227,37 @@ var splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) { return [key]; } - var brackets = /(\[[^[\]]*])/; - var child = /(\[[^[\]]*])/g; + var getBracketSegment = function getBracketSegment(start) { + var open = key.indexOf('[', start); + if (open === -1) { + return null; + } + + var depth = 0; + for (var j = open; j < key.length; ++j) { + var char = key.charAt(j); + if (char === '[') { + depth += 1; + } else if (char === ']') { + depth -= 1; + if (depth === 0) { + return { + index: open, + next: j + 1, + value: key.slice(open, j + 1) + }; + } + } + } + + return { + index: open, + next: key.length, + value: key.slice(open) + }; + }; - var segment = brackets.exec(key); + var segment = getBracketSegment(0); var parent = segment ? key.slice(0, segment.index) : key; var keys = []; @@ -246,17 +273,19 @@ var splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) { } var i = 0; - while ((segment = child.exec(key)) !== null && i < options.depth) { + var pos = segment ? segment.index : 0; + while ((segment = getBracketSegment(pos)) !== null && i < options.depth) { i += 1; - var segmentContent = segment[1].slice(1, -1); + var segmentContent = segment.value.slice(1, -1); if (!options.plainObjects && has.call(Object.prototype, segmentContent)) { if (!options.allowPrototypes) { return; } } - keys[keys.length] = segment[1]; + keys[keys.length] = segment.value; + pos = segment.next; } if (segment) {