mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00: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 target = resolved.entry;
|
||||||
const relPath = `../${target}`;
|
const relPath = `../${target}`;
|
||||||
const { accessors } = resolved;
|
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 =
|
const contents =
|
||||||
"// Legacy shim for pre-tsdown update-cli imports.\n" +
|
"// Legacy shim for pre-tsdown update-cli imports.\n" +
|
||||||
`import * as daemonCli from "${relPath}";\n` +
|
`import * as daemonCli from "${relPath}";\n` +
|
||||||
LEGACY_DAEMON_CLI_EXPORTS.map(
|
LEGACY_DAEMON_CLI_EXPORTS.map(buildExportLine).join("\n") +
|
||||||
(name) => `export const ${name} = daemonCli.${accessors[name]};`,
|
|
||||||
).join("\n") +
|
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
fs.mkdirSync(cliDir, { recursive: true });
|
fs.mkdirSync(cliDir, { recursive: true });
|
||||||
|
|||||||
@@ -25,6 +25,18 @@ describe("resolveLegacyDaemonCliAccessors", () => {
|
|||||||
export { runDaemonRestart as r, daemon_cli_exports as t };
|
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();
|
expect(resolveLegacyDaemonCliAccessors(bundle)).toBeNull();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ export const LEGACY_DAEMON_CLI_EXPORTS = [
|
|||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
type LegacyDaemonCliExport = (typeof LEGACY_DAEMON_CLI_EXPORTS)[number];
|
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 EXPORT_SPEC_RE = /^([A-Za-z_$][\w$]*)(?:\s+as\s+([A-Za-z_$][\w$]*))?$/;
|
||||||
const REGISTER_CONTAINER_RE =
|
const REGISTER_CONTAINER_RE =
|
||||||
@@ -48,7 +54,7 @@ function findRegisterContainerSymbol(bundleSource: string): string | null {
|
|||||||
|
|
||||||
export function resolveLegacyDaemonCliAccessors(
|
export function resolveLegacyDaemonCliAccessors(
|
||||||
bundleSource: string,
|
bundleSource: string,
|
||||||
): Record<LegacyDaemonCliExport, string> | null {
|
): LegacyDaemonCliAccessors | null {
|
||||||
const aliases = parseExportAliases(bundleSource);
|
const aliases = parseExportAliases(bundleSource);
|
||||||
if (!aliases) {
|
if (!aliases) {
|
||||||
return null;
|
return null;
|
||||||
@@ -64,27 +70,30 @@ export function resolveLegacyDaemonCliAccessors(
|
|||||||
const runDaemonStatus = aliases.get("runDaemonStatus");
|
const runDaemonStatus = aliases.get("runDaemonStatus");
|
||||||
const runDaemonStop = aliases.get("runDaemonStop");
|
const runDaemonStop = aliases.get("runDaemonStop");
|
||||||
const runDaemonUninstall = aliases.get("runDaemonUninstall");
|
const runDaemonUninstall = aliases.get("runDaemonUninstall");
|
||||||
if (
|
if (!(registerContainerAlias || registerDirectAlias) || !runDaemonRestart) {
|
||||||
!(registerContainerAlias || registerDirectAlias) ||
|
|
||||||
!runDaemonInstall ||
|
|
||||||
!runDaemonRestart ||
|
|
||||||
!runDaemonStart ||
|
|
||||||
!runDaemonStatus ||
|
|
||||||
!runDaemonStop ||
|
|
||||||
!runDaemonUninstall
|
|
||||||
) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
const accessors: LegacyDaemonCliAccessors = {
|
||||||
registerDaemonCli: registerContainerAlias
|
registerDaemonCli: registerContainerAlias
|
||||||
? `${registerContainerAlias}.registerDaemonCli`
|
? `${registerContainerAlias}.registerDaemonCli`
|
||||||
: registerDirectAlias!,
|
: registerDirectAlias!,
|
||||||
runDaemonInstall,
|
|
||||||
runDaemonRestart,
|
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