(object: unknown)
| 1 | import { isPlainObject } from 'lodash-es'; |
| 2 | |
| 3 | export function splitRecursive(object: unknown): { |
| 4 | rawDelta: Record<string, any>; |
| 5 | defaultOverwrites: Record<string, any> | undefined; |
| 6 | } { |
| 7 | if (isPlainObject(object) && typeof object === 'object' && object !== null) { |
| 8 | const { _user, _date, ...rest } = object as any; |
| 9 | const defaultOverwrites: Record<string, any> = { _user, _date }; |
| 10 | |
| 11 | for (const key in rest) { |
| 12 | const { rawDelta, defaultOverwrites: innerDefaultOverwrites } = splitRecursive(rest[key]); |
| 13 | rest[key] = rawDelta; |
| 14 | |
| 15 | if (innerDefaultOverwrites) { |
| 16 | defaultOverwrites[key] = innerDefaultOverwrites; |
| 17 | } else if (Array.isArray(rest[key]) && _user !== undefined && _date !== undefined) { |
| 18 | defaultOverwrites[key] = { _user, _date }; |
| 19 | } |
| 20 | } |
| 21 | |
| 22 | return { rawDelta: rest, defaultOverwrites }; |
| 23 | } else if (Array.isArray(object)) { |
| 24 | const rest: Record<string, any> = []; |
| 25 | const defaultOverwrites: any[] = []; |
| 26 | |
| 27 | for (const key in object) { |
| 28 | const { rawDelta, defaultOverwrites: innerDefaultOverwrites } = splitRecursive(object[key]); |
| 29 | rest[key] = rawDelta; |
| 30 | if (innerDefaultOverwrites) defaultOverwrites[key] = innerDefaultOverwrites; |
| 31 | } |
| 32 | |
| 33 | return { rawDelta: rest, defaultOverwrites: defaultOverwrites.length > 0 ? defaultOverwrites : undefined }; |
| 34 | } |
| 35 | |
| 36 | return { rawDelta: object as any, defaultOverwrites: undefined }; |
| 37 | } |
no outgoing calls
no test coverage detected