Spaces:
Runtime error
Runtime error
| var reFirstKey = /^[^\[]*/ | |
| var reDigitPath = /^\[(\d+)\]/ | |
| var reNormalPath = /^\[([^\]]+)\]/ | |
| function parsePath (key) { | |
| function failure () { | |
| return [{ type: 'object', key: key, last: true }] | |
| } | |
| var firstKey = reFirstKey.exec(key)[0] | |
| if (!firstKey) return failure() | |
| var len = key.length | |
| var pos = firstKey.length | |
| var tail = { type: 'object', key: firstKey } | |
| var steps = [tail] | |
| while (pos < len) { | |
| var m | |
| if (key[pos] === '[' && key[pos + 1] === ']') { | |
| pos += 2 | |
| tail.append = true | |
| if (pos !== len) return failure() | |
| continue | |
| } | |
| m = reDigitPath.exec(key.substring(pos)) | |
| if (m !== null) { | |
| pos += m[0].length | |
| tail.nextType = 'array' | |
| tail = { type: 'array', key: parseInt(m[1], 10) } | |
| steps.push(tail) | |
| continue | |
| } | |
| m = reNormalPath.exec(key.substring(pos)) | |
| if (m !== null) { | |
| pos += m[0].length | |
| tail.nextType = 'object' | |
| tail = { type: 'object', key: m[1] } | |
| steps.push(tail) | |
| continue | |
| } | |
| return failure() | |
| } | |
| tail.last = true | |
| return steps | |
| } | |
| module.exports = parsePath | |