2022-12-22 17:02:34 +01:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
2022-11-15 09:35:48 +01:00
|
|
|
export const getDeepKeys = (obj: any): string[] => {
|
|
|
|
|
let keys: string[] = []
|
|
|
|
|
for (const key in obj) {
|
|
|
|
|
if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
|
|
|
|
|
const subkeys = getDeepKeys(obj[key])
|
|
|
|
|
keys = keys.concat(
|
|
|
|
|
subkeys.map(function (subkey) {
|
2023-02-23 14:44:37 +01:00
|
|
|
return key + parseKey(subkey)
|
2022-11-15 09:35:48 +01:00
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
} else if (Array.isArray(obj[key])) {
|
2023-03-01 09:01:36 +01:00
|
|
|
if (obj[key].length === 0) continue
|
2023-03-02 11:34:57 +01:00
|
|
|
|
2023-04-06 18:11:08 +02:00
|
|
|
if (typeof obj[key][0] !== 'object') {
|
|
|
|
|
keys.push(key)
|
|
|
|
|
keys = keys.concat(
|
|
|
|
|
obj[key].map((_: string, index: number) => `${key}[${index}]`)
|
|
|
|
|
)
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-02 11:34:57 +01:00
|
|
|
const subkeys = getDeepKeys(obj[key][0])
|
|
|
|
|
if (obj[key].length > 1) {
|
2023-03-01 09:01:36 +01:00
|
|
|
keys = keys.concat(
|
|
|
|
|
subkeys.map(function (subkey) {
|
2023-03-02 11:34:57 +01:00
|
|
|
return `${key}.flatMap(item => item${parseKey(subkey)})`
|
2023-03-01 09:01:36 +01:00
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
}
|
2023-02-23 14:44:37 +01:00
|
|
|
keys = keys.concat(
|
2023-05-12 12:11:52 -04:00
|
|
|
subkeys.map(function (subkey) {
|
|
|
|
|
return `${key}[0]${parseKey(subkey)}`
|
2023-02-23 14:44:37 +01:00
|
|
|
})
|
|
|
|
|
)
|
2022-11-15 09:35:48 +01:00
|
|
|
} else {
|
|
|
|
|
keys.push(key)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return keys
|
|
|
|
|
}
|
2023-02-23 14:44:37 +01:00
|
|
|
|
|
|
|
|
const parseKey = (key: string) => {
|
2023-03-01 09:01:36 +01:00
|
|
|
if (
|
2023-10-16 14:33:13 +02:00
|
|
|
(key.includes(' ') ||
|
|
|
|
|
key.includes('-') ||
|
|
|
|
|
!isNaN(key as unknown as number)) &&
|
2023-03-01 09:01:36 +01:00
|
|
|
!key.includes('.flatMap(item => item') &&
|
|
|
|
|
!key.includes("['") &&
|
|
|
|
|
!key.includes("']")
|
|
|
|
|
) {
|
2023-02-23 14:44:37 +01:00
|
|
|
return `['${key}']`
|
|
|
|
|
}
|
|
|
|
|
return `.${key}`
|
|
|
|
|
}
|