tailwindcss/tests
Robin Malfait 527031d5f6
Improve data type analyses for arbitrary values (#9320)
* improve split logic by delimiter

The original RegEx did mostly what we want, the idea is that we wanted
to split by a `,` but one that was not within `()`. This is useful when
you define multiple background colors for example:
```html
<div class="bg-[rgb(0,0,0),rgb(255,255,255)]"></div>
```

In this case splitting by the regex would result in the proper result:
```js
let result = [
  'rgb(0,0,0)',
  'rgb(255,255,255)'
]
```

Visually, you can think of it like:
```
    ┌─[./example.html]
    │
∙ 1 │   <div class="bg-[rgb(0,0,0),rgb(255,255,255)]"></div>
    ·                       ──┬── ┬    ─────┬─────
    ·                         │   │         ╰─────── Guarded by parens
    ·                         │   ╰───────────────── We will split here
    ·                         ╰───────────────────── Guarded by parens
    │
    └─
```

We properly split by `,` not inside a `()`. However, this RegEx fails
the moment you have deeply nested RegEx values.

Visually, this is what's happening:
```
    ┌─[./example.html]
    │
∙ 1 │   <div class="bg-[rgba(0,0,0,var(--alpha))]"></div>
    ·                         ┬ ┬ ┬
    ·                         ╰─┴─┴── We accidentally split here
    │
    └─
```
This is because on the right of the `,`, the first paren is an opening
paren `(` instead of a closing one `)`.

I'm not 100% sure how we can improve the RegEx to handle that case as
well, instead I wrote a small `splitBy` function that allows you to
split the string by a character (just like you could do before) but
ignores the ones inside the given exceptions. This keeps track of a
stack to know whether we are within parens or not.

Visually, the fix looks like this:
```
    ┌─[./example.html]
    │
∙ 1 │   <div class="bg-[rgba(0,0,0,var(--alpha)),rgb(255,255,255,var(--alpha))]"></div>
    ·                         ┬ ┬ ┬             ┬       ┬   ┬   ┬
    ·                         │ │ │             │       ╰───┴───┴── Guarded by parens
    ·                         │ │ │             ╰────────────────── We will split here
    ·                         ╰─┴─┴──────────────────────────────── Guarded by parens
    │
    └─
```

* use already existing `splitAtTopLevelOnly` function

* add faster implemetation for `splitAtTopLevelOnly`

However, the faster version can't handle separators with multiple
characters right now. So instead of using buggy code or only using the
"slower" code, we've added a fast path where we use the faster code
wherever we can.

* use `splitAtTopLevelOnly` directly

* make split go brrrrrrr

* update changelog

* remove unncessary array.from call

Co-authored-by: Jordan Pittman <jordan@cryptica.me>
2022-09-14 14:08:56 +02:00
..
__snapshots__ Honor the hidden attribute on elements in preflight (#9174) 2022-08-24 17:05:44 -04:00
fixtures remove unused fixture files 2021-12-15 18:13:09 +01:00
plugins Add support for configuring default font-feature-settings for a font-family (#9039) 2022-08-08 15:02:08 -04:00
postcss-plugins/nesting Prevent nesting plugin from breaking other plugins (#7563) 2022-02-21 10:12:39 -05:00
util Don't rewrite source maps for @layer rules (#8971) 2022-07-27 12:19:08 -04:00
animations.test.js Correctly parse and prefix animation names with dots (#7163) 2022-03-01 14:08:43 -05:00
apply.test.css Change how we handle defaults (optimized or not) (#6926) 2022-01-07 11:39:45 -05:00
apply.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
apply.test.js Don’t replace all instances of the same class 2022-08-15 16:05:47 -04:00
arbitrary-properties.test.js Fix parallel variant ordering clash (#9282) 2022-09-09 13:12:43 -04:00
arbitrary-values.test.css Improve data type analyses for arbitrary values (#9320) 2022-09-14 14:08:56 +02:00
arbitrary-values.test.html Improve data type analyses for arbitrary values (#9320) 2022-09-14 14:08:56 +02:00
arbitrary-values.test.js Improve type detection for arbitrary color values (#8201) 2022-04-28 11:18:51 +01:00
arbitrary-variants.test.js Fix parallel variant ordering clash (#9282) 2022-09-09 13:12:43 -04:00
basic-usage.test.css Add support for visibility: collapse with new collapsed utility (#9181) 2022-09-09 13:19:24 -04:00
basic-usage.test.html Add support for visibility: collapse with new collapsed utility (#9181) 2022-09-09 13:19:24 -04:00
basic-usage.test.js Fix ring color utility generation when using respectDefaultRingColorOpacity (#9070) 2022-08-10 10:36:04 -04:00
collapse-adjacent-rules.test.css Split ::backdrop into separate defaults group (#8567) 2022-06-09 16:26:18 -04:00
collapse-adjacent-rules.test.html Recursively collapse adjacent rules (#7565) 2022-02-21 12:58:12 -05:00
collapse-adjacent-rules.test.js Handle duplicate atrules without children (#8122) 2022-04-15 12:24:27 -04:00
collapse-duplicate-declarations.test.js Improve collapsing of duplicate declarations (#6856) 2022-01-03 15:41:49 +01:00
color-opacity-modifiers.test.js Don't inherit gradient "to" from parent (#8489) 2022-06-01 15:25:45 -04:00
color.test.js Allow for custom properties in rgb, rgba, hsl and hsla colors (#7933) 2022-03-24 12:43:21 +01:00
combined-selectors.test.js Change how we handle defaults (optimized or not) (#6926) 2022-01-07 11:39:45 -05:00
configurePlugins.test.js Use safelist 2022-07-18 09:31:45 -04:00
containerPlugin.test.js Partially revert tuple syntax PR for screens: #6104 (#6289) 2021-12-07 18:49:40 +01:00
context-reuse.test.html Invalidate context when main css changes (#7626) 2022-02-25 13:12:45 -05:00
context-reuse.test.js Invalidate context when main css changes (#7626) 2022-02-25 13:12:45 -05:00
custom-extractors.test.css Update color parsing and formatting (#5442) 2021-09-09 16:15:53 +02:00
custom-extractors.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
custom-extractors.test.js Handle old to new config when normalizing the config (#5658) 2021-10-01 12:56:54 +02:00
custom-plugins.test.js Change how we handle defaults (optimized or not) (#6926) 2022-01-07 11:39:45 -05:00
custom-separator.test.css JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
custom-separator.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
custom-separator.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
custom-transformers.test.html Use real files for custom transformer test 2021-12-04 13:38:40 -05:00
custom-transformers.test.js Use real files for custom transformer test 2021-12-04 13:38:40 -05:00
custom-transformers.test.php Use real files for custom transformer test 2021-12-04 13:38:40 -05:00
customConfig.test.js Expose context.sortClassList(classes) (#7412) 2022-02-10 18:06:41 +01:00
dark-mode.test.js Re-enable new features 2022-04-12 14:13:04 -04:00
default-extractor.test.js Fix "Maximum call stack size exceeded" bug (#8636) 2022-06-14 14:17:40 +02:00
defaultConfig.test.js Improve public API (#5526) 2021-09-26 12:44:13 +02:00
defaultTheme.test.js Improve public API (#5526) 2021-09-26 12:44:13 +02:00
detect-nesting.test.js Improve nesting detection (#6011) 2021-11-10 13:15:32 +01:00
escapeClassName.test.js [WIP] Unify JIT and AOT code paths (#4188) 2021-05-07 13:56:15 -04:00
evaluateTailwindFunctions.test.js Fix theme(fontFamily.*) when family contains fontFeatureSettings config (#9217) 2022-08-30 17:18:41 +01:00
experimental.test.js Expose context.sortClassList(classes) (#7412) 2022-02-10 18:06:41 +01:00
extractor-edge-cases.test.js Improve before and after variants (#5820) 2021-10-18 18:11:34 +02:00
flattenColorPalette.test.js [WIP] Unify JIT and AOT code paths (#4188) 2021-05-07 13:56:15 -04:00
format-variant-selector.test.js Enforce the order of pseudo elements (#6018) 2021-11-12 16:38:03 +01:00
getClassList.test.js Add support for alpha values in safelist (#8774) 2022-07-04 16:37:38 -04:00
getSortOrder.test.js Implement getClassOrder instead of sortClassList (#7459) 2022-02-16 11:03:00 +01:00
import-syntax.test.css Split ::backdrop into separate defaults group (#8567) 2022-06-09 16:26:18 -04:00
import-syntax.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
import-syntax.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
important-boolean.test.css Split ::backdrop into separate defaults group (#8567) 2022-06-09 16:26:18 -04:00
important-boolean.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
important-boolean.test.js Re-use existing entries in the rule cache (#9208) 2022-08-29 14:13:32 -04:00
important-modifier-prefix.test.css Split ::backdrop into separate defaults group (#8567) 2022-06-09 16:26:18 -04:00
important-modifier-prefix.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
important-modifier-prefix.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
important-modifier.test.js Only add ! to selector class matching template candidate (#7664) 2022-02-25 13:17:44 -05:00
important-selector.test.css Split ::backdrop into separate defaults group (#8567) 2022-06-09 16:26:18 -04:00
important-selector.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
important-selector.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
kitchen-sink.test.css Split ::backdrop into separate defaults group (#8567) 2022-06-09 16:26:18 -04:00
kitchen-sink.test.html Add variants for orientation media feature (#6046) 2021-11-23 14:59:25 -05:00
kitchen-sink.test.js Add ::backdrop to universal defaults (#8526) 2022-06-06 15:53:08 -04:00
layer-at-rules.test.js Expose context.sortClassList(classes) (#7412) 2022-02-10 18:06:41 +01:00
layer-without-tailwind.test.css JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
layer-without-tailwind.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
layer-without-tailwind.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
match-components.test.js Change how we handle defaults (optimized or not) (#6926) 2022-01-07 11:39:45 -05:00
match-variants.test.js Feature flag matchVariant API 2022-05-31 13:15:14 -04:00
minimum-impact-selector.test.js Enable optimize universal defaults by default (#5635) 2021-10-06 17:45:26 +02:00
modify-selectors.test.css JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
modify-selectors.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
modify-selectors.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
mutable.test.css JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
mutable.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
mutable.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
negated-content-ignore.test.html Fix using negated content globs (#5625) 2021-09-29 11:15:31 +01:00
negated-content-include.test.html Fix using negated content globs (#5625) 2021-09-29 11:15:31 +01:00
negated-content.test.js Change how we handle defaults (optimized or not) (#6926) 2022-01-07 11:39:45 -05:00
negateValue.test.js Make negative values a first-class feature, rather than theme-driven (#5709) 2021-10-06 13:42:05 -04:00
negative-prefix.test.js Allow negating utilities using min/max/clamp (#9237) 2022-09-01 12:15:23 -04:00
normalize-config.test.js Warn about invalid globs in content (#6449) 2021-12-13 16:00:31 +01:00
normalize-data-types.test.js Don’t add spaces around raw / that are preceded by numbers (#8688) 2022-06-20 10:49:55 -04:00
normalize-screens.test.js Partially revert tuple syntax PR for screens: #6104 (#6289) 2021-12-07 18:49:40 +01:00
opacity.test.js Add future flag to disable color opacity utility plugins (#9088) 2022-08-15 13:45:02 -04:00
parallel-variants.test.js Remove text opacity CSS variables from ::marker (#8622) 2022-06-14 10:09:09 -04:00
parseAnimationValue.test.js ensure we don't override the name (#5602) 2021-09-26 07:44:41 -04:00
parseObjectStyles.test.js Preserve case of css variables added by plugins (#6888) 2022-01-04 23:03:41 -05:00
prefers-contrast.test.js Fix parallel variant ordering clash (#9282) 2022-09-09 13:12:43 -04:00
prefix.test.css Split ::backdrop into separate defaults group (#8567) 2022-06-09 16:26:18 -04:00
prefix.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
prefix.test.js Fix usage of special-character prefixes (#8772) 2022-07-04 14:42:27 -04:00
prefixSelector.test.js Remove prefix as a function (#5829) 2021-10-19 15:22:49 +02:00
preflight.test.js Fix preflight border color fallback (#7288) 2022-02-01 11:27:42 -05:00
raw-content.test.css Add support for visibility: collapse with new collapsed utility (#9181) 2022-09-09 13:19:24 -04:00
raw-content.test.html Add support for visibility: collapse with new collapsed utility (#9181) 2022-09-09 13:19:24 -04:00
raw-content.test.js Move defaults to their own always-on layer (#6500) 2021-12-14 12:21:38 -05:00
relative-purge-paths.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
relative-purge-paths.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
resolve-defaults-at-rules.test.js Split ::backdrop into separate defaults group (#8567) 2022-06-09 16:26:18 -04:00
resolveConfig.test.js Fix issue with Tailwind modifying global state (#9294) 2022-09-09 11:45:25 -04:00
responsive-and-variants-atrules.test.css JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
responsive-and-variants-atrules.test.html JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
responsive-and-variants-atrules.test.js JIT by default - move tests and make them consistent (#5374) 2021-09-03 13:48:16 +02:00
safelist.test.js Add support for alpha values in safelist (#8774) 2022-07-04 16:37:38 -04:00
screenAtRule.test.js Refactor internals to decouple watch strategies and extract IO 2021-05-26 09:43:05 -04:00
shared-state.test.js Improve DEBUG parsing: only take care of tailwindcss and not tailwind (#6804) 2021-12-30 16:41:23 +01:00
source-maps.test.js Don't rewrite source maps for @layer rules (#8971) 2022-07-27 12:19:08 -04:00
syntax-lit-html.test.js Add test for lit-html syntax 2021-09-21 12:41:58 -04:00
syntax-svelte.test.js Fix svelte test 2021-09-21 12:43:44 -04:00
syntax-svelte.test.svelte Rename svelte tests 2021-09-21 12:37:49 -04:00
tailwind-screens.test.js Partially revert tuple syntax PR for screens: #6104 (#6289) 2021-12-07 18:49:40 +01:00
to-path.test.js Support square bracket notation in paths (#6519) 2021-12-15 11:09:29 -05:00
variant-grouping.test.skip.js Skip tests ending in .test.skip.js 2022-06-01 06:16:39 -04:00
variants.test.css Remove text opacity CSS variables from ::marker (#8622) 2022-06-14 10:09:09 -04:00
variants.test.html Add optional variant (#8486) 2022-06-01 08:39:43 -04:00
variants.test.js Handle variants in utility selectors using :where() and :has() (#9309) 2022-09-12 15:08:31 -04:00
warnings.test.js Show warnings for invalid content config (#7065) 2022-01-14 09:47:39 -05:00
withAlphaVariable.test.js Update color parsing and formatting (#5442) 2021-09-09 16:15:53 +02:00