Skip to content

Commit e82275d

Browse files
test(imports/exports): cover query and fragment in field resolution
2 parents 8757f67 + 1c2a383 commit e82275d

2 files changed

Lines changed: 77 additions & 0 deletions

File tree

test/exportsField.test.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2394,6 +2394,26 @@ describe("exportsFieldPlugin", () => {
23942394
});
23952395
});
23962396

2397+
it("resolver should respect query and fragment parameters together", (done) => {
2398+
resolver.resolve(
2399+
{},
2400+
fixture2,
2401+
"exports-field/dist/browser.js?foo=bar#frag",
2402+
{},
2403+
(err, result) => {
2404+
if (err) return done(err);
2405+
if (!result) return done(new Error("No result"));
2406+
expect(result).toEqual(
2407+
path.resolve(
2408+
fixture2,
2409+
"node_modules/exports-field/lib/browser.js?foo=bar#frag",
2410+
),
2411+
);
2412+
done();
2413+
},
2414+
);
2415+
});
2416+
23972417
it("relative path should work, if relative path as request is used", (done) => {
23982418
resolver.resolve(
23992419
{},

test/importsField.test.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1415,6 +1415,63 @@ describe("importsFieldPlugin", () => {
14151415
});
14161416
});
14171417

1418+
it("resolver should respect query parameters #1", (done) => {
1419+
resolver.resolve({}, fixture, "#a/dist/main.js?foo", {}, (err, result) => {
1420+
if (err) return done(err);
1421+
if (!result) return done(new Error("No result"));
1422+
expect(result).toEqual(
1423+
path.resolve(fixture, "node_modules/a/lib/main.js?foo"),
1424+
);
1425+
done();
1426+
});
1427+
});
1428+
1429+
it("resolver should respect query parameters #2. Direct matching", (done) => {
1430+
resolver.resolve({}, fixture, "#imports-field?foo", {}, (err, result) => {
1431+
if (!err) return done(new Error(`expect error, got ${result}`));
1432+
expect(err).toBeInstanceOf(Error);
1433+
expect(err.message).toMatch(/is not imported from package/);
1434+
done();
1435+
});
1436+
});
1437+
1438+
it("resolver should respect fragment parameters #1", (done) => {
1439+
resolver.resolve({}, fixture, "#a/dist/main.js#foo", {}, (err, result) => {
1440+
if (err) return done(err);
1441+
if (!result) return done(new Error("No result"));
1442+
expect(result).toEqual(
1443+
path.resolve(fixture, "node_modules/a/lib/main.js#foo"),
1444+
);
1445+
done();
1446+
});
1447+
});
1448+
1449+
it("resolver should respect fragment parameters #2. Direct matching", (done) => {
1450+
resolver.resolve({}, fixture, "#imports-field#foo", {}, (err, result) => {
1451+
if (!err) return done(new Error(`expect error, got ${result}`));
1452+
expect(err).toBeInstanceOf(Error);
1453+
expect(err.message).toMatch(/is not imported from package/);
1454+
done();
1455+
});
1456+
});
1457+
1458+
it("resolver should respect query and fragment parameters together", (done) => {
1459+
resolver.resolve(
1460+
{},
1461+
fixture,
1462+
"#a/dist/main.js?foo=bar#frag",
1463+
{},
1464+
(err, result) => {
1465+
if (err) return done(err);
1466+
if (!result) return done(new Error("No result"));
1467+
expect(result).toEqual(
1468+
path.resolve(fixture, "node_modules/a/lib/main.js?foo=bar#frag"),
1469+
);
1470+
done();
1471+
},
1472+
);
1473+
});
1474+
14181475
it("should work and throw an error on invalid imports #1", (done) => {
14191476
// Note: #/ patterns are now allowed per Node.js PR #60864
14201477
// #/dep will now try to resolve but fail because there's no mapping

0 commit comments

Comments
 (0)