Files
openclaw/test/scripts/bundle-a2ui.test.ts
2026-04-21 04:11:01 +01:00

75 lines
2.4 KiB
TypeScript

import path from "node:path";
import { describe, expect, it } from "vitest";
import {
compareNormalizedPaths,
getBundleHashInputPaths,
getBundleHashRepoInputPaths,
getLocalRolldownCliCandidates,
isBundleHashInputPath,
} from "../../scripts/bundle-a2ui.mjs";
describe("scripts/bundle-a2ui.mjs", () => {
it("keeps generated renderer output out of bundle hash inputs", () => {
const repoRoot = path.resolve("repo-root");
expect(
isBundleHashInputPath(
path.join(repoRoot, "vendor", "a2ui", "renderers", "lit", "src", "index.ts"),
repoRoot,
),
).toBe(true);
expect(
isBundleHashInputPath(
path.join(repoRoot, "vendor", "a2ui", "renderers", "lit", "dist"),
repoRoot,
),
).toBe(false);
expect(
isBundleHashInputPath(
path.join(repoRoot, "vendor", "a2ui", "renderers", "lit", "dist", "src", "index.js"),
repoRoot,
),
).toBe(false);
});
it("prefers the installed rolldown CLI over a network dlx fallback", () => {
const repoRoot = path.resolve("repo-root");
expect(getLocalRolldownCliCandidates(repoRoot)[0]).toBe(
path.join(repoRoot, "node_modules", "rolldown", "bin", "cli.mjs"),
);
});
it("sorts hash inputs without locale-dependent collation", () => {
const paths = ["repo/Z.ts", "repo/a.ts", "repo/ä.ts", "repo/A.ts"];
expect([...paths].toSorted(compareNormalizedPaths)).toEqual([
"repo/A.ts",
"repo/Z.ts",
"repo/a.ts",
"repo/ä.ts",
]);
});
it("keeps unrelated repo dependency churn out of bundle hash inputs", () => {
const repoRoot = path.resolve("repo-root");
const inputPaths = getBundleHashRepoInputPaths(repoRoot);
expect(inputPaths).toContain(path.join(repoRoot, "ui", "package.json"));
expect(inputPaths).not.toContain(path.join(repoRoot, "package.json"));
expect(inputPaths).not.toContain(path.join(repoRoot, "pnpm-lock.yaml"));
});
it("keeps local node_modules state out of bundle hash inputs", () => {
const repoRoot = process.cwd();
const inputPaths = getBundleHashInputPaths(repoRoot);
expect(inputPaths).not.toContain(path.join(repoRoot, "package.json"));
expect(inputPaths).not.toContain(path.join(repoRoot, "pnpm-lock.yaml"));
expect(inputPaths).not.toContain(path.join(repoRoot, "node_modules", "lit", "package.json"));
expect(inputPaths).not.toContain(
path.join(repoRoot, "ui", "node_modules", "lit", "package.json"),
);
});
});