Add pre-install npm dependency guard

This commit is contained in:
2026-08-27 12:46:55 +01:00
parent 7574b31b8c
commit f28b9ee87d
22 changed files with 1321 additions and 137 deletions
+59
View File
@@ -0,0 +1,59 @@
import { mkdtemp, writeFile } from "node:fs/promises";
import { join } from "node:path";
import { tmpdir } from "node:os";
export async function makeProject(overrides = {}) {
const directory = await mkdtemp(join(tmpdir(), "dependency-guard-test-"));
const manifest = overrides.manifest ?? {
name: "fixture",
version: "1.0.0",
dependencies: { alpha: "^1.0.0" },
};
const alphaEntry = {
version: "1.2.3",
resolved: "https://registry.npmjs.org/alpha/-/alpha-1.2.3.tgz",
integrity: `sha512-${Buffer.from("integrity").toString("base64")}`,
...overrides.alphaEntry,
};
const lock = overrides.lock ?? {
name: "fixture",
version: "1.0.0",
lockfileVersion: 3,
packages: { "": { name: "fixture", version: "1.0.0" }, "node_modules/alpha": alphaEntry },
};
await writeFile(join(directory, "package.json"), JSON.stringify(manifest));
await writeFile(join(directory, "package-lock.json"), JSON.stringify(lock));
return directory;
}
export function packageDocument(overrides = {}) {
const version = {
name: "alpha",
version: "1.2.3",
repository: { type: "git", url: "git+https://github.com/example/alpha.git" },
maintainers: [{ name: "alice" }],
dist: { signatures: [{ keyid: "SHA256:key", sig: "signature" }] },
gitHead: "abcdef1234567890abcdef1234567890abcdef12",
...overrides.version,
};
version.dist = { signatures: [{ keyid: "SHA256:key", sig: "signature" }], ...overrides.version?.dist };
return {
name: "alpha",
maintainers: [{ name: "alice" }],
time: { "1.2.3": "2024-01-01T00:00:00.000Z" },
versions: { "1.2.3": version },
...overrides.document,
};
}
export function jsonResponse(body, status = 200) {
return { ok: status >= 200 && status < 300, status, json: async () => body };
}
export function passingRun(calls = []) {
return async (command, args) => {
calls.push([command, ...args]);
if (args[0] === "pack") return { code: 0, stdout: JSON.stringify([{ size: 100, unpackedSize: 500 }]), stderr: "", timedOut: false };
return { code: 0, stdout: "ok", stderr: "", timedOut: false };
};
}