perf: reduce gateway runtime discovery overhead

This commit is contained in:
Peter Steinberger
2026-05-28 15:47:50 +01:00
parent 7b5f0c23e5
commit 68e6f03fd9
6 changed files with 161 additions and 50 deletions

View File

@@ -1,4 +1,3 @@
import fs from "node:fs";
import { createRequire } from "node:module";
import path from "node:path";
import { pathToFileURL } from "node:url";
@@ -49,8 +48,6 @@ export type PluginModuleLoaderStatsSnapshot = {
const DEFAULT_PLUGIN_MODULE_LOADER_CACHE_ENTRIES = 128;
const MAX_TRACKED_SOURCE_TRANSFORM_TARGETS = 24;
const PLUGIN_SDK_IMPORT_SPECIFIER_PATTERN =
/(?:\bfrom\s*["']|\bimport\s*\(\s*["']|\brequire\s*\(\s*["'])(?:openclaw|@openclaw)\/plugin-sdk(?:\/[^"']*)?["']/u;
const requireForJiti = createRequire(import.meta.url);
let createJitiLoaderFactory: PluginModuleLoaderFactory | undefined;
const pluginModuleLoaderStats = {
@@ -216,29 +213,6 @@ function createLazySourceTransformLoader(params: {
};
}
function shouldForceSourceTransformForPluginSdkAlias(params: {
target: string;
aliasMap: Record<string, string>;
}): boolean {
if (
!params.aliasMap["openclaw/plugin-sdk"] &&
!params.aliasMap["@openclaw/plugin-sdk"] &&
!Object.keys(params.aliasMap).some(
(key) => key.startsWith("openclaw/plugin-sdk/") || key.startsWith("@openclaw/plugin-sdk/"),
)
) {
return false;
}
if (!/\.[cm]?js$/iu.test(params.target)) {
return false;
}
try {
return PLUGIN_SDK_IMPORT_SPECIFIER_PATTERN.test(fs.readFileSync(params.target, "utf-8"));
} catch {
return false;
}
}
function createPluginModuleLoader(params: {
loaderFilename: string;
aliasMap: Record<string, string>;
@@ -271,20 +245,8 @@ function createPluginModuleLoader(params: {
// for TS / TSX sources and for the small set of require(esm) /
// async-module fallbacks `tryNativeRequireJavaScriptModule` declines to
// handle.
const getLoadWithAliasTransform = createLazySourceTransformLoader({
...params,
sourceTransformTryNative: false,
});
return ((target: string, ...rest: unknown[]) => {
pluginModuleLoaderStats.calls += 1;
if (shouldForceSourceTransformForPluginSdkAlias({ target, aliasMap: params.aliasMap })) {
pluginModuleLoaderStats.sourceTransformForced += 1;
recordSourceTransformTarget(target);
return (getLoadWithAliasTransform() as (t: string, ...a: unknown[]) => unknown)(
target,
...rest,
);
}
const native = tryNativeRequireJavaScriptModule(target, {
allowWindows: true,
aliasMap: params.aliasMap,