MCPcopy
hub / github.com/directus/directus / splitRecursive

Function splitRecursive

api/src/utils/versioning/split-recursive.ts:3–37  ·  view source on GitHub ↗
(object: unknown)

Source from the content-addressed store, hash-verified

1import { isPlainObject } from 'lodash-es';
2
3export 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}

Callers 3

handleVersionFunction · 0.85
promoteMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected