Skip to content

Commit

Permalink
Don’t mangle vars with numbers in them
Browse files Browse the repository at this point in the history
  • Loading branch information
thecrypticace committed Apr 11, 2022
1 parent c1ed8dd commit 70bb3a9
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 4 deletions.
14 changes: 10 additions & 4 deletions src/util/dataTypes.js
Expand Up @@ -42,10 +42,16 @@ export function normalize(value, isRoot = true) {

// Add spaces around operators inside calc() that do not follow an operator
// or '('.
return value.replace(
/(-?\d*\.?\d(?!\b-.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([+\-/*])/g,
'$1 $2 '
)
value = value.replace(/calc\(.+\)/g, (match) => {
return match.replace(
/(-?\d*\.?\d(?!\b-.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([+\-/*])/g,
'$1 $2 '
)
})

// Add spaces around some operators not inside calc() that do not follow an operator
// or '('.
return value.replace(/(-?\d*\.?\d(?!\b-.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([\/])/g, '$1 $2 ')
}

export function url(value) {
Expand Down
41 changes: 41 additions & 0 deletions tests/normalize-data-types.test.js
@@ -0,0 +1,41 @@
import { normalize } from '../src/util/dataTypes'

let table = [
['foo', 'foo'],
['foo-bar', 'foo-bar'],
['16/9', '16 / 9'],

// '_'s are converted to spaces except when escaped
['foo_bar', 'foo bar'],
['foo__bar', 'foo bar'],
['foo\\_bar', 'foo_bar'],

// Urls are preserved as-is
[
'url("https://example.com/abc+def/some-path/2022-01-01-abc/some_underscoered_path")',
'url("https://example.com/abc+def/some-path/2022-01-01-abc/some_underscoered_path")',
],

// var(…) is preserved as is
['var(--foo)', 'var(--foo)'],
['var(--headings-h1-size)', 'var(--headings-h1-size)'],

// calc(…) get's spaces around operators
['calc(1+2)', 'calc(1 + 2)'],
['calc(100%+1rem)', 'calc(100% + 1rem)'],
['calc(var(--headings-h1-size)*100)', 'calc(var(--headings-h1-size) * 100)'],
[
'calc(var(--headings-h1-size)*calc(100%+50%))',
'calc(var(--headings-h1-size) * calc(100% + 50%))',
],
['var(--heading-h1-font-size)', 'var(--heading-h1-font-size)'],
['var(--my-var-with-more-than-3-words)', 'var(--my-var-with-more-than-3-words)'],
['var(--width, calc(100%+1rem))', 'var(--width, calc(100% + 1rem))'],

// Misc
['color(0_0_0/1.0)', 'color(0 0 0 / 1.0)'],
]

it.each(table)('normalize data: %s', (input, output) => {
expect(normalize(input)).toBe(output)
})

0 comments on commit 70bb3a9

Please sign in to comment.