mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 15:30:39 +00:00
100 lines
3.0 KiB
TypeScript
100 lines
3.0 KiB
TypeScript
export const LEGACY_DAEMON_CLI_EXPORTS = [
|
|
"registerDaemonCli",
|
|
"runDaemonInstall",
|
|
"runDaemonRestart",
|
|
"runDaemonStart",
|
|
"runDaemonStatus",
|
|
"runDaemonStop",
|
|
"runDaemonUninstall",
|
|
] as const;
|
|
|
|
type LegacyDaemonCliExport = (typeof LEGACY_DAEMON_CLI_EXPORTS)[number];
|
|
export type LegacyDaemonCliAccessors = {
|
|
registerDaemonCli: string;
|
|
runDaemonRestart: string;
|
|
} & Partial<
|
|
Record<Exclude<LegacyDaemonCliExport, "registerDaemonCli" | "runDaemonRestart">, string>
|
|
>;
|
|
|
|
const EXPORT_SPEC_RE = /^([A-Za-z_$][\w$]*)(?:\s+as\s+([A-Za-z_$][\w$]*))?$/;
|
|
const REGISTER_CONTAINER_RE =
|
|
/(?:var|const|let)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:\/\*[\s\S]*?\*\/\s*)?__exportAll\(\{\s*registerDaemonCli\s*:\s*\(\)\s*=>\s*registerDaemonCli\s*\}\)/;
|
|
|
|
function parseExportAliases(bundleSource: string): Map<string, string> | null {
|
|
const matches = [...bundleSource.matchAll(/export\s*\{([^}]+)\}\s*;?/g)];
|
|
if (matches.length === 0) {
|
|
return null;
|
|
}
|
|
const last = matches.at(-1);
|
|
const body = last?.[1];
|
|
if (!body) {
|
|
return null;
|
|
}
|
|
|
|
const aliases = new Map<string, string>();
|
|
for (const chunk of body.split(",")) {
|
|
const spec = chunk.trim();
|
|
if (!spec) {
|
|
continue;
|
|
}
|
|
const parsed = spec.match(EXPORT_SPEC_RE);
|
|
if (!parsed) {
|
|
return null;
|
|
}
|
|
const original = parsed[1];
|
|
const alias = parsed[2] ?? original;
|
|
aliases.set(original, alias);
|
|
}
|
|
return aliases;
|
|
}
|
|
|
|
function findRegisterContainerSymbol(bundleSource: string): string | null {
|
|
return bundleSource.match(REGISTER_CONTAINER_RE)?.[1] ?? null;
|
|
}
|
|
|
|
export function resolveLegacyDaemonCliAccessors(
|
|
bundleSource: string,
|
|
): LegacyDaemonCliAccessors | null {
|
|
const aliases = parseExportAliases(bundleSource);
|
|
if (!aliases) {
|
|
return null;
|
|
}
|
|
|
|
const registerContainer = findRegisterContainerSymbol(bundleSource);
|
|
const registerContainerAlias = registerContainer ? aliases.get(registerContainer) : undefined;
|
|
const registerDirectAlias = aliases.get("registerDaemonCli");
|
|
|
|
const runDaemonInstall = aliases.get("runDaemonInstall");
|
|
const runDaemonRestart = aliases.get("runDaemonRestart");
|
|
const runDaemonStart = aliases.get("runDaemonStart");
|
|
const runDaemonStatus = aliases.get("runDaemonStatus");
|
|
const runDaemonStop = aliases.get("runDaemonStop");
|
|
const runDaemonUninstall = aliases.get("runDaemonUninstall");
|
|
if (!(registerContainerAlias || registerDirectAlias) || !runDaemonRestart) {
|
|
return null;
|
|
}
|
|
|
|
const accessors: LegacyDaemonCliAccessors = {
|
|
registerDaemonCli: registerContainerAlias
|
|
? `${registerContainerAlias}.registerDaemonCli`
|
|
: registerDirectAlias!,
|
|
runDaemonRestart,
|
|
};
|
|
if (runDaemonInstall) {
|
|
accessors.runDaemonInstall = runDaemonInstall;
|
|
}
|
|
if (runDaemonStart) {
|
|
accessors.runDaemonStart = runDaemonStart;
|
|
}
|
|
if (runDaemonStatus) {
|
|
accessors.runDaemonStatus = runDaemonStatus;
|
|
}
|
|
if (runDaemonStop) {
|
|
accessors.runDaemonStop = runDaemonStop;
|
|
}
|
|
if (runDaemonUninstall) {
|
|
accessors.runDaemonUninstall = runDaemonUninstall;
|
|
}
|
|
return accessors;
|
|
}
|