Files
openclaw/test/plugin-npm-runtime-build.test.ts
2026-05-02 23:47:25 -07:00

70 lines
2.7 KiB
TypeScript

import path from "node:path";
import { describe, expect, it } from "vitest";
import {
listPublishablePluginPackageDirs,
resolvePluginNpmRuntimeBuildPlan,
} from "../scripts/lib/plugin-npm-runtime-build.mjs";
const repoRoot = path.resolve(import.meta.dirname, "..");
describe("plugin npm runtime build planning", () => {
it("plans package-local runtime entries for every publishable plugin package", () => {
const packageDirs = listPublishablePluginPackageDirs({ repoRoot });
expect(packageDirs.length).toBeGreaterThan(0);
const plans = packageDirs.map((packageDir) =>
resolvePluginNpmRuntimeBuildPlan({
repoRoot,
packageDir,
}),
);
expect(plans.filter(Boolean).map((plan) => plan?.pluginDir)).toEqual(
packageDirs.map((packageDir) => path.basename(packageDir)),
);
for (const plan of plans) {
expect(plan?.outDir).toBe(path.join(plan?.packageDir ?? "", "dist"));
expect(plan?.runtimeExtensions.every((entry) => entry.startsWith("./dist/"))).toBe(true);
expect(plan?.runtimeBuildOutputs.every((entry) => entry.startsWith("./dist/"))).toBe(true);
expect(plan?.packageFiles).toContain("dist/**");
expect(plan?.packagePeerMetadata.peerDependencies.openclaw).toBe(
plan?.packageJson.openclaw.compat.pluginApi,
);
expect(plan?.packagePeerMetadata.peerDependenciesMeta.openclaw.optional).toBe(true);
}
});
it("includes top-level public runtime surfaces and root-build-excluded plugins", () => {
const qqbotPlan = resolvePluginNpmRuntimeBuildPlan({
repoRoot,
packageDir: path.join(repoRoot, "extensions", "qqbot"),
});
expect(qqbotPlan?.entry).toEqual(
expect.objectContaining({
index: path.join(repoRoot, "extensions", "qqbot", "index.ts"),
"runtime-api": path.join(repoRoot, "extensions", "qqbot", "runtime-api.ts"),
"setup-entry": path.join(repoRoot, "extensions", "qqbot", "setup-entry.ts"),
}),
);
expect(qqbotPlan?.runtimeExtensions).toEqual(["./dist/index.js"]);
expect(qqbotPlan?.runtimeSetupEntry).toBe("./dist/setup-entry.js");
const diffsPlan = resolvePluginNpmRuntimeBuildPlan({
repoRoot,
packageDir: path.join(repoRoot, "extensions", "diffs"),
});
expect(diffsPlan?.entry).toEqual(
expect.objectContaining({
api: path.join(repoRoot, "extensions", "diffs", "api.ts"),
index: path.join(repoRoot, "extensions", "diffs", "index.ts"),
"runtime-api": path.join(repoRoot, "extensions", "diffs", "runtime-api.ts"),
}),
);
expect(diffsPlan?.packageFiles).toEqual([
"dist/**",
"openclaw.plugin.json",
"README.md",
"skills/**",
]);
});
});