all files / src/ objpath.ts

100% Statements 17/17
100% Branches 4/4
100% Functions 6/6
100% Lines 15/15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 44×     86×   41×   21× 21× 21× 15× 15× 15×   21×   18×    
export function parsePath(path: string): string[] {
	return path
		.replace(/\[([^[\]]*)\]/g, '.$1.')
		.split('.')
		.filter(t => t !== '')
}
export function get(obj: object, path: string): any {
	return parsePath(path).reduce((prev, cur) => prev && prev[cur], obj)
}
export function set(obj: object, path: string, value: any): void {
	const paths = parsePath(path)
	let cur = obj
	for (let i = 0; i < paths.length - 1; i++) {
		const pname = paths[i]
		if (!cur.hasOwnProperty(pname)) cur[pname] = {}
		cur = cur[pname]
	}
	cur[paths[paths.length - 1]] = value
}
export function copy(dest: object, source: object, path: string): void {
	set(dest, path, get(source, path))
}