Files
openclaw/test/scripts/check-package-dist-imports.test.ts
2026-06-23 10:31:05 +02:00

65 lines
2.4 KiB
TypeScript

import { spawnSync } from "node:child_process";
import { mkdirSync, writeFileSync } from "node:fs";
import { join } from "node:path";
import { afterEach, describe, expect, it } from "vitest";
import { cleanupTempDirs, makeTempDir } from "../helpers/temp-dir.js";
const CHECK_SCRIPT = "scripts/check-package-dist-imports.mjs";
const tempDirs: string[] = [];
afterEach(() => {
cleanupTempDirs(tempDirs);
});
describe("check-package-dist-imports", () => {
it("prints help before reading package state", () => {
const result = spawnSync("node", [CHECK_SCRIPT, "--help"], { encoding: "utf8" });
expect(result.status, result.stderr).toBe(0);
expect(result.stdout).toContain(
"Usage: node scripts/check-package-dist-imports.mjs [package-root]",
);
expect(result.stderr).toBe("");
});
it("rejects option-like and extra arguments before dist scanning", () => {
const unknown = spawnSync("node", [CHECK_SCRIPT, "--tag"], { encoding: "utf8" });
expect(unknown.status).not.toBe(0);
expect(unknown.stderr).toContain("Unknown package dist import check option: --tag");
expect(unknown.stderr).not.toContain("missing dist directory");
const extra = spawnSync("node", [CHECK_SCRIPT, ".", "extra"], { encoding: "utf8" });
expect(extra.status).not.toBe(0);
expect(extra.stderr).toContain("Unexpected package dist import check argument: extra");
expect(extra.stderr).not.toContain("missing dist directory");
});
it("accepts a minimal package dist root", () => {
const root = makeTempDir(tempDirs, "openclaw-package-dist-imports-");
mkdirSync(join(root, "dist"), { recursive: true });
writeFileSync(join(root, "dist", "index.js"), "export {};\n", "utf8");
const result = spawnSync("node", [CHECK_SCRIPT, root], { encoding: "utf8" });
expect(result.status, result.stderr).toBe(0);
expect(result.stdout).toContain("OpenClaw package dist import closure passed.");
});
it("rejects missing CommonJS require chunks", () => {
const root = makeTempDir(tempDirs, "openclaw-package-dist-imports-");
mkdirSync(join(root, "dist"), { recursive: true });
writeFileSync(
join(root, "dist", "index.cjs"),
'module.exports = require("./chunk.cjs");\n',
"utf8",
);
const result = spawnSync("node", [CHECK_SCRIPT, root], { encoding: "utf8" });
expect(result.status).not.toBe(0);
expect(result.stderr).toContain("dist/index.cjs imports missing dist/chunk.cjs");
});
});