Files
better-auth/packages/cli/test/package-info.test.ts

82 lines
2.2 KiB
TypeScript

import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { afterEach, describe, expect, test } from "vitest";
import { getInstalledPackageVersion } from "../src/utils/get-package-info";
/**
* @see https://github.com/better-auth/better-auth/issues/10997
*/
describe("getInstalledPackageVersion", () => {
const temporaryDirectories: string[] = [];
afterEach(async () => {
await Promise.all(
temporaryDirectories
.splice(0)
.map((directory) => fs.rm(directory, { recursive: true, force: true })),
);
});
test.for([
{
exports: { "./package.json": "./package.json" },
packageName: "example-package",
resolution: "its package manifest",
version: "1.2.3",
},
{
exports: "./index.js",
packageName: "@example/package",
resolution: "its package entry point",
version: "4.5.6",
},
{
exports: { ".": { import: "./index.js" } },
packageName: "esm-only-package",
resolution: "an import-only entry point",
version: "7.8.9",
},
])(
"resolves $packageName through $resolution",
async ({ exports, packageName, version }) => {
const workspaceRoot = await fs.mkdtemp(
path.join(os.tmpdir(), "better-auth-installed-version-"),
);
temporaryDirectories.push(workspaceRoot);
const projectDirectory = path.join(workspaceRoot, "apps", "web");
const packageDirectory = path.join(
workspaceRoot,
"node_modules",
...packageName.split("/"),
);
await fs.mkdir(projectDirectory, { recursive: true });
await fs.mkdir(packageDirectory, { recursive: true });
await fs.writeFile(
path.join(packageDirectory, "package.json"),
JSON.stringify({
name: packageName,
version,
exports,
}),
);
await fs.writeFile(path.join(packageDirectory, "index.js"), "");
expect(getInstalledPackageVersion(packageName, projectDirectory)).toBe(
version,
);
},
);
test("returns null when the package is not installed", async () => {
const projectDirectory = await fs.mkdtemp(
path.join(os.tmpdir(), "better-auth-missing-version-"),
);
temporaryDirectories.push(projectDirectory);
expect(
getInstalledPackageVersion("missing-package", projectDirectory),
).toBeNull();
});
});