Override designSystem methods by introducing a mockDesignSystem
#14718
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.

We can definitely change the name, also open for suggestions here.
The idea is as follows:
designSystem(and therefore keep all the existing functionality)decodeArbitraryValuesfunction such that we don't add spaces around operators anymore. This is a divergence from the actual implementation. This allows us to keep the whitespace from the candidate without trying to be smart about it.&:is(…). We do get rid of this wrapper in thismockDesignSystemfunction as well. This has a downside that if people literally wrote[&:is(p)]:flexthat it will be converted to[p]:flexbut I think that's reasonable.Another thing that this unlocks is that by overriding the
parseCandidateandparseVariantfunctions, that we can remove the layer of caching. This means that we don't have to cache anymore, and even better, we don't have to usestructuredClone(candidate)anymore. We usedstructuredClonebefore to make sure that we didn't mutate existing candidates in the cached design system. But now everything is fresh.Some examples:
Input:
Output before:
Output after: