MCPcopy
hub / github.com/vuejs/core / traverse

Function traverse

packages/reactivity/src/watch.ts:333–369  ·  view source on GitHub ↗
(
  value: unknown,
  depth: number = Infinity,
  seen?: Map<unknown, number>,
)

Source from the content-addressed store, hash-verified

331}
332
333export function traverse(
334 value: unknown,
335 depth: number = Infinity,
336 seen?: Map<unknown, number>,
337): unknown {
338 if (depth <= 0 || !isObject(value) || (value as any)[ReactiveFlags.SKIP]) {
339 return value
340 }
341
342 seen = seen || new Map()
343 if ((seen.get(value) || 0) >= depth) {
344 return value
345 }
346 seen.set(value, depth)
347 depth--
348 if (isRef(value)) {
349 traverse(value.value, depth, seen)
350 } else if (isArray(value)) {
351 for (let i = 0; i < value.length; i++) {
352 traverse(value[i], depth, seen)
353 }
354 } else if (isSet(value) || isMap(value)) {
355 value.forEach((v: any) => {
356 traverse(v, depth, seen)
357 })
358 } else if (isPlainObject(value)) {
359 for (const key in value) {
360 traverse(value[key], depth, seen)
361 }
362 for (const key of Object.getOwnPropertySymbols(value)) {
363 if (Object.prototype.propertyIsEnumerable.call(value, key)) {
364 traverse(value[key as any], depth, seen)
365 }
366 }
367 }
368 return value
369}

Callers 4

createWatcherFunction · 0.90
withDirectivesFunction · 0.90
reactiveGetterFunction · 0.85
watchFunction · 0.85

Calls 8

isObjectFunction · 0.90
isRefFunction · 0.90
isSetFunction · 0.90
isMapFunction · 0.90
isPlainObjectFunction · 0.90
forEachMethod · 0.80
getMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected