(root: T, defaults: T)
| 14 | } |
| 15 | |
| 16 | export function makeSlim<T extends object>(root: T, defaults: T): T { |
| 17 | for (const [key, value] of Object.entries(root)) { |
| 18 | const defaultValue = (defaults as any)?.[key]; |
| 19 | |
| 20 | if (value === defaultValue) { |
| 21 | delete (root as any)[key]; |
| 22 | } else if (_isSlimmableObject(key, value, defaults)) { |
| 23 | makeSlim(value, defaultValue); |
| 24 | |
| 25 | if (Object.keys(value).length === 0) { |
| 26 | delete (root as any)[key]; |
| 27 | } |
| 28 | } |
| 29 | } |
| 30 | |
| 31 | return root as any; |
| 32 | } |
| 33 | |
| 34 | type WrapSlimAux = { |
| 35 | prev?: WrapSlimAux; |
no test coverage detected