openclaw/src/plugins/bundled-plugin-metadata.ts

45 lines
1.3 KiB
TypeScript

import fs from "node:fs";
import path from "node:path";
import { GENERATED_BUNDLED_PLUGIN_METADATA } from "./bundled-plugin-metadata.generated.js";
import type { PluginManifest, OpenClawPackageManifest } from "./manifest.js";
type GeneratedBundledPluginPathPair = {
source: string;
built: string;
};
export type GeneratedBundledPluginMetadata = {
dirName: string;
idHint: string;
source: GeneratedBundledPluginPathPair;
setupSource?: GeneratedBundledPluginPathPair;
packageName?: string;
packageVersion?: string;
packageDescription?: string;
packageManifest?: OpenClawPackageManifest;
manifest: PluginManifest;
};
export const BUNDLED_PLUGIN_METADATA =
GENERATED_BUNDLED_PLUGIN_METADATA as unknown as readonly GeneratedBundledPluginMetadata[];
export function resolveBundledPluginGeneratedPath(
rootDir: string,
entry: GeneratedBundledPluginPathPair | undefined,
): string | null {
if (!entry) {
return null;
}
const candidates = [entry.built, entry.source]
.filter(
(candidate): candidate is string => typeof candidate === "string" && candidate.length > 0,
)
.map((candidate) => path.resolve(rootDir, candidate));
for (const candidate of candidates) {
if (fs.existsSync(candidate)) {
return candidate;
}
}
return null;
}