( check: (value: unknown) => boolean, payload: unknown, segments: Segment[] = [], maps: Segment[][] = [], values: unknown[] = [], )
| 1 | export type Segment = string | number |
| 2 | |
| 3 | export function findDeepMatches( |
| 4 | check: (value: unknown) => boolean, |
| 5 | payload: unknown, |
| 6 | segments: Segment[] = [], |
| 7 | maps: Segment[][] = [], |
| 8 | values: unknown[] = [], |
| 9 | ): { maps: Segment[][], values: unknown[] } { |
| 10 | if (check(payload)) { |
| 11 | maps.push(segments) |
| 12 | values.push(payload) |
| 13 | } |
| 14 | else if (Array.isArray(payload)) { |
| 15 | payload.forEach((v, i) => { |
| 16 | findDeepMatches(check, v, [...segments, i], maps, values) |
| 17 | }) |
| 18 | } |
| 19 | else if (isObject(payload)) { |
| 20 | for (const key in payload) { |
| 21 | findDeepMatches(check, payload[key], [...segments, key], maps, values) |
| 22 | } |
| 23 | } |
| 24 | |
| 25 | return { maps, values } |
| 26 | } |
| 27 | |
| 28 | /** |
| 29 | * Get constructor of the value |
no test coverage detected