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
|
import { file } from "bun";
import { expect } from "bun:test";
import { realpathSync } from "fs";
import { mkdtemp, readdir, 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, version = "0.0.2", props = {}) {
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))));
}
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);
return new Response(
JSON.stringify({
name,
versions: {
[version]: {
name,
version,
dist: {
tarball: `${request.url}.tgz`,
},
...props,
},
},
"dist-tags": {
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 = realpathSync(await mkdtemp(join(tmpdir(), "bun-install.test")));
}
export async function dummyAfterEach() {
resetHanlder();
await rm(package_dir, { force: true, recursive: true });
}
|