Sync-collect every ref/manifest in `value`, then async-replace each, then sync-substitute.
( value: unknown, options: RedactLargeValueRefsOptions )
| 75 | |
| 76 | /** Sync-collect every ref/manifest in `value`, then async-replace each, then sync-substitute. */ |
| 77 | async function redactValueRefs( |
| 78 | value: unknown, |
| 79 | options: RedactLargeValueRefsOptions |
| 80 | ): Promise<unknown> { |
| 81 | const refs: object[] = [] |
| 82 | collectRefs(value, refs, new WeakSet()) |
| 83 | if (refs.length === 0) return value |
| 84 | |
| 85 | const replacements = new Map<object, unknown>() |
| 86 | for (const ref of refs) { |
| 87 | if (replacements.has(ref)) continue |
| 88 | replacements.set(ref, await replaceRef(ref, options)) |
| 89 | } |
| 90 | return substituteRefs(value, replacements) |
| 91 | } |
| 92 | |
| 93 | /** Depth-first sync walk collecting ref/manifest nodes (not recursing into them). */ |
| 94 | function collectRefs(value: unknown, out: object[], seen: WeakSet<object>): void { |
no test coverage detected