Files
pi-context-manager/src/package-manifest.test.ts

62 lines
2.4 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { execFileSync } from "node:child_process";
import { existsSync, readFileSync } from "node:fs";
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
const pkg = JSON.parse(readFileSync(resolve(packageRoot, "package.json"), "utf8"));
const readme = readFileSync(resolve(packageRoot, "README.md"), "utf8");
function getPackedPaths() {
const output = execFileSync("npm", ["pack", "--dry-run", "--json"], {
cwd: packageRoot,
encoding: "utf8",
});
const [packResult] = JSON.parse(output) as Array<{ files: Array<{ path: string }> }>;
return packResult.files.map((file) => file.path);
}
test("package.json exposes pi-context-manager as a standalone pi package", () => {
assert.equal(pkg.name, "pi-context-manager");
assert.equal(pkg.type, "module");
assert.equal(
pkg.description,
"Pi extension package for context-pressure management, snapshots, resume packets, and branch-summary compaction behavior.",
);
assert.ok(Array.isArray(pkg.keywords));
assert.ok(pkg.keywords.includes("pi-package"));
assert.deepEqual(pkg.repository, {
type: "git",
url: "https://gitea.rwiesner.com/pi/pi-context-manager",
});
assert.deepEqual(pkg.pi, {
extensions: ["./index.ts"],
});
assert.equal(pkg.scripts.test, "tsx --test src/*.test.ts");
assert.equal(pkg.peerDependencies["@mariozechner/pi-agent-core"], "*");
assert.equal(pkg.peerDependencies["@mariozechner/pi-coding-agent"], "*");
assert.deepEqual(pkg.dependencies ?? {}, {});
assert.equal(pkg.bundledDependencies, undefined);
assert.deepEqual(pkg.files, ["index.ts", "src"]);
assert.ok(existsSync(resolve(packageRoot, "index.ts")));
assert.ok(existsSync(resolve(packageRoot, "src/runtime.ts")));
});
test("README documents local and git installation", () => {
assert.match(readme, /pi install \/absolute\/path\/to\/context-manager/);
assert.match(readme, /pi install https:\/\/gitea\.rwiesner\.com\/pi\/pi-context-manager/);
});
test("npm pack includes runtime package assets", () => {
const packedPaths = getPackedPaths();
assert.ok(packedPaths.includes("README.md"));
assert.ok(packedPaths.includes("package.json"));
assert.ok(packedPaths.includes("index.ts"));
assert.ok(packedPaths.includes("src/runtime.ts"));
});