From a8e96f1efbf5bd9c0ba52fcd83cb81cf61a73312 Mon Sep 17 00:00:00 2001 From: Romain Menke Date: Sun, 23 Jul 2023 11:14:41 +0200 Subject: [PATCH] ignore urls with a fragment or query --- lib/parse-styles.js | 23 ++++++++++++++++++++++- test/fixtures/filter-ignore.css | 2 ++ test/fixtures/filter-ignore.expected.css | 2 ++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/parse-styles.js b/lib/parse-styles.js index d021dd4d..0c35f5e7 100644 --- a/lib/parse-styles.js +++ b/lib/parse-styles.js @@ -28,7 +28,7 @@ async function parseStyles( stmt.layer = joinLayer(layer, stmt.layer || []) // skip protocol base uri (protocol://url) or protocol-relative - if (stmt.type !== "import" || /^(?:[a-z]+:)?\/\//i.test(stmt.uri)) { + if (stmt.type !== "import" || !isProcessableURL(stmt.uri)) { continue } @@ -219,4 +219,25 @@ async function loadImportContent( ) } +function isProcessableURL(uri) { + if (/^(?:[a-z]+:)?\/\//i.test(uri)) { + return false + } + + try { + // needs a base to parse properly + const url = new URL(uri, "https://example.com") + + if (url.hash) { + return false + } + + if (url.search) { + return false + } + } catch {} // Ignore + + return true +} + module.exports = parseStyles diff --git a/test/fixtures/filter-ignore.css b/test/fixtures/filter-ignore.css index d134503d..923d64d4 100644 --- a/test/fixtures/filter-ignore.css +++ b/test/fixtures/filter-ignore.css @@ -12,4 +12,6 @@ @import url("//css"); @import url('//css'); @import url(//css); +@import url('foo.css?query=string'); +@import url('foo.css#hash'); content{} diff --git a/test/fixtures/filter-ignore.expected.css b/test/fixtures/filter-ignore.expected.css index a9791220..03093e41 100644 --- a/test/fixtures/filter-ignore.expected.css +++ b/test/fixtures/filter-ignore.expected.css @@ -13,6 +13,8 @@ @import url("//css"); @import url('//css'); @import url(//css); +@import url('foo.css?query=string'); +@import url('foo.css#hash'); @media (min-width: 25em){ ignore{} }