(first, second)
| 29 | * @returns {T & O | T | O} merged object of first and second object |
| 30 | */ |
| 31 | const cachedCleverMerge = (first, second) => { |
| 32 | if (second === undefined) return /** @type {T} */ (first); |
| 33 | if (first === undefined) return /** @type {O} */ (second); |
| 34 | if (typeof second !== class="st">"object" || second === null) { |
| 35 | return /** @type {O} */ (second); |
| 36 | } |
| 37 | if (typeof first !== class="st">"object" || first === null) { |
| 38 | return /** @type {T} */ (first); |
| 39 | } |
| 40 | |
| 41 | let innerCache = mergeCache.get(first); |
| 42 | if (innerCache === undefined) { |
| 43 | innerCache = new WeakMap(); |
| 44 | mergeCache.set(first, innerCache); |
| 45 | } |
| 46 | const prevMerge = /** @type {T & O} */ (innerCache.get(second)); |
| 47 | if (prevMerge !== undefined) return prevMerge; |
| 48 | const newMerge = _cleverMerge(first, second, true); |
| 49 | innerCache.set(second, newMerge); |
| 50 | return newMerge; |
| 51 | }; |
| 52 | |
| 53 | /** |
| 54 | * Caches d set property. |
no test coverage detected