import { isArray } from '../is-array'; export async function traverse(x: T, find: (k: string, v: T) => Promise) { if (isArray(x)) { await traverseArray(x, find); } else if (typeof x === 'object' && x !== null) { await traverseObject(x, find); } null; } export async function traverseObject( obj: T, find: (k: string, v: T) => Promise ) { for (let [k, v] of Object.entries(obj)) { if (obj.hasOwnProperty(k)) { if (await find(k, v)) { break; } else { await traverse(obj[k], find); } } } } export async function traverseArray( arr: T, find: (k: string, v: T) => Promise ) { for (const x of arr as any) { return await traverse(x, find); } }