mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-25 00:42:24 +00:00
63 lines
2.5 KiB
TypeScript
63 lines
2.5 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import { createRequire } from "node:module";
|
|
import path from "node:path";
|
|
import { pathToFileURL } from "node:url";
|
|
import { describe, expect, it } from "vitest";
|
|
import { buildPluginSdkEntrySources, pluginSdkEntrypoints } from "./entrypoints.js";
|
|
|
|
const require = createRequire(import.meta.url);
|
|
const tsdownModuleUrl = pathToFileURL(require.resolve("tsdown")).href;
|
|
const bundledRepresentativeEntrypoints = ["matrix-runtime-heavy"] as const;
|
|
const bundledCoverageEntrySources = buildPluginSdkEntrySources(bundledRepresentativeEntrypoints);
|
|
|
|
describe("plugin-sdk bundled exports", () => {
|
|
it("emits importable bundled subpath entries", { timeout: 120_000 }, async () => {
|
|
const bundleTempRoot = path.join(
|
|
process.cwd(),
|
|
"node_modules",
|
|
".cache",
|
|
"openclaw-plugin-sdk-build",
|
|
);
|
|
await fs.mkdir(bundleTempRoot, { recursive: true });
|
|
const outDir = path.join(bundleTempRoot, "bundle");
|
|
await fs.rm(outDir, { recursive: true, force: true });
|
|
await fs.mkdir(outDir, { recursive: true });
|
|
|
|
const { build } = await import(tsdownModuleUrl);
|
|
await build({
|
|
clean: false,
|
|
config: false,
|
|
dts: false,
|
|
// Full plugin-sdk coverage belongs to `pnpm build`, package contract
|
|
// guardrails, and `subpaths.test.ts`. This file only keeps the expensive
|
|
// bundler path honest across representative entrypoint families.
|
|
entry: bundledCoverageEntrySources,
|
|
env: { NODE_ENV: "production" },
|
|
fixedExtension: false,
|
|
logLevel: "error",
|
|
outDir,
|
|
platform: "node",
|
|
});
|
|
|
|
expect(pluginSdkEntrypoints.length).toBeGreaterThan(bundledRepresentativeEntrypoints.length);
|
|
await Promise.all(
|
|
bundledRepresentativeEntrypoints.map(async (entry) => {
|
|
await expect(fs.stat(path.join(outDir, `${entry}.js`))).resolves.toBeTruthy();
|
|
}),
|
|
);
|
|
|
|
// Export list and package-specifier coverage already live in
|
|
// package-contract-guardrails.test.ts and subpaths.test.ts. Keep this file
|
|
// focused on the expensive part: can tsdown emit working bundle artifacts?
|
|
const importResults = await Promise.all(
|
|
bundledRepresentativeEntrypoints.map(async (entry) => [
|
|
entry,
|
|
typeof (await import(pathToFileURL(path.join(outDir, `${entry}.js`)).href)),
|
|
]),
|
|
);
|
|
expect(Object.fromEntries(importResults)).toEqual(
|
|
Object.fromEntries(bundledRepresentativeEntrypoints.map((entry) => [entry, "object"])),
|
|
);
|
|
});
|
|
});
|