diff options
author | 2022-09-19 20:03:02 -0700 | |
---|---|---|
committer | 2022-09-19 20:03:02 -0700 | |
commit | 21770eb0f31a43b3d6127ab957e271d029d6bc1b (patch) | |
tree | 1f8944dae891af25bb1b2cd923d3c47d5845d14d /test/bun.js/resolve.test.js | |
parent | 17be8023d9a34d985000af9211bdac8effa5396e (diff) | |
download | bun-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.js | 82 |
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 + ) + ); +} |