export function flatten(obj: Record, path?: string, result?: Record) { result = result ?? {}; for (const [key, value] of Object.entries(obj)) { if (typeof value === 'object') { flatten(value, (path ?? '') + key + '.', result); } else { result[(path ?? '') + key] = value; } } return result; } export function expand(obj: Record) { const result: Record = {}; for (const [key, value] of Object.entries(obj)) { const elements = key.split('.'); let current = result; for (const element of elements.slice(0, elements.length - 1)) { current[element] = current[element] ?? {}; current = current[element]; } current[elements[elements.length - 1]] = value; } return result; }