diff --git a/lib/parse-styles.js b/lib/parse-styles.js index f6a67078..8a4aebfe 100644 --- a/lib/parse-styles.js +++ b/lib/parse-styles.js @@ -84,11 +84,12 @@ async function resolveImportId(result, stmt, options, state, postcss) { postcss ) - return stmt - } - - if (dataURL.isValid(stmt.from[stmt.from.length - 1])) { - return stmt + return + } else if (dataURL.isValid(stmt.from)) { + // Data urls can't be used a base url to resolve imports. + // When the parent statement has a data url + // and the current statement doesn't have a data url we ignore the statement. + return } const atRule = stmt.node diff --git a/package.json b/package.json index a81ea5f0..11d8e96c 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "devDependencies": { "ava": "^5.0.0", + "c8": "^8.0.0", "eslint": "^8.2.0", "eslint-config-problems": "^7.0.0", "eslint-plugin-prettier": "^4.0.0", @@ -42,7 +43,7 @@ "ci": "eslint . && ava", "lint": "eslint . --fix", "pretest": "npm run lint", - "test": "ava" + "test": "c8 ava" }, "eslintConfig": { "extends": "eslint-config-problems", diff --git a/test/fixtures/data-url.css b/test/fixtures/data-url.css index 6f1276ef..4b2b4b37 100644 --- a/test/fixtures/data-url.css +++ b/test/fixtures/data-url.css @@ -4,3 +4,7 @@ /* Mixed imports: */ @import url(data:text/css;base64,QGltcG9ydCB1cmwoZm9vLmNzcyk7CgpwIHsKICBjb2xvcjogYmx1ZTsKfQo=); @import url(data-url.css); + +/* url encoded: */ +@import url(data:text/css;plain,bar%20%7B%20color%3A%20green%20%7D); +@import url(data:text/css,bar%20%7B%20color%3A%20pink%20%7D); diff --git a/test/fixtures/data-url.expected.css b/test/fixtures/data-url.expected.css index e12aacba..af160fc5 100644 --- a/test/fixtures/data-url.expected.css +++ b/test/fixtures/data-url.expected.css @@ -3,4 +3,4 @@ p { color: green; } } }@media (min-width: 320px){@layer foo{ p { color: blue; } } }/* Mixed imports: */p { color: blue; -}p { color: pink; } +}p { color: pink; }/* url encoded: */bar { color: green }bar { color: pink }