import { isArray } from './array'; import { isObject } from "./record"; type ValueType = bigint | boolean | number | string | symbol; type NonObject = ValueType | Array; export interface Directory { [key: string]: Terminal | Directory; } export const reduce = ( directory: Directory ): Record => Object.entries(directory).reduce>( (result, [left, val]) => !isObject(val) || isArray(val) ? Object.assign(result, { [left]: val }) : Object.entries(reduce(val)).reduce( (acc, [right, terminal]) => Object.assign(acc, { [[left, right].join(".")]: terminal }), result ), {} );