import { it, expect } from "bun:test"; import { mkdirSync, writeFileSync } from "fs"; import { join, resolve } from "path"; function resolveFrom(from) { return (specifier) => import.meta.resolveSync(specifier, from); } 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("#imports with wildcard", async () => { await writePackageJSONImportsFixture(); const run = resolveFrom( resolve( import.meta.dir + "/node_modules/package-json-imports/package.json", ), ); const wildcard = resolve( import.meta.dir + "/node_modules/package-json-imports/foo/wildcard.js", ); expect(run("#foo/wildcard.js")).toBe(wildcard); expect(run("#foo/extensionless/wildcard")).toBe(wildcard); }); it("import.meta.resolve", async () => { expect(await import.meta.resolve("./resolve.test.js")).toBe(import.meta.path); expect(await import.meta.resolve("./resolve.test.js", import.meta.path)).toBe( import.meta.path, ); expect( // optional second param can be any path, including a dir await import.meta.resolve( "./bun.js/resolve.test.js", join(import.meta.path, "../"), ), ).toBe(import.meta.path); // can be a package path expect( (await import.meta.resolve("react", import.meta.path)).length > 0, ).toBe(true); // file extensions are optional expect(await import.meta.resolve("./resolve.test")).toBe(import.meta.path); // works with tsconfig.json "paths" expect(await import.meta.resolve("foo/bar")).toBe( join(import.meta.path, "../baz.js"), ); // works with package.json "exports" writePackageJSONExportsFixture(); expect(await import.meta.resolve("package-json-exports/baz")).toBe( join(import.meta.path, "../node_modules/package-json-exports/foo/bar.js"), ); // works with TypeScript compiler edgecases like: // - If the file ends with .js and it doesn't exist, try again with .ts and .tsx expect(await import.meta.resolve("./resolve-typescript-file.js")).toBe( join(import.meta.path, "../resolve-typescript-file.tsx"), ); expect(await import.meta.resolve("./resolve-typescript-file.tsx")).toBe( join(import.meta.path, "../resolve-typescript-file.tsx"), ); // throws a ResolveError on failure try { await import.meta.resolve("THIS FILE DOESNT EXIST"); 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"); } }); // the slightly lower level API, which doesn't prefill the second param // and expects a directory instead of a filepath it("Bun.resolve", async () => { expect(await Bun.resolve("./resolve.test.js", import.meta.dir)).toBe( import.meta.path, ); }); // synchronous it("Bun.resolveSync", () => { expect(Bun.resolveSync("./resolve.test.js", import.meta.dir)).toBe( import.meta.path, ); }); it("self-referencing imports works", async () => { await writePackageJSONExportsFixture(); const baz = await import.meta.resolve("package-json-exports/baz"); const namespace = await import.meta.resolve( "package-json-exports/references-baz", ); Loader.registry.delete(baz); Loader.registry.delete(namespace); var a = await import(baz); var b = await import(namespace); expect(a.bar).toBe(1); expect(b.bar).toBe(1); Loader.registry.delete(baz); Loader.registry.delete(namespace); var a = await import("package-json-exports/baz"); var b = await import("package-json-exports/references-baz"); expect(a.bar).toBe(1); expect(b.bar).toBe(1); Loader.registry.delete(baz); Loader.registry.delete(namespace); var a = import.meta.require("package-json-exports/baz"); var b = import.meta.require("package-json-exports/references-baz"); expect(a.bar).toBe(1); expect(b.bar).toBe(1); Loader.registry.delete(baz); Loader.registry.delete(namespace); var a = import.meta.require(baz); var b = import.meta.require(namespace); expect(a.bar).toBe(1); expect(b.bar).toBe(1); // test that file:// works Loader.registry.delete(baz); Loader.registry.delete(namespace); var a = import.meta.require("file://" + baz); var b = import.meta.require("file://" + namespace); expect(a.bar).toBe(1); expect(b.bar).toBe(1); }); function writePackageJSONExportsFixture() { try { mkdirSync( join(import.meta.dir, "./node_modules/package-json-exports/foo"), { recursive: true, }, ); } catch (exception) {} writeFileSync( join(import.meta.dir, "./node_modules/package-json-exports/foo/bar.js"), "export const bar = 1;", ); writeFileSync( join( import.meta.dir, "./node_modules/package-json-exports/foo/references-baz.js", ), "export {bar} from 'package-json-exports/baz';", ); writeFileSync( join(import.meta.dir, "./node_modules/package-json-exports/package.json"), JSON.stringify( { name: "package-json-exports", exports: { "./baz": "./foo/bar.js", "./references-baz": "./foo/references-baz.js", }, }, null, 2, ), ); } 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/wildcard.js", ), "export const wildcard = 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/bar": "./foo/private-foo.js", "#foo/*.js": "./foo/*.js", "#foo/extensionless/*": "./foo/*.js", "#foo": "./foo/private-foo.js", "#internal-react": "react", }, }, null, 2, ), ); } ow-components Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/packages/astro/test/fixtures/static-build-frameworks (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2022-04-06[ci] formatGravatar natemoo-re 3-10/+16
2022-04-06fix(#2987): relative config handling with `--config` flag (#3001)Gravatar Nate Moore 5-9/+92
* fix(#2987): relative config handling with `--config` flag * test: fix tests * fix: improve config test for failure case * fix: test on windows? * fix: test on windows?
2022-04-06[ci] formatGravatar matthewp 3-8/+11
2022-04-06Fix Netlify adapter and dynamic routes (#3011)Gravatar Matthew Phillips 10-18/+82
* Fix Netlify adapter and dynamic routes * Changeset
2022-04-06fix(integrations): `astro:build:done` dir now matches SSR client output (#3008)Gravatar Juan Martín Seery 5-7/+20
* `dir` now matches client output * Updated integrations * Changeset
2022-04-06fix: Nested hydration with Solid (#3003)Gravatar Ryan Carniato 3-16/+44
* fix: solid nested hydration * Create ten-rice-unite.md Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
2022-04-06[ci] formatGravatar natemoo-re 2-6/+15
2022-04-06Astro add docs (#2958)Gravatar Peter Singh 3-3/+49
* So This works 😎 * need to add to the cli next * Renamed Files and Export Applied creditation to where I found the 'inspiration' for this application. * applied `astro docs` to cli * Trying to add to CLI, Not working 🤷‍♂️ * Converted into async method, * 🎆🎆 It works!!! 🥳🎉🥳 Embarrasing as it is I totally missed the part where logic was to be in. * Moved `docs` cmd to `supportedCommands` * refactor: cleanup docs command * chore: add changeset * chore: rename browser to open Co-authored-by: Nate Moore <nate@skypack.dev>
2022-04-06fix: @astrojs/vercel bug fixes (#3000)Gravatar Juan Martín Seery 2-6/+29
* Fixed outDir * Updated server out * changeset * Renamed out to tmp
2022-04-06[ci] formatGravatar matthewp 1-32/+32
2022-04-06[ci] release (beta) (#3005)astro@1.0.0-beta.3Gravatar github-actions[bot] 31-88/+98
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-04-06Fixes dynamic API routes in SSR (#3006)Gravatar Matthew Phillips 4-1/+26
* Fixes dynamic API routes in SSR * Adds a changeset
2022-04-06[ci] formatGravatar tony-sull 1-1/+1
2022-04-06fix(#2981): keeps `astro preview` server alive (#3004)Gravatar Tony Sullivan 3-1/+17
* fix(#2981): keeps server alive * chore: adding changeset * keep alive until the 'close' or 'error' event fires
2022-04-06Update readme.mdGravatar Nate Moore 1-2/+3
2022-04-06[ci] collect statsGravatar FredKSchott 1-0/+1
2022-04-05[ci] formatGravatar matthewp 1-1/+1
2022-04-05[ci] release (beta) (#2997)@astrojs/netlify@0.1.1-beta.0Gravatar github-actions[bot] 3-2/+9
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-04-05Docs: netlify adapter site requirement (#2996)Gravatar Ben Holmes 3-4/+23
* feat: human-readable error on bad site or base * fix: human-readable error should have 1 config option * docs: update README * chore: changeset * docs: mention localhost for testing via netlify CLI
2022-04-05[ci] collect statsGravatar FredKSchott 1-0/+1
2022-04-05[ci] formatGravatar FredKSchott 1-32/+32
2022-04-04[ci] release (beta) (#2992)astro@1.0.0-beta.2Gravatar github-actions[bot] 31-87/+94
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>