You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: allow resolving package?query#fragment for packages with exports field (#655)
Resolving `package?query#fragment` to packages with exports field is allowed in Vite to allow things like `css-package?url`, `wasm-package?init`. This was not allowed by oxc-resolver and this PR allows that.
The current behavior of oxc-resolver comes from this change in enhanced-resolve (webpack/enhanced-resolve#225). This PR adds tests that disallows `pkg?foo` but allows `pkg/nested?foo`.
This current behavior doesn't make sense to me. Both `pkg?foo` and `pkg/nested?foo` are not allowed by Node and I don't find a reason to treat them differently.
fixesvitejs/rolldown-vite#382
refs 97dfb1a
Copy file name to clipboardExpand all lines: src/tests/exports_field.rs
+2-3Lines changed: 2 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -38,6 +38,8 @@ fn test_simple() {
38
38
// only test query and fragment.
39
39
("resolver should respect query parameters #1", f2.clone(),"exports-field/dist/main.js?foo", f2.join("node_modules/exports-field/lib/lib2/main.js?foo")),
40
40
("resolver should respect fragment parameters #1", f2.clone(),"exports-field/dist/main.js#foo", f2.join("node_modules/exports-field/lib/lib2/main.js#foo")),
41
+
("resolver should respect query parameters #2. Direct matching", f2.clone(),"exports-field?foo", f2.join("node_modules/exports-field/index.js?foo")),
42
+
("resolver should respect fragment parameters #2. Direct matching", f2.clone(),"exports-field#foo", f2.join("node_modules/exports-field/index.js#foo")),
41
43
("relative path should work, if relative path as request is used", f.clone(),"./node_modules/exports-field/lib/main.js", f.join("node_modules/exports-field/lib/main.js")),
("should resolve with wildcard pattern #1", f5.clone(),"m/features/f.js", f5.join("node_modules/m/src/features/f.js")),
@@ -60,15 +62,12 @@ fn test_simple() {
60
62
}
61
63
62
64
let p = f.join("node_modules/exports-field/package.json");
63
-
let p2 = f2.join("node_modules/exports-field/package.json");
64
65
let p4 = f4.join("node_modules/exports-field/package.json");
65
66
let p5 = f5.join("node_modules/m/package.json");
66
67
67
68
#[rustfmt::skip]
68
69
let fail = [
69
70
// ("throw error if extension not provided", f2.clone(), "exports-field/dist/main", ResolveError::NotFound(f2.join("node_modules/exports-field/lib/lib2/main"))),
70
-
("resolver should respect query parameters #2. Direct matching", f2.clone(),"exports-field?foo",ResolveError::PackagePathNotExported("./?foo".into(), p2.clone())),
71
-
("resolver should respect fragment parameters #2. Direct matching", f2,"exports-field#foo",ResolveError::PackagePathNotExported("./#foo".into(), p2)),
72
71
("relative path should not work with exports field", f.clone(),"./node_modules/exports-field/dist/main.js",ResolveError::NotFound("./node_modules/exports-field/dist/main.js".into())),
73
72
("backtracking should not work for request", f.clone(),"exports-field/dist/../../../a.js",ResolveError::InvalidPackageTarget("./lib/../../../a.js".to_string(),"./dist/".to_string(), p.clone())),
74
73
("backtracking should not work for exports field target", f.clone(),"exports-field/dist/a.js",ResolveError::InvalidPackageTarget("./../../a.js".to_string(),"./dist/a.js".to_string(), p.clone())),
0 commit comments