1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
import { file } from "bun";
import { expect } from "bun:test";
import { mkdtemp, readdir, realpath, rm } from "fs/promises";
import { tmpdir } from "os";
import { basename, join } from "path";
let handler, server;
export let package_dir, requested, root_url;
export function dummyRegistry(urls, info: any = { "0.0.2": {} }) {
return async request => {
urls.push(request.url);
expect(request.method).toBe("GET");
if (request.url.endsWith(".tgz")) {
return new Response(file(join(import.meta.dir, basename(request.url).toLowerCase())));
}
expect(request.headers.get("accept")).toBe(
"application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*",
);
expect(request.headers.get("npm-auth-type")).toBe(null);
expect(await request.text()).toBe("");
const name = request.url.slice(request.url.lastIndexOf("/") + 1);
const versions = {};
let version;
for (version in info) {
if (!/^[0-9]/.test(version)) continue;
versions[version] = {
name,
version,
dist: {
tarball: `${request.url}-${info[version].as ?? version}.tgz`,
},
...info[version],
};
}
return new Response(
JSON.stringify({
name,
versions,
"dist-tags": {
latest: info.latest ?? version,
},
}),
);
};
}
export async function readdirSorted(path: PathLike): Promise<string[]> {
const results = await readdir(path);
results.sort();
return results;
}
export function setHandler(newHandler) {
handler = newHandler;
}
function resetHanlder() {
setHandler(() => new Response("Tea Break~", { status: 418 }));
}
export function dummyBeforeAll() {
server = Bun.serve({
async fetch(request) {
requested++;
return await handler(request);
},
port: 54321,
});
root_url = "http://localhost:54321";
}
export function dummyAfterAll() {
server.stop();
}
export async function dummyBeforeEach() {
resetHanlder();
requested = 0;
package_dir = await mkdtemp(join(await realpath(tmpdir()), "bun-install.test"));
}
export async function dummyAfterEach() {
resetHanlder();
await rm(package_dir, { force: true, recursive: true });
}
|