openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
78 lines (77 loc) • 3.97 kB
JavaScript
import { t as areBundledPluginsDisabled } from "./bundled-dir-CG-NYRXR.js";
import { a as resolveBundledPluginSourcePublicSurfacePath, i as resolveBundledPluginPublicSurfacePath, n as normalizeBundledPluginArtifactSubpath, t as PUBLIC_SURFACE_SOURCE_EXTENSIONS } from "./public-surface-runtime-DxvCMJwZ.js";
import fs from "node:fs";
import path from "node:path";
//#region src/plugin-sdk/facade-resolution-shared.ts
/**
* Shared resolver for bundled plugin facade module paths and registry fallbacks.
*/
/** Builds the cache key for one facade lookup under the current bundled-plugin mode. */
function createFacadeResolutionKey(params) {
const disabledKey = areBundledPluginsDisabled(params.env ?? process.env) ? "disabled" : "enabled";
return `${params.dirName}::${params.artifactBasename}::${params.bundledPluginsDir ? path.resolve(params.bundledPluginsDir) : "<default>"}::${disabledKey}`;
}
/** Chooses the boundary root that should constrain a resolved facade module. */
function resolveFacadeBoundaryRoot(params) {
if (!params.bundledPluginsDir) return params.packageRoot;
const resolvedBundledPluginsDir = path.resolve(params.bundledPluginsDir);
return params.modulePath.startsWith(`${resolvedBundledPluginsDir}${path.sep}`) ? resolvedBundledPluginsDir : params.packageRoot;
}
/** Resolves a bundled facade from source in dev and built artifacts in dist installs. */
function resolveBundledFacadeModuleLocation(params) {
const env = params.env ?? process.env;
if (areBundledPluginsDisabled(env)) return null;
const preferSource = !params.currentModulePath.includes(`${path.sep}dist${path.sep}`);
const packageSourceRoot = path.resolve(params.packageRoot, "extensions");
const publicSurfaceParams = {
rootDir: params.packageRoot,
env: params.env,
...params.bundledPluginsDir ? { bundledPluginsDir: params.bundledPluginsDir } : {},
dirName: params.dirName,
artifactBasename: params.artifactBasename
};
const modulePath = preferSource ? resolveBundledPluginSourcePublicSurfacePath({
dirName: params.dirName,
artifactBasename: params.artifactBasename,
sourceRoot: params.bundledPluginsDir ?? packageSourceRoot
}) ?? (params.bundledPluginsDir && !areBundledPluginsDisabled(env) ? resolveBundledPluginSourcePublicSurfacePath({
dirName: params.dirName,
artifactBasename: params.artifactBasename,
sourceRoot: packageSourceRoot
}) : null) ?? resolveBundledPluginPublicSurfacePath(publicSurfaceParams) : resolveBundledPluginPublicSurfacePath(publicSurfaceParams);
return modulePath ? {
modulePath,
boundaryRoot: resolveFacadeBoundaryRoot({
modulePath,
bundledPluginsDir: params.bundledPluginsDir,
packageRoot: params.packageRoot
})
} : null;
}
/** Resolves a facade path from manifest registry records using id, folder, then channel matches. */
function resolveRegistryPluginModuleLocationFromRecords(params) {
const tiers = [
(plugin) => plugin.id === params.dirName,
(plugin) => path.basename(plugin.rootDir) === params.dirName,
(plugin) => plugin.channels.includes(params.dirName)
];
const artifactBasename = normalizeBundledPluginArtifactSubpath(params.artifactBasename);
const sourceBaseName = artifactBasename.replace(/\.js$/u, "");
for (const matchFn of tiers) for (const record of params.registry.filter(matchFn)) {
const rootDir = path.resolve(record.rootDir);
for (const builtCandidate of [path.join(rootDir, artifactBasename), path.join(rootDir, "dist", artifactBasename)]) if (fs.existsSync(builtCandidate)) return {
modulePath: builtCandidate,
boundaryRoot: rootDir
};
for (const ext of PUBLIC_SURFACE_SOURCE_EXTENSIONS) {
const sourceCandidate = path.join(rootDir, `${sourceBaseName}${ext}`);
if (fs.existsSync(sourceCandidate)) return {
modulePath: sourceCandidate,
boundaryRoot: rootDir
};
}
}
return null;
}
//#endregion
export { resolveBundledFacadeModuleLocation as n, resolveRegistryPluginModuleLocationFromRecords as r, createFacadeResolutionKey as t };