Repository navigation
fix: keep prototype-named classes without string mappings - #593
Open
feritcemkahraman wants to merge 1 commit into
Open
feritcemkahraman wants to merge 1 commit into
feritcemkahraman wants to merge 1 commit into
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
With
const cx = classNames.bind({ a: 'a_hash' }),cx('constructor')andcx({ constructor: true })return the native Object function instead of a class string. Other names inherited from Object.prototype can also corrupt combined class lists.Use a bound mapping only when its value is a string. This keeps unmapped names intact and preserves explicit prototype-named mappings, inherited string mappings, and the existing empty-string fallback. Each mapping is read once.
Both string and object regressions fail before the fix. All 66 Node tests and the TypeScript declaration checks pass with the fix.
Local performance smoke check
Compared the unchanged main bind implementation with this change on Node 24.21.0, using bound styles and the benchmark's string, object, mixed, and nested-array argument shapes. Median of seven alternating runs, 200,000 calls per sample, after warmup, on one logical CPU:
The browser/JSPerf benchmark and the older Node matrix were not run locally.