import { avatarContentTypeForFile, AVATAR_TYPE_ERROR } from "../shared/project-avatar.ts"; export type ProjectAvatarArgs = | { error: string } | { action: "set"; projectId: string; path: string } | { action: "clear"; projectId: string; yes: boolean }; export const PROJECT_AVATAR_USAGE = "Usage: raidiant-hub project avatar set | project avatar clear [--yes]"; /** Parse `project avatar set|clear …` from CLI positional args. */ export const parseProjectAvatarArgs = ( positional: ReadonlyArray, ): ProjectAvatarArgs | undefined => { if (positional[0] !== "project" || positional[1] !== "avatar") return undefined; const flags = positional.filter((value) => value.startsWith("--")); const unknown = flags.find((value) => value !== "--yes"); if (unknown) return { error: `Unknown project avatar option: ${unknown}` }; const values = positional.filter((value) => !value.startsWith("--")); if (values[2] === "set") { if (!values[3] || !values[4]) return { error: PROJECT_AVATAR_USAGE }; if (!avatarContentTypeForFile(values[4])) return { error: AVATAR_TYPE_ERROR }; return { action: "set", projectId: values[3], path: values[4] }; } if (values[2] === "clear") { if (!values[3]) return { error: PROJECT_AVATAR_USAGE }; return { action: "clear", projectId: values[3], yes: flags.includes("--yes") }; } return { error: PROJECT_AVATAR_USAGE }; };