| export function getNestedValue(obj: Record<string, unknown>, path: string): unknown { |
| const parts = path.split("."); |
| let cur: unknown = obj; |
| for (const p of parts) { |
| if (cur == null || typeof cur !== "object") return undefined; |
| cur = (cur as Record<string, unknown>)[p]; |
| } |
| return cur; |
| } |
|
|
| export function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): Record<string, unknown> { |
| const clone = structuredClone(obj); |
| const parts = path.split("."); |
| let cur: Record<string, unknown> = clone; |
| for (let i = 0; i < parts.length - 1; i++) { |
| if (cur[parts[i]] == null || typeof cur[parts[i]] !== "object") { |
| cur[parts[i]] = {}; |
| } |
| cur = cur[parts[i]] as Record<string, unknown>; |
| } |
| cur[parts[parts.length - 1]] = value; |
| return clone; |
| } |
|
|