/ web / src / lib / nested.ts
nested.ts
 1  export function getNestedValue(obj: Record<string, unknown>, path: string): unknown {
 2    const parts = path.split(".");
 3    let cur: unknown = obj;
 4    for (const p of parts) {
 5      if (cur == null || typeof cur !== "object") return undefined;
 6      cur = (cur as Record<string, unknown>)[p];
 7    }
 8    return cur;
 9  }
10  
11  export function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): Record<string, unknown> {
12    const clone = structuredClone(obj);
13    const parts = path.split(".");
14    let cur: Record<string, unknown> = clone;
15    for (let i = 0; i < parts.length - 1; i++) {
16      if (cur[parts[i]] == null || typeof cur[parts[i]] !== "object") {
17        cur[parts[i]] = {};
18      }
19      cur = cur[parts[i]] as Record<string, unknown>;
20    }
21    cur[parts[parts.length - 1]] = value;
22    return clone;
23  }