Skip to content

Commit f8e155e

Browse files
committed
Cleanup
1 parent 9580b5e commit f8e155e

File tree

1 file changed

+26
-25
lines changed

1 file changed

+26
-25
lines changed

src/util/toPath.js

+26-25
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
const IS_COMPLEX_PATH = /\.{2,}|[\[\]]/g
2+
13
/**
24
* Parse a path string into an array of path segments.
35
*
@@ -14,6 +16,13 @@
1416
**/
1517
export function toPath(path) {
1618
if (Array.isArray(path)) return path
19+
if (!IS_COMPLEX_PATH.test(path)) return path.split('.')
20+
21+
return parsePath(path)
22+
}
23+
24+
function parsePath(path) {
25+
// return parsePathFull(path)
1726

1827
let parts = []
1928
let inBrackets = false
@@ -100,9 +109,7 @@ export function toPath(path) {
100109
}
101110

102111
// Herre for reference in case one is preferred over the other
103-
export function toPathFull(path) {
104-
if (Array.isArray(path)) return path
105-
112+
function parsePathFull(path) {
106113
// The general outline/properties of a path string:
107114

108115
// Tokens:
@@ -136,9 +143,6 @@ export function toPathFull(path) {
136143
let error = () => {
137144
throw new Error(`Invalid path: ${path}\n` + `${' '.repeat(14 + i)}^`)
138145
}
139-
let startNew = () => (partStart = i)
140-
let advance = () => (partEnd = i)
141-
let setInBrackets = (v) => (inBrackets = v)
142146
let capture = () => parts.push(path.slice(partStart, partEnd))
143147

144148
if (prev === undefined) {
@@ -147,8 +151,8 @@ export function toPathFull(path) {
147151
capture()
148152
} else if (curr === '[') {
149153
// start -> lb
150-
startNew()
151-
setInBrackets(true)
154+
partStart = i
155+
inBrackets = true
152156
} else if (curr === ']') {
153157
// start -> rb
154158
return error()
@@ -161,7 +165,7 @@ export function toPathFull(path) {
161165
return error()
162166
} else {
163167
// dot -> ident
164-
startNew()
168+
partStart = i
165169
}
166170
} else if (prev === '[') {
167171
if (curr === '[' || curr === undefined) {
@@ -170,49 +174,46 @@ export function toPathFull(path) {
170174
} else if (curr === ']') {
171175
// lb -> rb
172176
capture()
173-
setInBrackets(false)
177+
inBrackets = false
174178
} else {
175179
// lb -> ident
176-
startNew()
180+
partStart = i
177181
}
178182
} else if (prev === ']') {
179183
if (curr === '.') {
180184
// rb -> dot
181-
startNew()
185+
partStart = i
182186
} else if (curr === '[') {
183187
// rb -> lb
184-
setInBrackets(true)
188+
inBrackets = true
185189
} else if (curr === undefined) {
186190
// rb -> end
187191
} else {
188192
// rb -> rb | ident
189193
return error()
190194
}
191195
} else {
196+
if (curr === '[' && inBrackets) {
197+
// ident -> lb if in brackets
198+
return error()
199+
}
200+
201+
partEnd = i
202+
192203
if (curr === '.' && !inBrackets) {
193204
// ident -> dot
194-
advance()
195205
capture()
196206
} else if (curr === ']') {
197207
// ident -> rb
198-
advance()
199208
capture()
200-
setInBrackets(false)
201-
} else if (curr === '[' && inBrackets) {
202-
// ident -> lb if in brackets
203-
return error()
209+
inBrackets = false
204210
} else if (curr === '[' && !inBrackets) {
205211
// ident -> lb
206-
advance()
207212
capture()
208-
setInBrackets(true)
213+
inBrackets = true
209214
} else if (curr === undefined) {
210215
// ident -> end
211-
advance()
212216
capture()
213-
} else {
214-
// ident -> ident
215-
advance()
216217
}
217218
}
218219
}

0 commit comments

Comments
 (0)