testRegistryViewAsksAgain

tcmts.loader.packages.testRegistryViewAsksAgain · #tb7chn4f · term

The registry is asked again when it didn't answer, not when the package isn't there.

import { registryView } from "#codebase/tcmts/loader/packages";
import type { Viewed } from "#codebase/tcmts/loader/packages";
import assert from "node:assert/strict";

export const testRegistryViewAsksAgain = () => {
  const answers = (...rs: Viewed[]) => {
    const asked: string[][] = [];
    return { asked, view: (a: string[]) => (asked.push(a), rs[asked.length - 1] ?? rs.at(-1)!) };
  };
  const paused: number[] = [];
  const pause = (ms: number) => void paused.push(ms);
  const timeout = { status: 1, stdout: "", stderr: "npm error code ETIMEDOUT" };
  const ok = { status: 0, stdout: '"0.75.0"', stderr: "" };
  const flaky = answers(timeout, ok);
  assert.equal(registryView(["oxfmt@0.75", "version"], flaky.view, pause), ok);
  assert.equal(flaky.asked.length, 2);
  assert.deepEqual(paused, [500]);
  const missing = answers({
    status: 1,
    stdout: "",
    stderr: "npm error code E404\nnpm error 404 Not Found",
  });
  assert.equal(registryView(["nope"], missing.view, pause).status, 1);
  assert.equal(missing.asked.length, 1);
  const down = answers(timeout);
  assert.equal(registryView(["oxfmt"], down.view, pause), timeout);
  assert.equal(down.asked.length, 3);
}

uses