From 361afd6a1e8925cb387b90a76b8f6154979a4ce3 Mon Sep 17 00:00:00 2001 From: "codefix-patchflow[bot]" <292349666+codefix-patchflow[bot]@users.noreply.github.com> Date: Fri, 19 Jun 2026 04:12:01 +0000 Subject: [PATCH] fix: handle require edge case --- lib/parse.js | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/lib/parse.js b/lib/parse.js index 549de82e..31380360 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -227,11 +227,8 @@ var splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) { return [key]; } - var brackets = /(\[[^[\]]*])/; - var child = /(\[[^[\]]*])/g; - - var segment = brackets.exec(key); - var parent = segment ? key.slice(0, segment.index) : key; + var segmentStart = key.indexOf('['); + var parent = segmentStart > -1 ? key.slice(0, segmentStart) : key; var keys = []; @@ -246,25 +243,44 @@ var splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) { } var i = 0; - while ((segment = child.exec(key)) !== null && i < options.depth) { + var segment; + while (segmentStart > -1 && i < options.depth) { + var segmentEnd = segmentStart + 1; + var bracketDepth = 1; + while (segmentEnd < key.length && bracketDepth > 0) { + var currentChar = key.charAt(segmentEnd); + if (currentChar === '[') { + bracketDepth += 1; + } else if (currentChar === ']') { + bracketDepth -= 1; + } + segmentEnd += 1; + } + + if (bracketDepth > 0) { + break; + } + i += 1; + segment = key.slice(segmentStart, segmentEnd); - var segmentContent = segment[1].slice(1, -1); + var segmentContent = segment.slice(1, -1); if (!options.plainObjects && has.call(Object.prototype, segmentContent)) { if (!options.allowPrototypes) { return; } } - keys[keys.length] = segment[1]; + keys[keys.length] = segment; + segmentStart = key.indexOf('[', segmentEnd); } - if (segment) { + if (segmentStart > -1) { if (options.strictDepth === true) { throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true'); } - keys[keys.length] = '[' + key.slice(segment.index) + ']'; + keys[keys.length] = '[' + key.slice(segmentStart) + ']'; } return keys;