diff --git a/packages/runtime-core/src/apiWatch.ts b/packages/runtime-core/src/apiWatch.ts index bc1054782..0fd6b050c 100644 --- a/packages/runtime-core/src/apiWatch.ts +++ b/packages/runtime-core/src/apiWatch.ts @@ -466,39 +466,32 @@ export function createPathGetter(ctx: any, path: string) { export function traverse( value: unknown, - depth?: number, - currentDepth = 0, + depth = Infinity, seen?: Set, ) { - if (!isObject(value) || (value as any)[ReactiveFlags.SKIP]) { + if (depth <= 0 || !isObject(value) || (value as any)[ReactiveFlags.SKIP]) { return value } - if (depth && depth > 0) { - if (currentDepth >= depth) { - return value - } - currentDepth++ - } - seen = seen || new Set() if (seen.has(value)) { return value } seen.add(value) + depth-- if (isRef(value)) { - traverse(value.value, depth, currentDepth, seen) + traverse(value.value, depth, seen) } else if (isArray(value)) { for (let i = 0; i < value.length; i++) { - traverse(value[i], depth, currentDepth, seen) + traverse(value[i], depth, seen) } } else if (isSet(value) || isMap(value)) { value.forEach((v: any) => { - traverse(v, depth, currentDepth, seen) + traverse(v, depth, seen) }) } else if (isPlainObject(value)) { for (const key in value) { - traverse(value[key], depth, currentDepth, seen) + traverse(value[key], depth, seen) } } return value