aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/resolve.test.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-19 20:03:02 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-19 20:03:02 -0700
commit21770eb0f31a43b3d6127ab957e271d029d6bc1b (patch)
tree1f8944dae891af25bb1b2cd923d3c47d5845d14d /test/bun.js/resolve.test.js
parent17be8023d9a34d985000af9211bdac8effa5396e (diff)
downloadbun-21770eb0f31a43b3d6127ab957e271d029d6bc1b.tar.gz
bun-21770eb0f31a43b3d6127ab957e271d029d6bc1b.tar.zst
bun-21770eb0f31a43b3d6127ab957e271d029d6bc1b.zip
Implement `imports` in package.json (`#foo` imports)
Fixes https://github.com/oven-sh/bun/issues/478 Fixes https://github.com/oven-sh/bun/issues/234 Fixes https://github.com/oven-sh/bun/issues/822
Diffstat (limited to 'test/bun.js/resolve.test.js')
-rw-r--r--test/bun.js/resolve.test.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/test/bun.js/resolve.test.js b/test/bun.js/resolve.test.js
index d081823e6..ea7b6cf2d 100644
--- a/test/bun.js/resolve.test.js
+++ b/test/bun.js/resolve.test.js
@@ -2,6 +2,48 @@ import { it, expect } from "bun:test";
import { mkdirSync, writeFileSync } from "fs";
import { join } from "path";
+it("#imports", async () => {
+ await writePackageJSONImportsFixture();
+
+ const baz = await import.meta.resolve(
+ "#foo",
+ join(await import.meta.resolve("package-json-imports/baz"), "../")
+ );
+ expect(baz.endsWith("foo/private-foo.js")).toBe(true);
+
+ const subpath = await import.meta.resolve(
+ "#foo/bar",
+ join(await import.meta.resolve("package-json-imports/baz"), "../")
+ );
+ expect(subpath.endsWith("foo/private-foo.js")).toBe(true);
+
+ const react = await import.meta.resolve(
+ "#internal-react",
+ join(await import.meta.resolve("package-json-imports/baz"), "../")
+ );
+ expect(react.endsWith("/react/index.js")).toBe(true);
+
+ // Check that #foo is not resolved to the package.json file.
+ try {
+ await import.meta.resolve("#foo");
+ throw new Error("Test failed");
+ } catch (exception) {
+ expect(exception instanceof ResolveError).toBe(true);
+ expect(exception.referrer).toBe(import.meta.path);
+ expect(exception.name).toBe("ResolveError");
+ }
+
+ // Chcek that package-json-imports/#foo doesn't work
+ try {
+ await import.meta.resolve("package-json-imports/#foo");
+ throw new Error("Test failed");
+ } catch (exception) {
+ expect(exception instanceof ResolveError).toBe(true);
+ expect(exception.referrer).toBe(import.meta.path);
+ expect(exception.name).toBe("ResolveError");
+ }
+});
+
it("import.meta.resolve", async () => {
expect(await import.meta.resolve("./resolve.test.js")).toBe(import.meta.path);
@@ -150,3 +192,43 @@ function writePackageJSONExportsFixture() {
)
);
}
+
+function writePackageJSONImportsFixture() {
+ try {
+ mkdirSync(
+ join(import.meta.dir, "./node_modules/package-json-imports/foo"),
+ {
+ recursive: true,
+ }
+ );
+ } catch (exception) {}
+ writeFileSync(
+ join(import.meta.dir, "./node_modules/package-json-imports/foo/bar.js"),
+ "export const bar = 1;"
+ );
+ writeFileSync(
+ join(
+ import.meta.dir,
+ "./node_modules/package-json-imports/foo/private-foo.js"
+ ),
+ "export {bar} from 'package-json-imports/#foo';"
+ );
+ writeFileSync(
+ join(import.meta.dir, "./node_modules/package-json-imports/package.json"),
+ JSON.stringify(
+ {
+ name: "package-json-imports",
+ exports: {
+ "./baz": "./foo/bar.js",
+ },
+ imports: {
+ "#foo": "./foo/private-foo.js",
+ "#foo/bar": "./foo/private-foo.js",
+ "#internal-react": "react",
+ },
+ },
+ null,
+ 2
+ )
+ );
+}