mirror of
https://github.com/openclaw/openclaw.git
synced 2026-02-19 18:39:20 -05:00
fix (cli): harden daemon compat shim for minimal bundle exports
This commit is contained in:
@@ -51,13 +51,23 @@ if (!resolved?.accessors) {
|
||||
const target = resolved.entry;
|
||||
const relPath = `../${target}`;
|
||||
const { accessors } = resolved;
|
||||
const missingExportError = (name: string) =>
|
||||
`Legacy daemon CLI export "${name}" is unavailable in this build. Please upgrade OpenClaw.`;
|
||||
const buildExportLine = (name: (typeof LEGACY_DAEMON_CLI_EXPORTS)[number]) => {
|
||||
const accessor = accessors[name];
|
||||
if (accessor) {
|
||||
return `export const ${name} = daemonCli.${accessor};`;
|
||||
}
|
||||
if (name === "registerDaemonCli") {
|
||||
return `export const ${name} = () => { throw new Error(${JSON.stringify(missingExportError(name))}); };`;
|
||||
}
|
||||
return `export const ${name} = async () => { throw new Error(${JSON.stringify(missingExportError(name))}); };`;
|
||||
};
|
||||
|
||||
const contents =
|
||||
"// Legacy shim for pre-tsdown update-cli imports.\n" +
|
||||
`import * as daemonCli from "${relPath}";\n` +
|
||||
LEGACY_DAEMON_CLI_EXPORTS.map(
|
||||
(name) => `export const ${name} = daemonCli.${accessors[name]};`,
|
||||
).join("\n") +
|
||||
LEGACY_DAEMON_CLI_EXPORTS.map(buildExportLine).join("\n") +
|
||||
"\n";
|
||||
|
||||
fs.mkdirSync(cliDir, { recursive: true });
|
||||
|
||||
@@ -25,6 +25,18 @@ describe("resolveLegacyDaemonCliAccessors", () => {
|
||||
export { runDaemonRestart as r, daemon_cli_exports as t };
|
||||
`;
|
||||
|
||||
expect(resolveLegacyDaemonCliAccessors(bundle)).toEqual({
|
||||
registerDaemonCli: "t.registerDaemonCli",
|
||||
runDaemonRestart: "r",
|
||||
});
|
||||
});
|
||||
|
||||
it("returns null when the required restart alias is missing", () => {
|
||||
const bundle = `
|
||||
var daemon_cli_exports = /* @__PURE__ */ __exportAll({ registerDaemonCli: () => registerDaemonCli });
|
||||
export { daemon_cli_exports as t };
|
||||
`;
|
||||
|
||||
expect(resolveLegacyDaemonCliAccessors(bundle)).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -9,6 +9,12 @@ export const LEGACY_DAEMON_CLI_EXPORTS = [
|
||||
] 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 =
|
||||
@@ -48,7 +54,7 @@ function findRegisterContainerSymbol(bundleSource: string): string | null {
|
||||
|
||||
export function resolveLegacyDaemonCliAccessors(
|
||||
bundleSource: string,
|
||||
): Record<LegacyDaemonCliExport, string> | null {
|
||||
): LegacyDaemonCliAccessors | null {
|
||||
const aliases = parseExportAliases(bundleSource);
|
||||
if (!aliases) {
|
||||
return null;
|
||||
@@ -64,27 +70,30 @@ export function resolveLegacyDaemonCliAccessors(
|
||||
const runDaemonStatus = aliases.get("runDaemonStatus");
|
||||
const runDaemonStop = aliases.get("runDaemonStop");
|
||||
const runDaemonUninstall = aliases.get("runDaemonUninstall");
|
||||
if (
|
||||
!(registerContainerAlias || registerDirectAlias) ||
|
||||
!runDaemonInstall ||
|
||||
!runDaemonRestart ||
|
||||
!runDaemonStart ||
|
||||
!runDaemonStatus ||
|
||||
!runDaemonStop ||
|
||||
!runDaemonUninstall
|
||||
) {
|
||||
if (!(registerContainerAlias || registerDirectAlias) || !runDaemonRestart) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
const accessors: LegacyDaemonCliAccessors = {
|
||||
registerDaemonCli: registerContainerAlias
|
||||
? `${registerContainerAlias}.registerDaemonCli`
|
||||
: registerDirectAlias!,
|
||||
runDaemonInstall,
|
||||
runDaemonRestart,
|
||||
runDaemonStart,
|
||||
runDaemonStatus,
|
||||
runDaemonStop,
|
||||
runDaemonUninstall,
|
||||
};
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user