Open sandgraham opened 1 year ago
it might be worth looking into a codemod to automatically call the stitches' toString()
method. For example, it could definitely be worked into the clsx babel plugin.
Strings are always the best (as in most performant) path for clsx to operate, so our current usage is definitely the preferred approach. Adding a toString
check to clsx itself would be a significant performance hit (and byte size, percentage-wise). And your hasOwnProperty
example snippet wouldn't suffice as it wouldnt cover class
instances that have a toString
method on its prototype.
It'd have to be something like:
// ...
if (typeof mix.toString === 'function' && mix.toString !== Object.prototype.toString) {
str && (str += ' ');
str += mix.toString();
} else for (k in mix) {
if (mix[k]) {
str && (str += ' ');
str += k;
}
}
TBD - I'll run some benches to actually measure the impact
Hi there, I'm using a css-in-js library (stitches) which returns class names as objects with custom
toString
methods. This requires callingtoString
before passing the "class names" toclsx
- otherwiseclsx
assumes the object is a config/mapping object.I currently have a patch package which adds an additional check to the
toVal
function, checking to see if amix
object has it's owntoString
method and calls/returns that if so.I noticed that
classnames
has a condition for this (original PR). React also callstoString
if you pass an object toclassName
. I'm wondering if it might be useful to include this behavior inclsx
? I can contribute a PR if so.