Files
kandev/apps/web/components/settings/profile-edit/serialize-executor-config.ts
T
2026-08-16 21:13:41 +00:00

63 lines
2.3 KiB
TypeScript

import type { NetworkPolicyRule } from "@/lib/api/domains/settings-api";
export type ExecutorProfileConfigForm = {
isSprites: boolean;
networkPolicyRules: NetworkPolicyRule[];
isRemote: boolean;
remoteCredentials: string[];
configBundleIds: string[];
agentEnvVars: Record<string, string | null>;
gitIdentityMode: "local" | "override";
localGitIdentity: { userName: string; userEmail: string };
gitUserName: string;
gitUserEmail: string;
isDocker: boolean;
dockerfile: string;
imageTag: string;
isSSH: boolean;
sshShell: string;
};
export function buildSaveConfig(
form: ExecutorProfileConfigForm,
baseConfig: Record<string, string> = {},
): Record<string, string> {
const config = { ...baseConfig };
setJsonConfig(config, "sprites_network_policy_rules", form.isSprites, form.networkPolicyRules);
setJsonConfig(config, "remote_credentials", form.isRemote, form.remoteCredentials);
setJsonConfig(config, "agent_config_bundles", form.isRemote, form.configBundleIds);
const envVars = Object.fromEntries(
Object.entries(form.agentEnvVars).filter(([, v]) => v != null),
);
setJsonConfig(config, "remote_auth_secrets", form.isRemote, envVars);
const gitName =
form.gitIdentityMode === "local" ? form.localGitIdentity.userName : form.gitUserName;
const gitEmail =
form.gitIdentityMode === "local" ? form.localGitIdentity.userEmail : form.gitUserEmail;
setTextConfig(config, "git_user_name", form.isRemote ? gitName.trim() : "");
setTextConfig(config, "git_user_email", form.isRemote ? gitEmail.trim() : "");
setTextConfig(config, "dockerfile", form.isDocker ? form.dockerfile : "");
setTextConfig(config, "image_tag", form.isDocker ? form.imageTag.trim() : "");
setTextConfig(config, "ssh_shell", form.isSSH ? form.sshShell.trim() : "");
return config;
}
function setJsonConfig(
config: Record<string, string>,
key: string,
enabled: boolean,
value: unknown,
): void {
const hasValue = Array.isArray(value)
? value.length > 0
: value !== null && typeof value === "object" && Object.keys(value).length > 0;
if (enabled && hasValue) config[key] = JSON.stringify(value);
else delete config[key];
}
function setTextConfig(config: Record<string, string>, key: string, value: string): void {
if (value && value.trim()) config[key] = value;
else delete config[key];
}