From eb9899b3cfdae776a918a07360dda26396ffbcf3 Mon Sep 17 00:00:00 2001 From: Romain Menke <11521496+romainmenke@users.noreply.github.com> Date: Sat, 16 Mar 2024 01:32:16 +0100 Subject: [PATCH] Allow urls that contain fragments, fixes #560 (#561) --- lib/parse-styles.js | 5 ---- test/fixtures/filter-ignore.css | 1 - test/fixtures/filter-ignore.expected.css | 1 - test/fixtures/imports/modules/subpath/a.css | 3 +++ .../imports/modules/subpath/package.json | 6 +++++ .../imports/modules/subpath/style.css | 1 + test/fixtures/subpath.css | 1 + test/fixtures/subpath.expected.css | 3 +++ test/resolve.js | 23 +++++++++++++++++++ 9 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 test/fixtures/imports/modules/subpath/a.css create mode 100644 test/fixtures/imports/modules/subpath/package.json create mode 100644 test/fixtures/imports/modules/subpath/style.css create mode 100644 test/fixtures/subpath.css create mode 100644 test/fixtures/subpath.expected.css diff --git a/lib/parse-styles.js b/lib/parse-styles.js index 68a1fef6..9dd43d7f 100644 --- a/lib/parse-styles.js +++ b/lib/parse-styles.js @@ -227,11 +227,6 @@ function isProcessableURL(uri) { 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 } diff --git a/test/fixtures/filter-ignore.css b/test/fixtures/filter-ignore.css index 923d64d4..f4099c80 100644 --- a/test/fixtures/filter-ignore.css +++ b/test/fixtures/filter-ignore.css @@ -13,5 +13,4 @@ @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 25ec93d9..f16a2d75 100644 --- a/test/fixtures/filter-ignore.expected.css +++ b/test/fixtures/filter-ignore.expected.css @@ -14,7 +14,6 @@ @import url('//css'); @import url(//css); @import url('foo.css?query=string'); -@import url('foo.css#hash'); @media (min-width: 25em){ ignore{} } diff --git a/test/fixtures/imports/modules/subpath/a.css b/test/fixtures/imports/modules/subpath/a.css new file mode 100644 index 00000000..213d0676 --- /dev/null +++ b/test/fixtures/imports/modules/subpath/a.css @@ -0,0 +1,3 @@ +.foo { + color: green; +} diff --git a/test/fixtures/imports/modules/subpath/package.json b/test/fixtures/imports/modules/subpath/package.json new file mode 100644 index 00000000..42b36fb4 --- /dev/null +++ b/test/fixtures/imports/modules/subpath/package.json @@ -0,0 +1,6 @@ +{ + "style": "style.css", + "imports": { + "#a.css": "./a.css" + } +} diff --git a/test/fixtures/imports/modules/subpath/style.css b/test/fixtures/imports/modules/subpath/style.css new file mode 100644 index 00000000..fbf05686 --- /dev/null +++ b/test/fixtures/imports/modules/subpath/style.css @@ -0,0 +1 @@ +@import '#a.css'; diff --git a/test/fixtures/subpath.css b/test/fixtures/subpath.css new file mode 100644 index 00000000..c2cd8b6a --- /dev/null +++ b/test/fixtures/subpath.css @@ -0,0 +1 @@ +@import "subpath"; diff --git a/test/fixtures/subpath.expected.css b/test/fixtures/subpath.expected.css new file mode 100644 index 00000000..213d0676 --- /dev/null +++ b/test/fixtures/subpath.expected.css @@ -0,0 +1,3 @@ +.foo { + color: green; +} diff --git a/test/resolve.js b/test/resolve.js index cde06384..53d475c3 100644 --- a/test/resolve.js +++ b/test/resolve.js @@ -1,6 +1,8 @@ "use strict" // external tooling const test = require("ava") +const fs = require("fs") +const path = require("path") // internal tooling const checkFixture = require("./helpers/check-fixture") @@ -72,3 +74,24 @@ test( { path: null, addModulesDirectories: ["shared_modules"] }, { from: "test/fixtures/imports/foo.css" }, ) + +test( + "should resolve modules with node subpath imports with a custom resolver", + checkFixture, + "subpath", + { + resolve: (id, basedir) => { + // see: https://nodejs.org/api/packages.html#subpath-imports + if (id.startsWith("#")) { + const pkgJSON = JSON.parse( + fs.readFileSync(path.join(basedir, "package.json")), + ) + + return path.join(basedir, pkgJSON.imports[id]) + } + + return id + }, + path: "test/fixtures/imports/modules", + }, +)