Introduce options service

This commit is contained in:
Daniel Imms
2019-06-01 09:29:11 -07:00
parent 343d4c3348
commit 3ba7069787
12 changed files with 361 additions and 252 deletions
+2 -7
View File
@@ -6,22 +6,17 @@
/*
* A simple utility for cloning values
*/
export function clone<T>(val: T, depth: number = 5): T | null {
export function clone<T>(val: T, depth: number = 5): T {
if (typeof val !== 'object') {
return val;
}
// cloning null always returns null
if (val === null) {
return null;
}
// If we're cloning an array, use an array as the base, otherwise use an object
const clonedObject: any = Array.isArray(val) ? [] : {};
for (const key in val) {
// Recursively clone eack item unless we're at the maximum depth
clonedObject[key] = depth <= 1 ? val[key] : clone(val[key], depth - 1);
clonedObject[key] = depth <= 1 ? val[key] : (val[key] ? clone(val[key], depth - 1) : val[key]);
}
return clonedObject as T;