mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 13:20:23 +00:00
refactor(plugin-sdk): centralize entrypoint manifest
This commit is contained in:
@@ -4,68 +4,15 @@ import path from "node:path";
|
||||
import { pathToFileURL } from "node:url";
|
||||
import { build } from "tsdown";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
buildPluginSdkEntrySources,
|
||||
buildPluginSdkPackageExports,
|
||||
buildPluginSdkSpecifiers,
|
||||
pluginSdkEntrypoints,
|
||||
} from "../../scripts/lib/plugin-sdk-entries.mjs";
|
||||
import * as sdk from "./index.js";
|
||||
|
||||
const pluginSdkEntrypoints = [
|
||||
"index",
|
||||
"core",
|
||||
"compat",
|
||||
"telegram",
|
||||
"discord",
|
||||
"slack",
|
||||
"signal",
|
||||
"imessage",
|
||||
"whatsapp",
|
||||
"line",
|
||||
"msteams",
|
||||
"acpx",
|
||||
"bluebubbles",
|
||||
"copilot-proxy",
|
||||
"device-pair",
|
||||
"diagnostics-otel",
|
||||
"diffs",
|
||||
"feishu",
|
||||
"googlechat",
|
||||
"irc",
|
||||
"llm-task",
|
||||
"lobster",
|
||||
"matrix",
|
||||
"mattermost",
|
||||
"memory-core",
|
||||
"memory-lancedb",
|
||||
"minimax-portal-auth",
|
||||
"nextcloud-talk",
|
||||
"nostr",
|
||||
"open-prose",
|
||||
"phone-control",
|
||||
"qwen-portal-auth",
|
||||
"synology-chat",
|
||||
"talk-voice",
|
||||
"test-utils",
|
||||
"thread-ownership",
|
||||
"tlon",
|
||||
"twitch",
|
||||
"voice-call",
|
||||
"zalo",
|
||||
"zalouser",
|
||||
"account-id",
|
||||
"keyed-async-queue",
|
||||
] as const;
|
||||
|
||||
const pluginSdkSpecifiers = pluginSdkEntrypoints.map((entry) =>
|
||||
entry === "index" ? "openclaw/plugin-sdk" : `openclaw/plugin-sdk/${entry}`,
|
||||
);
|
||||
|
||||
function buildPluginSdkPackageExports() {
|
||||
return Object.fromEntries(
|
||||
pluginSdkEntrypoints.map((entry) => [
|
||||
entry === "index" ? "./plugin-sdk" : `./plugin-sdk/${entry}`,
|
||||
{
|
||||
default: `./dist/plugin-sdk/${entry}.js`,
|
||||
},
|
||||
]),
|
||||
);
|
||||
}
|
||||
const pluginSdkSpecifiers = buildPluginSdkSpecifiers();
|
||||
|
||||
describe("plugin-sdk exports", () => {
|
||||
it("does not expose runtime modules", () => {
|
||||
@@ -180,9 +127,7 @@ describe("plugin-sdk exports", () => {
|
||||
clean: true,
|
||||
config: false,
|
||||
dts: false,
|
||||
entry: Object.fromEntries(
|
||||
pluginSdkEntrypoints.map((entry) => [entry, `src/plugin-sdk/${entry}.ts`]),
|
||||
),
|
||||
entry: buildPluginSdkEntrySources(),
|
||||
env: { NODE_ENV: "production" },
|
||||
fixedExtension: false,
|
||||
logLevel: "error",
|
||||
@@ -237,4 +182,16 @@ describe("plugin-sdk exports", () => {
|
||||
await fs.rm(fixtureDir, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
it("keeps package.json plugin-sdk exports synced with the manifest", async () => {
|
||||
const packageJsonPath = path.join(process.cwd(), "package.json");
|
||||
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf8")) as {
|
||||
exports?: Record<string, unknown>;
|
||||
};
|
||||
const currentPluginSdkExports = Object.fromEntries(
|
||||
Object.entries(packageJson.exports ?? {}).filter(([key]) => key.startsWith("./plugin-sdk")),
|
||||
);
|
||||
|
||||
expect(currentPluginSdkExports).toEqual(buildPluginSdkPackageExports());
|
||||
});
|
||||
});
|
||||
|
||||
@@ -9,42 +9,14 @@ import * as slackSdk from "openclaw/plugin-sdk/slack";
|
||||
import * as telegramSdk from "openclaw/plugin-sdk/telegram";
|
||||
import * as whatsappSdk from "openclaw/plugin-sdk/whatsapp";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { pluginSdkSubpaths } from "../../scripts/lib/plugin-sdk-entries.mjs";
|
||||
|
||||
const bundledExtensionSubpathLoaders = [
|
||||
{ id: "acpx", load: () => import("openclaw/plugin-sdk/acpx") },
|
||||
{ id: "bluebubbles", load: () => import("openclaw/plugin-sdk/bluebubbles") },
|
||||
{ id: "copilot-proxy", load: () => import("openclaw/plugin-sdk/copilot-proxy") },
|
||||
{ id: "device-pair", load: () => import("openclaw/plugin-sdk/device-pair") },
|
||||
{ id: "diagnostics-otel", load: () => import("openclaw/plugin-sdk/diagnostics-otel") },
|
||||
{ id: "diffs", load: () => import("openclaw/plugin-sdk/diffs") },
|
||||
{ id: "feishu", load: () => import("openclaw/plugin-sdk/feishu") },
|
||||
{ id: "googlechat", load: () => import("openclaw/plugin-sdk/googlechat") },
|
||||
{ id: "irc", load: () => import("openclaw/plugin-sdk/irc") },
|
||||
{ id: "llm-task", load: () => import("openclaw/plugin-sdk/llm-task") },
|
||||
{ id: "lobster", load: () => import("openclaw/plugin-sdk/lobster") },
|
||||
{ id: "matrix", load: () => import("openclaw/plugin-sdk/matrix") },
|
||||
{ id: "mattermost", load: () => import("openclaw/plugin-sdk/mattermost") },
|
||||
{ id: "memory-core", load: () => import("openclaw/plugin-sdk/memory-core") },
|
||||
{ id: "memory-lancedb", load: () => import("openclaw/plugin-sdk/memory-lancedb") },
|
||||
{
|
||||
id: "minimax-portal-auth",
|
||||
load: () => import("openclaw/plugin-sdk/minimax-portal-auth"),
|
||||
},
|
||||
{ id: "nextcloud-talk", load: () => import("openclaw/plugin-sdk/nextcloud-talk") },
|
||||
{ id: "nostr", load: () => import("openclaw/plugin-sdk/nostr") },
|
||||
{ id: "open-prose", load: () => import("openclaw/plugin-sdk/open-prose") },
|
||||
{ id: "phone-control", load: () => import("openclaw/plugin-sdk/phone-control") },
|
||||
{ id: "qwen-portal-auth", load: () => import("openclaw/plugin-sdk/qwen-portal-auth") },
|
||||
{ id: "synology-chat", load: () => import("openclaw/plugin-sdk/synology-chat") },
|
||||
{ id: "talk-voice", load: () => import("openclaw/plugin-sdk/talk-voice") },
|
||||
{ id: "test-utils", load: () => import("openclaw/plugin-sdk/test-utils") },
|
||||
{ id: "thread-ownership", load: () => import("openclaw/plugin-sdk/thread-ownership") },
|
||||
{ id: "tlon", load: () => import("openclaw/plugin-sdk/tlon") },
|
||||
{ id: "twitch", load: () => import("openclaw/plugin-sdk/twitch") },
|
||||
{ id: "voice-call", load: () => import("openclaw/plugin-sdk/voice-call") },
|
||||
{ id: "zalo", load: () => import("openclaw/plugin-sdk/zalo") },
|
||||
{ id: "zalouser", load: () => import("openclaw/plugin-sdk/zalouser") },
|
||||
] as const;
|
||||
const importPluginSdkSubpath = (specifier: string) => import(/* @vite-ignore */ specifier);
|
||||
|
||||
const bundledExtensionSubpathLoaders = pluginSdkSubpaths.map((id) => ({
|
||||
id,
|
||||
load: () => importPluginSdkSubpath(`openclaw/plugin-sdk/${id}`),
|
||||
}));
|
||||
|
||||
describe("plugin-sdk subpath exports", () => {
|
||||
it("exports compat helpers", () => {
|
||||
|
||||
Reference in New Issue
Block a user