aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/install/dummy.registry.ts
blob: a0a215db8aa28d7d9752356e78d9ec80363c2dd6 (plain) (blame)
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.indexOf("/", root_url.length) + 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 });
}