unjs / defu

🌊 Assign default properties recursively
MIT License
1.02k stars 21 forks source link

✨ Bring back nullish values support via option #95

Open jd-solanki opened 1 year ago

jd-solanki commented 1 year ago

Describe the feature

Hi πŸ‘‹πŸ»

I'm author of Anu UI lib. I'm using defu and it's doing an amazing job until I found that it skips nullish values undefined& null 😞

Why?

If we want to allow explicitly set null or undefined for property it's not possible ATM.

I'm trying to implement global prop defaults via vue plugin options for my lib. If user wants to disable some prop, the user can pass undefined in the plugin option but unfortunately defu skips that and uses default from component props definition 😬

Proposed Solution

We can keep the defu's default behavior and introduce option to consider nullish value while merging like below:

defu(obj, defaults, { skipNullish: false })

Additional context

I guess this was already implemented before and we removed this in this PR.

I can use mentioned alternatives but those aren't from unjs family and are outdated (might be vulnerable) which makes defu one and only choice.

Additional information

jd-solanki commented 8 months ago

Hi,

I'm rewriting Anu for v1 and trying to remove external libs as much as possible. If defu bring back this feature via custom merger then this will allow me to remove deepmerge-ts lib.

There are few upvotes as well that might change your mind to reintroduce this feature.


I tried creating customDefu but I defu isn't passing undefined/null values πŸ€·πŸ»β€β™‚οΈ

Yizack commented 3 months ago

Hi, sometimes while using defu I wish it could be able to not skip null values ​​as well, hope this is reconsidered 😊