Files
openclaw/src/plugins/public-surface-runtime.ts
2026-04-05 20:59:56 +01:00

61 lines
1.9 KiB
TypeScript

import fs from "node:fs";
import path from "node:path";
import { resolveBundledPluginsDir } from "./bundled-dir.js";
const PUBLIC_SURFACE_SOURCE_EXTENSIONS = [".ts", ".mts", ".js", ".mjs", ".cts", ".cjs"] as const;
export function resolveBundledPluginPublicSurfacePath(params: {
rootDir: string;
dirName: string;
artifactBasename: string;
env?: NodeJS.ProcessEnv;
bundledPluginsDir?: string;
}): string | null {
const artifactBasename = params.artifactBasename.replace(/^\.\//u, "");
if (!artifactBasename) {
return null;
}
const explicitBundledPluginsDir =
params.bundledPluginsDir ?? resolveBundledPluginsDir(params.env ?? process.env);
if (explicitBundledPluginsDir) {
const explicitPluginDir = path.resolve(explicitBundledPluginsDir, params.dirName);
const explicitBuiltCandidate = path.join(explicitPluginDir, artifactBasename);
if (fs.existsSync(explicitBuiltCandidate)) {
return explicitBuiltCandidate;
}
const sourceBaseName = artifactBasename.replace(/\.js$/u, "");
for (const ext of PUBLIC_SURFACE_SOURCE_EXTENSIONS) {
const sourceCandidate = path.join(explicitPluginDir, `${sourceBaseName}${ext}`);
if (fs.existsSync(sourceCandidate)) {
return sourceCandidate;
}
}
}
for (const candidate of [
path.resolve(params.rootDir, "dist", "extensions", params.dirName, artifactBasename),
path.resolve(params.rootDir, "dist-runtime", "extensions", params.dirName, artifactBasename),
]) {
if (fs.existsSync(candidate)) {
return candidate;
}
}
const sourceBaseName = artifactBasename.replace(/\.js$/u, "");
for (const ext of PUBLIC_SURFACE_SOURCE_EXTENSIONS) {
const sourceCandidate = path.resolve(
params.rootDir,
"extensions",
params.dirName,
`${sourceBaseName}${ext}`,
);
if (fs.existsSync(sourceCandidate)) {
return sourceCandidate;
}
}
return null;
}