UNPKG

datum-focus

Version:

Data shape, model, metadata, JSON, JSON Schema, GraphQL, MongoDB query and aggregations, iterator generators

26 lines (21 loc) 789 B
import { isArray } from './array'; import { isObject } from "./record"; type ValueType = bigint | boolean | number | string | symbol; type NonObject = ValueType | Array<unknown>; export interface Directory<Terminal extends NonObject> { [key: string]: Terminal | Directory<Terminal>; } export const reduce = <Terminal extends NonObject>( directory: Directory<Terminal> ): Record<string, Terminal> => Object.entries(directory).reduce<Record<string, Terminal>>( (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 ), {} );