Skip to content

Commit

Permalink
Use less hacky fix for urls detected as custom properties
Browse files Browse the repository at this point in the history
  • Loading branch information
thecrypticace committed Jan 31, 2022
1 parent ce98735 commit 53865e4
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions src/lib/generateRules.js
Expand Up @@ -262,11 +262,37 @@ function parseRules(rule, cache, options = {}) {
const IS_VALID_PROPERTY_NAME = /^[a-z_-]/

function isValidPropName(name) {
// TODO: properly fix this!
return IS_VALID_PROPERTY_NAME.test(name) && !name.startsWith('http')
return IS_VALID_PROPERTY_NAME.test(name)
}

/**
* @param {string} declaration
* @returns {boolean}
*/
function looksLikeUri(declaration) {
// Quick bailout for obvious non-urls
// This doesn't support schemes that don't use a leading // but that's unlikely to be a problem
if (!declaration.includes('://')) {
return false
}

try {
const url = new URL(declaration)
return url.scheme !== '' && url.host !== ''
} catch (err) {
// Definitely not a valid url
return false
}
}

function isParsableCssValue(property, value) {
// We don't want to to treat [https://example.com] as a custom property
// Even though, according to the CSS grammar, it's a totally valid CSS declaration
// So we short-circuit here by checking if the custom property looks like a url
if (looksLikeUri(`${property}:${value}`)) {
return false
}

try {
postcss.parse(`a{${property}:${value}}`).toResult()
return true
Expand Down

0 comments on commit 53865e4

Please sign in to comment.