Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 1x 1x 1x 71x 14x 57x 50x 7x 9x 2x 3x 1x | import { mapRecord } from '../utils';
export interface Flattable<Flatten> {
flatten: Flatten;
}
export namespace Flattable {
export type Flatten<T> =
T extends Flattable<infer U> ? Flatten<U> :
T extends undefined | null | boolean | number | bigint | string | Uint8Array ? T :
T extends [infer U, ...(infer V)] ? [Flatten<U>, ...Flatten<V>] :
T extends (infer U)[] ? Flatten<U>[] :
T extends Record<string, unknown> ? { [K in keyof T]: Flatten<T[K]> } :
T;
export function flatten<T>(value: T): Flatten<T> {
if (typeof value === 'object' && value !== null && 'flatten' in value)
return flatten(value.flatten) as Flatten<T>;
if (typeof value === 'undefined' || value === null || typeof value === 'boolean' || typeof value === 'number' || typeof value === 'bigint' || typeof value === 'string' || value instanceof Uint8Array)
return value as Flatten<T>;
if (Array.isArray(value))
return value.map(element => flatten(element)) as Flatten<T>;
if (typeof value === 'object')
return mapRecord(value as Record<PropertyKey, unknown>, value => flatten(value)) as Flatten<T>;
return value as Flatten<T>;
}
}
|