Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export function getPathSegments(path: Path): ArrayPath {
if (isArr(path)) {
return path as string[]
}
if (isStr(path) && path) {
const cached = PathCache.get(path)
if (cached) {
return cached
}
const pathArr = (path as string).split('.')
const parts = []
for (let i = 0; i < pathArr.length; i++) {
let p = pathArr[i]
while (p[p.length - 1] === '\\' && pathArr[i + 1] !== undefined) {
p = p.slice(0, -1) + '.'
p += pathArr[++i]
function toString(val: Path | null) {
if (!val) {
return ''
}
if (isArr(val)) {
return (val as string[]).join('.')
}
return isStr(val) ? val : ''
}
destructKey(key, readyReplace) {
if (!key) {
return
}
token = key
if (readyReplace) {
realKey = key
lastDestruct = destruct
return
}
if (isArr(destruct)) {
;(destruct as string[]).push(key)
} else if (isPlainObj(destruct)) {
destruct[realKey && lastDestruct === destruct ? realKey : key] = key
}
realKey = ''
lastDestruct = destruct
},
destructArrayStart() {
return (
obj: any,
path: Path,
value?: any,
getSchema?: (path: string[] | number[]) => any
) => {
let paths: any = []
if (!cache.get(path)) {
paths = parsePaths(path)
cache.set(path, paths)
} else {
paths = cache.get(path)
}
if (!isArr(paths)) {
return update(obj, path, value, getSchema)
}
if (paths && paths.length) {
each(paths, ({ mapPath, key, startPath, endPath }) => {
update(
obj,
startPath.concat(key),
internalGetIn(value, endPath),
getSchema
)
})
}
return obj
}
}
destructObjectStart() {
if (!destruct) {
root = {}
destruct = root
} else {
destruct = {}
}
const tail = stack[stack.length - 1]
if (isPlainObj(tail)) {
tail[token] = destruct
} else if (isArr(tail)) {
tail.push(destruct)
}
stack.push(destruct)
},
destructArrayEnd() {