directus
1export function mapValuesDeep(obj: Record<string, any>, fn: (key: string, value: any) => any): Record<string, any> {
2return recurse(obj);
3
4function recurse(obj: Record<string, any>, prefix = ''): Record<string, any> {
5if (Array.isArray(obj)) {
6return obj.map((value, index) => {
7if (typeof value === 'object' && value !== null) {
8return recurse(value, prefix + `[${index}]`);
9} else {
10return fn(prefix + `[${index}]`, value);
11}
12});
13} else {
14return Object.fromEntries(
15Object.entries(obj).map(([key, value]) => {
16if (typeof value === 'object' && value !== null) {
17return [key, recurse(value, prefix + (prefix ? '.' : '') + key)];
18} else {
19return [key, fn(prefix + (prefix ? '.' : '') + key, value)];
20}
21}),
22);
23}
24}
25}
26